<?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>158684</bug_id>
          
          <creation_ts>2016-06-12 20:22:28 -0700</creation_ts>
          <short_desc>Move the BitmapImage platform dependent code to a new file named NativeImage[CG|Cairo].cpp</short_desc>
          <delta_ts>2016-09-12 14:12:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>155322</blocked>
    
    <blocked>155444</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1201769</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-12 20:22:28 -0700</bug_when>
    <thetext>This addresses one of the review comments of https://bugs.webkit.org/show_bug.cgi?id=155444.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201770</commentid>
    <comment_count>1</comment_count>
      <attachid>281150</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-12 20:25:08 -0700</bug_when>
    <thetext>Created attachment 281150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201783</commentid>
    <comment_count>2</comment_count>
      <attachid>281155</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-12 21:52:59 -0700</bug_when>
    <thetext>Created attachment 281155
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201786</commentid>
    <comment_count>3</comment_count>
      <attachid>281156</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-12 22:18:14 -0700</bug_when>
    <thetext>Created attachment 281156
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201788</commentid>
    <comment_count>4</comment_count>
      <attachid>281157</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-12 22:35:14 -0700</bug_when>
    <thetext>Created attachment 281157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201794</commentid>
    <comment_count>5</comment_count>
      <attachid>281158</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-12 22:49:39 -0700</bug_when>
    <thetext>Created attachment 281158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201799</commentid>
    <comment_count>6</comment_count>
      <attachid>281160</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-13 00:06:54 -0700</bug_when>
    <thetext>Created attachment 281160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227643</commentid>
    <comment_count>7</comment_count>
      <attachid>288280</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-08 11:03:00 -0700</bug_when>
    <thetext>Created attachment 288280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227649</commentid>
    <comment_count>8</comment_count>
      <attachid>288283</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-08 11:08:37 -0700</bug_when>
    <thetext>Created attachment 288283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227664</commentid>
    <comment_count>9</comment_count>
      <attachid>288291</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-08 11:40:54 -0700</bug_when>
    <thetext>Created attachment 288291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227750</commentid>
    <comment_count>10</comment_count>
      <attachid>288291</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-08 13:49:59 -0700</bug_when>
    <thetext>Comment on attachment 288291
Patch

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

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:402
&gt; +NativeImagePtr BitmapImage::nativeImageOfSize(const IntSize&amp; size)
&gt; +{
&gt; +    size_t count = frameCount();
&gt; +    
&gt; +    for (size_t i = 0; i &lt; count; ++i) {
&gt; +        auto image = frameImageAtIndex(i);
&gt; +        if (image &amp;&amp; sizeOfImage(image) == size)
&gt; +            return image;
&gt; +    }
&gt; +    
&gt; +    // Fallback to the first frame image if we can&apos;t find the right size
&gt; +    return frameImageAtIndex(0);
&gt; +}

This was only used for CG for icons. I don&apos;t think you should generalize it for all platforms.

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:420
&gt; +Vector&lt;NativeImagePtr&gt; BitmapImage::framesNativeImages()
&gt; +{
&gt; +    Vector&lt;NativeImagePtr&gt; images;
&gt; +    size_t count = frameCount();
&gt; +    
&gt; +    for (size_t i = 0; i &lt; count; ++i) {
&gt; +        if (auto image = frameImageAtIndex(i))
&gt; +            images.append(image);
&gt; +    }
&gt; +    
&gt; +    return images;
&gt; +}

Ditto.

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:475
&gt; +    if (!haveFrameImageAtIndex(0) &amp;&amp; m_source.frameSizeAtIndex(0, 0) != IntSize(1, 1)) {

Isn&apos;t that second 0 a subsampling level?

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:481
&gt; +    if (!ensureFrameIsCached(0))

What does this 0 mean? Would be nicer if the function name had &quot;at index&quot; in it.

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:552
&gt; +    if (!m_cachedImage) {

Blank line above this please.

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:594
&gt; +    m_frameTimer = std::make_unique&lt;Timer&gt;(*this, &amp;BitmapImage::advanceAnimation);

This is odd. Normally we store Timers by value.

&gt; Source/WebCore/platform/graphics/BitmapImage.h:62
&gt; -        , m_hasAlpha(true)
&gt; +        , m_hasAlpha(false)

Why? m_hasAlpha(false) is the &quot;safe&quot; value (if we get it wrong, we risk drawing garbage pixels).

&gt; Source/WebCore/platform/graphics/BitmapImage.h:72
&gt;      // Returns whether there was cached image data to clear.

Comment is no longer accurate.

&gt; Source/WebCore/platform/graphics/BitmapImage.h:80
&gt; +        m_subsamplingLevel = 0;

Don&apos;t we have enums for this?

&gt; Source/WebCore/platform/graphics/NativeImage.h:59
&gt; +IntSize sizeOfImage(const NativeImagePtr&amp;);
&gt; +bool hasAlphaOfImage(const NativeImagePtr&amp;);
&gt; +Color singlePixelSolidColorOfImage(const NativeImagePtr&amp;);

Why the &quot;OfImage&quot;? Old names seem fine.

&gt; Source/WebCore/platform/graphics/NativeImage.h:64
&gt; +void drawImage(const NativeImagePtr&amp;, GraphicsContext&amp;, const FloatRect&amp;, const FloatRect&amp;, const IntSize&amp;, CompositeOperator, BlendMode, const ImageOrientation&amp;);
&gt; +void clearImageSubImages(const NativeImagePtr&amp;);

Maybe drawNativeImage, clearNativeImageSubImages

&gt; Source/WebCore/platform/graphics/cg/NativeImageCG.cpp:52
&gt; +    // FIXME: Answer correctly the question: does the CGImageRef have alpha channnel?

ImageDiff implements this as:
    CGImageAlphaInfo info = CGImageGetAlphaInfo(image);    
    return (info &gt;= kCGImageAlphaPremultipliedLast) &amp;&amp; (info &lt;= kCGImageAlphaFirst);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227864</commentid>
    <comment_count>11</comment_count>
      <attachid>288336</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-08 15:07:22 -0700</bug_when>
    <thetext>Created attachment 288336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227941</commentid>
    <comment_count>12</comment_count>
      <attachid>288361</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-08 16:52:55 -0700</bug_when>
    <thetext>Created attachment 288361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227975</commentid>
    <comment_count>13</comment_count>
      <attachid>288361</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 18:08:49 -0700</bug_when>
    <thetext>Comment on attachment 288361
Patch

Clearing flags on attachment: 288361

Committed r205682: &lt;http://trac.webkit.org/changeset/205682&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227976</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 18:08:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228888</commentid>
    <comment_count>15</comment_count>
      <attachid>288291</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-12 14:12:10 -0700</bug_when>
    <thetext>Comment on attachment 288291
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:402
&gt;&gt; +}
&gt; 
&gt; This was only used for CG for icons. I don&apos;t think you should generalize it for all platforms.

Done. nativeImageOfSize() and framesNativeImages() are now declared and implemented within if USE(CG) ... #endif.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:475
&gt;&gt; +    if (!haveFrameImageAtIndex(0) &amp;&amp; m_source.frameSizeAtIndex(0, 0) != IntSize(1, 1)) {
&gt; 
&gt; Isn&apos;t that second 0 a subsampling level?

Done. the SubsamplingLevel enum is defined in ImageSource.h

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:481
&gt;&gt; +    if (!ensureFrameIsCached(0))
&gt; 
&gt; What does this 0 mean? Would be nicer if the function name had &quot;at index&quot; in it.

Done. This function is now named ensureFrameAtIndexIsCached().

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:552
&gt;&gt; +    if (!m_cachedImage) {
&gt; 
&gt; Blank line above this please.

Done. A new line is added.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:594
&gt;&gt; +    m_frameTimer = std::make_unique&lt;Timer&gt;(*this, &amp;BitmapImage::advanceAnimation);
&gt; 
&gt; This is odd. Normally we store Timers by value.

This is how it was implemented. I will clean it up in a follow-up patch.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.h:62
&gt;&gt; +        , m_hasAlpha(false)
&gt; 
&gt; Why? m_hasAlpha(false) is the &quot;safe&quot; value (if we get it wrong, we risk drawing garbage pixels).

m_hasAlpha can be initialized with false because it is accessed only in BitmapImage::frameHasAlphaAtIndex() and it is guarded by m_haveMetadata. Both m_haveMetadata and m_hasAlpha are set in BitmapImage constructor and in BitmapImage::cacheFrame().

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.h:72
&gt;&gt;      // Returns whether there was cached image data to clear.
&gt; 
&gt; Comment is no longer accurate.

The comment was removed.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.h:80
&gt;&gt; +        m_subsamplingLevel = 0;
&gt; 
&gt; Don&apos;t we have enums for this?

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/NativeImage.h:59
&gt;&gt; +Color singlePixelSolidColorOfImage(const NativeImagePtr&amp;);
&gt; 
&gt; Why the &quot;OfImage&quot;? Old names seem fine.

Fixed. Names were changed to:
nativeImageSize()
nativeImageHasAlpha()
nativeImageSinglePixelSolidColor()

&gt;&gt; Source/WebCore/platform/graphics/NativeImage.h:64
&gt;&gt; +void clearImageSubImages(const NativeImagePtr&amp;);
&gt; 
&gt; Maybe drawNativeImage, clearNativeImageSubImages

Fixed. Names were changed as suggested.

&gt;&gt; Source/WebCore/platform/graphics/cg/NativeImageCG.cpp:52
&gt;&gt; +    // FIXME: Answer correctly the question: does the CGImageRef have alpha channnel?
&gt; 
&gt; ImageDiff implements this as:
&gt;     CGImageAlphaInfo info = CGImageGetAlphaInfo(image);    
&gt;     return (info &gt;= kCGImageAlphaPremultipliedLast) &amp;&amp; (info &lt;= kCGImageAlphaFirst);

Forgot to add in the &lt;http://trac.webkit.org/changeset/205682&gt;. I will add it in a follow up patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281150</attachid>
            <date>2016-06-12 20:25:08 -0700</date>
            <delta_ts>2016-06-12 21:52:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160612202641.patch</filename>
            <type>text/plain</type>
            <size>80107</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNjQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNmMmE0ZTliZWMyOTY4
MDhhMDliMjI1ZWMzOWY1ZDgzNzc3ZmY0OC4uYTU3NTI2Yjk5YTdjNzM1ZTZkNjZmZTc0MzA3NTNl
YWRiN2NiZTY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxNi0wNi0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIEludHJv
ZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBlciBmb3IgTmF0aXZlSW1h
Z2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
ZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBpcyB0byBtb3ZlIHRoZSBwbGF0Zm9y
bSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9tIEJpdG1hcEltYWdlIHRvIFBsYXRm
b3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2libGUgb2YgCisgICAgICAgIGRyYXdp
bmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1hZ2VQdHIgcXVlc3Rpb25zIHdoZW4g
YW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFpbGFibGUuIEFwYXJ0IGZyb20gZHJh
d2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMgd2lsbCBiZQorICAgICAgICBjYWxs
ZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0YSBzbyB3ZSB3aWxsIGtlZXAgZXZl
cnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRyLiBCdXQgd2Ugd2lsbCBjYXN0IHRo
ZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdoZW4KKyAgICAgICAgYSBwbGF0Zm9y
bSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAt
LSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBQbGF0
Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQ
bGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgKC1b
RE9NTm9kZSBnZXRQcmV2aWV3U25hcHNob3RJbWFnZTphbmRSZWN0czpdKToKKyAgICAgICAgKiBs
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFi
YXNlOjpzeW5jaHJvbm91c05hdGl2ZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKiBwYWdlL21h
Yy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tOgorICAgICAgICAoLVtXZWJUZXh0SW5kaWNhdG9yVmll
dyBpbml0V2l0aEZyYW1lOnRleHRJbmRpY2F0b3I6bWFyZ2luOm9mZnNldDpdKToKKyAgICAgICAg
KGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpC
aXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29k
ZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERh
dGFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGF0YUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZU5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6RnJhbWVEYXRhKToK
KyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBmYWxzZSBiZWNhdXNl
IGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAgQml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxw
aGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkgbV9oYXZlTWV0YWRhdGEuCisgICAgICAg
IEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxwaGEgYXJlIHNldCBpbiBCaXRtYXBJbWFn
ZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoKS4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6On5GcmFtZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6IFJldHVybiB0aGUgZnJhbWVCeXRlcyB3
aGVuIHRoZSBGcmFtZURhdGEgaGFzIGFuIGltYWdlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpjdXJyZW50RnJhbWVOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZTo6Y3VycmVudEZyYW1lT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
OmZyYW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om9y
aWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpn
ZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUNHLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6
OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNOaWwp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6
OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdl
Ojppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENH
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rv
cjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxh
dGZvcm1JbWFnZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdl
OjpjbGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9t
IFBsdWdpblZpZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9u
IGJlbG9uZ3MgdG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGlu
Z1NjYWxlKTogUmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250
ZXh0IHNjYWxpbmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNv
Y29hLm1tOgorICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJh
Z0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmlzRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFn
ZUZvckNvbnRhaW5lcjo6Y3VycmVudEZyYW1lTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2VGb3JDb250YWluZXI6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaDoKKwog
MjAxNi0wNi0wMyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVzb3VyY2VSZXNwb25zZUJhc2UgY2xlYW51cC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA5OGQyYmU2
ZDgzMDQ2MDc2MTYzMTcyNmEyZTllYzFiYWFmODY5MTQ1Li45NzNkZGFiMjE2OTAyMzFkN2I5Nzc2
ZTM1ZTUwMzQ2OGU1NjU1NjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTYtMDYtMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNvbT4KKwor
ICAgICAgICBJbnRyb2R1Y2UgUGxhdGZvcm1JbWFnZSBhbmQgbWFrZSBpdCBpcyBhIHdyYXBwZXIg
Zm9yIE5hdGl2ZUltYWdlUHRyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTg2ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE1pc2MvV2ViQ2FjaGUubW06CisgICAgICAgICgrW1dlYkNhY2hlIGltYWdl
Rm9yVVJMOl0pOgorCiAyMDE2LTA2LTAyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBj
cmYuY2Fub24uZnI+CiAKICAgICAgICAgQWRkIFdlYklETCBzcGVjaWFsIG9wZXJhdGlvbiBzdXBw
b3J0OiBzZXJpYWxpemVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZWFmZDIzNGNkZmQyOTJlNmRhYmQ3ZDJkMmE1
ZTNlM2RkZjc2NDg5My4uMzBkOTFlNWM3ZTBjZDJkZTVhOGFiNmQ3OGE2YTVmYmM4YWZhN2I0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA2LTEyICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3Jt
SW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdl
dENHSW1hZ2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFy
cmF5Rm9yVVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdo
aWNoIHVzZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJp
dG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1
cm5lZAorICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVm
LgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RG
b3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFw
c2hvdFRpbWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xp
ZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxt
b3N0U29saWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwog
MjAxNi0wNi0wMyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIEZpeCB0aGUgIUVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSBidWlsZCBhZnRlciByMjAxNTc1
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDMyOWExNjA3OTE4OTg2MTAzYzYwZTBiNjBk
NDBjZWUwZWY2YmM2ODEuLmNkZmQ5YWFiYzBjZWRhNWUzMWZjNzdjODUyMjRmZTQ4N2Q4NGI5Yzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5
LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENh
aXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bh
dGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CmluZGV4IGQ3MWNlZWU1NzUyZTM1OGViZjkyODhiZjUxNDlkN2Y4ZDE2MTc1ZTcuLjkyNTAyYTQ0
OTI1MGViMTkxOTRlZWEyZjZhMGJmNjliN2Y3YmM3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC05OCw3ICs5OCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTIsNiArMTExLDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmlu
ZGV4IDJjNTUzYjA1NTFkYWQ2OWFhMTk5ZDk2MGY1NTIzNDNkOTIwZjA3YjMuLmMyMDMwOTFhOTM5
YzZmN2EyMmNmYmY4OWY4MmIwYzMxZWQ5MmJhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5D
YWlyby5jbWFrZQpAQCAtMjEsNyArMjEsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0
bWFwSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxp
dGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0zNCw2ICszMyw3
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDk1ODcyZDNhYzZl
ZWEyNjVhZTMxNTkyYjI3MjI5OWM0ZmYyZTMzYi4uYWIxYTQ5Y2Y5NjQwNDU5ZTRlYjdiYmRjY2Zj
ZTM3OWEwZDIwOWJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTQzNCw3ICsxNDM0LDcgQEAKIAkJMzc1Q0QyMzIxMTlENDND
ODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24u
aCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc2RENDRTAxM0I0Rjk2
NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdE
RTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3Zlcmxh
cFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNB
OEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovOyB9OworCQkzNzdBM0E5
MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAv
KiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMyMzBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkx
OUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4NUVGMzkwMEY0QjY2MSAvKiBD
cmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIyNzgsNiArMjI3
OCw3IEBACiAJCTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2
MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFn
ZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9
OwogCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIw
MDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBC
OUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJB
N0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAv
KiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAq
LzsgfTsKIAkJNTgwMzcxNjExQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MDM3MTVGMUE2NkYwMEEw
MEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgKi87IH07CkBAIC04OTQzLDcgKzg5NDQsNyBAQAogCQkz
NzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAv
KiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxh
dGZvcm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBs
YXRmb3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIx
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRl
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRC
NjYxIC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENyZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODc1LDYg
Kzk4NzYsNyBAQAogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFs
aWZpZWROYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUx
RDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4
MDBDNzg0NTAgLyogU1ZHSW1hZ2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0ltYWdlQ2xpZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxODI0LDcgKzIxODI2LDYgQEAKIAkJ
QjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFw
SW1hZ2VDRy5jcHAgKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cu
Y3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3Bw
ICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8s
CkBAIC0yMTg1MSw2ICsyMTg1Miw3IEBACiAJCQkJQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8q
IFBhdHRlcm5DRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzYwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRv
Y3VtZW50SW1hZ2UuY3BwICovLAogCQkJCUIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZE
b2N1bWVudEltYWdlLmggKi8sCisJCQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRm
b3JtSW1hZ2VDRy5jcHAgKi8sCiAJCQkJMUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlFIC8qIFN1Ymlt
YWdlQ2FjaGVXaXRoVGltZXIuY3BwICovLAogCQkJCTFGQzQwRkI3MTY1NUM1OTEwMDQwRjI5RSAv
KiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi8sCiAJCQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNF
NjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwICovLApAQCAtMjIwNTEsNiArMjIwNTMs
NyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8s
CiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4
RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhG
MDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4
NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2
RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1NzkxLDYgKzI1
Nzk0LDcgQEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1l
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVF
IC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEw
QzAzQjc0MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxN
ZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2
QSAvKiBET01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
QkE0RDEzMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjkxNTIsNyArMjkxNTYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTEx
NyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJC
MDI2NzYwMEMxQTM1OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTg5OTQzMjkwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdl
Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJs
b2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAv
KiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5NmYxYjgzYjgx
ZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAodm9pZClnZXRQ
cmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNBcnJh
eSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAgaWYgKEltYWdl
KiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAgICAgICAgKmNn
SW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4oaW1hZ2UtPmdl
dENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCBlMWVkYTVj
YWExZDAwNWMwY2RlYTExM2M2NWIwNTk4Mzk1MzRmMDcyLi5jZmUyNWExYTBkMTFlNzc3YWYxMWE0
ZjAwOTcyYWZhMGIxMTY1MGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNv
bi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBOYXRpdmVJbWFnZVB0ciBJY29uRGF0YWJh
c2U6OnN5bmNocm9ub3VzTmF0aXZlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdXJsQW5k
SWNvbkxvY2spOwotICAgIHJldHVybiBpY29uLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OworICAgIHJldHVybiBpY29uLT5jdXJyZW50RnJhbWVOYXRpdmVJbWFnZSgpOwogfQogCiB2b2lk
IEljb25EYXRhYmFzZTo6cmVhZEljb25Gb3JQYWdlVVJMRnJvbURpc2soY29uc3QgU3RyaW5nJiBw
YWdlVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4
NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUo
MSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHND
b250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3Vu
Y2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAt
MjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3Jl
YXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAg
UmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2lj
QW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
ICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNd
OwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggMDY3NmNlMDcyNTA3NmJiOTVjY2QyNmM1YzFhNTI4ZDE2M2E0NjUyYS4uY2I3Y2Q1Yjk1ODVk
M2Q2MjFmYTAzOTUwODMwMzExM2YxZDY3YzQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNzAsMTEgKzcwLDExIEBAIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKIHsKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2Ug
Y2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBu
b3QgMHgwLgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2
ZUltYWdlOjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBt
X3NpemUgPSBQbGF0Zm9ybUltYWdlKGltYWdlKS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9
IG1fc2l6ZS5hcmVhKCkgKiA0OwotICAgIAorCiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKLSAgICBt
X2ZyYW1lc1swXS5tX2hhc0FscGhhID0gTmF0aXZlSW1hZ2U6Omhhc0FscGhhKGltYWdlKTsKKyAg
ICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gUGxhdGZvcm1JbWFnZShpbWFnZSkuaGFzQWxwaGEo
KTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAgICAgbV9mcmFtZXNb
MF0ubV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOwogfQpAQCAtMTI1LDkgKzEyNSw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAg
IC8vIFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBq
dXN0IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1
ZmZlciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0
YWRhdGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1l
Qnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAg
ICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xl
YXJlZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSk7CiAgICAgfQogCiAgICAgbV9zb3VyY2Uu
Y2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSwgZGF0YSgpLCBtX2FsbERhdGFSZWNl
aXZlZCk7CkBAIC0xNTAsOCArMTQ4LDggQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29k
ZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxsKQogICAgICAgICByZXR1cm47CiAKICAg
ICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IG1fZnJhbWVz
W2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IG1fZnJhbWVzKQor
ICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLnVzZWRGcmFtZUJ5dGVzKCk7CiAKICAgICBp
ZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKSB7CiAgICAgICAgIExPRyhJ
bWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeSBkZXN0
cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9JXUiLCB0aGlzLCBhbGxGcmFtZUJ5
dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0yODgsMjEgKzI4NiwxOSBAQCBib29sIEJp
dG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBmcmFt
ZSBhZmZlY3RlZCBieSBhcHBlbmRpbmcgbmV3IGRhdGEgaGVyZS4gVGh1cyB3ZSBoYXZlIHRvIGNs
ZWFyIGFsbCB0aGUKICAgICAvLyBpbmNvbXBsZXRlIGZyYW1lcyB0byBiZSBzYWZlLgogICAgIHVu
c2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IG1fZnJhbWVz
KSB7CiAgICAgICAgIC8vIE5PVEU6IERvbid0IGNhbGwgZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgp
IGhlcmUsIHRoYXQgd2lsbCB0cnkgdG8KICAgICAgICAgLy8gZGVjb2RlIGFueSB1bmNhY2hlZCAo
aS5lLiBuZXZlci1kZWNvZGVkIG9yCiAgICAgICAgIC8vIGNsZWFyZWQtb24tYS1wcmV2aW91cy1w
YXNzKSBmcmFtZXMhCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5t
X2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5tX2hhdmVNZXRhZGF0YSAmJiAh
bV9mcmFtZXNbaV0ubV9pc0NvbXBsZXRlKQotICAgICAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQg
Kz0gKG1fZnJhbWVzW2ldLmNsZWFyKHRydWUpID8gZnJhbWVCeXRlcyA6IDApOworICAgICAgICBp
ZiAoZnJhbWUubV9oYXZlTWV0YWRhdGEgJiYgIWZyYW1lLm1faXNDb21wbGV0ZSkKKyAgICAgICAg
ICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lLmNsZWFyKHRydWUpOwogICAgIH0KICAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6
Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9T
PwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2Zy
YW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVh
cih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIodHJ1ZSkpIHsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gYnl0ZXM7
CiAgICAgICAgICAgICBkZWx0YUJ5dGVzICs9IG1fZGVjb2RlZFByb3BlcnRpZXNTaXplOwogICAg
ICAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUgPSAwOwpAQCAtMzkwLDggKzM4Niw3IEBA
IE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5k
ZXgsIGZsb2F0IHByZXNlbnRhdGlvblNjCiAgICAgLy8gcmUtZGVjb2RlIHdpdGggYSBsb3dlciBs
ZXZlbC4KICAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhd
Lm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBs
aW5nTGV2ZWwpIHsKICAgICAgICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBi
dXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAg
ICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAg
ICAgIG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2Ug
PSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFyKHRydWUpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZv
cm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsKICAgICAgICAg
aWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTQwNCw2ICszOTksNDMgQEAgTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJlc2Vu
dGF0aW9uU2MKIAogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKIH0KKyAgICAK
K05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJu
IGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc2l6ZV90
IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgeworICAgICAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSk7
CisgICAgICAgIGlmIChpbWFnZSAmJiBQbGF0Zm9ybUltYWdlKGltYWdlKS5zaXplKCkgPT0gc2l6
ZSkKKyAgICAgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9CisgICAgCisgICAgLy8gRmFsbGJh
Y2sgdG8gdGhlIGZpcnN0IGZyYW1lIGltYWdlIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNp
emUKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVy
biBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Cit9CisKK1ZlY3RvcjxOYXRpdmVJ
bWFnZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9y
PE5hdGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgp
OworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICBpZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1h
Z2VzLmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7Cit9CiAK
IGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ewpAQCAtNDIxLDExICs0NTMsNiBAQCBmbG9hdCBCaXRtYXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0
SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlv
bjsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkp
OwotfQotCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5k
ZXgpCiB7CiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRh
T25seSkpCkBAIC03MDAsMTcgKzcyNyw1NCBAQCBDb2xvciBCaXRtYXBJbWFnZTo6c2luZ2xlUGl4
ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJU
KG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9yID0gTmF0aXZlSW1hZ2U6OnNpbmds
ZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdlLmdldCgpKTsKKyAgICBtX3NvbGlk
Q29sb3IgPSBQbGF0Zm9ybUltYWdlKG1fZnJhbWVzWzBdLm1faW1hZ2UpLnNpbmdsZVBpeGVsU29s
aWRDb2xvcigpOwogICAgIAogICAgIEFTU0VSVChtX3NvbGlkQ29sb3IpOwogICAgIHJldHVybiBt
X3NvbGlkQ29sb3IudmFsdWUoKTsKIH0KICAgICAKK2Jvb2wgQml0bWFwSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcigpCit7CisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KDApOwor
ICAgIHJldHVybiAhaW1hZ2UgPyBmYWxzZSA6IFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmlzQWxtb3N0
U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0ZSgpCiB7
CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkgPiAxOwogfQogCit2
b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNj
cmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRBbmlt
YXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRpb24oKTsKKyNlbmRp
ZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7CisgICAg
aWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4
dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBQbGF0Zm9y
bUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0KSk7Cisg
ICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFn
ZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAgaWYgKGRlc2NyaXB0
aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24p
CisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50
RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXcoY29udGV4dCwgZGVz
dFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9uKTsKKyAgICAKKyAg
ICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXco
dGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBj
b25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFkYWNmMDJiNmVkOGVl
YWZlN2RlZmQ2NmYwYzUuLjJkNWViZDczMDIyZjU3ZDUyMTlhYjM3ZTNjZDJjNjBmN2VjYzkzZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRl
ICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUltYWdlLmgiCiAKICNpZiBVU0UoQ0cpIHx8IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgpAQCAtNDcsMjUgKzQ4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpI
QklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVE
YXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JU
cmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0
cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0g
ZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRhIG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAg
IH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFj
ZSBOYXRpdmVJbWFnZSB7Ci0gICAgSW50U2l6ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7
Ci0gICAgYm9vbCBoYXNBbHBoYShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNp
bmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotfQotCiAvLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIEZyYW1lRGF0
YSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CkBAIC03NSwxOCArNjAsMzAgQEAgcHVibGljOgogICAgIEZyYW1lRGF0YSgpCiAgICAgICAg
IDogbV9oYXZlTWV0YWRhdGEoZmFsc2UpCiAgICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQot
ICAgICAgICAsIG1faGFzQWxwaGEodHJ1ZSkKKyAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQog
ICAgIHsKICAgICB9CiAKICAgICB+RnJhbWVEYXRhKCkKLSAgICB7IAotICAgICAgICBjbGVhcih0
cnVlKTsKKyAgICB7CisgICAgICAgIGlmIChtX2ltYWdlKQorICAgICAgICAgICAgUGxhdGZvcm1J
bWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygpOwogICAgIH0KIAogICAgIC8vIENsZWFyIHRo
ZSBjYWNoZWQgaW1hZ2UgZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1l
dGFkYXRhLgogICAgIC8vIFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRh
dGEgdG8gY2xlYXIuCi0gICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOworICAgIHVu
c2lnbmVkIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGZyYW1lQnl0ZXMgPSB1c2VkRnJhbWVCeXRlcygpOworICAgICAgICAKKyAgICAgICAgaWYgKGNs
ZWFyTWV0YWRhdGEpCisgICAgICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOworCisgICAg
ICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7CisgICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwor
CisgICAgICAgIHJldHVybiBmcmFtZUJ5dGVzOworICAgIH0KICAgICAKICAgICB1bnNpZ25lZCB1
c2VkRnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ZyYW1lQnl0ZXMgOiAw
OyB9CiAKQEAgLTE1NSwxMiArMTUyLDYgQEAgcHVibGljOgogICAgIENGRGF0YVJlZiBnZXRUSUZG
UmVwcmVzZW50YXRpb24oKSBvdmVycmlkZTsKICNlbmRpZgogCi0jaWYgVVNFKENHKQotICAgIFdF
QkNPUkVfRVhQT1JUIENHSW1hZ2VSZWYgZ2V0Q0dJbWFnZVJlZigpIG92ZXJyaWRlOwotICAgIENH
SW1hZ2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlk
ZTsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFycmF5KCkgb3ZlcnJpZGU7
Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTikKICAgICBib29sIGdldEhCSVRNQVAoSEJJVE1B
UCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAsIGNvbnN0IElu
dFNpemUqKSBvdmVycmlkZTsKQEAgLTE3NCw4ICsxNjUsMTMgQEAgcHVibGljOgogICAgIEV2YXNf
T2JqZWN0KiBnZXRFdmFzT2JqZWN0KEV2YXMqKSBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgTmF0
aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKLSAgICBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CisgICAgV0VC
Q09SRV9FWFBPUlQgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKyAgICBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7
CisgICAgTmF0aXZlSW1hZ2VQdHIgY3VycmVudEZyYW1lTmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsK
KyAgICBJbWFnZU9yaWVudGF0aW9uIGN1cnJlbnRGcmFtZU9yaWVudGF0aW9uKCkgb3ZlcnJpZGUg
eyByZXR1cm4gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CisgICAg
VmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSBvdmVycmlkZTsKKyAg
ICAKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQWxtb3N0U29saWRDb2xvcigpOwogCiAgICAg
Ym9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBvdmVycmlkZTsKIApAQCAtMjE1LDcg
KzIxMSw2IEBAIHByb3RlY3RlZDoKICAgICBzaXplX3QgZnJhbWVDb3VudCgpOwogCiAgICAgTmF0
aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25T
Y2FsZUhpbnQgPSAxKTsKLSAgICBOYXRpdmVJbWFnZVB0ciBjb3B5VW5zY2FsZWRGcmFtZUltYWdl
QXRJbmRleChzaXplX3QpOwogCiAgICAgYm9vbCBoYXZlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggN2EyOTk5
MmY3NzE4OGUwMzgyOGQ4MGE2NWI4YmUyY2Q4ZGMyZGU3Ni4uYjIxNmM1NmFjZmY2NDc2ZmI3ZDhk
ZDZlMjllNWVjN2M0YmUzMDRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oCkBAIC0xMzcsOCArMTM3LDExIEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUg
eyBTdHJldGNoVGlsZSwgUm91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAotICAg
IHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJl
dHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
Rm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOyB9CisgICAgdmly
dHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUm
KSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjdXJyZW50
RnJhbWVOYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIEltYWdl
T3JpZW50YXRpb24gY3VycmVudEZyYW1lT3JpZW50YXRpb24oKSB7IHJldHVybiBJbWFnZU9yaWVu
dGF0aW9uKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gZnJhbWVzTmF0
aXZlSW1hZ2VzKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBBY2Nlc3NvcnMgZm9yIG5hdGl2
ZSBpbWFnZSBmb3JtYXRzLgogCkBAIC0xNTAsMTIgKzE1Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBudWxscHRyOyB9
CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Q0dJbWFn
ZVJlZigpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Rmly
c3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBudWxscHRyOyB9Ci0g
ICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFycmF5KCkgeyByZXR1
cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAgICAgdmlydHVhbCBi
b29sIGdldEhCSVRNQVAoSEJJVE1BUCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgZ2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgeyByZXR1cm4gZmFs
c2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1h
Z2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hYjdhZWE0ODlmM2ViMmE4Mjg3NzFjMjEwM2U4ZDRkMGJlMTdiZTVk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHcmFwaGljc1R5
cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBG
bG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCitjbGFz
cyBQbGF0Zm9ybUltYWdlIHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUltYWdlKGNvbnN0IE5hdGl2
ZUltYWdlUHRyJiBpbWFnZSkKKyAgICAgICAgOiBtX2ltYWdlKGltYWdlKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGlzTmlsKCkgY29uc3QgeyByZXR1cm4gIW1faW1hZ2U7IH0KKyAgICB2b2lk
IGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBib29s
IGhhc0FscGhhKCkgY29uc3Q7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJikgY29uc3Q7CisKKyAgICBzdGF0aWMg
ZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCitwcml2YXRlOgorI2lmIFVT
RShDRykKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2VSZWYoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
ID8gbV9pbWFnZS5nZXQoKSA6IG51bGxwdHI7IH0KKyNlbmRpZgorICAgIE5hdGl2ZUltYWdlUHRy
IG1faW1hZ2U7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KaW5kZXggODRjN2Q2
MjMyNGY2NDcxMWUxNjVlNTI0M2RmODhmMjFhNTBlZDdlOS4uZDJiYjhlZjQ5Yjc5Y2JjNzcyYzM1
MTg3YWYzNDNmNjFjNGRjMDFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpAQCAtMjEy
LDcgKzIxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1
cGRhdGVEaXNwbGF5TW9kZSgpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1hZ2UgPSBpbWFnZS0+Z2V0
Q0dJbWFnZVJlZigpOworICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1hZ2UgPSBpbWFnZS0+Y3Vy
cmVudEZyYW1lTmF0aXZlSW1hZ2UoKTsKICAgICAgICAgICAgICAgICBpZiAoIW1fcGF1c2VkSW1h
Z2UpIHsKICAgICAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TW9kZSA9IFBhaW50SXRCbGFjazsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCBmOGNkZDYy
YTk3YmMzMzgyZGE0YzY5ZGE3NDA2MjExOTllMGVjNjhlLi42Mjc0Mjc5OGQ0ZjdkMWZmMGE1YTI5
MmJiYzhjYjBlODdhNzE1MDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTEwMDgsNyArMTAwOCw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdl
KiBpbWFnZSkKIHsKICAgICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgYXV0byBuZXdJbWFnZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBhdXRvIG5ld0ltYWdl
ID0gaW1hZ2UtPmN1cnJlbnRGcmFtZU5hdGl2ZUltYWdlKCk7CiAgICAgICAgIGlmICghbmV3SW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NzIyYmVjNTNhYjhhMDhhOGRhODUyOGI5ZTBkN2M0ZDBj
ZDQxMzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBz
aXplKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4g
Y2Fpcm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3Qg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJm
YWNlX2dldF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQot
Ci1Db2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUlt
YWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLQotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdC
QTMyKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVs
dGlwbGllZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2Rl
LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFk
c3Qud2lkdGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdo
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0
byBzdXJmYWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICgh
c3VyZmFjZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQu
Ci0gICAgICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJh
dGlvbi4KLSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0g
QmxlbmRNb2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwot
ICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5k
TW9kZSk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIElu
dFNpemUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxp
bmcoc3JjLCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dChzcmMpOwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24o
ZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVz
cGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAg
ICAgZnJhbWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKLQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3Jp
ZW50YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VP
cmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBj
b250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RS
ZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RN
KGZyYW1lT3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsK
LSAgICAgICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAg
ICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0
aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAg
ICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwg
c28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3Qg
PSBGbG9hdFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBk
c3RSZWN0LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwg
YWRqdXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0g
ICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3
KHRoaXMpOwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQot
ewotICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNl
OwotCi0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fp
cm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNiYzZmYzhkM2E0NDA4OTcwNDI5ZmVkYTU3M2JkZDg3MjNhNmUw
YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRl
ICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3Jt
SW1hZ2U6OmNsZWFyU3ViSW1hZ2VzKCkKK3sKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpz
aXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlLmdldCgp
KTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09O
VEVOVF9DT0xPUjsKK30KKworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCkgY29uc3QKK3sKKyAgICBpZiAoTmF0aXZlSW1hZ2U6OnNpemUobV9pbWFnZSkgIT0gSW50
U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0Up
CisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdCQTMyKiBwaXhlbCA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9pbWFn
ZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwp
OworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGlu
Z1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBC
bGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0
Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAgLy8gU2V0IHRoZSBjb21wb3NpdGlu
ZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgYmxlbmRN
b2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhaGFzQWxwaGEoKSkKKyAgICAgICAgY29udGV4dC5z
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgZWxzZQorICAgICAgICBj
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgbW9kZSk7CisgICAgICAgIAorI2lmIEVO
QUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgSW50U2l6ZSBzY2FsZWRTaXpl
ID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgpKTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0
ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmMsIHNjYWxlZFNp
emUpOworI2Vsc2UKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyYyk7CisjZW5kaWYK
KyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKKyAg
ICAgICAgCisgICAgaWYgKGZyYW1lT3JpZW50YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRp
b24pIHsKKyAgICAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8g
YmUgYXQgKDAsIDApLgorICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0
UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9p
bnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGZyYW1lT3JpZW50YXRpb24udHJhbnNm
b3JtRnJvbURlZmF1bHQoYWRqdXN0ZWREZXN0UmVjdC5zaXplKCkpKTsKKyAgICAgICAgaWYgKGZy
YW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgeworICAgICAgICAgICAgLy8gVGhl
IGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFs
cmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAgICAgLy8gdGhl
IGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byBy
ZXZlcnNlIGl0IGJhY2sgaGVyZS4KKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QgPSBGbG9h
dFJlY3QoeyB9LCBhZGp1c3RlZERlc3RSZWN0LnNpemUoKS50cmFuc3Bvc2UoKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRv
Q29udGV4dChzdXJmYWNlLmdldCgpLCBhZGp1c3RlZERlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IGNvbnRleHQpOworCisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAzYzgxYTE3MGJlNzlhZTZiZTZjYWNkYzk5ZjRjMzk4Y2FhZjQyNmQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5o
IgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZU9i
c2VydmVyLmgiCi0jaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVz
cGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgcmV0dXJuIEludFNpemUo
Q0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQo
KSkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYpCi17
Ci0gICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBD
R0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAg
Ci1Db2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+
JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFn
ZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7
Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdCQQotICAgIGF1dG8gYml0
bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4
LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAotICAgICAgICBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZykpOwotCi0gICAg
aWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29w
eSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UoMCwgMCwgMSwgMSksIGltYWdlLmdldCgpKTsKLSAgICAKLSAgICBpZiAoIXBpeGVsWzNdKQot
ICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7Ci0KLSAgICByZXR1cm4gQ29sb3IocGl4
ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxb
Ml0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwotfQotCi19Ci0KLWJvb2wgRnJhbWVEYXRh
OjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0g
ICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBtX3N1YnNhbXBsaW5nTGV2ZWwg
PSAwOwotCi0gICAgaWYgKG1faW1hZ2UpIHsKLSNpZiBDQUNIRV9TVUJJTUFHRVMKLSAgICAgICAg
c3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UobV9pbWFnZS5nZXQoKSk7Ci0jZW5kaWYKLSAgICAg
ICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYo
KQotewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKS5nZXQoKTsKLX0KLQotQ0dJbWFn
ZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUm
IHNpemUpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2Ug
PSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UgJiYgSW50
U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSkp
ID09IHNpemUpCi0gICAgICAgICAgICByZXR1cm4gY2dJbWFnZTsKLSAgICB9Ci0KLSAgICAvLyBG
YWxsYmFjayB0byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJp
Z2h0IHNpemUKLSAgICByZXR1cm4gZ2V0Q0dJbWFnZVJlZigpOwotfQotCi1SZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpCi17Ci0gICAgc2l6ZV90IGNv
dW50ID0gZnJhbWVDb3VudCgpOwotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAotICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11
dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoQ0dJbWFnZVJlZiBjdXJy
RnJhbWUgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKSkKLSAgICAgICAgICAgIENGQXJyYXlB
cHBlbmRWYWx1ZShhcnJheSwgY3VyckZyYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0Q0Yo
YXJyYXkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotI2lmIFBMQVRGT1JNKElPUykK
LSAgICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOwotI2Vsc2UKLSAgICBzdGFydEFuaW1h
dGlvbigpOwotI2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAg
Ly8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRl
eHRzLgotICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjdHh0LnBsYXRmb3JtQ29udGV4
dCgpKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChtX2N1
cnJlbnRGcmFtZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3Rp
bmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRl
eHRHZXRDVE0oY3R4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICBmbG9hdCBzdWJzYW1w
bGluZ1NjYWxlID0gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRyYW5zZm9ybWVkRGVzdGlu
YXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRyYW5zZm9ybWVkRGVzdGlu
YXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpOwotCi0gICAgICAgIGlt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBsaW5nU2NhbGUp
OwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0
IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ29sb3IgY29s
b3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVjdCwgY29sb3IsIGNvbXBv
c2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFN1YnNhbXBsaW5nIG1h
eSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KLSAg
ICBJbnRTaXplIGltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdl
R2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci0gICAgCi0gICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUg
Y29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAg
aXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCi0gICAgRmxvYXRSZWN0IHNjYWxlZFNyY1JlY3Qg
PSBzcmNSZWN0OwotICAgIGlmIChpbWFnZVNpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgIEZsb2F0
UmVjdCBvcmlnaW5hbEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKLSAgICAgICAg
RmxvYXRSZWN0IHN1YnNhbXBsZWRJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIGltYWdlU2l6ZSk7
Ci0gICAgICAgIHNjYWxlZFNyY1JlY3QgPSBtYXBSZWN0KHNyY1JlY3QsIG9yaWdpbmFsSW1hZ2VC
b3VuZHMsIHN1YnNhbXBsZWRJbWFnZUJvdW5kcyk7Ci0gICAgfQotICAgIAotICAgIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIG9yaWVudGF0
aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0gICAgY3R4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNjYWxlZFNyY1Jl
Y3QsIGNvbXBvc2l0ZU9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKTsKLQotICAgIGlmIChpbWFn
ZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0K
LQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMu
c2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShp
bmRleCwgMCk7Ci0KLSAgICBpZiAoIW1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwp
Ci0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKLQotICAgIHJldHVybiBt
X3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCk7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKaW5kZXggOTlmMDlkYjY3YmE1NDI4MmRj
NGVkNzA1YWU0MTYzODAzMzcxOTNmMS4uZDNjNzhlYjc4NDUxZGYyOTA0NzVmZGM1ZDk0OWRlNDA0
ZDk4NDFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKQEAgLTMzNiw3ICszMzYsNyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbAogICAgICAgICBtX2RlY29kZWRJbWFnZSA9IGRlY29kZXIuY3Jl
YXRlRnJhbWVJbWFnZUF0SW5kZXgoMCk7CiAgICAgICAgIG1fY2dJbWFnZSA9IG1fZGVjb2RlZElt
YWdlOwogICAgIH0gZWxzZQotICAgICAgICBtX2NnSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBtX2NnSW1hZ2UgPSBtX2ltYWdlLT5jdXJyZW50
RnJhbWVOYXRpdmVJbWFnZSgpOwogICAgIGlmICghbV9jZ0ltYWdlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCAyMWY1MzM4YjI2ZjUzYzE1MmJkYmJlYzQ2
MDFhZmI5ODc2MjVhZGQ3Li41NzVlZjZmMTM5Y2MyMjdmZDg2ZDUyMTIzYjNiNzI3MDhmMDRiNzFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0zMjcsNyArMzI3LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QKICAgICBmbG9hdCBhZGp1c3RlZFggPSBwaGFzZS54KCkgLSBkZXN0UmVjdC54KCkg
KyB0aWxlUmVjdC54KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0u
YSgpKTsgLy8gV2UgdHJhbnNsYXRlZCB0aGUgY29udGV4dCBzbyB0aGF0IGRlc3RSZWN0LngoKSBp
cyB0aGUgb3JpZ2luLCBzbyBzdWJ0cmFjdCBpdCBvdXQuCiAgICAgZmxvYXQgYWRqdXN0ZWRZID0g
ZGVzdFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgpIC0gZGVzdFJlY3QueSgpICsgdGlsZVJlY3Qu
eSgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSkgKyBzY2Fs
ZWRUaWxlSGVpZ2h0KTsKIAotICAgIGF1dG8gdGlsZUltYWdlID0gaW1hZ2UubmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKKyAgICBhdXRvIHRpbGVJbWFnZSA9IGltYWdlLmN1cnJlbnRGcmFt
ZU5hdGl2ZUltYWdlKCk7CiAgICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGlsZUltYWdl
LmdldCgpKTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzdWJJbWFnZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKaW5kZXggZjNkZDAy
MmE5MDVhNjJlNGMxMTgzOWFkZDRjYTZmMGIwOTM2MWM0OS4uNWIxYjZjMDZjNDAyNzgyMWRjYjA3
NDg0YmNjNWNiYWU4NGM1NmE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VDRy5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sCiAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
KQorICAgIGlmICghY3VycmVudEZyYW1lTmF0aXZlSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY3R4dC5kcmF3UGF0dGVybigqdGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCBiNDI4ZDUw
ZDk0YmY5MjQyODAzMjg3ZDJlZWMxNmJkNjljNTI4ZDkyLi4zZGFhMTM5YWI3ZWE1YjQyMTU3Nzg4
MzVkMzUzZDhhZGI1ZjBjNzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBh
dHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJT
cGFjZVRyYW4KICAgICAvLyBJZiB3ZSdyZSByZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3
ZSBjYW4gdXNlIGltYWdlLWJhY2tlZCBwYXR0ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9t
IHBhdHRlcm5zLCBhbmQgYXZvaWQgdGlsaW5nLWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmICht
X3JlcGVhdFggJiYgbV9yZXBlYXRZKQotICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVX
aXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVy
blRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0
dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5u
YXRpdmVJbWFnZSgpLmdldCgpLCBwYXR0ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25z
dGFudFNwYWNpbmcpOwogCiAgICAgLy8gSWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZv
ciB4U3RlcCBvciB5U3RlcCwgbm90aGluZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9m
IEZMVF9NQVggYWxzbwogICAgIC8vIHJlc3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpA
QCAtODMsNyArODMsNyBAQCBDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0
ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbgogICAgIENHRmxvYXQgeVN0
ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVjdC5oZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8v
IFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFzZSB0aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSBy
ZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVhc2VDYWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZv
cm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4odGlsZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7Cisg
ICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCku
bGVha1JlZigpOwogCiAgICAgY29uc3QgQ0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFj
a3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFjaywgcGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAg
IHJldHVybiBDR1BhdHRlcm5DcmVhdGUocGxhdGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywg
VFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGUyYzAy
N2RhZDM3ODlmOTA2MmI5OTNlMTdiMTZkM2U0YmY3Y2JiZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAg
LTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisj
aWYgVVNFKENHKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NT
UEkuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGll
cy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgorI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIAordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7CisjaWYg
Q0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKCFpc05pbCgpKQorICAgICAgICBzdWJpbWFnZUNhY2hl
KCkuY2xlYXJJbWFnZShjZ0ltYWdlUmVmKCkpOworI2VuZGlmCit9CisKK0ludFNpemUgUGxhdGZv
cm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRTaXplKCkg
OiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlUmVmKCkpLCBDR0ltYWdlR2V0SGVpZ2h0
KGNnSW1hZ2VSZWYoKSkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMg
dGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sK
KyAgICBpZiAoaXNOaWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0
dXJuIENvbG9yKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdCQQor
ICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBp
eGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAorICAgICAg
ICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJp
ZykpOworICAgIAorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIENvbG9y
KCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCks
IGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0
LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBjZ0ltYWdlUmVmKCkpOworICAgIAorICAg
IGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAK
KyAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAy
NTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOworfQor
ICAgIAorYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAorewor
ICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBjZ0ltYWdlUmVmKCk7CisgICAgQVNTRVJUKENHSW1hZ2VH
ZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKKyAgICAKKyAgICBDR0JpdG1hcEluZm8g
aW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOworICAgIGlmICghKGltYWdl
SW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0
bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewor
ICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4
ZWwgZm9ybWF0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRo
KGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Cisg
ICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsKKyAg
ICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJv
dmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkpOworICAgIGNvbnN0
IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7CisgICAgCisg
ICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2Nh
bGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCisgICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMs
IGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBw
b2ludAorICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFy
ZW5jeS4KKyAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKKyAgICBjb25zdCB1bnNp
Z25lZCBzYW1wbGVDb2xzID0gNzsKKyAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVt
YmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4K
KyAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFzdCByb3cv
Y29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KKyAgICBjb25zdCBmbG9hdCBzdHJp
ZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNvbHMgLSAx
KTsKKyAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaGVp
Z2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOworICAgIGZsb2F0IHNhbXBsZXNbc2FtcGxlUm93
c11bc2FtcGxlQ29sc107CisgICAgCisgICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9mIHRoZSBz
YW1wbGUgcG9pbnRzLgorICAgIGZsb2F0IHkgPSAwOworICAgIGNvbnN0IFVJbnQ4KiByb3cgPSBk
YXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kpIHsKKyAg
ICAgICAgZmxvYXQgeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzYW1w
bGVDb2xzOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyArIChzdGF0
aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKKyAgICAgICAgICAgIC8vIFIgRyBCIEEKKyAgICAg
ICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihwMCsxKSAr
IDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKKyAgICAgICAgICAgIHggKz0gc3Ry
aWRlV2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7CisgICAgICAg
IHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVyUm93Owor
ICAgIH0KKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgorICAgIGZsb2F0
IGFjY3VtU2NvcmUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVSb3dz
IC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVDb2xz
IC0gMTsgKytqKSB7CisgICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1bal0g
KyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtqICsg
MV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKKyAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlmZiAq
IGRpZmY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHNjb3JlIGZvciBhIGdp
dmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4KKyAgICBy
ZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBsZUNvbHMg
LSAyKTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9y
IGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250
ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsKKyAgICAK
KyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmlu
ZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRyYW5zZm9y
bWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRyYW5zZm9y
bWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpOworfQor
Cit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29u
c3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgLy8gU3Vic2Ft
cGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6
ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemUoKTsKKyAgICAKKyAg
ICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVkIGlt
YWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4KKyAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2FtcGxlZElt
YWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBSZWN0KHNy
Y1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJzYW1wbGVk
SW1hZ2VTaXplKSk7CisgICAgCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9pbWFnZSwg
c3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3AsIG1vZGUs
IG9yaWVudGF0aW9uKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJl
c2VudGF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCmluZGV4IDg5NzIwZDE3MzY1ZGE3ZThi
YTg0NjlkNTI5NDU0OGQ1MTg0N2E3ZmUuLjQ0NzZmYzVmODdjMzQ5ODhmNmQ5YWQ1NWVlYmQ4ZDFi
OWJiMDIyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQpA
QCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5UZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hKCkKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xpZW50LmNy
ZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5ZXIuZ2V0
KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCldOworICAg
ICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPm5hdGl2
ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6
OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCBmYTAxMWFhODgxNjMwMzAwMDk0NDk4
ZWJjMGZmY2E5ZmI5YzMwMzRiLi5iZjA4NTdkYjZjNjZmNjQxNWNiOWZlM2E0ZmEzMTJjYjBlMGE2
MmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1h
Z2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdl
TWFjLm1tCkBAIC04NSwzMSArODUsMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpnZXRUSUZG
UmVwcmVzZW50YXRpb24oKQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVybiBtX3Rp
ZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7Cisg
ICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsKIAotICAg
IC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1hZ2Ug
ZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6ZSgpIGlz
IHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFsaWQg
ZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5hdGlvbkNy
ZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVsbHksCiAg
ICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0gdGhlIGNv
bnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYg
Y2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJbWFn
ZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0aXZlSW1h
Z2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5QdHI8Q0ZN
dXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7
Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBhZG9w
dENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5cGVU
SUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRp
b25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRo
RGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgMCkpOwog
CiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlkRnJhbWVz
OyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdl
dCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5hdGl2ZUlt
YWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0
KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFs
aXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9E
cmFnSW1hZ2VNYWMubW0KaW5kZXggNzY5N2M3YjQzNWM3YTZhYzJiYjcxZTJlYjQzNTg0ZmJkYTg5
Y2JjNi4uZjM1NzA2NjJhNjFhYWU0MDdmNjUxYzRlOTYzMGEwYjIxZGFhNWZhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCkBAIC05NCw3ICs5NCw3IEBA
IFJldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdl
LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpCiAgICAgICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdP
cmllbnRhdGlvbiA9IGJpdG1hcEltYWdlLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsKIAog
ICAgICAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgICAgIG9yaWVudGF0aW9uID0gYml0bWFwSW1h
Z2Uub3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgICAgIG9yaWVudGF0aW9u
ID0gYml0bWFwSW1hZ2UuY3VycmVudEZyYW1lT3JpZW50YXRpb24oKTsKIAogICAgICAgICBpZiAo
b3JpZW50YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKICAgICAgICAgICAgIC8v
IENvbnN0cnVjdCBhIGNvcnJlY3RseS1yb3RhdGVkIGNvcHkgb2YgdGhlIGltYWdlIHRvIHVzZSBh
cyB0aGUgZHJhZyBpbWFnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5t
bQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQxYTRkLi5kMTE0NTRi
MDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFs
dGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAgICAgICBpZiAo
IWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBp
bWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5u
YXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdlKQogICAgICAgICAgICAg
YnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKaW5kZXggMDg5ZmE3Y2FiMjg2NDczZDg2OTAwNGY2NTg5Y2IyZTYzOGU5NTJjYy4uY2Ji
MWQ0NmRjNmEyMjY0Yjk4YzNlZTVjMWQ0YjcyYTQ1OThmZDFhOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTIwMTEsNyArMjAxMSw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjppc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKCkg
Y29uc3QKICAgICAgICAgaWYgKCFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChpbWFnZS0+b3JpZW50YXRpb25Gb3JDdXJyZW50
RnJhbWUoKSAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikKKyAgICAgICAgaWYgKGltYWdlLT5j
dXJyZW50RnJhbWVPcmllbnRhdGlvbigpICE9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHJldHVybiBtX2dyYXBoaWNzTGF5ZXIt
PnNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAKaW5kZXggN2UxNDNk
ZWQyZDY2OWFiM2FjMDljNDk2YjRlNGJlZTdkYzg3ZjIyZi4uZGYwOTBhOTMwYjYwMTM2MWY5MDE4
OTFkNjdiZDhkMWVjMDk2NDVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCkBAIC00Niw5ICs0Niw5IEBAIHZvaWQgU1ZH
SW1hZ2VGb3JDb250YWluZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0CiAgICAgbV9pbWFnZS0+ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIoY29u
dGV4dCwgbV9jb250YWluZXJTaXplLCBtX3pvb20sIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBjb21wb3NpdGVPcCwgZHN0UmVjdCwgYmxlbmRNb2RlKTsKIH0KIAot
TmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2VGb3JDb250YWluZXI6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkKK05hdGl2ZUltYWdlUHRyIFNWR0ltYWdlRm9yQ29udGFpbmVyOjpjdXJyZW50RnJh
bWVOYXRpdmVJbWFnZSgpCiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CisgICAgcmV0dXJuIG1faW1hZ2UtPmN1cnJlbnRGcmFtZU5hdGl2ZUltYWdl
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmgKaW5kZXggZDIyNGZjNDYxMmZkOTVh
MWFlYTc3YWZiNDQ3OTc2OTIzNTI3YWNkNC4uOWQ1NjlkODE1OWU5YWZhYjRkMGQ4OTQzMTVjMjE4
ZDIxYzRiY2ZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlRm9yQ29udGFpbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlRm9yQ29udGFpbmVyLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyB0byBiZSBsZXNzIGNvbnNlcnZhdGl2ZS4KICAgICBib29sIGN1cnJl
bnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAg
ICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwor
ICAgIE5hdGl2ZUltYWdlUHRyIGN1cnJlbnRGcmFtZU5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CiAK
IHByaXZhdGU6CiAgICAgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqIGltYWdlLCBjb25z
dCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDYWNoZS5tbQppbmRleCBiNjU5ZDZkYmY5YWQ2OTk5YzNhYzk2MmRlOTUxNTc4MDk3ZTFmM2Ix
Li43YzVlZDIxMGRkYjJhMzJhNzY2Njc0YzEyMGQ5OTRjMmZhNDdlN2ZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViQ2FjaGUubW0KQEAgLTIwNCw3ICsyMDQsNyBAQCArIChDR0ltYWdlUmVmKWltYWdl
Rm9yVVJMOihOU1VSTCAqKXVybAogICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlJiBjYWNoZWRJbWFn
ZSA9IGRvd25jYXN0PFdlYkNvcmU6OkNhY2hlZEltYWdlPigqY2FjaGVkUmVzb3VyY2UpOwogICAg
IGlmICghY2FjaGVkSW1hZ2UuaGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGNhY2hlZEltYWdlLmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICByZXR1
cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKTsKIH0KIAogI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAppbmRleCAwZjZkZTdhMTQ2YTYxMWE1MmFhMWU1
MzkwMTlmYTZjMWM0NjcyNWFlLi4zMDU2MzM2Y2I2NmZlNGFmMThiZGM1MjlhY2EyZjhmYzg4MWRm
ZTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29u
RGF0YWJhc2VDRy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dL
SWNvbkRhdGFiYXNlQ0cuY3BwCkBAIC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiBDR0ltYWdlUmVmIFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZvclVSTChXS0lj
b25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tTaXplIHNp
emUpCiB7CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdl
Rm9yUGFnZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFn
ZS0+Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXpl
LndpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKSA6IDA7CisgICAgcmV0dXJu
IGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50
PihzaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5nZXQoKSA6IG51
bGxwdHI7CiB9CiAKIENGQXJyYXlSZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5
Rm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVm
KQogewogICAgIEltYWdlKiBpbWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZv
clBhZ2VVUkwodG9XVEZTdHJpbmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2Ut
PmdldENHSW1hZ2VBcnJheSgpLmxlYWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFnZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGltYWdlLT5mcmFt
ZXNOYXRpdmVJbWFnZXMoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZB
cnJheUNyZWF0ZU11dGFibGUobnVsbHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgJmtDRlR5cGVB
cnJheUNhbGxCYWNrcyk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2Vz
KQorICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdlLmdldCgpKTsK
KyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRhaW4oYXJyYXkp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA5YTI4MTM2ZWJhYTM0OTQ0NjBmMDE5NWU1MTg3
MGQxNjNlODc4NDUzLi5hYTZkNDdlM2YwN2UzYjU4N2Q1MzA5OGFlNjA0ZmQ2Y2M5ZGM5ZTllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbQpAQCAtNDA3OSw3ICs0MDc5LDcgQEAgLSAoVUlJbWFnZSAqKV9wcmVz
ZW50YXRpb25TbmFwc2hvdEZvclByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNv
bnRyb2wKIHsKICAgICBpZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29u
dGVudEltYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW1tbVUlJbWFn
ZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0
b3IuY29udGVudEltYWdlLT5nZXRDR0ltYWdlUmVmKCldIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1
cm4gW1tbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9u
LmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlLT5uYXRpdmVJbWFnZSgpLmdldCgpXSBhdXRvcmVs
ZWFzZV07CiB9CiAKIC0gKE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRl
bUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGMx
MWJlOTU5MGU3YThlZGE2NmNmODI3NjQ3NWFhMjVhMjQyMmY4MTguLmM3ZWFhMGU2YzhjYmEzNWY2
ZWFkZDQzMTJjNmQ5MTZlNGU2OGFmODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTE3MjYsNjkgKzE3MjYsNiBAQCB2b2lkIFBs
dWdpblZpZXc6OndpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJs
ZSwgdWludDY0X3Qgd2luZAogfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXN0YXRp
YyBib29sIGlzQWxtb3N0U29saWRDb2xvcihCaXRtYXBJbWFnZSogYml0bWFwKQotewotICAgIENH
SW1hZ2VSZWYgaW1hZ2UgPSBiaXRtYXAtPmdldENHSW1hZ2VSZWYoKTsKLSAgICBBU1NFUlQoQ0dJ
bWFnZUdldEJpdHNQZXJDb21wb25lbnQoaW1hZ2UpID09IDgpOwotCi0gICAgQ0dCaXRtYXBJbmZv
IGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKLSAgICBpZiAoIShpbWFn
ZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0Jp
dG1hcEFscGhhSW5mb01hc2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsK
LSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBp
eGVsIGZvcm1hdHMuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGlt
YWdlKTsKLSAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Ci0gICAg
c2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsKLQotICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IHByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNv
cHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIoaW1hZ2UpKSk7Ci0gICAgY29uc3QgVUludDgq
IGRhdGEgPSBDRkRhdGFHZXRCeXRlUHRyKHByb3ZpZGVyLmdldCgpKTsKLQotICAgIC8vIE92ZXJs
YXkgYSBncmlkIG9mIHNhbXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24g
b2YgdGhlIGltYWdlLgotICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUg
dGhlIGRpZmZlcmVuY2UgaW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKLSAgICAv
LyBhbmQgaXRzIHN1cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCi0gICAg
Y29uc3QgdW5zaWduZWQgc2FtcGxlUm93cyA9IDc7Ci0gICAgY29uc3QgdW5zaWduZWQgc2FtcGxl
Q29scyA9IDc7Ci0gICAgLy8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1w
bGVzLCBhbmQgYWNjb21tb2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCi0gICAgaWYgKHdp
ZHRoIDwgc2FtcGxlQ29scyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFzdCByb3cvY29sdW1uIGxhbmQgb24g
dGhlIGltYWdlIHBlcmltZXRlci4KLSAgICBjb25zdCBmbG9hdCBzdHJpZGVXaWR0aCA9IHN0YXRp
Y19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNvbHMgLSAxKTsKLSAgICBjb25zdCBm
bG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0IC0gMSkgLyAoc2Ft
cGxlUm93cyAtIDEpOwotICAgIGZsb2F0IHNhbXBsZXNbc2FtcGxlUm93c11bc2FtcGxlQ29sc107
Ci0KLSAgICAvLyBGaW5kIHRoZSBsdW1pbmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCi0gICAg
ZmxvYXQgeSA9IDA7Ci0gICAgY29uc3QgVUludDgqIHJvdyA9IGRhdGE7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNhbXBsZVJvd3M7ICsraSkgewotICAgICAgICBmbG9hdCB4ID0gMDsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgewotICAg
ICAgICAgICAgY29uc3QgVUludDgqIHAwID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41
KSkgKiA0OwotICAgICAgICAgICAgLy8gUiBHIEIgQQotICAgICAgICAgICAgc2FtcGxlc1tpXVtq
XSA9ICgwLjIxMjUgKiAqcDAgKyAwLjcxNTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkg
KiAqKHAwKzMpIC8gMjU1OwotICAgICAgICAgICAgeCArPSBzdHJpZGVXaWR0aDsKLSAgICAgICAg
fQotICAgICAgICB5ICs9IHN0cmlkZUhlaWdodDsKLSAgICAgICAgcm93ID0gZGF0YSArIChzdGF0
aWNfY2FzdDxpbnQ+KHkgKyAuNSkpICogYnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gRGV0
ZXJtaW5lIHRoZSBpbWFnZSBzY29yZS4KLSAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgewotICAgICAgICAg
ICAgZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBz
YW1wbGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07
Ci0gICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gVGhlIHNjb3JlIGZvciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRo
ZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4KLSAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAo
c2FtcGxlUm93cyAtIDIpICogKHNhbXBsZUNvbHMgLSAyKTsKLX0KLSNlbmRpZgotCiB2b2lkIFBs
dWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGltZXJGaXJlZCgpCiB7CiAjaWYgRU5BQkxFKFBSSU1B
UllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKQEAgLTE4MDgsNyArMTc0NSw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIAogICAgICAgICBpZiAo
c25hcHNob3RJbWFnZSkgewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9I
RVVSSVNUSUMpCi0gICAgICAgICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0g
aXNBbG1vc3RTb2xpZENvbG9yKGRvd25jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlLmdl
dCgpKSk7CisgICAgICAgICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxCaXRtYXBJbWFnZT4oc25hcHNob3RJbWFnZSktPmlzQWxtb3N0U29s
aWRDb2xvcigpOwogICAgICAgICAgICAgc25hcHNob3RGb3VuZCA9ICFzbmFwc2hvdElzQWxtb3N0
U29saWRDb2xvcjsKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281155</attachid>
            <date>2016-06-12 21:52:59 -0700</date>
            <delta_ts>2016-06-12 22:18:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160612215432.patch</filename>
            <type>text/plain</type>
            <size>71436</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNjQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNmMmE0ZTliZWMyOTY4
MDhhMDliMjI1ZWMzOWY1ZDgzNzc3ZmY0OC4uN2UyMjJmMzMzNjkzM2NiZTFhZThmZTBhOTQ5NTRk
YTFlNmM0NjM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDE2LTA2LTEyICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9k
dWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFn
ZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4
Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlzIHRvIG1vdmUgdGhlIHBsYXRmb3Jt
IGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20gQml0bWFwSW1hZ2UgdG8gUGxhdGZv
cm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJsZSBvZiAKKyAgICAgICAgZHJhd2lu
ZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFnZVB0ciBxdWVzdGlvbnMgd2hlbiBh
biBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWlsYWJsZS4gQXBhcnQgZnJvbSBkcmF3
aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3aWxsIGJlCisgICAgICAgIGNhbGxl
ZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRhIHNvIHdlIHdpbGwga2VlcCBldmVy
eXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIuIEJ1dCB3ZSB3aWxsIGNhc3QgdGhl
IE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hlbgorICAgICAgICBhIHBsYXRmb3Jt
IGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0t
IENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtE
T01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBh
Z2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0
b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAg
ICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNv
ZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRh
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAg
ICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBp
cyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3Ro
IG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29u
c3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdl
UmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VB
cnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUlt
YWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1v
c3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBs
aW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhh
c0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29s
aWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlk
Q29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZpZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMg
d2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3MgdG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTogUmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxl
IGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxpbmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0
aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6CisKIDIwMTYtMDYtMDMgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlUmVzcG9uc2VCYXNlIGNsZWFu
dXAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggOThkMmJlNmQ4MzA0NjA3NjE2MzE3MjZhMmU5ZWMxYmFh
Zjg2OTE0NS4uOTczZGRhYjIxNjkwMjMxZDdiOTc3NmUzNWU1MDM0NjhlNTY1NTYzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA2LTEyICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3Jt
SW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hl
Lm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFnZUZvclVSTDpdKToKKwogMjAxNi0wNi0wMiAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIEFk
ZCBXZWJJREwgc3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGVhZmQyMzRjZGZkMjkyZTZkYWJkN2QyZDJhNWUzZTNkZGY3NjQ4OTMuLjMwZDkxZTVjN2Uw
Y2QyZGU1YThhYjZkNzhhNmE1ZmJjOGFmYTdiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBA
QAorMjAxNi0wNi0xMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29t
PgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3Jh
cHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3Bw
OgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKToKKyAgICAgICAg
KFdLSWNvbkRhdGFiYXNlVHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTCk6CisgICAgICAgIEl0IHdh
cyB0aGUgb25seSBwbGFjZSBpbiB0aGUgY29kZSB3aGljaCB1c2VzIEJpdG1hcEltYWdlOjpnZXRD
R0ltYWdlQXJyYXkoKS4KKyAgICAgICAgQ2FsbCBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1h
Z2VzKCkgaW5zdGVhZCBhbmQgZm9ybSB0aGUgcmV0dXJuZWQKKyAgICAgICAgVmVjdG9yPE5hdGl2
ZUltYWdlUHRyPiBidWlsZCB0aGUgQ0ZBcnJheVJlZi4KKyAgICAgICAgCisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOl0p
OgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKToKKyAgICAgICAg
CisgICAgICAgIChXZWJLaXQ6OmlzQWxtb3N0U29saWRDb2xvcik6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUgdGhlIHN0YXRpYyBmdW5jdGlvbiBpc0FsbW9zdFNvbGlkQ29sb3IgdG8gUGxhdGZvcm1J
bWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkuCisKIDIwMTYtMDYtMDMgIENzYWJhIE9zenRyb2dv
bsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggdGhlICFFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkgYnVpbGQgYWZ0ZXIgcjIwMTU3NQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpp
bmRleCAzMjlhMTYwNzkxODk4NjEwM2M2MGUwYjYwZDQwY2VlMGVmNmJjNjgxLi5jZGZkOWFhYmMw
Y2VkYTVlMzFmYzc3Yzg1MjI0ZmU0ODdkODRiOWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtMTIyLDcgKzEyMiw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKQEAgLTEzNCw2ICsxMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWly
by5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENh
aXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBkNzFjZWVlNTc1MmUzNThlYmY5
Mjg4YmY1MTQ5ZDdmOGQxNjE3NWU3Li45MjUwMmE0NDkyNTBlYjE5MTk0ZWVhMmY2YTBiZjY5Yjdm
N2JjNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtOTgsNyArOTgsNiBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Jh
Y2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvWDExLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0
Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAt
MTEyLDYgKzExMSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1D
b250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFn
ZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUGF0aENhaXJv
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5
NjBmNTUyMzQzZDkyMGYwN2IzLi5jMjAzMDkxYTkzOWM2ZjdhMjJjZmJmODlmODJiMGMzMWVkOTJi
YTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xD
b250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhaXJvLmNwcApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1h
dHJpeENhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDA5NTg3MmQzYWM2ZWVhMjY1YWUzMTU5MmIyNzIyOTljNGZmMmUz
M2IuLmFiMWE0OWNmOTY0MDQ1OWU0ZWI3YmJkY2NmY2UzNzlhMGQyMDliZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0MzQs
NyArMTQzNCw3IEBACiAJCTM3NUNEMjMyMTE5RDQzQzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1Q0QyMzEx
MTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggKi87IH07CiAJCTM3NkRDQ0UxMTNCNEY5
NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAq
LzsgfTsKIAkJMzc3NEFCQTUwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3
NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTM3N0EzQTkwMTVF
RkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRt
YXBJbWFnZUNHLmNwcCAqLzsgfTsKKwkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRm
b3JtSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLzsg
fTsKIAkJMzc5MTlDMjMwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovOyB9OwogCQkzNzkxOUMyNDBC
N0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9Owog
CQkzNzkyOTE3QTE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTI5MTc4MTk4NUVGMzkwMEY0
QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0yMjc4LDYgKzIyNzgsNyBAQAogCQk1NTBBMEJDQTA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5h
bWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
aCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8qIFNp
bXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsgfTsK
IAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVBNjYw
MDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU4MDM3MTYxMUE2NkYwMEEw
MEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICov
OyB9OwpAQCAtODk0Myw3ICs4OTQ0LDcgQEAKIAkJMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFJ1
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzJCMDk1MTY1MzU4NTYwMDBB
NDlDQSAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQb3B1cE9wZW5pbmdPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE92ZXJsYXBUZXN0UmVxdWVzdENs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzNzdBM0E4RjE1RUZDRTlBMDA1
OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCaXRtYXBJbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Mzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybUltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRp
b25JdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9z
aXRpb25JdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIy
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3OTI5MTc4MTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcmVkZW50aWFsQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTg3NSw2ICs5ODc2LDcgQEAKIAkJNTUwQTBCQzgwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1Qjg3RUExQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9y
bUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVs
YXRlZENsaWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMTgyNCw3ICsyMTgyNiw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAv
KiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0Yz
MzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUz
ODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjE4NTEsNiArMjE4NTIsNyBAQAog
CQkJCUE4MEEzOEZEMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIy
NzUzNTM2MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlC
Mjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3
N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFG
QzQwRkI4MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywK
IAkJCQkxRkM0MEZCNzE2NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5o
ICovLAogCQkJCUIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDUzLDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5
MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyog
UGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUlt
YWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIu
aCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291
cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3Jt
VGV4dFRyYWNrLmggKi8sCkBAIC0yNTc5MSw2ICsyNTc5NCw3IEBACiAJCQkJODVFNzExQjkwQUM1
RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVBMEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1M
TWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAy
NzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2
NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1MTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyog
RE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MTUyLDcgKzI5MTU2LDcg
QEAKIAkJCQlGREM1NEYwNDEzOTlCMERBMDA4RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAyNjEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkUHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAv
KiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzNzdBM0E5MDE1RUZDRTlCMDA1
OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzNzdBM0E5MDE1
RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3NkQ2Qzc4MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTJFREVGMUYzMTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMUQzMUNEQzE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET00ubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDEx
ZWEzZmQ4YzA0Njk3NGM1NWQ0OGUzOTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3
MDZjMTBmYzBmN2FmNDA0MjU2MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpA
QCAtNjA2LDcgKzYwNiw3IEBAIC0gKHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1h
Z2VSZWYqKWNnSW1hZ2UgYW5kUmVjdHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0
SW5kaWNhdG9yKSB7CiAgICAgICAgIGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5j
b250ZW50SW1hZ2UoKSkKLSAgICAgICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRv
cmVsZWFzZShDR0ltYWdlUmV0YWluKGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAg
ICAgICpjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9
CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cubW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThl
MmNlNmQxOTBmMjQ4OS4uYTc0ZGE4NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBA
IC0xNjIsOSArMTYyLDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClm
cmFtZSB0ZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0lt
YWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2Fs
ZUZhY3RvcigpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAg
ICBpZiAoaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0g
ICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhp
Z2hsaWdodCgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4
dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwog
ICAgIGVsc2UKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50
SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBib3VuY2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FL
ZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1
cmF0CiBzdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9z
c2ZhZGVBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRl
eHRJbmRpY2F0b3IpCiB7CiAgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFk
ZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29u
dGVudHMiXTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJ
bmRpY2F0b3IuY29udGVudEltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCkt
Pm5hdGl2ZUltYWdlKCk7CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZClj
b250ZW50c0ltYWdlLmdldCgpXTsKICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2Rl
OmtDQUZpbGxNb2RlRm9yd2FyZHNdOwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3Zl
ZE9uQ29tcGxldGlvbjpOT107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggMDY3NmNlMDcyNTA3NmJiOTVjY2QyNmM1YzFhNTI4ZDE2
M2E0NjUyYS4uMzU2NzQwMTE5MDg2OTk2NGEwYjc2NDQzYzU5MDAwNWIyYzk0NjYzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAt
NzAsMTEgKzcwLDExIEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYm
IGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKIHsKICAgICAvLyBTaW5jZSB3ZSBkb24n
dCBoYXZlIGEgZGVjb2Rlciwgd2UgY2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRp
b24uCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2Ft
ZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgwLgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbiA9IG1fc2l6ZSA9IE5hdGl2ZUltYWdlOjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBQbGF0Zm9ybUltYWdlKGltYWdlKS5zaXplKCk7
CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5hcmVhKCkgKiA0OwotICAgIAorCiAgICAgbV9m
cmFtZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gTmF0aXZlSW1hZ2U6
Omhhc0FscGhhKGltYWdlKTsKKyAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gUGxhdGZvcm1J
bWFnZShpbWFnZSkuaGFzQWxwaGEoKTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9
IHRydWU7CiAgICAgbV9mcmFtZXNbMF0ubV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOwogfQpAQCAt
MTI1LDkgKzEyNSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29s
IGRlc3Ryb3lBbGwpCiAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVh
bGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBt
ZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZlciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVh
cgogICAgICAgICAvLyB0aGUgbWV0YWRhdGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMg
PSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVh
cihmYWxzZSkpCi0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOwor
ICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSk7CiAg
ICAgfQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSwg
ZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ4LDggQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxsKQog
ICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBhbGxG
cmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLnVzZWRG
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0yODgs
MjEgKzI4NiwxOSBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFS
ZWNlaXZlZCkKICAgICAvLyBmcmFtZSBhZmZlY3RlZCBieSBhcHBlbmRpbmcgbmV3IGRhdGEgaGVy
ZS4gVGh1cyB3ZSBoYXZlIHRvIGNsZWFyIGFsbCB0aGUKICAgICAvLyBpbmNvbXBsZXRlIGZyYW1l
cyB0byBiZSBzYWZlLgogICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkID0gMDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IG1fZnJhbWVzKSB7CiAgICAgICAgIC8vIE5PVEU6IERvbid0IGNhbGwgZnJh
bWVJc0NvbXBsZXRlQXRJbmRleCgpIGhlcmUsIHRoYXQgd2lsbCB0cnkgdG8KICAgICAgICAgLy8g
ZGVjb2RlIGFueSB1bmNhY2hlZCAoaS5lLiBuZXZlci1kZWNvZGVkIG9yCiAgICAgICAgIC8vIGNs
ZWFyZWQtb24tYS1wcmV2aW91cy1wYXNzKSBmcmFtZXMhCi0gICAgICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tp
XS5tX2hhdmVNZXRhZGF0YSAmJiAhbV9mcmFtZXNbaV0ubV9pc0NvbXBsZXRlKQotICAgICAgICAg
ICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gKG1fZnJhbWVzW2ldLmNsZWFyKHRydWUpID8gZnJhbWVC
eXRlcyA6IDApOworICAgICAgICBpZiAoZnJhbWUubV9oYXZlTWV0YWRhdGEgJiYgIWZyYW1lLm1f
aXNDb21wbGV0ZSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lLmNsZWFy
KHRydWUpOwogICAgIH0KICAgICBkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0Ns
ZWFyZWQsIENsZWFyZWRTb3VyY2U6Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0
aGlzIGRpZmZlcmVudCBmb3IgaU9TPwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAo
IW1fZnJhbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2Zy
YW1lcy5zaXplKCkgLSAxXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2Zy
YW1lcy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0g
bV9mcmFtZXNbbV9mcmFtZXMuc2l6ZSgpIC0gMV0uY2xlYXIodHJ1ZSkpIHsKICAgICAgICAgICAg
IGRlbHRhQnl0ZXMgKz0gYnl0ZXM7CiAgICAgICAgICAgICBkZWx0YUJ5dGVzICs9IG1fZGVjb2Rl
ZFByb3BlcnRpZXNTaXplOwogICAgICAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUgPSAw
OwpAQCAtMzkwLDggKzM4Niw3IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNlbnRhdGlvblNjCiAgICAgLy8gcmUt
ZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KICAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXpl
KCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1fZnJh
bWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKICAgICAgICAgLy8gSWYgdGhlIGltYWdl
IGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVjb2RlIGEg
bGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKKyAg
ICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFyKHRydWUpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0g
c2l6ZUNoYW5nZTsKICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTQwNCw2ICszOTks
NDMgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2MKIAogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRl
eF0ubV9pbWFnZTsKIH0KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIGltYWdlID0g
ZnJhbWVJbWFnZUF0SW5kZXgoaSk7CisgICAgICAgIGlmIChpbWFnZSAmJiBQbGF0Zm9ybUltYWdl
KGltYWdlKS5zaXplKCkgPT0gc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9
CisgICAgCisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGltYWdlIGlmIHdlIGNh
bid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7
Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKQoreworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7Cit9CisKK1ZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2
ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6
ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdElu
ZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBpbWFnZXM7Cit9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewpAQCAtNDIxLDExICs0NTMsNiBAQCBmbG9hdCBCaXRt
YXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIHJldHVybiBt
X2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOwotfQotCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCkBAIC03MDAsMTcgKzcyNyw1NCBAQCBDb2xv
ciBCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENv
bG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENv
bG9yID0gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2lt
YWdlLmdldCgpKTsKKyAgICBtX3NvbGlkQ29sb3IgPSBQbGF0Zm9ybUltYWdlKG1fZnJhbWVzWzBd
Lm1faW1hZ2UpLnNpbmdsZVBpeGVsU29saWRDb2xvcigpOwogICAgIAogICAgIEFTU0VSVChtX3Nv
bGlkQ29sb3IpOwogICAgIHJldHVybiBtX3NvbGlkQ29sb3IudmFsdWUoKTsKIH0KICAgICAKK2Jv
b2wgQml0bWFwSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcigpCit7CisgICAgYXV0byBpbWFnZSA9
IGZyYW1lSW1hZ2VBdEluZGV4KDApOworICAgIHJldHVybiAhaW1hZ2UgPyBmYWxzZSA6IFBsYXRm
b3JtSW1hZ2UoaW1hZ2UpLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRt
YXBJbWFnZTo6Y2FuQW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBm
cmFtZUNvdW50KCkgPiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNF
bXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAg
c3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBm
aWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQs
IGRlc3RSZWN0LCBzcmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFy
bHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRp
b24oKSk7CisgICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0g
UmVzcGVjdEltYWdlT3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2Uo
aW1hZ2UpLmRyYXcoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUs
IG9yaWVudGF0aW9uKTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBp
bWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdl
OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3
NTg5MjljZDg3ZmFkYWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjI1MDQxMzc2MjRlNmFlOGM0
ZWMyMWU3YTVmMmZlZTEzZTdhNzFkZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdl
T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0UoQ0cpIHx8IFVTRShB
UFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsMjUgKzQ4LDkgQEAgdHlw
ZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6IHB1Ymxp
YyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNh
bkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRhIG1lbWJl
cnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAgSW50U2l6ZSBzaXpl
KGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBOYXRpdmVJ
bWFnZVB0ciYpOwotfQotCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KIC8vIEZyYW1lRGF0YSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03NSwxOCArNjAsMzAgQEAgcHVibGljOgog
ICAgIEZyYW1lRGF0YSgpCiAgICAgICAgIDogbV9oYXZlTWV0YWRhdGEoZmFsc2UpCiAgICAgICAg
ICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1ZSkKKyAgICAg
ICAgLCBtX2hhc0FscGhhKGZhbHNlKQogICAgIHsKICAgICB9CiAKICAgICB+RnJhbWVEYXRhKCkK
LSAgICB7IAotICAgICAgICBjbGVhcih0cnVlKTsKKyAgICB7CisgICAgICAgIGlmIChtX2ltYWdl
KQorICAgICAgICAgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygpOwog
ICAgIH0KIAogICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2UgZGF0YSBvbiB0aGUgZnJhbWUs
IGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgogICAgIC8vIFJldHVybnMgd2hldGhlciB0
aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0gICAgYm9vbCBjbGVhcihib29s
IGNsZWFyTWV0YWRhdGEpOworICAgIHVuc2lnbmVkIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSB1c2VkRnJhbWVCeXRlcygpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisgICAgICAgICAgICBtX2hhdmVN
ZXRhZGF0YSA9IGZhbHNlOworCisgICAgICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7CisgICAg
ICAgIG1faW1hZ2UgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiBmcmFtZUJ5dGVzOworICAg
IH0KICAgICAKICAgICB1bnNpZ25lZCB1c2VkRnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2UgPyBtX2ZyYW1lQnl0ZXMgOiAwOyB9CiAKQEAgLTE1NSwxMiArMTUyLDYgQEAgcHVibGlj
OgogICAgIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSBvdmVycmlkZTsKICNlbmRp
ZgogCi0jaWYgVVNFKENHKQotICAgIFdFQkNPUkVfRVhQT1JUIENHSW1hZ2VSZWYgZ2V0Q0dJbWFn
ZVJlZigpIG92ZXJyaWRlOwotICAgIENHSW1hZ2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXpl
KGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0
Q0dJbWFnZUFycmF5KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBnZXRIQklUTUFQ
T2ZTaXplKEhCSVRNQVAsIGNvbnN0IEludFNpemUqKSBvdmVycmlkZTsKQEAgLTE3NCw4ICsxNjUs
MTMgQEAgcHVibGljOgogICAgIEV2YXNfT2JqZWN0KiBnZXRFdmFzT2JqZWN0KEV2YXMqKSBvdmVy
cmlkZTsKICNlbmRpZgogCisgICAgV0VCQ09SRV9FWFBPUlQgTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2UoKSBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShj
b25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGUgeyByZXR1cm4gZnJhbWVPcmllbnRhdGlvbkF0
SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFt
ZXNOYXRpdmVJbWFnZXMoKSBvdmVycmlkZTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGlzQWxtb3N0U29saWRDb2xvcigpOwogCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVP
cGFxdWUoKSBvdmVycmlkZTsKIApAQCAtMjE1LDcgKzIxMSw2IEBAIHByb3RlY3RlZDoKICAgICBz
aXplX3QgZnJhbWVDb3VudCgpOwogCiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25TY2FsZUhpbnQgPSAxKTsKLSAgICBOYXRpdmVJ
bWFnZVB0ciBjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCiAgICAgYm9v
bCBoYXZlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggN2EyOTk5MmY3NzE4OGUwMzgyOGQ4MGE2NWI4YmUyY2Q4
ZGMyZGU3Ni4uMzIyM2MxY2Q2N2EyMTA1ZWJmMmIxNTY3Njk2ODgwOTdmYjIyNzc2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC0xMzcsOCArMTM3LDExIEBA
IHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxlLCBT
cGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQog
ICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7
IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOyB9CisgICAg
dmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIHsgcmV0
dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4K
IApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDRkRhdGFSZWYgZ2V0
VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLSNpZiBV
U0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYoKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6
ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmV0YWlu
UHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSNl
bmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQKEhC
SVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBPZlNp
emUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWI3YWVhNDg5ZjNlYjJhODI4NzcxYzIxMDNlOGQ0ZDBiZTE3YmU1ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaApAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUg
IkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3Mg
SW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworY2xhc3MgUGxhdGZvcm1JbWFnZSB7
CitwdWJsaWM6CisgICAgUGxhdGZvcm1JbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2Up
CisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc05p
bCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltYWdlOyB9CisgICAgdm9pZCBjbGVhclN1YkltYWdlcygp
OworCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0
OworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OworICAgIGJvb2wgaXNB
bG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgY29uc3Qg
SW1hZ2VPcmllbnRhdGlvbiYpIGNvbnN0OworCisgICAgc3RhdGljIGZsb2F0IHN1YnNhbXBsaW5n
U2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0KTsKKworcHJpdmF0ZToKKyNpZiBVU0UoQ0cpCisgICAgQ0dJbWFn
ZVJlZiBjZ0ltYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1faW1hZ2UuZ2V0KCkg
OiBudWxscHRyOyB9CisjZW5kaWYKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworfTsKKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCmluZGV4IDg0YzdkNjIzMjRmNjQ3MTFlMTY1ZTUy
NDNkZjg4ZjIxYTUwZWQ3ZTkuLjIwYjU2ODkzMzc1MmFkMGZjZTEwYjM2NGZlMDEyZDQ4MWU2NDdk
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dXBkYXRlRGlzcGxheU1vZGUo
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKKyAg
ICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdXNlZEltYWdlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIG1fZGlzcGxheU1vZGUgPSBQYWludEl0QmxhY2s7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTc3MjJiZWM1M2FiOGEwOGE4ZGE4NTI4YjllMGQ3YzRkMGNkNDEzNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3Qg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb1N1cmZh
Y2VTaXplKGltYWdlLmdldCgpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvX3N1cmZhY2VfZ2V0X2Nv
bnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7Ci19Ci0KLUNvbG9yIHNp
bmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2Up
Ci17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0aXZlSW1hZ2U6OnNpemUo
aW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAg
aWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0Vf
VFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBSR0JBMzIqIHBpeGVs
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJH
QigqcGl4ZWwpOwotfQotCi19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMs
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLAotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSAgICBpZiAoIWRzdC53aWR0aCgp
IHx8ICFkc3QuaGVpZ2h0KCkgfHwgIXNyYy53aWR0aCgpIHx8ICFzcmMuaGVpZ2h0KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0KLSAgICBhdXRvIHN1cmZhY2Ug
PSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAgaWYgKCFzdXJmYWNlKSAv
LyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAg
ICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250
ZXh0LCBkc3QsIGNvbG9yLCBvcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb250
ZXh0LnNhdmUoKTsKLQotICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgotICAg
IGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIGJsZW5kTW9kZSA9PSBCbGVuZE1vZGVO
b3JtYWwgJiYgIWZyYW1lSGFzQWxwaGFBdEluZGV4KG1fY3VycmVudEZyYW1lKSkKLSAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7Ci0gICAgZWxzZQot
ICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKLQot
I2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgSW50U2l6ZSBzY2Fs
ZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgpKTsKLSAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmMsIHNj
YWxlZFNpemUpOwotI2Vsc2UKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyYyk7Ci0j
ZW5kaWYKLQotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbihkZXNjcmlwdGlv
bi5pbWFnZU9yaWVudGF0aW9uKCkpOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBmcmFtZU9y
aWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0g
ICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBkc3Q7Ci0KLSAgICBpZiAoZnJhbWVPcmllbnRhdGlvbiAh
PSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewotICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9u
IGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCi0gICAgICAgIGNvbnRleHQudHJh
bnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgICAgIGRzdFJlY3Quc2V0TG9j
YXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oZnJhbWVPcmll
bnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChkc3RSZWN0LnNpemUoKSkpOwotICAgICAgICBp
ZiAoZnJhbWVPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7Ci0gICAgICAgICAgICAv
LyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWln
aHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCi0gICAgICAgICAgICAv
LyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVk
IHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAgZHN0UmVjdCA9IEZsb2F0UmVj
dChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3QuaGVpZ2h0KCksIGRzdFJlY3Qud2lk
dGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJmYWNlLmdldCgpLCBkc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIGNvbnRleHQpOwotCi0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci0KLSAgICBpZiAoaW1h
Z2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Ci19
Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYg
KGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBp
ZiAobV9pbWFnZSkgewotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2JjNmZjOGQzYTQ0MDg5NzA0MjlmZWRhNTczYmRkODcyM2E2ZTBjNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtSW1hZ2VDYWlyby5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxj
YWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6Y2xl
YXJTdWJJbWFnZXMoKQoreworfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25z
dAoreworICAgIHJldHVybiBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworfQorCiti
b29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9f
c3VyZmFjZV9nZXRfY29udGVudChtX2ltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9S
OworfQorCitDb2xvciBQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25z
dAoreworICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShtX2ltYWdlKSAhPSBJbnRTaXplKDEsIDEp
KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90
eXBlKG1faW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKKyAgICAgICAg
cmV0dXJuIENvbG9yKCk7CisKKyAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2ltYWdlLmdldCgpKSk7
CisgICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Cit9CisKK2Jv
b2wgUGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Zsb2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JikKK3sKKyAg
ICByZXR1cm4gMTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRTaXplJiwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBt
b2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICAKKyAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlv
bi4KKyAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0gQmxl
bmRNb2RlTm9ybWFsICYmICFoYXNBbHBoYSgpKQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKElNQUdF
X0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1
cmZhY2VTaXplKHN1cmZhY2UuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qg
PSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6ZSk7CisjZWxz
ZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKKyNlbmRpZgorICAgICAgICAK
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0OworICAgICAgICAKKyAg
ICBpZiAoZnJhbWVPcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgeworICAg
ICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwg
MCkuCisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7
CisgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKKyAg
ICAgICAgY29udGV4dC5jb25jYXRDVE0oZnJhbWVPcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVm
YXVsdChhZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAoZnJhbWVPcmllbnRh
dGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgZGVzdGluYXRp
b24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSByZXZl
cnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAgICAgICAvLyB0aGUgaW1hZ2UsIGFz
IGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQg
YmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9IEZsb2F0UmVjdCh7IH0s
IGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZSgpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1
cmZhY2UuZ2V0KCksIGFkanVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7
CisKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDNjODFhMTcwYmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIw
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIK
LSNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotCi0jaWYgVVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2Vz
L0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0j
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShXSU4pCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2
ZUltYWdlIHsKLQotSW50U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1h
Z2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6ZShDR0ltYWdlR2V0
V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci19Ci0K
LWJvb2wgaGFzQWxwaGEoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikKLXsKLSAgICAvLyBG
SVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYg
aGF2ZSBhbHBoYSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbG9yIHNp
bmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQot
ewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpzaXplKGlt
YWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAg
ICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBiaXRtYXBDb250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihw
aXhlbCksIHNSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAgICBpZiAoIWJpdG1h
cENvbnRleHQpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIENHQ29udGV4dFNl
dEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBD
R0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAx
LCAxKSwgaW1hZ2UuZ2V0KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAgIHJl
dHVybiBDb2xvcigwLCAwLCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1
NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAv
IHBpeGVsWzNdLCBwaXhlbFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJv
b2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9o
YXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci0KLSAg
ICBpZiAobV9pbWFnZSkgewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJpbWFnZUNh
Y2hlKCkuY2xlYXJJbWFnZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBtX2ltYWdl
ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCi17Ci0gICAg
cmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0ltYWdlUmVmIEJpdG1h
cEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsK
LSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1h
Z2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkK
LSAgICAgICAgICAgIHJldHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRv
IHRoZSBkZWZhdWx0IENHSW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQot
ICAgIHJldHVybiBnZXRDR0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxDRkFycmF5UmVmPiBC
aXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFt
ZUNvdW50KCk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShOVUxM
LCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9IGZy
YW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVl
KGFycmF5LCBjdXJyRnJhbWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihhcnJheSk7Ci19
Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9u
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXJ0
QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0j
ZW5kaWYKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICAvLyBOZXZlciB1
c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0gICAg
aWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAg
ICAgICBpbWFnZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1l
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0
ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShj
dHh0LnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUg
PSBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Qu
c2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Qu
c2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAgaW1hZ2UgPSBmcmFt
ZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Ci0gICAgfQot
Ci0gICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBp
bWFnZSB5ZXQuCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBjb2xvciA9IHNpbmds
ZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
ZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29tcG9zaXRlT3ApOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2
ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgotICAgIEludFNpemUg
aW1hZ2VTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UuZ2V0KCkpKTsKLSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRl
cyBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUg
c3Vic2FtcGxlZCBpbWFnZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7
Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9yaWdp
bmFsSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJlY3Qg
c3Vic2FtcGxlZEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAgICAg
c2NhbGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFnZUJvdW5kcywgc3Vi
c2FtcGxlZEltYWdlQm91bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbjsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24o
KSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBmcmFt
ZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LmRyYXdOYXRp
dmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3JjUmVjdCwgY29tcG9z
aXRlT3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIo
KSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCi1SZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gQml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4
KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwg
IW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsK
LQotICAgIGlmICghbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLmNy
ZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENH
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVy
bkNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKaW5kZXggYjQyOGQ1MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUyOGQ5Mi4uM2RhYTEz
OWFiN2VhNWI0MjE1Nzc4ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03Miw3ICs3Miw3IEBA
IENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGluIGJv
dGggZGlyZWN0aW9ucywgd2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAvLyBp
bnN0ZWFkIG9mIGN1c3RvbSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNy
YWNrcy4KICAgICBpZiAobV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIHdr
Q0dQYXR0ZXJuQ3JlYXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRDR0lt
YWdlUmVmKCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2lu
Zyk7CisgICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9y
bSh0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQ
YXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hvdWxk
IGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVz
aW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGluZyBi
ZWluZyByZW5kZXJlZC4KQEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4K
ICAgICBDR0Zsb2F0IHlTdGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8
PCAyMik7CiAKICAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYg
d2hlbiBpdCdzIGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBD
R0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRD
R0ltYWdlUmVmKCkpOworICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgp
LT5uYXRpdmVJbWFnZSgpLmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNr
cyBwYXR0ZXJuQ2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNl
Q2FsbGJhY2sgfTsKICAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdD
b25zdGFudFNwYWNpbmcsIFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRlMmMwMjdkYWQzNzg5ZjkwNjJiOTkzZTE3YjE2ZDNlNGJmN2NiYmUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9y
bUltYWdlQ0cuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtSW1hZ2UuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVk
ZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJ
bWFnZXMoKQoreworI2lmIENBQ0hFX1NVQklNQUdFUworICAgIGlmICghaXNOaWwoKSkKKyAgICAg
ICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UoY2dJbWFnZVJlZigpKTsKKyNlbmRpZgorfQor
CitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBpc05p
bCgpID8gSW50U2l6ZSgpIDogSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZVJlZigpKSwg
Q0dJbWFnZUdldEhlaWdodChjZ0ltYWdlUmVmKCkpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdl
OjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhl
IHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRD
b2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwg
MSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIHVuc2lnbmVkIGNoYXIgcGl4
ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwKKyAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0
bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAgICAKKyAgICBpZiAoIWJpdG1hcENvbnRleHQpCisgICAg
ICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRt
YXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3SW1h
Z2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgY2dJbWFnZVJl
ZigpKTsKKyAgICAKKyAgICBpZiAoIXBpeGVsWzNdKQorICAgICAgICByZXR1cm4gQ29sb3IoMCwg
MCwgMCwgMCk7CisgICAgCisgICAgcmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxb
M10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzNdKTsKK30KKyAgICAKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENv
bG9yKCkgY29uc3QKK3sKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gY2dJbWFnZVJlZigpOworICAg
IEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7CisgICAgCisg
ICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsK
KyAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGlt
YWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkRmlyc3QpIHsKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8g
aGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHNpemVfdCB3aWR0aCA9
IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgc2l6ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRI
ZWlnaHQoaW1hZ2UpOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1Bl
clJvdyhpbWFnZSk7CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFn
ZSkpKTsKKyAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIu
Z2V0KCkpOworICAgIAorICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNhbXBsaW5nIGRvdHMgb24g
dG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgorICAgIC8vIEZvciB0aGUg
aW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gbHVtaW5hbmNlIGFt
b25nIHRoZSBzYW1wbGUgcG9pbnQKKyAgICAvLyBhbmQgaXRzIHN1cnJvdW5kcyBwb2ludHMsIHNj
YWxlZCBieSB0cmFuc3BhcmVuY3kuCisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlUm93cyA9IDc7
CisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7CisgICAgLy8gRklYTUU6IFJlZmlu
ZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21tb2RhdGUgZGlmZmVyZW50
IGFzcGVjdCByYXRpb3MuCisgICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29scyB8fCBoZWlnaHQgPCBz
YW1wbGVSb3dzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRW5zdXJlIHRo
YXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBwZXJpbWV0ZXIuCisgICAg
Y29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLSAxKSAv
IChzYW1wbGVDb2xzIC0gMSk7CisgICAgY29uc3QgZmxvYXQgc3RyaWRlSGVpZ2h0ID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAxKTsKKyAgICBmbG9hdCBz
YW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOworICAgIAorICAgIC8vIEZpbmQgdGhlIGx1
bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KKyAgICBmbG9hdCB5ID0gMDsKKyAgICBjb25z
dCBVSW50OCogcm93ID0gZGF0YTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxl
Um93czsgKytpKSB7CisgICAgICAgIGZsb2F0IHggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBVSW50OCog
cDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7CisgICAgICAgICAgICAv
LyBSIEcgQiBBCisgICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAu
NzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDArMykgLyAyNTU7CisgICAg
ICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOworICAgICAgICB9CisgICAgICAgIHkgKz0gc3RyaWRl
SGVpZ2h0OworICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41KSkg
KiBieXRlc1BlclJvdzsKKyAgICB9CisgICAgCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSBz
Y29yZS4KKyAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAx
OyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgeworICAgICAgICAgICAgZmxvYXQgZGlmZiA9IHNh
bXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1wbGVzW2ldW2ogLSAxXSAr
IHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07CisgICAgICAgICAgICBhY2N1
bVNjb3JlICs9IGRpZmYgKiBkaWZmOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRo
ZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBh
bmQgMjU1XjIuCisgICAgcmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAy
KSAqIChzYW1wbGVDb2xzIC0gMik7Cit9CisKK2Zsb2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBs
aW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCit7CisgICAgLy8gTmV2ZXIgdXNlIHN1YnNh
bXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgorICAgIGlmICh3a0NH
Q29udGV4dElzUERGQ29udGV4dChjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgCisgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0g
Q0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgcmV0dXJuIHN0ZDo6bWluPGZsb2F0PigxLCBz
dGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53
aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3Qu
aGVpZ2h0KCkpKTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAor
eworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMg
c21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJbnRTaXplIHN1YnNhbXBsZWRJbWFnZVNpemUgPSBz
aXplKCk7CisgICAgCisgICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhl
IHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBs
ZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAg
aWYgKHN1YnNhbXBsZWRJbWFnZVNpemUgIT0gc3JjU2l6ZSkKKyAgICAgICAgYWRqdXN0ZWRTcmNS
ZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBGbG9hdFJlY3QoeyB9LCBzcmNTaXplKSwgRmxvYXRSZWN0
KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6ZSkpOworICAgIAorICAgIGNvbnRleHQuZHJhd05hdGl2
ZUltYWdlKG1faW1hZ2UsIHN1YnNhbXBsZWRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIG9wLCBtb2RlLCBvcmllbnRhdGlvbik7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBV
U0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQppbmRleCA4
OTcyMGQxNzM2NWRhN2U4YmE4NDY5ZDUyOTQ1NDhkNTE4NDdhN2ZlLi40NDc2ZmM1Zjg3YzM0OTg4
ZjZkOWFkNTVlZWJkOGQxYjliYjAyMmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uQ29jb2EubW0KQEAgLTEyOSw3ICsxMjksNyBAQCBUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkNvY29hOjp+VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYSgpCiB2b2lkIFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSgpCiB7CiAgICAgaWYgKGF1dG8gcmVwcmVzZW50YXRp
b24gPSBtX2NsaWVudC5jcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkpCi0gICAg
ICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNlbnRhdGlvbi0+Z2V0Q0dJ
bWFnZVJlZigpXTsKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJl
c2VudGF0aW9uLT5uYXRpdmVJbWFnZSgpLmdldCgpXTsKIH0KIAogdm9pZCBUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkNvY29hOjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2NhbGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KaW5kZXggZmEwMTFh
YTg4MTYzMDMwMDA5NDQ5OGViYzBmZmNhOWZiOWMzMDM0Yi4uYmYwODU3ZGI2YzY2ZjY0MTVjYjlm
ZTNhNGZhMzEyY2IwZTBhNjJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtODUsMzEgKzg1LDIyIEBAIENGRGF0YVJlZiBCaXRt
YXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKICAgICBpZiAobV90aWZmUmVwKQogICAg
ICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogCi0gICAgdW5zaWduZWQgbnVtRnJhbWVzID0g
ZnJhbWVDb3VudCgpOworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gdGhpcy0+ZnJhbWVzTmF0aXZl
SW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBudW1GcmFtZXMgaXMgemVybywgd2Uga25vdyBmb3IgY2Vy
dGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCisgICAgLy8gSWYgZnJhbWVz
SW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1hZ2UgZG9l
c24ndCBoYXZlIHZhbGlkIGRhdGEKICAgICAvLyBFdmVuIHRob3VnaCB0aGUgY2FsbCB0byBDR0lt
YWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YSB3aWxsIGZhaWwgYW5kIHdlJ2xsIGhhbmRsZSBp
dCBncmFjZWZ1bGx5LAogICAgIC8vIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGF0IGNhbGwg
d2lsbCBzcGFtIHRoZSBjb25zb2xlIHdpdGggYW4gZXJyb3IgbWVzc2FnZQotICAgIGlmICghbnVt
RnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFZlY3RvcjxDR0ltYWdlUmVmPiBpbWFn
ZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1lczsgKytpICkgewotICAg
ICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAg
ICAgICAgaWYgKGNnSW1hZ2UpCi0gICAgICAgICAgICBpbWFnZXMuYXBwZW5kKGNnSW1hZ2UpOwot
ICAgIH0KLQotICAgIHVuc2lnbmVkIG51bVZhbGlkRnJhbWVzID0gaW1hZ2VzLnNpemUoKTsKKyAg
ICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0
ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRl
c3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRh
LmdldCgpLCBrVVRUeXBlVElGRiwgbnVtVmFsaWRGcmFtZXMsIDApKTsKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3Rp
bmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJRkYsIG5hdGl2ZUltYWdl
cy5zaXplKCksIDApKTsKIAogICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1WYWxpZEZyYW1lczsgKytpKQotICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFn
ZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2VzW2ldLCAwKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZl
SW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdl
KGRlc3RpbmF0aW9uLmdldCgpLCBuYXRpdmVJbWFnZS5nZXQoKSwgMCk7CiAKICAgICBDR0ltYWdl
RGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5
M2FiZjRjZjUxZGQxYTRkLi5kMTE0NTRiMDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4
Nyw3IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5
ZXIoKSBjb25zdAogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBt
X3ByZXZpZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJl
dmlld0ltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hl
Lm1tCmluZGV4IGI2NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdlMWYzYjEuLjdjNWVk
MjEwZGRiMmEzMmE3NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDYWNoZS5tbQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JVUkw6
KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0gZG93
bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFj
YWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBjYWNo
ZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8gUExB
VEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Nn
L1dLSWNvbkRhdGFiYXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Nn
L1dLSWNvbkRhdGFiYXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjExYTUyYWExZTUzOTAxOWZh
NmMxYzQ2NzI1YWUuLjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZjODgxZGZlNTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFz
ZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0
YWJhc2VDRy5jcHAKQEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IENHSW1hZ2VSZWYgV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNvbkRhdGFi
YXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6ZSkKIHsK
ICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdl
VVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5nZXRG
aXJzdENHSW1hZ2VSZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgp
LCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4gaW1hZ2Ug
PyBpbWFnZS0+bmF0aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUu
d2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVsbHB0cjsK
IH0KIAogQ0ZBcnJheVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JVUkwo
V0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7CiAg
ICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVS
TCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Q0dJ
bWFnZUFycmF5KCkubGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1lc05hdGl2
ZUltYWdlcygpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3Jl
YXRlTXV0YWJsZShudWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2Fs
bEJhY2tzKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOworICAgIAor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLm1tCmluZGV4IDlhMjgxMzZlYmFhMzQ5NDQ2MGYwMTk1ZTUxODcwZDE2M2U4
Nzg0NTMuLmFhNmQ0N2UzZjA3ZTNiNTg3ZDUzMDk4YWU2MDRmZDZjYzlkYzllOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCkBAIC00MDc5LDcgKzQwNzksNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRhdGlv
blNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJvbAog
ewogICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1h
Z2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9j
XSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250
ZW50SW1hZ2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tV
SUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0lu
ZGljYXRvci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1dG9yZWxlYXNlXTsK
IH0KIAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29udHJv
bGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggYzExYmU5NTkw
ZTdhOGVkYTY2Y2Y4Mjc2NDc1YWEyNWEyNDIyZjgxOC4uYzdlYWEwZTZjOGNiYTM1ZjZlYWRkNDMx
MmM2ZDkxNmU0ZTY4YWY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTcyNiw2OSArMTcyNiw2IEBAIHZvaWQgUGx1Z2luVmll
dzo6d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1aW50
NjRfdCB3aW5kCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIGJvb2wg
aXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17Ci0gICAgQ0dJbWFnZVJl
ZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFTU0VSVChDR0ltYWdlR2V0
Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1hcEluZm8gaW1hZ2VJ
bmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlmICghKGltYWdlSW5mbyAm
IGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0bWFwQWxw
aGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewotICAgICAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4ZWwgZm9y
bWF0cy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOwot
ICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBzaXplX3Qg
Ynl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwotCi0gICAgUmV0YWlu
UHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEo
Q0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25zdCBVSW50OCogZGF0YSA9
IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgLy8gT3ZlcmxheSBhIGdy
aWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUg
aW1hZ2UuCi0gICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlm
ZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2ludAotICAgIC8vIGFuZCBp
dHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4KLSAgICBjb25zdCB1
bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVDb2xzID0g
NzsKLSAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFu
ZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAgICBpZiAod2lkdGggPCBz
YW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1h
Z2UgcGVyaW1ldGVyLgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAgIGNvbnN0IGZsb2F0IHN0
cmlkZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dz
IC0gMSk7Ci0gICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKLQotICAg
IC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KLSAgICBmbG9hdCB5
ID0gMDsKLSAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHggPSAwOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7Ci0gICAgICAgICAg
ICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7
Ci0gICAgICAgICAgICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAu
MjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDAr
MykgLyAyNTU7Ci0gICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwotICAgICAgICB9Ci0gICAg
ICAgIHkgKz0gc3RyaWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0
PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUg
dGhlIGltYWdlIHNjb3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAwOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDE7IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0gICAgICAgICAgICBmbG9h
dCBkaWZmID0gc2FtcGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNb
aV1baiAtIDFdICsgc2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKLSAgICAg
ICAgICAgIGFjY3VtU2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJhbmdl
IG9mIDAgYW5kIDI1NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1wbGVS
b3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1Z2luVmll
dzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9TTkFQ
U0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQpAQCAtMTgwOCw3ICsxNzQ1LDcgQEAgdm9pZCBQbHVn
aW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmIChzbmFwc2hv
dEltYWdlKSB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJ
QykKLSAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBpc0FsbW9z
dFNvbGlkQ29sb3IoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBzdGF0aWNfcG9p
bnRlcl9jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNBbG1vc3RTb2xpZENvbG9y
KCk7CiAgICAgICAgICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90SXNBbG1vc3RTb2xpZENv
bG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281156</attachid>
            <date>2016-06-12 22:18:14 -0700</date>
            <delta_ts>2016-06-12 22:35:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160612221948.patch</filename>
            <type>text/plain</type>
            <size>71448</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNjQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNmMmE0ZTliZWMyOTY4
MDhhMDliMjI1ZWMzOWY1ZDgzNzc3ZmY0OC4uN2UyMjJmMzMzNjkzM2NiZTFhZThmZTBhOTQ5NTRk
YTFlNmM0NjM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDE2LTA2LTEyICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9k
dWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFn
ZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4
Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlzIHRvIG1vdmUgdGhlIHBsYXRmb3Jt
IGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20gQml0bWFwSW1hZ2UgdG8gUGxhdGZv
cm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJsZSBvZiAKKyAgICAgICAgZHJhd2lu
ZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFnZVB0ciBxdWVzdGlvbnMgd2hlbiBh
biBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWlsYWJsZS4gQXBhcnQgZnJvbSBkcmF3
aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3aWxsIGJlCisgICAgICAgIGNhbGxl
ZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRhIHNvIHdlIHdpbGwga2VlcCBldmVy
eXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIuIEJ1dCB3ZSB3aWxsIGNhc3QgdGhl
IE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hlbgorICAgICAgICBhIHBsYXRmb3Jt
IGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0t
IENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtE
T01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBh
Z2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0
b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAg
ICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNv
ZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRh
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAg
ICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBp
cyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3Ro
IG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29u
c3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdl
UmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VB
cnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUlt
YWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1v
c3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBs
aW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhh
c0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29s
aWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlk
Q29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZpZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMg
d2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3MgdG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTogUmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxl
IGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxpbmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0
aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6CisKIDIwMTYtMDYtMDMgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlUmVzcG9uc2VCYXNlIGNsZWFu
dXAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggOThkMmJlNmQ4MzA0NjA3NjE2MzE3MjZhMmU5ZWMxYmFh
Zjg2OTE0NS4uOTczZGRhYjIxNjkwMjMxZDdiOTc3NmUzNWU1MDM0NjhlNTY1NTYzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA2LTEyICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3Jt
SW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hl
Lm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFnZUZvclVSTDpdKToKKwogMjAxNi0wNi0wMiAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIEFk
ZCBXZWJJREwgc3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGVhZmQyMzRjZGZkMjkyZTZkYWJkN2QyZDJhNWUzZTNkZGY3NjQ4OTMuLjMwZDkxZTVjN2Uw
Y2QyZGU1YThhYjZkNzhhNmE1ZmJjOGFmYTdiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBA
QAorMjAxNi0wNi0xMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29t
PgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3Jh
cHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3Bw
OgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKToKKyAgICAgICAg
KFdLSWNvbkRhdGFiYXNlVHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTCk6CisgICAgICAgIEl0IHdh
cyB0aGUgb25seSBwbGFjZSBpbiB0aGUgY29kZSB3aGljaCB1c2VzIEJpdG1hcEltYWdlOjpnZXRD
R0ltYWdlQXJyYXkoKS4KKyAgICAgICAgQ2FsbCBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1h
Z2VzKCkgaW5zdGVhZCBhbmQgZm9ybSB0aGUgcmV0dXJuZWQKKyAgICAgICAgVmVjdG9yPE5hdGl2
ZUltYWdlUHRyPiBidWlsZCB0aGUgQ0ZBcnJheVJlZi4KKyAgICAgICAgCisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOl0p
OgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKToKKyAgICAgICAg
CisgICAgICAgIChXZWJLaXQ6OmlzQWxtb3N0U29saWRDb2xvcik6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUgdGhlIHN0YXRpYyBmdW5jdGlvbiBpc0FsbW9zdFNvbGlkQ29sb3IgdG8gUGxhdGZvcm1J
bWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkuCisKIDIwMTYtMDYtMDMgIENzYWJhIE9zenRyb2dv
bsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggdGhlICFFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkgYnVpbGQgYWZ0ZXIgcjIwMTU3NQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpp
bmRleCAzMjlhMTYwNzkxODk4NjEwM2M2MGUwYjYwZDQwY2VlMGVmNmJjNjgxLi5jZGZkOWFhYmMw
Y2VkYTVlMzFmYzc3Yzg1MjI0ZmU0ODdkODRiOWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtMTIyLDcgKzEyMiw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKQEAgLTEzNCw2ICsxMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWly
by5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENh
aXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBkNzFjZWVlNTc1MmUzNThlYmY5
Mjg4YmY1MTQ5ZDdmOGQxNjE3NWU3Li45MjUwMmE0NDkyNTBlYjE5MTk0ZWVhMmY2YTBiZjY5Yjdm
N2JjNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtOTgsNyArOTgsNiBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Jh
Y2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvWDExLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0
Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAt
MTEyLDYgKzExMSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1D
b250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFn
ZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUGF0aENhaXJv
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5
NjBmNTUyMzQzZDkyMGYwN2IzLi5jMjAzMDkxYTkzOWM2ZjdhMjJjZmJmODlmODJiMGMzMWVkOTJi
YTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xD
b250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhaXJvLmNwcApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1h
dHJpeENhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDA5NTg3MmQzYWM2ZWVhMjY1YWUzMTU5MmIyNzIyOTljNGZmMmUz
M2IuLmFiMWE0OWNmOTY0MDQ1OWU0ZWI3YmJkY2NmY2UzNzlhMGQyMDliZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0MzQs
NyArMTQzNCw3IEBACiAJCTM3NUNEMjMyMTE5RDQzQzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1Q0QyMzEx
MTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggKi87IH07CiAJCTM3NkRDQ0UxMTNCNEY5
NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAq
LzsgfTsKIAkJMzc3NEFCQTUwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3
NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTM3N0EzQTkwMTVF
RkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRt
YXBJbWFnZUNHLmNwcCAqLzsgfTsKKwkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRm
b3JtSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLzsg
fTsKIAkJMzc5MTlDMjMwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovOyB9OwogCQkzNzkxOUMyNDBC
N0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9Owog
CQkzNzkyOTE3QTE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTI5MTc4MTk4NUVGMzkwMEY0
QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0yMjc4LDYgKzIyNzgsNyBAQAogCQk1NTBBMEJDQTA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5h
bWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
aCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8qIFNp
bXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsgfTsK
IAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVBNjYw
MDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU4MDM3MTYxMUE2NkYwMEEw
MEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICov
OyB9OwpAQCAtODk0Myw3ICs4OTQ0LDcgQEAKIAkJMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFJ1
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzJCMDk1MTY1MzU4NTYwMDBB
NDlDQSAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQb3B1cE9wZW5pbmdPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE92ZXJsYXBUZXN0UmVxdWVzdENs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzNzdBM0E4RjE1RUZDRTlBMDA1
OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCaXRtYXBJbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Mzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybUltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRp
b25JdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9z
aXRpb25JdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIy
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3OTI5MTc4MTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcmVkZW50aWFsQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTg3NSw2ICs5ODc2LDcgQEAKIAkJNTUwQTBCQzgwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1Qjg3RUExQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9y
bUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVs
YXRlZENsaWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMTgyNCw3ICsyMTgyNiw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAv
KiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0Yz
MzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUz
ODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjE4NTEsNiArMjE4NTIsNyBAQAog
CQkJCUE4MEEzOEZEMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIy
NzUzNTM2MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlC
Mjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3
N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFG
QzQwRkI4MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywK
IAkJCQkxRkM0MEZCNzE2NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5o
ICovLAogCQkJCUIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDUzLDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5
MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyog
UGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUlt
YWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIu
aCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291
cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3Jt
VGV4dFRyYWNrLmggKi8sCkBAIC0yNTc5MSw2ICsyNTc5NCw3IEBACiAJCQkJODVFNzExQjkwQUM1
RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVBMEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1M
TWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAy
NzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2
NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1MTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyog
RE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MTUyLDcgKzI5MTU2LDcg
QEAKIAkJCQlGREM1NEYwNDEzOTlCMERBMDA4RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAyNjEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkUHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAv
KiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzNzdBM0E5MDE1RUZDRTlCMDA1
OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzNzdBM0E5MDE1
RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3NkQ2Qzc4MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTJFREVGMUYzMTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMUQzMUNEQzE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET00ubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDEx
ZWEzZmQ4YzA0Njk3NGM1NWQ0OGUzOTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3
MDZjMTBmYzBmN2FmNDA0MjU2MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpA
QCAtNjA2LDcgKzYwNiw3IEBAIC0gKHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1h
Z2VSZWYqKWNnSW1hZ2UgYW5kUmVjdHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0
SW5kaWNhdG9yKSB7CiAgICAgICAgIGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5j
b250ZW50SW1hZ2UoKSkKLSAgICAgICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRv
cmVsZWFzZShDR0ltYWdlUmV0YWluKGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAg
ICAgICpjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9
CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cubW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThl
MmNlNmQxOTBmMjQ4OS4uYTc0ZGE4NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBA
IC0xNjIsOSArMTYyLDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClm
cmFtZSB0ZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0lt
YWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2Fs
ZUZhY3RvcigpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAg
ICBpZiAoaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0g
ICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhp
Z2hsaWdodCgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4
dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwog
ICAgIGVsc2UKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50
SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBib3VuY2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FL
ZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1
cmF0CiBzdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9z
c2ZhZGVBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRl
eHRJbmRpY2F0b3IpCiB7CiAgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFk
ZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29u
dGVudHMiXTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJ
bmRpY2F0b3IuY29udGVudEltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCkt
Pm5hdGl2ZUltYWdlKCk7CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZClj
b250ZW50c0ltYWdlLmdldCgpXTsKICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2Rl
OmtDQUZpbGxNb2RlRm9yd2FyZHNdOwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3Zl
ZE9uQ29tcGxldGlvbjpOT107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggMDY3NmNlMDcyNTA3NmJiOTVjY2QyNmM1YzFhNTI4ZDE2
M2E0NjUyYS4uMzU2NzQwMTE5MDg2OTk2NGEwYjc2NDQzYzU5MDAwNWIyYzk0NjYzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAt
NzAsMTEgKzcwLDExIEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYm
IGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKIHsKICAgICAvLyBTaW5jZSB3ZSBkb24n
dCBoYXZlIGEgZGVjb2Rlciwgd2UgY2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRp
b24uCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2Ft
ZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgwLgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbiA9IG1fc2l6ZSA9IE5hdGl2ZUltYWdlOjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBQbGF0Zm9ybUltYWdlKGltYWdlKS5zaXplKCk7
CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5hcmVhKCkgKiA0OwotICAgIAorCiAgICAgbV9m
cmFtZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gTmF0aXZlSW1hZ2U6
Omhhc0FscGhhKGltYWdlKTsKKyAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gUGxhdGZvcm1J
bWFnZShpbWFnZSkuaGFzQWxwaGEoKTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9
IHRydWU7CiAgICAgbV9mcmFtZXNbMF0ubV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOwogfQpAQCAt
MTI1LDkgKzEyNSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29s
IGRlc3Ryb3lBbGwpCiAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVh
bGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBt
ZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZlciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVh
cgogICAgICAgICAvLyB0aGUgbWV0YWRhdGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMg
PSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVh
cihmYWxzZSkpCi0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOwor
ICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSk7CiAg
ICAgfQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSwg
ZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ4LDggQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxsKQog
ICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBhbGxG
cmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLnVzZWRG
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0yODgs
MjEgKzI4NiwxOSBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFS
ZWNlaXZlZCkKICAgICAvLyBmcmFtZSBhZmZlY3RlZCBieSBhcHBlbmRpbmcgbmV3IGRhdGEgaGVy
ZS4gVGh1cyB3ZSBoYXZlIHRvIGNsZWFyIGFsbCB0aGUKICAgICAvLyBpbmNvbXBsZXRlIGZyYW1l
cyB0byBiZSBzYWZlLgogICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkID0gMDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IG1fZnJhbWVzKSB7CiAgICAgICAgIC8vIE5PVEU6IERvbid0IGNhbGwgZnJh
bWVJc0NvbXBsZXRlQXRJbmRleCgpIGhlcmUsIHRoYXQgd2lsbCB0cnkgdG8KICAgICAgICAgLy8g
ZGVjb2RlIGFueSB1bmNhY2hlZCAoaS5lLiBuZXZlci1kZWNvZGVkIG9yCiAgICAgICAgIC8vIGNs
ZWFyZWQtb24tYS1wcmV2aW91cy1wYXNzKSBmcmFtZXMhCi0gICAgICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tp
XS5tX2hhdmVNZXRhZGF0YSAmJiAhbV9mcmFtZXNbaV0ubV9pc0NvbXBsZXRlKQotICAgICAgICAg
ICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gKG1fZnJhbWVzW2ldLmNsZWFyKHRydWUpID8gZnJhbWVC
eXRlcyA6IDApOworICAgICAgICBpZiAoZnJhbWUubV9oYXZlTWV0YWRhdGEgJiYgIWZyYW1lLm1f
aXNDb21wbGV0ZSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lLmNsZWFy
KHRydWUpOwogICAgIH0KICAgICBkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0Ns
ZWFyZWQsIENsZWFyZWRTb3VyY2U6Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0
aGlzIGRpZmZlcmVudCBmb3IgaU9TPwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAo
IW1fZnJhbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2Zy
YW1lcy5zaXplKCkgLSAxXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2Zy
YW1lcy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0g
bV9mcmFtZXNbbV9mcmFtZXMuc2l6ZSgpIC0gMV0uY2xlYXIodHJ1ZSkpIHsKICAgICAgICAgICAg
IGRlbHRhQnl0ZXMgKz0gYnl0ZXM7CiAgICAgICAgICAgICBkZWx0YUJ5dGVzICs9IG1fZGVjb2Rl
ZFByb3BlcnRpZXNTaXplOwogICAgICAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUgPSAw
OwpAQCAtMzkwLDggKzM4Niw3IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNlbnRhdGlvblNjCiAgICAgLy8gcmUt
ZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KICAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXpl
KCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1fZnJh
bWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKICAgICAgICAgLy8gSWYgdGhlIGltYWdl
IGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVjb2RlIGEg
bGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKKyAg
ICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFyKHRydWUpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0g
c2l6ZUNoYW5nZTsKICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTQwNCw2ICszOTks
NDMgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2MKIAogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRl
eF0ubV9pbWFnZTsKIH0KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIGltYWdlID0g
ZnJhbWVJbWFnZUF0SW5kZXgoaSk7CisgICAgICAgIGlmIChpbWFnZSAmJiBQbGF0Zm9ybUltYWdl
KGltYWdlKS5zaXplKCkgPT0gc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9
CisgICAgCisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGltYWdlIGlmIHdlIGNh
bid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7
Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKQoreworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7Cit9CisKK1ZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2
ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6
ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdElu
ZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBpbWFnZXM7Cit9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewpAQCAtNDIxLDExICs0NTMsNiBAQCBmbG9hdCBCaXRt
YXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIHJldHVybiBt
X2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOwotfQotCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCkBAIC03MDAsMTcgKzcyNyw1NCBAQCBDb2xv
ciBCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENv
bG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENv
bG9yID0gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2lt
YWdlLmdldCgpKTsKKyAgICBtX3NvbGlkQ29sb3IgPSBQbGF0Zm9ybUltYWdlKG1fZnJhbWVzWzBd
Lm1faW1hZ2UpLnNpbmdsZVBpeGVsU29saWRDb2xvcigpOwogICAgIAogICAgIEFTU0VSVChtX3Nv
bGlkQ29sb3IpOwogICAgIHJldHVybiBtX3NvbGlkQ29sb3IudmFsdWUoKTsKIH0KICAgICAKK2Jv
b2wgQml0bWFwSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcigpCit7CisgICAgYXV0byBpbWFnZSA9
IGZyYW1lSW1hZ2VBdEluZGV4KDApOworICAgIHJldHVybiAhaW1hZ2UgPyBmYWxzZSA6IFBsYXRm
b3JtSW1hZ2UoaW1hZ2UpLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRt
YXBJbWFnZTo6Y2FuQW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBm
cmFtZUNvdW50KCkgPiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNF
bXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAg
c3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBm
aWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQs
IGRlc3RSZWN0LCBzcmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFy
bHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRp
b24oKSk7CisgICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0g
UmVzcGVjdEltYWdlT3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2Uo
aW1hZ2UpLmRyYXcoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUs
IG9yaWVudGF0aW9uKTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBp
bWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdl
OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3
NTg5MjljZDg3ZmFkYWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjI1MDQxMzc2MjRlNmFlOGM0
ZWMyMWU3YTVmMmZlZTEzZTdhNzFkZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdl
T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0UoQ0cpIHx8IFVTRShB
UFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsMjUgKzQ4LDkgQEAgdHlw
ZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6IHB1Ymxp
YyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNh
bkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRhIG1lbWJl
cnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAgSW50U2l6ZSBzaXpl
KGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBOYXRpdmVJ
bWFnZVB0ciYpOwotfQotCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KIC8vIEZyYW1lRGF0YSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03NSwxOCArNjAsMzAgQEAgcHVibGljOgog
ICAgIEZyYW1lRGF0YSgpCiAgICAgICAgIDogbV9oYXZlTWV0YWRhdGEoZmFsc2UpCiAgICAgICAg
ICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1ZSkKKyAgICAg
ICAgLCBtX2hhc0FscGhhKGZhbHNlKQogICAgIHsKICAgICB9CiAKICAgICB+RnJhbWVEYXRhKCkK
LSAgICB7IAotICAgICAgICBjbGVhcih0cnVlKTsKKyAgICB7CisgICAgICAgIGlmIChtX2ltYWdl
KQorICAgICAgICAgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygpOwog
ICAgIH0KIAogICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2UgZGF0YSBvbiB0aGUgZnJhbWUs
IGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgogICAgIC8vIFJldHVybnMgd2hldGhlciB0
aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0gICAgYm9vbCBjbGVhcihib29s
IGNsZWFyTWV0YWRhdGEpOworICAgIHVuc2lnbmVkIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSB1c2VkRnJhbWVCeXRlcygpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisgICAgICAgICAgICBtX2hhdmVN
ZXRhZGF0YSA9IGZhbHNlOworCisgICAgICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7CisgICAg
ICAgIG1faW1hZ2UgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiBmcmFtZUJ5dGVzOworICAg
IH0KICAgICAKICAgICB1bnNpZ25lZCB1c2VkRnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2UgPyBtX2ZyYW1lQnl0ZXMgOiAwOyB9CiAKQEAgLTE1NSwxMiArMTUyLDYgQEAgcHVibGlj
OgogICAgIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSBvdmVycmlkZTsKICNlbmRp
ZgogCi0jaWYgVVNFKENHKQotICAgIFdFQkNPUkVfRVhQT1JUIENHSW1hZ2VSZWYgZ2V0Q0dJbWFn
ZVJlZigpIG92ZXJyaWRlOwotICAgIENHSW1hZ2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXpl
KGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0
Q0dJbWFnZUFycmF5KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBnZXRIQklUTUFQ
T2ZTaXplKEhCSVRNQVAsIGNvbnN0IEludFNpemUqKSBvdmVycmlkZTsKQEAgLTE3NCw4ICsxNjUs
MTMgQEAgcHVibGljOgogICAgIEV2YXNfT2JqZWN0KiBnZXRFdmFzT2JqZWN0KEV2YXMqKSBvdmVy
cmlkZTsKICNlbmRpZgogCisgICAgV0VCQ09SRV9FWFBPUlQgTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2UoKSBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShj
b25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGUgeyByZXR1cm4gZnJhbWVPcmllbnRhdGlvbkF0
SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFt
ZXNOYXRpdmVJbWFnZXMoKSBvdmVycmlkZTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGlzQWxtb3N0U29saWRDb2xvcigpOwogCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVP
cGFxdWUoKSBvdmVycmlkZTsKIApAQCAtMjE1LDcgKzIxMSw2IEBAIHByb3RlY3RlZDoKICAgICBz
aXplX3QgZnJhbWVDb3VudCgpOwogCiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25TY2FsZUhpbnQgPSAxKTsKLSAgICBOYXRpdmVJ
bWFnZVB0ciBjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCiAgICAgYm9v
bCBoYXZlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggN2EyOTk5MmY3NzE4OGUwMzgyOGQ4MGE2NWI4YmUyY2Q4
ZGMyZGU3Ni4uMzIyM2MxY2Q2N2EyMTA1ZWJmMmIxNTY3Njk2ODgwOTdmYjIyNzc2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC0xMzcsOCArMTM3LDExIEBA
IHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxlLCBT
cGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQog
ICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7
IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOyB9CisgICAg
dmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIHsgcmV0
dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4K
IApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDRkRhdGFSZWYgZ2V0
VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLSNpZiBV
U0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYoKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6
ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmV0YWlu
UHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSNl
bmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQKEhC
SVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBPZlNp
emUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWI3YWVhNDg5ZjNlYjJhODI4NzcxYzIxMDNlOGQ0ZDBiZTE3YmU1ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaApAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUg
IkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3Mg
SW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworY2xhc3MgUGxhdGZvcm1JbWFnZSB7
CitwdWJsaWM6CisgICAgUGxhdGZvcm1JbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2Up
CisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc05p
bCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltYWdlOyB9CisgICAgdm9pZCBjbGVhclN1YkltYWdlcygp
OworCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0
OworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OworICAgIGJvb2wgaXNB
bG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgY29uc3Qg
SW1hZ2VPcmllbnRhdGlvbiYpIGNvbnN0OworCisgICAgc3RhdGljIGZsb2F0IHN1YnNhbXBsaW5n
U2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0KTsKKworcHJpdmF0ZToKKyNpZiBVU0UoQ0cpCisgICAgQ0dJbWFn
ZVJlZiBjZ0ltYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1faW1hZ2UuZ2V0KCkg
OiBudWxscHRyOyB9CisjZW5kaWYKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworfTsKKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCmluZGV4IDg0YzdkNjIzMjRmNjQ3MTFlMTY1ZTUy
NDNkZjg4ZjIxYTUwZWQ3ZTkuLjIwYjU2ODkzMzc1MmFkMGZjZTEwYjM2NGZlMDEyZDQ4MWU2NDdk
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dXBkYXRlRGlzcGxheU1vZGUo
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKKyAg
ICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdXNlZEltYWdlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIG1fZGlzcGxheU1vZGUgPSBQYWludEl0QmxhY2s7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTc3MjJiZWM1M2FiOGEwOGE4ZGE4NTI4YjllMGQ3YzRkMGNkNDEzNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3Qg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb1N1cmZh
Y2VTaXplKGltYWdlLmdldCgpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvX3N1cmZhY2VfZ2V0X2Nv
bnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7Ci19Ci0KLUNvbG9yIHNp
bmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2Up
Ci17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0aXZlSW1hZ2U6OnNpemUo
aW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAg
aWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0Vf
VFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBSR0JBMzIqIHBpeGVs
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJH
QigqcGl4ZWwpOwotfQotCi19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMs
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLAotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSAgICBpZiAoIWRzdC53aWR0aCgp
IHx8ICFkc3QuaGVpZ2h0KCkgfHwgIXNyYy53aWR0aCgpIHx8ICFzcmMuaGVpZ2h0KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0KLSAgICBhdXRvIHN1cmZhY2Ug
PSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAgaWYgKCFzdXJmYWNlKSAv
LyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAg
ICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250
ZXh0LCBkc3QsIGNvbG9yLCBvcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb250
ZXh0LnNhdmUoKTsKLQotICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgotICAg
IGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIGJsZW5kTW9kZSA9PSBCbGVuZE1vZGVO
b3JtYWwgJiYgIWZyYW1lSGFzQWxwaGFBdEluZGV4KG1fY3VycmVudEZyYW1lKSkKLSAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7Ci0gICAgZWxzZQot
ICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKLQot
I2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgSW50U2l6ZSBzY2Fs
ZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgpKTsKLSAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmMsIHNj
YWxlZFNpemUpOwotI2Vsc2UKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyYyk7Ci0j
ZW5kaWYKLQotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbihkZXNjcmlwdGlv
bi5pbWFnZU9yaWVudGF0aW9uKCkpOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBmcmFtZU9y
aWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0g
ICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBkc3Q7Ci0KLSAgICBpZiAoZnJhbWVPcmllbnRhdGlvbiAh
PSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewotICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9u
IGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCi0gICAgICAgIGNvbnRleHQudHJh
bnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgICAgIGRzdFJlY3Quc2V0TG9j
YXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oZnJhbWVPcmll
bnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChkc3RSZWN0LnNpemUoKSkpOwotICAgICAgICBp
ZiAoZnJhbWVPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7Ci0gICAgICAgICAgICAv
LyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWln
aHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCi0gICAgICAgICAgICAv
LyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVk
IHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAgZHN0UmVjdCA9IEZsb2F0UmVj
dChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3QuaGVpZ2h0KCksIGRzdFJlY3Qud2lk
dGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJmYWNlLmdldCgpLCBkc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIGNvbnRleHQpOwotCi0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci0KLSAgICBpZiAoaW1h
Z2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Ci19
Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYg
KGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBp
ZiAobV9pbWFnZSkgewotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMWZkYTJkZWI4YzMzNTVkZjc0Yjc3MjU4NjdlMDhkNGFiMGI5YzM1MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtSW1hZ2VDYWlyby5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxj
YWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6Y2xl
YXJTdWJJbWFnZXMoKQoreworfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25z
dAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogY2Fpcm9TdXJmYWNlU2l6ZSht
X2ltYWdlLmdldCgpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgfHwgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChtX2lt
YWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOworfQorCitDb2xvciBQbGF0Zm9ybUlt
YWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlmIChpc05pbCgpIHx8
IHNpemUoKSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAg
IGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1faW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZB
Q0VfVFlQRV9JTUFHRSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBSR0JBMzIqIHBp
eGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShtX2ltYWdlLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxp
ZWRBUkdCKCpwaXhlbCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENv
bG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IFBsYXRmb3JtSW1h
Z2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBQbGF0Zm9ybUlt
YWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmll
bnRhdGlvbikgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAKKyAgICAvLyBTZXQg
dGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KKyAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNl
T3ZlciAmJiBtb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhaGFzQWxwaGEoKSkKKyAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgZWxzZQor
ICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgbW9kZSk7CisgICAgICAg
IAorI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgSW50U2l6ZSBz
Y2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgpKTsKKyAgICBGbG9hdFJl
Y3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNS
ZWN0LCBzY2FsZWRTaXplKTsKKyNlbHNlCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChz
cmNSZWN0KTsKKyNlbmRpZgorICAgICAgICAKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVj
dCA9IGRlc3RSZWN0OworICAgICAgICAKKyAgICBpZiAob3JpZW50YXRpb24gIT0gRGVmYXVsdElt
YWdlT3JpZW50YXRpb24pIHsKKyAgICAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRo
ZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgorICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShkc3RS
ZWN0LngoKSwgZHN0UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0
aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9yaWVudGF0aW9u
LnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7CisgICAgICAg
IGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAgICAgICAvLyBU
aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWlnaHQg
YWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAgICAgICAvLyB0
aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRv
IHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9IEZs
b2F0UmVjdCh7IH0sIGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZSgpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNl
VG9Db250ZXh0KHN1cmZhY2UuZ2V0KCksIGFkanVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgY29udGV4dCk7CisKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDNjODFhMTcwYmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJ
LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdl
T2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYgVVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktp
dFN5c3RlbUludGVyZmFjZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFt
ZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0lt
YWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6
ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdl
dCgpKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikK
LXsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhl
IENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAg
ICAKLUNvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUlt
YWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBi
aXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEs
IDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAg
ICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAg
IENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVD
b3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0
TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10p
Ci0gICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihw
aXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhl
bFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURh
dGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkK
LSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZl
bCA9IDA7Ci0KLSAgICBpZiAobV9pbWFnZSkgewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAg
ICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAg
ICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJl
ZigpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0lt
YWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFn
ZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJ
bnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdl
KSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENHSW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUg
cmlnaHQgc2l6ZQotICAgIHJldHVybiBnZXRDR0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxD
RkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3Qg
Y291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgCi0gICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRl
TXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1
cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJh
eUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJhbWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRD
RihhcnJheSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9T
KQotICAgIHN0YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5p
bWF0aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29u
dGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250
ZXh0KCkpKQotICAgICAgICBpbWFnZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1f
Y3VycmVudEZyYW1lKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVz
dGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29u
dGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNh
bXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAg
aW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2Fs
ZSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29u
J3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBj
b2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29t
cG9zaXRlT3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcg
bWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgot
ICAgIEludFNpemUgaW1hZ2VTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1h
Z2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsKLSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRo
ZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1h
cCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVj
dCA9IHNyY1JlY3Q7Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxv
YXRSZWN0IG9yaWdpbmFsSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAg
ICBGbG9hdFJlY3Qgc3Vic2FtcGxlZEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXpl
KTsKLSAgICAgICAgc2NhbGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFn
ZUJvdW5kcywgc3Vic2FtcGxlZEltYWdlQm91bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdl
T3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50
YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBj
dHh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3Jj
UmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGlt
YWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwot
fQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gQml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3Vu
dCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1l
KGluZGV4LCAwKTsKLQotICAgIGlmICghbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZl
bCkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJu
IG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5k
aWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BhdHRlcm5DRy5jcHAKaW5kZXggYjQyOGQ1MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUy
OGQ5Mi4uM2RhYTEzOWFiN2VhNWI0MjE1Nzc4ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03
Miw3ICs3Miw3IEBAIENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVw
ZWF0aW5nIGluIGJvdGggZGlyZWN0aW9ucywgd2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVy
bnMKICAgICAvLyBpbnN0ZWFkIG9mIGN1c3RvbSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1l
ZGdlIHBpeGVsIGNyYWNrcy4KICAgICBpZiAobV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAg
ICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFn
ZSgpLT5nZXRDR0ltYWdlUmVmKCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0Nv
bnN0YW50U3BhY2luZyk7CisgICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFn
ZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRy
YW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZM
VF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMg
cmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQg
aW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4KQEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVm
IFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVz
ZXJTcGFjZVRyYW4KICAgICBDR0Zsb2F0IHlTdGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVp
Z2h0KCkgOiAoMSA8PCAyMik7CiAKICAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhl
IENHSW1hZ2VSZWYgd2hlbiBpdCdzIGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2Fs
bGJhY2sKLSAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJ
bWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOworICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9
IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0
dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBh
dHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKICAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRm
b3JtSW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1Bh
dHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcsIFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1h
Z2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUlt
YWdlQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlMmMwMjdkYWQzNzg5ZjkwNjJiOTkzZTE3YjE2ZDNlNGJm
N2NiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0
aFRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgUGxhdGZvcm1JbWFn
ZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lmIENBQ0hFX1NVQklNQUdFUworICAgIGlmICghaXNO
aWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UoY2dJbWFnZVJlZigpKTsK
KyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25zdAoreworICAg
IHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJ
bWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlUmVmKCkpKTsKK30KKworYm9vbCBQ
bGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEFuc3dlciBj
b3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hh
bm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmds
ZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9
IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIHVuc2ln
bmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwg
c1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRM
YXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAgICAKKyAgICBpZiAoIWJpdG1hcENv
bnRleHQpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIENHQ29udGV4dFNldEJs
ZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0Nv
bnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAx
KSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAgICBpZiAoIXBpeGVsWzNdKQorICAgICAgICByZXR1
cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgCisgICAgcmV0dXJuIENvbG9yKHBpeGVsWzBdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1
IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKyAgICAKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aXNB
bG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gY2dJbWFn
ZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0g
OCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJ
bmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxp
dHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2spICE9IGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGJl
aW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHNp
emVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgc2l6ZV90IGhlaWdodCA9
IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHSW1h
Z2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4g
cHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQ
cm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQ
dHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAorICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNhbXBs
aW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgorICAg
IC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4g
bHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKKyAgICAvLyBhbmQgaXRzIHN1cnJvdW5k
cyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCisgICAgY29uc3QgdW5zaWduZWQgc2Ft
cGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7CisgICAgLy8g
RklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21tb2Rh
dGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCisgICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29scyB8
fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBwZXJp
bWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4o
d2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7CisgICAgY29uc3QgZmxvYXQgc3RyaWRlSGVp
Z2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAxKTsK
KyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOworICAgIAorICAgIC8v
IEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KKyAgICBmbG9hdCB5ID0g
MDsKKyAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2FtcGxlUm93czsgKytpKSB7CisgICAgICAgIGZsb2F0IHggPSAwOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7CisgICAgICAgICAgICBj
b25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7Cisg
ICAgICAgICAgICAvLyBSIEcgQiBBCisgICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAuMjEy
NSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDArMykg
LyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOworICAgICAgICB9CisgICAgICAg
IHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0PGlu
dD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKKyAgICB9CisgICAgCisgICAgLy8gRGV0ZXJtaW5l
IHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgeworICAgICAgICAgICAgZmxv
YXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1wbGVz
W2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07CisgICAg
ICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0aGUg
cmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAgcmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICogKHNh
bXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Cit9CisKK2Zsb2F0IFBsYXRmb3JtSW1h
Z2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCit7CisgICAgLy8gTmV2
ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgor
ICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
KSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGlu
YXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4
dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgcmV0dXJuIHN0ZDo6bWlu
PGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRo
IC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdo
dCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0
aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFuIGlt
YWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJbnRTaXplIHN1YnNhbXBsZWRJ
bWFnZVNpemUgPSBzaXplKCk7CisgICAgCisgICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29vcmRp
bmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQgdG8g
dGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNy
Y1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNpemUgIT0gc3JjU2l6ZSkKKyAgICAgICAg
YWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBGbG9hdFJlY3QoeyB9LCBzcmNTaXpl
KSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6ZSkpOworICAgIAorICAgIGNvbnRl
eHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIHN1YnNhbXBsZWRJbWFnZVNpemUsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmllbnRhdGlvbik7Cit9CisgICAgCit9CisK
KyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4YmE4NDY5ZDUyOTQ1NDhkNTE4NDdhN2ZlLi40NDc2
ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQxYjliYjAyMmU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRU
cmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KQEAgLTEyOSw3ICsxMjksNyBAQCBUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYSgpCiB2b2lk
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSgpCiB7CiAgICAgaWYgKGF1dG8g
cmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklt
YWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNlbnRh
dGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVu
dHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFnZSgpLmdldCgpXTsKIH0KIAogdm9pZCBU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2NhbGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0K
aW5kZXggZmEwMTFhYTg4MTYzMDMwMDA5NDQ5OGViYzBmZmNhOWZiOWMzMDM0Yi4uYmYwODU3ZGI2
YzY2ZjY0MTVjYjlmZTNhNGZhMzEyY2IwZTBhNjJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtODUsMzEgKzg1LDIyIEBAIENG
RGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKICAgICBpZiAobV90
aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogCi0gICAgdW5zaWduZWQg
bnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gdGhpcy0+
ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBudW1GcmFtZXMgaXMgemVybywgd2Ug
a25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCisgICAg
Ly8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRo
aXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKICAgICAvLyBFdmVuIHRob3VnaCB0aGUg
Y2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YSB3aWxsIGZhaWwgYW5kIHdl
J2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8vIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNl
cyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xlIHdpdGggYW4gZXJyb3IgbWVzc2FnZQot
ICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFZlY3RvcjxDR0lt
YWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1lczsg
KytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChp
KS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0gICAgICAgICAgICBpbWFnZXMuYXBwZW5k
KGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bVZhbGlkRnJhbWVzID0gaW1hZ2Vz
LnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGRhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGlu
YXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVX
aXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbnVtVmFsaWRGcmFtZXMsIDApKTsKKyAg
ICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0Q0Yo
Q0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJRkYs
IG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAgIGlmICghZGVzdGluYXRpb24pCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytpKQotICAgICAgICBDR0ltYWdlRGVzdGlu
YXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2VzW2ldLCAwKTsKKyAgICBmb3Ig
KGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENHSW1hZ2VEZXN0aW5h
dGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBuYXRpdmVJbWFnZS5nZXQoKSwgMCk7CiAK
ICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQppbmRleCAyMTZjZDA5M2YyNjQ2
N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQxYTRkLi5kMTE0NTRiMDVlZjg4OTkzYTYyODkzODk2YmMw
YzExNzI4YzVlZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1t
CkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0
ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigp
OworICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAg
ICBpZiAoIW1fcHJldmlld0ltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9N
aXNjL1dlYkNhY2hlLm1tCmluZGV4IGI2NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdl
MWYzYjEuLjdjNWVkMjEwZGRiMmEzMmE3NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJDYWNoZS5tbQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYp
aW1hZ2VGb3JVUkw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hl
ZEltYWdlID0gZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7
CiAgICAgaWYgKCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAg
IHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjExYTUy
YWExZTUzOTAxOWZhNmMxYzQ2NzI1YWUuLjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZj
ODgxZGZlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9X
S0ljb25EYXRhYmFzZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
Y2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKQEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIENHSW1hZ2VSZWYgV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJM
KFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1Np
emUgc2l6ZSkKIHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+
aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/
IGltYWdlLT5nZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+
KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICBy
ZXR1cm4gaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2Fz
dDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgp
IDogbnVsbHB0cjsKIH0KIAogQ0ZBcnJheVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdl
QXJyYXlGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1
cmxSZWYpCiB7CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmlt
YWdlRm9yUGFnZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBp
bWFnZS0+Z2V0Q0dJbWFnZUFycmF5KCkubGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2Ut
PmZyYW1lc05hdGl2ZUltYWdlcygpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkg
PSBDRkFycmF5Q3JlYXRlTXV0YWJsZShudWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NG
VHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJ
bWFnZXMpCisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0
KCkpOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihh
cnJheSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDlhMjgxMzZlYmFhMzQ5NDQ2MGYwMTk1
ZTUxODcwZDE2M2U4Nzg0NTMuLmFhNmQ0N2UzZjA3ZTNiNTg3ZDUzMDk4YWU2MDRmZDZjYzlkYzll
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC00MDc5LDcgKzQwNzksNyBAQCAtIChVSUltYWdlICop
X3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJ
dGVtQ29udHJvbAogewogICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRv
ci5jb250ZW50SW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBbW1tV
SUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0lu
ZGljYXRvci5jb250ZW50SW1hZ2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOworICAg
IHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3Jt
YXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1
dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZp
ZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5k
ZXggYzExYmU5NTkwZTdhOGVkYTY2Y2Y4Mjc2NDc1YWEyNWEyNDIyZjgxOC4uYzdlYWEwZTZjOGNi
YTM1ZjZlYWRkNDMxMmM2ZDkxNmU0ZTY4YWY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTcyNiw2OSArMTcyNiw2IEBAIHZv
aWQgUGx1Z2luVmlldzo6d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNW
aXNpYmxlLCB1aW50NjRfdCB3aW5kCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQot
c3RhdGljIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17Ci0g
ICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFTU0VS
VChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1h
cEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlmICgh
KGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYg
a0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJz
dCkgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3Ro
ZXIgcGl4ZWwgZm9ybWF0cy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lk
dGgoaW1hZ2UpOwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsK
LSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwot
Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3Zp
ZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25zdCBV
SW50OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgLy8g
T3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUgdmVy
c2lvbiBvZiB0aGUgaW1hZ2UuCi0gICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1
bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2ludAot
ICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4K
LSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25lZCBz
YW1wbGVDb2xzID0gNzsKLSAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9m
IHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAgICBp
ZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFu
ZCBvbiB0aGUgaW1hZ2UgcGVyaW1ldGVyLgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAgIGNv
bnN0IGZsb2F0IHN0cmlkZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAv
IChzYW1wbGVSb3dzIC0gMSk7Ci0gICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVD
b2xzXTsKLQotICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4K
LSAgICBmbG9hdCB5ID0gMDsKLSAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHgg
PSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7
Ci0gICAgICAgICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4
ICsgLjUpKSAqIDQ7Ci0gICAgICAgICAgICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1wbGVz
W2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAw
KzIpKSAqICoocDArMykgLyAyNTU7Ci0gICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwotICAg
ICAgICB9Ci0gICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRhICsg
KHN0YXRpY19jYXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAv
LyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAwOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0gICAg
ICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAxXVtq
XSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxlc1tp
XVtqXTsKLSAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRo
aW4gdGhlIHJhbmdlIG9mIDAgYW5kIDI1NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUw
MCAqIChzYW1wbGVSb3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0KIHZv
aWQgUGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFCTEUo
UFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQpAQCAtMTgwOCw3ICsxNzQ1LDcg
QEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAgICAg
IGlmIChzbmFwc2hvdEltYWdlKSB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExV
R0lOX0hFVVJJU1RJQykKLSAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29s
b3IgPSBpc0FsbW9zdFNvbGlkQ29sb3IoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1h
Z2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3Ig
PSBzdGF0aWNfcG9pbnRlcl9jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNBbG1v
c3RTb2xpZENvbG9yKCk7CiAgICAgICAgICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90SXNB
bG1vc3RTb2xpZENvbG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281157</attachid>
            <date>2016-06-12 22:35:14 -0700</date>
            <delta_ts>2016-06-12 22:49:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160612223648.patch</filename>
            <type>text/plain</type>
            <size>71446</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNjQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNmMmE0ZTliZWMyOTY4
MDhhMDliMjI1ZWMzOWY1ZDgzNzc3ZmY0OC4uN2UyMjJmMzMzNjkzM2NiZTFhZThmZTBhOTQ5NTRk
YTFlNmM0NjM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDE2LTA2LTEyICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9k
dWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFn
ZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4
Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlzIHRvIG1vdmUgdGhlIHBsYXRmb3Jt
IGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20gQml0bWFwSW1hZ2UgdG8gUGxhdGZv
cm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJsZSBvZiAKKyAgICAgICAgZHJhd2lu
ZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFnZVB0ciBxdWVzdGlvbnMgd2hlbiBh
biBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWlsYWJsZS4gQXBhcnQgZnJvbSBkcmF3
aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3aWxsIGJlCisgICAgICAgIGNhbGxl
ZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRhIHNvIHdlIHdpbGwga2VlcCBldmVy
eXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIuIEJ1dCB3ZSB3aWxsIGNhc3QgdGhl
IE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hlbgorICAgICAgICBhIHBsYXRmb3Jt
IGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0t
IENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtE
T01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBh
Z2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0
b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAg
ICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNv
ZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRh
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAg
ICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBp
cyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3Ro
IG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29u
c3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdl
UmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VB
cnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUlt
YWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1v
c3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBs
aW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhh
c0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29s
aWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlk
Q29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZpZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMg
d2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3MgdG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTogUmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxl
IGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxpbmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0
aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6CisKIDIwMTYtMDYtMDMgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlUmVzcG9uc2VCYXNlIGNsZWFu
dXAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggOThkMmJlNmQ4MzA0NjA3NjE2MzE3MjZhMmU5ZWMxYmFh
Zjg2OTE0NS4uOTczZGRhYjIxNjkwMjMxZDdiOTc3NmUzNWU1MDM0NjhlNTY1NTYzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA2LTEyICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3Jt
SW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hl
Lm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFnZUZvclVSTDpdKToKKwogMjAxNi0wNi0wMiAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIEFk
ZCBXZWJJREwgc3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGVhZmQyMzRjZGZkMjkyZTZkYWJkN2QyZDJhNWUzZTNkZGY3NjQ4OTMuLjMwZDkxZTVjN2Uw
Y2QyZGU1YThhYjZkNzhhNmE1ZmJjOGFmYTdiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBA
QAorMjAxNi0wNi0xMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29t
PgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3Jh
cHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3Bw
OgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKToKKyAgICAgICAg
KFdLSWNvbkRhdGFiYXNlVHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTCk6CisgICAgICAgIEl0IHdh
cyB0aGUgb25seSBwbGFjZSBpbiB0aGUgY29kZSB3aGljaCB1c2VzIEJpdG1hcEltYWdlOjpnZXRD
R0ltYWdlQXJyYXkoKS4KKyAgICAgICAgQ2FsbCBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1h
Z2VzKCkgaW5zdGVhZCBhbmQgZm9ybSB0aGUgcmV0dXJuZWQKKyAgICAgICAgVmVjdG9yPE5hdGl2
ZUltYWdlUHRyPiBidWlsZCB0aGUgQ0ZBcnJheVJlZi4KKyAgICAgICAgCisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOl0p
OgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKToKKyAgICAgICAg
CisgICAgICAgIChXZWJLaXQ6OmlzQWxtb3N0U29saWRDb2xvcik6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUgdGhlIHN0YXRpYyBmdW5jdGlvbiBpc0FsbW9zdFNvbGlkQ29sb3IgdG8gUGxhdGZvcm1J
bWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkuCisKIDIwMTYtMDYtMDMgIENzYWJhIE9zenRyb2dv
bsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggdGhlICFFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkgYnVpbGQgYWZ0ZXIgcjIwMTU3NQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpp
bmRleCAzMjlhMTYwNzkxODk4NjEwM2M2MGUwYjYwZDQwY2VlMGVmNmJjNjgxLi5jZGZkOWFhYmMw
Y2VkYTVlMzFmYzc3Yzg1MjI0ZmU0ODdkODRiOWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtMTIyLDcgKzEyMiw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKQEAgLTEzNCw2ICsxMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWly
by5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENh
aXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBkNzFjZWVlNTc1MmUzNThlYmY5
Mjg4YmY1MTQ5ZDdmOGQxNjE3NWU3Li45MjUwMmE0NDkyNTBlYjE5MTk0ZWVhMmY2YTBiZjY5Yjdm
N2JjNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtOTgsNyArOTgsNiBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Jh
Y2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvWDExLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0
Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAt
MTEyLDYgKzExMSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1D
b250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFn
ZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUGF0aENhaXJv
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5
NjBmNTUyMzQzZDkyMGYwN2IzLi5jMjAzMDkxYTkzOWM2ZjdhMjJjZmJmODlmODJiMGMzMWVkOTJi
YTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xD
b250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhaXJvLmNwcApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1h
dHJpeENhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDA5NTg3MmQzYWM2ZWVhMjY1YWUzMTU5MmIyNzIyOTljNGZmMmUz
M2IuLmFiMWE0OWNmOTY0MDQ1OWU0ZWI3YmJkY2NmY2UzNzlhMGQyMDliZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0MzQs
NyArMTQzNCw3IEBACiAJCTM3NUNEMjMyMTE5RDQzQzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1Q0QyMzEx
MTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggKi87IH07CiAJCTM3NkRDQ0UxMTNCNEY5
NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAq
LzsgfTsKIAkJMzc3NEFCQTUwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3
NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTM3N0EzQTkwMTVF
RkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRt
YXBJbWFnZUNHLmNwcCAqLzsgfTsKKwkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRm
b3JtSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLzsg
fTsKIAkJMzc5MTlDMjMwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovOyB9OwogCQkzNzkxOUMyNDBC
N0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9Owog
CQkzNzkyOTE3QTE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTI5MTc4MTk4NUVGMzkwMEY0
QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0yMjc4LDYgKzIyNzgsNyBAQAogCQk1NTBBMEJDQTA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5h
bWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
aCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8qIFNp
bXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsgfTsK
IAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVBNjYw
MDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU4MDM3MTYxMUE2NkYwMEEw
MEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICov
OyB9OwpAQCAtODk0Myw3ICs4OTQ0LDcgQEAKIAkJMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFJ1
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzJCMDk1MTY1MzU4NTYwMDBB
NDlDQSAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQb3B1cE9wZW5pbmdPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE92ZXJsYXBUZXN0UmVxdWVzdENs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzNzdBM0E4RjE1RUZDRTlBMDA1
OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCaXRtYXBJbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Mzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybUltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRp
b25JdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9z
aXRpb25JdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIy
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3OTI5MTc4MTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcmVkZW50aWFsQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTg3NSw2ICs5ODc2LDcgQEAKIAkJNTUwQTBCQzgwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1Qjg3RUExQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9y
bUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVs
YXRlZENsaWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMTgyNCw3ICsyMTgyNiw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAv
KiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0Yz
MzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUz
ODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjE4NTEsNiArMjE4NTIsNyBAQAog
CQkJCUE4MEEzOEZEMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIy
NzUzNTM2MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlC
Mjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3
N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFG
QzQwRkI4MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywK
IAkJCQkxRkM0MEZCNzE2NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5o
ICovLAogCQkJCUIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDUzLDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5
MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyog
UGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUlt
YWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIu
aCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291
cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3Jt
VGV4dFRyYWNrLmggKi8sCkBAIC0yNTc5MSw2ICsyNTc5NCw3IEBACiAJCQkJODVFNzExQjkwQUM1
RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVBMEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1M
TWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAy
NzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2
NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1MTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyog
RE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MTUyLDcgKzI5MTU2LDcg
QEAKIAkJCQlGREM1NEYwNDEzOTlCMERBMDA4RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAyNjEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkUHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAv
KiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzNzdBM0E5MDE1RUZDRTlCMDA1
OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzNzdBM0E5MDE1
RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3NkQ2Qzc4MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTJFREVGMUYzMTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMUQzMUNEQzE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET00ubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDEx
ZWEzZmQ4YzA0Njk3NGM1NWQ0OGUzOTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3
MDZjMTBmYzBmN2FmNDA0MjU2MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpA
QCAtNjA2LDcgKzYwNiw3IEBAIC0gKHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1h
Z2VSZWYqKWNnSW1hZ2UgYW5kUmVjdHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0
SW5kaWNhdG9yKSB7CiAgICAgICAgIGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5j
b250ZW50SW1hZ2UoKSkKLSAgICAgICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRv
cmVsZWFzZShDR0ltYWdlUmV0YWluKGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAg
ICAgICpjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9
CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cubW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThl
MmNlNmQxOTBmMjQ4OS4uYTc0ZGE4NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBA
IC0xNjIsOSArMTYyLDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClm
cmFtZSB0ZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0lt
YWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2Fs
ZUZhY3RvcigpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAg
ICBpZiAoaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0g
ICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhp
Z2hsaWdodCgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4
dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwog
ICAgIGVsc2UKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50
SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBib3VuY2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FL
ZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1
cmF0CiBzdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9z
c2ZhZGVBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRl
eHRJbmRpY2F0b3IpCiB7CiAgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFk
ZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29u
dGVudHMiXTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJ
bmRpY2F0b3IuY29udGVudEltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCkt
Pm5hdGl2ZUltYWdlKCk7CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZClj
b250ZW50c0ltYWdlLmdldCgpXTsKICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2Rl
OmtDQUZpbGxNb2RlRm9yd2FyZHNdOwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3Zl
ZE9uQ29tcGxldGlvbjpOT107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggMDY3NmNlMDcyNTA3NmJiOTVjY2QyNmM1YzFhNTI4ZDE2
M2E0NjUyYS4uMzU2NzQwMTE5MDg2OTk2NGEwYjc2NDQzYzU5MDAwNWIyYzk0NjYzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAt
NzAsMTEgKzcwLDExIEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYm
IGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKIHsKICAgICAvLyBTaW5jZSB3ZSBkb24n
dCBoYXZlIGEgZGVjb2Rlciwgd2UgY2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRp
b24uCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2Ft
ZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgwLgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbiA9IG1fc2l6ZSA9IE5hdGl2ZUltYWdlOjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBQbGF0Zm9ybUltYWdlKGltYWdlKS5zaXplKCk7
CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5hcmVhKCkgKiA0OwotICAgIAorCiAgICAgbV9m
cmFtZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gTmF0aXZlSW1hZ2U6
Omhhc0FscGhhKGltYWdlKTsKKyAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gUGxhdGZvcm1J
bWFnZShpbWFnZSkuaGFzQWxwaGEoKTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9
IHRydWU7CiAgICAgbV9mcmFtZXNbMF0ubV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOwogfQpAQCAt
MTI1LDkgKzEyNSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29s
IGRlc3Ryb3lBbGwpCiAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVh
bGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBt
ZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZlciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVh
cgogICAgICAgICAvLyB0aGUgbWV0YWRhdGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMg
PSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVh
cihmYWxzZSkpCi0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOwor
ICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSk7CiAg
ICAgfQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSwg
ZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ4LDggQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxsKQog
ICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBhbGxG
cmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLnVzZWRG
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0yODgs
MjEgKzI4NiwxOSBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFS
ZWNlaXZlZCkKICAgICAvLyBmcmFtZSBhZmZlY3RlZCBieSBhcHBlbmRpbmcgbmV3IGRhdGEgaGVy
ZS4gVGh1cyB3ZSBoYXZlIHRvIGNsZWFyIGFsbCB0aGUKICAgICAvLyBpbmNvbXBsZXRlIGZyYW1l
cyB0byBiZSBzYWZlLgogICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkID0gMDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IG1fZnJhbWVzKSB7CiAgICAgICAgIC8vIE5PVEU6IERvbid0IGNhbGwgZnJh
bWVJc0NvbXBsZXRlQXRJbmRleCgpIGhlcmUsIHRoYXQgd2lsbCB0cnkgdG8KICAgICAgICAgLy8g
ZGVjb2RlIGFueSB1bmNhY2hlZCAoaS5lLiBuZXZlci1kZWNvZGVkIG9yCiAgICAgICAgIC8vIGNs
ZWFyZWQtb24tYS1wcmV2aW91cy1wYXNzKSBmcmFtZXMhCi0gICAgICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tp
XS5tX2hhdmVNZXRhZGF0YSAmJiAhbV9mcmFtZXNbaV0ubV9pc0NvbXBsZXRlKQotICAgICAgICAg
ICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gKG1fZnJhbWVzW2ldLmNsZWFyKHRydWUpID8gZnJhbWVC
eXRlcyA6IDApOworICAgICAgICBpZiAoZnJhbWUubV9oYXZlTWV0YWRhdGEgJiYgIWZyYW1lLm1f
aXNDb21wbGV0ZSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lLmNsZWFy
KHRydWUpOwogICAgIH0KICAgICBkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0Ns
ZWFyZWQsIENsZWFyZWRTb3VyY2U6Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0
aGlzIGRpZmZlcmVudCBmb3IgaU9TPwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAo
IW1fZnJhbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2Zy
YW1lcy5zaXplKCkgLSAxXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2Zy
YW1lcy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0g
bV9mcmFtZXNbbV9mcmFtZXMuc2l6ZSgpIC0gMV0uY2xlYXIodHJ1ZSkpIHsKICAgICAgICAgICAg
IGRlbHRhQnl0ZXMgKz0gYnl0ZXM7CiAgICAgICAgICAgICBkZWx0YUJ5dGVzICs9IG1fZGVjb2Rl
ZFByb3BlcnRpZXNTaXplOwogICAgICAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUgPSAw
OwpAQCAtMzkwLDggKzM4Niw3IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNlbnRhdGlvblNjCiAgICAgLy8gcmUt
ZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KICAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXpl
KCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1fZnJh
bWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKICAgICAgICAgLy8gSWYgdGhlIGltYWdl
IGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVjb2RlIGEg
bGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKKyAg
ICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFyKHRydWUpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0g
c2l6ZUNoYW5nZTsKICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTQwNCw2ICszOTks
NDMgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2MKIAogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRl
eF0ubV9pbWFnZTsKIH0KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIGltYWdlID0g
ZnJhbWVJbWFnZUF0SW5kZXgoaSk7CisgICAgICAgIGlmIChpbWFnZSAmJiBQbGF0Zm9ybUltYWdl
KGltYWdlKS5zaXplKCkgPT0gc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9
CisgICAgCisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGltYWdlIGlmIHdlIGNh
bid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7
Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKQoreworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7Cit9CisKK1ZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2
ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6
ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdElu
ZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBpbWFnZXM7Cit9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewpAQCAtNDIxLDExICs0NTMsNiBAQCBmbG9hdCBCaXRt
YXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIHJldHVybiBt
X2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOwotfQotCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCkBAIC03MDAsMTcgKzcyNyw1NCBAQCBDb2xv
ciBCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENv
bG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENv
bG9yID0gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2lt
YWdlLmdldCgpKTsKKyAgICBtX3NvbGlkQ29sb3IgPSBQbGF0Zm9ybUltYWdlKG1fZnJhbWVzWzBd
Lm1faW1hZ2UpLnNpbmdsZVBpeGVsU29saWRDb2xvcigpOwogICAgIAogICAgIEFTU0VSVChtX3Nv
bGlkQ29sb3IpOwogICAgIHJldHVybiBtX3NvbGlkQ29sb3IudmFsdWUoKTsKIH0KICAgICAKK2Jv
b2wgQml0bWFwSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcigpCit7CisgICAgYXV0byBpbWFnZSA9
IGZyYW1lSW1hZ2VBdEluZGV4KDApOworICAgIHJldHVybiAhaW1hZ2UgPyBmYWxzZSA6IFBsYXRm
b3JtSW1hZ2UoaW1hZ2UpLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRt
YXBJbWFnZTo6Y2FuQW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBm
cmFtZUNvdW50KCkgPiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNF
bXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAg
c3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBm
aWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQs
IGRlc3RSZWN0LCBzcmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFy
bHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRp
b24oKSk7CisgICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0g
UmVzcGVjdEltYWdlT3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2Uo
aW1hZ2UpLmRyYXcoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUs
IG9yaWVudGF0aW9uKTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBp
bWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdl
OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3
NTg5MjljZDg3ZmFkYWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjI1MDQxMzc2MjRlNmFlOGM0
ZWMyMWU3YTVmMmZlZTEzZTdhNzFkZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdl
T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0UoQ0cpIHx8IFVTRShB
UFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsMjUgKzQ4LDkgQEAgdHlw
ZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6IHB1Ymxp
YyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNh
bkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRhIG1lbWJl
cnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAgSW50U2l6ZSBzaXpl
KGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBOYXRpdmVJ
bWFnZVB0ciYpOwotfQotCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KIC8vIEZyYW1lRGF0YSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03NSwxOCArNjAsMzAgQEAgcHVibGljOgog
ICAgIEZyYW1lRGF0YSgpCiAgICAgICAgIDogbV9oYXZlTWV0YWRhdGEoZmFsc2UpCiAgICAgICAg
ICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1ZSkKKyAgICAg
ICAgLCBtX2hhc0FscGhhKGZhbHNlKQogICAgIHsKICAgICB9CiAKICAgICB+RnJhbWVEYXRhKCkK
LSAgICB7IAotICAgICAgICBjbGVhcih0cnVlKTsKKyAgICB7CisgICAgICAgIGlmIChtX2ltYWdl
KQorICAgICAgICAgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygpOwog
ICAgIH0KIAogICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2UgZGF0YSBvbiB0aGUgZnJhbWUs
IGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgogICAgIC8vIFJldHVybnMgd2hldGhlciB0
aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0gICAgYm9vbCBjbGVhcihib29s
IGNsZWFyTWV0YWRhdGEpOworICAgIHVuc2lnbmVkIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSB1c2VkRnJhbWVCeXRlcygpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisgICAgICAgICAgICBtX2hhdmVN
ZXRhZGF0YSA9IGZhbHNlOworCisgICAgICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7CisgICAg
ICAgIG1faW1hZ2UgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiBmcmFtZUJ5dGVzOworICAg
IH0KICAgICAKICAgICB1bnNpZ25lZCB1c2VkRnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2UgPyBtX2ZyYW1lQnl0ZXMgOiAwOyB9CiAKQEAgLTE1NSwxMiArMTUyLDYgQEAgcHVibGlj
OgogICAgIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSBvdmVycmlkZTsKICNlbmRp
ZgogCi0jaWYgVVNFKENHKQotICAgIFdFQkNPUkVfRVhQT1JUIENHSW1hZ2VSZWYgZ2V0Q0dJbWFn
ZVJlZigpIG92ZXJyaWRlOwotICAgIENHSW1hZ2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXpl
KGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0
Q0dJbWFnZUFycmF5KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBnZXRIQklUTUFQ
T2ZTaXplKEhCSVRNQVAsIGNvbnN0IEludFNpemUqKSBvdmVycmlkZTsKQEAgLTE3NCw4ICsxNjUs
MTMgQEAgcHVibGljOgogICAgIEV2YXNfT2JqZWN0KiBnZXRFdmFzT2JqZWN0KEV2YXMqKSBvdmVy
cmlkZTsKICNlbmRpZgogCisgICAgV0VCQ09SRV9FWFBPUlQgTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2UoKSBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShj
b25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGUgeyByZXR1cm4gZnJhbWVPcmllbnRhdGlvbkF0
SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFt
ZXNOYXRpdmVJbWFnZXMoKSBvdmVycmlkZTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGlzQWxtb3N0U29saWRDb2xvcigpOwogCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVP
cGFxdWUoKSBvdmVycmlkZTsKIApAQCAtMjE1LDcgKzIxMSw2IEBAIHByb3RlY3RlZDoKICAgICBz
aXplX3QgZnJhbWVDb3VudCgpOwogCiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25TY2FsZUhpbnQgPSAxKTsKLSAgICBOYXRpdmVJ
bWFnZVB0ciBjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCiAgICAgYm9v
bCBoYXZlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggN2EyOTk5MmY3NzE4OGUwMzgyOGQ4MGE2NWI4YmUyY2Q4
ZGMyZGU3Ni4uMzIyM2MxY2Q2N2EyMTA1ZWJmMmIxNTY3Njk2ODgwOTdmYjIyNzc2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC0xMzcsOCArMTM3LDExIEBA
IHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxlLCBT
cGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQog
ICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7
IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOyB9CisgICAg
dmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIHsgcmV0
dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4K
IApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDRkRhdGFSZWYgZ2V0
VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLSNpZiBV
U0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYoKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6
ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmV0YWlu
UHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSNl
bmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQKEhC
SVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBPZlNp
emUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWI3YWVhNDg5ZjNlYjJhODI4NzcxYzIxMDNlOGQ0ZDBiZTE3YmU1ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaApAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUg
IkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3Mg
SW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworY2xhc3MgUGxhdGZvcm1JbWFnZSB7
CitwdWJsaWM6CisgICAgUGxhdGZvcm1JbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2Up
CisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc05p
bCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltYWdlOyB9CisgICAgdm9pZCBjbGVhclN1YkltYWdlcygp
OworCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0
OworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OworICAgIGJvb2wgaXNB
bG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgY29uc3Qg
SW1hZ2VPcmllbnRhdGlvbiYpIGNvbnN0OworCisgICAgc3RhdGljIGZsb2F0IHN1YnNhbXBsaW5n
U2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0KTsKKworcHJpdmF0ZToKKyNpZiBVU0UoQ0cpCisgICAgQ0dJbWFn
ZVJlZiBjZ0ltYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1faW1hZ2UuZ2V0KCkg
OiBudWxscHRyOyB9CisjZW5kaWYKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworfTsKKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCmluZGV4IDg0YzdkNjIzMjRmNjQ3MTFlMTY1ZTUy
NDNkZjg4ZjIxYTUwZWQ3ZTkuLjIwYjU2ODkzMzc1MmFkMGZjZTEwYjM2NGZlMDEyZDQ4MWU2NDdk
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dXBkYXRlRGlzcGxheU1vZGUo
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKKyAg
ICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdXNlZEltYWdlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIG1fZGlzcGxheU1vZGUgPSBQYWludEl0QmxhY2s7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTc3MjJiZWM1M2FiOGEwOGE4ZGE4NTI4YjllMGQ3YzRkMGNkNDEzNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3Qg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb1N1cmZh
Y2VTaXplKGltYWdlLmdldCgpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvX3N1cmZhY2VfZ2V0X2Nv
bnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7Ci19Ci0KLUNvbG9yIHNp
bmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2Up
Ci17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0aXZlSW1hZ2U6OnNpemUo
aW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAg
aWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0Vf
VFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBSR0JBMzIqIHBpeGVs
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJH
QigqcGl4ZWwpOwotfQotCi19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMs
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLAotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSAgICBpZiAoIWRzdC53aWR0aCgp
IHx8ICFkc3QuaGVpZ2h0KCkgfHwgIXNyYy53aWR0aCgpIHx8ICFzcmMuaGVpZ2h0KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0KLSAgICBhdXRvIHN1cmZhY2Ug
PSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAgaWYgKCFzdXJmYWNlKSAv
LyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAg
ICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250
ZXh0LCBkc3QsIGNvbG9yLCBvcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb250
ZXh0LnNhdmUoKTsKLQotICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgotICAg
IGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIGJsZW5kTW9kZSA9PSBCbGVuZE1vZGVO
b3JtYWwgJiYgIWZyYW1lSGFzQWxwaGFBdEluZGV4KG1fY3VycmVudEZyYW1lKSkKLSAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7Ci0gICAgZWxzZQot
ICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKLQot
I2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgSW50U2l6ZSBzY2Fs
ZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgpKTsKLSAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmMsIHNj
YWxlZFNpemUpOwotI2Vsc2UKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyYyk7Ci0j
ZW5kaWYKLQotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbihkZXNjcmlwdGlv
bi5pbWFnZU9yaWVudGF0aW9uKCkpOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBmcmFtZU9y
aWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0g
ICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBkc3Q7Ci0KLSAgICBpZiAoZnJhbWVPcmllbnRhdGlvbiAh
PSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewotICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9u
IGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCi0gICAgICAgIGNvbnRleHQudHJh
bnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgICAgIGRzdFJlY3Quc2V0TG9j
YXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oZnJhbWVPcmll
bnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChkc3RSZWN0LnNpemUoKSkpOwotICAgICAgICBp
ZiAoZnJhbWVPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7Ci0gICAgICAgICAgICAv
LyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWln
aHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCi0gICAgICAgICAgICAv
LyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVk
IHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAgZHN0UmVjdCA9IEZsb2F0UmVj
dChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3QuaGVpZ2h0KCksIGRzdFJlY3Qud2lk
dGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJmYWNlLmdldCgpLCBkc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIGNvbnRleHQpOwotCi0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci0KLSAgICBpZiAoaW1h
Z2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Ci19
Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYg
KGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBp
ZiAobV9pbWFnZSkgewotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzBhZGFlYzI3MGUzMWIwNTRhZmM1ZjY2ZDQ4Mjg4YWViZjA2MWUzYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtSW1hZ2VDYWlyby5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxj
YWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6Y2xl
YXJTdWJJbWFnZXMoKQoreworfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25z
dAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogY2Fpcm9TdXJmYWNlU2l6ZSht
X2ltYWdlLmdldCgpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgfHwgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChtX2lt
YWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOworfQorCitDb2xvciBQbGF0Zm9ybUlt
YWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlmIChpc05pbCgpIHx8
IHNpemUoKSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAg
IGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1faW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZB
Q0VfVFlQRV9JTUFHRSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBSR0JBMzIqIHBp
eGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShtX2ltYWdlLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxp
ZWRBUkdCKCpwaXhlbCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENv
bG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IFBsYXRmb3JtSW1h
Z2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBQbGF0Zm9ybUlt
YWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmll
bnRhdGlvbikgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAKKyAgICAvLyBTZXQg
dGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KKyAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNl
T3ZlciAmJiBtb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhaGFzQWxwaGEoKSkKKyAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgZWxzZQor
ICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgbW9kZSk7CisgICAgICAg
IAorI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgSW50U2l6ZSBz
Y2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlLmdldCgpKTsKKyAgICBGbG9hdFJl
Y3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNS
ZWN0LCBzY2FsZWRTaXplKTsKKyNlbHNlCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChz
cmNSZWN0KTsKKyNlbmRpZgorICAgICAgICAKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVj
dCA9IGRlc3RSZWN0OworICAgICAgICAKKyAgICBpZiAob3JpZW50YXRpb24gIT0gRGVmYXVsdElt
YWdlT3JpZW50YXRpb24pIHsKKyAgICAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRo
ZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgorICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShkZXN0
UmVjdC54KCksIGRlc3RSZWN0LnkoKSk7CisgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9j
YXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICAgICAgY29udGV4dC5jb25jYXRDVE0ob3JpZW50YXRp
b24udHJhbnNmb3JtRnJvbURlZmF1bHQoYWRqdXN0ZWREZXN0UmVjdC5zaXplKCkpKTsKKyAgICAg
ICAgaWYgKG9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIC8v
IFRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdo
dCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKKyAgICAgICAgICAgIC8v
IHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQg
dG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNl
dFNpemUoYWRqdXN0ZWREZXN0UmVjdC5zaXplKCkudHJhbnNwb3NlZFNpemUoKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRv
Q29udGV4dChtX2ltYWdlLmdldCgpLCBhZGp1c3RlZERlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IGNvbnRleHQpOworCisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAzYzgxYTE3MGJlNzlhZTZiZTZjYWNkYzk5ZjRjMzk4Y2FhZjQyNmQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5o
IgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZU9i
c2VydmVyLmgiCi0jaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVz
cGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgcmV0dXJuIEludFNpemUo
Q0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQo
KSkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYpCi17
Ci0gICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBD
R0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAg
Ci1Db2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+
JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFn
ZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7
Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdCQQotICAgIGF1dG8gYml0
bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4
LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAotICAgICAgICBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZykpOwotCi0gICAg
aWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29w
eSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UoMCwgMCwgMSwgMSksIGltYWdlLmdldCgpKTsKLSAgICAKLSAgICBpZiAoIXBpeGVsWzNdKQot
ICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7Ci0KLSAgICByZXR1cm4gQ29sb3IocGl4
ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxb
Ml0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwotfQotCi19Ci0KLWJvb2wgRnJhbWVEYXRh
OjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0g
ICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBtX3N1YnNhbXBsaW5nTGV2ZWwg
PSAwOwotCi0gICAgaWYgKG1faW1hZ2UpIHsKLSNpZiBDQUNIRV9TVUJJTUFHRVMKLSAgICAgICAg
c3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UobV9pbWFnZS5nZXQoKSk7Ci0jZW5kaWYKLSAgICAg
ICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYo
KQotewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKS5nZXQoKTsKLX0KLQotQ0dJbWFn
ZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUm
IHNpemUpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2Ug
PSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UgJiYgSW50
U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSkp
ID09IHNpemUpCi0gICAgICAgICAgICByZXR1cm4gY2dJbWFnZTsKLSAgICB9Ci0KLSAgICAvLyBG
YWxsYmFjayB0byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJp
Z2h0IHNpemUKLSAgICByZXR1cm4gZ2V0Q0dJbWFnZVJlZigpOwotfQotCi1SZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpCi17Ci0gICAgc2l6ZV90IGNv
dW50ID0gZnJhbWVDb3VudCgpOwotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAotICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11
dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoQ0dJbWFnZVJlZiBjdXJy
RnJhbWUgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKSkKLSAgICAgICAgICAgIENGQXJyYXlB
cHBlbmRWYWx1ZShhcnJheSwgY3VyckZyYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0Q0Yo
YXJyYXkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotI2lmIFBMQVRGT1JNKElPUykK
LSAgICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOwotI2Vsc2UKLSAgICBzdGFydEFuaW1h
dGlvbigpOwotI2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAg
Ly8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRl
eHRzLgotICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjdHh0LnBsYXRmb3JtQ29udGV4
dCgpKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChtX2N1
cnJlbnRGcmFtZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3Rp
bmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRl
eHRHZXRDVE0oY3R4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICBmbG9hdCBzdWJzYW1w
bGluZ1NjYWxlID0gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRyYW5zZm9ybWVkRGVzdGlu
YXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRyYW5zZm9ybWVkRGVzdGlu
YXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpOwotCi0gICAgICAgIGlt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBsaW5nU2NhbGUp
OwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0
IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ29sb3IgY29s
b3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVjdCwgY29sb3IsIGNvbXBv
c2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFN1YnNhbXBsaW5nIG1h
eSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KLSAg
ICBJbnRTaXplIGltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdl
R2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci0gICAgCi0gICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUg
Y29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAg
aXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCi0gICAgRmxvYXRSZWN0IHNjYWxlZFNyY1JlY3Qg
PSBzcmNSZWN0OwotICAgIGlmIChpbWFnZVNpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgIEZsb2F0
UmVjdCBvcmlnaW5hbEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKLSAgICAgICAg
RmxvYXRSZWN0IHN1YnNhbXBsZWRJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIGltYWdlU2l6ZSk7
Ci0gICAgICAgIHNjYWxlZFNyY1JlY3QgPSBtYXBSZWN0KHNyY1JlY3QsIG9yaWdpbmFsSW1hZ2VC
b3VuZHMsIHN1YnNhbXBsZWRJbWFnZUJvdW5kcyk7Ci0gICAgfQotICAgIAotICAgIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIG9yaWVudGF0
aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0gICAgY3R4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNjYWxlZFNyY1Jl
Y3QsIGNvbXBvc2l0ZU9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKTsKLQotICAgIGlmIChpbWFn
ZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0K
LQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMu
c2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShp
bmRleCwgMCk7Ci0KLSAgICBpZiAoIW1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwp
Ci0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKLQotICAgIHJldHVybiBt
X3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCk7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdHRlcm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
YXR0ZXJuQ0cuY3BwCmluZGV4IGI0MjhkNTBkOTRiZjkyNDI4MDMyODdkMmVlYzE2YmQ2OWM1Mjhk
OTIuLjNkYWExMzlhYjdlYTViNDIxNTc3ODgzNWQzNTNkOGFkYjVmMGM3NWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtNzIs
NyArNzIsNyBAQCBDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbgogICAgIC8vIElmIHdlJ3JlIHJlcGVh
dGluZyBpbiBib3RoIGRpcmVjdGlvbnMsIHdlIGNhbiB1c2UgaW1hZ2UtYmFja2VkIHBhdHRlcm5z
CiAgICAgLy8gaW5zdGVhZCBvZiBjdXN0b20gcGF0dGVybnMsIGFuZCBhdm9pZCB0aWxpbmctZWRn
ZSBwaXhlbCBjcmFja3MuCiAgICAgaWYgKG1fcmVwZWF0WCAmJiBtX3JlcGVhdFkpCi0gICAgICAg
IHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2Uo
KS0+Z2V0Q0dJbWFnZVJlZigpLCBwYXR0ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25z
dGFudFNwYWNpbmcpOworICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VB
bmRUcmFuc2Zvcm0odGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksIHBhdHRlcm5UcmFu
c2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CiAKICAgICAvLyBJZiBGTFRf
TUFYIHNob3VsZCBhbHNvIGJlIHVzZWQgZm9yIHhTdGVwIG9yIHlTdGVwLCBub3RoaW5nIGlzIHJl
bmRlcmVkLiBVc2luZyBmcmFjdGlvbnMgb2YgRkxUX01BWCBhbHNvCiAgICAgLy8gcmVzdWx0IGlu
IG5vdGhpbmcgYmVpbmcgcmVuZGVyZWQuCkBAIC04Myw3ICs4Myw3IEBAIENHUGF0dGVyblJlZiBQ
YXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2Vy
U3BhY2VUcmFuCiAgICAgQ0dGbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/IHRpbGVSZWN0LmhlaWdo
dCgpIDogKDEgPDwgMjIpOwogCiAgICAgLy8gVGhlIHBhdHRlcm4gd2lsbCByZWxlYXNlIHRoZSBD
R0ltYWdlUmVmIHdoZW4gaXQncyBkb25lIHJlbmRlcmluZyBpbiBwYXR0ZXJuUmVsZWFzZUNhbGxi
YWNrCi0gICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gQ0dJbWFnZVJldGFpbih0aWxlSW1h
Z2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsKKyAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSB0
aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5sZWFrUmVmKCk7CiAKICAgICBjb25zdCBDR1BhdHRl
cm5DYWxsYmFja3MgcGF0dGVybkNhbGxiYWNrcyA9IHsgMCwgcGF0dGVybkNhbGxiYWNrLCBwYXR0
ZXJuUmVsZWFzZUNhbGxiYWNrIH07CiAgICAgcmV0dXJuIENHUGF0dGVybkNyZWF0ZShwbGF0Zm9y
bUltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgeFN0ZXAsIHlTdGVwLCBrQ0dQYXR0
ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCBUUlVFLCAmcGF0dGVybkNhbGxiYWNrcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdl
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFn
ZUNHLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kZTJjMDI3ZGFkMzc4OWY5MDYyYjk5M2UxN2IxNmQzZTRiZjdj
YmJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGxhdGZvcm1JbWFnZUNHLmNwcApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJDb2xvci5o
IgorI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhU
aW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit2b2lkIFBsYXRmb3JtSW1hZ2U6
OmNsZWFyU3ViSW1hZ2VzKCkKK3sKKyNpZiBDQUNIRV9TVUJJTUFHRVMKKyAgICBpZiAoIWlzTmls
KCkpCisgICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKGNnSW1hZ2VSZWYoKSk7Cisj
ZW5kaWYKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1h
Z2VSZWYoKSksIENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZVJlZigpKSk7Cit9CisKK2Jvb2wgUGxh
dGZvcm1JbWFnZTo6aGFzQWxwaGEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29y
cmVjdGx5IHRoZSBxdWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5u
bmVsPworICAgIHJldHVybiB0cnVlOworfQorCitDb2xvciBQbGF0Zm9ybUltYWdlOjpzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlmIChpc05pbCgpIHx8IHNpemUoKSAhPSBJ
bnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCisgICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNS
R0JDb2xvclNwYWNlUmVmKCksCisgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7CisgICAgCisgICAgaWYgKCFiaXRtYXBDb250
ZXh0KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250
ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSks
IGNnSW1hZ2VSZWYoKSk7CisgICAgCisgICAgaWYgKCFwaXhlbFszXSkKKyAgICAgICAgcmV0dXJu
IENvbG9yKDAsIDAsIDAsIDApOworICAgIAorICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1
NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAv
IHBpeGVsWzNdLCBwaXhlbFszXSk7Cit9CisgICAgCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxt
b3N0U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGNnSW1hZ2VS
ZWYoKTsKKyAgICBBU1NFUlQoQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQoaW1hZ2UpID09IDgp
OworICAgIAorICAgIENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5m
byhpbWFnZSk7CisgICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0
bGUpIHx8IChpbWFnZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrKSAhPSBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZEZpcnN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBiZWlu
ZyBhYmxlIHRvIGhhbmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzaXpl
X3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOworICAgIHNpemVfdCBoZWlnaHQgPSBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdl
R2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOworICAgIAorICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJv
dmlkZXIoaW1hZ2UpKSk7CisgICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFHZXRCeXRlUHRy
KHByb3ZpZGVyLmdldCgpKTsKKyAgICAKKyAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBzYW1wbGlu
ZyBkb3RzIG9uIHRvcCBvZiBhIGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4KKyAgICAv
LyBGb3IgdGhlIGludGVyaW9yIHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGx1
bWluYW5jZSBhbW9uZyB0aGUgc2FtcGxlIHBvaW50CisgICAgLy8gYW5kIGl0cyBzdXJyb3VuZHMg
cG9pbnRzLCBzY2FsZWQgYnkgdHJhbnNwYXJlbmN5LgorICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBs
ZVJvd3MgPSA3OworICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OworICAgIC8vIEZJ
WE1FOiBSZWZpbmUgdGhlIHByb3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29tbW9kYXRl
IGRpZmZlcmVudCBhc3BlY3QgcmF0aW9zLgorICAgIGlmICh3aWR0aCA8IHNhbXBsZUNvbHMgfHwg
aGVpZ2h0IDwgc2FtcGxlUm93cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8v
IEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1hZ2UgcGVyaW1l
dGVyLgorICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdp
ZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOworICAgIGNvbnN0IGZsb2F0IHN0cmlkZUhlaWdo
dCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dzIC0gMSk7Cisg
ICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKKyAgICAKKyAgICAvLyBG
aW5kIHRoZSBsdW1pbmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCisgICAgZmxvYXQgeSA9IDA7
CisgICAgY29uc3QgVUludDgqIHJvdyA9IGRhdGE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNhbXBsZVJvd3M7ICsraSkgeworICAgICAgICBmbG9hdCB4ID0gMDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgeworICAgICAgICAgICAgY29u
c3QgVUludDgqIHAwID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0OworICAg
ICAgICAgICAgLy8gUiBHIEIgQQorICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIxMjUg
KiAqcDAgKyAwLjcxNTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMpIC8g
MjU1OworICAgICAgICAgICAgeCArPSBzdHJpZGVXaWR0aDsKKyAgICAgICAgfQorICAgICAgICB5
ICs9IHN0cmlkZUhlaWdodDsKKyAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxpbnQ+
KHkgKyAuNSkpICogYnl0ZXNQZXJSb3c7CisgICAgfQorICAgIAorICAgIC8vIERldGVybWluZSB0
aGUgaW1hZ2Ugc2NvcmUuCisgICAgZmxvYXQgYWNjdW1TY29yZSA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IHNhbXBsZVJvd3MgLSAxOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMTsgaiA8IHNhbXBsZUNvbHMgLSAxOyArK2opIHsKKyAgICAgICAgICAgIGZsb2F0
IGRpZmYgPSBzYW1wbGVzW2kgLSAxXVtqXSArIHNhbXBsZXNbaSArIDFdW2pdICsgc2FtcGxlc1tp
XVtqIC0gMV0gKyBzYW1wbGVzW2ldW2ogKyAxXSAtIDQgKiBzYW1wbGVzW2ldW2pdOworICAgICAg
ICAgICAgYWNjdW1TY29yZSArPSBkaWZmICogZGlmZjsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJh
bmdlIG9mIDAgYW5kIDI1NV4yLgorICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1w
bGVSb3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOworfQorCitmbG9hdCBQbGF0Zm9ybUltYWdl
OjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQoreworICAgIC8vIE5ldmVy
IHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KKyAg
ICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkp
CisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0
aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRH
ZXRDVE0oY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHJldHVybiBzdGQ6Om1pbjxm
bG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAv
IHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQg
LyBzcmNSZWN0LmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSBtb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmllbnRhdGlv
bikgY29uc3QKK3sKKyAgICAvLyBTdWJzYW1wbGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFn
ZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXplKCkuCisgICAgSW50U2l6ZSBzdWJzYW1wbGVkSW1h
Z2VTaXplID0gc2l6ZSgpOworICAgIAorICAgIC8vIHNyY1JlY3QgaXMgaW4gdGhlIGNvb3JkaW5h
dGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8gbWFwIGl0IHRvIHRo
ZSBzdWJzYW1wbGVkIGltYWdlLgorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OworICAgIGlmIChzdWJzYW1wbGVkSW1hZ2VTaXplICE9IHNyY1NpemUpCisgICAgICAgIGFk
anVzdGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgRmxvYXRSZWN0KHsgfSwgc3JjU2l6ZSks
IEZsb2F0UmVjdCh7IH0sIHN1YnNhbXBsZWRJbWFnZVNpemUpKTsKKyAgICAKKyAgICBjb250ZXh0
LmRyYXdOYXRpdmVJbWFnZShtX2ltYWdlLCBzdWJzYW1wbGVkSW1hZ2VTaXplLCBkZXN0UmVjdCwg
YWRqdXN0ZWRTcmNSZWN0LCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworfQorICAgIAorfQorCisj
ZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2Eu
bW0KaW5kZXggODk3MjBkMTczNjVkYTdlOGJhODQ2OWQ1Mjk0NTQ4ZDUxODQ3YTdmZS4uNDQ3NmZj
NWY4N2MzNDk4OGY2ZDlhZDU1ZWViZDhkMWI5YmIwMjJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCkBAIC0xMjksNyArMTI5LDcgQEAgVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25Db2NvYTo6flRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EoKQogdm9pZCBU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUoKQogewogICAgIGlmIChhdXRvIHJl
cHJlc2VudGF0aW9uID0gbV9jbGllbnQuY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFn
ZSgpKQotICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRp
b24tPmdldENHSW1hZ2VSZWYoKV07CisgICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRz
OihpZClyZXByZXNlbnRhdGlvbi0+bmF0aXZlSW1hZ2UoKS5nZXQoKV07CiB9CiAKIHZvaWQgVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6c2V0Q29udGVudFNjYWxlKGZsb2F0IHNjYWxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCmlu
ZGV4IGZhMDExYWE4ODE2MzAzMDAwOTQ0OThlYmMwZmZjYTlmYjljMzAzNGIuLmJmMDg1N2RiNmM2
NmY2NDE1Y2I5ZmUzYTRmYTMxMmNiMGUwYTYyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KQEAgLTg1LDMxICs4NSwyMiBAQCBDRkRh
dGFSZWYgQml0bWFwSW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbigpCiAgICAgaWYgKG1fdGlm
ZlJlcCkKICAgICAgICAgcmV0dXJuIG1fdGlmZlJlcC5nZXQoKTsKIAotICAgIHVuc2lnbmVkIG51
bUZyYW1lcyA9IGZyYW1lQ291bnQoKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IHRoaXMtPmZy
YW1lc05hdGl2ZUltYWdlcygpOwogCi0gICAgLy8gSWYgbnVtRnJhbWVzIGlzIHplcm8sIHdlIGtu
b3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFsaWQgZGF0YQorICAgIC8v
IElmIGZyYW1lc0ltYWdlcy5zaXplKCkgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlz
IGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCiAgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGNh
bGwgdG8gQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEgd2lsbCBmYWlsIGFuZCB3ZSds
bCBoYW5kbGUgaXQgZ3JhY2VmdWxseSwKICAgICAvLyBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMg
dGhhdCBjYWxsIHdpbGwgc3BhbSB0aGUgY29uc29sZSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UKLSAg
ICBpZiAoIW51bUZyYW1lcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8Q0dJbWFn
ZVJlZj4gaW1hZ2VzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GcmFtZXM7ICsr
aSApIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSku
Z2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdlKQotICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChj
Z0ltYWdlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBudW1WYWxpZEZyYW1lcyA9IGltYWdlcy5z
aXplKCk7CisgICAgaWYgKCFuYXRpdmVJbWFnZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0
aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0
aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJRkYsIG51bVZhbGlkRnJhbWVzLCAwKSk7CisgICAg
UmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBhZG9wdENGKENH
SW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5cGVUSUZGLCBu
YXRpdmVJbWFnZXMuc2l6ZSgpLCAwKSk7CiAKICAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtVmFsaWRGcmFtZXM7ICsraSkKLSAgICAgICAgQ0dJbWFnZURlc3RpbmF0
aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlc1tpXSwgMCk7CisgICAgZm9yIChh
dXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDR0ltYWdlRGVzdGluYXRp
b25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgbmF0aXZlSW1hZ2UuZ2V0KCksIDApOwogCiAg
ICAgQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KaW5kZXggMjE2Y2QwOTNmMjY0Njdj
YmE4OGE0M2Y2OTNhYmY0Y2Y1MWRkMWE0ZC4uZDExNDU0YjA1ZWY4ODk5M2E2Mjg5Mzg5NmJjMGMx
MTcyOGM1ZWQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQpA
QCAtODcsNyArODcsNyBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQ
bGF0Zm9ybUxheWVyKCkgY29uc3QKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsK
KyAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKTsKICAgICAgICAg
aWYgKCFtX3ByZXZpZXdJbWFnZSkKICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDYWNoZS5tbQppbmRleCBiNjU5ZDZkYmY5YWQ2OTk5YzNhYzk2MmRlOTUxNTc4MDk3ZTFm
M2IxLi43YzVlZDIxMGRkYjJhMzJhNzY2Njc0YzEyMGQ5OTRjMmZhNDdlN2ZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViQ2FjaGUubW0KQEAgLTIwNCw3ICsyMDQsNyBAQCArIChDR0ltYWdlUmVmKWlt
YWdlRm9yVVJMOihOU1VSTCAqKXVybAogICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlJiBjYWNoZWRJ
bWFnZSA9IGRvd25jYXN0PFdlYkNvcmU6OkNhY2hlZEltYWdlPigqY2FjaGVkUmVzb3VyY2UpOwog
ICAgIGlmICghY2FjaGVkSW1hZ2UuaGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIGNhY2hlZEltYWdlLmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBy
ZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKTsKIH0KIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAppbmRleCAwZjZkZTdhMTQ2YTYxMWE1MmFh
MWU1MzkwMTlmYTZjMWM0NjcyNWFlLi4zMDU2MzM2Y2I2NmZlNGFmMThiZGM1MjlhY2EyZjhmYzg4
MWRmZTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJ
Y29uRGF0YWJhc2VDRy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Nn
L1dLSWNvbkRhdGFiYXNlQ0cuY3BwCkBAIC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiBDR0ltYWdlUmVmIFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZvclVSTChX
S0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tTaXpl
IHNpemUpCiB7CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmlt
YWdlRm9yUGFnZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBp
bWFnZS0+Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50Pihz
aXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKSA6IDA7CisgICAgcmV0
dXJuIGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8
aW50PihzaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5nZXQoKSA6
IG51bGxwdHI7CiB9CiAKIENGQXJyYXlSZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFy
cmF5Rm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJs
UmVmKQogewogICAgIEltYWdlKiBpbWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFn
ZUZvclBhZ2VVUkwodG9XVEZTdHJpbmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1h
Z2UtPmdldENHSW1hZ2VBcnJheSgpLmxlYWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFnZSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGltYWdlLT5m
cmFtZXNOYXRpdmVJbWFnZXMoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0g
Q0ZBcnJheUNyZWF0ZU11dGFibGUobnVsbHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgJmtDRlR5
cGVBcnJheUNhbGxCYWNrcyk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1h
Z2VzKQorICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdlLmdldCgp
KTsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRhaW4oYXJy
YXkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA5YTI4MTM2ZWJhYTM0OTQ0NjBmMDE5NWU1
MTg3MGQxNjNlODc4NDUzLi5hYTZkNDdlM2YwN2UzYjU4N2Q1MzA5OGFlNjA0ZmQ2Y2M5ZGM5ZTll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNDA3OSw3ICs0MDc5LDcgQEAgLSAoVUlJbWFnZSAqKV9w
cmVzZW50YXRpb25TbmFwc2hvdEZvclByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRl
bUNvbnRyb2wKIHsKICAgICBpZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3Iu
Y29udGVudEltYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW1tbVUlJ
bWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRp
Y2F0b3IuY29udGVudEltYWdlLT5nZXRDR0ltYWdlUmVmKCldIGF1dG9yZWxlYXNlXTsKKyAgICBy
ZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0
aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlLT5uYXRpdmVJbWFnZSgpLmdldCgpXSBhdXRv
cmVsZWFzZV07CiB9CiAKIC0gKE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3
SXRlbUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4
IGMxMWJlOTU5MGU3YThlZGE2NmNmODI3NjQ3NWFhMjVhMjQyMmY4MTguLmM3ZWFhMGU2YzhjYmEz
NWY2ZWFkZDQzMTJjNmQ5MTZlNGU2OGFmODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTE3MjYsNjkgKzE3MjYsNiBAQCB2b2lk
IFBsdWdpblZpZXc6OndpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlz
aWJsZSwgdWludDY0X3Qgd2luZAogfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXN0
YXRpYyBib29sIGlzQWxtb3N0U29saWRDb2xvcihCaXRtYXBJbWFnZSogYml0bWFwKQotewotICAg
IENHSW1hZ2VSZWYgaW1hZ2UgPSBiaXRtYXAtPmdldENHSW1hZ2VSZWYoKTsKLSAgICBBU1NFUlQo
Q0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQoaW1hZ2UpID09IDgpOwotCi0gICAgQ0dCaXRtYXBJ
bmZvIGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKLSAgICBpZiAoIShp
bWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtD
R0JpdG1hcEFscGhhSW5mb01hc2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Qp
IHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVy
IHBpeGVsIGZvcm1hdHMuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRo
KGltYWdlKTsKLSAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Ci0g
ICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsKLQot
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRl
ckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIoaW1hZ2UpKSk7Ci0gICAgY29uc3QgVUlu
dDgqIGRhdGEgPSBDRkRhdGFHZXRCeXRlUHRyKHByb3ZpZGVyLmdldCgpKTsKLQotICAgIC8vIE92
ZXJsYXkgYSBncmlkIG9mIHNhbXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNp
b24gb2YgdGhlIGltYWdlLgotICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxh
dGUgdGhlIGRpZmZlcmVuY2UgaW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKLSAg
ICAvLyBhbmQgaXRzIHN1cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCi0g
ICAgY29uc3QgdW5zaWduZWQgc2FtcGxlUm93cyA9IDc7Ci0gICAgY29uc3QgdW5zaWduZWQgc2Ft
cGxlQ29scyA9IDc7Ci0gICAgLy8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBz
YW1wbGVzLCBhbmQgYWNjb21tb2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCi0gICAgaWYg
KHdpZHRoIDwgc2FtcGxlQ29scyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFzdCByb3cvY29sdW1uIGxhbmQg
b24gdGhlIGltYWdlIHBlcmltZXRlci4KLSAgICBjb25zdCBmbG9hdCBzdHJpZGVXaWR0aCA9IHN0
YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNvbHMgLSAxKTsKLSAgICBjb25z
dCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0IC0gMSkgLyAo
c2FtcGxlUm93cyAtIDEpOwotICAgIGZsb2F0IHNhbXBsZXNbc2FtcGxlUm93c11bc2FtcGxlQ29s
c107Ci0KLSAgICAvLyBGaW5kIHRoZSBsdW1pbmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCi0g
ICAgZmxvYXQgeSA9IDA7Ci0gICAgY29uc3QgVUludDgqIHJvdyA9IGRhdGE7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNhbXBsZVJvd3M7ICsraSkgewotICAgICAgICBmbG9hdCB4ID0g
MDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgewot
ICAgICAgICAgICAgY29uc3QgVUludDgqIHAwID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCAr
IC41KSkgKiA0OwotICAgICAgICAgICAgLy8gUiBHIEIgQQotICAgICAgICAgICAgc2FtcGxlc1tp
XVtqXSA9ICgwLjIxMjUgKiAqcDAgKyAwLjcxNTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsy
KSkgKiAqKHAwKzMpIC8gMjU1OwotICAgICAgICAgICAgeCArPSBzdHJpZGVXaWR0aDsKLSAgICAg
ICAgfQotICAgICAgICB5ICs9IHN0cmlkZUhlaWdodDsKLSAgICAgICAgcm93ID0gZGF0YSArIChz
dGF0aWNfY2FzdDxpbnQ+KHkgKyAuNSkpICogYnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8g
RGV0ZXJtaW5lIHRoZSBpbWFnZSBzY29yZS4KLSAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgewotICAgICAg
ICAgICAgZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0g
KyBzYW1wbGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1b
al07Ci0gICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gVGhlIHNjb3JlIGZvciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGlu
IHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4KLSAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAg
KiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBsZUNvbHMgLSAyKTsKLX0KLSNlbmRpZgotCiB2b2lk
IFBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGltZXJGaXJlZCgpCiB7CiAjaWYgRU5BQkxFKFBS
SU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKQEAgLTE4MDgsNyArMTc0NSw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIAogICAgICAgICBp
ZiAoc25hcHNob3RJbWFnZSkgewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJ
Tl9IRVVSSVNUSUMpCi0gICAgICAgICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9y
ID0gaXNBbG1vc3RTb2xpZENvbG9yKGRvd25jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdl
LmdldCgpKSk7CisgICAgICAgICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0g
c3RhdGljX3BvaW50ZXJfY2FzdDxCaXRtYXBJbWFnZT4oc25hcHNob3RJbWFnZSktPmlzQWxtb3N0
U29saWRDb2xvcigpOwogICAgICAgICAgICAgc25hcHNob3RGb3VuZCA9ICFzbmFwc2hvdElzQWxt
b3N0U29saWRDb2xvcjsKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281158</attachid>
            <date>2016-06-12 22:49:39 -0700</date>
            <delta_ts>2016-06-13 00:06:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160612225112.patch</filename>
            <type>text/plain</type>
            <size>73353</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNjQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNmMmE0ZTliZWMyOTY4
MDhhMDliMjI1ZWMzOWY1ZDgzNzc3ZmY0OC4uNDRmMDIyMWMyYmE2NTg5ZmM1ZmJlOGU0MWQ4YmQx
YmM4M2E4MDRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE2LTA2LTEyICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9k
dWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFn
ZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4
Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlzIHRvIG1vdmUgdGhlIHBsYXRmb3Jt
IGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20gQml0bWFwSW1hZ2UgdG8gUGxhdGZv
cm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJsZSBvZiAKKyAgICAgICAgZHJhd2lu
ZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFnZVB0ciBxdWVzdGlvbnMgd2hlbiBh
biBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWlsYWJsZS4gQXBhcnQgZnJvbSBkcmF3
aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3aWxsIGJlCisgICAgICAgIGNhbGxl
ZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRhIHNvIHdlIHdpbGwga2VlcCBldmVy
eXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIuIEJ1dCB3ZSB3aWxsIGNhc3QgdGhl
IE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hlbgorICAgICAgICBhIHBsYXRmb3Jt
IGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0t
IENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRm
b3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAg
ICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAg
ICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06CisgICAg
ICAgICgtW0RPTU5vZGUgZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6YW5kUmVjdHM6XSk6CisgICAg
ICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbToKKyAgICAgICAgKC1bV2ViVGV4
dEluZGljYXRvclZpZXcgaW5pdFdpdGhGcmFtZTp0ZXh0SW5kaWNhdG9yOm1hcmdpbjpvZmZzZXQ6
XSk6CisgICAgICAgIChjcmVhdGVDb250ZW50Q3Jvc3NmYWRlQW5pbWF0aW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVz
dHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUlt
YWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6RnJhbWVEYXRh
KToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBmYWxzZSBiZWNh
dXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAgQml0bWFwSW1hZ2U6OmZyYW1lSGFz
QWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkgbV9oYXZlTWV0YWRhdGEuCisgICAg
ICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxwaGEgYXJlIHNldCBpbiBCaXRtYXBJ
bWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUo
KS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0aXZlSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Omdl
dENHSW1hZ2VSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmdldEZpcnN0
Q0dJbWFnZVJlZk9mU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0
Q0dJbWFnZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6UGxh
dGZvcm1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc05pbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjZ0ltYWdlUmVmKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6
OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdl
Ojppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmNsZWFyU3ViSW1hZ2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1J
bWFnZTo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmlzQWxt
b3N0U29saWRDb2xvcik6IE1vdmVkIGZyb20gUGx1Z2luVmlldy5jcHAgc2luY2UgUGxhdGZvcm1J
bWFnZSBpcyB3aGF0IHRoaXMgZnVuY3Rpb24gYmVsb25ncyB0by4KKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOiBSZXR1cm5zIHRoZSBzdWItc2FtcGxp
bmcgc2NhbGUgYmFzZWQgb24gdGhlIGNvbnRleHQgc2NhbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW06CisgICAgICAgIChUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRUSUZGUmVw
cmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZp
ZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKToKKwogMjAxNi0wNi0wMyAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVzb3VyY2VSZXNwb25zZUJh
c2UgY2xlYW51cC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA5OGQyYmU2ZDgzMDQ2MDc2MTYzMTcyNmEy
ZTllYzFiYWFmODY5MTQ1Li45NzNkZGFiMjE2OTAyMzFkN2I5Nzc2ZTM1ZTUwMzQ2OGU1NjU1NjMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDYtMTIgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBJbnRyb2R1Y2Ug
UGxhdGZvcm1JbWFnZSBhbmQgbWFrZSBpdCBpcyBhIHdyYXBwZXIgZm9yIE5hdGl2ZUltYWdlUHRy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pc2Mv
V2ViQ2FjaGUubW06CisgICAgICAgICgrW1dlYkNhY2hlIGltYWdlRm9yVVJMOl0pOgorCiAyMDE2
LTA2LTAyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAg
ICAgICAgQWRkIFdlYklETCBzcGVjaWFsIG9wZXJhdGlvbiBzdXBwb3J0OiBzZXJpYWxpemVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggZWFmZDIzNGNkZmQyOTJlNmRhYmQ3ZDJkMmE1ZTNlM2RkZjc2NDg5My4uMzBk
OTFlNWM3ZTBjZDJkZTVhOGFiNmQ3OGE2YTVmYmM4YWZhN2I0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI1IEBACisyMDE2LTA2LTEyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBh
cHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQg
aXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJh
c2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1hZ2VGb3JVUkwpOgor
ICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKToKKyAgICAg
ICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVzZXMgQml0bWFwSW1h
Z2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcEltYWdlOjpmcmFtZXNO
YXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAorICAgICAgICBWZWN0
b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAgICAgICAKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRy
b2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQpOgor
ICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29saWRDb2xvciB0byBQ
bGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0wNi0wMyAgQ3NhYmEg
T3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCB0aGUgIUVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKSBidWlsZCBhZnRlciByMjAxNTc1CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQppbmRleCA1ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1
NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVk
QmFja2luZ0xheWVyV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZW
aWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcElt
YWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdHRlcm5DRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdl
Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDMyOWExNjA3OTE4OTg2MTAzYzYwZTBiNjBk
NDBjZWUwZWY2YmM2ODEuLmNkZmQ5YWFiYzBjZWRhNWUzMWZjNzdjODUyMjRmZTQ4N2Q4NGI5Yzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5
LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENh
aXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bh
dGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CmluZGV4IGQ3MWNlZWU1NzUyZTM1OGViZjkyODhiZjUxNDlkN2Y4ZDE2MTc1ZTcuLjkyNTAyYTQ0
OTI1MGViMTkxOTRlZWEyZjZhMGJmNjliN2Y3YmM3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC05OCw3ICs5OCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTIsNiArMTExLDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggOWNjZTdj
YzA5YjU1ODFlNWE3ZTg1ZTZiZmZiOTM5YTE3Y2UzZGNlYy4uNjhjOTRmNGQ1NDRlODhhMjVkZmYx
YjgxZGJmNWQ2ZjY5OTM1ZjhjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTM5NCw3
ICszOTQsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9jb2NvYS9XZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0KIAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC00MTQsNiArNDEzLDcgQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJp
bWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9y
bWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmlu
ZGV4IDJjNTUzYjA1NTFkYWQ2OWFhMTk5ZDk2MGY1NTIzNDNkOTIwZjA3YjMuLmMyMDMwOTFhOTM5
YzZmN2EyMmNmYmY4OWY4MmIwYzMxZWQ5MmJhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5D
YWlyby5jbWFrZQpAQCAtMjEsNyArMjEsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0
bWFwSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxp
dGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0zNCw2ICszMyw3
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDk1ODcyZDNhYzZl
ZWEyNjVhZTMxNTkyYjI3MjI5OWM0ZmYyZTMzYi4uYWIxYTQ5Y2Y5NjQwNDU5ZTRlYjdiYmRjY2Zj
ZTM3OWEwZDIwOWJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTQzNCw3ICsxNDM0LDcgQEAKIAkJMzc1Q0QyMzIxMTlENDND
ODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24u
aCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc2RENDRTAxM0I0Rjk2
NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdE
RTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3Zlcmxh
cFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNB
OEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovOyB9OworCQkzNzdBM0E5
MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAv
KiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMyMzBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkx
OUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4NUVGMzkwMEY0QjY2MSAvKiBD
cmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIyNzgsNiArMjI3
OCw3IEBACiAJCTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2
MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFn
ZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9
OwogCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIw
MDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBC
OUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJB
N0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAv
KiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAq
LzsgfTsKIAkJNTgwMzcxNjExQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MDM3MTVGMUE2NkYwMEEw
MEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgKi87IH07CkBAIC04OTQzLDcgKzg5NDQsNyBAQAogCQkz
NzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAv
KiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxh
dGZvcm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBs
YXRmb3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIx
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRl
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRC
NjYxIC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENyZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODc1LDYg
Kzk4NzYsNyBAQAogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFs
aWZpZWROYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUx
RDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4
MDBDNzg0NTAgLyogU1ZHSW1hZ2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0ltYWdlQ2xpZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxODI0LDcgKzIxODI2LDYgQEAKIAkJ
QjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFw
SW1hZ2VDRy5jcHAgKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cu
Y3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3Bw
ICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8s
CkBAIC0yMTg1MSw2ICsyMTg1Miw3IEBACiAJCQkJQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8q
IFBhdHRlcm5DRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzYwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRv
Y3VtZW50SW1hZ2UuY3BwICovLAogCQkJCUIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZE
b2N1bWVudEltYWdlLmggKi8sCisJCQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRm
b3JtSW1hZ2VDRy5jcHAgKi8sCiAJCQkJMUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlFIC8qIFN1Ymlt
YWdlQ2FjaGVXaXRoVGltZXIuY3BwICovLAogCQkJCTFGQzQwRkI3MTY1NUM1OTEwMDQwRjI5RSAv
KiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi8sCiAJCQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNF
NjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwICovLApAQCAtMjIwNTEsNiArMjIwNTMs
NyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8s
CiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4
RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhG
MDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4
NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2
RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1NzkxLDYgKzI1
Nzk0LDcgQEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1l
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVF
IC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEw
QzAzQjc0MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxN
ZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2
QSAvKiBET01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
QkE0RDEzMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjkxNTIsNyArMjkxNTYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTEx
NyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJC
MDI2NzYwMEMxQTM1OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTg5OTQzMjkwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdl
Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJs
b2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAv
KiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5NmYxYjgzYjgx
ZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAodm9pZClnZXRQ
cmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNBcnJh
eSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAgaWYgKEltYWdl
KiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAgICAgICAgKmNn
SW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4oaW1hZ2UtPmdl
dENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1t
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQppbmRleCAz
NjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1YWNlY2EzYzY2
OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8
VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3RleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRDcm9z
c2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5k
aWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VSZWYoKTsKKyAg
ICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGln
aGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250ZW50c0ltYWdl
ID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAg
ICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm5hdGl2
ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVycyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0yNjUsNyArMjY1
LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGVCb3VuY2VB
bmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8Q0FCYXNpY0Fu
aW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJbnRlcnZhbCBk
dXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBSZXRhaW5QdHI8
Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24g
YW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJ
bWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4
dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBbY3Jvc3NmYWRl
QW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwogICAgIFtjcm9z
c2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CiAgICAgW2Ny
b3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCAwNjc2Y2Uw
NzI1MDc2YmI5NWNjZDI2YzVjMWE1MjhkMTYzYTQ2NTJhLi4zNTY3NDAxMTkwODY5OTY0YTBiNzY0
NDNjNTkwMDA1YjJjOTQ2NjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC03MCwxMSArNzAsMTEgQEAgQml0bWFwSW1hZ2U6OkJp
dG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVy
KQogewogICAgIC8vIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBkZWNvZGVyLCB3ZSBjYW4ndCBmaWd1
cmUgb3V0IHRoZSBpbWFnZSBvcmllbnRhdGlvbi4KICAgICAvLyBTZXQgbV9zaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uIHRvIGJlIHRoZSBzYW1lIGFzIG1fc2l6ZSBzbyBpdCdzIG5vdCAweDAuCi0g
ICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zaXplID0gTmF0aXZlSW1hZ2U6OnNp
emUoaW1hZ2UpOworICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IFBs
YXRmb3JtSW1hZ2UoaW1hZ2UpLnNpemUoKTsKICAgICBtX2RlY29kZWRTaXplID0gbV9zaXplLmFy
ZWEoKSAqIDQ7Ci0gICAgCisKICAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOworICAgIG1fZnJhbWVz
WzBdLm1faGFzQWxwaGEgPSBQbGF0Zm9ybUltYWdlKGltYWdlKS5oYXNBbHBoYSgpOwogICAgIG1f
ZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKICAgICBtX2ZyYW1lc1swXS5tX2ltYWdl
ID0gV1RGTW92ZShpbWFnZSk7CiB9CkBAIC0xMjUsOSArMTI1LDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8gVGhlIHVu
ZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3QgdHJ5aW5n
IHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVyIGRhdGEp
LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0YS4KLSAg
ICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAg
ICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZyYW1lQnl0
ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IG1f
ZnJhbWVzW2ldLmNsZWFyKGZhbHNlKTsKICAgICB9CiAKICAgICBtX3NvdXJjZS5jbGVhcihkZXN0
cm95QWxsLCBjbGVhckJlZm9yZUZyYW1lLCBkYXRhKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKQEAg
LTE1MCw4ICsxNDgsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGFJZk5l
Y2Vzc2FyeShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVk
IGFsbEZyYW1lQnl0ZXMgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIGFsbEZyYW1lQnl0ZXMgKz0gbV9mcmFtZXNbaV0udXNlZEZy
YW1lQnl0ZXMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpCisgICAgICAgIGFs
bEZyYW1lQnl0ZXMgKz0gZnJhbWUudXNlZEZyYW1lQnl0ZXMoKTsKIAogICAgIGlmIChhbGxGcmFt
ZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRvZmYpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJp
dG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRh
OiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0ldSIsIHRoaXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdl
QW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTI4OCwyMSArMjg2LDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6
OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVk
IGJ5IGFwcGVuZGluZyBuZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRo
ZQogICAgIC8vIGluY29tcGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJh
bWVCeXRlc0NsZWFyZWQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAg
ICAgLy8gTk9URTogRG9uJ3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhh
dCB3aWxsIHRyeSB0bwogICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVy
LWRlY29kZWQgb3IKICAgICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1l
cyEKLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tp
XS5tX2lzQ29tcGxldGUpCi0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFt
ZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5t
X2hhdmVNZXRhZGF0YSAmJiAhZnJhbWUubV9pc0NvbXBsZXRlKQorICAgICAgICAgICAgZnJhbWVC
eXRlc0NsZWFyZWQgKz0gZnJhbWUuY2xlYXIodHJ1ZSk7CiAgICAgfQogICAgIGRlc3Ryb3lNZXRh
ZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6Tm8pOwogI2Vs
c2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/CiAgICAgaW50
IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJhbWVCeXRlczsK
LSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFyKHRydWUpKSB7
CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5j
bGVhcih0cnVlKSkgewogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAg
ICAgIGRlbHRhQnl0ZXMgKz0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBt
X2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7CkBAIC0zOTAsOCArMzg2LDcgQEAgTmF0aXZlSW1h
Z2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQg
cHJlc2VudGF0aW9uU2MKICAgICAvLyByZS1kZWNvZGUgd2l0aCBhIGxvd2VyIGxldmVsLgogICAg
IGlmIChpbmRleCA8IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSAm
JiBzdWJzYW1wbGluZ0xldmVsIDwgbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkg
ewogICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgYWxyZWFkeSBjYWNoZWQsIGJ1dCBhdCB0b28g
c21hbGwgYSBzaXplLCByZS1kZWNvZGUgYSBsYXJnZXIgdmVyc2lvbi4KLSAgICAgICAgaW50IHNp
emVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlczsKLSAgICAgICAgbV9mcmFt
ZXNbaW5kZXhdLmNsZWFyKHRydWUpOworICAgICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1l
c1tpbmRleF0uY2xlYXIodHJ1ZSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEoKTsK
ICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwogICAgICAgICBpZiAoaW1hZ2VP
YnNlcnZlcigpKQpAQCAtNDA0LDYgKzM5OSw0MyBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBwcmVzZW50YXRpb25TYwog
CiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwogfQorICAgIAorTmF0aXZlSW1h
Z2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgY291bnQgPSBm
cmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKTsKKyAgICAgICAg
aWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLnNpemUoKSA9PSBzaXplKQorICAgICAg
ICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAKKyAgICAvLyBGYWxsYmFjayB0byB0aGUg
Zmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJl
dHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJpdG1h
cEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCit7CisgICAgcmV0dXJuIGZyYW1l
SW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30KKworVmVjdG9yPE5hdGl2ZUltYWdlUHRy
PiBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0aXZl
SW1hZ2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAg
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChh
dXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMuYXBw
ZW5kKGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKK30KIAogYm9vbCBC
aXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CkBAIC00
MjEsMTEgKzQ1Myw2IEBAIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwogfQog
Ci1OYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KQotewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7Ci19Ci0K
IGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsK
ICAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hlTWV0YWRhdGFPbmx5KSkK
QEAgLTcwMCwxNyArNzI3LDU0IEBAIENvbG9yIEJpdG1hcEltYWdlOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAKICAgICBBU1NFUlQobV9mcmFt
ZXMuc2l6ZSgpKTsKLSAgICBtX3NvbGlkQ29sb3IgPSBOYXRpdmVJbWFnZTo6c2luZ2xlUGl4ZWxT
b2xpZENvbG9yKG1fZnJhbWVzWzBdLm1faW1hZ2UuZ2V0KCkpOworICAgIG1fc29saWRDb2xvciA9
IFBsYXRmb3JtSW1hZ2UobV9mcmFtZXNbMF0ubV9pbWFnZSkuc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1fc29saWRD
b2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RTb2xpZENv
bG9yKCkKK3sKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoMCk7CisgICAgcmV0
dXJuICFpbWFnZSA/IGZhbHNlIDogUGxhdGZvcm1JbWFnZShpbWFnZSkuaXNBbG1vc3RTb2xpZENv
bG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5BbmltYXRlKCkKIHsKICAgICBy
ZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+IDE7CiB9CiAKK3ZvaWQgQml0
bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGFydEFuaW1hdGlvbihE
b05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlvbigpOworI2VuZGlmCisgICAg
CisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKKyAgICBpZiAoY29s
b3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0
UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhdXRv
IGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIFBsYXRmb3JtSW1hZ2U6
OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QpKTsKKyAgICBpZiAo
IWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4K
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24o
ZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBpZiAoZGVzY3JpcHRpb24ucmVz
cGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKKyAgICAg
ICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7
CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhjb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworICAgIAorICAgIGlmIChp
bWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsK
K30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7
CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRhY2YwMmI2ZWQ4ZWVhZmU3ZGVm
ZDY2ZjBjNS4uMjUwNDEzNzYyNGU2YWU4YzRlYzIxZTdhNWYyZmVlMTNlN2E3MWRkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdl
U291cmNlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2Uu
aCIKIAogI2lmIFVTRShDRykgfHwgVVNFKEFQUEtJVCkKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CkBAIC00NywyNSArNDgsOSBAQCB0eXBlZGVmIHN0cnVjdCBIQklUTUFQX18gKkhCSVRNQVA7
CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIHN0cnVjdCBGcmFtZURhdGE7Ci19
Ci0KLW5hbWVzcGFjZSBXVEYgewotICAgIHRlbXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0czxX
ZWJDb3JlOjpGcmFtZURhdGE+IDogcHVibGljIFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuSW5pdGlhbGl6ZVdpdGhNZW1zZXQgPSBmYWxzZTsg
Ly8gTm90IGFsbCBGcmFtZURhdGEgbWVtYmVycyBpbml0aWFsaXplIHRvIDAuCi0gICAgfTsKLX0K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUaW1lcjsKIAotbmFtZXNwYWNlIE5hdGl2
ZUltYWdlIHsKLSAgICBJbnRTaXplIHNpemUoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBi
b29sIGhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgQ29sb3Igc2luZ2xlUGl4
ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci19Ci0KIC8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gRnJhbWVEYXRhIENsYXNz
CiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAg
LTc1LDE4ICs2MCwzMCBAQCBwdWJsaWM6CiAgICAgRnJhbWVEYXRhKCkKICAgICAgICAgOiBtX2hh
dmVNZXRhZGF0YShmYWxzZSkKICAgICAgICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCi0gICAgICAg
ICwgbV9oYXNBbHBoYSh0cnVlKQorICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCiAgICAgewog
ICAgIH0KIAogICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAgICAgIGNsZWFyKHRydWUpOwor
ICAgIHsKKyAgICAgICAgaWYgKG1faW1hZ2UpCisgICAgICAgICAgICBQbGF0Zm9ybUltYWdlKG1f
aW1hZ2UpLmNsZWFyU3ViSW1hZ2VzKCk7CiAgICAgfQogCiAgICAgLy8gQ2xlYXIgdGhlIGNhY2hl
ZCBpbWFnZSBkYXRhIG9uIHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEu
CiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBj
bGVhci4KLSAgICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7CisgICAgdW5zaWduZWQg
Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgZnJhbWVC
eXRlcyA9IHVzZWRGcmFtZUJ5dGVzKCk7CisgICAgICAgIAorICAgICAgICBpZiAoY2xlYXJNZXRh
ZGF0YSkKKyAgICAgICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7CisKKyAgICAgICAgbV9z
dWJzYW1wbGluZ0xldmVsID0gMDsKKyAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CisKKyAgICAg
ICAgcmV0dXJuIGZyYW1lQnl0ZXM7CisgICAgfQogICAgIAogICAgIHVuc2lnbmVkIHVzZWRGcmFt
ZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7IH0KIApA
QCAtMTU1LDEyICsxNTIsNiBAQCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNl
bnRhdGlvbigpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9F
WFBPUlQgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJl
ZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAg
IFJldGFpblB0cjxDRkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRp
ZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVy
cmlkZTsKICAgICBib29sIGdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSop
IG92ZXJyaWRlOwpAQCAtMTc0LDggKzE2NSwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3Qq
IGdldEV2YXNPYmplY3QoRXZhcyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VY
UE9SVCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUlt
YWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAg
IEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7
IHJldHVybiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBW
ZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAg
IAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBi
b29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyAr
MjExLDYgQEAgcHJvdGVjdGVkOgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRp
dmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNj
YWxlSGludCA9IDEpOwotICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VB
dEluZGV4KHNpemVfdCk7CiAKICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA3YTI5OTky
Zjc3MTg4ZTAzODI4ZDgwYTY1YjhiZTJjZDhkYzJkZTc2Li4zMjIzYzFjZDY3YTIxMDVlYmYyYjE1
Njc2OTY4ODA5N2ZiMjI3NzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKQEAgLTEzNyw4ICsxMzcsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBUaWxlUnVsZSB7
IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVwZWF0VGlsZSB9OwogCisgICAg
dmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0K
KyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNp
emUmKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0dWFs
IEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBJ
bWFnZU9yaWVudGF0aW9uKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4g
ZnJhbWVzTmF0aXZlSW1hZ2VzKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBBY2Nlc3NvcnMg
Zm9yIG5hdGl2ZSBpbWFnZSBmb3JtYXRzLgogCkBAIC0xNTAsMTIgKzE1Myw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBu
dWxscHRyOyB9CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIENHSW1hZ2VSZWYg
Z2V0Q0dJbWFnZVJlZigpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIENHSW1hZ2VS
ZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBudWxs
cHRyOyB9Ci0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFycmF5
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAgICAg
dmlydHVhbCBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgeyBy
ZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjdhZWE0ODlmM2ViMmE4Mjg3NzFjMjEwM2U4ZDRk
MGJlMTdiZTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7
CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhpY3NDb250ZXh0
OworCitjbGFzcyBQbGF0Zm9ybUltYWdlIHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUltYWdlKGNv
bnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKKyAgICAgICAgOiBtX2ltYWdlKGltYWdlKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGlzTmlsKCkgY29uc3QgeyByZXR1cm4gIW1faW1hZ2U7IH0K
KyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsK
KyAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJikgY29uc3Q7CisKKyAg
ICBzdGF0aWMgZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCitwcml2YXRl
OgorI2lmIFVTRShDRykKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2VSZWYoKSBjb25zdCB7IHJldHVy
biBtX2ltYWdlID8gbV9pbWFnZS5nZXQoKSA6IG51bGxwdHI7IH0KKyNlbmRpZgorICAgIE5hdGl2
ZUltYWdlUHRyIG1faW1hZ2U7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KaW5k
ZXggODRjN2Q2MjMyNGY2NDcxMWUxNjVlNTI0M2RmODhmMjFhNTBlZDdlOS4uMjBiNTY4OTMzNzUy
YWQwZmNlMTBiMzY0ZmUwMTJkNDgxZTY0N2QyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5t
bQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSgpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1hZ2UgPSBp
bWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1hZ2UgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgICAgICAgICBpZiAo
IW1fcGF1c2VkSW1hZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TW9kZSA9IFBh
aW50SXRCbGFjazsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fp
cm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzcyMmJlYzUzYWI4YTA4YThk
YTg1MjhiOWUwZDdjNGQwY2Q0MTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1h
cEltYWdlQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1
ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRl
IDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRpdmVJbWFn
ZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2Up
Ci17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNpemUoaW1hZ2UuZ2V0KCkpOwotfQotCi1ib29s
IGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICBy
ZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09O
VEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAot
ICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAg
ICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShpbWFn
ZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4gQ29s
b3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0cjxSR0JBMzIq
PihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJu
IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci19Ci0KLX0KLQotdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsCi0gICAgQmxl
bmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwgIWRzdC5oZWlnaHQoKSB8fCAhc3JjLndpZHRo
KCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhcnRBbmltYXRp
b24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhh
dmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xvciBjb2xvciA9IHNp
bmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwgY29sb3IsIG9wKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuc2F2ZSgpOwotCi0gICAgLy8gU2V0IHRoZSBj
b21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYgKG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIg
JiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhZnJhbWVIYXNBbHBoYUF0SW5kZXgo
bV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZh
Y2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1c3RTb3VyY2VS
ZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6ZSk7Ci0jZWxzZQotICAgIEZsb2F0UmVj
dCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRpZgotCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBm
cmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7Ci0gICAgaWYg
KGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBGbG9hdFJlY3QgZHN0UmVjdCA9IGRzdDsKLQot
ICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7Ci0g
ICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgw
LCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgp
KTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotICAgICAgICBj
b250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGRz
dFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFtZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFz
SGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgd2ls
bCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3Jp
ZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBm
b3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCi0gICAg
ICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSwgZHN0
UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1cmZhY2Uu
Z2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7Ci0KLSAgICBjb250ZXh0
LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2Jz
ZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wg
Y2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZl
TWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIG1faW1hZ2Ug
PSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bUltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGxhdGZvcm1JbWFnZUNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGFkYWVjMjcwZTMxYjA1NGFmYzVm
NjZkNDgyODhhZWJmMDYxZTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApAQCAtMCwwICsxLDEx
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENB
SVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7Cit9CisKK0ludFNpemUg
UGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRT
aXplKCkgOiBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworfQorCitib29sIFBsYXRm
b3JtSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSB8fCBjYWly
b19zdXJmYWNlX2dldF9jb250ZW50KG1faW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09M
T1I7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNv
bnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkpCisgICAg
ICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9p
bWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQorICAgICAgICByZXR1cm4g
Q29sb3IoKTsKKworICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0cjxSR0JB
MzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2UuZ2V0KCkpKTsKKyAgICBy
ZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKK30KKworYm9vbCBQbGF0
Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAgIHJldHVy
biAxOworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNv
bnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGNvbnRleHQu
c2F2ZSgpOworICAgIAorICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgorICAg
IGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIG1vZGUgPT0gQmxlbmRNb2RlTm9ybWFs
ICYmICFoYXNBbHBoYSgpKQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9X
Tl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VTaXplKG1f
aW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1c3RTb3Vy
Y2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3QsIHNjYWxlZFNpemUpOworI2Vsc2UKKyAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyY1JlY3QpOworI2VuZGlmCisgICAgICAgIAorICAg
IEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgIAorICAgIGlm
IChvcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgeworICAgICAgICAvLyBJ
bWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCisgICAg
ICAgIGNvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpKTsKKyAgICAg
ICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOworICAgICAgICBj
b250ZXh0LmNvbmNhdENUTShvcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChhZGp1c3Rl
ZERlc3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAob3JpZW50YXRpb24udXNlc1dpZHRoQXNI
ZWlnaHQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxs
IGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmll
bnRhdGlvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZv
ciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KKyAgICAg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShhZGp1c3RlZERlc3RSZWN0LnNpemUoKS50
cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KG1faW1hZ2UuZ2V0KCksIGFkanVzdGVk
RGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7CisKKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFw
SW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJ
bWFnZUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjODFhMTcwYmU3OWFl
NmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRt
YXBJbWFnZUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENHKQotCi0j
aW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJTdWJpbWFnZUNh
Y2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYgVVNFKEFQ
UEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMu
aD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8V2Vi
S2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBz
aXplKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGlt
YWdlKTsKLSAgICByZXR1cm4gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3Qg
UmV0YWluUHRyPENHSW1hZ2VSZWY+JikKLXsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3Rs
eSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihj
b25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7
Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEp
KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBjaGFyIHBpeGVs
WzRdOyAvLyBSR0JBCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xvclNwYWNl
UmVmKCksCi0gICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAgICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAgICAgIHJl
dHVybiBDb2xvcigpOwotICAgIAotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250
ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0
bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0KCkpOwot
ICAgIAotICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAw
KTsKLQotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsx
XSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7
Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsK
LSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsK
LQotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci0KLSAgICBpZiAobV9pbWFnZSkgewotI2lm
IENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2lt
YWdlLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ0dJbWFnZVJlZiBC
aXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdElu
ZGV4KDApLmdldCgpOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJzdENHSW1h
Z2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291bnQgPSBm
cmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0g
ICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwot
ICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKSwg
Q0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBj
Z0ltYWdlOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENHSW1hZ2VS
ZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBnZXRDR0ltYWdl
UmVmKCk7Ci19Ci0KLVJldGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFn
ZUFycmF5KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgaWYgKCFj
b3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgQ0ZNdXRhYmxlQXJyYXlS
ZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5cGVBcnJh
eUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0g
ICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdl
dCgpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJhbWUpOwot
ICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihhcnJheSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBC
bGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRp
b24pCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hV
cCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMg
Zm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0SXNQREZD
b250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAgICAgICBpbWFnZSA9IGNvcHlVbnNj
YWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVU
cmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29udGV4dCgp
KSk7Ci0gICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9hdD4oMSwg
c3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qu
d2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0
LmhlaWdodCgpKSk7Ci0KLSAgICAgICAgaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJl
bnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkgLy8g
SWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwot
ICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0
eHQsIGRlc3RSZWN0LCBjb2xvciwgY29tcG9zaXRlT3ApOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBp
cyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgotICAgIEludFNpemUgaW1hZ2VTaXplKENHSW1hZ2VHZXRX
aWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsKLSAgICAK
LSAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVk
IGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4KLSAg
ICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgaWYgKGltYWdlU2l6ZSAh
PSBtX3NpemUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9yaWdpbmFsSW1hZ2VCb3VuZHMoRmxvYXRQ
b2ludCgpLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJlY3Qgc3Vic2FtcGxlZEltYWdlQm91bmRz
KEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAgICAgc2NhbGVkU3JjUmVjdCA9IG1hcFJl
Y3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFnZUJvdW5kcywgc3Vic2FtcGxlZEltYWdlQm91bmRzKTsK
LSAgICB9Ci0gICAgCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICBpZiAo
ZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleCht
X2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VT
aXplLCBkZXN0UmVjdCwgc2NhbGVkU3JjUmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9kZSwgb3Jp
ZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNl
cnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gQml0bWFw
SW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAg
ICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2lt
YWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsKLQotICAgIGlmICghbV9mcmFtZXNb
aW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4
XS5tX2ltYWdlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4
KGluZGV4KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKaW5kZXggYjQyOGQ1MGQ5NGJm
OTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUyOGQ5Mi4uM2RhYTEzOWFiN2VhNWI0MjE1Nzc4ODM1ZDM1
M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03Miw3ICs3Miw3IEBAIENHUGF0dGVyblJlZiBQYXR0ZXJu
OjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VU
cmFuCiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGluIGJvdGggZGlyZWN0aW9ucywgd2UgY2Fu
IHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAvLyBpbnN0ZWFkIG9mIGN1c3RvbSBwYXR0
ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNyYWNrcy4KICAgICBpZiAobV9yZXBl
YXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0aElt
YWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCksIHBhdHRlcm5UcmFu
c2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CisgICAgICAgIHJldHVybiB3
a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+bmF0aXZl
SW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29uc3RhbnRT
cGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBmb3IgeFN0
ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBvZiBGTFRf
TUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4KQEAgLTgz
LDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICBDR0Zsb2F0IHlTdGVwID0g
bV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8PCAyMik7CiAKICAgICAvLyBUaGUg
cGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYgd2hlbiBpdCdzIGRvbmUgcmVuZGVy
aW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1h
Z2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOworICAgIENH
SW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmxlYWtS
ZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJhY2tzID0g
eyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKICAgICByZXR1
cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcsIFRSVUUs
ICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlMmMwMjdkYWQz
Nzg5ZjkwNjJiOTkzZTE3YjE2ZDNlNGJmN2NiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCkBAIC0wLDAg
KzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVT
RShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lmIENBQ0hF
X1NVQklNQUdFUworICAgIGlmICghaXNOaWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNs
ZWFySW1hZ2UoY2dJbWFnZVJlZigpKTsKKyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRmb3JtSW1h
Z2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogSW50
U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdodChjZ0lt
YWdlUmVmKCkpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBD
R0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0Nv
bG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAg
aWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBD
b2xvcigpOworICAgIAorICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBh
dXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwg
MSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAgICAga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsK
KyAgICAKKyAgICBpZiAoIWJpdG1hcENvbnRleHQpCisgICAgICAgIHJldHVybiBDb2xvcigpOwor
ICAgIAorICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dC
bGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQo
KSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAgICBpZiAo
IXBpeGVsWzNdKQorICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgCisgICAg
cmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8g
cGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKyAgICAK
K2Jvb2wgUGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBD
R0ltYWdlUmVmIGltYWdlID0gY2dJbWFnZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0
c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZvIGltYWdl
SW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFnZUluZm8g
JiBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFs
cGhhSW5mb01hc2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKKyAgICAg
ICAgLy8gRklYTUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZv
cm1hdHMuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFn
ZSk7CisgICAgc2l6ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIHNp
emVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7CisgICAgCisg
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25zdCBVSW50
OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAorICAgIC8v
IE92ZXJsYXkgYSBncmlkIG9mIHNhbXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZl
cnNpb24gb2YgdGhlIGltYWdlLgorICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxj
dWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQK
KyAgICAvLyBhbmQgaXRzIHN1cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3ku
CisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5zaWduZWQg
c2FtcGxlQ29scyA9IDc7CisgICAgLy8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBv
ZiBzYW1wbGVzLCBhbmQgYWNjb21tb2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCisgICAg
aWYgKHdpZHRoIDwgc2FtcGxlQ29scyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVt
biBsYW5kIG9uIHRoZSBpbWFnZSBwZXJpbWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3RyaWRlV2lk
dGggPSBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7Cisg
ICAgY29uc3QgZmxvYXQgc3RyaWRlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAt
IDEpIC8gKHNhbXBsZVJvd3MgLSAxKTsKKyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3Nh
bXBsZUNvbHNdOworICAgIAorICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxl
IHBvaW50cy4KKyAgICBmbG9hdCB5ID0gMDsKKyAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7CisgICAgICAg
IGZsb2F0IHggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29s
czsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nh
c3Q8aW50Pih4ICsgLjUpKSAqIDQ7CisgICAgICAgICAgICAvLyBSIEcgQiBBCisgICAgICAgICAg
ICBzYW1wbGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3
MjEgKiAqKHAwKzIpKSAqICoocDArMykgLyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0cmlkZVdp
ZHRoOworICAgICAgICB9CisgICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAgICByb3cg
PSBkYXRhICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKKyAgICB9
CisgICAgCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9hdCBhY2N1
bVNjb3JlID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7
ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7
ICsraikgeworICAgICAgICAgICAgZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2Ft
cGxlc1tpICsgMV1bal0gKyBzYW1wbGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0g
NCAqIHNhbXBsZXNbaV1bal07CisgICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZm
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBz
YW1wbGUgY2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAgcmV0dXJu
IGFjY3VtU2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7
Cit9CisKK2Zsb2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QpCit7CisgICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3
aW5nIGludG8gUERGIGNvbnRleHRzLgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAg
Q0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFu
c2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
KSk7CisgICAgcmV0dXJuIHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERl
c3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERl
c3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9p
ZCBQbGF0Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXpl
JiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IElt
YWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNhbXBsaW5n
IG1heSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4K
KyAgICBJbnRTaXplIHN1YnNhbXBsZWRJbWFnZVNpemUgPSBzaXplKCk7CisgICAgCisgICAgLy8g
c3JjUmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwg
c28gd2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNp
emUgIT0gc3JjU2l6ZSkKKyAgICAgICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0
LCBGbG9hdFJlY3QoeyB9LCBzcmNTaXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdl
U2l6ZSkpOworICAgIAorICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIHN1YnNh
bXBsZWRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmll
bnRhdGlvbik7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4YmE4NDY5
ZDUyOTQ1NDhkNTE4NDdhN2ZlLi40NDc2ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQxYjliYjAy
MmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9U
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KQEAgLTEy
OSw3ICsxMjksNyBAQCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRyYWNrUmVw
cmVzZW50YXRpb25Db2NvYSgpCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVw
ZGF0ZSgpCiB7CiAgICAgaWYgKGF1dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNl
dENvbnRlbnRzOihpZClyZXByZXNlbnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAg
W21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFn
ZSgpLmdldCgpXTsKIH0KIAogdm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRD
b250ZW50U2NhbGUoZmxvYXQgc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KaW5kZXggZmEwMTFhYTg4MTYzMDMwMDA5NDQ5OGViYzBm
ZmNhOWZiOWMzMDM0Yi4uYmYwODU3ZGI2YzY2ZjY0MTVjYjlmZTNhNGZhMzEyY2IwZTBhNjJiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5t
bQpAQCAtODUsMzEgKzg1LDIyIEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJl
c2VudGF0aW9uKCkKICAgICBpZiAobV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVw
LmdldCgpOwogCi0gICAgdW5zaWduZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1
dG8gbmF0aXZlSW1hZ2VzID0gdGhpcy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJ
ZiBudW1GcmFtZXMgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNu
J3QgaGF2ZSB2YWxpZCBkYXRhCisgICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJv
LCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEK
ICAgICAvLyBFdmVuIHRob3VnaCB0aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVX
aXRoRGF0YSB3aWxsIGZhaWwgYW5kIHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8v
IGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xl
IHdpdGggYW4gZXJyb3IgbWVzc2FnZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIFZlY3RvcjxDR0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUZyYW1lczsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1h
Z2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0g
ICAgICAgICAgICBpbWFnZXMuYXBwZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVk
IG51bVZhbGlkRnJhbWVzID0gaW1hZ2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5z
aXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJs
ZURhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAg
IFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihD
R0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwg
bnVtVmFsaWRGcmFtZXMsIDApKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVm
PiBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEo
ZGF0YS5nZXQoKSwga1VUVHlwZVRJRkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAg
IGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytp
KQotICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwg
aW1hZ2VzW2ldLCAwKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMp
CisgICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBu
YXRpdmVJbWFnZS5nZXQoKSwgMCk7CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShk
ZXN0aW5hdGlvbi5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1h
Yy5tbQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQxYTRkLi5kMTE0
NTRiMDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tS
ZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAgICAgICBp
ZiAoIWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9wcmV2aWV3SW1hZ2Ug
PSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdl
LT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdlKQogICAgICAgICAg
ICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUu
bW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCmluZGV4IGI2NTlkNmRiZjlh
ZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdlMWYzYjEuLjdjNWVkMjEwZGRiMmEzMmE3NjY2NzRjMTIw
ZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2Fj
aGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQpAQCAtMjA0LDcg
KzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JVUkw6KE5TVVJMICopdXJsCiAgICAgV2Vi
Q29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0gZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVk
SW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2Uo
KS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRp
dmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3Bw
CmluZGV4IDBmNmRlN2ExNDZhNjExYTUyYWExZTUzOTAxOWZhNmMxYzQ2NzI1YWUuLjMwNTYzMzZj
YjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZjODgxZGZlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKQEAgLTM3LDEy
ICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIENHSW1hZ2VSZWYgV0tJY29uRGF0
YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJl
ZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6ZSkKIHsKICAgICBJbWFnZSogaW1hZ2UgPSB0
b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3RyaW5nKHVybFJl
ZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5nZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUo
SW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNp
emUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VP
ZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxp
bnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVsbHB0cjsKIH0KIAogQ0ZBcnJheVJlZiBXS0lj
b25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNv
bkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7CiAgICAgSW1hZ2UqIGltYWdlID0gdG9J
bXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmluZyh1cmxSZWYp
KTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Q0dJbWFnZUFycmF5KCkubGVha1JlZigp
IDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1lc05hdGl2ZUltYWdlcygpOworICAgIGlmICgh
bmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAg
Q0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShudWxscHRyLCBu
YXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAgICBmb3IgKGF1
dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1
ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4
IDlhMjgxMzZlYmFhMzQ5NDQ2MGYwMTk1ZTUxODcwZDE2M2U4Nzg0NTMuLmFhNmQ0N2UzZjA3ZTNi
NTg3ZDUzMDk4YWU2MDRmZDZjYzlkYzllOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC00MDc5LDcg
KzQwNzksNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJldmlld0l0
ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJvbAogewogICAgIGlmICghX3Bvc2l0aW9u
SW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bv
c2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPmdldENHSW1hZ2VS
ZWYoKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0
aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNBcnJheSAqKV9w
cmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNv
bnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggYzExYmU5NTkwZTdhOGVkYTY2Y2Y4Mjc2NDc1YWEy
NWEyNDIyZjgxOC4uYzdlYWEwZTZjOGNiYTM1ZjZlYWRkNDMxMmM2ZDkxNmU0ZTY4YWY4MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApA
QCAtMTcyNiw2OSArMTcyNiw2IEBAIHZvaWQgUGx1Z2luVmlldzo6d2luZG93ZWRQbHVnaW5WaXNp
YmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1aW50NjRfdCB3aW5kCiB9CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKEJp
dG1hcEltYWdlKiBiaXRtYXApCi17Ci0gICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0
Q0dJbWFnZVJlZigpOwotICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFn
ZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1hcEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1h
cEluZm8oaW1hZ2UpOwotICAgIGlmICghKGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMy
TGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIg
YmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4ZWwgZm9ybWF0cy4KLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzaXpl
X3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOwotICAgIHNpemVfdCBoZWlnaHQgPSBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdl
R2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcHJvdmlk
ZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRl
cihpbWFnZSkpKTsKLSAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIocHJv
dmlkZXIuZ2V0KCkpOwotCi0gICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBv
biB0b3Agb2YgYSBncmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCi0gICAgLy8gRm9yIHRo
ZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2Ug
YW1vbmcgdGhlIHNhbXBsZSBwb2ludAotICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywg
c2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4KLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0g
NzsKLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKLSAgICAvLyBGSVhNRTogUmVm
aW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJl
bnQgYXNwZWN0IHJhdGlvcy4KLSAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8
IHNhbXBsZVJvd3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1hZ2UgcGVyaW1ldGVyLgotICAgIGNv
bnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAo
c2FtcGxlQ29scyAtIDEpOwotICAgIGNvbnN0IGZsb2F0IHN0cmlkZUhlaWdodCA9IHN0YXRpY19j
YXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dzIC0gMSk7Ci0gICAgZmxvYXQgc2Ft
cGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKLQotICAgIC8vIEZpbmQgdGhlIGx1bWluYW5j
ZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KLSAgICBmbG9hdCB5ID0gMDsKLSAgICBjb25zdCBVSW50
OCogcm93ID0gZGF0YTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsg
KytpKSB7Ci0gICAgICAgIGZsb2F0IHggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgc2FtcGxlQ29sczsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBVSW50OCogcDAgPSBy
b3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7Ci0gICAgICAgICAgICAvLyBSIEcg
QiBBCi0gICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAq
ICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDArMykgLyAyNTU7Ci0gICAgICAgICAg
ICB4ICs9IHN0cmlkZVdpZHRoOwotICAgICAgICB9Ci0gICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0
OwotICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41KSkgKiBieXRl
c1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgotICAg
IGZsb2F0IGFjY3VtU2NvcmUgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1w
bGVSb3dzIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1w
bGVDb2xzIC0gMTsgKytqKSB7Ci0gICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0g
MV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tp
XVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKLSAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0g
ZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgc2NvcmUgZm9yIGEg
Z2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIDAgYW5kIDI1NV4yLgotICAg
IHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1wbGVSb3dzIC0gMikgKiAoc2FtcGxlQ29s
cyAtIDIpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1l
ckZpcmVkKCkKIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklT
VElDKQpAQCAtMTgwOCw3ICsxNzQ1LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hv
dFRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmIChzbmFwc2hvdEltYWdlKSB7CiAjaWYgRU5BQkxF
KFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKLSAgICAgICAgICAgIGJvb2wg
c25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBpc0FsbW9zdFNvbGlkQ29sb3IoZG93bmNhc3Q8
Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJvb2wgc25h
cHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEJpdG1hcEltYWdl
PihzbmFwc2hvdEltYWdlKS0+aXNBbG1vc3RTb2xpZENvbG9yKCk7CiAgICAgICAgICAgICBzbmFw
c2hvdEZvdW5kID0gIXNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281160</attachid>
            <date>2016-06-13 00:06:54 -0700</date>
            <delta_ts>2016-09-08 11:02:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160613000827.patch</filename>
            <type>text/plain</type>
            <size>74403</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNjQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNmMmE0ZTliZWMyOTY4
MDhhMDliMjI1ZWMzOWY1ZDgzNzc3ZmY0OC4uZmEwZjFkNmM5MzA0YWQzNmU2NDQ2ZWEyMmQxMTFl
YWMyNjUxOGE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE2LTA2LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9k
dWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFn
ZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4
Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlzIHRvIG1vdmUgdGhlIHBsYXRmb3Jt
IGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20gQml0bWFwSW1hZ2UgdG8gUGxhdGZv
cm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJsZSBvZiAKKyAgICAgICAgZHJhd2lu
ZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFnZVB0ciBxdWVzdGlvbnMgd2hlbiBh
biBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWlsYWJsZS4gQXBhcnQgZnJvbSBkcmF3
aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3aWxsIGJlCisgICAgICAgIGNhbGxl
ZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRhIHNvIHdlIHdpbGwga2VlcCBldmVy
eXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIuIEJ1dCB3ZSB3aWxsIGNhc3QgdGhl
IE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hlbgorICAgICAgICBhIHBsYXRmb3Jt
IGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0t
IENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRm
b3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAg
ICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAg
ICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06CisgICAg
ICAgICgtW0RPTU5vZGUgZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6YW5kUmVjdHM6XSk6CisgICAg
ICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbToKKyAgICAgICAgKC1bV2ViVGV4
dEluZGljYXRvclZpZXcgaW5pdFdpdGhGcmFtZTp0ZXh0SW5kaWNhdG9yOm1hcmdpbjpvZmZzZXQ6
XSk6CisgICAgICAgIChjcmVhdGVDb250ZW50Q3Jvc3NmYWRlQW5pbWF0aW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVz
dHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUlt
YWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6RnJhbWVEYXRh
KToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBmYWxzZSBiZWNh
dXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAgQml0bWFwSW1hZ2U6OmZyYW1lSGFz
QWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkgbV9oYXZlTWV0YWRhdGEuCisgICAg
ICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxwaGEgYXJlIHNldCBpbiBCaXRtYXBJ
bWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUo
KS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0aXZlSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Omdl
dENHSW1hZ2VSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmdldEZpcnN0
Q0dJbWFnZVJlZk9mU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0
Q0dJbWFnZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6UGxh
dGZvcm1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc05pbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjZ0ltYWdlUmVmKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6
OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdl
Ojppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmNsZWFyU3ViSW1hZ2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1J
bWFnZTo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmlzQWxt
b3N0U29saWRDb2xvcik6IE1vdmVkIGZyb20gUGx1Z2luVmlldy5jcHAgc2luY2UgUGxhdGZvcm1J
bWFnZSBpcyB3aGF0IHRoaXMgZnVuY3Rpb24gYmVsb25ncyB0by4KKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOiBSZXR1cm5zIHRoZSBzdWItc2FtcGxp
bmcgc2NhbGUgYmFzZWQgb24gdGhlIGNvbnRleHQgc2NhbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW06CisgICAgICAgIChUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRUSUZGUmVw
cmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZp
ZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdl
RnJvbUltYWdlKToKKwogMjAxNi0wNi0wMyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVzb3VyY2VSZXNwb25zZUJhc2UgY2xlYW51cC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwppbmRleCA5OGQyYmU2ZDgzMDQ2MDc2MTYzMTcyNmEyZTllYzFiYWFmODY5MTQ1Li45NzNkZGFi
MjE2OTAyMzFkN2I5Nzc2ZTM1ZTUwMzQ2OGU1NjU1NjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTYtMDYtMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdh
QGFwcGxlLGNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgUGxhdGZvcm1JbWFnZSBhbmQgbWFrZSBp
dCBpcyBhIHdyYXBwZXIgZm9yIE5hdGl2ZUltYWdlUHRyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2ViQ2FjaGUubW06CisgICAgICAgICgr
W1dlYkNhY2hlIGltYWdlRm9yVVJMOl0pOgorCiAyMDE2LTA2LTAyICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgQWRkIFdlYklETCBzcGVjaWFs
IG9wZXJhdGlvbiBzdXBwb3J0OiBzZXJpYWxpemVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZWFmZDIzNGNkZmQy
OTJlNmRhYmQ3ZDJkMmE1ZTNlM2RkZjc2NDg5My4uMzBkOTFlNWM3ZTBjZDJkZTVhOGFiNmQ3OGE2
YTVmYmM4YWZhN2I0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA2LTEyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50
cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJ
bWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0lj
b25EYXRhYmFzZVRyeUdldENHSW1hZ2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VU
cnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNl
IGluIHRoZSBjb2RlIHdoaWNoIHVzZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgor
ICAgICAgICBDYWxsIEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFu
ZCBmb3JtIHRoZSByZXR1cm5lZAorICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxk
IHRoZSBDRkFycmF5UmVmLgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2Vu
dGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5W
aWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktp
dDo6aXNBbG1vc3RTb2xpZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGlj
IGZ1bmN0aW9uIGlzQWxtb3N0U29saWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNv
bGlkQ29sb3IoKS4KKwogMjAxNi0wNi0wMyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIEZpeCB0aGUgIUVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSBidWls
ZCBhZnRlciByMjAxNTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1
ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5
MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03
NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDMyOWExNjA3OTE4OTg2MTAzYzYwZTBiNjBkNDBjZWUwZWY2YmM2ODEuLmNkZmQ5YWFi
YzBjZWRhNWUzMWZjNzdjODUyMjRmZTQ4N2Q4NGI5YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGQ3MWNlZWU1NzUyZTM1OGVi
ZjkyODhiZjUxNDlkN2Y4ZDE2MTc1ZTcuLjkyNTAyYTQ0OTI1MGViMTkxOTRlZWEyZjZhMGJmNjli
N2Y3YmM3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC05OCw3ICs5OCw2IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
QmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9hdFJl
Y3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBA
IC0xMTIsNiArMTExLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUlt
YWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggOWNjZTdjYzA5YjU1ODFlNWE3ZTg1ZTZiZmZiOTM5
YTE3Y2UzZGNlYy4uNjhjOTRmNGQ1NDRlODhhMjVkZmYxYjgxZGJmNWQ2ZjY5OTM1ZjhjYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTM5NCw3ICszOTQsNiBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJTeXN0ZW1C
YWNrZHJvcExheWVyLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViVGlsZWRC
YWNraW5nTGF5ZXIubW0KIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxv
YXRSZWN0Q0cuY3BwCkBAIC00MTQsNiArNDEzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0dGVybkNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4IDJjNTUzYjA1NTFkYWQ2OWFhMTk5
ZDk2MGY1NTIzNDNkOTIwZjA3YjMuLmMyMDMwOTFhOTM5YzZmN2EyMmNmYmY4OWY4MmIwYzMxZWQ5
MmJhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQpAQCAtMjEsNyArMjEs
NiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9H
TENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAog
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0zNCw2ICszMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BsYXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Jl
ZlB0ckNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9u
TWF0cml4Q2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMDk1ODcyZDNhYzZlZWEyNjVhZTMxNTkyYjI3MjI5OWM0ZmYy
ZTMzYi4uYWIxYTQ5Y2Y5NjQwNDU5ZTRlYjdiYmRjY2ZjZTM3OWEwZDIwOWJlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQz
NCw3ICsxNDM0LDcgQEAKIAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIz
MTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0
Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3Bw
ICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
Nzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAx
NUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJp
dG1hcEltYWdlQ0cuY3BwICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxh
dGZvcm1JbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICov
OyB9OwogCQkzNzkxOUMyMzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBC
N0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5QzI0
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyog
UG9zaXRpb25JdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07
CiAJCTM3OTI5MTdBMTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYzOTAw
RjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIyNzgsNiArMjI3OCw3IEBACiAJCTU1MEEwQkNBMDg1RjYw
MzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVk
TmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAz
NDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFCMDAz
NDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJD
Ry5oICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYwODUx
RDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9
OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2
NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTgwMzcxNjExQTY2RjAw
QTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU4MDM3MTVGMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAg
Ki87IH07CkBAIC04OTQzLDcgKzg5NDQsNyBAQAogCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMg
LyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0
UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3MkIwOTUxNjUzNTg1NjAw
MEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3ZlcmxhcFRlc3RSZXF1ZXN0
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VDRy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3Np
dGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
b3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlD
MjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyZWRlbnRpYWxCYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODc1LDYgKzk4NzYsNyBAQAogCQk1NTBBMEJDODA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVCODdFQTFD
QUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRm
b3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZHSW1hZ2VDbGll
bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlQ2xpZW50cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkg
LyogU2ltdWxhdGVkQ2xpY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lt
dWxhdGVkQ2xpY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjIxQzZF
NUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIxODI0LDcgKzIxODI2LDYgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRG
IC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkz
NzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi8sCiAJCQkJMEZD
RjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwICovLAogCQkJCUIyNzUzNTJCMEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTJDMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8sCkBAIC0yMTg1MSw2ICsyMTg1Miw3IEBA
CiAJCQkJQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8sCiAJCQkJ
QjI3NTM1MzYwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuY3BwICovLAogCQkJ
CUIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggKi8sCisJCQkJ
Mzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi8sCiAJCQkJ
MUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwICov
LAogCQkJCTFGQzQwRkI3MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVy
LmggKi8sCiAJCQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0
cml4Q0cuY3BwICovLApAQCAtMjIwNTEsNiArMjIwNTMsNyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3
OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThGQTZFNUMwRTRDRkRFRDAw
RDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAv
KiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3Jt
SW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXll
ci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVz
b3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZv
cm1UZXh0VHJhY2suaCAqLywKQEAgLTI1NzkxLDYgKzI1Nzk0LDcgQEAKIAkJCQk4NUU3MTFCOTBB
QzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEwQzAzQjc0MTAwOEJCMEVFIC8qIERPTUhU
TUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NTc0RjA4NzFE
MDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRF
QzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2QSAvKiBET01IVE1MTWVkaWFFbGVtZW50
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkE0RDEzMEFBNjg4NjgwMDg4MDUyRCAv
KiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjkxNTIsNyArMjkxNTYs
NyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1OSAvKiBCaXF1YWRQ
cm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQyMzM4ODAwRDdDODAy
IC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0EzQTkwMTVFRkNFOUIw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTM3N0EzQTkw
MTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQw
MTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5NmYxYjgzYjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2
NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1t
CkBAIC02MDYsNyArNjA2LDcgQEAgLSAodm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJ
bWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNBcnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRl
eHRJbmRpY2F0b3IpIHsKICAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3It
PmNvbnRlbnRJbWFnZSgpKQotICAgICAgICAgICAgKmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1
dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4oaW1hZ2UtPmdldENHSW1hZ2VSZWYoKSkpOworICAgICAg
ICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAg
IH0KIAogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQppbmRleCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZl
OGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1YWNlY2EzYzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0K
QEAgLTE2Miw5ICsxNjIsOSBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0
KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRz
SW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNj
YWxlRmFjdG9yKCkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwog
ICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRDcm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkK
LSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAgY29udGVudHNJbWFnZSA9IF90
ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7
CiAgICAgZWxzZQotICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRl
bnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4
dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF0pOwogCkBAIC0yNjUsNyArMjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxD
QUtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGVCb3VuY2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwg
ZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENy
b3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYg
dGV4dEluZGljYXRvcikKIHsKICAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3Nm
YWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJj
b250ZW50cyJdOwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4
dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2Uo
KS0+bmF0aXZlSW1hZ2UoKTsKICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlk
KWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1v
ZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1v
dmVkT25Db21wbGV0aW9uOk5PXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCAwNjc2Y2UwNzI1MDc2YmI5NWNjZDI2YzVjMWE1Mjhk
MTYzYTQ2NTJhLi4zNTY3NDAxMTkwODY5OTY0YTBiNzY0NDNjNTkwMDA1YjJjOTQ2NjM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBA
IC03MCwxMSArNzAsMTEgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRy
JiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogewogICAgIC8vIFNpbmNlIHdlIGRv
bid0IGhhdmUgYSBkZWNvZGVyLCB3ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZSBpbWFnZSBvcmllbnRh
dGlvbi4KICAgICAvLyBTZXQgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uIHRvIGJlIHRoZSBz
YW1lIGFzIG1fc2l6ZSBzbyBpdCdzIG5vdCAweDAuCi0gICAgbV9zaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uID0gbV9zaXplID0gTmF0aXZlSW1hZ2U6OnNpemUoaW1hZ2UpOworICAgIG1fc2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLnNpemUo
KTsKICAgICBtX2RlY29kZWRTaXplID0gbV9zaXplLmFyZWEoKSAqIDQ7Ci0gICAgCisKICAgICBt
X2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBOYXRpdmVJbWFn
ZTo6aGFzQWxwaGEoaW1hZ2UpOworICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBQbGF0Zm9y
bUltYWdlKGltYWdlKS5oYXNBbHBoYSgpOwogICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRh
ID0gdHJ1ZTsKICAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RGTW92ZShpbWFnZSk7CiB9CkBA
IC0xMjUsOSArMTI1LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJv
b2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8gVGhlIHVuZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0
dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3QgdHJ5aW5nIHRvCiAgICAgICAgIC8vIHNhdmUgdGhl
IG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVyIGRhdGEpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNs
ZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0YS4KLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRl
cyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLmNs
ZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7
CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKTsK
ICAgICB9CiAKICAgICBtX3NvdXJjZS5jbGVhcihkZXN0cm95QWxsLCBjbGVhckJlZm9yZUZyYW1l
LCBkYXRhKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKQEAgLTE1MCw4ICsxNDgsOCBAQCB2b2lkIEJp
dG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeShib29sIGRlc3Ryb3lBbGwp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGFsbEZyYW1lQnl0ZXMgPSAwOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGFs
bEZyYW1lQnl0ZXMgKz0gbV9mcmFtZXNbaV0udXNlZEZyYW1lQnl0ZXMoKTsKKyAgICBmb3IgKGF1
dG8mIGZyYW1lIDogbV9mcmFtZXMpCisgICAgICAgIGFsbEZyYW1lQnl0ZXMgKz0gZnJhbWUudXNl
ZEZyYW1lQnl0ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25D
dXRvZmYpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNv
ZGVkRGF0YUlmTmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9m
Zj0ldSIsIHRoaXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTI4
OCwyMSArMjg2LDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBuZXcgZGF0YSBo
ZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29tcGxldGUgZnJh
bWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQgPSAwOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9uJ3QgY2FsbCBm
cmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwogICAgICAgICAv
LyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAgICAgICAgLy8g
Y2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5zaWduZWQgZnJh
bWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVz
W2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUpCi0gICAgICAg
ICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFt
ZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5tX2hhdmVNZXRhZGF0YSAmJiAhZnJhbWUu
bV9pc0NvbXBsZXRlKQorICAgICAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gZnJhbWUuY2xl
YXIodHJ1ZSk7CiAgICAgfQogICAgIGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVz
Q2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6Tm8pOwogI2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlz
IHRoaXMgZGlmZmVyZW50IGZvciBpT1M/CiAgICAgaW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlm
ICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21f
ZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21f
ZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFyKHRydWUpKSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMg
PSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgewogICAgICAgICAg
ICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9kZWNv
ZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9
IDA7CkBAIC0zOTAsOCArMzg2LDcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2MKICAgICAvLyBy
ZS1kZWNvZGUgd2l0aCBhIGxvd2VyIGxldmVsLgogICAgIGlmIChpbmRleCA8IG1fZnJhbWVzLnNp
emUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSAmJiBzdWJzYW1wbGluZ0xldmVsIDwgbV9m
cmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkgewogICAgICAgICAvLyBJZiB0aGUgaW1h
Z2UgaXMgYWxyZWFkeSBjYWNoZWQsIGJ1dCBhdCB0b28gc21hbGwgYSBzaXplLCByZS1kZWNvZGUg
YSBsYXJnZXIgdmVyc2lvbi4KLSAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5k
ZXhdLm1fZnJhbWVCeXRlczsKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhdLmNsZWFyKHRydWUpOwor
ICAgICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRleF0uY2xlYXIodHJ1ZSk7CiAg
ICAgICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSAr
PSBzaXplQ2hhbmdlOwogICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtNDA0LDYgKzM5
OSw0MyBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4LCBmbG9hdCBwcmVzZW50YXRpb25TYwogCiAgICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5tX2ltYWdlOwogfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2
ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitO
YXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2Ug
PSBmcmFtZUltYWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1h
Z2UoaW1hZ2UpLnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAg
IH0KKyAgICAKKyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2Ug
Y2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgw
KTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKK30KKworVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0
aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGltYWdlczsKKyAgICBz
aXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0
SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMuYXBwZW5kKGltYWdlKTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGltYWdlczsKK30KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBs
ZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CkBAIC00MjEsMTEgKzQ1Myw2IEBAIGZsb2F0IEJp
dG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwogfQogCi1OYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7Ci19Ci0KIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1l
SGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoIWVuc3VyZUZyYW1lSXND
YWNoZWQoaW5kZXgsIENhY2hlTWV0YWRhdGFPbmx5KSkKQEAgLTcwMCwxNyArNzI3LDU0IEBAIENv
bG9yIEJpdG1hcEltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKQogICAgICAgICByZXR1cm4g
Q29sb3IoKTsKICAgICAKICAgICBBU1NFUlQobV9mcmFtZXMuc2l6ZSgpKTsKLSAgICBtX3NvbGlk
Q29sb3IgPSBOYXRpdmVJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKG1fZnJhbWVzWzBdLm1f
aW1hZ2UuZ2V0KCkpOworICAgIG1fc29saWRDb2xvciA9IFBsYXRmb3JtSW1hZ2UobV9mcmFtZXNb
MF0ubV9pbWFnZSkuc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1f
c29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAor
Ym9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkKK3sKKyAgICBhdXRvIGltYWdl
ID0gZnJhbWVJbWFnZUF0SW5kZXgoMCk7CisgICAgcmV0dXJuICFpbWFnZSA/IGZhbHNlIDogUGxh
dGZvcm1JbWFnZShpbWFnZSkuaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJp
dG1hcEltYWdlOjpjYW5BbmltYXRlKCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYm
IGZyYW1lQ291bnQoKSA+IDE7CiB9CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5p
c0VtcHR5KCkgfHwgc3JjUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBM
QVRGT1JNKElPUykKKyAgICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAg
ICBzdGFydEFuaW1hdGlvbigpOworI2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5n
bGVQaXhlbFNvbGlkQ29sb3IoKTsKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAg
IGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5k
ZXgobV9jdXJyZW50RnJhbWUsIFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4
dCwgZGVzdFJlY3QsIHNyY1JlY3QpKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBl
YXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRh
dGlvbigpKTsKKyAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9
PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9y
aWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFn
ZShpbWFnZSkuZHJhdyhjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9k
ZSwgb3JpZW50YXRpb24pOworICAgIAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAg
IGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1h
Z2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXgg
MDc1ODkyOWNkODdmYWRhY2YwMmI2ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjUwNDEzNzYyNGU2YWU4
YzRlYzIxZTdhNWYyZmVlMTNlN2E3MWRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSW1h
Z2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiSW50
U2l6ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKIAogI2lmIFVTRShDRykgfHwgVVNF
KEFQUEtJVCkKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00NywyNSArNDgsOSBAQCB0
eXBlZGVmIHN0cnVjdCBIQklUTUFQX18gKkhCSVRNQVA7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIHN0cnVjdCBGcmFtZURhdGE7Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotICAg
IHRlbXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0czxXZWJDb3JlOjpGcmFtZURhdGE+IDogcHVi
bGljIFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
Y2FuSW5pdGlhbGl6ZVdpdGhNZW1zZXQgPSBmYWxzZTsgLy8gTm90IGFsbCBGcmFtZURhdGEgbWVt
YmVycyBpbml0aWFsaXplIHRvIDAuCi0gICAgfTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBUaW1lcjsKIAotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLSAgICBJbnRTaXplIHNp
emUoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBib29sIGhhc0FscGhhKGNvbnN0IE5hdGl2
ZUltYWdlUHRyJik7Ci0gICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2
ZUltYWdlUHRyJik7Ci19Ci0KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQogLy8gRnJhbWVEYXRhIENsYXNzCiAvLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTc1LDE4ICs2MCwzMCBAQCBwdWJsaWM6
CiAgICAgRnJhbWVEYXRhKCkKICAgICAgICAgOiBtX2hhdmVNZXRhZGF0YShmYWxzZSkKICAgICAg
ICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCi0gICAgICAgICwgbV9oYXNBbHBoYSh0cnVlKQorICAg
ICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCiAgICAgewogICAgIH0KIAogICAgIH5GcmFtZURhdGEo
KQotICAgIHsgCi0gICAgICAgIGNsZWFyKHRydWUpOworICAgIHsKKyAgICAgICAgaWYgKG1faW1h
Z2UpCisgICAgICAgICAgICBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmNsZWFyU3ViSW1hZ2VzKCk7
CiAgICAgfQogCiAgICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBkYXRhIG9uIHRoZSBmcmFt
ZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCiAgICAgLy8gUmV0dXJucyB3aGV0aGVy
IHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAgICBib29sIGNsZWFyKGJv
b2wgY2xlYXJNZXRhZGF0YSk7CisgICAgdW5zaWduZWQgY2xlYXIoYm9vbCBjbGVhck1ldGFkYXRh
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IHVzZWRGcmFtZUJ5dGVzKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoY2xlYXJNZXRhZGF0YSkKKyAgICAgICAgICAgIG1faGF2
ZU1ldGFkYXRhID0gZmFsc2U7CisKKyAgICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gMDsKKyAg
ICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIGZyYW1lQnl0ZXM7Cisg
ICAgfQogICAgIAogICAgIHVuc2lnbmVkIHVzZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7IH0KIApAQCAtMTU1LDEyICsxNTIsNiBAQCBwdWJs
aWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRlOwogI2Vu
ZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBnZXRDR0lt
YWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNp
emUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBn
ZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQog
ICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdldEhCSVRN
QVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0LDggKzE2
NSwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZhcyopIG92
ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXpl
KGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50
YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZy
YW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtub3duVG9C
ZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyArMjExLDYgQEAgcHJvdGVjdGVkOgogICAg
IHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJ
bmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAgIE5hdGl2
ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKICAgICBi
b29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA3YTI5OTkyZjc3MTg4ZTAzODI4ZDgwYTY1YjhiZTJj
ZDhkYzJkZTc2Li4zMjIzYzFjZDY3YTIxMDVlYmYyYjE1Njc2OTY4ODA5N2ZiMjI3NzZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTEzNyw4ICsxMzcsMTEg
QEAgcHVibGljOgogCiAgICAgZW51bSBUaWxlUnVsZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUs
IFNwYWNlVGlsZSwgUmVwZWF0VGlsZSB9OwogCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBudWxscHRyOyB9
CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
IHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0dWFsIEltYWdlT3JpZW50YXRpb24gb3JpZW50
YXRpb25Gb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBJbWFnZU9yaWVudGF0aW9uKCk7IH0KKyAg
ICB2aXJ0dWFsIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgeyBy
ZXR1cm4geyB9OyB9CiAKICAgICAvLyBBY2Nlc3NvcnMgZm9yIG5hdGl2ZSBpbWFnZSBmb3JtYXRz
LgogCkBAIC0xNTAsMTIgKzE1Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENGRGF0YVJlZiBn
ZXRUSUZGUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAotI2lm
IFVTRShDRykKLSAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Q0dJbWFnZVJlZigpIHsgcmV0dXJu
IG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZT
aXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBSZXRh
aW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFycmF5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQot
I2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVAo
SEJJVE1BUCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUE9m
U2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hYjdhZWE0ODlmM2ViMmE4Mjg3NzFjMjEwM2U4ZDRkMGJlMTdiZTVkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCkBA
IC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVk
ZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFz
cyBJbnRTaXplOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCitjbGFzcyBQbGF0Zm9ybUltYWdl
IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFn
ZSkKKyAgICAgICAgOiBtX2ltYWdlKGltYWdlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlz
TmlsKCkgY29uc3QgeyByZXR1cm4gIW1faW1hZ2U7IH0KKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2Vz
KCk7CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBib29sIGhhc0FscGhhKCkgY29u
c3Q7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBp
c0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBjb25z
dCBJbWFnZU9yaWVudGF0aW9uJikgY29uc3Q7CisKKyAgICBzdGF0aWMgZmxvYXQgc3Vic2FtcGxp
bmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCitwcml2YXRlOgorI2lmIFVTRShDRykKKyAgICBDR0lt
YWdlUmVmIGNnSW1hZ2VSZWYoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS5nZXQo
KSA6IG51bGxwdHI7IH0KKyNlbmRpZgorICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Cit9Owor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KaW5kZXggODRjN2Q2MjMyNGY2NDcxMWUxNjVl
NTI0M2RmODhmMjFhNTBlZDdlOS4uMjBiNTY4OTMzNzUyYWQwZmNlMTBiMzY0ZmUwMTJkNDgxZTY0
N2QyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9k
ZSgpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOwor
ICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKICAgICAgICAgICAgICAgICBpZiAoIW1fcGF1c2VkSW1hZ2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgbV9kaXNwbGF5TW9kZSA9IFBhaW50SXRCbGFjazsKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxNzcyMmJlYzUzYWI4YTA4YThkYTg1MjhiOWUwZDdjNGQwY2Q0MTM1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25z
dCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3Vy
ZmFjZVNpemUoaW1hZ2UuZ2V0KCkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRf
Y29udGVudChpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Ig
c2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFn
ZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6
ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFD
RV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4
ZWwgPSByZWludGVycHJldF9jYXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRB
UkdCKCpwaXhlbCk7Ci19Ci0KLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
YywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsCi0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRo
KCkgfHwgIWRzdC5oZWlnaHQoKSB8fCAhc3JjLndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3RhcnRBbmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFj
ZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2Up
IC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwot
ICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNv
bnRleHQsIGRzdCwgY29sb3IsIG9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNv
bnRleHQuc2F2ZSgpOwotCi0gICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0g
ICAgaWYgKG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9k
ZU5vcm1hbCAmJiAhZnJhbWVIYXNBbHBoYUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAg
ICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNl
Ci0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwot
Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNj
YWxlZFNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVj
dCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywg
c2NhbGVkU2l6ZSk7Ci0jZWxzZQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsK
LSNlbmRpZgotCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0
aW9uLmltYWdlT3JpZW50YXRpb24oKSk7Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1l
T3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0K
LSAgICBGbG9hdFJlY3QgZHN0UmVjdCA9IGRzdDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9u
ICE9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRp
b24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50
cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRM
b2NhdGlvbihGbG9hdFBvaW50KCkpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9y
aWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAg
IGlmIChmcmFtZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAg
IC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhl
aWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAg
IC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5l
ZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCi0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRS
ZWN0KGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53
aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgY29udGV4dCk7Ci0KLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChp
bWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsK
LX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBp
ZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAg
IGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MGFkYWVjMjcwZTMxYjA1NGFmYzVmNjZkNDgyODhhZWJmMDYxZTNhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxh
dGZvcm1JbWFnZUNhaXJvLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9V
dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUg
PGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbGF0Zm9ybUltYWdlOjpj
bGVhclN1YkltYWdlcygpCit7Cit9CisKK0ludFNpemUgUGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRTaXplKCkgOiBjYWlyb1N1cmZhY2VTaXpl
KG1faW1hZ2UuZ2V0KCkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSB8fCBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1f
aW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7Cit9CisKK0NvbG9yIFBsYXRmb3Jt
SW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkg
fHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisg
ICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VS
RkFDRV9UWVBFX0lNQUdFKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIFJHQkEzMiog
cGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKG1faW1hZ2UuZ2V0KCkpKTsKKyAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlw
bGllZEFSR0IoKnBpeGVsKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlk
Q29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworZmxvYXQgUGxhdGZvcm1J
bWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmKQoreworICAgIHJldHVybiAxOworfQorCit2b2lkIFBsYXRmb3Jt
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9y
aWVudGF0aW9uKSBjb25zdAoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIAorICAgIC8vIFNl
dCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgorICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3Vy
Y2VPdmVyICYmIG1vZGUgPT0gQmxlbmRNb2RlTm9ybWFsICYmICFoYXNBbHBoYSgpKQorICAgICAg
ICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNl
CisgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAg
ICAgCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXpl
IHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0
UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNy
Y1JlY3QsIHNjYWxlZFNpemUpOworI2Vsc2UKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0
KHNyY1JlY3QpOworI2VuZGlmCisgICAgICAgIAorICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RS
ZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgIAorICAgIGlmIChvcmllbnRhdGlvbiAhPSBEZWZhdWx0
SW1hZ2VPcmllbnRhdGlvbikgeworICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMg
dGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRl
c3RSZWN0LngoKSwgZGVzdFJlY3QueSgpKTsKKyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRM
b2NhdGlvbihGbG9hdFBvaW50KCkpOworICAgICAgICBjb250ZXh0LmNvbmNhdENUTShvcmllbnRh
dGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChhZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOworICAg
ICAgICBpZiAob3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgeworICAgICAgICAgICAg
Ly8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVp
Z2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAgICAg
Ly8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVl
ZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Qu
c2V0U2l6ZShhZGp1c3RlZERlc3RSZWN0LnNpemUoKS50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNl
VG9Db250ZXh0KG1faW1hZ2UuZ2V0KCksIGFkanVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgY29udGV4dCk7CisKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDNjODFhMTcwYmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJ
LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdl
T2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYgVVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktp
dFN5c3RlbUludGVyZmFjZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFt
ZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0lt
YWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6
ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdl
dCgpKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikK
LXsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhl
IENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAg
ICAKLUNvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUlt
YWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBi
aXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEs
IDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAg
ICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAg
IENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVD
b3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0
TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10p
Ci0gICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihw
aXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhl
bFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURh
dGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkK
LSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZl
bCA9IDA7Ci0KLSAgICBpZiAobV9pbWFnZSkgewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAg
ICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAg
ICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJl
ZigpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0lt
YWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFn
ZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJ
bnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdl
KSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENHSW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUg
cmlnaHQgc2l6ZQotICAgIHJldHVybiBnZXRDR0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxD
RkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3Qg
Y291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgCi0gICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRl
TXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1
cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJh
eUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJhbWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRD
RihhcnJheSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9T
KQotICAgIHN0YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5p
bWF0aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29u
dGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250
ZXh0KCkpKQotICAgICAgICBpbWFnZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1f
Y3VycmVudEZyYW1lKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVz
dGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29u
dGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNh
bXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAg
aW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2Fs
ZSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29u
J3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBj
b2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29t
cG9zaXRlT3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcg
bWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgot
ICAgIEludFNpemUgaW1hZ2VTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1h
Z2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsKLSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRo
ZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1h
cCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVj
dCA9IHNyY1JlY3Q7Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxv
YXRSZWN0IG9yaWdpbmFsSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAg
ICBGbG9hdFJlY3Qgc3Vic2FtcGxlZEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXpl
KTsKLSAgICAgICAgc2NhbGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFn
ZUJvdW5kcywgc3Vic2FtcGxlZEltYWdlQm91bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdl
T3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50
YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBj
dHh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3Jj
UmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGlt
YWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwot
fQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gQml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3Vu
dCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1l
KGluZGV4LCAwKTsKLQotICAgIGlmICghbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZl
bCkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJu
IG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5k
aWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BhdHRlcm5DRy5jcHAKaW5kZXggYjQyOGQ1MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUy
OGQ5Mi4uM2RhYTEzOWFiN2VhNWI0MjE1Nzc4ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03
Miw3ICs3Miw3IEBAIENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVw
ZWF0aW5nIGluIGJvdGggZGlyZWN0aW9ucywgd2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVy
bnMKICAgICAvLyBpbnN0ZWFkIG9mIGN1c3RvbSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1l
ZGdlIHBpeGVsIGNyYWNrcy4KICAgICBpZiAobV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAg
ICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFn
ZSgpLT5nZXRDR0ltYWdlUmVmKCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0Nv
bnN0YW50U3BhY2luZyk7CisgICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFn
ZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRy
YW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZM
VF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMg
cmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQg
aW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4KQEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVm
IFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVz
ZXJTcGFjZVRyYW4KICAgICBDR0Zsb2F0IHlTdGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVp
Z2h0KCkgOiAoMSA8PCAyMik7CiAKICAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhl
IENHSW1hZ2VSZWYgd2hlbiBpdCdzIGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2Fs
bGJhY2sKLSAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJ
bWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOworICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9
IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0
dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBh
dHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKICAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRm
b3JtSW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1Bh
dHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcsIFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1h
Z2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUlt
YWdlQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmYjJkZTBlYTEyZGEyMTRmMTA0NmMzOTYyZThlYWI1M2M2
NDQxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0
aFRpbWVyLmgiCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50
ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICAKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lm
IENBQ0hFX1NVQklNQUdFUworICAgIGlmICghaXNOaWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNo
ZSgpLmNsZWFySW1hZ2UoY2dJbWFnZVJlZigpKTsKKyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRm
b3JtSW1hZ2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgp
IDogSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdo
dChjZ0ltYWdlUmVmKCkpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNv
bnN0Cit7CisgICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2Vz
IHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7
CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJl
dHVybiBDb2xvcigpOworICAgIAorICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEK
KyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShw
aXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAg
ICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJC
aWcpKTsKKyAgICAKKyAgICBpZiAoIWJpdG1hcENvbnRleHQpCisgICAgICAgIHJldHVybiBDb2xv
cigpOworICAgIAorICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgp
LCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4
dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAg
ICBpZiAoIXBpeGVsWzNdKQorICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAg
CisgICAgcmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30K
KyAgICAKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sK
KyAgICBDR0ltYWdlUmVmIGltYWdlID0gY2dJbWFnZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdl
R2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZv
IGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFn
ZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0Jp
dG1hcEFscGhhSW5mb01hc2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsK
KyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBp
eGVsIGZvcm1hdHMuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0
aChpbWFnZSk7CisgICAgc2l6ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOwor
ICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7Cisg
ICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25z
dCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAor
ICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNhbXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNj
YWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgorICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRz
LCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUg
cG9pbnQKKyAgICAvLyBhbmQgaXRzIHN1cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3Bh
cmVuY3kuCisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5z
aWduZWQgc2FtcGxlQ29scyA9IDc7CisgICAgLy8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51
bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21tb2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3Mu
CisgICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29scyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93
L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBwZXJpbWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3Ry
aWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0g
MSk7CisgICAgY29uc3QgZmxvYXQgc3RyaWRlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhl
aWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAxKTsKKyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJv
d3NdW3NhbXBsZUNvbHNdOworICAgIAorICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUg
c2FtcGxlIHBvaW50cy4KKyAgICBmbG9hdCB5ID0gMDsKKyAgICBjb25zdCBVSW50OCogcm93ID0g
ZGF0YTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7Cisg
ICAgICAgIGZsb2F0IHggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2Ft
cGxlQ29sczsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3Rh
dGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7CisgICAgICAgICAgICAvLyBSIEcgQiBBCisgICAg
ICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkg
KyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDArMykgLyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0
cmlkZVdpZHRoOworICAgICAgICB9CisgICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAg
ICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsK
KyAgICB9CisgICAgCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9h
dCBhY2N1bVNjb3JlID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93
cyAtIDE7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29s
cyAtIDE7ICsraikgeworICAgICAgICAgICAgZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pd
ICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1wbGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiAr
IDFdIC0gNCAqIHNhbXBsZXNbaV1bal07CisgICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYg
KiBkaWZmOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBn
aXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAg
cmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xz
IC0gMik7Cit9CisKK2Zsb2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QpCit7CisgICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZv
ciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29u
dGV4dChjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAg
CisgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZp
bmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpKSk7CisgICAgcmV0dXJuIHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zv
cm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zv
cm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30K
Kwordm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNv
bnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNh
bXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNp
emUoKS4KKyAgICBJbnRTaXplIHN1YnNhbXBsZWRJbWFnZVNpemUgPSBzaXplKCk7CisgICAgCisg
ICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBp
bWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJ
bWFnZVNpemUgIT0gc3JjU2l6ZSkKKyAgICAgICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChz
cmNSZWN0LCBGbG9hdFJlY3QoeyB9LCBzcmNTaXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxl
ZEltYWdlU2l6ZSkpOworICAgIAorICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2Us
IHN1YnNhbXBsZWRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2Rl
LCBvcmllbnRhdGlvbik7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4
YmE4NDY5ZDUyOTQ1NDhkNTE4NDdhN2ZlLi40NDc2ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQx
YjliYjAyMmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0K
QEAgLTEyOSw3ICsxMjksNyBAQCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRy
YWNrUmVwcmVzZW50YXRpb25Db2NvYSgpCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2E6OnVwZGF0ZSgpCiB7CiAgICAgaWYgKGF1dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5j
cmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdl
dCgpIHNldENvbnRlbnRzOihpZClyZXByZXNlbnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAg
ICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRp
dmVJbWFnZSgpLmdldCgpXTsKIH0KIAogdm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29h
OjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KaW5kZXggZmEwMTFhYTg4MTYzMDMwMDA5NDQ5
OGViYzBmZmNhOWZiOWMzMDM0Yi4uYmYwODU3ZGI2YzY2ZjY0MTVjYjlmZTNhNGZhMzEyY2IwZTBh
NjJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lt
YWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFn
ZU1hYy5tbQpAQCAtODUsMzEgKzg1LDIyIEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElG
RlJlcHJlc2VudGF0aW9uKCkKICAgICBpZiAobV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90
aWZmUmVwLmdldCgpOwogCi0gICAgdW5zaWduZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwor
ICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gdGhpcy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAg
ICAvLyBJZiBudW1GcmFtZXMgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdl
IGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCisgICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBp
cyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlk
IGRhdGEKICAgICAvLyBFdmVuIHRob3VnaCB0aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25D
cmVhdGVXaXRoRGF0YSB3aWxsIGZhaWwgYW5kIHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAog
ICAgIC8vIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBj
b25zb2xlIHdpdGggYW4gZXJyb3IgbWVzc2FnZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFZlY3RvcjxDR0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1lczsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVm
IGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1h
Z2UpCi0gICAgICAgICAgICBpbWFnZXMuYXBwZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVu
c2lnbmVkIG51bVZhbGlkRnJhbWVzID0gaW1hZ2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUlt
YWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENG
TXV0YWJsZURhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkp
OwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRv
cHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBl
VElGRiwgbnVtVmFsaWRGcmFtZXMsIDApKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0
aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0
aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJRkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsK
IAogICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1l
czsgKytpKQotICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5n
ZXQoKSwgaW1hZ2VzW2ldLCAwKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJ
bWFnZXMpCisgICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdl
dCgpLCBuYXRpdmVJbWFnZS5nZXQoKSwgMCk7CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5h
bGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQxYTRk
Li5kMTE0NTRiMDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAg
ICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9wcmV2aWV3
SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdlKQogICAg
ICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9EcmFnSW1hZ2VDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlQ0dXaW4uY3BwCmluZGV4IDM2Y2Q2NTE2ZTgwZjE3NDhiZmVhYjc3YTkzMDI3MWMxMjFkZTgw
MTkuLjRiNGUzNzc5ZTk2Zjc4YzY1NDBhNTNjNDQ3OGMzYmZkOTM1ZjUzZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcApAQCAtMTM2LDkgKzEz
Niw5IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltZywg
SW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGRyYXdD
b250ZXh0LCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGRyYXdDb250ZXh0LCB3
aGl0ZSk7CiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQsIHJlY3QpOwotICAgIGlm
IChhdXRvIHNyY0ltYWdlID0gaW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsKKyAgICBpZiAoYXV0byBz
cmNJbWFnZSA9IGltZy0+bmF0aXZlSW1hZ2UoKSkgewogICAgICAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUoZHJhd0NvbnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UpOworICAgICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlLmdldCgpKTsKICAgICB9CiAg
ICAgQ0dDb250ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNh
Y2hlLm1tCmluZGV4IGI2NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdlMWYzYjEuLjdj
NWVkMjEwZGRiMmEzMmE3NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDYWNoZS5tbQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JV
Ukw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0g
ZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYg
KCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBj
YWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjExYTUyYWExZTUzOTAx
OWZhNmMxYzQ2NzI1YWUuLjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZjODgxZGZlNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRh
YmFzZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29u
RGF0YWJhc2VDRy5jcHAKQEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIENHSW1hZ2VSZWYgV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNvbkRh
dGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6ZSkK
IHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQ
YWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5n
ZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lk
dGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4gaW1h
Z2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNp
emUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVsbHB0
cjsKIH0KIAogQ0ZBcnJheVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JV
UkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7
CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFn
ZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0
Q0dJbWFnZUFycmF5KCkubGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1lc05h
dGl2ZUltYWdlcygpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5
Q3JlYXRlTXV0YWJsZShudWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5
Q2FsbEJhY2tzKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisg
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOworICAg
IAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDlhMjgxMzZlYmFhMzQ5NDQ2MGYwMTk1ZTUxODcwZDE2
M2U4Nzg0NTMuLmFhNmQ0N2UzZjA3ZTNiNTg3ZDUzMDk4YWU2MDRmZDZjYzlkYzllOWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tCkBAIC00MDc5LDcgKzQwNzksNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRh
dGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJv
bAogewogICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50
SW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBbW1tVSUltYWdlIGFs
bG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5j
b250ZW50SW1hZ2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBb
W1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlu
a0luZGljYXRvci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1dG9yZWxlYXNl
XTsKIH0KIAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29u
dHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggYzExYmU5
NTkwZTdhOGVkYTY2Y2Y4Mjc2NDc1YWEyNWEyNDIyZjgxOC4uYzdlYWEwZTZjOGNiYTM1ZjZlYWRk
NDMxMmM2ZDkxNmU0ZTY4YWY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTcyNiw2OSArMTcyNiw2IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1
aW50NjRfdCB3aW5kCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIGJv
b2wgaXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17Ci0gICAgQ0dJbWFn
ZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFTU0VSVChDR0ltYWdl
R2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1hcEluZm8gaW1h
Z2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlmICghKGltYWdlSW5m
byAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0bWFw
QWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewotICAg
ICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4ZWwg
Zm9ybWF0cy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2Up
OwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBzaXpl
X3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwotCi0gICAgUmV0
YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURh
dGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25zdCBVSW50OCogZGF0
YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgLy8gT3ZlcmxheSBh
IGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUgdmVyc2lvbiBvZiB0
aGUgaW1hZ2UuCi0gICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1bGF0ZSB0aGUg
ZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2ludAotICAgIC8vIGFu
ZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4KLSAgICBjb25z
dCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVDb2xz
ID0gNzsKLSAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9mIHNhbXBsZXMs
IGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAgICBpZiAod2lkdGgg
PCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUg
aW1hZ2UgcGVyaW1ldGVyLgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAgIGNvbnN0IGZsb2F0
IHN0cmlkZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVS
b3dzIC0gMSk7Ci0gICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKLQot
ICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KLSAgICBmbG9h
dCB5ID0gMDsKLSAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHggPSAwOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7Ci0gICAgICAg
ICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAq
IDQ7Ci0gICAgICAgICAgICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0g
KDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoo
cDArMykgLyAyNTU7Ci0gICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwotICAgICAgICB9Ci0g
ICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19j
YXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1p
bmUgdGhlIGltYWdlIHNjb3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAwOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0gICAgICAgICAgICBm
bG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBs
ZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKLSAg
ICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJh
bmdlIG9mIDAgYW5kIDI1NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1w
bGVSb3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1Z2lu
Vmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9T
TkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQpAQCAtMTgwOCw3ICsxNzQ1LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmIChzbmFw
c2hvdEltYWdlKSB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJ
U1RJQykKLSAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBpc0Fs
bW9zdFNvbGlkQ29sb3IoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNBbG1vc3RTb2xpZENv
bG9yKCk7CiAgICAgICAgICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90SXNBbG1vc3RTb2xp
ZENvbG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288280</attachid>
            <date>2016-09-08 11:03:00 -0700</date>
            <delta_ts>2016-09-08 11:08:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160908110034.patch</filename>
            <type>text/plain</type>
            <size>82277</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNi0wOS0wOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IEJpdG1hcEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIHRvIGEgbmV3IGZpbGUgbmFtZWQg
TmF0aXZlSW1hZ2VbQ0d8Q2Fpcm9dLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yaW5nIHBhdGNoLiBJdCBtb3ZlcyB0
aGUgQml0bWFwSW1hZ2UgcGxhdGZvcm0gZGVwZW5kZW50CisgICAgICAgIGNvZGUgZnJvbSBCaXRt
YXBJbWFnZSB0byBOYXRpdmVJbWFnZVtDR3xDYWlyb10uY3BwLiBUaGUgbmV3IEFQSXMgYXJlCisg
ICAgICAgIHJlc3BvbnNpYmxlIG9mIGRyYXdpbmcgYSBOYXRpdmVJbWFnZVB0ciBhbmQgYW5zd2Vy
aW5nIHNvbWUgbWV0YWRhdGEgcXVlcmllcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29k
ZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQ
bGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAg
KiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oOgor
ICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaDoKKyAgICAgICAgKiBwYWdl
L21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tOgorICAgICAgICAoLVtXZWJUZXh0SW5kaWNhdG9y
VmlldyBpbml0V2l0aEZyYW1lOnRleHRJbmRpY2F0b3I6bWFyZ2luOm9mZnNldDpdKToKKyAgICAg
ICAgKGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24pOgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNv
ZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRh
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2xlYXJUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3RhcnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6cmVzZXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Omhhc1Np
bmdsZVNlY3VyaXR5T3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmaWxlbmFtZUV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6RnJhbWVE
YXRhKToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBmYWxzZSBi
ZWNhdXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAgQml0bWFwSW1hZ2U6OmZyYW1l
SGFzQWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkgbV9oYXZlTWV0YWRhdGEuCisg
ICAgICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxwaGEgYXJlIHNldCBpbiBCaXRt
YXBJbWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0bWFwSW1hZ2U6OmNhY2hlRnJh
bWUoKS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
Om9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZVBhdXNlZEltYWdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpzaXplT2ZJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpoYXNBbHBoYU9mSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2luZ2xlUGl4ZWxTb2xp
ZENvbG9yT2ZJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpzdWJzYW1wbGluZ1NjYWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhckltYWdl
U3ViSW1hZ2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNH
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFn
ZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpzaXplT2ZJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpoYXNBbHBoYU9mSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2luZ2xlUGl4
ZWxTb2xpZENvbG9yT2ZJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpzdWJzYW1wbGluZ1NjYWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjbGVh
ckltYWdlU3ViSW1hZ2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJu
Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJu
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBk
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRl
UGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYzo6dXBkYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdl
KToKKwogMjAxNi0wOS0wNyAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBbTWVkaWFTdHJlYW1dIGFwcGx5Q29uc3RyYWludHMgcHQuIDIgLSBhZHZhbmNl
ZCBjb25zdHJhaW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCShy
ZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtl
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldp
bi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhv
c3QuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRQb2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENH
LmNwcApAQCAtNzIsNiArNzEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ludFJlY3RDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYs
NiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5n
U3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Jp
dG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGls
aXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCkBAIC0xMzUs
NiArMTM0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RD
YWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21h
a2UJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tl
bmRDYWlyb0ltcGwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3Jl
QmFja2VuZENhaXJvWDExLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAtMTE2LDYgKzExNSw3IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VD
YWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtQ29udGV4dENhaXJvLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UJKHJldmlz
aW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCSh3b3JraW5n
IGNvcHkpCkBAIC0zODUsNyArMzg1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbQog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tCiAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQ
b2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcApAQCAt
NDAyLDYgKzQwMSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50
UmVjdENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0
aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkocmV2aXNpb24gMjA1NTc4KQorKysgU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMjEs
NyArMjEsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HTENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5
LmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0zMSw2ICszMCw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJv
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI0LDcgKzE0MjQs
NyBAQAogCQkzNzVDRDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgw
MEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJF
RkMgLyogVGV4dFJ1bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJ
CTM3NzRBQkE1MEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZB
MjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1
OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VD
Ry5jcHAgKi87IH07CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBOYXRpdmVJbWFnZUNH
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0Ez
QThGMTVFRkNFOUEwMDU5RjVDNyAvKiBOYXRpdmVJbWFnZUNHLmNwcCAqLzsgfTsKIAkJMzc5MTlD
MjMwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MTlDMjEwQjdEMTg4NjAwQTU2OTk4
IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovOyB9OwogCQkzNzkxOUMyNDBCN0QxODg2MDBBNTY5
OTggLyogUG9zaXRpb25JdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkzNzkyOTE3QTE5
ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTI5MTc4MTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVk
ZW50aWFsQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yNTEzLDcgKzI1MTMsNyBAQAogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyog
UGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CiAJCTY5QTZDQkFDMUM2
QkU0MkMwMEI4MzZFOSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2OTcxMDEwNzFDNkJFMTU1MDAxOEM3
RjEgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwICovOyB9OwogCQk2OUE2Q0JBRDFDNkJF
NDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY5NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAv
KiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oICovOyB9OwotCQk2QjM0ODA5NDBFRUY1MEQ0MDBB
QzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZC
MzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8q
IE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkI2OTNBMkUxQzUxQTgyRTAwQjAzQkVGIC8qIFJlc291cmNlTG9hZE9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0Ey
RDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QjY5M0EzNDFDNTFBOTVEMDBC
MDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmNwcCAqLzsgfTsKIAkJNkM0Qzk2REUxQUQ0NDgzNTAwMzY1QTUwIC8q
IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzRDOTZEQTFBRDQ0ODM1MDAzNjVBNTAgLyog
SlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTgzNDcsNyAr
ODM0Nyw3IEBACiAJCTM3NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVu
aW5nT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVu
aW5nT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEy
MUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcElt
YWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1h
Z2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBOYXRpdmVJbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5hdGl2ZUltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQ
b3NpdGlvbkl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb3Np
dGlvbkl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTI5MTc4MTk4
NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDcmVkZW50aWFsQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTU0Nyw3ICs5NTQ3LDcgQEAKIAkJNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2OTcxMDEwNzFDNkJFMTU1MDAxOEM3RjEgLyogQWNj
ZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2OTcxMDEwODFDNkJFMTU1MDAxOEM3RjEgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNWR0Vs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOYXRpdmVJbWFnZVB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjM0
ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRPYnNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjY5M0EzMzFDNTFBOTVEMDBCMDNCRUYgLyog
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2QzRDOTZEQTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRD
b250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDQ5MCw3ICsyMDQ5MCw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAv
KiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0Yz
MzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUz
ODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjA1MTcsNiArMjA1MTYsNyBAQAog
CQkJCUE4MEEzOEZEMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIy
NzUzNTM2MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlC
Mjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3
N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBOYXRpdmVJbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0
MEZCODE2NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJ
CQkJMUZDNDBGQjcxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAq
LywKIAkJCQlCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhD
Ry5jcHAgKi8sCkBAIC0yMDcwOCw3ICsyMDcwOCw3IEBACiAJCQkJQ0REQzFFNzkxOEE5NTJGMzAw
MjdBOUQ0IC8qIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oICovLAogCQkJCTMxNEJFM0E0MUIz
MTAzRkIwMDE0MTk4MiAvKiBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCTMx
NEJFM0E1MUIzMTAzRkIwMDE0MTk4MiAvKiBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuaCAqLywK
LQkJCQk2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCAqLywKKwkJ
CQk2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAqLywKIAkJCQlCMjc1
MzU1MjBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5jcHAgKi8sCiAJCQkJQjI3NTM1NTMwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBhdGguaCAqLywKIAkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLywKQEAgLTI1Njc5LDcgKzI1Njc5LDcgQEAKIAkJCQkz
MTRCRTNBNzFCMzEwM0ZCMDAxNDE5ODIgLyogTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODE4NzIyMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFw
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIxRTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5v
ZGVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyog
TmF0aXZlSW1hZ2VQdHIuaCBpbiBIZWFkZXJzICovLAorCQkJCTZCMzQ4MDk0MEVFRjUwRDQwMEFD
MUI0MSAvKiBOYXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNCMkQxNzUxQjhCQ0Q2
QTAwQTAyRTQ3IC8qIE5hdGl2ZU5vZGVGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMEI5
QjZDMEI3NDc1OTkwMDNFRDg5MCAvKiBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzQ0NGMDI3MEFGNkM1MjkwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI3NTc0LDcgKzI3NTc0LDcgQEAKIAkJCQlGREM1NEYwNDEzOTlC
MERBMDA4RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
RDMxNjAyNjEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VD
Ry5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogTmF0
aXZlSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUZGQzQ1NDFENUU4MUNCMDAyNjdB
NjYgLyogQmxhY2tsaXN0VXBkYXRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3NkQ2Qzc4MTIy
QjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFREVGMUYzMTIx
QjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCShyZXZpc2lvbiAyMDU1NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNyBAQAogI2lmbmRlZiBDYWNoZV9oCiAjZGVmaW5lIENhY2hlX2gKIAot
I2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKICNpbmNsdWRlICJTZXNzaW9uSUQuaCIKICNp
bmNsdWRlICJUaW1lci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0lj
b25EYXRhYmFzZUJhc2UuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaWZuZGVmIEljb25EYXRhYmFzZUJhc2VfaAogI2RlZmluZSBJY29uRGF0YWJhc2VCYXNl
X2gKIAotI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2Uu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0JKHJldmlzaW9uIDIwNTU3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KWZyCiAgICAgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplLnNjYWxlKDEgLyBfdGV4dEluZGlj
YXRvci0+Y29udGVudEltYWdlU2NhbGVGYWN0b3IoKSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNvbnRlbnRzSW1hZ2U7CiAgICAgaWYgKGluZGljYXRvcldhbnRzQ29udGVudENyb3NzZmFk
ZSgqX3RleHRJbmRpY2F0b3IpKQotICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0
b3ItPmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAg
ICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVdpdGhIaWdobGln
aHQoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBf
dGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAg
Y29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1h
Z2UoKTsKIAogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYm91bmNlTGF5ZXJzID0gYWRv
cHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAKQEAgLTI2NSw3ICsyNjUsNyBA
QCBzdGF0aWMgUmV0YWluUHRyPENBS2V5ZnJhbWVBbmltYXRpb24+IGNyCiBzdGF0aWMgUmV0YWlu
UHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZU
aW1lSW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAg
ICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJh
c2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudElt
YWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVu
dHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAg
ICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgp
XTsKICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2Fy
ZHNdOwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3MCwxMSBAQCBC
aXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHImCiB7CiAgICAgLy8gU2luY2Ug
d2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdlIGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9y
aWVudGF0aW9uLgogICAgIC8vIFNldCBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUg
dGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mgbm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5n
T3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9z
aXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zaXplID0gc2l6ZU9mSW1hZ2UoaW1hZ2UpOwog
ICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUuYXJlYSgpICogNDsKLSAgICAKKwogICAgIG1fZnJh
bWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IE5hdGl2ZUltYWdlOjpo
YXNBbHBoYShpbWFnZSk7CisgICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IGhhc0FscGhhT2ZJ
bWFnZShpbWFnZSk7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwogICAg
IG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZNb3ZlKGltYWdlKTsKIH0KQEAgLTg1LDE4ICs4NSw2
IEBAIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQogICAgIHN0b3BBbmltYXRpb24oKTsKIH0K
IAotdm9pZCBCaXRtYXBJbWFnZTo6Y2xlYXJUaW1lcigpCi17Ci0gICAgbV9mcmFtZVRpbWVyID0g
bnVsbHB0cjsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRUaW1lcihkb3VibGUgZGVsYXkp
Ci17Ci0gICAgQVNTRVJUKCFtX2ZyYW1lVGltZXIpOwotICAgIG1fZnJhbWVUaW1lciA9IHN0ZDo6
bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmQml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24p
OwotICAgIG1fZnJhbWVUaW1lci0+c3RhcnRPbmVTaG90KGRlbGF5KTsKLX0KLQogYm9vbCBCaXRt
YXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAo
aW5kZXggPj0gZnJhbWVDb3VudCgpKQpAQCAtMTA4LDExICs5Niw2IEBAIGJvb2wgQml0bWFwSW1h
Z2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleCgKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1f
aW1hZ2U7CiB9CiAKLWJvb2wgQml0bWFwSW1hZ2U6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJv
eURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKIHsKICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVz
Q2xlYXJlZCA9IDA7CkBAIC0xMjUsOSArMTA4LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJv
eURlY29kZWREYXRhKGJvbwogICAgICAgICAvLyBUaGUgdW5kZXJseWluZyBmcmFtZSBpc24ndCBh
Y3R1YWxseSBjaGFuZ2luZyAod2UncmUganVzdCB0cnlpbmcgdG8KICAgICAgICAgLy8gc2F2ZSB0
aGUgbWVtb3J5IGZvciB0aGUgZnJhbWVidWZmZXIgZGF0YSksIHNvIHdlIGRvbid0IG5lZWQgdG8g
Y2xlYXIKICAgICAgICAgLy8gdGhlIG1ldGFkYXRhLgotICAgICAgICB1bnNpZ25lZCBmcmFtZUJ5
dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFtZXNbaV0u
Y2xlYXIoZmFsc2UpKQotICAgICAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gZnJhbWVCeXRl
czsKKyAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gbV9mcmFtZXNbaV0uY2xlYXIoZmFsc2Up
OwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJh
bWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzEzMSw4IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmUKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1l
c1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykK
KyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS51c2VkRnJhbWVCeXRlcygpOwogCiAgICAg
aWYgKGFsbEZyYW1lQnl0ZXMgPiBsYXJnZUFuaW1hdGlvbkN1dG9mZikgewogICAgICAgICBMT0co
SW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAgZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkgZGVz
dHJveWluZ0RhdGE6IGFsbEZyYW1lQnl0ZXM9JXUgY3V0b2ZmPSV1IiwgdGhpcywgYWxsRnJhbWVC
eXRlcywgbGFyZ2VBbmltYXRpb25DdXRvZmYpOwpAQCAtMjg4LDIxICsyNjksMTkgQEAgYm9vbCBC
aXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYQogICAgIC8vIGZyYW1lIGFmZmVjdGVk
IGJ5IGFwcGVuZGluZyBuZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRo
ZQogICAgIC8vIGluY29tcGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJh
bWVCeXRlc0NsZWFyZWQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAg
ICAgLy8gTk9URTogRG9uJ3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhh
dCB3aWxsIHRyeSB0bwogICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVy
LWRlY29kZWQgb3IKICAgICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1l
cyEKLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tp
XS5tX2lzQ29tcGxldGUpCi0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFt
ZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5t
X2hhdmVNZXRhZGF0YSAmJiAhZnJhbWUubV9pc0NvbXBsZXRlKQorICAgICAgICAgICAgZnJhbWVC
eXRlc0NsZWFyZWQgKz0gZnJhbWUuY2xlYXIodHJ1ZSk7CiAgICAgfQogICAgIGRlc3Ryb3lNZXRh
ZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6Tm8pOwogI2Vs
c2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/CiAgICAgaW50
IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJhbWVCeXRlczsK
LSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFyKHRydWUpKSB7
CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5j
bGVhcih0cnVlKSkgewogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAg
ICAgIGRlbHRhQnl0ZXMgKz0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBt
X2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7CkBAIC0zMzcsMTEgKzMxNiw2IEBAIGJvb2wgQml0
bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGEKICAgICByZXR1cm4gaXNTaXplQXZhaWxh
YmxlKCk7CiB9CiAKLVN0cmluZyBCaXRtYXBJbWFnZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dAotewotICAgIHJldHVybiBtX3NvdXJjZS5maWxlbmFtZUV4dGVuc2lvbigpOwotfQotCiBzaXpl
X3QgQml0bWFwSW1hZ2U6OmZyYW1lQ291bnQoKQogewogICAgIGlmICghbV9oYXZlRnJhbWVDb3Vu
dCkgewpAQCAtMzk0LDggKzM2OCw3IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXQKICAgICAgICAgTE9HKEltYWdlcywgIiAgc3Vic2FtcGxpbmdMZXZlbCB3YXMgJWQs
IHJlc2FtcGxpbmciLCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKTsKIAogICAg
ICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgYWxyZWFkeSBjYWNoZWQsIGJ1dCBhdCB0b28gc21hbGwg
YSBzaXplLCByZS1kZWNvZGUgYSBsYXJnZXIgdmVyc2lvbi4KLSAgICAgICAgaW50IHNpemVDaGFu
Z2UgPSAtbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlczsKLSAgICAgICAgbV9mcmFtZXNbaW5k
ZXhdLmNsZWFyKHRydWUpOworICAgICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRl
eF0uY2xlYXIodHJ1ZSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEoKTsKICAgICAg
ICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwogICAgICAgICBpZiAoaW1hZ2VPYnNlcnZl
cigpKQpAQCAtNDA4LDYgKzM4MSw0MyBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJh
bWVJbWFnZUF0CiAKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CiB9CisgICAg
CitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVy
biBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHNpemVf
dCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkp
OworICAgICAgICBpZiAoaW1hZ2UgJiYgc2l6ZU9mSW1hZ2UoaW1hZ2UpID09IHNpemUpCisgICAg
ICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAorICAgIC8vIEZhbGxiYWNrIHRvIHRo
ZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5kIHRoZSByaWdodCBzaXplCisgICAg
cmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKK3sKKyAgICByZXR1cm4gZnJh
bWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQorCitWZWN0b3I8TmF0aXZlSW1hZ2VQ
dHI+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKQoreworICAgIFZlY3RvcjxOYXRp
dmVJbWFnZVB0cj4gaW1hZ2VzOworICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAg
ICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYg
KGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKSkKKyAgICAgICAgICAgIGltYWdlcy5h
cHBlbmQoaW1hZ2UpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VzOworfQogCiBib29s
IEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKQEAg
LTQyNSwxMSArNDM1LDYgQEAgZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4
KAogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKIH0KIAotTmF0aXZlSW1h
Z2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICBy
ZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOwotfQotCiBib29sIEJpdG1h
cEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKCFl
bnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCkBAIC00NTcsNiAr
NDYyLDMyIEBAIEltYWdlT3JpZW50YXRpb24gQml0bWFwSW1hZ2U6OmZyYW1lT3JpZW4KICAgICBy
ZXR1cm4gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKIH0KIAorQ29sb3IgQml0
bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCit7CisgICAgLy8gSWYgdGhlIGltYWdl
IHNpemUgaXMgbm90IGF2YWlsYWJsZSB5ZXQgb3IgaWYgdGhlIGltYWdlIHdpbGwgYmUgYW5pbWF0
aW5nIGRvbid0IHVzZSB0aGUgc29saWQgY29sb3Igb3B0aW1pemF0aW9uLgorICAgIGlmIChmcmFt
ZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBpZiAobV9zb2xp
ZENvbG9yKQorICAgICAgICByZXR1cm4gbV9zb2xpZENvbG9yLnZhbHVlKCk7CisKKyAgICAvLyBJ
ZiB0aGUgZnJhbWUgaW1hZ2UgaXMgbm90IGxvYWRlZCwgZmlyc3QgdXNlIHRoZSBkZWNvZGVyIHRv
IGdldCB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCisgICAgaWYgKCFoYXZlRnJhbWVJbWFnZUF0SW5k
ZXgoMCkgJiYgbV9zb3VyY2UuZnJhbWVTaXplQXRJbmRleCgwLCAwKSAhPSBJbnRTaXplKDEsIDEp
KSB7CisgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9yKCk7CisgICAgICAgIHJldHVybiBtX3Nv
bGlkQ29sb3IudmFsdWUoKTsKKyAgICB9CisKKyAgICAvLyBDYWNoZSB0aGUgZnJhbWUgaW1hZ2Uu
IFRoZSBzaXplIHdpbGwgYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBOYXRpdmVJbWFnZVB0ci4KKyAg
ICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoMCkpCisgICAgICAgIHJldHVybiBDb2xvcigpOwor
CisgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7CisgICAgbV9zb2xpZENvbG9yID0gc2luZ2xl
UGl4ZWxTb2xpZENvbG9yT2ZJbWFnZShtX2ZyYW1lc1swXS5tX2ltYWdlKTsKKyAgICAKKyAgICBB
U1NFUlQobV9zb2xpZENvbG9yKTsKKyAgICByZXR1cm4gbV9zb2xpZENvbG9yLnZhbHVlKCk7Cit9
CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiBib29sIEJpdG1hcEltYWdlOjpub3RTb2xpZENvbG9y
KCkKIHsKQEAgLTQ3OCwxMSArNTA5LDkyIEBAIGludCBCaXRtYXBJbWFnZTo6cmVwZXRpdGlvbkNv
dW50KGJvb2wgaW0KICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291bnQ7CiB9CiAKK3ZvaWQgQml0
bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGFydEFuaW1hdGlvbihE
b05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlvbigpOworI2VuZGlmCisKKyAg
ICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOworICAgIGlmIChjb2xvci5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0
LCBjb2xvciwgb3ApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBpbWFnZSA9
IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ1NjYWxlKGNvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28g
ZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKworICAg
IEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlv
bigpKTsKKyAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIGNv
bnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBtX3NpemUsIG9wLCBtb2RlLCBvcmllbnRhdGlvbik7
CisKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRp
ZERyYXcodGhpcyk7Cit9CisgICAgCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBpZiAodGlsZVJlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWN0eHQuZHJhd0x1bWluYW5jZU1hc2so
KSkgeworICAgICAgICBJbWFnZTo6ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3QsIHRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpIHsKKyAgICAgICAgYXV0byBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUo
dGlsZVJlY3Quc2l6ZSgpKSwgQ29sb3JTcGFjZVNSR0IsIGN0eHQpOworICAgICAgICBpZiAoIWJ1
ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBJbWFnZU9ic2VydmVyKiBvYnNl
cnZlciA9IGltYWdlT2JzZXJ2ZXIoKTsKKworICAgICAgICAvLyBUZW1wb3JhcmlseSByZXNldCBp
bWFnZSBvYnNlcnZlciwgd2UgZG9uJ3Qgd2FudCB0byByZWNlaXZlIGFueSBjaGFuZ2VJblJlY3Qo
KSBjYWxscyBkdWUgdG8gdGhpcyByZWxheW91dC4KKyAgICAgICAgc2V0SW1hZ2VPYnNlcnZlcihu
dWxscHRyKTsKKworICAgICAgICBkcmF3KGJ1ZmZlci0+Y29udGV4dCgpLCB0aWxlUmVjdCwgdGls
ZVJlY3QsIG9wLCBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsKKwor
ICAgICAgICBzZXRJbWFnZU9ic2VydmVyKG9ic2VydmVyKTsKKyAgICAgICAgYnVmZmVyLT5jb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisKKyAgICAgICAgbV9jYWNoZWRJbWFnZSA9IGJ1ZmZlci0+
Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBVbnNjYWxlZCk7CisgICAgICAgIGlmICgh
bV9jYWNoZWRJbWFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY3R4
dC5zZXREcmF3THVtaW5hbmNlTWFzayhmYWxzZSk7CisgICAgbV9jYWNoZWRJbWFnZS0+ZHJhd1Bh
dHRlcm4oY3R4dCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0
UmVjdCwgYmxlbmRNb2RlKTsKK30KKwogYm9vbCBCaXRtYXBJbWFnZTo6c2hvdWxkQW5pbWF0ZSgp
CiB7CiAgICAgcmV0dXJuIChyZXBldGl0aW9uQ291bnQoZmFsc2UpICE9IGNBbmltYXRpb25Ob25l
ICYmICFtX2FuaW1hdGlvbkZpbmlzaGVkICYmIGltYWdlT2JzZXJ2ZXIoKSk7CiB9CiAKK2Jvb2wg
Qml0bWFwSW1hZ2U6OmNhbkFuaW1hdGUoKQoreworICAgIHJldHVybiBzaG91bGRBbmltYXRlKCkg
JiYgZnJhbWVDb3VudCgpID4gMTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6Y2xlYXJUaW1lcigp
Cit7CisgICAgbV9mcmFtZVRpbWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6
c3RhcnRUaW1lcihkb3VibGUgZGVsYXkpCit7CisgICAgQVNTRVJUKCFtX2ZyYW1lVGltZXIpOwor
ICAgIG1fZnJhbWVUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmQml0bWFw
SW1hZ2U6OmFkdmFuY2VBbmltYXRpb24pOworICAgIG1fZnJhbWVUaW1lci0+c3RhcnRPbmVTaG90
KGRlbGF5KTsKK30KKwogdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24oQ2F0Y2hVcEFu
aW1hdGlvbiBjYXRjaFVwSWZOZWNlc3NhcnkpCiB7CiAgICAgaWYgKG1fZnJhbWVUaW1lciB8fCAh
c2hvdWxkQW5pbWF0ZSgpIHx8IGZyYW1lQ291bnQoKSA8PSAxKQpAQCAtNTgwLDYwICs2OTIsNiBA
QCB2b2lkIEJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbihDYXRjaFVwCiAgICAgc3RhcnRUaW1l
cigwKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbigpCi17Ci0gICAgLy8g
VGhpcyB0aW1lciBpcyB1c2VkIHRvIGFuaW1hdGUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgaW1h
Z2UuIERvbid0IGludmFsaWRhdGUKLSAgICAvLyB0aGUgdGltZXIgdW5sZXNzIGFsbCByZW5kZXJl
cnMgaGF2ZSBzdG9wcGVkIGRyYXdpbmcuCi0gICAgY2xlYXJUaW1lcigpOwotfQotCi12b2lkIEJp
dG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigpCi17Ci0gICAgc3RvcEFuaW1hdGlvbigpOwotICAg
IG1fY3VycmVudEZyYW1lID0gMDsKLSAgICBtX3JlcGV0aXRpb25zQ29tcGxldGUgPSAwOwotICAg
IG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0gMDsKLSAgICBtX2FuaW1hdGlvbkZpbmlzaGVkID0g
ZmFsc2U7Ci0gICAgCi0gICAgLy8gRm9yIGV4dHJlbWVseSBsYXJnZSBhbmltYXRpb25zLCB3aGVu
IHRoZSBhbmltYXRpb24gaXMgcmVzZXQsIHdlIGp1c3QgdGhyb3cgZXZlcnl0aGluZyBhd2F5Lgot
ICAgIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KHRydWUpOwotfQotCi12b2lkIEJpdG1h
cEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLAotICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotewotICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghY3R4dC5kcmF3THVtaW5hbmNlTWFzaygpKSB7Ci0gICAgICAgIEltYWdlOjpkcmF3UGF0
dGVybihjdHh0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGRlc3RS
ZWN0LCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9jYWNo
ZWRJbWFnZSkgewotICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZSh0aWxlUmVjdC5zaXplKCkpLCBDb2xvclNwYWNl
U1JHQiwgY3R4dCk7Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gaW1hZ2VPYnNlcnZlcigpOwotCi0g
ICAgICAgIC8vIFRlbXBvcmFyaWx5IHJlc2V0IGltYWdlIG9ic2VydmVyLCB3ZSBkb24ndCB3YW50
IHRvIHJlY2VpdmUgYW55IGNoYW5nZUluUmVjdCgpIGNhbGxzIGR1ZSB0byB0aGlzIHJlbGF5b3V0
LgotICAgICAgICBzZXRJbWFnZU9ic2VydmVyKG51bGxwdHIpOwotCi0gICAgICAgIGRyYXcoYnVm
ZmVyLT5jb250ZXh0KCksIHRpbGVSZWN0LCB0aWxlUmVjdCwgb3AsIGJsZW5kTW9kZSwgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpOwotCi0gICAgICAgIHNldEltYWdlT2JzZXJ2ZXIob2Jz
ZXJ2ZXIpOwotICAgICAgICBidWZmZXItPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAg
ICAgICBtX2NhY2hlZEltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUsIFVuc2NhbGVkKTsKLSAgICAgICAgaWYgKCFtX2NhY2hlZEltYWdlKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGN0eHQuc2V0RHJhd0x1bWluYW5jZU1hc2soZmFsc2UpOwot
ICAgIG1fY2FjaGVkSW1hZ2UtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCB0cmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7Ci19Ci0KLQogdm9pZCBC
aXRtYXBJbWFnZTo6YWR2YW5jZUFuaW1hdGlvbigpCiB7CiAgICAgaW50ZXJuYWxBZHZhbmNlQW5p
bWF0aW9uKCk7CkBAIC02ODMsMzUgKzc0MSwyMyBAQCBib29sIEJpdG1hcEltYWdlOjppbnRlcm5h
bEFkdmFuY2VBbmltYXRpCiAgICAgcmV0dXJuIGFkdmFuY2VkQW5pbWF0aW9uOwogfQogCi1Db2xv
ciBCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKK3ZvaWQgQml0bWFwSW1hZ2U6
OnN0b3BBbmltYXRpb24oKQogewotICAgIC8vIElmIHRoZSBpbWFnZSBzaXplIGlzIG5vdCBhdmFp
bGFibGUgeWV0IG9yIGlmIHRoZSBpbWFnZSB3aWxsIGJlIGFuaW1hdGluZyBkb24ndCB1c2UgdGhl
IHNvbGlkIGNvbG9yIG9wdGltaXphdGlvbi4KLSAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCi0g
ICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIGlmIChtX3NvbGlkQ29sb3IpCi0gICAg
ICAgIHJldHVybiBtX3NvbGlkQ29sb3IudmFsdWUoKTsKLQotICAgIC8vIElmIHRoZSBmcmFtZSBp
bWFnZSBpcyBub3QgbG9hZGVkLCBmaXJzdCB1c2UgdGhlIGRlY29kZXIgdG8gZ2V0IHRoZSBzaXpl
IG9mIHRoZSBpbWFnZS4KLSAgICBpZiAoIWhhdmVGcmFtZUltYWdlQXRJbmRleCgwKSAmJiBtX3Nv
dXJjZS5mcmFtZVNpemVBdEluZGV4KDAsIDApICE9IEludFNpemUoMSwgMSkpIHsKLSAgICAgICAg
bV9zb2xpZENvbG9yID0gQ29sb3IoKTsKLSAgICAgICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1
ZSgpOwotICAgIH0KLQotICAgIC8vIENhY2hlIHRoZSBmcmFtZSBpbWFnZS4gVGhlIHNpemUgd2ls
bCBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIE5hdGl2ZUltYWdlUHRyLgotICAgIGlmICghZW5zdXJl
RnJhbWVJc0NhY2hlZCgwKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgCi0gICAgQVNT
RVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9yID0gTmF0aXZlSW1hZ2U6OnNp
bmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdlLmdldCgpKTsKLSAgICAKLSAg
ICBBU1NFUlQobV9zb2xpZENvbG9yKTsKLSAgICByZXR1cm4gbV9zb2xpZENvbG9yLnZhbHVlKCk7
CisgICAgLy8gVGhpcyB0aW1lciBpcyB1c2VkIHRvIGFuaW1hdGUgYWxsIG9jY3VycmVuY2VzIG9m
IHRoaXMgaW1hZ2UuIERvbid0IGludmFsaWRhdGUKKyAgICAvLyB0aGUgdGltZXIgdW5sZXNzIGFs
bCByZW5kZXJlcnMgaGF2ZSBzdG9wcGVkIGRyYXdpbmcuCisgICAgY2xlYXJUaW1lcigpOwogfQot
ICAgIAotYm9vbCBCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0ZSgpCisKK3ZvaWQgQml0bWFwSW1hZ2U6
OnJlc2V0QW5pbWF0aW9uKCkKIHsKLSAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1l
Q291bnQoKSA+IDE7CisgICAgc3RvcEFuaW1hdGlvbigpOworICAgIG1fY3VycmVudEZyYW1lID0g
MDsKKyAgICBtX3JlcGV0aXRpb25zQ29tcGxldGUgPSAwOworICAgIG1fZGVzaXJlZEZyYW1lU3Rh
cnRUaW1lID0gMDsKKyAgICBtX2FuaW1hdGlvbkZpbmlzaGVkID0gZmFsc2U7CisKKyAgICAvLyBG
b3IgZXh0cmVtZWx5IGxhcmdlIGFuaW1hdGlvbnMsIHdoZW4gdGhlIGFuaW1hdGlvbiBpcyByZXNl
dCwgd2UganVzdCB0aHJvdyBldmVyeXRoaW5nIGF3YXkuCisgICAgZGVzdHJveURlY29kZWREYXRh
SWZOZWNlc3NhcnkodHJ1ZSk7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVh
bSYgdHMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDI1ICs0Nyw5
IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNlIFdURiB7
Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1lRGF0YT4g
OiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZyYW1lRGF0
YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAgIEludFNp
emUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEoY29uc3Qg
TmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3Qg
TmF0aXZlSW1hZ2VQdHImKTsKLX0KLQogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CiAvLyBGcmFtZURhdGEgQ2xhc3MKIC8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzUsMTggKzU5LDI5IEBAIHB1
YmxpYzoKICAgICBGcmFtZURhdGEoKQogICAgICAgICA6IG1faGF2ZU1ldGFkYXRhKGZhbHNlKQog
ICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0FscGhhKHRydWUp
CisgICAgICAgICwgbV9oYXNBbHBoYShmYWxzZSkKICAgICB7CiAgICAgfQogCiAgICAgfkZyYW1l
RGF0YSgpCi0gICAgeyAKLSAgICAgICAgY2xlYXIodHJ1ZSk7CisgICAgeworICAgICAgICBjbGVh
ckltYWdlU3ViSW1hZ2VzKG1faW1hZ2UpOwogICAgIH0KIAogICAgIC8vIENsZWFyIHRoZSBjYWNo
ZWQgaW1hZ2UgZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRh
LgogICAgIC8vIFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8g
Y2xlYXIuCi0gICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOworICAgIHVuc2lnbmVk
IGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSB1c2VkRnJhbWVCeXRlcygpOworICAgICAgICAKKyAgICAgICAgaWYgKGNsZWFyTWV0
YWRhdGEpCisgICAgICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOworCisgICAgICAgIG1f
c3Vic2FtcGxpbmdMZXZlbCA9IDA7CisgICAgICAgIG1faW1hZ2UgPSBudWxscHRyOworCisgICAg
ICAgIHJldHVybiBmcmFtZUJ5dGVzOworICAgIH0KICAgICAKICAgICB1bnNpZ25lZCB1c2VkRnJh
bWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ZyYW1lQnl0ZXMgOiAwOyB9CiAK
QEAgLTEwNSwxMCArMTAwLDYgQEAgcHVibGljOgogLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBjbGFzcyBCaXRtYXBJbWFnZSBmaW5hbCA6IHB1
YmxpYyBJbWFnZSB7Ci0gICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVu
ZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgR3JhZGll
bnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8Qml0bWFwSW1hZ2U+IGNyZWF0ZShOYXRpdmVJbWFnZVB0ciYmIG5hdGl2ZUlt
YWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IG51bGxwdHIpCiAgICAgewpAQCAtMTIzLDcg
KzExNCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZpcnR1YWwgfkJpdG1hcEltYWdlKCk7CiAg
ICAgCi0gICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKICAgICAvLyBGbG9hdFNpemUgZHVlIHRvIG92ZXJyaWRlLgogICAgIEZsb2F0
U2l6ZSBzaXplKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMzQsNyArMTI1LDcgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVkU2l6ZTsg
fQogCiAgICAgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkgb3ZlcnJpZGU7
Ci0gICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3Ry
aW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2Uu
ZmlsZW5hbWVFeHRlbnNpb24oKTsgfQogCiAgICAgLy8gSXQgbWF5IGxvb2sgdW51c3VhbCB0aGF0
IHRoZXJlIGlzIG5vIHN0YXJ0IGFuaW1hdGlvbiBjYWxsIGFzIHB1YmxpYyBBUEkuIFRoaXMgaXMg
YmVjYXVzZQogICAgIC8vIHdlIHN0YXJ0IGFuZCBzdG9wIGFuaW1hdGluZyBsYXppbHkuIEFuaW1h
dGlvbiBiZWdpbnMgd2hlbmV2ZXIgc29tZW9uZSBkcmF3cyB0aGUgaW1hZ2UuIEl0IHdpbGwKQEAg
LTE1NSwxMiArMTQ2LDYgQEAgcHVibGljOgogICAgIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50
YXRpb24oKSBvdmVycmlkZTsKICNlbmRpZgogCi0jaWYgVVNFKENHKQotICAgIFdFQkNPUkVfRVhQ
T1JUIENHSW1hZ2VSZWYgZ2V0Q0dJbWFnZVJlZigpIG92ZXJyaWRlOwotICAgIENHSW1hZ2VSZWYg
Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKLSAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFycmF5KCkgb3ZlcnJpZGU7Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKFdJTikKICAgICBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAsIGNvbnN0IEludFNpemUqKSBv
dmVycmlkZTsKQEAgLTE3NCw5ICsxNTksMTIgQEAgcHVibGljOgogICAgIEV2YXNfT2JqZWN0KiBn
ZXRFdmFzT2JqZWN0KEV2YXMqKSBvdmVycmlkZTsKICNlbmRpZgogCisgICAgV0VCQ09SRV9FWFBP
UlQgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgTmF0
aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKICAgICBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9Ci0KKyAgICBW
ZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAg
IAogICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGU7CiAKICAg
ICBib29sIGlzQW5pbWF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2ZyYW1lQ291bnQg
PiAxOyB9CkBAIC0yMTUsNyArMjAzLDYgQEAgcHJvdGVjdGVkOgogICAgIHNpemVfdCBmcmFtZUNv
dW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIGZs
b2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlV
bnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKICAgICBib29sIGhhdmVGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNs
dWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAi
SW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2UuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0xMzcsOCAr
MTM3LDExIEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91
bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVs
bHB0cjsgfQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9u
IG9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigp
OyB9CisgICAgdmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdl
cygpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2Ug
Zm9ybWF0cy4KIApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDRkRh
dGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlm
CiAKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYoKSB7
IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFn
ZVJlZk9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1
YWwgUmV0YWluUHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51bGxw
dHI7IH0KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBnZXRI
QklUTUFQKEhCSVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhC
SVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJ
KHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIk5h
dGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKICNpbmNsdWRlICJUZXh0
U3RyZWFtLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJNZWRp
YVBsYXllckVudW1zLmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKyNpbmNsdWRlICJO
YXRpdmVJbWFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lv
bi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJ
bWFnZS5oCShyZXZpc2lvbiAyMDU1NzgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL05hdGl2ZUltYWdlUHRyLmg6MjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUs
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE5hdGl2ZUltYWdlUHRy
X2gKKyNkZWZpbmUgTmF0aXZlSW1hZ2VQdHJfaAorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KK3R5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CisjZWxp
ZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNlbGlmIFVTRShXSU5HREkp
CisjaW5jbHVkZSAiU2hhcmVkQml0bWFwLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisjaWYgVVNFKENHKQordHlwZWRlZiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gTmF0aXZlSW1h
Z2VQdHI7CisjZWxpZiBVU0UoQ0FJUk8pCit0eXBlZGVmIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IE5hdGl2ZUltYWdlUHRyOworI2VsaWYgVVNFKFdJTkdESSkKK3R5cGVkZWYgUmVmUHRyPFNoYXJl
ZEJpdG1hcD4gTmF0aXZlSW1hZ2VQdHI7CisjZW5kaWYKKworfQorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAkocmV2aXNp
b24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1h
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5jLgogICoKQEAgLTI1LDggKzI1
LDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIE5hdGl2ZUltYWdlUHRyX2gK
LSNkZWZpbmUgTmF0aXZlSW1hZ2VQdHJfaAorI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHcmFw
aGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogCiAjaWYgVVNFKENH
KQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTM5LDYgKzQxLDExIEBAIHR5cGVkZWYg
c3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgQ29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OworCiAjaWYgVVNFKENHKQogdHlwZWRlZiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
TmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBVU0UoQ0FJUk8pCkBAIC00Nyw2ICs1NCwxMyBAQCB0eXBl
ZGVmIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltCiB0eXBlZGVmIFJlZlB0cjxTaGFy
ZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOwogI2VuZGlmCiAKLX0KK0ludFNpemUgc2l6ZU9mSW1h
Z2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKK2Jvb2wgaGFzQWxwaGFPZkltYWdlKGNvbnN0IE5h
dGl2ZUltYWdlUHRyJik7CitDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3JPZkltYWdlKGNvbnN0
IE5hdGl2ZUltYWdlUHRyJik7CiAKLSNlbmRpZgorZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QpOworCit2b2lkIGRyYXdJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYsIEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElu
dFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0
aW9uJik7Cit2b2lkIGNsZWFySW1hZ2VTdWJJbWFnZXMoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsK
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQ
dHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRp
dmVJbWFnZVB0ci5oCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCShub25leGlzdGVudCkKQEAgLTEsNTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxl
LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5jLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBOYXRpdmVJbWFnZVB0
cl9oCi0jZGVmaW5lIE5hdGl2ZUltYWdlUHRyX2gKLQotI2lmIFVTRShDRykKLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci10eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVmOwotI2Vs
aWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jZWxpZiBVU0UoV0lOR0RJ
KQotI2luY2x1ZGUgIlNoYXJlZEJpdG1hcC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotI2lmIFVTRShDRykKLXR5cGVkZWYgUmV0YWluUHRyPENHSW1hZ2VSZWY+IE5hdGl2ZUlt
YWdlUHRyOwotI2VsaWYgVVNFKENBSVJPKQotdHlwZWRlZiBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBOYXRpdmVJbWFnZVB0cjsKLSNlbGlmIFVTRShXSU5HREkpCi10eXBlZGVmIFJlZlB0cjxTaGFy
ZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOwotI2VuZGlmCi0KLX0KLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw3ICsyOTcsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqCiAgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5nZXRDR0lt
YWdlUmVmKCk7CisgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAg
IEFTU0VSVChtX3BhdXNlZEltYWdlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAJ
KHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCShub25leGlzdGVudCkKQEAgLTEsMTQyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDQUlSTykK
LQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIK
LSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBO
YXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNpemUoaW1hZ2UuZ2V0KCkpOwot
fQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkK
LXsKLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChpbWFnZS5nZXQoKSkgIT0g
Q0FJUk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNv
bnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2Up
OwotICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAx
KSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRf
dHlwZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0
cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0g
ICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci19Ci0KLX0KLQot
dm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3As
Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwgIWRzdC5oZWlnaHQoKSB8fCAh
c3JjLndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3Rh
cnRBbmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1f
Y3VycmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdl
IHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xvciBj
b2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwgY29sb3IsIG9wKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuc2F2ZSgpOwotCi0gICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYgKG9wID09IENvbXBvc2l0ZVNv
dXJjZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhZnJhbWVIYXNBbHBo
YUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VT
aXplKHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1
c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6ZSk7Ci0jZWxzZQotICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRpZgotCi0gICAgSW1hZ2VPcmll
bnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7
Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVj
dEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50YXRpb24gPSBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBGbG9hdFJlY3QgZHN0UmVjdCA9
IGRzdDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERlZmF1bHRJbWFnZU9yaWVudGF0
aW9uKSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRv
IGJlIGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRz
dFJlY3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwot
ICAgICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0aW9uLnRyYW5zZm9ybUZyb21E
ZWZhdWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFtZU9yaWVudGF0aW9uLnVz
ZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0
YW5nbGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZv
ciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2Fz
IG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhl
cmUuCi0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRzdFJlY3QueCgpLCBkc3RSZWN0
LnkoKSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0
KHN1cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7Ci0KLSAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAg
IGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotYm9vbCBGcmFtZURhdGE6OmNs
ZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAg
ICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAg
IG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0Uo
Q0FJUk8pCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpl
b2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2
ZUltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXRp
dmVJbWFnZS5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBzaXplT2ZJbWFnZShjb25zdCBOYXRp
dmVJbWFnZVB0ciYgaW1hZ2UpCit7CisgICAgcmV0dXJuIGltYWdlID8gY2Fpcm9TdXJmYWNlU2l6
ZShpbWFnZS5nZXQoKSkgOiBJbnRTaXplKCk7Cit9CisKK2Jvb2wgaGFzQWxwaGFPZkltYWdlKGNv
bnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKK3sKKyAgICByZXR1cm4gIWltYWdlIHx8IGNhaXJv
X3N1cmZhY2VfZ2V0X2NvbnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7
Cit9CisKK0NvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1hZ2UoY29uc3QgTmF0aXZlSW1h
Z2VQdHImIGltYWdlKQoreworICAgIGlmICghaW1hZ2UgfHwgc2l6ZU9mSW1hZ2UoaW1hZ2UpICE9
IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFH
RSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRl
cnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFn
ZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwp
OworfQorCitmbG9hdCBzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQg
ZHJhd0ltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pCit7CisgICAgY29u
dGV4dC5zYXZlKCk7CisgICAgCisgICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24u
CisgICAgaWYgKG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgbW9kZSA9PSBCbGVuZE1vZGVO
b3JtYWwgJiYgIWhhc0FscGhhT2ZJbWFnZShpbWFnZSkpCisgICAgICAgIGNvbnRleHQuc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgIGVsc2UKKyAgICAgICAgY29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOworICAgICAgICAKKyNpZiBFTkFCTEUo
SU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IHNp
emVPZkltYWdlKGltYWdlKTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0
U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNSZWN0LCBzY2FsZWRTaXplKTsKKyNlbHNlCisg
ICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChzcmNSZWN0KTsKKyNlbmRpZgorICAgICAgICAK
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0OworICAgICAgICAKKyAg
ICBpZiAob3JpZW50YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKKyAgICAgICAg
Ly8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgor
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSk7Cisg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICAg
ICAgY29udGV4dC5jb25jYXRDVE0ob3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoYWRq
dXN0ZWREZXN0UmVjdC5zaXplKCkpKTsKKyAgICAgICAgaWYgKG9yaWVudGF0aW9uLnVzZXNXaWR0
aEFzSGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUg
d2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUg
b3JpZW50YXRpb24gb2YKKyAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRl
ZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCisg
ICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoYWRqdXN0ZWREZXN0UmVjdC5zaXpl
KCkudHJhbnNwb3NlZFNpemUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChpbWFnZS5nZXQoKSwgYWRqdXN0
ZWREZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsKKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKK30KKwordm9pZCBjbGVhckltYWdlU3ViSW1hZ2VzKGNvbnN0IE5hdGl2ZUltYWdlUHRy
JikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJP
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCShub25leGlzdGVudCkKQEAgLTEs
MjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5o
IgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2Vydmlj
ZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5kaWYKLQotI2lmIFBMQVRG
T1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgTmF0
aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JiBp
bWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJbnRTaXplKENHSW1hZ2VH
ZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsKLX0K
LQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mKQotewotICAgIC8v
IEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJl
ZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotQ29sb3Ig
c2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2Up
Ci17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0aXZlSW1hZ2U6OnNpemUo
aW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAot
ICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBhdXRvIGJpdG1hcENvbnRl
eHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9m
KHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKLQotICAgIGlmICghYml0
bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgCi0gICAgQ0dDb250ZXh0
U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAg
IENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAs
IDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhlbFszXSkKLSAgICAgICAg
cmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENvbG9yKHBpeGVsWzBdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1
IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIo
Ym9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBt
X2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGluZ0xldmVsID0gMDsKLQot
ICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0gICAgICAgIHN1YmltYWdl
Q2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlmCi0gICAgICAgIG1faW1h
Z2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlUmVmKCkKLXsKLSAg
ICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0KLUNHSW1hZ2VSZWYgQml0
bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQot
ewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVJ
bWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdlICYmIEludFNpemUoQ0dJ
bWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpKSA9PSBzaXpl
KQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sg
dG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRoZSByaWdodCBzaXpl
Ci0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWluUHRyPENGQXJyYXlSZWY+
IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNpemVfdCBjb3VudCA9IGZy
YW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKE5V
TEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VSZWYgY3VyckZyYW1lID0g
ZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFs
dWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBhZG9wdENGKGFycmF5KTsK
LX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRp
b25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgc3Rh
cnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3RhcnRBbmltYXRpb24oKTsK
LSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIC8vIE5ldmVy
IHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KLSAg
ICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9ybUNvbnRleHQoKSkpCi0g
ICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJh
bWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJl
Y3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RN
KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQgc3Vic2FtcGxpbmdTY2Fs
ZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVj
dC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVj
dC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAgICAgICBpbWFnZSA9IGZy
YW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ1NjYWxlKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENvbG9yIGNvbG9yID0gc2lu
Z2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAg
ICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9yLCBjb21wb3NpdGVPcCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1wbGluZyBtYXkgaGF2ZSBn
aXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXplKCkuCi0gICAgSW50U2l6
ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdo
dChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMgaW4gdGhlIGNvb3JkaW5h
dGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8gbWFwIGl0IHRvIHRo
ZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVj
dDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAgICBGbG9hdFJlY3Qgb3Jp
Z2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0gICAgICAgIEZsb2F0UmVj
dCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFnZVNpemUpOwotICAgICAg
ICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5hbEltYWdlQm91bmRzLCBz
dWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJbWFnZU9yaWVudGF0aW9u
IG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlv
bigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBvcmllbnRhdGlvbiA9IGZy
YW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQotICAgIGN0eHQuZHJhd05h
dGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2FsZWRTcmNSZWN0LCBjb21w
b3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBpZiAoaW1hZ2VPYnNlcnZl
cigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Ci19Ci0KLVJldGFp
blB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8
fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIDAp
OwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKQotICAgICAg
ICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICByZXR1cm4gbV9zb3VyY2Uu
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0Uo
Q0cpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9CaXRtYXBJbWFnZUNHLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUK
IyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2
ZUltYWdlQ0cuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisKKyNpZiBVU0UoQ0cpCisK
KyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAi
U3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUg
PFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUgc2l6ZU9mSW1hZ2UoY29uc3QgTmF0aXZl
SW1hZ2VQdHImIGltYWdlKQoreworICAgIHJldHVybiBpbWFnZSA/IEludFNpemUoQ0dJbWFnZUdl
dFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpIDogSW50
U2l6ZSgpOworfQorCitib29sIGhhc0FscGhhT2ZJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYp
Cit7CisgICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRo
ZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0NvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHIm
IGltYWdlKQoreworICAgIGlmICghaW1hZ2UgfHwgc2l6ZU9mSW1hZ2UoaW1hZ2UpICE9IEludFNp
emUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgdW5zaWduZWQgY2hhciBw
aXhlbFs0XTsgLy8gUkdCQQorICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JT
cGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkJpZykpOworCisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAgICByZXR1cm4g
Q29sb3IoKTsKKworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgp
LCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4
dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0KCkpOworCisgICAgaWYg
KCFwaXhlbFszXSkKKyAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOworCisgICAgcmV0
dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4
ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKworZmxvYXQg
c3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1
c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAg
aWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQor
ICAgICAgICByZXR1cm4gMTsKKworICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVj
dCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0o
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHJldHVybiBzdGQ6Om1pbjxmbG9hdD4o
MSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1Jl
Y3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNS
ZWN0LmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgZHJhd0ltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRy
JiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlv
biYgb3JpZW50YXRpb24pCit7CisgICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMg
YW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgorICAgIEludFNpemUgc3Vic2Ft
cGxlZEltYWdlU2l6ZSA9IHNpemVPZkltYWdlKGltYWdlKTsKKworICAgIC8vIHNyY1JlY3QgaXMg
aW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUg
dG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgorICAgIEZsb2F0UmVjdCBhZGp1c3Rl
ZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGlmIChzdWJzYW1wbGVkSW1hZ2VTaXplICE9IHNyY1Np
emUpCisgICAgICAgIGFkanVzdGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgRmxvYXRSZWN0
KHsgfSwgc3JjU2l6ZSksIEZsb2F0UmVjdCh7IH0sIHN1YnNhbXBsZWRJbWFnZVNpemUpKTsKKwor
ICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBzdWJzYW1wbGVkSW1hZ2VTaXplLCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworfQorCit2
b2lkIGNsZWFySW1hZ2VTdWJJbWFnZXMoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQorewor
I2lmIENBQ0hFX1NVQklNQUdFUworICAgIGlmIChpbWFnZSkKKyAgICAgICAgc3ViaW1hZ2VDYWNo
ZSgpLmNsZWFySW1hZ2UoaW1hZ2UuZ2V0KCkpOworI2VuZGlmCit9CisKK30KKworI2VuZGlmIC8v
IFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRl
cm5DRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsNyBAQCBDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0CiAgICAgLy8g
SWYgd2UncmUgcmVwZWF0aW5nIGluIGJvdGggZGlyZWN0aW9ucywgd2UgY2FuIHVzZSBpbWFnZS1i
YWNrZWQgcGF0dGVybnMKICAgICAvLyBpbnN0ZWFkIG9mIGN1c3RvbSBwYXR0ZXJucywgYW5kIGF2
b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNyYWNrcy4KICAgICBpZiAobV9yZXBlYXRYICYmIG1fcmVw
ZWF0WSkKLSAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0aEltYWdlQW5kVHJhbnNm
b3JtKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0
dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CisgICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNy
ZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQo
KSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nKTsKIAog
ICAgIC8vIElmIEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAs
IG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KICAg
ICAvLyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4KQEAgLTgzLDcgKzgzLDcgQEAg
Q0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dAogICAgIENHRmxvYXQgeVN0
ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVjdC5oZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8v
IFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFzZSB0aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSBy
ZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVhc2VDYWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZv
cm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4odGlsZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7Cisg
ICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCku
bGVha1JlZigpOwogCiAgICAgY29uc3QgQ0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFj
a3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFjaywgcGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAg
IHJldHVybiBDR1BhdHRlcm5DcmVhdGUocGxhdGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywg
VFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkNvY29hLm1tCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYTo6flRleHRUcmFjawogdm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRh
dGUoKQogewogICAgIGlmIChhdXRvIHJlcHJlc2VudGF0aW9uID0gbV9jbGllbnQuY3JlYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpKQotICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRD
b250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPmdldENHSW1hZ2VSZWYoKV07CisgICAgICAgIFtt
X2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNlbnRhdGlvbi0+bmF0aXZlSW1hZ2Uo
KS5nZXQoKV07CiB9CiAKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6c2V0Q29u
dGVudFNjYWxlKGZsb2F0IHNjYWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC03OSwzMSArNzksMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpnZXRUSUZGUmVwcmVz
ZW50YQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVybiBtX3RpZmZSZXAuZ2V0KCk7
CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CisgICAgYXV0byBuYXRp
dmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsKIAotICAgIC8vIElmIG51bUZy
YW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZl
IHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6ZSgpIGlzIHplcm8sIHdlIGtu
b3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFsaWQgZGF0YQogICAgIC8v
IEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRh
IHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVsbHksCiAgICAgLy8gaW4gY2Vy
dGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0gdGhlIGNvbnNvbGUgd2l0aCBh
biBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZy
YW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJbWFnZSkKLSAgICAgICAg
ICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbnVtVmFs
aWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJl
Zj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VE
ZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5cGVUSUZGLCBudW1WYWxp
ZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRlc3Rp
bmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdl
dCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgMCkpOwogCiAgICAgaWYgKCFk
ZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlkRnJhbWVzOyArK2kpCi0gICAg
ICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZXNb
aV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5hdGl2ZUltYWdlcykKKyAgICAg
ICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIG5hdGl2ZUlt
YWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0
aW9uLmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1h
Yy5tbQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDIsNyArMTQyLDcgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRl
UAogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9w
cmV2aWV3SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJ
bWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdl
KQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIE1vY2tSZWFs
dGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQCiAKIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VNYWM6OnVwZGF0ZVNhbXBsZUJ1ZmZlcigpCiB7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBp
eGVsQnVmZmVyRnJvbUNHSW1hZ2UoaW1hZ2VCdWZmZXIoKS0+Y29weUltYWdlKCktPmdldENHSW1h
Z2VSZWYoKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2Uo
aW1hZ2VCdWZmZXIoKS0+Y29weUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCkpOwogICAgIGF1
dG8gc2FtcGxlQnVmZmVyID0gQ01TYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIocGl4ZWxCdWZm
ZXIuZ2V0KCkpOwogICAgIAogICAgIG1lZGlhRGF0YVVwZGF0ZWQoTWVkaWFTYW1wbGVBVkZPYmpD
OjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNiw5ICsxMzYsOSBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUlt
YWdlKEltCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oZHJhd0NvbnRleHQsIDEsIC0xKTsKICAgICBD
R0NvbnRleHRTZXRGaWxsQ29sb3IoZHJhd0NvbnRleHQsIHdoaXRlKTsKICAgICBDR0NvbnRleHRG
aWxsUmVjdChkcmF3Q29udGV4dCwgcmVjdCk7Ci0gICAgaWYgKGF1dG8gc3JjSW1hZ2UgPSBpbWct
PmdldENHSW1hZ2VSZWYoKSkgeworICAgIGlmIChhdXRvIHNyY0ltYWdlID0gaW1nLT5uYXRpdmVJ
bWFnZSgpKSB7CiAgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShkcmF3Q29udGV4dCwga0NH
QmxlbmRNb2RlTm9ybWFsKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRyYXdDb250ZXh0
LCByZWN0LCBzcmNJbWFnZSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3Q29udGV4
dCwgcmVjdCwgc3JjSW1hZ2UuZ2V0KCkpOwogICAgIH0KICAgICBDR0NvbnRleHRSZWxlYXNlKGRy
YXdDb250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTYt
MDktMDggIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb3ZlIHRoZSBCaXRtYXBJbWFnZSBwbGF0Zm9ybSBkZXBlbmRlbnQgY29kZSB0byBhIG5l
dyBmaWxlIG5hbWVkIE5hdGl2ZUltYWdlW0NHfENhaXJvXS5jcHAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNv
bkRhdGFiYXNlQ0cuY3BwOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9y
VVJMKToKKyAgICAgICAgKFdLSWNvbkRhdGFiYXNlVHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTCk6
CisgICAgICAgIEl0IHdhcyB0aGUgb25seSBwbGFjZSBpbiB0aGUgY29kZSB3aGljaCB1c2VzIEJp
dG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKS4KKyAgICAgICAgQ2FsbCBCaXRtYXBJbWFnZTo6
ZnJhbWVzTmF0aXZlSW1hZ2VzKCkgaW5zdGVhZCBhbmQgZm9ybSB0aGUgcmV0dXJuZWQKKyAgICAg
ICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBidWlsZCB0aGUgQ0ZBcnJheVJlZi4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaDoKKyAgICAgICAgSW5jbHVkZSAiTmF0aXZl
SW1hZ2UuaCIgaW5zdGVhZCBvZiAiTmF0aXZlSW1hZ2VQdHIuaCIuCisgICAgICAgIAorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF9wcmVzZW50YXRpb25TbmFwc2hvdEZvclByZXZpZXdJdGVtQ29udHJv
bGxlcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAgIENhbGwgQml0bWFw
SW1hZ2U6OmdldENHSW1hZ2VSZWYoKSBpbnN0ZWFkIG9mIGNhbGxpbmcgQml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlKCkuCisKIDIwMTYtMDktMDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBbTWFjXSAudGJkIGZpbGVzIGZvciB0aGUgc2hpbXMgZW5kIHVwIGluc3Rh
bGxlZCB3aGVuIGJ1aWxkaW5nIHdpdGggR0VORVJBVEVfVEVYVF9CQVNFRF9TVFVCUz1ZRVMKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgJKHJldmlzaW9u
IDIwNTU3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIldlYkljb25EYXRhYmFz
ZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNlQ2xpZW50Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9OYXRpdmVJbWFnZVB0
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmF0aXZlSW1hZ2UuaD4KIAogbmFtZXNwYWNlIEFQSSB7
CiBjbGFzcyBEYXRhOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dL
SWNvbkRhdGFiYXNlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAkocmV2aXNpb24gMjA1NTc4KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBD
R0ltYWdlUmVmIFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZvclVSTChXS0ljb25EYXRhYmFz
ZVJlZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tTaXplIHNpemUpCiB7CiAg
ICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVS
TCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Rmly
c3RDR0ltYWdlUmVmT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwg
c3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKSA6IDA7CisgICAgcmV0dXJuIGltYWdlID8g
aW1hZ2UtPm5hdGl2ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndp
ZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5nZXQoKSA6IG51bGxwdHI7CiB9
CiAKIENGQXJyYXlSZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKFdL
SWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewogICAg
IEltYWdlKiBpbWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwo
dG9XVEZTdHJpbmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldENHSW1h
Z2VBcnJheSgpLmxlYWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGltYWdlLT5mcmFtZXNOYXRpdmVJ
bWFnZXMoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0
ZU11dGFibGUobnVsbHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxC
YWNrcyk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAg
ICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdlLmdldCgpKTsKKyAgICAKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRhaW4oYXJyYXkpKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00MTMxLDcgKzQxMzEsNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRhdGlvblNuYXBzaG90
Rm9yUHJlCiB7CiAgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNv
bnRlbnRJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFtbW1VJSW1h
Z2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNh
dG9yLmNvbnRlbnRJbWFnZS0+Z2V0Q0dJbWFnZVJlZigpXSBhdXRvcmVsZWFzZV07CisgICAgcmV0
dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfcG9zaXRpb25JbmZvcm1hdGlv
bi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+bmF0aXZlSW1hZ2UoKS5nZXQoKV0gYXV0b3Jl
bGVhc2VdOwogfQogCiAtIChOU0FycmF5ICopX3ByZXNlbnRhdGlvblJlY3RzRm9yUHJldmlld0l0
ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJvbGxlciAqKWNvbnRyb2xsZXIKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJ
KHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczMCw3ICsxNzMwLDcgQEAgdm9pZCBQ
bHVnaW5WaWV3Ojp3aW5kb3dlZFBsdWdpblZpc2liaWxpdAogI2lmIFBMQVRGT1JNKENPQ09BKQog
c3RhdGljIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCiB7Ci0g
ICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOworICAgIENHSW1h
Z2VSZWYgaW1hZ2UgPSBiaXRtYXAtPm5hdGl2ZUltYWdlKCkuZ2V0KCk7CiAgICAgQVNTRVJUKENH
SW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKIAogICAgIENHQml0bWFwSW5m
byBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhpbWFnZSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDU2NTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wOS0wOCAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhlIEJpdG1h
cEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIHRvIGEgbmV3IGZpbGUgbmFtZWQgTmF0aXZl
SW1hZ2VbQ0d8Q2Fpcm9dLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBET00vRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdT
bmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIE1pc2MvV2ViQ2FjaGUubW06Cisg
ICAgICAgICgrW1dlYkNhY2hlIGltYWdlRm9yVVJMOl0pOgorICAgICAgICBSZXBsYWNlIEJpdG1h
cEltYWdlOjpnZXRDR0ltYWdlUmVmKCkgd2l0aCBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKS4K
KwogMjAxNi0wOS0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtNYWNdIEFkZHJlc3Mgc29tZSBjbGFuZyBzdGF0aWMgYW5hbHl6ZXIgd2FybmluZ3Mg
aW4gV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET00ubW0JKHJldmlzaW9uIDIwNTU3OCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL0RPTS9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2MSw3ICs1NjEs
NyBAQCAtICh2b2lkKWdldFByZXZpZXdTbmFwc2hvdEltYWdlOihDR0ltYWdlCiAKICAgICBpZiAo
dGV4dEluZGljYXRvcikgewogICAgICAgICBpZiAoSW1hZ2UqIGltYWdlID0gdGV4dEluZGljYXRv
ci0+Y29udGVudEltYWdlKCkpCi0gICAgICAgICAgICAqY2dJbWFnZSA9IChDR0ltYWdlUmVmKUNG
QXV0b3JlbGVhc2UoQ0dJbWFnZVJldGFpbihpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpKSk7CisgICAg
ICAgICAgICAqY2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpLmF1dG9yZWxlYXNlKCk7CiAg
ICAgfQogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiByZWN0QXJyYXkgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDYWNoZS5tbQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VS
ZWYpaW1hZ2VGb3JVUkw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNh
Y2hlZEltYWdlID0gZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJj
ZSk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOwor
ICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQog
CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288283</attachid>
            <date>2016-09-08 11:08:37 -0700</date>
            <delta_ts>2016-09-08 11:40:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160908110610.patch</filename>
            <type>text/plain</type>
            <size>82751</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBAQAorMjAxNi0wOS0wOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IEJpdG1hcEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIHRvIGEgbmV3IGZpbGUgbmFtZWQg
TmF0aXZlSW1hZ2VbQ0d8Q2Fpcm9dLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yaW5nIHBhdGNoLiBJdCBtb3ZlcyB0
aGUgQml0bWFwSW1hZ2UgcGxhdGZvcm0gZGVwZW5kZW50CisgICAgICAgIGNvZGUgZnJvbSBCaXRt
YXBJbWFnZSB0byBOYXRpdmVJbWFnZVtDR3xDYWlyb10uY3BwLiBUaGUgbmV3IEFQSXMgYXJlCisg
ICAgICAgIHJlc3BvbnNpYmxlIG9mIGRyYXdpbmcgYSBOYXRpdmVJbWFnZVB0ciBhbmQgYW5zd2Vy
aW5nIHNvbWUgbWV0YWRhdGEgcXVlcmllcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29k
ZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQ
bGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAg
KiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oOgor
ICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaDoKKyAgICAgICAgKiBwYWdl
L21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tOgorICAgICAgICAoLVtXZWJUZXh0SW5kaWNhdG9y
VmlldyBpbml0V2l0aEZyYW1lOnRleHRJbmRpY2F0b3I6bWFyZ2luOm9mZnNldDpdKToKKyAgICAg
ICAgKGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24pOgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNv
ZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRh
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2xlYXJUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3RhcnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6cmVzZXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Omhhc1Np
bmdsZVNlY3VyaXR5T3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmaWxlbmFtZUV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6RnJhbWVE
YXRhKToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBmYWxzZSBi
ZWNhdXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAgQml0bWFwSW1hZ2U6OmZyYW1l
SGFzQWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkgbV9oYXZlTWV0YWRhdGEuCisg
ICAgICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxwaGEgYXJlIHNldCBpbiBCaXRt
YXBJbWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0bWFwSW1hZ2U6OmNhY2hlRnJh
bWUoKS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ljb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0
aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpvcmllbnRhdGlvbkZvckN1cnJl
bnRGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0Q0dJbWFnZVJl
Zik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVm
T2ZTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlQXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjp1cGRhdGVQYXVzZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6c2l6ZU9mSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aGFzQWxwaGFPZkltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJJbWFnZVN1YkltYWdlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6c2l6ZU9mSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aGFzQWxwaGFP
ZkltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJJbWFnZVN1YkltYWdlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbToKKyAgICAg
ICAgKFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVNhbXBsZUJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDktMDcgIEVy
aWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01lZGlhU3Ry
ZWFtXSBhcHBseUNvbnN0cmFpbnRzIHB0LiAyIC0gYWR2YW5jZWQgY29uc3RyYWludHMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNpb24gMjA1NTc4KQorKysg
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTcyLDYgKzcxLDcg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW50UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1F
ZmwuY21ha2UJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAog
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1w
bC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTM1LDYgKzEzNCw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0
dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4
dENhaXJvLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwNTU3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNyArMTA1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyby5jcHAKQEAgLTExNiw2ICsxMTUsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzg1LDcgKzM4
NSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXllci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNH
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTQwMiw2ICs0MDEsNyBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2lu
dENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RDRy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
TmF0aXZlSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bVdpbkNhaXJvLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2lu
Q2Fpcm8uY21ha2UJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luQ2Fpcm8uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
RmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
LmNwcApAQCAtMzEsNiArMzAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW50UmVjdENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUlt
YWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyNCw3ICsxNDI0LDcgQEAKIAkJMzc1Q0QyMzIxMTlE
NDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRp
b24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc2RENDRTAxM0I0
Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBB
RDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3Zl
cmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdl
Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovOyB9OworCQkzNzdB
M0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogTmF0aXZlSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1Qzcg
LyogTmF0aXZlSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIzMEI3RDE4ODYwMEE1Njk5OCAv
KiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9y
LmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5
QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1RUYzOTAwRjRCNjYxIC8qIENy
ZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjUxMyw3ICsyNTEz
LDcgQEAKIAkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGRUE4NjgwOTgzM0FERTAwQkVE
NEFCIC8qIFBhZ2UuY3BwICovOyB9OwogCQk2OUE2Q0JBQzFDNkJFNDJDMDBCODM2RTkgLyogQWNj
ZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjk3MTAxMDcxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlT
VkdFbGVtZW50LmNwcCAqLzsgfTsKIAkJNjlBNkNCQUQxQzZCRTQyQzAwQjgzNkU5IC8qIEFjY2Vz
c2liaWxpdHlTVkdFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2OTcxMDEwODFDNkJFMTU1MDAxOEM3RjEgLyogQWNjZXNzaWJpbGl0eVNWR0Vs
ZW1lbnQuaCAqLzsgfTsKLQkJNkIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdl
UHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjM0
ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFC
NDEgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZCNjkzQTJFMUM1
MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkI2OTNBMkQxQzUxQTgyRTAwQjAzQkVGIC8q
IFJlc291cmNlTG9hZE9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkI2OTNBMzQxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291cmNlTG9h
ZE9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZCNjkzQTMzMUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAg
Ki87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlci5jcHAgKi87IH07CkBAIC04MzQ3LDcgKzgzNDcsNyBAQAogCQkzNzZEQ0NF
MDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Mzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVy
bGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogTmF0aXZlSW1h
Z2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXRpdmVJbWFn
ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdEMTg4NjAw
QTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3Jl
ZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3JlZGVudGlh
bEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NDcsNyArOTU0Nyw3IEBA
CiAJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjk3MTAxMDcxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlT
VkdFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjk3MTAxMDgxQzZC
RTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFn
ZVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlSW1hZ2VQdHIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQx
IC8qIE5hdGl2ZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRp
dmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjY5M0EyRDFDNTFBODJF
MDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291cmNlTG9hZE9ic2VydmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZE9i
c2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkM0Qzk2REExQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENv
bnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA0OTAsNyArMjA0
OTAsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVD
NyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUg
LyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVj
dENHLmNwcCAqLywKQEAgLTIwNTE3LDYgKzIwNTE2LDcgQEAKIAkJCQlBODBBMzhGRDBFNTBDQzgy
MDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0MDAyQ0U2
NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1MzgxNDAwMkNF
NjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1
QzcgLyogTmF0aXZlSW1hZ2VDRy5jcHAgKi8sCiAJCQkJMUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlF
IC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwICovLAogCQkJCTFGQzQwRkI3MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi8sCiAJCQkJQjI3NTM1MkEwQjA1
MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwICovLApAQCAtMjA3MDgs
NyArMjA3MDgsNyBAQAogCQkJCUNEREMxRTc5MThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQuaCAqLywKIAkJCQkzMTRCRTNBNDFCMzEwM0ZCMDAxNDE5ODIgLyogTmFt
ZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQkzMTRCRTNBNTFCMzEwM0ZCMDAxNDE5
ODIgLyogTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmggKi8sCi0JCQkJNkIzNDgwOTIwRUVGNTBE
NDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggKi8sCisJCQkJNkIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIE5hdGl2ZUltYWdlLmggKi8sCiAJCQkJQjI3NTM1NTIwQjA1MzgxNDAwMkNFNjRG
IC8qIFBhdGguY3BwICovLAogCQkJCUIyNzUzNTUzMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmgg
Ki8sCiAJCQkJQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5j
cHAgKi8sCkBAIC0yNTY3OSw3ICsyNTY3OSw3IEBACiAJCQkJMzE0QkUzQTcxQjMxMDNGQjAwMTQx
OTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODcyMjMwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTgxODcyMUUwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNkIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggaW4g
SGVhZGVycyAqLywKKwkJCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTgzQjJEMTc1MUI4QkNENkEwMEEwMkU0NyAvKiBOYXRpdmVO
b2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTBCOUI2QzBCNzQ3NTk5MDAzRUQ4OTAg
LyogTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0NDRjAyNzBB
RjZDNTI5MDAwMThFODkgLyogTmF2aWdhdGlvbkFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NzU3NCw3ICsyNzU3NCw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVh
ZEZpbHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFB
MzU5IC8qIEJpcXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBC
NDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3
QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIE5hdGl2ZUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFGRkM0NTQxRDVFODFDQjAwMjY3QTY2IC8qIEJsYWNrbGlzdFVwZGF0
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxv
Yi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxv
YkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAK
ICNpZm5kZWYgQ2FjaGVfaAogI2RlZmluZSBDYWNoZV9oCiAKLSNpbmNsdWRlICJOYXRpdmVJbWFn
ZVB0ci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW5IYXNoLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmgJKHJl
dmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBJY29uRGF0
YWJhc2VCYXNlX2gKICNkZWZpbmUgSWNvbkRhdGFiYXNlQmFzZV9oCiAKLSNpbmNsdWRlICJOYXRp
dmVJbWFnZVB0ci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldp
bmRvdy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNh
dG9yV2luZG93Lm1tCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsOSArMTYyLDkg
QEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcgogICAgIGNvbnRlbnRz
SW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNj
YWxlRmFjdG9yKCkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwog
ICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRDcm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkK
LSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAgY29udGVudHNJbWFnZSA9IF90
ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7
CiAgICAgZWxzZQotICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRl
bnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4
dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF0pOwogCkBAIC0yNjUsNyArMjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxD
QUtleWZyYW1lQW5pbWF0aW9uPiBjcgogc3RhdGljIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9u
PiBjcmVhdGVDb250ZW50Q3Jvc3NmYWRlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0aW9u
LCBUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9yKQogewogICAgIFJldGFpblB0cjxDQUJhc2lj
QW5pbWF0aW9uPiBjcm9zc2ZhZGVBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRp
b25XaXRoS2V5UGF0aDpAImNvbnRlbnRzIl07Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNv
bnRlbnRzSW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRzSW1hZ2UgPSB0ZXh0SW5kaWNh
dG9yLmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFnZSgpOwogICAgIFtjcm9zc2ZhZGVBbmltYXRp
b24gc2V0VG9WYWx1ZTooaWQpY29udGVudHNJbWFnZS5nZXQoKV07CiAgICAgW2Nyb3NzZmFkZUFu
aW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKICAgICBbY3Jvc3NmYWRl
QW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjA1
NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsMTEgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKE5hdGl2ZUltYWdlUHRyJgogewogICAgIC8vIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBkZWNv
ZGVyLCB3ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZSBpbWFnZSBvcmllbnRhdGlvbi4KICAgICAvLyBT
ZXQgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uIHRvIGJlIHRoZSBzYW1lIGFzIG1fc2l6ZSBz
byBpdCdzIG5vdCAweDAuCi0gICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zaXpl
ID0gTmF0aXZlSW1hZ2U6OnNpemUoaW1hZ2UpOworICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbiA9IG1fc2l6ZSA9IHNpemVPZkltYWdlKGltYWdlKTsKICAgICBtX2RlY29kZWRTaXplID0g
bV9zaXplLmFyZWEoKSAqIDQ7Ci0gICAgCisKICAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1f
ZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOworICAg
IG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBoYXNBbHBoYU9mSW1hZ2UoaW1hZ2UpOwogICAgIG1f
ZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKICAgICBtX2ZyYW1lc1swXS5tX2ltYWdl
ID0gV1RGTW92ZShpbWFnZSk7CiB9CkBAIC04NSwxOCArODUsNiBAQCBCaXRtYXBJbWFnZTo6fkJp
dG1hcEltYWdlKCkKICAgICBzdG9wQW5pbWF0aW9uKCk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6
OmNsZWFyVGltZXIoKQotewotICAgIG1fZnJhbWVUaW1lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQg
Qml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIoZG91YmxlIGRlbGF5KQotewotICAgIEFTU0VSVCghbV9m
cmFtZVRpbWVyKTsKLSAgICBtX2ZyYW1lVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigq
dGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKTsKLSAgICBtX2ZyYW1lVGltZXIt
PnN0YXJ0T25lU2hvdChkZWxheSk7Ci19Ci0KIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQo
KSkKQEAgLTEwOCwxMSArOTYsNiBAQCBib29sIEJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0
SW5kZXgoCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwogfQogCi1ib29sIEJp
dG1hcEltYWdlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRl
c3Ryb3lBbGwpCiB7CiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQgPSAwOwpAQCAtMTI1
LDkgKzEwOCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib28KICAg
ICAgICAgLy8gVGhlIHVuZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdl
J3JlIGp1c3QgdHJ5aW5nIHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZy
YW1lYnVmZmVyIGRhdGEpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRo
ZSBtZXRhZGF0YS4KLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1f
ZnJhbWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAg
ICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0
ZXNDbGVhcmVkICs9IG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKTsKICAgICB9CiAKICAgICBtX3Nv
dXJjZS5jbGVhcihkZXN0cm95QWxsLCBjbGVhckJlZm9yZUZyYW1lLCBkYXRhKCksIG1fYWxsRGF0
YVJlY2VpdmVkKTsKQEAgLTE1MCw4ICsxMzEsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGFJZk5lCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGFsbEZyYW1l
Qnl0ZXMgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGFsbEZyYW1lQnl0ZXMgKz0gbV9mcmFtZXNbaV0udXNlZEZyYW1lQnl0ZXMo
KTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpCisgICAgICAgIGFsbEZyYW1lQnl0
ZXMgKz0gZnJhbWUudXNlZEZyYW1lQnl0ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4g
bGFyZ2VBbmltYXRpb25DdXRvZmYpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdl
ICVwIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFt
ZUJ5dGVzPSV1IGN1dG9mZj0ldSIsIHRoaXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9u
Q3V0b2ZmKTsKQEAgLTI4OCwyMSArMjY5LDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFu
Z2VkKGJvb2wgYWxsRGEKICAgICAvLyBmcmFtZSBhZmZlY3RlZCBieSBhcHBlbmRpbmcgbmV3IGRh
dGEgaGVyZS4gVGh1cyB3ZSBoYXZlIHRvIGNsZWFyIGFsbCB0aGUKICAgICAvLyBpbmNvbXBsZXRl
IGZyYW1lcyB0byBiZSBzYWZlLgogICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkID0gMDsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAg
Zm9yIChhdXRvJiBmcmFtZSA6IG1fZnJhbWVzKSB7CiAgICAgICAgIC8vIE5PVEU6IERvbid0IGNh
bGwgZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgpIGhlcmUsIHRoYXQgd2lsbCB0cnkgdG8KICAgICAg
ICAgLy8gZGVjb2RlIGFueSB1bmNhY2hlZCAoaS5lLiBuZXZlci1kZWNvZGVkIG9yCiAgICAgICAg
IC8vIGNsZWFyZWQtb24tYS1wcmV2aW91cy1wYXNzKSBmcmFtZXMhCi0gICAgICAgIHVuc2lnbmVk
IGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2Zy
YW1lc1tpXS5tX2hhdmVNZXRhZGF0YSAmJiAhbV9mcmFtZXNbaV0ubV9pc0NvbXBsZXRlKQotICAg
ICAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gKG1fZnJhbWVzW2ldLmNsZWFyKHRydWUpID8g
ZnJhbWVCeXRlcyA6IDApOworICAgICAgICBpZiAoZnJhbWUubV9oYXZlTWV0YWRhdGEgJiYgIWZy
YW1lLm1faXNDb21wbGV0ZSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1l
LmNsZWFyKHRydWUpOwogICAgIH0KICAgICBkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVC
eXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdo
eSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9TPwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAg
ICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1l
c1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1l
c1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5
dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6ZSgpIC0gMV0uY2xlYXIodHJ1ZSkpIHsKICAgICAg
ICAgICAgIGRlbHRhQnl0ZXMgKz0gYnl0ZXM7CiAgICAgICAgICAgICBkZWx0YUJ5dGVzICs9IG1f
ZGVjb2RlZFByb3BlcnRpZXNTaXplOwogICAgICAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1Np
emUgPSAwOwpAQCAtMzM3LDExICszMTYsNiBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdl
ZChib29sIGFsbERhCiAgICAgcmV0dXJuIGlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1TdHJpbmcg
Qml0bWFwSW1hZ2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9z
b3VyY2UuZmlsZW5hbWVFeHRlbnNpb24oKTsKLX0KLQogc2l6ZV90IEJpdG1hcEltYWdlOjpmcmFt
ZUNvdW50KCkKIHsKICAgICBpZiAoIW1faGF2ZUZyYW1lQ291bnQpIHsKQEAgLTM5NCw4ICszNjgs
NyBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0CiAgICAgICAgIExP
RyhJbWFnZXMsICIgIHN1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nIiwgbV9mcmFt
ZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGltYWdl
IGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVjb2RlIGEg
bGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKKyAg
ICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFyKHRydWUpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0g
c2l6ZUNoYW5nZTsKICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTQwOCw2ICszODEs
NDMgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdAogCiAgICAgcmV0
dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwogfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgo
MCk7Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50
KCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAg
ICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdl
ICYmIHNpemVPZkltYWdlKGltYWdlKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdl
OworICAgIH0KKyAgICAKKyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2Ug
aWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJ
bmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3Vy
cmVudEZyYW1lKTsKK30KKworVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBCaXRtYXBJbWFnZTo6ZnJh
bWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGltYWdlczsK
KyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChhdXRvIGltYWdlID0gZnJhbWVJ
bWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMuYXBwZW5kKGltYWdlKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKK30KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJ
c0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CkBAIC00MjUsMTEgKzQzNSw2IEBAIGZs
b2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCgKICAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1fZHVyYXRpb247CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdElu
ZGV4KGN1cnJlbnRGcmFtZSgpKTsKLX0KLQogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChp
bmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQpAQCAtNDU3LDYgKzQ2MiwzMiBAQCBJbWFnZU9yaWVu
dGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVuCiAgICAgcmV0dXJuIG1fc291cmNlLm9yaWVu
dGF0aW9uQXRJbmRleChpbmRleCk7CiB9CiAKK0NvbG9yIEJpdG1hcEltYWdlOjpzaW5nbGVQaXhl
bFNvbGlkQ29sb3IoKQoreworICAgIC8vIElmIHRoZSBpbWFnZSBzaXplIGlzIG5vdCBhdmFpbGFi
bGUgeWV0IG9yIGlmIHRoZSBpbWFnZSB3aWxsIGJlIGFuaW1hdGluZyBkb24ndCB1c2UgdGhlIHNv
bGlkIGNvbG9yIG9wdGltaXphdGlvbi4KKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAg
ICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKG1fc29saWRDb2xvcikKKyAgICAgICAgcmV0
dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOworCisgICAgLy8gSWYgdGhlIGZyYW1lIGltYWdlIGlz
IG5vdCBsb2FkZWQsIGZpcnN0IHVzZSB0aGUgZGVjb2RlciB0byBnZXQgdGhlIHNpemUgb2YgdGhl
IGltYWdlLgorICAgIGlmICghaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KDApICYmIG1fc291cmNlLmZy
YW1lU2l6ZUF0SW5kZXgoMCwgMCkgIT0gSW50U2l6ZSgxLCAxKSkgeworICAgICAgICBtX3NvbGlk
Q29sb3IgPSBDb2xvcigpOworICAgICAgICByZXR1cm4gbV9zb2xpZENvbG9yLnZhbHVlKCk7Cisg
ICAgfQorCisgICAgLy8gQ2FjaGUgdGhlIGZyYW1lIGltYWdlLiBUaGUgc2l6ZSB3aWxsIGJlIGNh
bGN1bGF0ZWQgZnJvbSB0aGUgTmF0aXZlSW1hZ2VQdHIuCisgICAgaWYgKCFlbnN1cmVGcmFtZUlz
Q2FjaGVkKDApKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIEFTU0VSVChtX2ZyYW1l
cy5zaXplKCkpOworICAgIG1fc29saWRDb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1h
Z2UobV9mcmFtZXNbMF0ubV9pbWFnZSk7CisgICAgCisgICAgQVNTRVJUKG1fc29saWRDb2xvcik7
CisgICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOworfQorCiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAogYm9vbCBCaXRtYXBJbWFnZTo6bm90U29saWRDb2xvcigpCiB7CkBAIC00NzgsMTEgKzUw
OSw5MiBAQCBpbnQgQml0bWFwSW1hZ2U6OnJlcGV0aXRpb25Db3VudChib29sIGltCiAgICAgcmV0
dXJuIG1fcmVwZXRpdGlvbkNvdW50OwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJl
Y3QuaXNFbXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNl
CisgICAgc3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgorCisgICAgQ29sb3IgY29sb3IgPSBzaW5n
bGVQaXhlbFNvbGlkQ29sb3IoKTsKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAg
IGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleCht
X2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZShjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCkpOworICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUg
YW4gaW1hZ2UgeWV0LgorICAgICAgICByZXR1cm47CisKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAgaWYgKGRlc2Ny
aXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRp
b24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJy
ZW50RnJhbWUpOworCisgICAgZHJhd0ltYWdlKGltYWdlLCBjb250ZXh0LCBkZXN0UmVjdCwgc3Jj
UmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworCisgICAgaWYgKGltYWdlT2Jz
ZXJ2ZXIoKSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOworfQorICAg
IAordm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCit7CisgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFjdHh0LmRyYXdMdW1pbmFuY2VNYXNrKCkpIHsKKyAgICAgICAgSW1hZ2U6
OmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KCFtX2NhY2hlZEltYWdlKSB7CisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoZXhwYW5kZWRJbnRTaXplKHRpbGVSZWN0LnNpemUoKSksIENv
bG9yU3BhY2VTUkdCLCBjdHh0KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBpbWFnZU9ic2VydmVy
KCk7CisKKyAgICAgICAgLy8gVGVtcG9yYXJpbHkgcmVzZXQgaW1hZ2Ugb2JzZXJ2ZXIsIHdlIGRv
bid0IHdhbnQgdG8gcmVjZWl2ZSBhbnkgY2hhbmdlSW5SZWN0KCkgY2FsbHMgZHVlIHRvIHRoaXMg
cmVsYXlvdXQuCisgICAgICAgIHNldEltYWdlT2JzZXJ2ZXIobnVsbHB0cik7CisKKyAgICAgICAg
ZHJhdyhidWZmZXItPmNvbnRleHQoKSwgdGlsZVJlY3QsIHRpbGVSZWN0LCBvcCwgYmxlbmRNb2Rl
LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CisKKyAgICAgICAgc2V0SW1hZ2VPYnNl
cnZlcihvYnNlcnZlcik7CisgICAgICAgIGJ1ZmZlci0+Y29udmVydFRvTHVtaW5hbmNlTWFzaygp
OworCisgICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSwgVW5zY2FsZWQpOworICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGN0eHQuc2V0RHJhd0x1bWluYW5jZU1h
c2soZmFsc2UpOworICAgIG1fY2FjaGVkSW1hZ2UtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0
LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7Cit9
CisKIGJvb2wgQml0bWFwSW1hZ2U6OnNob3VsZEFuaW1hdGUoKQogewogICAgIHJldHVybiAocmVw
ZXRpdGlvbkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSAmJiAhbV9hbmltYXRpb25GaW5p
c2hlZCAmJiBpbWFnZU9ic2VydmVyKCkpOwogfQogCitib29sIEJpdG1hcEltYWdlOjpjYW5Bbmlt
YXRlKCkKK3sKKyAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+IDE7
Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmNsZWFyVGltZXIoKQoreworICAgIG1fZnJhbWVUaW1l
ciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIoZG91YmxlIGRl
bGF5KQoreworICAgIEFTU0VSVCghbV9mcmFtZVRpbWVyKTsKKyAgICBtX2ZyYW1lVGltZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0
aW9uKTsKKyAgICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChkZWxheSk7Cit9CisKIHZvaWQg
Qml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKENhdGNoVXBBbmltYXRpb24gY2F0Y2hVcElmTmVj
ZXNzYXJ5KQogewogICAgIGlmIChtX2ZyYW1lVGltZXIgfHwgIXNob3VsZEFuaW1hdGUoKSB8fCBm
cmFtZUNvdW50KCkgPD0gMSkKQEAgLTU4MCw2MCArNjkyLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6
c3RhcnRBbmltYXRpb24oQ2F0Y2hVcAogICAgIHN0YXJ0VGltZXIoMCk7CiB9CiAKLXZvaWQgQml0
bWFwSW1hZ2U6OnN0b3BBbmltYXRpb24oKQotewotICAgIC8vIFRoaXMgdGltZXIgaXMgdXNlZCB0
byBhbmltYXRlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGltYWdlLiBEb24ndCBpbnZhbGlkYXRl
Ci0gICAgLy8gdGhlIHRpbWVyIHVubGVzcyBhbGwgcmVuZGVyZXJzIGhhdmUgc3RvcHBlZCBkcmF3
aW5nLgotICAgIGNsZWFyVGltZXIoKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6cmVzZXRBbmlt
YXRpb24oKQotewotICAgIHN0b3BBbmltYXRpb24oKTsKLSAgICBtX2N1cnJlbnRGcmFtZSA9IDA7
Ci0gICAgbV9yZXBldGl0aW9uc0NvbXBsZXRlID0gMDsKLSAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0
VGltZSA9IDA7Ci0gICAgbV9hbmltYXRpb25GaW5pc2hlZCA9IGZhbHNlOwotICAgIAotICAgIC8v
IEZvciBleHRyZW1lbHkgbGFyZ2UgYW5pbWF0aW9ucywgd2hlbiB0aGUgYW5pbWF0aW9uIGlzIHJl
c2V0LCB3ZSBqdXN0IHRocm93IGV2ZXJ5dGhpbmcgYXdheS4KLSAgICBkZXN0cm95RGVjb2RlZERh
dGFJZk5lY2Vzc2FyeSh0cnVlKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAodGlsZVJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWN0eHQuZHJhd0x1bWlu
YW5jZU1hc2soKSkgewotICAgICAgICBJbWFnZTo6ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3Qs
IHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpIHsKLSAgICAgICAg
YXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihleHBhbmRl
ZEludFNpemUodGlsZVJlY3Quc2l6ZSgpKSwgQ29sb3JTcGFjZVNSR0IsIGN0eHQpOwotICAgICAg
ICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbWFnZU9ic2Vy
dmVyKiBvYnNlcnZlciA9IGltYWdlT2JzZXJ2ZXIoKTsKLQotICAgICAgICAvLyBUZW1wb3Jhcmls
eSByZXNldCBpbWFnZSBvYnNlcnZlciwgd2UgZG9uJ3Qgd2FudCB0byByZWNlaXZlIGFueSBjaGFu
Z2VJblJlY3QoKSBjYWxscyBkdWUgdG8gdGhpcyByZWxheW91dC4KLSAgICAgICAgc2V0SW1hZ2VP
YnNlcnZlcihudWxscHRyKTsKLQotICAgICAgICBkcmF3KGJ1ZmZlci0+Y29udGV4dCgpLCB0aWxl
UmVjdCwgdGlsZVJlY3QsIG9wLCBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlv
bigpKTsKLQotICAgICAgICBzZXRJbWFnZU9ic2VydmVyKG9ic2VydmVyKTsKLSAgICAgICAgYnVm
ZmVyLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICAgICAgbV9jYWNoZWRJbWFnZSA9
IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBVbnNjYWxlZCk7Ci0gICAg
ICAgIGlmICghbV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBjdHh0LnNldERyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKTsKLSAgICBtX2NhY2hlZEltYWdlLT5k
cmF3UGF0dGVybihjdHh0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3As
IGRlc3RSZWN0LCBibGVuZE1vZGUpOwotfQotCi0KIHZvaWQgQml0bWFwSW1hZ2U6OmFkdmFuY2VB
bmltYXRpb24oKQogewogICAgIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbigpOwpAQCAtNjgzLDM1
ICs3NDEsMjMgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aQogICAg
IHJldHVybiBhZHZhbmNlZEFuaW1hdGlvbjsKIH0KIAotQ29sb3IgQml0bWFwSW1hZ2U6OnNpbmds
ZVBpeGVsU29saWRDb2xvcigpCit2b2lkIEJpdG1hcEltYWdlOjpzdG9wQW5pbWF0aW9uKCkKIHsK
LSAgICAvLyBJZiB0aGUgaW1hZ2Ugc2l6ZSBpcyBub3QgYXZhaWxhYmxlIHlldCBvciBpZiB0aGUg
aW1hZ2Ugd2lsbCBiZSBhbmltYXRpbmcgZG9uJ3QgdXNlIHRoZSBzb2xpZCBjb2xvciBvcHRpbWl6
YXRpb24uCi0gICAgaWYgKGZyYW1lQ291bnQoKSAhPSAxKQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICBpZiAobV9zb2xpZENvbG9yKQotICAgICAgICByZXR1cm4gbV9zb2xpZENv
bG9yLnZhbHVlKCk7Ci0KLSAgICAvLyBJZiB0aGUgZnJhbWUgaW1hZ2UgaXMgbm90IGxvYWRlZCwg
Zmlyc3QgdXNlIHRoZSBkZWNvZGVyIHRvIGdldCB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCi0gICAg
aWYgKCFoYXZlRnJhbWVJbWFnZUF0SW5kZXgoMCkgJiYgbV9zb3VyY2UuZnJhbWVTaXplQXRJbmRl
eCgwLCAwKSAhPSBJbnRTaXplKDEsIDEpKSB7Ci0gICAgICAgIG1fc29saWRDb2xvciA9IENvbG9y
KCk7Ci0gICAgICAgIHJldHVybiBtX3NvbGlkQ29sb3IudmFsdWUoKTsKLSAgICB9Ci0KLSAgICAv
LyBDYWNoZSB0aGUgZnJhbWUgaW1hZ2UuIFRoZSBzaXplIHdpbGwgYmUgY2FsY3VsYXRlZCBmcm9t
IHRoZSBOYXRpdmVJbWFnZVB0ci4KLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoMCkpCi0g
ICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkp
OwotICAgIG1fc29saWRDb2xvciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
bV9mcmFtZXNbMF0ubV9pbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKG1fc29saWRDb2xv
cik7Ci0gICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOworICAgIC8vIFRoaXMgdGltZXIg
aXMgdXNlZCB0byBhbmltYXRlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGltYWdlLiBEb24ndCBp
bnZhbGlkYXRlCisgICAgLy8gdGhlIHRpbWVyIHVubGVzcyBhbGwgcmVuZGVyZXJzIGhhdmUgc3Rv
cHBlZCBkcmF3aW5nLgorICAgIGNsZWFyVGltZXIoKTsKIH0KLSAgICAKLWJvb2wgQml0bWFwSW1h
Z2U6OmNhbkFuaW1hdGUoKQorCit2b2lkIEJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigpCiB7
Ci0gICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkgPiAxOworICAgIHN0
b3BBbmltYXRpb24oKTsKKyAgICBtX2N1cnJlbnRGcmFtZSA9IDA7CisgICAgbV9yZXBldGl0aW9u
c0NvbXBsZXRlID0gMDsKKyAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IDA7CisgICAgbV9h
bmltYXRpb25GaW5pc2hlZCA9IGZhbHNlOworCisgICAgLy8gRm9yIGV4dHJlbWVseSBsYXJnZSBh
bmltYXRpb25zLCB3aGVuIHRoZSBhbmltYXRpb24gaXMgcmVzZXQsIHdlIGp1c3QgdGhyb3cgZXZl
cnl0aGluZyBhd2F5LgorICAgIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KHRydWUpOwog
fQogCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZp
c2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywyNSArNDcsOSBAQCB0eXBlZGVmIHN0cnVjdCBI
QklUTUFQX18gKkhCSVRNQVA7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIHN0
cnVjdCBGcmFtZURhdGE7Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IFZlY3RvclRyYWl0czxXZWJDb3JlOjpGcmFtZURhdGE+IDogcHVibGljIFNpbXBsZUNsYXNz
VmVjdG9yVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuSW5pdGlhbGl6ZVdp
dGhNZW1zZXQgPSBmYWxzZTsgLy8gTm90IGFsbCBGcmFtZURhdGEgbWVtYmVycyBpbml0aWFsaXpl
IHRvIDAuCi0gICAgfTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUaW1lcjsK
IAotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLSAgICBJbnRTaXplIHNpemUoY29uc3QgTmF0aXZl
SW1hZ2VQdHImKTsKLSAgICBib29sIGhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0g
ICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci19
Ci0KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQog
Ly8gRnJhbWVEYXRhIENsYXNzCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQEAgLTc1LDE4ICs1OSwyOSBAQCBwdWJsaWM6CiAgICAgRnJhbWVEYXRh
KCkKICAgICAgICAgOiBtX2hhdmVNZXRhZGF0YShmYWxzZSkKICAgICAgICAgLCBtX2lzQ29tcGxl
dGUoZmFsc2UpCi0gICAgICAgICwgbV9oYXNBbHBoYSh0cnVlKQorICAgICAgICAsIG1faGFzQWxw
aGEoZmFsc2UpCiAgICAgewogICAgIH0KIAogICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOworICAgIHsKKyAgICAgICAgY2xlYXJJbWFnZVN1YkltYWdlcyhtX2lt
YWdlKTsKICAgICB9CiAKICAgICAvLyBDbGVhciB0aGUgY2FjaGVkIGltYWdlIGRhdGEgb24gdGhl
IGZyYW1lLCBhbmQgKG9wdGlvbmFsbHkpIHRoZSBtZXRhZGF0YS4KICAgICAvLyBSZXR1cm5zIHdo
ZXRoZXIgdGhlcmUgd2FzIGNhY2hlZCBpbWFnZSBkYXRhIHRvIGNsZWFyLgotICAgIGJvb2wgY2xl
YXIoYm9vbCBjbGVhck1ldGFkYXRhKTsKKyAgICB1bnNpZ25lZCBjbGVhcihib29sIGNsZWFyTWV0
YWRhdGEpCisgICAgeworICAgICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdXNlZEZyYW1lQnl0
ZXMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjbGVhck1ldGFkYXRhKQorICAgICAgICAgICAg
bV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKKworICAgICAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSAw
OworICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gZnJhbWVCeXRl
czsKKyAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgdXNlZEZyYW1lQnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsgfQogCkBAIC0xMDUsMTAgKzEwMCw2IEBA
IHB1YmxpYzoKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KIAogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwgOiBwdWJsaWMgSW1hZ2UgewotICAgIGZy
aWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2Vu
ZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEJpdG1hcElt
YWdlPiBjcmVhdGUoTmF0aXZlSW1hZ2VQdHImJiBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNlcnZlciog
b2JzZXJ2ZXIgPSBudWxscHRyKQogICAgIHsKQEAgLTEyMyw3ICsxMTQsNyBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICB2aXJ0dWFsIH5CaXRtYXBJbWFnZSgpOwogICAgIAotICAgIGJvb2wgaGFzU2lu
Z2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc1NpbmdsZVNl
Y3VyaXR5T3JpZ2luKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8g
RmxvYXRTaXplIGR1ZSB0byBvdmVycmlkZS4KICAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtMTM0LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlZFNpemU7IH0KIAogICAgIGJvb2wgZGF0YUNo
YW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIG92ZXJyaWRlOwotICAgIFN0cmluZyBmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLmZpbGVuYW1lRXh0ZW5zaW9uKCk7
IH0KIAogICAgIC8vIEl0IG1heSBsb29rIHVudXN1YWwgdGhhdCB0aGVyZSBpcyBubyBzdGFydCBh
bmltYXRpb24gY2FsbCBhcyBwdWJsaWMgQVBJLiBUaGlzIGlzIGJlY2F1c2UKICAgICAvLyB3ZSBz
dGFydCBhbmQgc3RvcCBhbmltYXRpbmcgbGF6aWx5LiBBbmltYXRpb24gYmVnaW5zIHdoZW5ldmVy
IHNvbWVvbmUgZHJhd3MgdGhlIGltYWdlLiBJdCB3aWxsCkBAIC0xNTUsMTIgKzE0Niw2IEBAIHB1
YmxpYzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7CiAj
ZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdldENH
SW1hZ2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9m
U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+
IGdldENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4p
CiAgICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0SEJJ
VE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQsOSAr
MTU5LDEyIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFzKikg
b3ZlcnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRyIG5h
dGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNp
emUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmll
bnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50YXRp
b25BdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQotCisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRy
PiBmcmFtZXNOYXRpdmVJbWFnZXMoKSBvdmVycmlkZTsKKyAgICAKICAgICBib29sIGN1cnJlbnRG
cmFtZUtub3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc0FuaW1hdGVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mcmFtZUNvdW50ID4gMTsgfQpAQCAtMjE1LDcgKzIw
Myw2IEBAIHByb3RlY3RlZDoKICAgICBzaXplX3QgZnJhbWVDb3VudCgpOwogCiAgICAgTmF0aXZl
SW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25TY2Fs
ZUhpbnQgPSAxKTsKLSAgICBOYXRpdmVJbWFnZVB0ciBjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJ
bmRleChzaXplX3QpOwogCiAgICAgYm9vbCBoYXZlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAkocmV2aXNpb24g
MjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAj
aWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAi
TmF0aXZlSW1hZ2UuaCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAj
ZWxpZiBQTEFURk9STShNQUMpCiBPQkpDX0NMQVNTIE5TSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5
cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlUHRyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CkBAIC0xMzcsOCArMTM3LDExIEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUg
eyBTdHJldGNoVGlsZSwgUm91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAg
IHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9
CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRT
aXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVh
bCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbigpOyB9CisgICAgdmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+
IGZyYW1lc05hdGl2ZUltYWdlcygpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3Jz
IGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4KIApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVm
IGdldENHSW1hZ2VSZWYoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdl
UmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIHZpcnR1YWwgUmV0YWluUHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJh
eSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAg
IHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsg
cmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKIAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnRQb2lu
dC5oIgotI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2Uu
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKICNpbmNsdWRlICJNZWRpYVBsYXllckVudW1zLmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VQ
dHIuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybU1lZGlhU2Vzc2lvbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTmF0aXZlSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9OYXRpdmVJbWFnZS5oCShyZXZpc2lvbiAyMDU1NzgpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmg6MjA1NTc4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEw
MCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIE5hdGl2ZUltYWdlUHRyX2gKKyNkZWZpbmUgTmF0aXZlSW1hZ2VQdHJfaAorCisjaWYgVVNF
KENHKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KK3R5cGVkZWYgc3RydWN0IENHSW1hZ2Uq
IENHSW1hZ2VSZWY7CisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIK
KyNlbGlmIFVTRShXSU5HREkpCisjaW5jbHVkZSAiU2hhcmVkQml0bWFwLmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordHlwZWRlZiBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gTmF0aXZlSW1hZ2VQdHI7CisjZWxpZiBVU0UoQ0FJUk8pCit0eXBlZGVmIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltYWdlUHRyOworI2VsaWYgVVNFKFdJTkdESSkKK3R5
cGVkZWYgUmVmUHRyPFNoYXJlZEJpdG1hcD4gTmF0aXZlSW1hZ2VQdHI7CisjZW5kaWYKKworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUlt
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0
aXZlSW1hZ2UuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgg
VG9yY2ggTW9iaWxlLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5j
LgogICoKQEAgLTI1LDggKzI1LDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IE5hdGl2ZUltYWdlUHRyX2gKLSNkZWZpbmUgTmF0aXZlSW1hZ2VQdHJfaAorI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlv
bi5oIgogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTM5LDYg
KzQxLDExIEBAIHR5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRT
aXplOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCiAjaWYgVVNFKENHKQogdHlwZWRlZiBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBVU0UoQ0FJUk8pCkBAIC00
Nyw2ICs1NCwxMyBAQCB0eXBlZGVmIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltCiB0
eXBlZGVmIFJlZlB0cjxTaGFyZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOwogI2VuZGlmCiAKLX0K
K0ludFNpemUgc2l6ZU9mSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKK2Jvb2wgaGFzQWxw
aGFPZkltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7CitDb2xvciBzaW5nbGVQaXhlbFNvbGlk
Q29sb3JPZkltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7CiAKLSNlbmRpZgorZmxvYXQgc3Vi
c2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCit2b2lkIGRyYXdJbWFnZShjb25zdCBOYXRp
dmVJbWFnZVB0ciYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBj
b25zdCBJbWFnZU9yaWVudGF0aW9uJik7Cit2b2lkIGNsZWFySW1hZ2VTdWJJbWFnZXMoY29uc3Qg
TmF0aXZlSW1hZ2VQdHImKTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTmF0aXZlSW1hZ2VQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCShub25leGlzdGVu
dCkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAx
MDAgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBOYXRpdmVJbWFnZVB0cl9oCi0jZGVmaW5lIE5hdGl2ZUltYWdlUHRyX2gKLQotI2lmIFVT
RShDRykKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci10eXBlZGVmIHN0cnVjdCBDR0ltYWdl
KiBDR0ltYWdlUmVmOwotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgi
Ci0jZWxpZiBVU0UoV0lOR0RJKQotI2luY2x1ZGUgIlNoYXJlZEJpdG1hcC5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShDRykKLXR5cGVkZWYgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IE5hdGl2ZUltYWdlUHRyOwotI2VsaWYgVVNFKENBSVJPKQotdHlwZWRlZiBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBOYXRpdmVJbWFnZVB0cjsKLSNlbGlmIFVTRShXSU5HREkpCi10
eXBlZGVmIFJlZlB0cjxTaGFyZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOwotI2VuZGlmCi0KLX0K
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCShyZXZpc2lvbiAyMDU1
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5Nyw3ICsyOTcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYXVzZWRJbWFn
ZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5u
YXRpdmVJbWFnZSgpOwogICAgIEFTU0VSVChtX3BhdXNlZEltYWdlKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0
bWFwSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCShub25leGlzdGVudCkK
QEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
LQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNp
emUoaW1hZ2UuZ2V0KCkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVu
dChpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsK
LSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFn
ZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpw
aXhlbCk7Ci19Ci0KLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsCi0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwg
IWRzdC5oZWlnaHQoKSB8fCAhc3JjLndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc3RhcnRBbmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZy
YW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElm
IGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1
cm47Ci0KLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlm
IChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRzdCwgY29sb3IsIG9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQu
c2F2ZSgpOwotCi0gICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYg
KG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1h
bCAmJiAhZnJhbWVIYXNBbHBoYUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYg
RU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNp
emUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVk
U2l6ZSk7Ci0jZWxzZQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRp
ZgotCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmlt
YWdlT3JpZW50YXRpb24oKSk7Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50
YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBG
bG9hdFJlY3QgZHN0UmVjdCA9IGRzdDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhw
ZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlv
bihGbG9hdFBvaW50KCkpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0
aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChm
cmFtZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRo
ZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBh
bHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRo
ZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8g
cmV2ZXJzZSBpdCBiYWNrIGhlcmUuCi0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRz
dFJlY3QueCgpLCBkc3RSZWN0LnkoKSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRy
YXdTdXJmYWNlVG9Db250ZXh0KHN1cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgY29udGV4dCk7Ci0KLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9i
c2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQot
Ym9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xl
YXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmICht
X2ltYWdlKSB7Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2
ZUltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVk
ZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgor
I2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBzaXpl
T2ZJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCit7CisgICAgcmV0dXJuIGltYWdl
ID8gY2Fpcm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSkgOiBJbnRTaXplKCk7Cit9CisKK2Jvb2wg
aGFzQWxwaGFPZkltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKK3sKKyAgICByZXR1
cm4gIWltYWdlIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENB
SVJPX0NPTlRFTlRfQ09MT1I7Cit9CisKK0NvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1h
Z2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQoreworICAgIGlmICghaW1hZ2UgfHwgc2l6
ZU9mSW1hZ2UoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigp
OworCisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9IENBSVJP
X1NVUkZBQ0VfVFlQRV9JTUFHRSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBSR0JB
MzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0
aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitmbG9hdCBzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0
dXJuIDE7Cit9CisKK3ZvaWQgZHJhd0ltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50
YXRpb24pCit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAgLy8gU2V0IHRoZSBjb21w
b3NpdGluZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYg
bW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWhhc0FscGhhT2ZJbWFnZShpbWFnZSkpCisgICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgIGVs
c2UKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOworICAg
ICAgICAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IHNpemVPZkltYWdlKGltYWdlKTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0
ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNSZWN0LCBzY2Fs
ZWRTaXplKTsKKyNlbHNlCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChzcmNSZWN0KTsK
KyNlbmRpZgorICAgICAgICAKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RS
ZWN0OworICAgICAgICAKKyAgICBpZiAob3JpZW50YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50
YXRpb24pIHsKKyAgICAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4g
dG8gYmUgYXQgKDAsIDApLgorICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC54KCks
IGRlc3RSZWN0LnkoKSk7CisgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxv
YXRQb2ludCgpKTsKKyAgICAgICAgY29udGV4dC5jb25jYXRDVE0ob3JpZW50YXRpb24udHJhbnNm
b3JtRnJvbURlZmF1bHQoYWRqdXN0ZWREZXN0UmVjdC5zaXplKCkpKTsKKyAgICAgICAgaWYgKG9y
aWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBkZXN0
aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5
IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKKyAgICAgICAgICAgIC8vIHRoZSBpbWFn
ZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJz
ZSBpdCBiYWNrIGhlcmUuCisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoYWRq
dXN0ZWREZXN0UmVjdC5zaXplKCkudHJhbnNwb3NlZFNpemUoKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChp
bWFnZS5nZXQoKSwgYWRqdXN0ZWREZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsK
KyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKwordm9pZCBjbGVhckltYWdlU3ViSW1hZ2VzKGNv
bnN0IE5hdGl2ZUltYWdlUHRyJikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENBSVJPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDIwNTU3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCShu
b25leGlzdGVudCkKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3Jh
cGhpY3NTUEkuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9t
ZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIK
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZh
Y2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVy
biBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UuZ2V0KCkpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4mKQotewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjog
ZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVl
OwotfQotICAgIAotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxD
R0ltYWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAo
TmF0aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVy
biBDb2xvcigpOwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAg
ICBhdXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhl
bCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAg
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcp
KTsKLQotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0g
ICAgCi0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0Js
ZW5kTW9kZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgp
LCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFw
aXhlbFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJu
IENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxb
M10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29s
IEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1l
dGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1w
bGluZ0xldmVsID0gMDsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VT
Ci0gICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2Vu
ZGlmCi0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRD
R0ltYWdlUmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19
Ci0KLUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJl
ZiBjZ0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0lt
YWdlICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0
KGNnSW1hZ2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQot
Ci0gICAgLy8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBm
aW5kIHRoZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0
YWluUHRyPENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAg
IHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJy
YXlDcmVhdGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1h
Z2VSZWYgY3VyckZyYW1lID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAg
ICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVy
biBhZG9wdENGKGFycmF5KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1v
ZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAg
c3RhcnRBbmltYXRpb24oKTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlOwotICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRv
IFBERiBjb250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0
Zm9ybUNvbnRleHQoKSkpCi0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0
SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNm
b3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVj
dCwgQ0dDb250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxv
YXQgc3Vic2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zv
cm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zv
cm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQot
ICAgICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1w
bGluZ1NjYWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJs
eSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlz
VmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNv
bG9yLCBjb21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJz
YW1wbGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBz
aXplKCkuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgp
KSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3Qg
aXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhh
dmUgdG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2Fs
ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAg
ICAgICBGbG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7
Ci0gICAgICAgIEZsb2F0UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBp
bWFnZVNpemUpOwotICAgICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmln
aW5hbEltYWdlQm91bmRzLCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAg
ICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAg
ICBvcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsK
LQotICAgIGN0eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBz
Y2FsZWRTcmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAg
ICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXco
dGhpcyk7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2Nh
bGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBm
cmFtZUNvdW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49
IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNh
Y2hlRnJhbWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1w
bGluZ0xldmVsKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAg
ICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19
Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgi
CisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvcmVHcmFw
aGljc1NQSS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCisjaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIgorCisjaWYgUExBVEZP
Uk0oV0lOKQorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUgc2l6ZU9m
SW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQoreworICAgIHJldHVybiBpbWFnZSA/
IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChp
bWFnZS5nZXQoKSkpIDogSW50U2l6ZSgpOworfQorCitib29sIGhhc0FscGhhT2ZJbWFnZShjb25z
dCBOYXRpdmVJbWFnZVB0ciYpCit7CisgICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhl
IHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0NvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1hZ2UoY29u
c3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQoreworICAgIGlmICghaW1hZ2UgfHwgc2l6ZU9mSW1h
Z2UoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisg
ICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdCQQorICAgIGF1dG8gYml0bWFwQ29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2Yo
cGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExh
c3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZykpOworCisgICAgaWYgKCFiaXRtYXBDb250ZXh0
KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShi
aXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3
SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2Uu
Z2V0KCkpOworCisgICAgaWYgKCFwaXhlbFszXSkKKyAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAs
IDAsIDApOworCisgICAgcmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBp
eGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVs
WzNdKTsKK30KKworZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkK
K3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQ
REYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsKKworICAgIENHUmVjdCB0cmFuc2Zv
cm1lZERlc3RpbmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0
LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHJldHVy
biBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Qu
c2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Qu
c2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgZHJhd0ltYWdlKGNv
bnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29u
c3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pCit7CisgICAgLy8gU3Vic2FtcGxpbmcg
bWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgor
ICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemVPZkltYWdlKGltYWdlKTsKKwor
ICAgIC8vIHNyY1JlY3QgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQg
aW1hZ2UsIHNvIHdlIGhhdmUgdG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgorICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGlmIChzdWJzYW1wbGVk
SW1hZ2VTaXplICE9IHNyY1NpemUpCisgICAgICAgIGFkanVzdGVkU3JjUmVjdCA9IG1hcFJlY3Qo
c3JjUmVjdCwgRmxvYXRSZWN0KHsgfSwgc3JjU2l6ZSksIEZsb2F0UmVjdCh7IH0sIHN1YnNhbXBs
ZWRJbWFnZVNpemUpKTsKKworICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBzdWJz
YW1wbGVkSW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcCwgbW9kZSwgb3Jp
ZW50YXRpb24pOworfQorCit2b2lkIGNsZWFySW1hZ2VTdWJJbWFnZXMoY29uc3QgTmF0aXZlSW1h
Z2VQdHImIGltYWdlKQoreworI2lmIENBQ0hFX1NVQklNQUdFUworICAgIGlmIChpbWFnZSkKKyAg
ICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UoaW1hZ2UuZ2V0KCkpOworI2VuZGlmCit9
CisKK30KKworI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAkocmV2aXNpb24gMjA1NTc4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxh
dGZvcm1QYXR0CiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGluIGJvdGggZGlyZWN0aW9ucywg
d2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAvLyBpbnN0ZWFkIG9mIGN1c3Rv
bSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNyYWNrcy4KICAgICBpZiAo
bV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRl
V2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCksIHBhdHRl
cm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CisgICAgICAgIHJl
dHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+
bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29u
c3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBm
b3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBv
ZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4K
QEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dAogICAgIENHRmxvYXQgeVN0ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVjdC5oZWlnaHQoKSA6ICgx
IDw8IDIyKTsKIAogICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFzZSB0aGUgQ0dJbWFnZVJl
ZiB3aGVuIGl0J3MgZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVhc2VDYWxsYmFjawotICAg
IENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4odGlsZUltYWdlKCktPmdl
dENHSW1hZ2VSZWYoKSk7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gdGlsZUltYWdl
KCktPm5hdGl2ZUltYWdlKCkubGVha1JlZigpOwogCiAgICAgY29uc3QgQ0dQYXR0ZXJuQ2FsbGJh
Y2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFjaywgcGF0dGVyblJlbGVh
c2VDYWxsYmFjayB9OwogICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUocGxhdGZvcm1JbWFnZSwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwga0NHUGF0dGVyblRpbGlu
Z0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCShyZXZpc2lvbiAyMDU1NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25Db2NvYTo6flRleHRUcmFjawogdm9pZCBUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkNvY29hOjp1cGRhdGUoKQogewogICAgIGlmIChhdXRvIHJlcHJlc2VudGF0aW9uID0g
bV9jbGllbnQuY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpKQotICAgICAgICBb
bV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPmdldENHSW1hZ2VS
ZWYoKV07CisgICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNlbnRh
dGlvbi0+bmF0aXZlSW1hZ2UoKS5nZXQoKV07CiB9CiAKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25Db2NvYTo6c2V0Q29udGVudFNjYWxlKGZsb2F0IHNjYWxlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQkocmV2aXNpb24g
MjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03OSwzMSArNzksMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcElt
YWdlOjpnZXRUSUZGUmVwcmVzZW50YQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVy
biBtX3RpZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50
KCk7CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsK
IAotICAgIC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMg
aW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6
ZSgpIGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUg
dmFsaWQgZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVs
bHksCiAgICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0g
dGhlIGNvbnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1h
Z2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAo
Y2dJbWFnZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0
aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgw
LCAwKSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24g
PSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtV
VFR5cGVUSUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwg
MCkpOwogCiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlk
RnJhbWVzOyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0
aW9uLmdldCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5h
dGl2ZUltYWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlv
bkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYzo6dXBkYXRlUAogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOwor
ICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBp
ZiAoIW1fcHJldmlld0ltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTE1NCw3ICsxNTQs
NyBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQCiAKIHZvaWQgTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVNhbXBsZUJ1ZmZlcigpCiB7Ci0gICAgYXV0
byBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoaW1hZ2VCdWZmZXIoKS0+Y29w
eUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVs
QnVmZmVyRnJvbUNHSW1hZ2UoaW1hZ2VCdWZmZXIoKS0+Y29weUltYWdlKCktPm5hdGl2ZUltYWdl
KCkuZ2V0KCkpOwogICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gQ01TYW1wbGVCdWZmZXJGcm9tUGl4
ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCkpOwogICAgIAogICAgIG1lZGlhRGF0YVVwZGF0ZWQo
TWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAJKHJldmlz
aW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw5ICsxMzYsOSBAQCBEcmFnSW1hZ2VSZWYgY3Jl
YXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oZHJhd0NvbnRl
eHQsIDEsIC0xKTsKICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3IoZHJhd0NvbnRleHQsIHdoaXRl
KTsKICAgICBDR0NvbnRleHRGaWxsUmVjdChkcmF3Q29udGV4dCwgcmVjdCk7Ci0gICAgaWYgKGF1
dG8gc3JjSW1hZ2UgPSBpbWctPmdldENHSW1hZ2VSZWYoKSkgeworICAgIGlmIChhdXRvIHNyY0lt
YWdlID0gaW1nLT5uYXRpdmVJbWFnZSgpKSB7CiAgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9k
ZShkcmF3Q29udGV4dCwga0NHQmxlbmRNb2RlTm9ybWFsKTsKLSAgICAgICAgQ0dDb250ZXh0RHJh
d0ltYWdlKGRyYXdDb250ZXh0LCByZWN0LCBzcmNJbWFnZSk7CisgICAgICAgIENHQ29udGV4dERy
YXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UuZ2V0KCkpOwogICAgIH0KICAgICBD
R0NvbnRleHRSZWxlYXNlKGRyYXdDb250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
MjA1NTc4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjYgQEAKKzIwMTYtMDktMDggIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdh
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHRoZSBCaXRtYXBJbWFnZSBwbGF0Zm9ybSBkZXBl
bmRlbnQgY29kZSB0byBhIG5ldyBmaWxlIG5hbWVkIE5hdGl2ZUltYWdlW0NHfENhaXJvXS5jcHAK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwOgorICAgICAgICAoV0tJY29uRGF0YWJh
c2VUcnlHZXRDR0ltYWdlRm9yVVJMKToKKyAgICAgICAgKFdLSWNvbkRhdGFiYXNlVHJ5Q29weUNH
SW1hZ2VBcnJheUZvclVSTCk6CisgICAgICAgIEl0IHdhcyB0aGUgb25seSBwbGFjZSBpbiB0aGUg
Y29kZSB3aGljaCB1c2VzIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKS4KKyAgICAgICAg
Q2FsbCBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkgaW5zdGVhZCBhbmQgZm9ybSB0
aGUgcmV0dXJuZWQKKyAgICAgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBidWlsZCB0aGUgQ0ZB
cnJheVJlZi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaDoKKyAgICAg
ICAgSW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIgaW5zdGVhZCBvZiAiTmF0aXZlSW1hZ2VQdHIuaCIu
CisgICAgICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9wcmVzZW50YXRpb25TbmFwc2hvdEZv
clByZXZpZXdJdGVtQ29udHJvbGxlcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmlzQWxtb3N0U29saWRDb2xvcik6Cisg
ICAgICAgIENhbGwgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYoKSBpbnN0ZWFkIG9mIGNhbGxp
bmcgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkuCisKIDIwMTYtMDktMDcgIERhbiBCZXJuc3Rl
aW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSAudGJkIGZpbGVzIGZvciB0aGUg
c2hpbXMgZW5kIHVwIGluc3RhbGxlZCB3aGVuIGJ1aWxkaW5nIHdpdGggR0VORVJBVEVfVEVYVF9C
QVNFRF9TVFVCUz1ZRVMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRh
dGFiYXNlLmgJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJJY29uRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIldlYkljb25EYXRhYmFzZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFi
YXNlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9OYXRpdmVJbWFnZVB0ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmF0aXZlSW1hZ2UuaD4K
IAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBEYXRhOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAkocmV2aXNp
b24gMjA1NTc4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRh
dGFiYXNlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiBDR0ltYWdlUmVmIFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZv
clVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwg
V0tTaXplIHNpemUpCiB7CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJl
ZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1h
Z2UgPyBpbWFnZS0+Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8
aW50PihzaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKSA6IDA7Cisg
ICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGlj
X2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5n
ZXQoKSA6IG51bGxwdHI7CiB9CiAKIENGQXJyYXlSZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJ
bWFnZUFycmF5Rm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxS
ZWYgdXJsUmVmKQogewogICAgIEltYWdlKiBpbWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYp
LT5pbWFnZUZvclBhZ2VVUkwodG9XVEZTdHJpbmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdl
ID8gaW1hZ2UtPmdldENHSW1hZ2VBcnJheSgpLmxlYWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGlt
YWdlLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFy
cmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUobnVsbHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwg
JmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0
aXZlSW1hZ2VzKQorICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdl
LmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRh
aW4oYXJyYXkpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJldmlzaW9uIDIwNTU3OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MTMxLDcgKzQxMzEsNyBAQCAtIChVSUltYWdlICopX3By
ZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJlCiB7CiAgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1hdGlv
bi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfcG9zaXRpb25JbmZv
cm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+Z2V0Q0dJbWFnZVJlZigpXSBhdXRv
cmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpf
cG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+bmF0aXZlSW1h
Z2UoKS5nZXQoKV0gYXV0b3JlbGVhc2VdOwogfQogCiAtIChOU0FycmF5ICopX3ByZXNlbnRhdGlv
blJlY3RzRm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJvbGxlciAq
KWNvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczMCw3
ICsxNzMwLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojp3aW5kb3dlZFBsdWdpblZpc2liaWxpdAogI2lm
IFBMQVRGT1JNKENPQ09BKQogc3RhdGljIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcElt
YWdlKiBiaXRtYXApCiB7Ci0gICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFn
ZVJlZigpOworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBiaXRtYXAtPm5hdGl2ZUltYWdlKCkuZ2V0
KCk7CiAgICAgQVNTRVJUKENHSW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsK
IAogICAgIENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhpbWFn
ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU2NTApCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0w
OS0wOCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgdGhlIEJpdG1hcEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIHRvIGEgbmV3
IGZpbGUgbmFtZWQgTmF0aXZlSW1hZ2VbQ0d8Q2Fpcm9dLmNwcAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vRE9NLm1tOgorICAgICAgICAoLVtE
T01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIE1p
c2MvV2ViQ2FjaGUubW06CisgICAgICAgICgrW1dlYkNhY2hlIGltYWdlRm9yVVJMOl0pOgorICAg
ICAgICBSZXBsYWNlIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlUmVmKCkgd2l0aCBCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2UoKS4KKwogMjAxNi0wOS0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEFkZHJlc3Mgc29tZSBjbGFuZyBzdGF0aWMg
YW5hbHl6ZXIgd2FybmluZ3MgaW4gV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9ET00v
RE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET00ubW0JKHJldmlz
aW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET00ubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTU2MSw3ICs1NjEsNyBAQCAtICh2b2lkKWdldFByZXZpZXdTbmFwc2hvdEltYWdlOihD
R0ltYWdlCiAKICAgICBpZiAodGV4dEluZGljYXRvcikgewogICAgICAgICBpZiAoSW1hZ2UqIGlt
YWdlID0gdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCkpCi0gICAgICAgICAgICAqY2dJbWFn
ZSA9IChDR0ltYWdlUmVmKUNGQXV0b3JlbGVhc2UoQ0dJbWFnZVJldGFpbihpbWFnZS0+Z2V0Q0dJ
bWFnZVJlZigpKSk7CisgICAgICAgICAgICAqY2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgp
LmF1dG9yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBy
ZWN0QXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjA0LDcgKzIw
NCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JVUkw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29y
ZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0gZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1h
Z2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+
Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJ
bWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288291</attachid>
            <date>2016-09-08 11:40:54 -0700</date>
            <delta_ts>2016-09-08 15:07:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160908113827.patch</filename>
            <type>text/plain</type>
            <size>82743</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBAQAorMjAxNi0wOS0wOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IEJpdG1hcEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIHRvIGEgbmV3IGZpbGUgbmFtZWQg
TmF0aXZlSW1hZ2VbQ0d8Q2Fpcm9dLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yaW5nIHBhdGNoLiBJdCBtb3ZlcyB0
aGUgQml0bWFwSW1hZ2UgcGxhdGZvcm0gZGVwZW5kZW50CisgICAgICAgIGNvZGUgZnJvbSBCaXRt
YXBJbWFnZSB0byBOYXRpdmVJbWFnZVtDR3xDYWlyb10uY3BwLiBUaGUgbmV3IEFQSXMgYXJlCisg
ICAgICAgIHJlc3BvbnNpYmxlIG9mIGRyYXdpbmcgYSBOYXRpdmVJbWFnZVB0ciBhbmQgYW5zd2Vy
aW5nIHNvbWUgbWV0YWRhdGEgcXVlcmllcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29k
ZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQ
bGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAg
KiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oOgor
ICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaDoKKyAgICAgICAgKiBwYWdl
L21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tOgorICAgICAgICAoLVtXZWJUZXh0SW5kaWNhdG9y
VmlldyBpbml0V2l0aEZyYW1lOnRleHRJbmRpY2F0b3I6bWFyZ2luOm9mZnNldDpdKToKKyAgICAg
ICAgKGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24pOgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNv
ZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRh
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2xlYXJUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3RhcnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6cmVzZXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Omhhc1Np
bmdsZVNlY3VyaXR5T3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmaWxlbmFtZUV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6RnJhbWVE
YXRhKToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBmYWxzZSBi
ZWNhdXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAgQml0bWFwSW1hZ2U6OmZyYW1l
SGFzQWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkgbV9oYXZlTWV0YWRhdGEuCisg
ICAgICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxwaGEgYXJlIHNldCBpbiBCaXRt
YXBJbWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0bWFwSW1hZ2U6OmNhY2hlRnJh
bWUoKS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ljb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0
aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpvcmllbnRhdGlvbkZvckN1cnJl
bnRGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0Q0dJbWFnZVJl
Zik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVm
T2ZTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlQXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjp1cGRhdGVQYXVzZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6c2l6ZU9mSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aGFzQWxwaGFPZkltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJJbWFnZVN1YkltYWdlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6c2l6ZU9mSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aGFzQWxwaGFP
ZkltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJJbWFnZVN1YkltYWdlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbToKKyAgICAg
ICAgKFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVNhbXBsZUJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDktMDcgIEVy
aWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01lZGlhU3Ry
ZWFtXSBhcHBseUNvbnN0cmFpbnRzIHB0LiAyIC0gYWR2YW5jZWQgY29uc3RyYWludHMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNpb24gMjA1NTc4KQorKysg
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTcyLDYgKzcxLDcg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW50UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1F
ZmwuY21ha2UJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAog
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1w
bC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTM1LDYgKzEzNCw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0
dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4
dENhaXJvLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwNTU3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNyArMTA1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyby5jcHAKQEAgLTExNiw2ICsxMTUsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzg1LDcgKzM4
NSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXllci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNH
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTQwMiw2ICs0MDEsNyBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2lu
dENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RDRy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
TmF0aXZlSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bVdpbkNhaXJvLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2lu
Q2Fpcm8uY21ha2UJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luQ2Fpcm8uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
RmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
LmNwcApAQCAtMzEsNiArMzAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW50UmVjdENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUlt
YWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyNCw3ICsxNDI0LDcgQEAKIAkJMzc1Q0QyMzIxMTlE
NDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRp
b24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc2RENDRTAxM0I0
Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBB
RDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3Zl
cmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdl
Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovOyB9OworCQkzNzdB
M0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogTmF0aXZlSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1Qzcg
LyogTmF0aXZlSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIzMEI3RDE4ODYwMEE1Njk5OCAv
KiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9y
LmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5
QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1RUYzOTAwRjRCNjYxIC8qIENy
ZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjUxMyw3ICsyNTEz
LDcgQEAKIAkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGRUE4NjgwOTgzM0FERTAwQkVE
NEFCIC8qIFBhZ2UuY3BwICovOyB9OwogCQk2OUE2Q0JBQzFDNkJFNDJDMDBCODM2RTkgLyogQWNj
ZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjk3MTAxMDcxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlT
VkdFbGVtZW50LmNwcCAqLzsgfTsKIAkJNjlBNkNCQUQxQzZCRTQyQzAwQjgzNkU5IC8qIEFjY2Vz
c2liaWxpdHlTVkdFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2OTcxMDEwODFDNkJFMTU1MDAxOEM3RjEgLyogQWNjZXNzaWJpbGl0eVNWR0Vs
ZW1lbnQuaCAqLzsgfTsKLQkJNkIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdl
UHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjM0
ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFC
NDEgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZCNjkzQTJFMUM1
MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkI2OTNBMkQxQzUxQTgyRTAwQjAzQkVGIC8q
IFJlc291cmNlTG9hZE9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkI2OTNBMzQxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291cmNlTG9h
ZE9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZCNjkzQTMzMUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAg
Ki87IH07CiAJCTZDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkM0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlci5jcHAgKi87IH07CkBAIC04MzQ3LDcgKzgzNDcsNyBAQAogCQkzNzZEQ0NF
MDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Mzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVy
bGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogTmF0aXZlSW1h
Z2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXRpdmVJbWFn
ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdEMTg4NjAw
QTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3Jl
ZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3JlZGVudGlh
bEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NDcsNyArOTU0Nyw3IEBA
CiAJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjk3MTAxMDcxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlT
VkdFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjk3MTAxMDgxQzZC
RTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFn
ZVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlSW1hZ2VQdHIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQx
IC8qIE5hdGl2ZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRp
dmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjY5M0EyRDFDNTFBODJF
MDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291cmNlTG9hZE9ic2VydmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZE9i
c2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkM0Qzk2REExQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENv
bnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA0OTAsNyArMjA0
OTAsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVD
NyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUg
LyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVj
dENHLmNwcCAqLywKQEAgLTIwNTE3LDYgKzIwNTE2LDcgQEAKIAkJCQlBODBBMzhGRDBFNTBDQzgy
MDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0MDAyQ0U2
NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1MzgxNDAwMkNF
NjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1
QzcgLyogTmF0aXZlSW1hZ2VDRy5jcHAgKi8sCiAJCQkJMUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlF
IC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwICovLAogCQkJCTFGQzQwRkI3MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi8sCiAJCQkJQjI3NTM1MkEwQjA1
MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwICovLApAQCAtMjA3MDgs
NyArMjA3MDgsNyBAQAogCQkJCUNEREMxRTc5MThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQuaCAqLywKIAkJCQkzMTRCRTNBNDFCMzEwM0ZCMDAxNDE5ODIgLyogTmFt
ZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQkzMTRCRTNBNTFCMzEwM0ZCMDAxNDE5
ODIgLyogTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmggKi8sCi0JCQkJNkIzNDgwOTIwRUVGNTBE
NDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggKi8sCisJCQkJNkIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIE5hdGl2ZUltYWdlLmggKi8sCiAJCQkJQjI3NTM1NTIwQjA1MzgxNDAwMkNFNjRG
IC8qIFBhdGguY3BwICovLAogCQkJCUIyNzUzNTUzMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmgg
Ki8sCiAJCQkJQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5j
cHAgKi8sCkBAIC0yNTY3OSw3ICsyNTY3OSw3IEBACiAJCQkJMzE0QkUzQTcxQjMxMDNGQjAwMTQx
OTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgx
ODcyMjMwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTgxODcyMUUwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNkIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggaW4g
SGVhZGVycyAqLywKKwkJCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTgzQjJEMTc1MUI4QkNENkEwMEEwMkU0NyAvKiBOYXRpdmVO
b2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTBCOUI2QzBCNzQ3NTk5MDAzRUQ4OTAg
LyogTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0NDRjAyNzBB
RjZDNTI5MDAwMThFODkgLyogTmF2aWdhdGlvbkFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NzU3NCw3ICsyNzU3NCw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVh
ZEZpbHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFB
MzU5IC8qIEJpcXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBC
NDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3
QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIE5hdGl2ZUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFGRkM0NTQxRDVFODFDQjAwMjY3QTY2IC8qIEJsYWNrbGlzdFVwZGF0
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxv
Yi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxv
YkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAK
ICNpZm5kZWYgQ2FjaGVfaAogI2RlZmluZSBDYWNoZV9oCiAKLSNpbmNsdWRlICJOYXRpdmVJbWFn
ZVB0ci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW5IYXNoLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmgJKHJl
dmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBJY29uRGF0
YWJhc2VCYXNlX2gKICNkZWZpbmUgSWNvbkRhdGFiYXNlQmFzZV9oCiAKLSNpbmNsdWRlICJOYXRp
dmVJbWFnZVB0ci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldp
bmRvdy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNh
dG9yV2luZG93Lm1tCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsOSArMTYyLDkg
QEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcgogICAgIGNvbnRlbnRz
SW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNj
YWxlRmFjdG9yKCkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwog
ICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRDcm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkK
LSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAgY29udGVudHNJbWFnZSA9IF90
ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7
CiAgICAgZWxzZQotICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRl
bnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4
dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF0pOwogCkBAIC0yNjUsNyArMjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxD
QUtleWZyYW1lQW5pbWF0aW9uPiBjcgogc3RhdGljIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9u
PiBjcmVhdGVDb250ZW50Q3Jvc3NmYWRlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0aW9u
LCBUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9yKQogewogICAgIFJldGFpblB0cjxDQUJhc2lj
QW5pbWF0aW9uPiBjcm9zc2ZhZGVBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRp
b25XaXRoS2V5UGF0aDpAImNvbnRlbnRzIl07Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNv
bnRlbnRzSW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRzSW1hZ2UgPSB0ZXh0SW5kaWNh
dG9yLmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFnZSgpOwogICAgIFtjcm9zc2ZhZGVBbmltYXRp
b24gc2V0VG9WYWx1ZTooaWQpY29udGVudHNJbWFnZS5nZXQoKV07CiAgICAgW2Nyb3NzZmFkZUFu
aW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKICAgICBbY3Jvc3NmYWRl
QW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjA1
NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsMTEgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKE5hdGl2ZUltYWdlUHRyJgogewogICAgIC8vIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBkZWNv
ZGVyLCB3ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZSBpbWFnZSBvcmllbnRhdGlvbi4KICAgICAvLyBT
ZXQgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uIHRvIGJlIHRoZSBzYW1lIGFzIG1fc2l6ZSBz
byBpdCdzIG5vdCAweDAuCi0gICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zaXpl
ID0gTmF0aXZlSW1hZ2U6OnNpemUoaW1hZ2UpOworICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbiA9IG1fc2l6ZSA9IHNpemVPZkltYWdlKGltYWdlKTsKICAgICBtX2RlY29kZWRTaXplID0g
bV9zaXplLmFyZWEoKSAqIDQ7Ci0gICAgCisKICAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1f
ZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOworICAg
IG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBoYXNBbHBoYU9mSW1hZ2UoaW1hZ2UpOwogICAgIG1f
ZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKICAgICBtX2ZyYW1lc1swXS5tX2ltYWdl
ID0gV1RGTW92ZShpbWFnZSk7CiB9CkBAIC04NSwxOCArODUsNiBAQCBCaXRtYXBJbWFnZTo6fkJp
dG1hcEltYWdlKCkKICAgICBzdG9wQW5pbWF0aW9uKCk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6
OmNsZWFyVGltZXIoKQotewotICAgIG1fZnJhbWVUaW1lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQg
Qml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIoZG91YmxlIGRlbGF5KQotewotICAgIEFTU0VSVCghbV9m
cmFtZVRpbWVyKTsKLSAgICBtX2ZyYW1lVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigq
dGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKTsKLSAgICBtX2ZyYW1lVGltZXIt
PnN0YXJ0T25lU2hvdChkZWxheSk7Ci19Ci0KIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQo
KSkKQEAgLTEwOCwxMSArOTYsNiBAQCBib29sIEJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0
SW5kZXgoCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwogfQogCi1ib29sIEJp
dG1hcEltYWdlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRl
c3Ryb3lBbGwpCiB7CiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQgPSAwOwpAQCAtMTI1
LDkgKzEwOCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib28KICAg
ICAgICAgLy8gVGhlIHVuZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdl
J3JlIGp1c3QgdHJ5aW5nIHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZy
YW1lYnVmZmVyIGRhdGEpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRo
ZSBtZXRhZGF0YS4KLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1f
ZnJhbWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAg
ICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0
ZXNDbGVhcmVkICs9IG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKTsKICAgICB9CiAKICAgICBtX3Nv
dXJjZS5jbGVhcihkZXN0cm95QWxsLCBjbGVhckJlZm9yZUZyYW1lLCBkYXRhKCksIG1fYWxsRGF0
YVJlY2VpdmVkKTsKQEAgLTE1MCw4ICsxMzEsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGFJZk5lCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGFsbEZyYW1l
Qnl0ZXMgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGFsbEZyYW1lQnl0ZXMgKz0gbV9mcmFtZXNbaV0udXNlZEZyYW1lQnl0ZXMo
KTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpCisgICAgICAgIGFsbEZyYW1lQnl0
ZXMgKz0gZnJhbWUudXNlZEZyYW1lQnl0ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4g
bGFyZ2VBbmltYXRpb25DdXRvZmYpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdl
ICVwIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFt
ZUJ5dGVzPSV1IGN1dG9mZj0ldSIsIHRoaXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9u
Q3V0b2ZmKTsKQEAgLTI4OCwyMSArMjY5LDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFu
Z2VkKGJvb2wgYWxsRGEKICAgICAvLyBmcmFtZSBhZmZlY3RlZCBieSBhcHBlbmRpbmcgbmV3IGRh
dGEgaGVyZS4gVGh1cyB3ZSBoYXZlIHRvIGNsZWFyIGFsbCB0aGUKICAgICAvLyBpbmNvbXBsZXRl
IGZyYW1lcyB0byBiZSBzYWZlLgogICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkID0gMDsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAg
Zm9yIChhdXRvJiBmcmFtZSA6IG1fZnJhbWVzKSB7CiAgICAgICAgIC8vIE5PVEU6IERvbid0IGNh
bGwgZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgpIGhlcmUsIHRoYXQgd2lsbCB0cnkgdG8KICAgICAg
ICAgLy8gZGVjb2RlIGFueSB1bmNhY2hlZCAoaS5lLiBuZXZlci1kZWNvZGVkIG9yCiAgICAgICAg
IC8vIGNsZWFyZWQtb24tYS1wcmV2aW91cy1wYXNzKSBmcmFtZXMhCi0gICAgICAgIHVuc2lnbmVk
IGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2Zy
YW1lc1tpXS5tX2hhdmVNZXRhZGF0YSAmJiAhbV9mcmFtZXNbaV0ubV9pc0NvbXBsZXRlKQotICAg
ICAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gKG1fZnJhbWVzW2ldLmNsZWFyKHRydWUpID8g
ZnJhbWVCeXRlcyA6IDApOworICAgICAgICBpZiAoZnJhbWUubV9oYXZlTWV0YWRhdGEgJiYgIWZy
YW1lLm1faXNDb21wbGV0ZSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1l
LmNsZWFyKHRydWUpOwogICAgIH0KICAgICBkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVC
eXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdo
eSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9TPwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAg
ICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1l
c1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1l
c1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5
dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6ZSgpIC0gMV0uY2xlYXIodHJ1ZSkpIHsKICAgICAg
ICAgICAgIGRlbHRhQnl0ZXMgKz0gYnl0ZXM7CiAgICAgICAgICAgICBkZWx0YUJ5dGVzICs9IG1f
ZGVjb2RlZFByb3BlcnRpZXNTaXplOwogICAgICAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1Np
emUgPSAwOwpAQCAtMzM3LDExICszMTYsNiBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdl
ZChib29sIGFsbERhCiAgICAgcmV0dXJuIGlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1TdHJpbmcg
Qml0bWFwSW1hZ2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9z
b3VyY2UuZmlsZW5hbWVFeHRlbnNpb24oKTsKLX0KLQogc2l6ZV90IEJpdG1hcEltYWdlOjpmcmFt
ZUNvdW50KCkKIHsKICAgICBpZiAoIW1faGF2ZUZyYW1lQ291bnQpIHsKQEAgLTM5NCw4ICszNjgs
NyBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0CiAgICAgICAgIExP
RyhJbWFnZXMsICIgIHN1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nIiwgbV9mcmFt
ZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGltYWdl
IGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVjb2RlIGEg
bGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKKyAg
ICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFyKHRydWUpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0g
c2l6ZUNoYW5nZTsKICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTQwOCw2ICszODEs
NDMgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdAogCiAgICAgcmV0
dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwogfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgo
MCk7Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50
KCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAg
ICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdl
ICYmIHNpemVPZkltYWdlKGltYWdlKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdl
OworICAgIH0KKyAgICAKKyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2Ug
aWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJ
bmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3Vy
cmVudEZyYW1lKTsKK30KKworVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBCaXRtYXBJbWFnZTo6ZnJh
bWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGltYWdlczsK
KyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChhdXRvIGltYWdlID0gZnJhbWVJ
bWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMuYXBwZW5kKGltYWdlKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKK30KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJ
c0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CkBAIC00MjUsMTEgKzQzNSw2IEBAIGZs
b2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCgKICAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1fZHVyYXRpb247CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdElu
ZGV4KGN1cnJlbnRGcmFtZSgpKTsKLX0KLQogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChp
bmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQpAQCAtNDU3LDYgKzQ2MiwzMiBAQCBJbWFnZU9yaWVu
dGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVuCiAgICAgcmV0dXJuIG1fc291cmNlLm9yaWVu
dGF0aW9uQXRJbmRleChpbmRleCk7CiB9CiAKK0NvbG9yIEJpdG1hcEltYWdlOjpzaW5nbGVQaXhl
bFNvbGlkQ29sb3IoKQoreworICAgIC8vIElmIHRoZSBpbWFnZSBzaXplIGlzIG5vdCBhdmFpbGFi
bGUgeWV0IG9yIGlmIHRoZSBpbWFnZSB3aWxsIGJlIGFuaW1hdGluZyBkb24ndCB1c2UgdGhlIHNv
bGlkIGNvbG9yIG9wdGltaXphdGlvbi4KKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAg
ICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKG1fc29saWRDb2xvcikKKyAgICAgICAgcmV0
dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOworCisgICAgLy8gSWYgdGhlIGZyYW1lIGltYWdlIGlz
IG5vdCBsb2FkZWQsIGZpcnN0IHVzZSB0aGUgZGVjb2RlciB0byBnZXQgdGhlIHNpemUgb2YgdGhl
IGltYWdlLgorICAgIGlmICghaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KDApICYmIG1fc291cmNlLmZy
YW1lU2l6ZUF0SW5kZXgoMCwgMCkgIT0gSW50U2l6ZSgxLCAxKSkgeworICAgICAgICBtX3NvbGlk
Q29sb3IgPSBDb2xvcigpOworICAgICAgICByZXR1cm4gbV9zb2xpZENvbG9yLnZhbHVlKCk7Cisg
ICAgfQorCisgICAgLy8gQ2FjaGUgdGhlIGZyYW1lIGltYWdlLiBUaGUgc2l6ZSB3aWxsIGJlIGNh
bGN1bGF0ZWQgZnJvbSB0aGUgTmF0aXZlSW1hZ2VQdHIuCisgICAgaWYgKCFlbnN1cmVGcmFtZUlz
Q2FjaGVkKDApKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIEFTU0VSVChtX2ZyYW1l
cy5zaXplKCkpOworICAgIG1fc29saWRDb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1h
Z2UobV9mcmFtZXNbMF0ubV9pbWFnZSk7CisgICAgCisgICAgQVNTRVJUKG1fc29saWRDb2xvcik7
CisgICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOworfQorCiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAogYm9vbCBCaXRtYXBJbWFnZTo6bm90U29saWRDb2xvcigpCiB7CkBAIC00NzgsMTEgKzUw
OSw5MiBAQCBpbnQgQml0bWFwSW1hZ2U6OnJlcGV0aXRpb25Db3VudChib29sIGltCiAgICAgcmV0
dXJuIG1fcmVwZXRpdGlvbkNvdW50OwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJl
Y3QuaXNFbXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNl
CisgICAgc3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgorCisgICAgQ29sb3IgY29sb3IgPSBzaW5n
bGVQaXhlbFNvbGlkQ29sb3IoKTsKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAg
IGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleCht
X2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZShjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCkpOworICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUg
YW4gaW1hZ2UgeWV0LgorICAgICAgICByZXR1cm47CisKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAgaWYgKGRlc2Ny
aXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRp
b24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJy
ZW50RnJhbWUpOworCisgICAgZHJhd0ltYWdlKGltYWdlLCBjb250ZXh0LCBkZXN0UmVjdCwgc3Jj
UmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworCisgICAgaWYgKGltYWdlT2Jz
ZXJ2ZXIoKSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOworfQorICAg
IAordm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCit7CisgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFjdHh0LmRyYXdMdW1pbmFuY2VNYXNrKCkpIHsKKyAgICAgICAgSW1hZ2U6
OmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KCFtX2NhY2hlZEltYWdlKSB7CisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoZXhwYW5kZWRJbnRTaXplKHRpbGVSZWN0LnNpemUoKSksIENv
bG9yU3BhY2VTUkdCLCBjdHh0KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBpbWFnZU9ic2VydmVy
KCk7CisKKyAgICAgICAgLy8gVGVtcG9yYXJpbHkgcmVzZXQgaW1hZ2Ugb2JzZXJ2ZXIsIHdlIGRv
bid0IHdhbnQgdG8gcmVjZWl2ZSBhbnkgY2hhbmdlSW5SZWN0KCkgY2FsbHMgZHVlIHRvIHRoaXMg
cmVsYXlvdXQuCisgICAgICAgIHNldEltYWdlT2JzZXJ2ZXIobnVsbHB0cik7CisKKyAgICAgICAg
ZHJhdyhidWZmZXItPmNvbnRleHQoKSwgdGlsZVJlY3QsIHRpbGVSZWN0LCBvcCwgYmxlbmRNb2Rl
LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CisKKyAgICAgICAgc2V0SW1hZ2VPYnNl
cnZlcihvYnNlcnZlcik7CisgICAgICAgIGJ1ZmZlci0+Y29udmVydFRvTHVtaW5hbmNlTWFzaygp
OworCisgICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSwgVW5zY2FsZWQpOworICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGN0eHQuc2V0RHJhd0x1bWluYW5jZU1h
c2soZmFsc2UpOworICAgIG1fY2FjaGVkSW1hZ2UtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0
LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7Cit9
CisKIGJvb2wgQml0bWFwSW1hZ2U6OnNob3VsZEFuaW1hdGUoKQogewogICAgIHJldHVybiAocmVw
ZXRpdGlvbkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSAmJiAhbV9hbmltYXRpb25GaW5p
c2hlZCAmJiBpbWFnZU9ic2VydmVyKCkpOwogfQogCitib29sIEJpdG1hcEltYWdlOjpjYW5Bbmlt
YXRlKCkKK3sKKyAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+IDE7
Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmNsZWFyVGltZXIoKQoreworICAgIG1fZnJhbWVUaW1l
ciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIoZG91YmxlIGRl
bGF5KQoreworICAgIEFTU0VSVCghbV9mcmFtZVRpbWVyKTsKKyAgICBtX2ZyYW1lVGltZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0
aW9uKTsKKyAgICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChkZWxheSk7Cit9CisKIHZvaWQg
Qml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKENhdGNoVXBBbmltYXRpb24gY2F0Y2hVcElmTmVj
ZXNzYXJ5KQogewogICAgIGlmIChtX2ZyYW1lVGltZXIgfHwgIXNob3VsZEFuaW1hdGUoKSB8fCBm
cmFtZUNvdW50KCkgPD0gMSkKQEAgLTU4MCw2MCArNjkyLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6
c3RhcnRBbmltYXRpb24oQ2F0Y2hVcAogICAgIHN0YXJ0VGltZXIoMCk7CiB9CiAKLXZvaWQgQml0
bWFwSW1hZ2U6OnN0b3BBbmltYXRpb24oKQotewotICAgIC8vIFRoaXMgdGltZXIgaXMgdXNlZCB0
byBhbmltYXRlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGltYWdlLiBEb24ndCBpbnZhbGlkYXRl
Ci0gICAgLy8gdGhlIHRpbWVyIHVubGVzcyBhbGwgcmVuZGVyZXJzIGhhdmUgc3RvcHBlZCBkcmF3
aW5nLgotICAgIGNsZWFyVGltZXIoKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6cmVzZXRBbmlt
YXRpb24oKQotewotICAgIHN0b3BBbmltYXRpb24oKTsKLSAgICBtX2N1cnJlbnRGcmFtZSA9IDA7
Ci0gICAgbV9yZXBldGl0aW9uc0NvbXBsZXRlID0gMDsKLSAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0
VGltZSA9IDA7Ci0gICAgbV9hbmltYXRpb25GaW5pc2hlZCA9IGZhbHNlOwotICAgIAotICAgIC8v
IEZvciBleHRyZW1lbHkgbGFyZ2UgYW5pbWF0aW9ucywgd2hlbiB0aGUgYW5pbWF0aW9uIGlzIHJl
c2V0LCB3ZSBqdXN0IHRocm93IGV2ZXJ5dGhpbmcgYXdheS4KLSAgICBkZXN0cm95RGVjb2RlZERh
dGFJZk5lY2Vzc2FyeSh0cnVlKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAodGlsZVJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWN0eHQuZHJhd0x1bWlu
YW5jZU1hc2soKSkgewotICAgICAgICBJbWFnZTo6ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3Qs
IHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpIHsKLSAgICAgICAg
YXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihleHBhbmRl
ZEludFNpemUodGlsZVJlY3Quc2l6ZSgpKSwgQ29sb3JTcGFjZVNSR0IsIGN0eHQpOwotICAgICAg
ICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbWFnZU9ic2Vy
dmVyKiBvYnNlcnZlciA9IGltYWdlT2JzZXJ2ZXIoKTsKLQotICAgICAgICAvLyBUZW1wb3Jhcmls
eSByZXNldCBpbWFnZSBvYnNlcnZlciwgd2UgZG9uJ3Qgd2FudCB0byByZWNlaXZlIGFueSBjaGFu
Z2VJblJlY3QoKSBjYWxscyBkdWUgdG8gdGhpcyByZWxheW91dC4KLSAgICAgICAgc2V0SW1hZ2VP
YnNlcnZlcihudWxscHRyKTsKLQotICAgICAgICBkcmF3KGJ1ZmZlci0+Y29udGV4dCgpLCB0aWxl
UmVjdCwgdGlsZVJlY3QsIG9wLCBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlv
bigpKTsKLQotICAgICAgICBzZXRJbWFnZU9ic2VydmVyKG9ic2VydmVyKTsKLSAgICAgICAgYnVm
ZmVyLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICAgICAgbV9jYWNoZWRJbWFnZSA9
IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBVbnNjYWxlZCk7Ci0gICAg
ICAgIGlmICghbV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBjdHh0LnNldERyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKTsKLSAgICBtX2NhY2hlZEltYWdlLT5k
cmF3UGF0dGVybihjdHh0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3As
IGRlc3RSZWN0LCBibGVuZE1vZGUpOwotfQotCi0KIHZvaWQgQml0bWFwSW1hZ2U6OmFkdmFuY2VB
bmltYXRpb24oKQogewogICAgIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbigpOwpAQCAtNjgzLDM1
ICs3NDEsMjMgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aQogICAg
IHJldHVybiBhZHZhbmNlZEFuaW1hdGlvbjsKIH0KIAotQ29sb3IgQml0bWFwSW1hZ2U6OnNpbmds
ZVBpeGVsU29saWRDb2xvcigpCit2b2lkIEJpdG1hcEltYWdlOjpzdG9wQW5pbWF0aW9uKCkKIHsK
LSAgICAvLyBJZiB0aGUgaW1hZ2Ugc2l6ZSBpcyBub3QgYXZhaWxhYmxlIHlldCBvciBpZiB0aGUg
aW1hZ2Ugd2lsbCBiZSBhbmltYXRpbmcgZG9uJ3QgdXNlIHRoZSBzb2xpZCBjb2xvciBvcHRpbWl6
YXRpb24uCi0gICAgaWYgKGZyYW1lQ291bnQoKSAhPSAxKQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICBpZiAobV9zb2xpZENvbG9yKQotICAgICAgICByZXR1cm4gbV9zb2xpZENv
bG9yLnZhbHVlKCk7Ci0KLSAgICAvLyBJZiB0aGUgZnJhbWUgaW1hZ2UgaXMgbm90IGxvYWRlZCwg
Zmlyc3QgdXNlIHRoZSBkZWNvZGVyIHRvIGdldCB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCi0gICAg
aWYgKCFoYXZlRnJhbWVJbWFnZUF0SW5kZXgoMCkgJiYgbV9zb3VyY2UuZnJhbWVTaXplQXRJbmRl
eCgwLCAwKSAhPSBJbnRTaXplKDEsIDEpKSB7Ci0gICAgICAgIG1fc29saWRDb2xvciA9IENvbG9y
KCk7Ci0gICAgICAgIHJldHVybiBtX3NvbGlkQ29sb3IudmFsdWUoKTsKLSAgICB9Ci0KLSAgICAv
LyBDYWNoZSB0aGUgZnJhbWUgaW1hZ2UuIFRoZSBzaXplIHdpbGwgYmUgY2FsY3VsYXRlZCBmcm9t
IHRoZSBOYXRpdmVJbWFnZVB0ci4KLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoMCkpCi0g
ICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkp
OwotICAgIG1fc29saWRDb2xvciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
bV9mcmFtZXNbMF0ubV9pbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKG1fc29saWRDb2xv
cik7Ci0gICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOworICAgIC8vIFRoaXMgdGltZXIg
aXMgdXNlZCB0byBhbmltYXRlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGltYWdlLiBEb24ndCBp
bnZhbGlkYXRlCisgICAgLy8gdGhlIHRpbWVyIHVubGVzcyBhbGwgcmVuZGVyZXJzIGhhdmUgc3Rv
cHBlZCBkcmF3aW5nLgorICAgIGNsZWFyVGltZXIoKTsKIH0KLSAgICAKLWJvb2wgQml0bWFwSW1h
Z2U6OmNhbkFuaW1hdGUoKQorCit2b2lkIEJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigpCiB7
Ci0gICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkgPiAxOworICAgIHN0
b3BBbmltYXRpb24oKTsKKyAgICBtX2N1cnJlbnRGcmFtZSA9IDA7CisgICAgbV9yZXBldGl0aW9u
c0NvbXBsZXRlID0gMDsKKyAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IDA7CisgICAgbV9h
bmltYXRpb25GaW5pc2hlZCA9IGZhbHNlOworCisgICAgLy8gRm9yIGV4dHJlbWVseSBsYXJnZSBh
bmltYXRpb25zLCB3aGVuIHRoZSBhbmltYXRpb24gaXMgcmVzZXQsIHdlIGp1c3QgdGhyb3cgZXZl
cnl0aGluZyBhd2F5LgorICAgIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KHRydWUpOwog
fQogCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZp
c2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywyNSArNDcsOSBAQCB0eXBlZGVmIHN0cnVjdCBI
QklUTUFQX18gKkhCSVRNQVA7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIHN0
cnVjdCBGcmFtZURhdGE7Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IFZlY3RvclRyYWl0czxXZWJDb3JlOjpGcmFtZURhdGE+IDogcHVibGljIFNpbXBsZUNsYXNz
VmVjdG9yVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuSW5pdGlhbGl6ZVdp
dGhNZW1zZXQgPSBmYWxzZTsgLy8gTm90IGFsbCBGcmFtZURhdGEgbWVtYmVycyBpbml0aWFsaXpl
IHRvIDAuCi0gICAgfTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUaW1lcjsK
IAotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLSAgICBJbnRTaXplIHNpemUoY29uc3QgTmF0aXZl
SW1hZ2VQdHImKTsKLSAgICBib29sIGhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0g
ICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci19
Ci0KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQog
Ly8gRnJhbWVEYXRhIENsYXNzCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQEAgLTc1LDE4ICs1OSwyOSBAQCBwdWJsaWM6CiAgICAgRnJhbWVEYXRh
KCkKICAgICAgICAgOiBtX2hhdmVNZXRhZGF0YShmYWxzZSkKICAgICAgICAgLCBtX2lzQ29tcGxl
dGUoZmFsc2UpCi0gICAgICAgICwgbV9oYXNBbHBoYSh0cnVlKQorICAgICAgICAsIG1faGFzQWxw
aGEoZmFsc2UpCiAgICAgewogICAgIH0KIAogICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOworICAgIHsKKyAgICAgICAgY2xlYXJJbWFnZVN1YkltYWdlcyhtX2lt
YWdlKTsKICAgICB9CiAKICAgICAvLyBDbGVhciB0aGUgY2FjaGVkIGltYWdlIGRhdGEgb24gdGhl
IGZyYW1lLCBhbmQgKG9wdGlvbmFsbHkpIHRoZSBtZXRhZGF0YS4KICAgICAvLyBSZXR1cm5zIHdo
ZXRoZXIgdGhlcmUgd2FzIGNhY2hlZCBpbWFnZSBkYXRhIHRvIGNsZWFyLgotICAgIGJvb2wgY2xl
YXIoYm9vbCBjbGVhck1ldGFkYXRhKTsKKyAgICB1bnNpZ25lZCBjbGVhcihib29sIGNsZWFyTWV0
YWRhdGEpCisgICAgeworICAgICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdXNlZEZyYW1lQnl0
ZXMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjbGVhck1ldGFkYXRhKQorICAgICAgICAgICAg
bV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKKworICAgICAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSAw
OworICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gZnJhbWVCeXRl
czsKKyAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgdXNlZEZyYW1lQnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsgfQogCkBAIC0xMDUsMTAgKzEwMCw2IEBA
IHB1YmxpYzoKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KIAogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwgOiBwdWJsaWMgSW1hZ2UgewotICAgIGZy
aWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2Vu
ZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEJpdG1hcElt
YWdlPiBjcmVhdGUoTmF0aXZlSW1hZ2VQdHImJiBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNlcnZlciog
b2JzZXJ2ZXIgPSBudWxscHRyKQogICAgIHsKQEAgLTEyMyw3ICsxMTQsNyBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICB2aXJ0dWFsIH5CaXRtYXBJbWFnZSgpOwogICAgIAotICAgIGJvb2wgaGFzU2lu
Z2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc1NpbmdsZVNl
Y3VyaXR5T3JpZ2luKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8g
RmxvYXRTaXplIGR1ZSB0byBvdmVycmlkZS4KICAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtMTM0LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlZFNpemU7IH0KIAogICAgIGJvb2wgZGF0YUNo
YW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIG92ZXJyaWRlOwotICAgIFN0cmluZyBmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLmZpbGVuYW1lRXh0ZW5zaW9uKCk7
IH0KIAogICAgIC8vIEl0IG1heSBsb29rIHVudXN1YWwgdGhhdCB0aGVyZSBpcyBubyBzdGFydCBh
bmltYXRpb24gY2FsbCBhcyBwdWJsaWMgQVBJLiBUaGlzIGlzIGJlY2F1c2UKICAgICAvLyB3ZSBz
dGFydCBhbmQgc3RvcCBhbmltYXRpbmcgbGF6aWx5LiBBbmltYXRpb24gYmVnaW5zIHdoZW5ldmVy
IHNvbWVvbmUgZHJhd3MgdGhlIGltYWdlLiBJdCB3aWxsCkBAIC0xNTUsMTIgKzE0Niw2IEBAIHB1
YmxpYzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7CiAj
ZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdldENH
SW1hZ2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9m
U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+
IGdldENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4p
CiAgICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0SEJJ
VE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQsOSAr
MTU5LDEyIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFzKikg
b3ZlcnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRyIG5h
dGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNp
emUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmll
bnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50YXRp
b25BdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQotCisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRy
PiBmcmFtZXNOYXRpdmVJbWFnZXMoKSBvdmVycmlkZTsKKyAgICAKICAgICBib29sIGN1cnJlbnRG
cmFtZUtub3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc0FuaW1hdGVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mcmFtZUNvdW50ID4gMTsgfQpAQCAtMjE1LDcgKzIw
Myw2IEBAIHByb3RlY3RlZDoKICAgICBzaXplX3QgZnJhbWVDb3VudCgpOwogCiAgICAgTmF0aXZl
SW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25TY2Fs
ZUhpbnQgPSAxKTsKLSAgICBOYXRpdmVJbWFnZVB0ciBjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJ
bmRleChzaXplX3QpOwogCiAgICAgYm9vbCBoYXZlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAkocmV2aXNpb24g
MjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAj
aWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAi
TmF0aXZlSW1hZ2UuaCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAj
ZWxpZiBQTEFURk9STShNQUMpCiBPQkpDX0NMQVNTIE5TSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5
cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlUHRyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CkBAIC0xMzcsOCArMTM3LDExIEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUg
eyBTdHJldGNoVGlsZSwgUm91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAg
IHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9
CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRT
aXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVh
bCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbigpOyB9CisgICAgdmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+
IGZyYW1lc05hdGl2ZUltYWdlcygpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3Jz
IGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4KIApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVm
IGdldENHSW1hZ2VSZWYoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdl
UmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIHZpcnR1YWwgUmV0YWluUHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJh
eSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAg
IHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsg
cmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKIAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnRQb2lu
dC5oIgotI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2Uu
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKICNpbmNsdWRlICJNZWRpYVBsYXllckVudW1zLmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VQ
dHIuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybU1lZGlhU2Vzc2lvbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTmF0aXZlSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9OYXRpdmVJbWFnZS5oCShyZXZpc2lvbiAyMDU1NzgpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmg6MjA1NTc4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEw
MCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIE5hdGl2ZUltYWdlUHRyX2gKKyNkZWZpbmUgTmF0aXZlSW1hZ2VQdHJfaAorCisjaWYgVVNF
KENHKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KK3R5cGVkZWYgc3RydWN0IENHSW1hZ2Uq
IENHSW1hZ2VSZWY7CisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIK
KyNlbGlmIFVTRShXSU5HREkpCisjaW5jbHVkZSAiU2hhcmVkQml0bWFwLmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordHlwZWRlZiBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gTmF0aXZlSW1hZ2VQdHI7CisjZWxpZiBVU0UoQ0FJUk8pCit0eXBlZGVmIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltYWdlUHRyOworI2VsaWYgVVNFKFdJTkdESSkKK3R5
cGVkZWYgUmVmUHRyPFNoYXJlZEJpdG1hcD4gTmF0aXZlSW1hZ2VQdHI7CisjZW5kaWYKKworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUlt
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0
aXZlSW1hZ2UuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgg
VG9yY2ggTW9iaWxlLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5j
LgogICoKQEAgLTI1LDggKzI1LDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IE5hdGl2ZUltYWdlUHRyX2gKLSNkZWZpbmUgTmF0aXZlSW1hZ2VQdHJfaAorI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlv
bi5oIgogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTM5LDYg
KzQxLDExIEBAIHR5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRT
aXplOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCiAjaWYgVVNFKENHKQogdHlwZWRlZiBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBVU0UoQ0FJUk8pCkBAIC00
Nyw2ICs1NCwxMyBAQCB0eXBlZGVmIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltCiB0
eXBlZGVmIFJlZlB0cjxTaGFyZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOwogI2VuZGlmCiAKLX0K
K0ludFNpemUgc2l6ZU9mSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKK2Jvb2wgaGFzQWxw
aGFPZkltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7CitDb2xvciBzaW5nbGVQaXhlbFNvbGlk
Q29sb3JPZkltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7CiAKLSNlbmRpZgorZmxvYXQgc3Vi
c2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCit2b2lkIGRyYXdJbWFnZShjb25zdCBOYXRp
dmVJbWFnZVB0ciYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBj
b25zdCBJbWFnZU9yaWVudGF0aW9uJik7Cit2b2lkIGNsZWFySW1hZ2VTdWJJbWFnZXMoY29uc3Qg
TmF0aXZlSW1hZ2VQdHImKTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTmF0aXZlSW1hZ2VQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCShub25leGlzdGVu
dCkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAx
MDAgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBOYXRpdmVJbWFnZVB0cl9oCi0jZGVmaW5lIE5hdGl2ZUltYWdlUHRyX2gKLQotI2lmIFVT
RShDRykKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci10eXBlZGVmIHN0cnVjdCBDR0ltYWdl
KiBDR0ltYWdlUmVmOwotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgi
Ci0jZWxpZiBVU0UoV0lOR0RJKQotI2luY2x1ZGUgIlNoYXJlZEJpdG1hcC5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShDRykKLXR5cGVkZWYgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IE5hdGl2ZUltYWdlUHRyOwotI2VsaWYgVVNFKENBSVJPKQotdHlwZWRlZiBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBOYXRpdmVJbWFnZVB0cjsKLSNlbGlmIFVTRShXSU5HREkpCi10
eXBlZGVmIFJlZlB0cjxTaGFyZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOwotI2VuZGlmCi0KLX0K
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCShyZXZpc2lvbiAyMDU1
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5Nyw3ICsyOTcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYXVzZWRJbWFn
ZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5u
YXRpdmVJbWFnZSgpOwogICAgIEFTU0VSVChtX3BhdXNlZEltYWdlKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0
bWFwSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCShub25leGlzdGVudCkK
QEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
LQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNp
emUoaW1hZ2UuZ2V0KCkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVu
dChpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsK
LSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFn
ZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpw
aXhlbCk7Ci19Ci0KLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsCi0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwg
IWRzdC5oZWlnaHQoKSB8fCAhc3JjLndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc3RhcnRBbmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZy
YW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElm
IGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1
cm47Ci0KLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlm
IChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRzdCwgY29sb3IsIG9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQu
c2F2ZSgpOwotCi0gICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYg
KG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1h
bCAmJiAhZnJhbWVIYXNBbHBoYUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYg
RU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNp
emUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVk
U2l6ZSk7Ci0jZWxzZQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRp
ZgotCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmlt
YWdlT3JpZW50YXRpb24oKSk7Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50
YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBG
bG9hdFJlY3QgZHN0UmVjdCA9IGRzdDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhw
ZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlv
bihGbG9hdFBvaW50KCkpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0
aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChm
cmFtZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRo
ZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBh
bHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRo
ZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8g
cmV2ZXJzZSBpdCBiYWNrIGhlcmUuCi0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRz
dFJlY3QueCgpLCBkc3RSZWN0LnkoKSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRy
YXdTdXJmYWNlVG9Db250ZXh0KHN1cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgY29udGV4dCk7Ci0KLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9i
c2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQot
Ym9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xl
YXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmICht
X2ltYWdlKSB7Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2
ZUltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVk
ZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgor
I2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBzaXpl
T2ZJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCit7CisgICAgcmV0dXJuIGltYWdl
ID8gY2Fpcm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSkgOiBJbnRTaXplKCk7Cit9CisKK2Jvb2wg
aGFzQWxwaGFPZkltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKK3sKKyAgICByZXR1
cm4gIWltYWdlIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENB
SVJPX0NPTlRFTlRfQ09MT1I7Cit9CisKK0NvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvck9mSW1h
Z2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQoreworICAgIGlmICghaW1hZ2UgfHwgc2l6
ZU9mSW1hZ2UoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigp
OworCisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9IENBSVJP
X1NVUkZBQ0VfVFlQRV9JTUFHRSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBSR0JB
MzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0
aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitmbG9hdCBzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0
dXJuIDE7Cit9CisKK3ZvaWQgZHJhd0ltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKQor
eworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIAorICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcg
b3BlcmF0aW9uLgorICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIG1vZGUgPT0g
QmxlbmRNb2RlTm9ybWFsICYmICFoYXNBbHBoYU9mSW1hZ2UoaW1hZ2UpKQorICAgICAgICBjb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisj
aWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxl
ZFNpemUgPSBzaXplT2ZJbWFnZShpbWFnZSk7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3JjUmVjdCwgc2NhbGVkU2l6ZSk7
CisjZWxzZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjUmVjdCk7CisjZW5kaWYK
KyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKKyAg
ICAgICAgCisgICAgaWYgKG9yaWVudGF0aW9uICE9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7
CisgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0
ICgwLCAwKS4KKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZGVzdFJlY3QueCgpLCBkZXN0UmVj
dC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQo
KSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9yaWVudGF0aW9uLnRyYW5zZm9ybUZyb21E
ZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7CisgICAgICAgIGlmIChvcmllbnRhdGlv
bi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgZGVzdGluYXRpb24g
cmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNl
ZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAgICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0
IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFj
ayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXplKGFkanVzdGVkRGVz
dFJlY3Quc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCkpOworICAgICAgICB9CisgICAgfQorCisgICAg
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoaW1hZ2UuZ2V0
KCksIGFkanVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7CisgICAgY29u
dGV4dC5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgY2xlYXJJbWFnZVN1YkltYWdlcyhjb25zdCBOYXRp
dmVJbWFnZVB0ciYpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDQUlSTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Jp
dG1hcEltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJ
LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdl
T2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYgVVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktp
dFN5c3RlbUludGVyZmFjZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFt
ZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0lt
YWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6
ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdl
dCgpKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikK
LXsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhl
IENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAg
ICAKLUNvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUlt
YWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBi
aXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEs
IDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAg
ICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAg
IENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVD
b3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0
TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10p
Ci0gICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihw
aXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhl
bFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURh
dGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkK
LSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZl
bCA9IDA7Ci0KLSAgICBpZiAobV9pbWFnZSkgewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAg
ICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAg
ICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJl
ZigpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0lt
YWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFn
ZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJ
bnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdl
KSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENHSW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUg
cmlnaHQgc2l6ZQotICAgIHJldHVybiBnZXRDR0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxD
RkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3Qg
Y291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgCi0gICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRl
TXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1
cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJh
eUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJhbWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRD
RihhcnJheSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9T
KQotICAgIHN0YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5p
bWF0aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29u
dGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250
ZXh0KCkpKQotICAgICAgICBpbWFnZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1f
Y3VycmVudEZyYW1lKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVz
dGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29u
dGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNh
bXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAg
aW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2Fs
ZSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29u
J3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBj
b2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29t
cG9zaXRlT3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcg
bWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgot
ICAgIEludFNpemUgaW1hZ2VTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1h
Z2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsKLSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRo
ZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1h
cCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVj
dCA9IHNyY1JlY3Q7Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxv
YXRSZWN0IG9yaWdpbmFsSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAg
ICBGbG9hdFJlY3Qgc3Vic2FtcGxlZEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXpl
KTsKLSAgICAgICAgc2NhbGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFn
ZUJvdW5kcywgc3Vic2FtcGxlZEltYWdlQm91bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdl
T3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50
YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBj
dHh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3Jj
UmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGlt
YWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwot
fQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gQml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3Vu
dCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1l
KGluZGV4LCAwKTsKLQotICAgIGlmICghbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZl
bCkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJu
IG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5k
aWYgLy8gVVNFKENHKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJ
bWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorCisjaWYg
VVNFKENHKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEku
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgor
I2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKKworI2lmIFBMQVRGT1JNKFdJTikK
KyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXplIHNpemVPZkltYWdlKGNv
bnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKK3sKKyAgICByZXR1cm4gaW1hZ2UgPyBJbnRTaXpl
KENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0
KCkpKSA6IEludFNpemUoKTsKK30KKworYm9vbCBoYXNBbHBoYU9mSW1hZ2UoY29uc3QgTmF0aXZl
SW1hZ2VQdHImKQoreworICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlv
bjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPworICAgIHJldHVybiB0
cnVlOworfQorCitDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3JPZkltYWdlKGNvbnN0IE5hdGl2
ZUltYWdlUHRyJiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlIHx8IHNpemVPZkltYWdlKGltYWdl
KSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIHVuc2ln
bmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwg
c1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NH
Qml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKworICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29u
dGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJp
dG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSksIGltYWdlLmdldCgpKTsK
KworICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsK
KworICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAq
IDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7Cit9
CisKK2Zsb2F0IHN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCit7CisgICAg
Ly8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRl
eHRzLgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250
ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjpt
aW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lk
dGggLyBzcmNSZWN0LndpZHRoKCksIHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVp
Z2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpOworfQorCit2b2lkIGRyYXdJbWFnZShjb25zdCBOYXRp
dmVJbWFnZVB0ciYgaW1hZ2UsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBz
cmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdl
T3JpZW50YXRpb24mIG9yaWVudGF0aW9uKQoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZl
IGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJbnRT
aXplIHN1YnNhbXBsZWRJbWFnZVNpemUgPSBzaXplT2ZJbWFnZShpbWFnZSk7CisKKyAgICAvLyBz
cmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLCBz
byB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4KKyAgICBGbG9hdFJl
Y3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2FtcGxlZEltYWdlU2l6
ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBSZWN0KHNyY1JlY3Qs
IEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJzYW1wbGVkSW1hZ2VT
aXplKSk7CisKKyAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgc3Vic2FtcGxlZElt
YWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3AsIG1vZGUsIG9yaWVudGF0aW9u
KTsKK30KKwordm9pZCBjbGVhckltYWdlU3ViSW1hZ2VzKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBp
bWFnZSkKK3sKKyNpZiBDQUNIRV9TVUJJTUFHRVMKKyAgICBpZiAoaW1hZ2UpCisgICAgICAgIHN1
YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKGltYWdlLmdldCgpKTsKKyNlbmRpZgorfQorCit9CisK
KyNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXR0ZXJuQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dAogICAgIC8vIElmIHdlJ3JlIHJlcGVhdGluZyBpbiBib3RoIGRpcmVjdGlvbnMsIHdlIGNhbiB1
c2UgaW1hZ2UtYmFja2VkIHBhdHRlcm5zCiAgICAgLy8gaW5zdGVhZCBvZiBjdXN0b20gcGF0dGVy
bnMsIGFuZCBhdm9pZCB0aWxpbmctZWRnZSBwaXhlbCBjcmFja3MuCiAgICAgaWYgKG1fcmVwZWF0
WCAmJiBtX3JlcGVhdFkpCi0gICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFn
ZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpLCBwYXR0ZXJuVHJhbnNm
b3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOworICAgICAgICByZXR1cm4gd2tD
R1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUltYWdlKCktPm5hdGl2ZUlt
YWdlKCkuZ2V0KCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3Bh
Y2luZyk7CiAKICAgICAvLyBJZiBGTFRfTUFYIHNob3VsZCBhbHNvIGJlIHVzZWQgZm9yIHhTdGVw
IG9yIHlTdGVwLCBub3RoaW5nIGlzIHJlbmRlcmVkLiBVc2luZyBmcmFjdGlvbnMgb2YgRkxUX01B
WCBhbHNvCiAgICAgLy8gcmVzdWx0IGluIG5vdGhpbmcgYmVpbmcgcmVuZGVyZWQuCkBAIC04Myw3
ICs4Myw3IEBAIENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHQKICAgICBD
R0Zsb2F0IHlTdGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8PCAyMik7
CiAKICAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYgd2hlbiBp
dCdzIGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBDR0ltYWdl
UmVmIHBsYXRmb3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdl
UmVmKCkpOworICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgpLT5uYXRp
dmVJbWFnZSgpLmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0
ZXJuQ2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJh
Y2sgfTsKICAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFu
dFNwYWNpbmcsIFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJl
c2VudGF0aW9uQ29jb2E6On5UZXh0VHJhY2sKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xpZW50
LmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCldOwor
ICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPm5h
dGl2ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2E6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0JKHJldmlzaW9uIDIwNTU3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNzksMzEgKzc5LDIyIEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0
VElGRlJlcHJlc2VudGEKICAgICBpZiAobV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZm
UmVwLmdldCgpOwogCi0gICAgdW5zaWduZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAg
IGF1dG8gbmF0aXZlSW1hZ2VzID0gdGhpcy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAv
LyBJZiBudW1GcmFtZXMgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRv
ZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCisgICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6
ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRh
dGEKICAgICAvLyBFdmVuIHRob3VnaCB0aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YSB3aWxsIGZhaWwgYW5kIHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAg
IC8vIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25z
b2xlIHdpdGggYW4gZXJyb3IgbWVzc2FnZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFZlY3RvcjxDR0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bUZyYW1lczsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNn
SW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2Up
Ci0gICAgICAgICAgICBpbWFnZXMuYXBwZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIG51bVZhbGlkRnJhbWVzID0gaW1hZ2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdl
cy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0
YWJsZURhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwot
ICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRD
RihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElG
RiwgbnVtVmFsaWRGcmFtZXMsIDApKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9u
UmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERh
dGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJRkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAog
ICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsg
KytpKQotICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQo
KSwgaW1hZ2VzW2ldLCAwKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFn
ZXMpCisgICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgp
LCBuYXRpdmVJbWFnZS5nZXQoKSwgMCk7CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6
ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2VNYWMubW0JKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWM6OnVwZGF0ZVAKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAg
bV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKTsKICAgICAgICAgaWYgKCFtX3By
ZXZpZXdJbWFnZSkKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9p
ZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUAogCiB2b2lkIE1vY2tSZWFsdGlt
ZVZpZGVvU291cmNlTWFjOjp1cGRhdGVTYW1wbGVCdWZmZXIoKQogewotICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKGltYWdlQnVmZmVyKCktPmNvcHlJbWFnZSgp
LT5nZXRDR0ltYWdlUmVmKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZy
b21DR0ltYWdlKGltYWdlQnVmZmVyKCktPmNvcHlJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgp
KTsKICAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IENNU2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVy
KHBpeGVsQnVmZmVyLmdldCgpKTsKICAgICAKICAgICBtZWRpYURhdGFVcGRhdGVkKE1lZGlhU2Ft
cGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCShyZXZpc2lvbiAyMDU1
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzYsOSArMTM2LDkgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJ
bWFnZUZyb21JbWFnZShJbQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGRyYXdDb250ZXh0LCAxLCAt
MSk7CiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGRyYXdDb250ZXh0LCB3aGl0ZSk7CiAgICAg
Q0dDb250ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQsIHJlY3QpOwotICAgIGlmIChhdXRvIHNyY0lt
YWdlID0gaW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsKKyAgICBpZiAoYXV0byBzcmNJbWFnZSA9IGlt
Zy0+bmF0aXZlSW1hZ2UoKSkgewogICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoZHJhd0Nv
bnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShk
cmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2Uo
ZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlLmdldCgpKTsKICAgICB9CiAgICAgQ0dDb250ZXh0
UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTU3OCkK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2
IEBACisyMDE2LTA5LTA4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CisKKyAgICAgICAgTW92ZSB0aGUgQml0bWFwSW1hZ2UgcGxhdGZvcm0gZGVwZW5kZW50IGNv
ZGUgdG8gYSBuZXcgZmlsZSBuYW1lZCBOYXRpdmVJbWFnZVtDR3xDYWlyb10uY3BwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcDoKKyAgICAgICAgKFdLSWNvbkRhdGFiYXNlVHJ5R2V0
Q0dJbWFnZUZvclVSTCk6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJy
YXlGb3JVUkwpOgorICAgICAgICBJdCB3YXMgdGhlIG9ubHkgcGxhY2UgaW4gdGhlIGNvZGUgd2hp
Y2ggdXNlcyBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkuCisgICAgICAgIENhbGwgQml0
bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpIGluc3RlYWQgYW5kIGZvcm0gdGhlIHJldHVy
bmVkCisgICAgICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gYnVpbGQgdGhlIENGQXJyYXlSZWYu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmg6CisgICAgICAgIEluY2x1
ZGUgIk5hdGl2ZUltYWdlLmgiIGluc3RlYWQgb2YgIk5hdGl2ZUltYWdlUHRyLmgiLgorICAgICAg
ICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2aWV3
SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwOgorICAgICAgICAoV2ViS2l0Ojppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICBD
YWxsIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlUmVmKCkgaW5zdGVhZCBvZiBjYWxsaW5nIEJpdG1h
cEltYWdlOjpuYXRpdmVJbWFnZSgpLgorCiAyMDE2LTA5LTA3ICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gLnRiZCBmaWxlcyBmb3IgdGhlIHNoaW1zIGVu
ZCB1cCBpbnN0YWxsZWQgd2hlbiBidWlsZGluZyB3aXRoIEdFTkVSQVRFX1RFWFRfQkFTRURfU1RV
QlM9WUVTCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5o
CShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRh
dGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJXZWJJ
Y29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ljb25EYXRhYmFzZUNsaWVu
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTmF0
aXZlSW1hZ2VQdHIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05hdGl2ZUltYWdlLmg+CiAKIG5hbWVz
cGFjZSBBUEkgewogY2xhc3MgRGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAJKHJldmlzaW9uIDIwNTU3
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDIzIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogQ0dJbWFnZVJlZiBXS0ljb25EYXRhYmFzZVRyeUdldENHSW1hZ2VGb3JVUkwoV0tJ
Y29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYsIFdLU2l6ZSBz
aXplKQogewogICAgIEltYWdlKiBpbWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFn
ZUZvclBhZ2VVUkwodG9XVEZTdHJpbmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1h
Z2UtPmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShJbnRTaXplKHN0YXRpY19jYXN0PGludD4oc2l6
ZS53aWR0aCksIHN0YXRpY19jYXN0PGludD4oc2l6ZS5oZWlnaHQpKSkgOiAwOworICAgIHJldHVy
biBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZU9mU2l6ZShJbnRTaXplKHN0YXRpY19jYXN0PGlu
dD4oc2l6ZS53aWR0aCksIHN0YXRpY19jYXN0PGludD4oc2l6ZS5oZWlnaHQpKSkuZ2V0KCkgOiBu
dWxscHRyOwogfQogCiBDRkFycmF5UmVmIFdLSWNvbkRhdGFiYXNlVHJ5Q29weUNHSW1hZ2VBcnJh
eUZvclVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJl
ZikKIHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VG
b3JQYWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdl
LT5nZXRDR0ltYWdlQXJyYXkoKS5sZWFrUmVmKCkgOiAwOworICAgIGlmICghaW1hZ2UpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSBpbWFnZS0+ZnJh
bWVzTmF0aXZlSW1hZ2VzKCk7CisgICAgaWYgKCFuYXRpdmVJbWFnZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENG
QXJyYXlDcmVhdGVNdXRhYmxlKG51bGxwdHIsIG5hdGl2ZUltYWdlcy5zaXplKCksICZrQ0ZUeXBl
QXJyYXlDYWxsQmFja3MpOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5hdGl2ZUltYWdl
cykKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBuYXRpdmVJbWFnZS5nZXQoKSk7
CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENGUmV0YWluKGFycmF5
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDEzMSw3ICs0MTMxLDcgQEAgLSAoVUlJbWFnZSAqKV9wcmVzZW50YXRp
b25TbmFwc2hvdEZvclByZQogewogICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0lu
ZGljYXRvci5jb250ZW50SW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24u
bGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2Vd
OworICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9u
SW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0
KCldIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0Zv
clByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9s
bGVyCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MzAsNyArMTczMCw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6d2luZG93ZWRQbHVnaW5WaXNpYmlsaXQKICNpZiBQTEFURk9S
TShDT0NPQSkKIHN0YXRpYyBib29sIGlzQWxtb3N0U29saWRDb2xvcihCaXRtYXBJbWFnZSogYml0
bWFwKQogewotICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBiaXRtYXAtPmdldENHSW1hZ2VSZWYoKTsK
KyAgICBDR0ltYWdlUmVmIGltYWdlID0gYml0bWFwLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogICAg
IEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7CiAKICAgICBD
R0JpdG1hcEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NjUwKQorKysgU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDktMDggIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNb3Zl
IHRoZSBCaXRtYXBJbWFnZSBwbGF0Zm9ybSBkZXBlbmRlbnQgY29kZSB0byBhIG5ldyBmaWxlIG5h
bWVkIE5hdGl2ZUltYWdlW0NHfENhaXJvXS5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBn
ZXRQcmV2aWV3U25hcHNob3RJbWFnZTphbmRSZWN0czpdKToKKyAgICAgICAgKiBNaXNjL1dlYkNh
Y2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFnZUZvclVSTDpdKToKKyAgICAgICAgUmVw
bGFjZSBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpIHdpdGggQml0bWFwSW1hZ2U6Om5hdGl2
ZUltYWdlKCkuCisKIDIwMTYtMDktMDcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTWFjXSBBZGRyZXNzIHNvbWUgY2xhbmcgc3RhdGljIGFuYWx5emVy
IHdhcm5pbmdzIGluIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NLm1tCShyZXZpc2lvbiAyMDU1
NzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
NjEsNyArNTYxLDcgQEAgLSAodm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZQog
CiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IHRl
eHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAgICAgICAgKmNnSW1hZ2UgPSAoQ0dJ
bWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4oaW1hZ2UtPmdldENHSW1hZ2VSZWYo
KSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKS5hdXRvcmVs
ZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmVjdEFycmF5
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViQ2FjaGUubW0JKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViQ2FjaGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNCw3ICsyMDQsNyBAQCAr
IChDR0ltYWdlUmVmKWltYWdlRm9yVVJMOihOU1VSTCAqKXVybAogICAgIFdlYkNvcmU6OkNhY2hl
ZEltYWdlJiBjYWNoZWRJbWFnZSA9IGRvd25jYXN0PFdlYkNvcmU6OkNhY2hlZEltYWdlPigqY2Fj
aGVkUmVzb3VyY2UpOwogICAgIGlmICghY2FjaGVkSW1hZ2UuaGFzSW1hZ2UoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNhY2hlZEltYWdlLmltYWdlKCktPmdldENHSW1h
Z2VSZWYoKTsKKyAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5n
ZXQoKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288336</attachid>
            <date>2016-09-08 15:07:22 -0700</date>
            <delta_ts>2016-09-08 16:52:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160908150456.patch</filename>
            <type>text/plain</type>
            <size>92696</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTY1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxNi0wOS0wOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IEJpdG1hcEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIHRvIGEgbmV3IGZpbGUgbmFtZWQg
TmF0aXZlSW1hZ2VbQ0d8Q2Fpcm9dLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJh
c2VyLgorCisgICAgICAgIFRoaXMgaXMgYSByZWZhY3RvcmluZyBwYXRjaC4gSXQgbW92ZXMgdGhl
IEJpdG1hcEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20gQml0bWFw
SW1hZ2UgdG8gTmF0aXZlSW1hZ2VbQ0d8Q2Fpcm9dLmNwcC4gVGhlIG5ldyBBUElzIGFyZQorICAg
ICAgICByZXNwb25zaWJsZSBvZiBkcmF3aW5nIGEgTmF0aXZlSW1hZ2VQdHIgYW5kIGFuc3dlcmlu
ZyBzb21lIG1ldGFkYXRhIHF1ZXJpZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0tIENvZGUg
cmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRmb3JtQXBw
bGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICog
UGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmg6CisgICAg
ICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oOgorICAgICAgICAqIHBhZ2UvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3
IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAo
Y3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJp
dG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2Rl
ZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0
YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVBdEluZGV4SXND
YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhbkFuaW1hdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNsZWFyVGltZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OnN0b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnJl
c2V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZmlsZW5hbWVFeHRlbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1l
RGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggZmFsc2Ug
YmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdlOjpmcmFt
ZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFkYXRhLgor
ICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQgaW4gQml0
bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpjYWNoZUZy
YW1lKCkuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ljb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpvcmllbnRhdGlv
bkZvckN1cnJlbnRGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0
Q0dJbWFnZVJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0Rmlyc3RD
R0ltYWdlUmVmT2ZTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRD
R0ltYWdlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjYWxjdWxhdGVNYXhp
bXVtU3Vic2FtcGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL05hdGl2ZUltYWdlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL05hdGl2ZUltYWdlUHRyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjp1cGRhdGVQYXVzZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQml0bWFwSW1hZ2VDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bmF0aXZlSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Om5hdGl2ZUltYWdlSGFzQWxw
aGEpOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJOYXRpdmVJbWFnZVN1
YkltYWdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVy
Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzaXplKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om5hdGl2ZUltYWdlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpuYXRpdmVJbWFnZUhhc0Fs
cGhhKToKKyAgICAgICAgKFdlYkNvcmU6Om5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyTmF0aXZlSW1hZ2VT
dWJJbWFnZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2EubW06CisgICAgICAgIChUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9y
bUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1
cGRhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorCiAy
MDE2LTA5LTA4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3VwcG9ydCBuZXcgZW1vamkgZ3JvdXAgY2FuZGlkYXRlcwpJbmRleDogU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcApAQCAtNzIsNiArNzEsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENH
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbnRTaXplQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0
aXZlSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQko
cmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyb0hhcmZidXp6TkcuY3BwCkBAIC0xMzUsNiArMTM0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3Bw
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMjA1NTc4KQorKysgU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsx
MDUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvWDExLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcApAQCAtMTE2LDYgKzExNSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0
aXZlSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcApJbmRleDogU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNyArMzg1LDYgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
V2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29h
L1dlYlRpbGVkQmFja2luZ0xheWVyLm1tCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRt
YXBJbWFnZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0Zsb2F0UmVjdENHLmNwcApAQCAtNDAyLDYgKzQwMSw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ludFNpemVDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFn
ZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdHRlcm5DRy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8u
Y21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFr
ZQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RD
YWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0z
MSw2ICszMCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0
Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA1NTc4KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDI0LDcgKzE0MjQsNyBAQAogCQkzNzVDRDIzMjExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovOyB9
OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzZEQ0NFMDEzQjRGOTY2MDAyRUJF
RkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRBQkE1MEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJl
cXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZD
RTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi87IH07CisJCTM3N0EzQTkwMTVFRkNF
OUIwMDU5RjVDNyAvKiBOYXRpdmVJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBOYXRpdmVJ
bWFnZUNHLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjMwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9u
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc5MTlDMjEwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovOyB9
OwogCQkzNzkxOUMyNDBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MTlDMjIwQjdEMTg4
NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9ICgpOyB9OyB9OwogCQkzNzkyOTE3QTE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTI5
MTc4MTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMjc0LDYgKzIyNzQsNyBAQAogCQk1
NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3
RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3
RUQxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyog
SW1hZ2VEZWNvZGVyQ0cuaCAqLzsgfTsKKwkJNTVBMzM2RjcxRDgyMDlGNDAwMjJDNEM3IC8qIE5h
dGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgfTsKIAkJNTcw
OUU4Q0QxRDQxM0Q0NzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA5RThDQTFENDEzQ0UzMDAz
MjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLzsgfTsKIAkJNTcwOUU4Q0UxRDQxM0Q1
QjAwMzI0NEFDIC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjY2MTgwNzQ2MDgwMDEzMjY3
NCAvKiBKU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAgKi87IH07CiAJCTU3MDlFOENGMUQ0
MTNEOUEwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDlFOENCMUQ0MTNDRTMwMDMyNDRBQyAvKiBX
ZWJLaXRTdWJ0bGVDcnlwdG8uaCAqLzsgfTsKQEAgLTI1MTMsNyArMjUxNCw3IEBACiAJCTY1RkVB
ODY5MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNw
cCAqLzsgfTsKIAkJNjlBNkNCQUMxQzZCRTQyQzAwQjgzNkU5IC8qIEFjY2Vzc2liaWxpdHlTVkdF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY5NzEwMTA3MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAg
Ki87IH07CiAJCTY5QTZDQkFEMUM2QkU0MkMwMEI4MzZFOSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjk3
MTAxMDgxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggKi87IH07
Ci0JCTZCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2ZUlt
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjM0
ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QjY5M0EyRTFDNTFBODJFMDBCMDNCRUYg
LyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRP
YnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTZCNjkzQTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjY5M0EzMzFD
NTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk2QzRD
OTZERTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNEM5
NkRBMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIu
Y3BwICovOyB9OwpAQCAtODM0Nyw3ICs4MzQ4LDcgQEAKIAkJMzc2RENDRTAxM0I0Rjk2NjAwMkVC
RUZDIC8qIFRleHRSdW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGV4dFJ1bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzJCMDk1MTY1MzU4
NTYwMDBBNDlDQSAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb3B1cE9wZW5pbmdPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE92ZXJsYXBUZXN0UmVx
dWVzdENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzNzdBM0E4RjE1RUZD
RTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCaXRtYXBJbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIE5hdGl2ZUltYWdlQ0cuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZlSW1hZ2VDRy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3Np
dGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
b3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlD
MjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyZWRlbnRpYWxCYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MjgyLDYgKzkyODMsNyBAQAogCQk1NTBBMEJDODA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVCODdFQTFD
QUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2
ZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAv
KiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
SW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MDlFOENBMUQ0
MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0U3VidGxlQ3J5cHRvLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTcwOUU4Q0IxRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRs
ZUNyeXB0by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRTdWJ0bGVD
cnlwdG8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NDcsNyArOTU0OSw3IEBA
CiAJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjk3MTAxMDcxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlT
VkdFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjk3MTAxMDgxQzZC
RTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFn
ZVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlSW1hZ2VQdHIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQx
IC8qIE5hdGl2ZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRp
dmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjY5M0EyRDFDNTFBODJF
MDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkI2OTNBMzMxQzUxQTk1RDAwQjAzQkVGIC8qIFJlc291cmNlTG9hZE9ic2VydmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZE9i
c2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkM0Qzk2REExQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENv
bnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA0OTAsNyArMjA0
OTIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVD
NyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUg
LyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVj
dENHLmNwcCAqLywKQEAgLTIwNTE3LDYgKzIwNTE4LDcgQEAKIAkJCQlBODBBMzhGRDBFNTBDQzgy
MDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0MDAyQ0U2
NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1MzgxNDAwMkNF
NjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1
QzcgLyogTmF0aXZlSW1hZ2VDRy5jcHAgKi8sCiAJCQkJMUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlF
IC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwICovLAogCQkJCTFGQzQwRkI3MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi8sCiAJCQkJQjI3NTM1MkEwQjA1
MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwICovLApAQCAtMjA3MDgs
NyArMjA3MTAsNyBAQAogCQkJCUNEREMxRTc5MThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQuaCAqLywKIAkJCQkzMTRCRTNBNDFCMzEwM0ZCMDAxNDE5ODIgLyogTmFt
ZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQkzMTRCRTNBNTFCMzEwM0ZCMDAxNDE5
ODIgLyogTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmggKi8sCi0JCQkJNkIzNDgwOTIwRUVGNTBE
NDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggKi8sCisJCQkJNkIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIE5hdGl2ZUltYWdlLmggKi8sCiAJCQkJQjI3NTM1NTIwQjA1MzgxNDAwMkNFNjRG
IC8qIFBhdGguY3BwICovLAogCQkJCUIyNzUzNTUzMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmgg
Ki8sCiAJCQkJQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5j
cHAgKi8sCkBAIC0yMDc1MCw2ICsyMDc1Miw3IEBACiAJCQkJNTAxQkFBQTgxMzk1MEUyQzAwRjdB
Q0VCIC8qIFdpbmRSdWxlLmggKi8sCiAJCQkJMzc5OTE5OTQxMjAwRERGNDAwRUEwNDFDIC8qIFdP
RkZGaWxlRm9ybWF0LmNwcCAqLywKIAkJCQkzNzk5MTk5NTEyMDBEREY0MDBFQTA0MUMgLyogV09G
RkZpbGVGb3JtYXQuaCAqLywKKwkJCQk1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZl
SW1hZ2UuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMjU2NzksNyArMjU2ODIsNyBAQAogCQkJCTMxNEJFM0E3MUIzMTAzRkIw
MDE0MTk4MiAvKiBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4MTg3MjIzMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4MTg3MjFFMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTZCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNkIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2ZUlt
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0IyRDE3NTFCOEJDRDZBMDBBMDJFNDcgLyogTmF0
aXZlTm9kZUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjlCNkMwQjc0NzU5OTAwM0VE
ODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDQ0Yw
MjcwQUY2QzUyOTAwMDE4RTg5IC8qIE5hdmlnYXRpb25BY3Rpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMjU3NTcsNiArMjU3NjAsNyBAQAogCQkJCTFBNTY5RDE1MEQ3RTJCODIwMDdDMzk4MyAvKiBv
YmpjX2luc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNzBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19ydW50aW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxOTBEN0UyQjgy
MDA3QzM5ODMgLyogb2JqY191dGlsaXR5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1NUEzMzZGNzFE
ODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNjk4
MjU1MTEzNDYyOUQwMDg5NDExNSAvKiBPYmpDUnVudGltZU9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0U1RDdBNzcxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTkwMDE3NzQxMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFy
ZERlcml2YXRpdmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NTc0LDcgKzI3NTc4LDcgQEAKIAkJ
CQlGREM1NEYwNDEzOTlCMERBMDA4RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRDMxNjAyNjEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkUHJvY2Vzc29y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRt
YXBJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1Qzcg
LyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzNzdBM0E5MDE1RUZDRTlC
MDA1OUY1QzcgLyogTmF0aXZlSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUZGQzQ1
NDFENUU4MUNCMDAyNjdBNjYgLyogQmxhY2tsaXN0VXBkYXRlci5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTk3NkQ2Qzc4MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTJFREVGMUYzMTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCShyZXZp
c2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2lmbmRlZiBDYWNoZV9oCiAjZGVm
aW5lIENhY2hlX2gKIAotI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAiTmF0
aXZlSW1hZ2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKICNpbmNsdWRlICJT
ZXNzaW9uSUQuaCIKICNpbmNsdWRlICJUaW1lci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEljb25EYXRhYmFzZUJhc2VfaAogI2RlZmluZSBJ
Y29uRGF0YWJhc2VCYXNlX2gKIAotI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2UuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0JKHJldmlzaW9u
IDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGcmFtZTooTlNSZWN0KWZyCiAgICAgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplLnNjYWxl
KDEgLyBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlU2NhbGVGYWN0b3IoKSk7CiAgICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRzSW1hZ2U7CiAgICAgaWYgKGluZGljYXRvcldhbnRz
Q29udGVudENyb3NzZmFkZSgqX3RleHRJbmRpY2F0b3IpKQotICAgICAgICBjb250ZW50c0ltYWdl
ID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQoKS0+Z2V0Q0dJbWFn
ZVJlZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJ
bWFnZVdpdGhIaWdobGlnaHQoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBlbHNlCi0gICAgICAgIGNv
bnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPmdldENHSW1hZ2VS
ZWYoKTsKKyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1h
Z2UoKS0+bmF0aXZlSW1hZ2UoKTsKIAogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYm91
bmNlTGF5ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAKQEAg
LTI2NSw3ICsyNjUsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENBS2V5ZnJhbWVBbmltYXRpb24+IGNy
CiBzdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2Zh
ZGVBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJ
bmRpY2F0b3IpCiB7CiAgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFu
aW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVu
dHMiXTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRp
Y2F0b3IuY29udGVudEltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5h
dGl2ZUltYWdlKCk7CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250
ZW50c0ltYWdlLmdldCgpXTsKICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtD
QUZpbGxNb2RlRm9yd2FyZHNdOwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9u
Q29tcGxldGlvbjpOT107CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDExICs3MCwxMSBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHImCiB7
CiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdlIGNhbid0IGZpZ3VyZSBv
dXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3NpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mgbm90IDB4MC4KLSAgICBt
X3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRpdmVJbWFnZTo6c2l6ZShp
bWFnZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zaXplID0gbmF0aXZl
SW1hZ2VTaXplKGltYWdlKTsKICAgICBtX2RlY29kZWRTaXplID0gbV9zaXplLmFyZWEoKSAqIDQ7
Ci0gICAgCisKICAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBdLm1faGFzQWxw
aGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOworICAgIG1fZnJhbWVzWzBdLm1faGFz
QWxwaGEgPSBuYXRpdmVJbWFnZUhhc0FscGhhKGltYWdlKTsKICAgICBtX2ZyYW1lc1swXS5tX2hh
dmVNZXRhZGF0YSA9IHRydWU7CiAgICAgbV9mcmFtZXNbMF0ubV9pbWFnZSA9IFdURk1vdmUoaW1h
Z2UpOwogfQpAQCAtODUsMTggKzg1LDYgQEAgQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCiAg
ICAgc3RvcEFuaW1hdGlvbigpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjbGVhclRpbWVyKCkK
LXsKLSAgICBtX2ZyYW1lVGltZXIgPSBudWxscHRyOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpz
dGFydFRpbWVyKGRvdWJsZSBkZWxheSkKLXsKLSAgICBBU1NFUlQoIW1fZnJhbWVUaW1lcik7Ci0g
ICAgbV9mcmFtZVRpbWVyID0gc3RkOjptYWtlX3VuaXF1ZTxUaW1lcj4oKnRoaXMsICZCaXRtYXBJ
bWFnZTo6YWR2YW5jZUFuaW1hdGlvbik7Ci0gICAgbV9mcmFtZVRpbWVyLT5zdGFydE9uZVNob3Qo
ZGVsYXkpOwotfQotCiBib29sIEJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCkBAIC0xMDgsMTEg
Kzk2LDYgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KAogICAgIHJl
dHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFnZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCiB2
b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsKQogewog
ICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkID0gMDsKQEAgLTEyNSw5ICsxMDgsNyBAQCB2
b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vCiAgICAgICAgIC8vIFRoZSB1
bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0IHRyeWlu
ZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZlciBkYXRh
KSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRhdGEuCi0g
ICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0g
ICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBmcmFtZUJ5
dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBt
X2ZyYW1lc1tpXS5jbGVhcihmYWxzZSk7CiAgICAgfQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVz
dHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSwgZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBA
IC0xNTAsOCArMTMxLDggQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZO
ZQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBh
bGxGcmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLnVz
ZWRGcmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9u
Q3V0b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVj
b2RlZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRv
ZmY9JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0y
ODgsMjEgKzI2OSwxOSBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERh
CiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5ldyBkYXRhIGhlcmUuIFRodXMg
d2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21wbGV0ZSBmcmFtZXMgdG8gYmUg
c2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9IDA7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgeworICAgIGZvciAoYXV0byYgZnJh
bWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24ndCBjYWxsIGZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAgICAgICAgIC8vIGRlY29kZSBh
bnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAgICAgICAvLyBjbGVhcmVkLW9u
LWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0g
bV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFtZXNbaV0ubV9oYXZl
TWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkKLSAgICAgICAgICAgIGZyYW1l
Qnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVlKSA/IGZyYW1lQnl0ZXMgOiAw
KTsKKyAgICAgICAgaWYgKGZyYW1lLm1faGF2ZU1ldGFkYXRhICYmICFmcmFtZS5tX2lzQ29tcGxl
dGUpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZS5jbGVhcih0cnVlKTsK
ICAgICB9CiAgICAgZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KGZyYW1lQnl0ZXNDbGVhcmVkLCBD
bGVhcmVkU291cmNlOjpObyk7CiAjZWxzZQogICAgIC8vIEZJWE1FOiB3aHkgaXMgdGhpcyBkaWZm
ZXJlbnQgZm9yIGlPUz8KICAgICBpbnQgZGVsdGFCeXRlcyA9IDA7CiAgICAgaWYgKCFtX2ZyYW1l
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIodHJ1ZSkpIHsKKyAgICAgICAgaWYgKGludCBieXRlcyA9IG1fZnJhbWVz
W21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFyKHRydWUpKSB7CiAgICAgICAgICAgICBkZWx0YUJ5
dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2RlY29kZWRQcm9wZXJ0
aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplID0gMDsKQEAgLTMz
NywxMSArMzE2LDYgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYQog
ICAgIHJldHVybiBpc1NpemVBdmFpbGFibGUoKTsKIH0KIAotU3RyaW5nIEJpdG1hcEltYWdlOjpm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc291cmNlLmZpbGVuYW1l
RXh0ZW5zaW9uKCk7Ci19Ci0KIHNpemVfdCBCaXRtYXBJbWFnZTo6ZnJhbWVDb3VudCgpCiB7CiAg
ICAgaWYgKCFtX2hhdmVGcmFtZUNvdW50KSB7CkBAIC0zNjYsNyArMzQwLDcgQEAgYm9vbCBCaXRt
YXBJbWFnZTo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gbV9zaXplQXZhaWxhYmxlOwog
fQogCi1ib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCwg
SW1hZ2VGcmFtZUNhY2hpbmcgZnJhbWVDYWNoaW5nKQorYm9vbCBCaXRtYXBJbWFnZTo6ZW5zdXJl
RnJhbWVBdEluZGV4SXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFt
ZUNhY2hpbmcpCiB7CiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMzk0LDggKzM2OCw3IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdl
OjpmcmFtZUltYWdlQXQKICAgICAgICAgTE9HKEltYWdlcywgIiAgc3Vic2FtcGxpbmdMZXZlbCB3
YXMgJWQsIHJlc2FtcGxpbmciLCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKTsK
IAogICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgYWxyZWFkeSBjYWNoZWQsIGJ1dCBhdCB0b28g
c21hbGwgYSBzaXplLCByZS1kZWNvZGUgYSBsYXJnZXIgdmVyc2lvbi4KLSAgICAgICAgaW50IHNp
emVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlczsKLSAgICAgICAgbV9mcmFt
ZXNbaW5kZXhdLmNsZWFyKHRydWUpOworICAgICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1l
c1tpbmRleF0uY2xlYXIodHJ1ZSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEoKTsK
ICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwogICAgICAgICBpZiAoaW1hZ2VP
YnNlcnZlcigpKQpAQCAtNDA4LDEwICszODEsNDkgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6OmZyYW1lSW1hZ2VBdAogCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwog
fQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkKK3sKKyAg
ICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEJpdG1h
cEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCit7CisgICAgcmV0dXJuIGZyYW1l
SW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30KKyAgICAKKyNpZiBVU0UoQ0cpCitOYXRp
dmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBm
cmFtZUltYWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIG5hdGl2ZUltYWdlU2l6
ZShpbWFnZSkgPT0gc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9CisgICAg
CisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGltYWdlIGlmIHdlIGNhbid0IGZp
bmQgdGhlIHJpZ2h0IHNpemUKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9Cisg
ICAgCitWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFn
ZXMoKQoreworICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gaW1hZ2VzOworICAgIHNpemVfdCBj
b3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgaWYgKGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChp
KSkKKyAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoaW1hZ2UpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gaW1hZ2VzOworfQorI2VuZGlmCiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hl
ZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVBdEluZGV4
SXNDYWNoZWQoaW5kZXgsIENhY2hlTWV0YWRhdGFPbmx5KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CkBAIC00MTksMjAg
KzQzMSwxNSBAQCBib29sIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4CiAKIGZs
b2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0g
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisg
ICAgaWYgKCFlbnN1cmVGcmFtZUF0SW5kZXhJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9u
bHkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9k
dXJhdGlvbjsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZy
YW1lKCkpOwotfQotCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXpl
X3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1l
dGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUF0SW5kZXhJc0NhY2hlZChpbmRleCwg
Q2FjaGVNZXRhZGF0YU9ubHkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChtX2Zy
YW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCkBAIC00NDgsNyArNDU1LDcgQEAgYm9vbCBCaXRt
YXBJbWFnZTo6Y3VycmVudEZyYW1lS25vd25Ub0JlTwogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1h
cEltYWdlOjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYg
KCFlbnN1cmVGcmFtZUF0SW5kZXhJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQog
ICAgICAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwogCiAgICAgaWYgKG1fZnJhbWVzW2lu
ZGV4XS5tX2hhdmVNZXRhZGF0YSkKQEAgLTQ1Nyw2ICs0NjQsMzIgQEAgSW1hZ2VPcmllbnRhdGlv
biBCaXRtYXBJbWFnZTo6ZnJhbWVPcmllbgogICAgIHJldHVybiBtX3NvdXJjZS5vcmllbnRhdGlv
bkF0SW5kZXgoaW5kZXgpOwogfQogCitDb2xvciBCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCkKK3sKKyAgICAvLyBJZiB0aGUgaW1hZ2Ugc2l6ZSBpcyBub3QgYXZhaWxhYmxlIHll
dCBvciBpZiB0aGUgaW1hZ2Ugd2lsbCBiZSBhbmltYXRpbmcgZG9uJ3QgdXNlIHRoZSBzb2xpZCBj
b2xvciBvcHRpbWl6YXRpb24uCisgICAgaWYgKGZyYW1lQ291bnQoKSAhPSAxKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKKworICAgIGlmIChtX3NvbGlkQ29sb3IpCisgICAgICAgIHJldHVybiBt
X3NvbGlkQ29sb3IudmFsdWUoKTsKKworICAgIC8vIElmIHRoZSBmcmFtZSBpbWFnZSBpcyBub3Qg
bG9hZGVkLCBmaXJzdCB1c2UgdGhlIGRlY29kZXIgdG8gZ2V0IHRoZSBzaXplIG9mIHRoZSBpbWFn
ZS4KKyAgICBpZiAoIWhhdmVGcmFtZUltYWdlQXRJbmRleCgwKSAmJiBtX3NvdXJjZS5mcmFtZVNp
emVBdEluZGV4KDApICE9IEludFNpemUoMSwgMSkpIHsKKyAgICAgICAgbV9zb2xpZENvbG9yID0g
Q29sb3IoKTsKKyAgICAgICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOworICAgIH0KKwor
ICAgIC8vIENhY2hlIHRoZSBmcmFtZSBpbWFnZS4gVGhlIHNpemUgd2lsbCBiZSBjYWxjdWxhdGVk
IGZyb20gdGhlIE5hdGl2ZUltYWdlUHRyLgorICAgIGlmICghZW5zdXJlRnJhbWVBdEluZGV4SXND
YWNoZWQoMCkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgQVNTRVJUKG1fZnJhbWVz
LnNpemUoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlk
Q29sb3IobV9mcmFtZXNbMF0ubV9pbWFnZSk7CisgICAgCisgICAgQVNTRVJUKG1fc29saWRDb2xv
cik7CisgICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOworfQorCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogYm9vbCBCaXRtYXBJbWFnZTo6bm90U29saWRDb2xvcigpCiB7CkBAIC00NzgsMTEg
KzUxMSw5MyBAQCBpbnQgQml0bWFwSW1hZ2U6OnJlcGV0aXRpb25Db3VudChib29sIGltCiAgICAg
cmV0dXJuIG1fcmVwZXRpdGlvbkNvdW50OwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUs
IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVz
dFJlY3QuaXNFbXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNl
bHNlCisgICAgc3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgorCisgICAgQ29sb3IgY29sb3IgPSBz
aW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAg
ICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZShjb250ZXh0LCBkZXN0UmVjdCwgc3Jj
UmVjdCkpOworICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhh
dmUgYW4gaW1hZ2UgeWV0LgorICAgICAgICByZXR1cm47CisKKyAgICBJbWFnZU9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAgaWYgKGRl
c2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50
YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9j
dXJyZW50RnJhbWUpOworCisgICAgZHJhd05hdGl2ZUltYWdlKGltYWdlLCBjb250ZXh0LCBkZXN0
UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworCisgICAgaWYg
KGltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMp
OworfQorICAgIAordm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFjdHh0LmRyYXdMdW1pbmFuY2VNYXNrKCkpIHsKKyAgICAg
ICAgSW1hZ2U6OmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpIHsKKyAgICAgICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUodGlsZVJlY3Qu
c2l6ZSgpKSwgQ29sb3JTcGFjZVNSR0IsIGN0eHQpOworICAgICAgICBpZiAoIWJ1ZmZlcikKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IGlt
YWdlT2JzZXJ2ZXIoKTsKKworICAgICAgICAvLyBUZW1wb3JhcmlseSByZXNldCBpbWFnZSBvYnNl
cnZlciwgd2UgZG9uJ3Qgd2FudCB0byByZWNlaXZlIGFueSBjaGFuZ2VJblJlY3QoKSBjYWxscyBk
dWUgdG8gdGhpcyByZWxheW91dC4KKyAgICAgICAgc2V0SW1hZ2VPYnNlcnZlcihudWxscHRyKTsK
KworICAgICAgICBkcmF3KGJ1ZmZlci0+Y29udGV4dCgpLCB0aWxlUmVjdCwgdGlsZVJlY3QsIG9w
LCBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsKKworICAgICAgICBz
ZXRJbWFnZU9ic2VydmVyKG9ic2VydmVyKTsKKyAgICAgICAgYnVmZmVyLT5jb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCk7CisKKyAgICAgICAgbV9jYWNoZWRJbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlLCBVbnNjYWxlZCk7CisgICAgICAgIGlmICghbV9jYWNoZWRJ
bWFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY3R4dC5zZXREcmF3
THVtaW5hbmNlTWFzayhmYWxzZSk7CisgICAgbV9jYWNoZWRJbWFnZS0+ZHJhd1BhdHRlcm4oY3R4
dCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxl
bmRNb2RlKTsKK30KKwogYm9vbCBCaXRtYXBJbWFnZTo6c2hvdWxkQW5pbWF0ZSgpCiB7CiAgICAg
cmV0dXJuIChyZXBldGl0aW9uQ291bnQoZmFsc2UpICE9IGNBbmltYXRpb25Ob25lICYmICFtX2Fu
aW1hdGlvbkZpbmlzaGVkICYmIGltYWdlT2JzZXJ2ZXIoKSk7CiB9CiAKK2Jvb2wgQml0bWFwSW1h
Z2U6OmNhbkFuaW1hdGUoKQoreworICAgIHJldHVybiBzaG91bGRBbmltYXRlKCkgJiYgZnJhbWVD
b3VudCgpID4gMTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6Y2xlYXJUaW1lcigpCit7CisgICAg
bV9mcmFtZVRpbWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRUaW1l
cihkb3VibGUgZGVsYXkpCit7CisgICAgQVNTRVJUKCFtX2ZyYW1lVGltZXIpOworICAgIG1fZnJh
bWVUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmQml0bWFwSW1hZ2U6OmFk
dmFuY2VBbmltYXRpb24pOworICAgIG1fZnJhbWVUaW1lci0+c3RhcnRPbmVTaG90KGRlbGF5KTsK
K30KKwogdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24oQ2F0Y2hVcEFuaW1hdGlvbiBj
YXRjaFVwSWZOZWNlc3NhcnkpCiB7CiAgICAgaWYgKG1fZnJhbWVUaW1lciB8fCAhc2hvdWxkQW5p
bWF0ZSgpIHx8IGZyYW1lQ291bnQoKSA8PSAxKQpAQCAtNTgwLDYwICs2OTUsNiBAQCB2b2lkIEJp
dG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbihDYXRjaFVwCiAgICAgc3RhcnRUaW1lcigwKTsKIH0K
IAotdm9pZCBCaXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbigpCi17Ci0gICAgLy8gVGhpcyB0aW1l
ciBpcyB1c2VkIHRvIGFuaW1hdGUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgaW1hZ2UuIERvbid0
IGludmFsaWRhdGUKLSAgICAvLyB0aGUgdGltZXIgdW5sZXNzIGFsbCByZW5kZXJlcnMgaGF2ZSBz
dG9wcGVkIGRyYXdpbmcuCi0gICAgY2xlYXJUaW1lcigpOwotfQotCi12b2lkIEJpdG1hcEltYWdl
OjpyZXNldEFuaW1hdGlvbigpCi17Ci0gICAgc3RvcEFuaW1hdGlvbigpOwotICAgIG1fY3VycmVu
dEZyYW1lID0gMDsKLSAgICBtX3JlcGV0aXRpb25zQ29tcGxldGUgPSAwOwotICAgIG1fZGVzaXJl
ZEZyYW1lU3RhcnRUaW1lID0gMDsKLSAgICBtX2FuaW1hdGlvbkZpbmlzaGVkID0gZmFsc2U7Ci0g
ICAgCi0gICAgLy8gRm9yIGV4dHJlbWVseSBsYXJnZSBhbmltYXRpb25zLCB3aGVuIHRoZSBhbmlt
YXRpb24gaXMgcmVzZXQsIHdlIGp1c3QgdGhyb3cgZXZlcnl0aGluZyBhd2F5LgotICAgIGRlc3Ry
b3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KHRydWUpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAg
IGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghY3R4
dC5kcmF3THVtaW5hbmNlTWFzaygpKSB7Ci0gICAgICAgIEltYWdlOjpkcmF3UGF0dGVybihjdHh0
LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGRlc3RSZWN0LCBibGVu
ZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9jYWNoZWRJbWFnZSkg
ewotICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKGV4cGFuZGVkSW50U2l6ZSh0aWxlUmVjdC5zaXplKCkpLCBDb2xvclNwYWNlU1JHQiwgY3R4
dCk7Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gaW1hZ2VPYnNlcnZlcigpOwotCi0gICAgICAgIC8v
IFRlbXBvcmFyaWx5IHJlc2V0IGltYWdlIG9ic2VydmVyLCB3ZSBkb24ndCB3YW50IHRvIHJlY2Vp
dmUgYW55IGNoYW5nZUluUmVjdCgpIGNhbGxzIGR1ZSB0byB0aGlzIHJlbGF5b3V0LgotICAgICAg
ICBzZXRJbWFnZU9ic2VydmVyKG51bGxwdHIpOwotCi0gICAgICAgIGRyYXcoYnVmZmVyLT5jb250
ZXh0KCksIHRpbGVSZWN0LCB0aWxlUmVjdCwgb3AsIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uKCkpOwotCi0gICAgICAgIHNldEltYWdlT2JzZXJ2ZXIob2JzZXJ2ZXIpOwot
ICAgICAgICBidWZmZXItPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgICAgICBtX2Nh
Y2hlZEltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFVuc2Nh
bGVkKTsKLSAgICAgICAgaWYgKCFtX2NhY2hlZEltYWdlKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGN0eHQuc2V0RHJhd0x1bWluYW5jZU1hc2soZmFsc2UpOwotICAgIG1fY2Fj
aGVkSW1hZ2UtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7Ci19Ci0KLQogdm9pZCBCaXRtYXBJbWFn
ZTo6YWR2YW5jZUFuaW1hdGlvbigpCiB7CiAgICAgaW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKCk7
CkBAIC02ODMsMzUgKzc0NCwyMyBAQCBib29sIEJpdG1hcEltYWdlOjppbnRlcm5hbEFkdmFuY2VB
bmltYXRpCiAgICAgcmV0dXJuIGFkdmFuY2VkQW5pbWF0aW9uOwogfQogCi1Db2xvciBCaXRtYXBJ
bWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKK3ZvaWQgQml0bWFwSW1hZ2U6OnN0b3BBbmlt
YXRpb24oKQogewotICAgIC8vIElmIHRoZSBpbWFnZSBzaXplIGlzIG5vdCBhdmFpbGFibGUgeWV0
IG9yIGlmIHRoZSBpbWFnZSB3aWxsIGJlIGFuaW1hdGluZyBkb24ndCB1c2UgdGhlIHNvbGlkIGNv
bG9yIG9wdGltaXphdGlvbi4KLSAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCi0gICAgICAgIHJl
dHVybiBDb2xvcigpOwotICAgIAotICAgIGlmIChtX3NvbGlkQ29sb3IpCi0gICAgICAgIHJldHVy
biBtX3NvbGlkQ29sb3IudmFsdWUoKTsKLQotICAgIC8vIElmIHRoZSBmcmFtZSBpbWFnZSBpcyBu
b3QgbG9hZGVkLCBmaXJzdCB1c2UgdGhlIGRlY29kZXIgdG8gZ2V0IHRoZSBzaXplIG9mIHRoZSBp
bWFnZS4KLSAgICBpZiAoIWhhdmVGcmFtZUltYWdlQXRJbmRleCgwKSAmJiBtX3NvdXJjZS5mcmFt
ZVNpemVBdEluZGV4KDAsIDApICE9IEludFNpemUoMSwgMSkpIHsKLSAgICAgICAgbV9zb2xpZENv
bG9yID0gQ29sb3IoKTsKLSAgICAgICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOwotICAg
IH0KLQotICAgIC8vIENhY2hlIHRoZSBmcmFtZSBpbWFnZS4gVGhlIHNpemUgd2lsbCBiZSBjYWxj
dWxhdGVkIGZyb20gdGhlIE5hdGl2ZUltYWdlUHRyLgotICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZCgwKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgCi0gICAgQVNTRVJUKG1fZnJh
bWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9yID0gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVs
U29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdlLmdldCgpKTsKLSAgICAKLSAgICBBU1NFUlQo
bV9zb2xpZENvbG9yKTsKLSAgICByZXR1cm4gbV9zb2xpZENvbG9yLnZhbHVlKCk7CisgICAgLy8g
VGhpcyB0aW1lciBpcyB1c2VkIHRvIGFuaW1hdGUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgaW1h
Z2UuIERvbid0IGludmFsaWRhdGUKKyAgICAvLyB0aGUgdGltZXIgdW5sZXNzIGFsbCByZW5kZXJl
cnMgaGF2ZSBzdG9wcGVkIGRyYXdpbmcuCisgICAgY2xlYXJUaW1lcigpOwogfQotICAgIAotYm9v
bCBCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0ZSgpCisKK3ZvaWQgQml0bWFwSW1hZ2U6OnJlc2V0QW5p
bWF0aW9uKCkKIHsKLSAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+
IDE7CisgICAgc3RvcEFuaW1hdGlvbigpOworICAgIG1fY3VycmVudEZyYW1lID0gMDsKKyAgICBt
X3JlcGV0aXRpb25zQ29tcGxldGUgPSAwOworICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0g
MDsKKyAgICBtX2FuaW1hdGlvbkZpbmlzaGVkID0gZmFsc2U7CisKKyAgICAvLyBGb3IgZXh0cmVt
ZWx5IGxhcmdlIGFuaW1hdGlvbnMsIHdoZW4gdGhlIGFuaW1hdGlvbiBpcyByZXNldCwgd2UganVz
dCB0aHJvdyBldmVyeXRoaW5nIGF3YXkuCisgICAgZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3Nh
cnkodHJ1ZSk7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmgJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDI1ICs0Nyw5IEBAIHR5cGVk
ZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0gICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1lRGF0YT4gOiBwdWJsaWMg
U2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5J
bml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZyYW1lRGF0YSBtZW1iZXJz
IGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAgIEludFNpemUgc2l6ZShj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEoY29uc3QgTmF0aXZlSW1h
Z2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1h
Z2VQdHImKTsKLX0KLQogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CiAvLyBGcmFtZURhdGEgQ2xhc3MKIC8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzUsMjQgKzU5LDMzIEBAIHB1YmxpYzoKICAg
ICBGcmFtZURhdGEoKQogICAgICAgICA6IG1faGF2ZU1ldGFkYXRhKGZhbHNlKQogICAgICAgICAs
IG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpCisgICAgICAg
ICwgbV9oYXNBbHBoYShmYWxzZSkKICAgICB7CiAgICAgfQogCiAgICAgfkZyYW1lRGF0YSgpCi0g
ICAgeyAKLSAgICAgICAgY2xlYXIodHJ1ZSk7CisgICAgeworICAgICAgICBjbGVhck5hdGl2ZUlt
YWdlU3ViSW1hZ2VzKG1faW1hZ2UpOwogICAgIH0KIAotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQg
aW1hZ2UgZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgot
ICAgIC8vIFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xl
YXIuCi0gICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOworICAgIHVuc2lnbmVkIGNs
ZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0
ZXMgPSB1c2VkRnJhbWVCeXRlcygpOworICAgICAgICAKKyAgICAgICAgaWYgKGNsZWFyTWV0YWRh
dGEpCisgICAgICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOworCisgICAgICAgIG1fc3Vi
c2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsOworICAgICAgICBtX2ltYWdl
ID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gZnJhbWVCeXRlczsKKyAgICB9CiAgICAgCiAg
ICAgdW5zaWduZWQgdXNlZEZyYW1lQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9m
cmFtZUJ5dGVzIDogMDsgfQogCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKICAgICBJbWFn
ZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9Owot
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OworICAgIFN1YnNh
bXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwg
fTsKICAgICBmbG9hdCBtX2R1cmF0aW9uIHsgMCB9OwogICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEg
OiAxOwogICAgIGJvb2wgbV9pc0NvbXBsZXRlIDogMTsKQEAgLTEwNSwxMCArOTgsNiBAQCBwdWJs
aWM6CiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CiAKIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFsIDogcHVibGljIEltYWdlIHsKLSAgICBmcmllbmQg
Y2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxCaXRtYXBJbWFnZT4g
Y3JlYXRlKE5hdGl2ZUltYWdlUHRyJiYgbmF0aXZlSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyID0gbnVsbHB0cikKICAgICB7CkBAIC0xMjMsNyArMTEyLDcgQEAgcHVibGljOgogI2VuZGlm
CiAgICAgdmlydHVhbCB+Qml0bWFwSW1hZ2UoKTsKICAgICAKLSAgICBib29sIGhhc1NpbmdsZVNl
Y3VyaXR5T3JpZ2luKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0
eU9yaWdpbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIEZsb2F0
U2l6ZSBkdWUgdG8gb3ZlcnJpZGUuCiAgICAgRmxvYXRTaXplIHNpemUoKSBjb25zdCBvdmVycmlk
ZTsKQEAgLTEzNCw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZGVjb2RlZFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2RlY29kZWRTaXplOyB9CiAKICAgICBib29sIGRhdGFDaGFuZ2Vk
KGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRl
bnNpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS5maWxlbmFtZUV4dGVuc2lvbigpOyB9CiAK
ICAgICAvLyBJdCBtYXkgbG9vayB1bnVzdWFsIHRoYXQgdGhlcmUgaXMgbm8gc3RhcnQgYW5pbWF0
aW9uIGNhbGwgYXMgcHVibGljIEFQSS4gVGhpcyBpcyBiZWNhdXNlCiAgICAgLy8gd2Ugc3RhcnQg
YW5kIHN0b3AgYW5pbWF0aW5nIGxhemlseS4gQW5pbWF0aW9uIGJlZ2lucyB3aGVuZXZlciBzb21l
b25lIGRyYXdzIHRoZSBpbWFnZS4gSXQgd2lsbApAQCAtMTU1LDEyICsxNDQsNiBAQCBwdWJsaWM6
CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRlOwogI2VuZGlm
CiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBnZXRDR0ltYWdl
UmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUo
Y29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBnZXRD
R0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAg
IGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdldEhCSVRNQVBP
ZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0LDcgKzE1Nywx
MiBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZhcyopIG92ZXJy
aWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJ
bWFnZSgpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkgb3ZlcnJpZGU7CisjaWYgVVNFKENHKQorICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKKyAgICBWZWN0b3I8TmF0aXZl
SW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0
dXJuIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQogCiAgICAgYm9v
bCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBvdmVycmlkZTsKQEAgLTIxNSw3ICsyMDMs
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUlt
YWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVI
aW50ID0gMSk7Ci0gICAgTmF0aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90KTsKIAogICAgIGJvb2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAK
QEAgLTIyOSw3ICsyMTYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgPSBDYWNoZU1ldGFk
YXRhQW5kRnJhbWUpOwogCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNb
aW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2RpbmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXgg
b3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBl
bnN1cmVGcmFtZUF0SW5kZXhJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5n
ID0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRl
IGNhY2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAg
IC8vIHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3Vy
Y2UgdG8gZGVzdHJveQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24u
aAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SWNvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgi
CisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdy
YXBoaWNzLmg+CiAjZWxpZiBQTEFURk9STShNQUMpCiBPQkpDX0NMQVNTIE5TSW1hZ2U7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDIwNTU3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1
ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0xMzcsOCArMTM3LDExIEBAIHB1YmxpYzoKIAogICAgIGVu
dW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRp
bGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6
ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9
CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1l
KCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOyB9CisgICAgdmlydHVhbCBWZWN0b3I8TmF0
aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAg
Ly8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4KIApAQCAtMTUwLDEyICsxNTMs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9u
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVh
bCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmly
dHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRTaXplJikg
eyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmV0YWluUHRyPENGQXJyYXlSZWY+IGdl
dENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSNlbmRpZgotCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3Qg
SW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lvbiAyMDU1NzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDIwICs5NCwxOSBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJl
ZEJ1ZmZlciogCiBTdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjpjYWxjdWxhdGVNYXhpbXVt
U3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FsbG93U3Vic2FtcGxpbmcg
fHwgIWFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleCgwKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbDsKICAgICAKICAgICAvLyBG
SVhNRTogdGhpcyB2YWx1ZSB3YXMgY2hvc2VuIHRvIGJlIGFwcHJvcHJpYXRlIGZvciBpT1Mgc2lu
Y2UgdGhlIGltYWdlCiAgICAgLy8gc3Vic2FtcGxpbmcgaXMgb25seSBlbmFibGVkIGJ5IGRlZmF1
bHQgb24gaU9TLiBDaG9vc2UgYSBkaWZmZXJlbnQgdmFsdWUKICAgICAvLyBpZiBpbWFnZSBzdWJz
YW1wbGluZyBpcyBlbmFibGVkIG9uIG90aGVyIHBsYXRmb3JtLgogICAgIGNvbnN0IGludCBtYXhp
bXVtSW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxpbmcgPSA1ICogMTAyNCAqIDEwMjQ7Ci0gICAgY29u
c3QgU3Vic2FtcGxpbmdMZXZlbCBtYXhTdWJzYW1wbGluZ0xldmVsID0gMzsKLSAgICAKLSAgICBm
b3IgKFN1YnNhbXBsaW5nTGV2ZWwgbGV2ZWwgPSAwOyBsZXZlbCA8IG1heFN1YnNhbXBsaW5nTGV2
ZWw7ICsrbGV2ZWwpIHsKKworICAgIGZvciAoU3Vic2FtcGxpbmdMZXZlbCBsZXZlbCA9IE1pblN1
YnNhbXBsaW5nTGV2ZWw7IGxldmVsIDwgTWF4U3Vic2FtcGxpbmdMZXZlbDsgKytsZXZlbCkgewog
ICAgICAgICBpZiAoZnJhbWVTaXplQXRJbmRleCgwLCBsZXZlbCkuYXJlYSgpIDwgbWF4aW11bUlt
YWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nKQogICAgICAgICAgICAgcmV0dXJuIGxldmVsOwogICAg
IH0KICAgICAKLSAgICByZXR1cm4gbWF4U3Vic2FtcGxpbmdMZXZlbDsKKyAgICByZXR1cm4gTWF4
U3Vic2FtcGxpbmdMZXZlbDsKIH0KIAogdm9pZCBJbWFnZVNvdXJjZTo6dXBkYXRlTWV0YWRhdGEo
KQpAQCAtMTQ4LDEyICsxNDcsMTIgQEAgYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxl
KCkgY29ucwogCiBJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKKyAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgw
LCBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKIEludFNpemUgSW1hZ2VTb3VyY2U6OnNp
emVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBmcmFtZVNpemVB
dEluZGV4KDAsIDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKTsKKyAgICByZXR1cm4gZnJhbWVT
aXplQXRJbmRleCgwLCBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCwgUmVzcGVjdEltYWdlT3JpZW50
YXRpb24pOwogfQogCiBzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lv
biAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJJbWFnZU9y
aWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFn
ZVB0ci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CkBAIC02Miw3ICs2MiwxNCBAQCBjb25zdCBpbnQgY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0x
OwogY29uc3QgaW50IGNBbmltYXRpb25Ob25lID0gLTI7CiAKIC8vIFN1YnNhbXBsaW5nTGV2ZWwu
IDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBl
dGMuCi10eXBlZGVmIHNob3J0IFN1YnNhbXBsaW5nTGV2ZWw7Cit1c2luZyBTdWJzYW1wbGluZ0xl
dmVsID0gaW50OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7CisgICAgTmlsU3Vic2FtcGxp
bmdMZXZlbCA9IC0xLAorICAgIE1pblN1YnNhbXBsaW5nTGV2ZWwgPSAwLAorICAgIE1heFN1YnNh
bXBsaW5nTGV2ZWwgPSAzLAorICAgIERlZmF1bHRTdWJzYW1wbGluZ0xldmVsID0gTWluU3Vic2Ft
cGxpbmdMZXZlbAorfTsKIAogY2xhc3MgSW1hZ2VTb3VyY2UgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEltYWdlU291cmNlKTsKQEAgLTEzMCwxOCArMTM3LDE4IEBAIHB1YmxpYzoKICAgICBi
b29sIGFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3QpIGNvbnN0OwogICAgIAog
ICAgIC8vIFNpemUgb2Ygb3B0aW9uYWxseSBzdWJzYW1wbGVkIGZyYW1lLgotICAgIEludFNpemUg
ZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwLCBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsK
KyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0g
RGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9IERv
Tm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OwogICAgIAogICAgIC8vIFJldHVybiB0
aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkZWNvZGVkIGZyYW1lLiBJZiB0aGUgZnJhbWUgaXMg
bm90IHlldAogICAgIC8vIGRlY29kZWQgdGhlbiByZXR1cm4gMC4KLSAgICB1bnNpZ25lZCBmcmFt
ZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZh
dWx0U3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CiAgICAgCiAgICAgZmxvYXQgZnJhbWVEdXJhdGlv
bkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRl
eChzaXplX3QpIGNvbnN0OyAvLyBFWElGIGltYWdlIG9yaWVudGF0aW9uCiAgICAgCiAgICAgLy8g
Q2FsbGVycyBzaG91bGQgbm90IGNhbGwgdGhpcyBhZnRlciBjYWxsaW5nIGNsZWFyKCkgd2l0aCBh
IGhpZ2hlciBpbmRleDsKICAgICAvLyBzZWUgY29tbWVudHMgb24gY2xlYXIoKSBhYm92ZS4KLSAg
ICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwgPSAwKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRl
eChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCk7CiAg
ICAgCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7CkBA
IC0xNTMsNyArMTYwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIG1fbmVlZHNVcGRhdGVN
ZXRhZGF0YSB7IGZhbHNlIH07CiAgICAgc2l6ZV90IG1fZnJhbWVDb3VudCB7IDAgfTsKLSAgICBP
cHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsIHsgMCB9
OworICAgIE9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+IG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2
ZWwgeyBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCB9OwogCiAgICAgLy8gVGhlIGRlZmF1bHQgdmFs
dWUgb2YgbV9hbGxvd1N1YnNhbXBsaW5nIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0SW1h
Z2VTdWJzYW1wbGluZ0VuYWJsZWQgaW4gU2V0dGluZ3MuY3BwCiAjaWYgUExBVEZPUk0oSU9TKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5o
CShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAi
VVJMLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyRW51
bXMuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFS
ZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFTZXNzaW9uLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1h
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKworI2lmIFVTRShDRykKKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Cit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVm
OworI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjZWxpZiBVU0Uo
V0lOR0RJKQorI2luY2x1ZGUgIlNoYXJlZEJpdG1hcC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXpl
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCisjaWYgVVNFKENHKQordHlwZWRlZiBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gTmF0aXZlSW1hZ2VQdHI7CisjZWxpZiBVU0UoQ0FJUk8pCit0eXBlZGVm
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltYWdlUHRyOworI2VsaWYgVVNFKFdJTkdE
SSkKK3R5cGVkZWYgUmVmUHRyPFNoYXJlZEJpdG1hcD4gTmF0aXZlSW1hZ2VQdHI7CisjZW5kaWYK
KworSW50U2l6ZSBuYXRpdmVJbWFnZVNpemUoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKK2Jvb2wg
bmF0aXZlSW1hZ2VIYXNBbHBoYShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOworQ29sb3IgbmF0aXZl
SW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKKworZmxv
YXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCit2b2lkIGRyYXdOYXRpdmVJbWFn
ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJik7Cit2b2lkIGNsZWFyTmF0aXZlSW1h
Z2VTdWJJbWFnZXMoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKKyAgICAKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaAkocmV2
aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZl
SW1hZ2VQdHIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICogQ29weXJp
Z2h0IChDKSAyMDEyIENvbXBhbnkgMTAwIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTmF0aXZlSW1hZ2VQdHJfaAotI2RlZmluZSBOYXRp
dmVJbWFnZVB0cl9oCi0KLSNpZiBVU0UoQ0cpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
dHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsKLSNlbGlmIFVTRShDQUlSTykKLSNp
bmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2VsaWYgVVNFKFdJTkdESSkKLSNpbmNsdWRlICJTaGFy
ZWRCaXRtYXAuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQ0cp
Ci10eXBlZGVmIFJldGFpblB0cjxDR0ltYWdlUmVmPiBOYXRpdmVJbWFnZVB0cjsKLSNlbGlmIFVT
RShDQUlSTykKLXR5cGVkZWYgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gTmF0aXZlSW1hZ2VQdHI7
Ci0jZWxpZiBVU0UoV0lOR0RJKQotdHlwZWRlZiBSZWZQdHI8U2hhcmVkQml0bWFwPiBOYXRpdmVJ
bWFnZVB0cjsKLSNlbmRpZgotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQy5tbQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsNyArMjk3LDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iagogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fcGF1c2VkSW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIG1f
cGF1c2VkSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKTsKICAgICBBU1NFUlQobV9wYXVzZWRJ
bWFnZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiAyMDU1Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNh
aXJvLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWly
b1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8u
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1J
bnRTaXplIHNpemUoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAg
IHJldHVybiBjYWlyb1N1cmZhY2VTaXplKGltYWdlLmdldCgpKTsKLX0KLQotYm9vbCBoYXNBbHBo
YShjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNh
aXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09M
T1I7Ci19Ci0KLUNvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAo
TmF0aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVy
biBDb2xvcigpOwotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkp
ICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0K
LSAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiBjb2xvckZy
b21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotfQotCi19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLAotICAgIEJsZW5kTW9kZSBi
bGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSAg
ICBpZiAoIWRzdC53aWR0aCgpIHx8ICFkc3QuaGVpZ2h0KCkgfHwgIXNyYy53aWR0aCgpIHx8ICFz
cmMuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0K
LSAgICBhdXRvIHN1cmZhY2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0g
ICAgaWYgKCFzdXJmYWNlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGlt
YWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhl
bFNvbGlkQ29sb3IoKTsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxX
aXRoU29saWRDb2xvcihjb250ZXh0LCBkc3QsIGNvbG9yLCBvcCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBjb250ZXh0LnNhdmUoKTsKLQotICAgIC8vIFNldCB0aGUgY29tcG9zaXRp
bmcgb3BlcmF0aW9uLgotICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIGJsZW5k
TW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWZyYW1lSGFzQWxwaGFBdEluZGV4KG1fY3VycmVu
dEZyYW1lKSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
Q29weSk7Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihv
cCwgYmxlbmRNb2RlKTsKLQotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgp
KTsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRv
d25TYW1wbGluZyhzcmMsIHNjYWxlZFNpemUpOwotI2Vsc2UKLSAgICBGbG9hdFJlY3QgYWRqdXN0
ZWRTcmNSZWN0KHNyYyk7Ci0jZW5kaWYKLQotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmll
bnRhdGlvbihkZXNjcmlwdGlvbi5pbWFnZU9yaWVudGF0aW9uKCkpOwotICAgIGlmIChkZXNjcmlw
dGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KQotICAgICAgICBmcmFtZU9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9j
dXJyZW50RnJhbWUpOwotCi0gICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBkc3Q7Ci0KLSAgICBpZiAo
ZnJhbWVPcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewotICAgICAgICAv
LyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCi0g
ICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAg
ICAgIGRzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICAgICAgY29udGV4dC5j
b25jYXRDVE0oZnJhbWVPcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChkc3RSZWN0LnNp
emUoKSkpOwotICAgICAgICBpZiAoZnJhbWVPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgp
KSB7Ci0gICAgICAgICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBp
dCdzIHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9u
IG9mCi0gICAgICAgICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2Ug
bGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAg
ZHN0UmVjdCA9IEZsb2F0UmVjdChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3QuaGVp
Z2h0KCksIGRzdFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJmYWNlLmdldCgpLCBk
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOwotCi0gICAgY29udGV4dC5yZXN0b3Jl
KCk7Ci0KLSAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCkt
PmRpZERyYXcodGhpcyk7Ci19Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0
YWRhdGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRh
ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9pbWFnZSkgewotICAgICAgICBtX2ltYWdlID0gbnVsbHB0
cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFw
SW1hZ2VDYWlyby5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICsw
LDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRp
dmVJbWFnZUNhaXJvLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKworI2lm
IFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ludFNpemUgbmF0aXZlSW1hZ2VTaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBp
bWFnZSkKK3sKKyAgICByZXR1cm4gaW1hZ2UgPyBjYWlyb1N1cmZhY2VTaXplKGltYWdlLmdldCgp
KSA6IEludFNpemUoKTsKK30KKworYm9vbCBuYXRpdmVJbWFnZUhhc0FscGhhKGNvbnN0IE5hdGl2
ZUltYWdlUHRyJiBpbWFnZSkKK3sKKyAgICByZXR1cm4gIWltYWdlIHx8IGNhaXJvX3N1cmZhY2Vf
Z2V0X2NvbnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7Cit9CisKK0Nv
bG9yIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRy
JiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlIHx8IHNpemVPZkltYWdlKGltYWdlKSAhPSBJbnRT
aXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIGlmIChjYWlyb19zdXJm
YWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCisg
ICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdCQTMyKiBwaXhlbCA9IHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2UuZ2V0
KCkpKTsKKyAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKK30K
KworZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAgIHJldHVybiAxOworfQorCit2b2lkIGRyYXdO
YXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRTaXplJiwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2Rl
LCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmllbnRhdGlvbikKK3sKKyAgICBjb250ZXh0LnNh
dmUoKTsKKyAgICAKKyAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KKyAgICBp
ZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBtb2RlID09IEJsZW5kTW9kZU5vcm1hbCAm
JiAhaGFzQWxwaGFPZkltYWdlKGltYWdlKSkKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihvcCwgbW9kZSk7CisgICAgICAgIAorI2lmIEVOQUJMRShJTUFHRV9E
RUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gc2l6ZU9mSW1h
Z2UoaW1hZ2UpOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1c3RTb3VyY2VS
ZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3QsIHNjYWxlZFNpemUpOworI2Vsc2UKKyAgICBGbG9h
dFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyY1JlY3QpOworI2VuZGlmCisgICAgICAgIAorICAgIEZs
b2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgIAorICAgIGlmIChv
cmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgeworICAgICAgICAvLyBJbWFn
ZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCisgICAgICAg
IGNvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpKTsKKyAgICAgICAg
YWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOworICAgICAgICBjb250
ZXh0LmNvbmNhdENUTShvcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChhZGp1c3RlZERl
c3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAob3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWln
aHQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhh
dmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRh
dGlvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBw
YWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KKyAgICAgICAg
ICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShhZGp1c3RlZERlc3RSZWN0LnNpemUoKS50cmFu
c3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KGltYWdlLmdldCgpLCBhZGp1c3RlZERlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOworICAgIGNvbnRleHQucmVzdG9yZSgpOwor
fQorCit2b2lkIGNsZWFyTmF0aXZlSW1hZ2VTdWJJbWFnZXMoY29uc3QgTmF0aXZlSW1hZ2VQdHIm
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwy
MDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgotI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgi
Ci0jaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
I2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oV0lOKQotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRp
dmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGlt
YWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgcmV0dXJuIEludFNpemUoQ0dJbWFnZUdl
dFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotfQot
Ci1ib29sIGhhc0FscGhhKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYpCi17Ci0gICAgLy8g
RklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVm
IGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi1Db2xvciBz
aW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JiBpbWFnZSkK
LXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShp
bWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgCi0g
ICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdCQQotICAgIGF1dG8gYml0bWFwQ29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2Yo
cGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAotICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZykpOwotCi0gICAgaWYgKCFiaXRt
YXBDb250ZXh0KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICBDR0NvbnRleHRT
ZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwg
MSwgMSksIGltYWdlLmdldCgpKTsKLSAgICAKLSAgICBpZiAoIXBpeGVsWzNdKQotICAgICAgICBy
ZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7Ci0KLSAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAy
NTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUg
LyBwaXhlbFszXSwgcGl4ZWxbM10pOwotfQotCi19Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihi
b29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1f
aGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSAwOwotCi0g
ICAgaWYgKG1faW1hZ2UpIHsKLSNpZiBDQUNIRV9TVUJJTUFHRVMKLSAgICAgICAgc3ViaW1hZ2VD
YWNoZSgpLmNsZWFySW1hZ2UobV9pbWFnZS5nZXQoKSk7Ci0jZW5kaWYKLSAgICAgICAgbV9pbWFn
ZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYoKQotewotICAg
IHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKS5nZXQoKTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRt
YXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17
Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUlt
YWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UgJiYgSW50U2l6ZShDR0lt
YWdlR2V0V2lkdGgoY2dJbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSkpID09IHNpemUp
Ci0gICAgICAgICAgICByZXR1cm4gY2dJbWFnZTsKLSAgICB9Ci0KLSAgICAvLyBGYWxsYmFjayB0
byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNpemUK
LSAgICByZXR1cm4gZ2V0Q0dJbWFnZVJlZigpOwotfQotCi1SZXRhaW5QdHI8Q0ZBcnJheVJlZj4g
Qml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJh
bWVDb3VudCgpOwotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IAotICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUoTlVM
TCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoQ0dJbWFnZVJlZiBjdXJyRnJhbWUgPSBm
cmFtZUltYWdlQXRJbmRleChpKS5nZXQoKSkKLSAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1
ZShhcnJheSwgY3VyckZyYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0Q0YoYXJyYXkpOwot
fQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICBzdGFy
dEFuaW1hdGlvbihEb05vdENhdGNoVXApOwotI2Vsc2UKLSAgICBzdGFydEFuaW1hdGlvbigpOwot
I2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgLy8gTmV2ZXIg
dXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgotICAg
IGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSkKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVj
dCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0o
Y3R4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICBmbG9hdCBzdWJzYW1wbGluZ1NjYWxl
ID0gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0
LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0
LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpOwotCi0gICAgICAgIGltYWdlID0gZnJh
bWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBsaW5nU2NhbGUpOwotICAgIH0K
LQotICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4g
aW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ29sb3IgY29sb3IgPSBzaW5n
bGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAg
IGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVjdCwgY29sb3IsIGNvbXBvc2l0ZU9wKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdp
dmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KLSAgICBJbnRTaXpl
IGltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0
KGltYWdlLmdldCgpKSk7Ci0gICAgCi0gICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0
ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhl
IHN1YnNhbXBsZWQgaW1hZ2UuCi0gICAgRmxvYXRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0
OwotICAgIGlmIChpbWFnZVNpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBvcmln
aW5hbEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKLSAgICAgICAgRmxvYXRSZWN0
IHN1YnNhbXBsZWRJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIGltYWdlU2l6ZSk7Ci0gICAgICAg
IHNjYWxlZFNyY1JlY3QgPSBtYXBSZWN0KHNyY1JlY3QsIG9yaWdpbmFsSW1hZ2VCb3VuZHMsIHN1
YnNhbXBsZWRJbWFnZUJvdW5kcyk7Ci0gICAgfQotICAgIAotICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb247Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIG9yaWVudGF0aW9uID0gZnJh
bWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0gICAgY3R4dC5kcmF3TmF0
aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNjYWxlZFNyY1JlY3QsIGNvbXBv
c2l0ZU9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVy
KCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCk7
Ci0KLSAgICBpZiAoIW1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpCi0gICAgICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKLQotICAgIHJldHVybiBtX3NvdXJjZS5j
cmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShD
RykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0JpdG1hcEltYWdlQ0cuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQoj
IyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
RGVjb2RlckNHLmNwcAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcs
NyArMTU3LDcgQEAgYm9vbCBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbgogSW50
U2l6ZSBJbWFnZURlY29kZXI6OnNpemUoKSBjb25zdAogewogICAgIGlmIChtX3NpemUuaXNFbXB0
eSgpKQotICAgICAgICBtX3NpemUgPSBmcmFtZVNpemVBdEluZGV4KDAsIDApOworICAgICAgICBt
X3NpemUgPSBmcmFtZVNpemVBdEluZGV4KDApOwogICAgIHJldHVybiBtX3NpemU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyQ0cuaAkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBwdWJsaWM6CiAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OwogICAgIE9wdGlv
bmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3Q7CiAgICAgCi0gICAgSW50U2l6ZSBmcmFtZVNp
emVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CisgICAgSW50U2l6ZSBm
cmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1w
bGluZ0xldmVsKSBjb25zdDsKICAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90
KSBjb25zdDsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3Qp
IGNvbnN0OwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
TmF0aXZlSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIK
KworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29yZUdyYXBo
aWNzU1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCisKKyNpZiBQTEFURk9S
TShXSU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBuYXRpdmVJ
bWFnZVNpemUoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQoreworICAgIHJldHVybiBpbWFn
ZSA/IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdo
dChpbWFnZS5nZXQoKSkpIDogSW50U2l6ZSgpOworfQorCitib29sIG5hdGl2ZUltYWdlSGFzQWxw
aGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImKQoreworICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVj
dGx5IHRoZSBxdWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVs
PworICAgIHJldHVybiB0cnVlOworfQorCitDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29s
aWRDb2xvcihjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCit7CisgICAgaWYgKCFpbWFnZSB8
fCBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVy
biBDb2xvcigpOworCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdCQQorICAgIGF1
dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAx
LCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZykpOworCisgICAgaWYg
KCFiaXRtYXBDb250ZXh0KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIENHQ29udGV4
dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAw
LCAxLCAxKSwgaW1hZ2UuZ2V0KCkpOworCisgICAgaWYgKCFwaXhlbFszXSkKKyAgICAgICAgcmV0
dXJuIENvbG9yKDAsIDAsIDAsIDApOworCisgICAgcmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1
IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8g
cGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKworZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9y
IGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250
ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsKKworICAg
IENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJh
bnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KSkpOworICAgIHJldHVybiBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWRE
ZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWRE
ZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Cit9CisKK3Zv
aWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pCit7
CisgICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBz
bWFsbGVyIHRoYW4gc2l6ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IG5h
dGl2ZUltYWdlU2l6ZShpbWFnZSk7CisKKyAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGlu
YXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0
aGUgc3Vic2FtcGxlZCBpbWFnZS4KKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKKyAgICBpZiAoc3Vic2FtcGxlZEltYWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBh
ZGp1c3RlZFNyY1JlY3QgPSBtYXBSZWN0KHNyY1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUp
LCBGbG9hdFJlY3QoeyB9LCBzdWJzYW1wbGVkSW1hZ2VTaXplKSk7CisKKyAgICBjb250ZXh0LmRy
YXdOYXRpdmVJbWFnZShpbWFnZSwgc3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgb3AsIG1vZGUsIG9yaWVudGF0aW9uKTsKK30KKwordm9pZCBjbGVhck5hdGl2
ZUltYWdlU3ViSW1hZ2VzKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKK3sKKyNpZiBDQUNI
RV9TVUJJTUFHRVMKKyAgICBpZiAoaW1hZ2UpCisgICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVh
ckltYWdlKGltYWdlLmdldCgpKTsKKyNlbmRpZgorfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRl
cm5DRy5jcHAJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAg
Q0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dAogICAgIC8vIElmIHdlJ3Jl
IHJlcGVhdGluZyBpbiBib3RoIGRpcmVjdGlvbnMsIHdlIGNhbiB1c2UgaW1hZ2UtYmFja2VkIHBh
dHRlcm5zCiAgICAgLy8gaW5zdGVhZCBvZiBjdXN0b20gcGF0dGVybnMsIGFuZCBhdm9pZCB0aWxp
bmctZWRnZSBwaXhlbCBjcmFja3MuCiAgICAgaWYgKG1fcmVwZWF0WCAmJiBtX3JlcGVhdFkpCi0g
ICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxl
SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpLCBwYXR0ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxp
bmdDb25zdGFudFNwYWNpbmcpOworICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRo
SW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksIHBhdHRl
cm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CiAKICAgICAvLyBJ
ZiBGTFRfTUFYIHNob3VsZCBhbHNvIGJlIHVzZWQgZm9yIHhTdGVwIG9yIHlTdGVwLCBub3RoaW5n
IGlzIHJlbmRlcmVkLiBVc2luZyBmcmFjdGlvbnMgb2YgRkxUX01BWCBhbHNvCiAgICAgLy8gcmVz
dWx0IGluIG5vdGhpbmcgYmVpbmcgcmVuZGVyZWQuCkBAIC04Myw3ICs4Myw3IEBAIENHUGF0dGVy
blJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHQKICAgICBDR0Zsb2F0IHlTdGVwID0gbV9y
ZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8PCAyMik7CiAKICAgICAvLyBUaGUgcGF0
dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYgd2hlbiBpdCdzIGRvbmUgcmVuZGVyaW5n
IGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2Ug
PSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOworICAgIENHSW1h
Z2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmxlYWtSZWYo
KTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJhY2tzID0geyAw
LCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKICAgICByZXR1cm4g
Q0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcsIFRSVUUsICZw
YXR0ZXJuQ2FsbGJhY2tzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYS5tbQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5U
ZXh0VHJhY2sKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKCkKIHsK
ICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xpZW50LmNyZWF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6
KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCldOworICAgICAgICBbbV9sYXllci5n
ZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPm5hdGl2ZUltYWdlKCkuZ2V0KCld
OwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnNldENvbnRlbnRTY2Fs
ZShmbG9hdCBzY2FsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9JbWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW1hZ2VNYWMubW0JKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzks
MzEgKzc5LDIyIEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGEKICAg
ICBpZiAobV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogCi0gICAg
dW5zaWduZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1dG8gbmF0aXZlSW1hZ2Vz
ID0gdGhpcy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBudW1GcmFtZXMgaXMg
emVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBk
YXRhCisgICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3ZSBrbm93IGZvciBj
ZXJ0YWluIHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKICAgICAvLyBFdmVuIHRo
b3VnaCB0aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YSB3aWxsIGZh
aWwgYW5kIHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8vIGluIGNlcnRhaW4gY2ly
Y3Vtc3RhbmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xlIHdpdGggYW4gZXJyb3Ig
bWVzc2FnZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFZl
Y3RvcjxDR0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUZyYW1lczsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdl
QXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0gICAgICAgICAgICBpbWFn
ZXMuYXBwZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bVZhbGlkRnJhbWVz
ID0gaW1hZ2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGRhdGEg
PSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0lt
YWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRp
b25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbnVtVmFsaWRGcmFtZXMs
IDApKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9
IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VU
VHlwZVRJRkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAgIGlmICghZGVzdGluYXRp
b24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytpKQotICAgICAgICBDR0lt
YWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2VzW2ldLCAwKTsK
KyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBuYXRpdmVJbWFnZS5nZXQo
KSwgMCk7CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQo
KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0JKHJl
dmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcg
KzE0Miw3IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVAKICAgICAg
ICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1fcHJldmlld0lt
YWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBp
bWFnZS0+bmF0aXZlSW1hZ2UoKTsKICAgICAgICAgaWYgKCFtX3ByZXZpZXdJbWFnZSkKICAgICAg
ICAgICAgIGJyZWFrOwogCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYzo6dXBkYXRlUAogCiB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1
cGRhdGVTYW1wbGVCdWZmZXIoKQogewotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZl
ckZyb21DR0ltYWdlKGltYWdlQnVmZmVyKCktPmNvcHlJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkp
OworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKGltYWdlQnVm
ZmVyKCktPmNvcHlJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpKTsKICAgICBhdXRvIHNhbXBs
ZUJ1ZmZlciA9IENNU2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgp
KTsKICAgICAKICAgICBtZWRpYURhdGFVcGRhdGVkKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRl
KHNhbXBsZUJ1ZmZlci5nZXQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsOSArMTM2LDkgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbQog
ICAgIENHQ29udGV4dFNjYWxlQ1RNKGRyYXdDb250ZXh0LCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0
U2V0RmlsbENvbG9yKGRyYXdDb250ZXh0LCB3aGl0ZSk7CiAgICAgQ0dDb250ZXh0RmlsbFJlY3Qo
ZHJhd0NvbnRleHQsIHJlY3QpOwotICAgIGlmIChhdXRvIHNyY0ltYWdlID0gaW1nLT5nZXRDR0lt
YWdlUmVmKCkpIHsKKyAgICBpZiAoYXV0byBzcmNJbWFnZSA9IGltZy0+bmF0aXZlSW1hZ2UoKSkg
ewogICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoZHJhd0NvbnRleHQsIGtDR0JsZW5kTW9k
ZU5vcm1hbCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwg
c3JjSW1hZ2UpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZHJhd0NvbnRleHQsIHJlY3Qs
IHNyY0ltYWdlLmdldCgpKTsKICAgICB9CiAgICAgQ0dDb250ZXh0UmVsZWFzZShkcmF3Q29udGV4
dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA5LTA4ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92
ZSB0aGUgQml0bWFwSW1hZ2UgcGxhdGZvcm0gZGVwZW5kZW50IGNvZGUgdG8gYSBuZXcgZmlsZSBu
YW1lZCBOYXRpdmVJbWFnZVtDR3xDYWlyb10uY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1v
biBGcmFzZXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VD
Ry5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1hZ2VGb3JVUkwpOgorICAg
ICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKToKKyAgICAgICAg
SXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVzZXMgQml0bWFwSW1hZ2U6
OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcEltYWdlOjpmcmFtZXNOYXRp
dmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAorICAgICAgICBWZWN0b3I8
TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkljb25EYXRhYmFzZS5oOgorICAgICAgICBJbmNsdWRlICJOYXRpdmVJbWFnZS5oIiBp
bnN0ZWFkIG9mICJOYXRpdmVJbWFnZVB0ci5oIi4KKyAgICAgICAgCisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOl0pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgQ2FsbCBCaXRtYXBJbWFnZTo6Z2V0
Q0dJbWFnZVJlZigpIGluc3RlYWQgb2YgY2FsbGluZyBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2Uo
KS4KKwogMjAxNi0wOS0wNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtNYWNdIC50YmQgZmlsZXMgZm9yIHRoZSBzaGltcyBlbmQgdXAgaW5zdGFsbGVkIHdoZW4g
YnVpbGRpbmcgd2l0aCBHRU5FUkFURV9URVhUX0JBU0VEX1NUVUJTPVlFUwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAkocmV2aXNpb24gMjA1NTc4KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlQ2xpZW50Lmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uRGF0YWJhc2VDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFNpemUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05hdGl2ZUltYWdlUHRyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9OYXRpdmVJbWFnZS5oPgogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIERh
dGE7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJh
c2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Nn
L1dLSWNvbkRhdGFiYXNlQ0cuY3BwCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIENHSW1hZ2VSZWYg
V0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25E
YXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6ZSkKIHsKICAgICBJbWFnZSog
aW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3Ry
aW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5nZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+bmF0
aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0
aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVsbHB0cjsKIH0KIAogQ0ZBcnJh
eVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JVUkwoV0tJY29uRGF0YWJh
c2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7CiAgICAgSW1hZ2UqIGlt
YWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmlu
Zyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Q0dJbWFnZUFycmF5KCku
bGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1lc05hdGl2ZUltYWdlcygpOwor
ICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShu
dWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAg
ICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENGQXJyYXlB
cHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOworICAgIAorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQkocmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxMzEs
NyArNDEzMSw3IEBAIC0gKFVJSW1hZ2UgKilfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmUKIHsK
ICAgICBpZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10g
aW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVu
dEltYWdlLT5nZXRDR0ltYWdlUmVmKCldIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbVUlJ
bWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRp
Y2F0b3IuY29udGVudEltYWdlLT5uYXRpdmVJbWFnZSgpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9
CiAKIC0gKE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRlbUNvbnRyb2xs
ZXI6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24g
MjA1NTc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMwLDcgKzE3MzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6
OndpbmRvd2VkUGx1Z2luVmlzaWJpbGl0CiAjaWYgUExBVEZPUk0oQ09DT0EpCiBzdGF0aWMgYm9v
bCBpc0FsbW9zdFNvbGlkQ29sb3IoQml0bWFwSW1hZ2UqIGJpdG1hcCkKIHsKLSAgICBDR0ltYWdl
UmVmIGltYWdlID0gYml0bWFwLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgQ0dJbWFnZVJlZiBpbWFn
ZSA9IGJpdG1hcC0+bmF0aXZlSW1hZ2UoKS5nZXQoKTsKICAgICBBU1NFUlQoQ0dJbWFnZUdldEJp
dHNQZXJDb21wb25lbnQoaW1hZ2UpID09IDgpOwogCiAgICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5m
byA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNTY2MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTA5LTA4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgQml0bWFwSW1hZ2UgcGxh
dGZvcm0gZGVwZW5kZW50IGNvZGUgdG8gYSBuZXcgZmlsZSBuYW1lZCBOYXRpdmVJbWFnZVtDR3xD
YWlyb10uY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTg2ODQKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAg
KiBET00vRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdl
OmFuZFJlY3RzOl0pOgorICAgICAgICAqIE1pc2MvV2ViQ2FjaGUubW06CisgICAgICAgICgrW1dl
YkNhY2hlIGltYWdlRm9yVVJMOl0pOgorICAgICAgICBSZXBsYWNlIEJpdG1hcEltYWdlOjpnZXRD
R0ltYWdlUmVmKCkgd2l0aCBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKS4KKwogMjAxNi0wOS0w
NyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNd
IEFkZHJlc3Mgc29tZSBjbGFuZyBzdGF0aWMgYW5hbHl6ZXIgd2FybmluZ3MgaW4gV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL0RPTS9ET00ubW0JKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL0RPTS9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2MSw3ICs1NjEsNyBAQCAtICh2b2lk
KWdldFByZXZpZXdTbmFwc2hvdEltYWdlOihDR0ltYWdlCiAKICAgICBpZiAodGV4dEluZGljYXRv
cikgewogICAgICAgICBpZiAoSW1hZ2UqIGltYWdlID0gdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlKCkpCi0gICAgICAgICAgICAqY2dJbWFnZSA9IChDR0ltYWdlUmVmKUNGQXV0b3JlbGVhc2Uo
Q0dJbWFnZVJldGFpbihpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpKSk7CisgICAgICAgICAgICAqY2dJ
bWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpLmF1dG9yZWxlYXNlKCk7CiAgICAgfQogCiAgICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiByZWN0QXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRdKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2Fj
aGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQko
cmV2aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JV
Ukw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0g
ZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYg
KCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBj
YWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288361</attachid>
            <date>2016-09-08 16:52:55 -0700</date>
            <delta_ts>2016-09-08 18:08:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158684-20160908165028.patch</filename>
            <type>text/plain</type>
            <size>92694</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxNi0wOS0wOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IEJpdG1hcEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIHRvIGEgbmV3IGZpbGUgbmFtZWQg
TmF0aXZlSW1hZ2VbQ0d8Q2Fpcm9dLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJh
c2VyLgorCisgICAgICAgIFRoaXMgaXMgYSByZWZhY3RvcmluZyBwYXRjaC4gSXQgbW92ZXMgdGhl
IEJpdG1hcEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20gQml0bWFw
SW1hZ2UgdG8gTmF0aXZlSW1hZ2VbQ0d8Q2Fpcm9dLmNwcC4gVGhlIG5ldyBBUElzIGFyZQorICAg
ICAgICByZXNwb25zaWJsZSBvZiBkcmF3aW5nIGEgTmF0aXZlSW1hZ2VQdHIgYW5kIGFuc3dlcmlu
ZyBzb21lIG1ldGFkYXRhIHF1ZXJpZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0tIENvZGUg
cmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRmb3JtQXBw
bGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICog
UGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmg6CisgICAg
ICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oOgorICAgICAgICAqIHBhZ2UvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3
IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAo
Y3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJp
dG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2Rl
ZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0
YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVBdEluZGV4SXND
YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhbkFuaW1hdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNsZWFyVGltZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OnN0b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnJl
c2V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZmlsZW5hbWVFeHRlbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1l
RGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggZmFsc2Ug
YmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdlOjpmcmFt
ZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFkYXRhLgor
ICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQgaW4gQml0
bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpjYWNoZUZy
YW1lKCkuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ljb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpvcmllbnRhdGlv
bkZvckN1cnJlbnRGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0
Q0dJbWFnZVJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Z2V0Rmlyc3RD
R0ltYWdlUmVmT2ZTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRD
R0ltYWdlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjYWxjdWxhdGVNYXhp
bXVtU3Vic2FtcGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL05hdGl2ZUltYWdlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL05hdGl2ZUltYWdlUHRyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjp1cGRhdGVQYXVzZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQml0bWFwSW1hZ2VDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bmF0aXZlSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Om5hdGl2ZUltYWdlSGFzQWxw
aGEpOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJOYXRpdmVJbWFnZVN1
YkltYWdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVy
Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzaXplKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om5hdGl2ZUltYWdlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpuYXRpdmVJbWFnZUhhc0Fs
cGhhKToKKyAgICAgICAgKFdlYkNvcmU6Om5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyTmF0aXZlSW1hZ2VT
dWJJbWFnZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2EubW06CisgICAgICAgIChUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9y
bUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1
cGRhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorCiAy
MDE2LTA5LTA4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgRml4IFVSTHMgYWZ0ZXIgcjIwNTY2OS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtQXBwbGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQkocmV2aXNpb24gMjA1Njc2KQorKysgU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1BcHBsZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2Vi
VGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dL
Q0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0
bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTcyLDYgKzcxLDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW50U2l6ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdl
Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHJldmlzaW9u
IDIwNTY3NikKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM1LDYgKzEzNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
TmF0aXZlSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYgQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zsb2F0
UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAK
QEAgLTExNiw2ICsxMTUsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW50UmVjdENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdl
Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCShyZXZpc2lvbiAyMDU2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzg1LDcgKzM4NSw2IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3Rl
bUJhY2tkcm9wTGF5ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxl
ZEJhY2tpbmdMYXllci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9G
bG9hdFJlY3RDRy5jcHAKQEAgLTQwMiw2ICs0MDEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ludFJlY3RDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bnRTaXplQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0
ZXJuQ0cuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UJKHJldmlz
aW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Jp
dG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGls
aXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAtMzEsNiArMzAs
NyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTQyNCw3ICsxNDI0LDcgQEAKIAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5
cGhlbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2
RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRl
eHRSdW4uY3BwICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRl
c3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
Mzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlG
NUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1
QzcgLyogTmF0aXZlSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogTmF0aXZlSW1hZ2VDRy5j
cHAgKi87IH07CiAJCTM3OTE5QzIzMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5
QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5
MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5
OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsg
fTsgfTsKIAkJMzc5MjkxN0ExOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVF
RjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjI3NCw2ICsyMjc0LDcgQEAKIAkJNTUwQTBCQ0Ew
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFs
aWZpZWROYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTU1Qjg3RUMxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VBMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi87IH07CiAJCTU1NUI4N0VEMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVj
b2RlckNHLmggKi87IH07CisJCTU1QTMzNkY3MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2
RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IH07CiAJCTU3MDlFOENEMUQ0
MTNENDcwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8q
IFdlYktpdFN1YnRsZUNyeXB0by5jcHAgKi87IH07CiAJCTU3MDlFOENFMUQ0MTNENUIwMDMyNDRB
QyAvKiBKU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUZGOEY2NjE4MDc0NjA4MDAxMzI2NzQgLyogSlNX
ZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwICovOyB9OwogCQk1NzA5RThDRjFENDEzRDlBMDAz
MjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA5RThDQjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3Vi
dGxlQ3J5cHRvLmggKi87IH07CkBAIC0yNTEzLDcgKzI1MTQsNyBAQAogCQk2NUZFQTg2OTA5ODMz
QURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07
CiAJCTY5QTZDQkFDMUM2QkU0MkMwMEI4MzZFOSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2OTcxMDEw
NzFDNkJFMTU1MDAxOEM3RjEgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwICovOyB9Owog
CQk2OUE2Q0JBRDFDNkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY5NzEwMTA4MUM2
QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oICovOyB9OwotCQk2QjM0
ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAv
KiBOYXRpdmVJbWFnZVB0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTZCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVG
NTBENDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkI2OTNBMkUxQzUxQTgyRTAwQjAzQkVGIC8qIFJlc291
cmNlTG9hZE9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2QjY5M0EyRDFDNTFBODJFMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QjY5
M0EzNDFDNTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkI2OTNBMzMxQzUxQTk1RDAw
QjAzQkVGIC8qIFJlc291cmNlTG9hZE9ic2VydmVyLmNwcCAqLzsgfTsKIAkJNkM0Qzk2REUxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzRDOTZEQTFBRDQ0
ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAqLzsg
fTsKQEAgLTgzNTQsNyArODM1NSw3IEBACiAJCTM3NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBU
ZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRSdW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5
Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdmVybGFwVGVzdFJlcXVlc3RDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlG
NUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3
N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBOYXRpdmVJbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdGl2ZUltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVy
YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9zaXRpb25J
dGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIyMEI3RDE4
ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM3OTI5MTc4MTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcmVkZW50aWFsQmFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTI4OSw2ICs5MjkwLDcgQEAKIAkJNTUwQTBCQzgwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1Qjg3RUExQ0FBRjBBQjAw
MzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZHSW1h
Z2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlQ2xp
ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThDQTFENDEzQ0UzMDAz
MjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU3MDlFOENCMUQ0MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0U3VidGxlQ3J5cHRvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTU0LDcgKzk1NTYsNyBAQAogCQk2NUZF
QTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5
NzEwMTA3MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5NzEwMTA4MUM2QkUxNTUwMDE4
QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlUHRyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRp
dmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlSW1hZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMkQxQzUxQTgyRTAwQjAzQkVG
IC8qIFJlc291cmNlTG9hZE9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc291cmNlTG9hZE9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZCNjkzQTMzMUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRBMUFENDQ4MzUwMDM2NUE1
MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNTA2LDcgKzIwNTA4LDYgQEAK
IAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0
bWFwSW1hZ2VDRy5jcHAgKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9y
Q0cuY3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cu
Y3BwICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAg
Ki8sCkBAIC0yMDUzMyw2ICsyMDUzNCw3IEBACiAJCQkJQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJD
IC8qIFBhdHRlcm5DRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzYwQjA1MzgxNDAwMkNFNjRGIC8qIFBE
RkRvY3VtZW50SW1hZ2UuY3BwICovLAogCQkJCUIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQ
REZEb2N1bWVudEltYWdlLmggKi8sCisJCQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIE5h
dGl2ZUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJp
bWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2NTVDNTkxMDA0MEYyOUUg
LyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUzNTJBMEIwNTM4MTQwMDJD
RTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAgLTIwNzI0LDcgKzIwNzI2
LDcgQEAKIAkJCQlDRERDMUU3OTE4QTk1MkYzMDAyN0E5RDQgLyogTWVkaWFTb3VyY2VQcml2YXRl
Q2xpZW50LmggKi8sCiAJCQkJMzE0QkUzQTQxQjMxMDNGQjAwMTQxOTgyIC8qIE5hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMzE0QkUzQTUxQjMxMDNGQjAwMTQxOTgyIC8qIE5h
bWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oICovLAotCQkJCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0
MSAvKiBOYXRpdmVJbWFnZVB0ci5oICovLAorCQkJCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAv
KiBOYXRpdmVJbWFnZS5oICovLAogCQkJCUIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRo
LmNwcCAqLywKIAkJCQlCMjc1MzU1MzBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oICovLAogCQkJ
CUE4OERENDg4MEI0NjI5QjAwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICovLApA
QCAtMjA3NjYsNiArMjA3NjgsNyBAQAogCQkJCTUwMUJBQUE4MTM5NTBFMkMwMEY3QUNFQiAvKiBX
aW5kUnVsZS5oICovLAogCQkJCTM3OTkxOTk0MTIwMERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZv
cm1hdC5jcHAgKi8sCiAJCQkJMzc5OTE5OTUxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9y
bWF0LmggKi8sCisJCQkJNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmgg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGdyYXBoaWNzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTI1NzAyLDcgKzI1NzA1LDcgQEAKIAkJCQkzMTRCRTNBNzFCMzEwM0ZCMDAxNDE5ODIg
LyogTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIy
MzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
ODE4NzIxRTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywK
LQkJCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTZCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODNCMkQxNzUxQjhCQ0Q2QTAwQTAyRTQ3IC8qIE5hdGl2ZU5vZGVG
aWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMEI5QjZDMEI3NDc1OTkwMDNFRDg5MCAvKiBO
YXRpdmVYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQ0NGMDI3MEFGNkM1
MjkwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI1Nzgw
LDYgKzI1NzgzLDcgQEAKIAkJCQkxQTU2OUQxNTBEN0UyQjgyMDA3QzM5ODMgLyogb2JqY19pbnN0
YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTcwRDdFMkI4MjAwN0MzOTgzIC8qIG9i
amNfcnVudGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTkwRDdFMkI4MjAwN0MzOTgz
IC8qIG9iamNfdXRpbGl0eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTVBMzM2RjcxRDgyMDlGNDAw
MjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTY5ODI1NTExMzQ2
MjlEMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTdF
NUQ3QTc3MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MDAxNzc0MTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0
aXZlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzU5OSw3ICsyNzYwMyw3IEBACiAJCQkJRkRDNTRG
MDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZpbHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5IC8qIEJpcXVhZFByb2Nlc3Nvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1h
cEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIE5hdGl2ZUltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRkM0NTQxRDVFODFD
QjAwMjY3QTY2IC8qIEJsYWNrbGlzdFVwZGF0ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzZE
NkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRURF
RjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAkocmV2aXNpb24gMjA1
Njc2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpZm5kZWYgQ2FjaGVfaAogI2RlZmluZSBDYWNo
ZV9oCiAKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklE
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25EYXRhYmFzZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2VCYXNlLmgJKHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI2lmbmRlZiBJY29uRGF0YWJhc2VCYXNlX2gKICNkZWZpbmUgSWNvbkRhdGFi
YXNlQmFzZV9oCiAKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorI2luY2x1ZGUgIk5hdGl2
ZUltYWdlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCShyZXZpc2lvbiAyMDU2NzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJh
bWU6KE5TUmVjdClmcgogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3Rl
eHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRD
cm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0
SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VSZWYoKTsK
KyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250ZW50c0lt
YWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7Cisg
ICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm5h
dGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVy
cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0yNjUsNyAr
MjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcgogc3RhdGlj
IFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcmVhdGVDb250ZW50Q3Jvc3NmYWRlQW5pbWF0
aW9uKENGVGltZUludGVydmFsIGR1cmF0aW9uLCBUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9y
KQogewogICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcm9zc2ZhZGVBbmltYXRpb24g
PSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAImNvbnRlbnRzIl07Ci0g
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRzSW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLmNv
bnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGNvbnRlbnRzSW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFn
ZSgpOwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0VG9WYWx1ZTooaWQpY29udGVudHNJbWFn
ZS5nZXQoKV07CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9k
ZUZvcndhcmRzXTsKICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRp
b246Tk9dOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjA1Njc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAs
MTEgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJgogewogICAgIC8v
IFNpbmNlIHdlIGRvbid0IGhhdmUgYSBkZWNvZGVyLCB3ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZSBp
bWFnZSBvcmllbnRhdGlvbi4KICAgICAvLyBTZXQgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9u
IHRvIGJlIHRoZSBzYW1lIGFzIG1fc2l6ZSBzbyBpdCdzIG5vdCAweDAuCi0gICAgbV9zaXplUmVz
cGVjdGluZ09yaWVudGF0aW9uID0gbV9zaXplID0gTmF0aXZlSW1hZ2U6OnNpemUoaW1hZ2UpOwor
ICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IG5hdGl2ZUltYWdlU2l6
ZShpbWFnZSk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5hcmVhKCkgKiA0OwotICAgIAor
CiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gTmF0
aXZlSW1hZ2U6Omhhc0FscGhhKGltYWdlKTsKKyAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0g
bmF0aXZlSW1hZ2VIYXNBbHBoYShpbWFnZSk7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRh
dGEgPSB0cnVlOwogICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZNb3ZlKGltYWdlKTsKIH0K
QEAgLTg1LDE4ICs4NSw2IEBAIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQogICAgIHN0b3BB
bmltYXRpb24oKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2xlYXJUaW1lcigpCi17Ci0gICAg
bV9mcmFtZVRpbWVyID0gbnVsbHB0cjsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRUaW1l
cihkb3VibGUgZGVsYXkpCi17Ci0gICAgQVNTRVJUKCFtX2ZyYW1lVGltZXIpOwotICAgIG1fZnJh
bWVUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmQml0bWFwSW1hZ2U6OmFk
dmFuY2VBbmltYXRpb24pOwotICAgIG1fZnJhbWVUaW1lci0+c3RhcnRPbmVTaG90KGRlbGF5KTsK
LX0KLQogYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRl
eCkKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQpAQCAtMTA4LDExICs5Niw2IEBA
IGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleCgKICAgICByZXR1cm4gbV9m
cmFtZXNbaW5kZXhdLm1faW1hZ2U7CiB9CiAKLWJvb2wgQml0bWFwSW1hZ2U6Omhhc1NpbmdsZVNl
Y3VyaXR5T3JpZ2luKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKIHsKICAgICB1bnNp
Z25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9IDA7CkBAIC0xMjUsOSArMTA4LDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvbwogICAgICAgICAvLyBUaGUgdW5kZXJseWlu
ZyBmcmFtZSBpc24ndCBhY3R1YWxseSBjaGFuZ2luZyAod2UncmUganVzdCB0cnlpbmcgdG8KICAg
ICAgICAgLy8gc2F2ZSB0aGUgbWVtb3J5IGZvciB0aGUgZnJhbWVidWZmZXIgZGF0YSksIHNvIHdl
IGRvbid0IG5lZWQgdG8gY2xlYXIKICAgICAgICAgLy8gdGhlIG1ldGFkYXRhLgotICAgICAgICB1
bnNpZ25lZCBmcmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBp
ZiAobV9mcmFtZXNbaV0uY2xlYXIoZmFsc2UpKQotICAgICAgICAgICAgZnJhbWVCeXRlc0NsZWFy
ZWQgKz0gZnJhbWVCeXRlczsKKyAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gbV9mcmFtZXNb
aV0uY2xlYXIoZmFsc2UpOwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGws
IGNsZWFyQmVmb3JlRnJhbWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDgg
KzEzMSw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmUKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgYWxsRnJhbWVC
eXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAoYXV0byYgZnJh
bWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS51c2VkRnJhbWVC
eXRlcygpOwogCiAgICAgaWYgKGFsbEZyYW1lQnl0ZXMgPiBsYXJnZUFuaW1hdGlvbkN1dG9mZikg
ewogICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAgZGVzdHJveURlY29kZWREYXRh
SWZOZWNlc3NhcnkgZGVzdHJveWluZ0RhdGE6IGFsbEZyYW1lQnl0ZXM9JXUgY3V0b2ZmPSV1Iiwg
dGhpcywgYWxsRnJhbWVCeXRlcywgbGFyZ2VBbmltYXRpb25DdXRvZmYpOwpAQCAtMjg4LDIxICsy
NjksMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYQogICAgIC8v
IGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBuZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUg
dG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29tcGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAg
ICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9m
cmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9uJ3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdElu
ZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwogICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2Fj
aGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAgICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZp
b3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVz
W2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRh
ICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUpCi0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xl
YXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAg
ICAgIGlmIChmcmFtZS5tX2hhdmVNZXRhZGF0YSAmJiAhZnJhbWUubV9pc0NvbXBsZXRlKQorICAg
ICAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gZnJhbWUuY2xlYXIodHJ1ZSk7CiAgICAgfQog
ICAgIGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNv
dXJjZTo6Tm8pOwogI2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZv
ciBpT1M/CiAgICAgaW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFd
Lm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFd
LmNsZWFyKHRydWUpKSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1l
cy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgewogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBi
eXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7
CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7CkBAIC0zMzcsMTEgKzMx
Niw2IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGEKICAgICByZXR1
cm4gaXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLVN0cmluZyBCaXRtYXBJbWFnZTo6ZmlsZW5hbWVF
eHRlbnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3NvdXJjZS5maWxlbmFtZUV4dGVuc2lv
bigpOwotfQotCiBzaXplX3QgQml0bWFwSW1hZ2U6OmZyYW1lQ291bnQoKQogewogICAgIGlmICgh
bV9oYXZlRnJhbWVDb3VudCkgewpAQCAtMzY2LDcgKzM0MCw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6
OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9v
bCBCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJh
bWVDYWNoaW5nIGZyYW1lQ2FjaGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lQXRJ
bmRleElzQ2FjaGVkKHNpemVfdCBpbmRleCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJhbWVDYWNoaW5n
KQogewogICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTM5NCw4ICszNjgsNyBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJ
bWFnZUF0CiAgICAgICAgIExPRyhJbWFnZXMsICIgIHN1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCBy
ZXNhbXBsaW5nIiwgbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCk7CiAKICAgICAg
ICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEg
c2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdl
ID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4
XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhd
LmNsZWFyKHRydWUpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAg
IG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsKICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIo
KSkKQEAgLTQwOCwxMCArMzgxLDQ5IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXQKIAogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKIH0KKyAgICAK
K05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJu
IGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQoreworICAgIHJldHVybiBmcmFtZUltYWdlQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSk7Cit9CisgICAgCisjaWYgVVNFKENHKQorTmF0aXZlSW1hZ2VQ
dHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFn
ZUF0SW5kZXgoaSk7CisgICAgICAgIGlmIChpbWFnZSAmJiBuYXRpdmVJbWFnZVNpemUoaW1hZ2Up
ID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAorICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBy
aWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorVmVj
dG9yPE5hdGl2ZUltYWdlUHRyPiBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sK
KyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBm
cmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIGlmIChhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAg
ICAgICAgICBpbWFnZXMuYXBwZW5kKGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGlt
YWdlczsKK30KKyNlbmRpZgogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdElu
ZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgs
IENhY2hlTWV0YWRhdGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lQXRJbmRleElzQ2FjaGVk
KGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlOwpAQCAtNDE5LDIwICs0MzEsMTUg
QEAgYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleAogCiBmbG9hdCBCaXRt
YXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICgh
ZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICgh
ZW5zdXJlRnJhbWVBdEluZGV4SXNDYWNoZWQoaW5kZXgsIENhY2hlTWV0YWRhdGFPbmx5KSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb247
CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsK
LX0KLQogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4
KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9u
bHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVBdEluZGV4SXNDYWNoZWQoaW5kZXgsIENhY2hlTWV0
YWRhdGFPbmx5KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAobV9mcmFtZXNbaW5k
ZXhdLm1faGF2ZU1ldGFkYXRhKQpAQCAtNDQ4LDcgKzQ1NSw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6
OmN1cnJlbnRGcmFtZUtub3duVG9CZU8KIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6
ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJl
RnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJl
RnJhbWVBdEluZGV4SXNDYWNoZWQoaW5kZXgsIENhY2hlTWV0YWRhdGFPbmx5KSkKICAgICAgICAg
cmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAogICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpCkBAIC00NTcsNiArNDY0LDMyIEBAIEltYWdlT3JpZW50YXRpb24gQml0bWFw
SW1hZ2U6OmZyYW1lT3JpZW4KICAgICByZXR1cm4gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4
KGluZGV4KTsKIH0KIAorQ29sb3IgQml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigp
Cit7CisgICAgLy8gSWYgdGhlIGltYWdlIHNpemUgaXMgbm90IGF2YWlsYWJsZSB5ZXQgb3IgaWYg
dGhlIGltYWdlIHdpbGwgYmUgYW5pbWF0aW5nIGRvbid0IHVzZSB0aGUgc29saWQgY29sb3Igb3B0
aW1pemF0aW9uLgorICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIENv
bG9yKCk7CisKKyAgICBpZiAobV9zb2xpZENvbG9yKQorICAgICAgICByZXR1cm4gbV9zb2xpZENv
bG9yLnZhbHVlKCk7CisKKyAgICAvLyBJZiB0aGUgZnJhbWUgaW1hZ2UgaXMgbm90IGxvYWRlZCwg
Zmlyc3QgdXNlIHRoZSBkZWNvZGVyIHRvIGdldCB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCisgICAg
aWYgKCFoYXZlRnJhbWVJbWFnZUF0SW5kZXgoMCkgJiYgbV9zb3VyY2UuZnJhbWVTaXplQXRJbmRl
eCgwKSAhPSBJbnRTaXplKDEsIDEpKSB7CisgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9yKCk7
CisgICAgICAgIHJldHVybiBtX3NvbGlkQ29sb3IudmFsdWUoKTsKKyAgICB9CisKKyAgICAvLyBD
YWNoZSB0aGUgZnJhbWUgaW1hZ2UuIFRoZSBzaXplIHdpbGwgYmUgY2FsY3VsYXRlZCBmcm9tIHRo
ZSBOYXRpdmVJbWFnZVB0ci4KKyAgICBpZiAoIWVuc3VyZUZyYW1lQXRJbmRleElzQ2FjaGVkKDAp
KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkp
OworICAgIG1fc29saWRDb2xvciA9IG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKG1f
ZnJhbWVzWzBdLm1faW1hZ2UpOworICAgIAorICAgIEFTU0VSVChtX3NvbGlkQ29sb3IpOworICAg
IHJldHVybiBtX3NvbGlkQ29sb3IudmFsdWUoKTsKK30KKwogI2lmICFBU1NFUlRfRElTQUJMRUQK
IGJvb2wgQml0bWFwSW1hZ2U6Om5vdFNvbGlkQ29sb3IoKQogewpAQCAtNDc4LDExICs1MTEsOTMg
QEAgaW50IEJpdG1hcEltYWdlOjpyZXBldGl0aW9uQ291bnQoYm9vbCBpbQogICAgIHJldHVybiBt
X3JlcGV0aXRpb25Db3VudDsKIH0KIAordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlLCBJbWFnZU9y
aWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCit7CisgICAgaWYgKGRlc3RSZWN0Lmlz
RW1wdHkoKSB8fCBzcmNSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIHN0YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7CisjZWxzZQorICAg
IHN0YXJ0QW5pbWF0aW9uKCk7CisjZW5kaWYKKworICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4
ZWxTb2xpZENvbG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxs
V2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJy
ZW50RnJhbWUsIHN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QpKTsK
KyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGlt
YWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworCisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbihkZXNjcmlwdGlvbi5pbWFnZU9yaWVudGF0aW9uKCkpOworICAgIGlmIChkZXNjcmlwdGlv
bi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQor
ICAgICAgICBvcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKKworICAgIGRyYXdOYXRpdmVJbWFnZShpbWFnZSwgY29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9uKTsKKworICAgIGlmIChpbWFnZU9i
c2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKK30KKyAg
ICAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQoreworICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghY3R4dC5kcmF3THVtaW5hbmNlTWFzaygpKSB7CisgICAgICAgIEltYWdl
OjpkcmF3UGF0dGVybihjdHh0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3AsIGRlc3RSZWN0LCBibGVuZE1vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFtX2NhY2hlZEltYWdlKSB7CisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoZXhwYW5kZWRJbnRTaXplKHRpbGVSZWN0LnNpemUoKSks
IENvbG9yU3BhY2VTUkdCLCBjdHh0KTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBpbWFnZU9ic2Vy
dmVyKCk7CisKKyAgICAgICAgLy8gVGVtcG9yYXJpbHkgcmVzZXQgaW1hZ2Ugb2JzZXJ2ZXIsIHdl
IGRvbid0IHdhbnQgdG8gcmVjZWl2ZSBhbnkgY2hhbmdlSW5SZWN0KCkgY2FsbHMgZHVlIHRvIHRo
aXMgcmVsYXlvdXQuCisgICAgICAgIHNldEltYWdlT2JzZXJ2ZXIobnVsbHB0cik7CisKKyAgICAg
ICAgZHJhdyhidWZmZXItPmNvbnRleHQoKSwgdGlsZVJlY3QsIHRpbGVSZWN0LCBvcCwgYmxlbmRN
b2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CisKKyAgICAgICAgc2V0SW1hZ2VP
YnNlcnZlcihvYnNlcnZlcik7CisgICAgICAgIGJ1ZmZlci0+Y29udmVydFRvTHVtaW5hbmNlTWFz
aygpOworCisgICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSwgVW5zY2FsZWQpOworICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGN0eHQuc2V0RHJhd0x1bWluYW5j
ZU1hc2soZmFsc2UpOworICAgIG1fY2FjaGVkSW1hZ2UtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVS
ZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7
Cit9CisKIGJvb2wgQml0bWFwSW1hZ2U6OnNob3VsZEFuaW1hdGUoKQogewogICAgIHJldHVybiAo
cmVwZXRpdGlvbkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSAmJiAhbV9hbmltYXRpb25G
aW5pc2hlZCAmJiBpbWFnZU9ic2VydmVyKCkpOwogfQogCitib29sIEJpdG1hcEltYWdlOjpjYW5B
bmltYXRlKCkKK3sKKyAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+
IDE7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmNsZWFyVGltZXIoKQoreworICAgIG1fZnJhbWVU
aW1lciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIoZG91Ymxl
IGRlbGF5KQoreworICAgIEFTU0VSVCghbV9mcmFtZVRpbWVyKTsKKyAgICBtX2ZyYW1lVGltZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5p
bWF0aW9uKTsKKyAgICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChkZWxheSk7Cit9CisKIHZv
aWQgQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKENhdGNoVXBBbmltYXRpb24gY2F0Y2hVcElm
TmVjZXNzYXJ5KQogewogICAgIGlmIChtX2ZyYW1lVGltZXIgfHwgIXNob3VsZEFuaW1hdGUoKSB8
fCBmcmFtZUNvdW50KCkgPD0gMSkKQEAgLTU4MCw2MCArNjk1LDYgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6c3RhcnRBbmltYXRpb24oQ2F0Y2hVcAogICAgIHN0YXJ0VGltZXIoMCk7CiB9CiAKLXZvaWQg
Qml0bWFwSW1hZ2U6OnN0b3BBbmltYXRpb24oKQotewotICAgIC8vIFRoaXMgdGltZXIgaXMgdXNl
ZCB0byBhbmltYXRlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGltYWdlLiBEb24ndCBpbnZhbGlk
YXRlCi0gICAgLy8gdGhlIHRpbWVyIHVubGVzcyBhbGwgcmVuZGVyZXJzIGhhdmUgc3RvcHBlZCBk
cmF3aW5nLgotICAgIGNsZWFyVGltZXIoKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6cmVzZXRB
bmltYXRpb24oKQotewotICAgIHN0b3BBbmltYXRpb24oKTsKLSAgICBtX2N1cnJlbnRGcmFtZSA9
IDA7Ci0gICAgbV9yZXBldGl0aW9uc0NvbXBsZXRlID0gMDsKLSAgICBtX2Rlc2lyZWRGcmFtZVN0
YXJ0VGltZSA9IDA7Ci0gICAgbV9hbmltYXRpb25GaW5pc2hlZCA9IGZhbHNlOwotICAgIAotICAg
IC8vIEZvciBleHRyZW1lbHkgbGFyZ2UgYW5pbWF0aW9ucywgd2hlbiB0aGUgYW5pbWF0aW9uIGlz
IHJlc2V0LCB3ZSBqdXN0IHRocm93IGV2ZXJ5dGhpbmcgYXdheS4KLSAgICBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSh0cnVlKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAodGls
ZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWN0eHQuZHJhd0x1
bWluYW5jZU1hc2soKSkgewotICAgICAgICBJbWFnZTo6ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJl
Y3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpIHsKLSAgICAg
ICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihleHBh
bmRlZEludFNpemUodGlsZVJlY3Quc2l6ZSgpKSwgQ29sb3JTcGFjZVNSR0IsIGN0eHQpOwotICAg
ICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbWFnZU9i
c2VydmVyKiBvYnNlcnZlciA9IGltYWdlT2JzZXJ2ZXIoKTsKLQotICAgICAgICAvLyBUZW1wb3Jh
cmlseSByZXNldCBpbWFnZSBvYnNlcnZlciwgd2UgZG9uJ3Qgd2FudCB0byByZWNlaXZlIGFueSBj
aGFuZ2VJblJlY3QoKSBjYWxscyBkdWUgdG8gdGhpcyByZWxheW91dC4KLSAgICAgICAgc2V0SW1h
Z2VPYnNlcnZlcihudWxscHRyKTsKLQotICAgICAgICBkcmF3KGJ1ZmZlci0+Y29udGV4dCgpLCB0
aWxlUmVjdCwgdGlsZVJlY3QsIG9wLCBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlw
dGlvbigpKTsKLQotICAgICAgICBzZXRJbWFnZU9ic2VydmVyKG9ic2VydmVyKTsKLSAgICAgICAg
YnVmZmVyLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICAgICAgbV9jYWNoZWRJbWFn
ZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBVbnNjYWxlZCk7Ci0g
ICAgICAgIGlmICghbV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBjdHh0LnNldERyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKTsKLSAgICBtX2NhY2hlZEltYWdl
LT5kcmF3UGF0dGVybihjdHh0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3AsIGRlc3RSZWN0LCBibGVuZE1vZGUpOwotfQotCi0KIHZvaWQgQml0bWFwSW1hZ2U6OmFkdmFu
Y2VBbmltYXRpb24oKQogewogICAgIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbigpOwpAQCAtNjgz
LDM1ICs3NDQsMjMgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aQog
ICAgIHJldHVybiBhZHZhbmNlZEFuaW1hdGlvbjsKIH0KIAotQ29sb3IgQml0bWFwSW1hZ2U6OnNp
bmdsZVBpeGVsU29saWRDb2xvcigpCit2b2lkIEJpdG1hcEltYWdlOjpzdG9wQW5pbWF0aW9uKCkK
IHsKLSAgICAvLyBJZiB0aGUgaW1hZ2Ugc2l6ZSBpcyBub3QgYXZhaWxhYmxlIHlldCBvciBpZiB0
aGUgaW1hZ2Ugd2lsbCBiZSBhbmltYXRpbmcgZG9uJ3QgdXNlIHRoZSBzb2xpZCBjb2xvciBvcHRp
bWl6YXRpb24uCi0gICAgaWYgKGZyYW1lQ291bnQoKSAhPSAxKQotICAgICAgICByZXR1cm4gQ29s
b3IoKTsKLSAgICAKLSAgICBpZiAobV9zb2xpZENvbG9yKQotICAgICAgICByZXR1cm4gbV9zb2xp
ZENvbG9yLnZhbHVlKCk7Ci0KLSAgICAvLyBJZiB0aGUgZnJhbWUgaW1hZ2UgaXMgbm90IGxvYWRl
ZCwgZmlyc3QgdXNlIHRoZSBkZWNvZGVyIHRvIGdldCB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCi0g
ICAgaWYgKCFoYXZlRnJhbWVJbWFnZUF0SW5kZXgoMCkgJiYgbV9zb3VyY2UuZnJhbWVTaXplQXRJ
bmRleCgwLCAwKSAhPSBJbnRTaXplKDEsIDEpKSB7Ci0gICAgICAgIG1fc29saWRDb2xvciA9IENv
bG9yKCk7Ci0gICAgICAgIHJldHVybiBtX3NvbGlkQ29sb3IudmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICAvLyBDYWNoZSB0aGUgZnJhbWUgaW1hZ2UuIFRoZSBzaXplIHdpbGwgYmUgY2FsY3VsYXRlZCBm
cm9tIHRoZSBOYXRpdmVJbWFnZVB0ci4KLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoMCkp
Ci0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIEFTU0VSVChtX2ZyYW1lcy5zaXpl
KCkpOwotICAgIG1fc29saWRDb2xvciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IobV9mcmFtZXNbMF0ubV9pbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKG1fc29saWRD
b2xvcik7Ci0gICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOworICAgIC8vIFRoaXMgdGlt
ZXIgaXMgdXNlZCB0byBhbmltYXRlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGltYWdlLiBEb24n
dCBpbnZhbGlkYXRlCisgICAgLy8gdGhlIHRpbWVyIHVubGVzcyBhbGwgcmVuZGVyZXJzIGhhdmUg
c3RvcHBlZCBkcmF3aW5nLgorICAgIGNsZWFyVGltZXIoKTsKIH0KLSAgICAKLWJvb2wgQml0bWFw
SW1hZ2U6OmNhbkFuaW1hdGUoKQorCit2b2lkIEJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigp
CiB7Ci0gICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkgPiAxOworICAg
IHN0b3BBbmltYXRpb24oKTsKKyAgICBtX2N1cnJlbnRGcmFtZSA9IDA7CisgICAgbV9yZXBldGl0
aW9uc0NvbXBsZXRlID0gMDsKKyAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IDA7CisgICAg
bV9hbmltYXRpb25GaW5pc2hlZCA9IGZhbHNlOworCisgICAgLy8gRm9yIGV4dHJlbWVseSBsYXJn
ZSBhbmltYXRpb25zLCB3aGVuIHRoZSBhbmltYXRpb24gaXMgcmVzZXQsIHdlIGp1c3QgdGhyb3cg
ZXZlcnl0aGluZyBhd2F5LgorICAgIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KHRydWUp
OwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShy
ZXZpc2lvbiAyMDU2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywyNSArNDcsOSBAQCB0eXBlZGVmIHN0cnVj
dCBIQklUTUFQX18gKkhCSVRNQVA7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IHN0cnVjdCBGcmFtZURhdGE7Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotICAgIHRlbXBsYXRlPD4g
c3RydWN0IFZlY3RvclRyYWl0czxXZWJDb3JlOjpGcmFtZURhdGE+IDogcHVibGljIFNpbXBsZUNs
YXNzVmVjdG9yVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuSW5pdGlhbGl6
ZVdpdGhNZW1zZXQgPSBmYWxzZTsgLy8gTm90IGFsbCBGcmFtZURhdGEgbWVtYmVycyBpbml0aWFs
aXplIHRvIDAuCi0gICAgfTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUaW1l
cjsKIAotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLSAgICBJbnRTaXplIHNpemUoY29uc3QgTmF0
aXZlSW1hZ2VQdHImKTsKLSAgICBib29sIGhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7
Ci0gICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7
Ci19Ci0KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQogLy8gRnJhbWVEYXRhIENsYXNzCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KQEAgLTc1LDI0ICs1OSwzMyBAQCBwdWJsaWM6CiAgICAgRnJhbWVE
YXRhKCkKICAgICAgICAgOiBtX2hhdmVNZXRhZGF0YShmYWxzZSkKICAgICAgICAgLCBtX2lzQ29t
cGxldGUoZmFsc2UpCi0gICAgICAgICwgbV9oYXNBbHBoYSh0cnVlKQorICAgICAgICAsIG1faGFz
QWxwaGEoZmFsc2UpCiAgICAgewogICAgIH0KIAogICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0g
ICAgICAgIGNsZWFyKHRydWUpOworICAgIHsKKyAgICAgICAgY2xlYXJOYXRpdmVJbWFnZVN1Yklt
YWdlcyhtX2ltYWdlKTsKICAgICB9CiAKLSAgICAvLyBDbGVhciB0aGUgY2FjaGVkIGltYWdlIGRh
dGEgb24gdGhlIGZyYW1lLCBhbmQgKG9wdGlvbmFsbHkpIHRoZSBtZXRhZGF0YS4KLSAgICAvLyBS
ZXR1cm5zIHdoZXRoZXIgdGhlcmUgd2FzIGNhY2hlZCBpbWFnZSBkYXRhIHRvIGNsZWFyLgotICAg
IGJvb2wgY2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKTsKKyAgICB1bnNpZ25lZCBjbGVhcihib29s
IGNsZWFyTWV0YWRhdGEpCisgICAgeworICAgICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdXNl
ZEZyYW1lQnl0ZXMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjbGVhck1ldGFkYXRhKQorICAg
ICAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKKworICAgICAgICBtX3N1YnNhbXBsaW5n
TGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbDsKKyAgICAgICAgbV9pbWFnZSA9IG51bGxw
dHI7CisKKyAgICAgICAgcmV0dXJuIGZyYW1lQnl0ZXM7CisgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIHVzZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRl
cyA6IDA7IH0KIAogICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CiAgICAgSW1hZ2VPcmllbnRh
dGlvbiBtX29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJz
YW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKKyAgICBTdWJzYW1wbGluZ0xl
dmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsIH07CiAgICAg
ZmxvYXQgbV9kdXJhdGlvbiB7IDAgfTsKICAgICBib29sIG1faGF2ZU1ldGFkYXRhIDogMTsKICAg
ICBib29sIG1faXNDb21wbGV0ZSA6IDE7CkBAIC0xMDUsMTAgKzk4LDYgQEAgcHVibGljOgogLy8g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBjbGFz
cyBCaXRtYXBJbWFnZSBmaW5hbCA6IHB1YmxpYyBJbWFnZSB7Ci0gICAgZnJpZW5kIGNsYXNzIEdl
bmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsK
LSAgICBmcmllbmQgY2xhc3MgR3JhZGllbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Qml0bWFwSW1hZ2U+IGNyZWF0ZShO
YXRpdmVJbWFnZVB0ciYmIG5hdGl2ZUltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IG51
bGxwdHIpCiAgICAgewpAQCAtMTIzLDcgKzExMiw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZp
cnR1YWwgfkJpdG1hcEltYWdlKCk7CiAgICAgCi0gICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9y
aWdpbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBGbG9hdFNpemUgZHVl
IHRvIG92ZXJyaWRlLgogICAgIEZsb2F0U2l6ZSBzaXplKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0x
MzQsNyArMTIzLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWNvZGVkU2l6ZTsgfQogCiAgICAgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFs
bERhdGFSZWNlaXZlZCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9zb3VyY2UuZmlsZW5hbWVFeHRlbnNpb24oKTsgfQogCiAgICAgLy8g
SXQgbWF5IGxvb2sgdW51c3VhbCB0aGF0IHRoZXJlIGlzIG5vIHN0YXJ0IGFuaW1hdGlvbiBjYWxs
IGFzIHB1YmxpYyBBUEkuIFRoaXMgaXMgYmVjYXVzZQogICAgIC8vIHdlIHN0YXJ0IGFuZCBzdG9w
IGFuaW1hdGluZyBsYXppbHkuIEFuaW1hdGlvbiBiZWdpbnMgd2hlbmV2ZXIgc29tZW9uZSBkcmF3
cyB0aGUgaW1hZ2UuIEl0IHdpbGwKQEAgLTE1NSwxMiArMTQ0LDYgQEAgcHVibGljOgogICAgIENG
RGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSBvdmVycmlkZTsKICNlbmRpZgogCi0jaWYg
VVNFKENHKQotICAgIFdFQkNPUkVfRVhQT1JUIENHSW1hZ2VSZWYgZ2V0Q0dJbWFnZVJlZigpIG92
ZXJyaWRlOwotICAgIENHSW1hZ2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IElu
dFNpemUmKSBvdmVycmlkZTsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFy
cmF5KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTikKICAgICBib29sIGdl
dEhCSVRNQVAoSEJJVE1BUCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhC
SVRNQVAsIGNvbnN0IEludFNpemUqKSBvdmVycmlkZTsKQEAgLTE3NCw3ICsxNTcsMTIgQEAgcHVi
bGljOgogICAgIEV2YXNfT2JqZWN0KiBnZXRFdmFzT2JqZWN0KEV2YXMqKSBvdmVycmlkZTsKICNl
bmRpZgogCisgICAgV0VCQ09SRV9FWFBPUlQgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBv
dmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
IG92ZXJyaWRlOworI2lmIFVTRShDRykKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9m
U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRy
PiBmcmFtZXNOYXRpdmVJbWFnZXMoKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIEltYWdlT3JpZW50
YXRpb24gb3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFt
ZU9yaWVudGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KIAogICAgIGJvb2wgY3VycmVu
dEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGU7CkBAIC0yMTUsNyArMjAzLDYgQEAgcHJv
dGVjdGVkOgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBm
cmFtZUltYWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEp
OwotICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCk7CiAKICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjks
NyArMjE2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY2FjaGVGcmFtZShzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRhZGF0YUFuZEZy
YW1lKTsKIAogICAgIC8vIENhbGxlZCBiZWZvcmUgYWNjZXNzaW5nIG1fZnJhbWVzW2luZGV4XSBm
b3IgaW5mbyB3aXRob3V0IGRlY29kaW5nLiBSZXR1cm5zIGZhbHNlIG9uIGluZGV4IG91dCBvZiBi
b3VuZHMuCi0gICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCwgSW1hZ2VG
cmFtZUNhY2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGJvb2wgZW5zdXJlRnJh
bWVBdEluZGV4SXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hl
TWV0YWRhdGFBbmRGcmFtZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQg
ZGF0YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUg
ZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRl
c3Ryb3kKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgJKHJldmlz
aW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorI2luY2x1
ZGUgIk5hdGl2ZUltYWdlLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5o
PgogI2VsaWYgUExBVEZPUk0oTUFDKQogT0JKQ19DTEFTUyBOU0ltYWdlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiAyMDU2NzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJOYXRp
dmVJbWFnZVB0ci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgpAQCAtMTM3LDggKzEzNywxMSBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFRpbGVS
dWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VUaWxlLCBSZXBlYXRUaWxlIH07CiAK
KyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29uc3Qg
SW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZp
cnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIHsgcmV0
dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQorICAgIHZpcnR1YWwgVmVjdG9yPE5hdGl2ZUltYWdl
UHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7IH07IH0KIAogICAgIC8vIEFjY2Vz
c29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCiAKQEAgLTE1MCwxMiArMTUzLDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIHsgcmV0
dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKENHKQotICAgIHZpcnR1YWwgQ0dJbWFn
ZVJlZiBnZXRDR0ltYWdlUmVmKCkgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgQ0dJ
bWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJu
IG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkFycmF5UmVmPiBnZXRDR0ltYWdl
QXJyYXkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTikK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAsIGNvbnN0IEludFNpemUq
KSB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjA1Njc2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NCwyMCArOTQsMTkgQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIq
IAogU3Vic2FtcGxpbmdMZXZlbCBJbWFnZVNvdXJjZTo6Y2FsY3VsYXRlTWF4aW11bVN1YnNhbXBs
aW5nTGV2ZWwoKSBjb25zdAogewogICAgIGlmICghbV9hbGxvd1N1YnNhbXBsaW5nIHx8ICFhbGxv
d1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoMCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWw7CiAgICAgCiAgICAgLy8gRklYTUU6IHRo
aXMgdmFsdWUgd2FzIGNob3NlbiB0byBiZSBhcHByb3ByaWF0ZSBmb3IgaU9TIHNpbmNlIHRoZSBp
bWFnZQogICAgIC8vIHN1YnNhbXBsaW5nIGlzIG9ubHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGlP
Uy4gQ2hvb3NlIGEgZGlmZmVyZW50IHZhbHVlCiAgICAgLy8gaWYgaW1hZ2Ugc3Vic2FtcGxpbmcg
aXMgZW5hYmxlZCBvbiBvdGhlciBwbGF0Zm9ybS4KICAgICBjb25zdCBpbnQgbWF4aW11bUltYWdl
QXJlYUJlZm9yZVN1YnNhbXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0OwotICAgIGNvbnN0IFN1YnNh
bXBsaW5nTGV2ZWwgbWF4U3Vic2FtcGxpbmdMZXZlbCA9IDM7Ci0gICAgCi0gICAgZm9yIChTdWJz
YW1wbGluZ0xldmVsIGxldmVsID0gMDsgbGV2ZWwgPCBtYXhTdWJzYW1wbGluZ0xldmVsOyArK2xl
dmVsKSB7CisKKyAgICBmb3IgKFN1YnNhbXBsaW5nTGV2ZWwgbGV2ZWwgPSBNaW5TdWJzYW1wbGlu
Z0xldmVsOyBsZXZlbCA8IE1heFN1YnNhbXBsaW5nTGV2ZWw7ICsrbGV2ZWwpIHsKICAgICAgICAg
aWYgKGZyYW1lU2l6ZUF0SW5kZXgoMCwgbGV2ZWwpLmFyZWEoKSA8IG1heGltdW1JbWFnZUFyZWFC
ZWZvcmVTdWJzYW1wbGluZykKICAgICAgICAgICAgIHJldHVybiBsZXZlbDsKICAgICB9CiAgICAg
Ci0gICAgcmV0dXJuIG1heFN1YnNhbXBsaW5nTGV2ZWw7CisgICAgcmV0dXJuIE1heFN1YnNhbXBs
aW5nTGV2ZWw7CiB9CiAKIHZvaWQgSW1hZ2VTb3VyY2U6OnVwZGF0ZU1ldGFkYXRhKCkKQEAgLTE0
OCwxMiArMTQ3LDEyIEBAIGJvb2wgSW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnMK
IAogSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZyYW1l
U2l6ZUF0SW5kZXgoMCwgMCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgRGVmYXVs
dFN1YnNhbXBsaW5nTGV2ZWwpOwogfQogCiBJbnRTaXplIEltYWdlU291cmNlOjpzaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgw
LCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5k
ZXgoMCwgRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKTsK
IH0KIAogc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkocmV2aXNpb24gMjA1Njc2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlv
bi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
KyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNjIs
NyArNjIsMTQgQEAgY29uc3QgaW50IGNBbmltYXRpb25Mb29wSW5maW5pdGUgPSAtMTsKIGNvbnN0
IGludCBjQW5pbWF0aW9uTm9uZSA9IC0yOwogCiAvLyBTdWJzYW1wbGluZ0xldmVsLiAwIGlzIG5v
IHN1YnNhbXBsaW5nLCAxIGlzIGhhbGYgZGltZW5zaW9ucyBvbiBlYWNoIGF4aXMgZXRjLgotdHlw
ZWRlZiBzaG9ydCBTdWJzYW1wbGluZ0xldmVsOwordXNpbmcgU3Vic2FtcGxpbmdMZXZlbCA9IGlu
dDsKKworZW51bSA6IFN1YnNhbXBsaW5nTGV2ZWwgeworICAgIE5pbFN1YnNhbXBsaW5nTGV2ZWwg
PSAtMSwKKyAgICBNaW5TdWJzYW1wbGluZ0xldmVsID0gMCwKKyAgICBNYXhTdWJzYW1wbGluZ0xl
dmVsID0gMywKKyAgICBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCA9IE1pblN1YnNhbXBsaW5nTGV2
ZWwKK307CiAKIGNsYXNzIEltYWdlU291cmNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bWFnZVNvdXJjZSk7CkBAIC0xMzAsMTggKzEzNywxOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxv
d1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKICAgICAKICAgICAvLyBT
aXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRTaXplIGZyYW1lU2l6
ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVjdEltYWdlT3JpZW50
YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7CisgICAgSW50
U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRT
dWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJlc3Bl
Y3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1cm4gdGhlIG51bWJl
ciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1lIGlzIG5vdCB5ZXQK
ICAgICAvLyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0
SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7CisgICAgdW5zaWduZWQg
ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNh
bXBsaW5nTGV2ZWwpIGNvbnN0OwogICAgIAogICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4
KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90
KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogICAgIAogICAgIC8vIENhbGxlcnMg
c2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdpdGggYSBoaWdoZXIg
aW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUuCi0gICAgTmF0aXZl
SW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
ID0gMCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90
LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwpOwogICAgIAogcHJp
dmF0ZToKICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwpAQCAtMTUzLDcg
KzE2MCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBtX25lZWRzVXBkYXRlTWV0YWRhdGEg
eyBmYWxzZSB9OwogICAgIHNpemVfdCBtX2ZyYW1lQ291bnQgeyAwIH07Ci0gICAgT3B0aW9uYWw8
U3Vic2FtcGxpbmdMZXZlbD4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKKyAgICBP
cHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsIHsgRGVm
YXVsdFN1YnNhbXBsaW5nTGV2ZWwgfTsKIAogICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlIG9mIG1f
YWxsb3dTdWJzYW1wbGluZyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdEltYWdlU3Vic2Ft
cGxpbmdFbmFibGVkIGluIFNldHRpbmdzLmNwcAogI2lmIFBMQVRGT1JNKElPUykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNp
b24gMjA1Njc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIlVSTC5oIgog
I2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllckVudW1zLmgiCi0j
aW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhUmVzb3VyY2VM
b2FkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oIgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29tcGFueSAxMDAgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgordHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsKKyNlbGlm
IFVTRShDQUlSTykKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2VsaWYgVVNFKFdJTkdESSkK
KyNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDsKKworI2lmIFVTRShDRykKK3R5cGVkZWYgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IE5hdGl2ZUltYWdlUHRyOworI2VsaWYgVVNFKENBSVJPKQordHlwZWRlZiBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBOYXRpdmVJbWFnZVB0cjsKKyNlbGlmIFVTRShXSU5HREkpCit0eXBl
ZGVmIFJlZlB0cjxTaGFyZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOworI2VuZGlmCisKK0ludFNp
emUgbmF0aXZlSW1hZ2VTaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Citib29sIG5hdGl2ZUlt
YWdlSGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKK0NvbG9yIG5hdGl2ZUltYWdlU2lu
Z2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7CisKK2Zsb2F0IHN1YnNh
bXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KTsKKwordm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3Qg
TmF0aXZlSW1hZ2VQdHImLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbnRTaXplJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYpOwordm9pZCBjbGVhck5hdGl2ZUltYWdlU3ViSW1h
Z2VzKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7CisgICAgCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgJKHJldmlzaW9uIDIw
NTY3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRy
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KLSAqIENvcHlyaWdodCAoQykg
MjAxMiBDb21wYW55IDEwMCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIE5hdGl2ZUltYWdlUHRyX2gKLSNkZWZpbmUgTmF0aXZlSW1hZ2VQ
dHJfaAotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLXR5cGVkZWYg
c3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7Ci0jZWxpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKLSNlbGlmIFVTRShXSU5HREkpCi0jaW5jbHVkZSAiU2hhcmVkQml0bWFw
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKENHKQotdHlwZWRl
ZiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gTmF0aXZlSW1hZ2VQdHI7Ci0jZWxpZiBVU0UoQ0FJUk8p
Ci10eXBlZGVmIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltYWdlUHRyOwotI2VsaWYg
VVNFKFdJTkdESSkKLXR5cGVkZWYgUmVmUHRyPFNoYXJlZEJpdG1hcD4gTmF0aXZlSW1hZ2VQdHI7
Ci0jZW5kaWYKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0J
KHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjk3LDcgKzI5Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmoKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKKyAgICBtX3BhdXNlZElt
YWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCk7CiAgICAgQVNTRVJUKG1fcGF1c2VkSW1hZ2UpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJ
bWFnZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gMjA1Njc2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBz
aXplKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4g
Y2Fpcm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3Qg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJm
YWNlX2dldF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQot
Ci1Db2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUlt
YWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLQotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdC
QTMyKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVs
dGlwbGllZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2Rl
LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFk
c3Qud2lkdGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdo
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0
byBzdXJmYWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICgh
c3VyZmFjZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQu
Ci0gICAgICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJh
dGlvbi4KLSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0g
QmxlbmRNb2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwot
ICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5k
TW9kZSk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIElu
dFNpemUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxp
bmcoc3JjLCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dChzcmMpOwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24o
ZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVz
cGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAg
ICAgZnJhbWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKLQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3Jp
ZW50YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VP
cmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBj
b250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RS
ZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RN
KGZyYW1lT3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsK
LSAgICAgICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAg
ICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0
aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAg
ICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwg
c28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3Qg
PSBGbG9hdFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBk
c3RSZWN0LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwg
YWRqdXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0g
ICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3
KHRoaXMpOwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQot
ewotICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNl
OwotCi0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fp
cm8uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1u
YXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VD
YWlyby5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJ
Uk8pCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dENhaXJvLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitJbnRTaXplIG5hdGl2ZUltYWdlU2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCit7
CisgICAgcmV0dXJuIGltYWdlID8gY2Fpcm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSkgOiBJbnRT
aXplKCk7Cit9CisKK2Jvb2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25zdCBOYXRpdmVJbWFnZVB0
ciYgaW1hZ2UpCit7CisgICAgcmV0dXJuICFpbWFnZSB8fCBjYWlyb19zdXJmYWNlX2dldF9jb250
ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOworfQorCitDb2xvciBuYXRp
dmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2Up
Cit7CisgICAgaWYgKCFpbWFnZSB8fCBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpICE9IEludFNpemUo
MSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKKyAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkp
OworICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitm
bG9hdCBzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgZHJhd05hdGl2
ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNv
bnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKQoreworICAgIGNvbnRleHQuc2F2ZSgp
OworICAgIAorICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgorICAgIGlmIChv
cCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIG1vZGUgPT0gQmxlbmRNb2RlTm9ybWFsICYmICFu
YXRpdmVJbWFnZUhhc0FscGhhKGltYWdlKSkKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihvcCwgbW9kZSk7CisgICAgICAgIAorI2lmIEVOQUJMRShJTUFHRV9E
RUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gbmF0aXZlSW1h
Z2VTaXplKGltYWdlKTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291
cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNSZWN0LCBzY2FsZWRTaXplKTsKKyNlbHNlCisgICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChzcmNSZWN0KTsKKyNlbmRpZgorICAgICAgICAKKyAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0OworICAgICAgICAKKyAgICBp
ZiAob3JpZW50YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKKyAgICAgICAgLy8g
SW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgorICAg
ICAgICBjb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSk7CisgICAg
ICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICAgICAg
Y29udGV4dC5jb25jYXRDVE0ob3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoYWRqdXN0
ZWREZXN0UmVjdC5zaXplKCkpKTsKKyAgICAgICAgaWYgKG9yaWVudGF0aW9uLnVzZXNXaWR0aEFz
SGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgd2ls
bCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3Jp
ZW50YXRpb24gb2YKKyAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBm
b3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCisgICAg
ICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoYWRqdXN0ZWREZXN0UmVjdC5zaXplKCku
dHJhbnNwb3NlZFNpemUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChpbWFnZS5nZXQoKSwgYWRqdXN0ZWRE
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsKKyAgICBjb250ZXh0LnJlc3RvcmUo
KTsKK30KKwordm9pZCBjbGVhck5hdGl2ZUltYWdlU3ViSW1hZ2VzKGNvbnN0IE5hdGl2ZUltYWdl
UHRyJikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENB
SVJPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1h
Z2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvQml0bWFwSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCShub25leGlzdGVudCkKQEAg
LTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZl
ci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2Vy
dmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2Ug
TmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+
JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJbnRTaXplKENHSW1h
Z2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsK
LX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mKQotewotICAg
IC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFn
ZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotQ29s
b3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1h
Z2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0aXZlSW1hZ2U6OnNp
emUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAg
IAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBhdXRvIGJpdG1hcENv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6
ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKLQotICAgIGlmICgh
Yml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgCi0gICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwot
ICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAs
IDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhlbFszXSkKLSAgICAg
ICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENvbG9yKHBpeGVsWzBd
ICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xl
YXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAg
ICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGluZ0xldmVsID0gMDsK
LQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0gICAgICAgIHN1Ymlt
YWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlmCi0gICAgICAgIG1f
aW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlUmVmKCkKLXsK
LSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0KLUNHSW1hZ2VSZWYg
Qml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJh
bWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdlICYmIEludFNpemUo
Q0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpKSA9PSBz
aXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0gICAgLy8gRmFsbGJh
Y2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRoZSByaWdodCBz
aXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWluUHRyPENGQXJyYXlS
ZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNpemVfdCBjb3VudCA9
IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVhdGVNdXRhYmxl
KE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VSZWYgY3VyckZyYW1l
ID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBDRkFycmF5QXBwZW5k
VmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBhZG9wdENGKGFycmF5
KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9STShJT1MpCi0gICAg
c3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3RhcnRBbmltYXRpb24o
KTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIC8vIE5l
dmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4K
LSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9ybUNvbnRleHQoKSkp
Ci0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50
RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlv
blJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0
Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQgc3Vic2FtcGxpbmdT
Y2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9u
UmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9u
UmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAgICAgICBpbWFnZSA9
IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ1NjYWxlKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZl
IGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENvbG9yIGNvbG9yID0g
c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAg
ICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9yLCBjb21wb3NpdGVP
cCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1wbGluZyBtYXkgaGF2
ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXplKCkuCi0gICAgSW50
U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhl
aWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMgaW4gdGhlIGNvb3Jk
aW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8gbWFwIGl0IHRv
IHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAgICBGbG9hdFJlY3Qg
b3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0gICAgICAgIEZsb2F0
UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFnZVNpemUpOwotICAg
ICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5hbEltYWdlQm91bmRz
LCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJbWFnZU9yaWVudGF0
aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBvcmllbnRhdGlvbiA9
IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQotICAgIGN0eHQuZHJh
d05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2FsZWRTcmNSZWN0LCBj
b21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBpZiAoaW1hZ2VPYnNl
cnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Ci19Ci0KLVJl
dGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVJbWFnZUF0
SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUo
KSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hlRnJhbWUoaW5kZXgs
IDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKQotICAg
ICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICByZXR1cm4gbV9zb3Vy
Y2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBV
U0UoQ0cpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZURlY29kZXJDRy5jcHAJKHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU3LDcgKzE1Nyw3IEBAIGJvb2wgSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb24K
IEludFNpemUgSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKIHsKICAgICBpZiAobV9zaXplLmlz
RW1wdHkoKSkKLSAgICAgICAgbV9zaXplID0gZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKKyAgICAg
ICAgbV9zaXplID0gZnJhbWVTaXplQXRJbmRleCgwKTsKICAgICByZXR1cm4gbV9zaXplOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJD
Ry5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlRGVjb2RlckNHLmgJKHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDcgQEAgcHVibGljOgogICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKICAgICBP
cHRpb25hbDxJbnRQb2ludD4gaG90U3BvdCgpIGNvbnN0OwogICAgIAotICAgIEludFNpemUgZnJh
bWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OworICAgIEludFNp
emUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vi
c2FtcGxpbmdMZXZlbCkgY29uc3Q7CiAgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNp
emVfdCkgY29uc3Q7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5kZXgoc2l6
ZV90KSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
LmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvcmVH
cmFwaGljc1NQSS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdlb21ldHJ5
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJ
bnRTaXplLmgiCisjaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIgorCisjaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1J
bnRlcmZhY2UuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUgbmF0
aXZlSW1hZ2VTaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKK3sKKyAgICByZXR1cm4g
aW1hZ2UgPyBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRI
ZWlnaHQoaW1hZ2UuZ2V0KCkpKSA6IEludFNpemUoKTsKK30KKworYm9vbCBuYXRpdmVJbWFnZUhh
c0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJikKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNv
cnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFu
bm5lbD8KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhl
bFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQoreworICAgIGlmICghaW1h
Z2UgfHwgbmF0aXZlSW1hZ2VTaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKKworICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAg
ICBhdXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhl
bCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKworICAg
IGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICBDR0Nv
bnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7
CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2Uo
MCwgMCwgMSwgMSksIGltYWdlLmdldCgpKTsKKworICAgIGlmICghcGl4ZWxbM10pCisgICAgICAg
IHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKKworICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAq
IDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1
NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7Cit9CisKK2Zsb2F0IHN1YnNhbXBsaW5nU2NhbGUoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QpCit7CisgICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2Vz
IGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgorICAgIGlmICh3a0NHQ29udGV4dElzUERG
Q29udGV4dChjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisK
KyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmlu
ZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRyYW5zZm9y
bWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRyYW5zZm9y
bWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpOworfQor
Cit2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9u
KQoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQg
aXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJbnRTaXplIHN1YnNhbXBsZWRJbWFnZVNpemUg
PSBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpOworCisgICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29v
cmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQg
dG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNpemUgIT0gc3JjU2l6ZSkKKyAgICAg
ICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBGbG9hdFJlY3QoeyB9LCBzcmNT
aXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6ZSkpOworCisgICAgY29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIHN1YnNhbXBsZWRJbWFnZVNpemUsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmllbnRhdGlvbik7Cit9CisKK3ZvaWQgY2xlYXJO
YXRpdmVJbWFnZVN1YkltYWdlcyhjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCit7CisjaWYg
Q0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKGltYWdlKQorICAgICAgICBzdWJpbWFnZUNhY2hlKCku
Y2xlYXJJbWFnZShpbWFnZS5nZXQoKSk7CisjZW5kaWYKK30KKworfQorCisjZW5kaWYgLy8gVVNF
KENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
YXR0ZXJuQ0cuY3BwCShyZXZpc2lvbiAyMDU2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3
IEBAIENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHQKICAgICAvLyBJZiB3
ZSdyZSByZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3ZSBjYW4gdXNlIGltYWdlLWJhY2tl
ZCBwYXR0ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9tIHBhdHRlcm5zLCBhbmQgYXZvaWQg
dGlsaW5nLWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZ
KQotICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0o
dGlsZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJu
VGlsaW5nQ29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRl
V2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBw
YXR0ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOwogCiAgICAg
Ly8gSWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90
aGluZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwogICAgIC8v
IHJlc3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpAQCAtODMsNyArODMsNyBAQCBDR1Bh
dHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0CiAgICAgQ0dGbG9hdCB5U3RlcCA9
IG1fcmVwZWF0WSA/IHRpbGVSZWN0LmhlaWdodCgpIDogKDEgPDwgMjIpOwogCiAgICAgLy8gVGhl
IHBhdHRlcm4gd2lsbCByZWxlYXNlIHRoZSBDR0ltYWdlUmVmIHdoZW4gaXQncyBkb25lIHJlbmRl
cmluZyBpbiBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrCi0gICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUlt
YWdlID0gQ0dJbWFnZVJldGFpbih0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsKKyAgICBD
R0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5sZWFr
UmVmKCk7CiAKICAgICBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxiYWNrcyA9
IHsgMCwgcGF0dGVybkNhbGxiYWNrLCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrIH07CiAgICAgcmV0
dXJuIENHUGF0dGVybkNyZWF0ZShwbGF0Zm9ybUltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgeFN0ZXAsIHlTdGVwLCBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCBUUlVF
LCAmcGF0dGVybkNhbGxiYWNrcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uQ29jb2EubW0JKHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29h
Ojp+VGV4dFRyYWNrCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSgp
CiB7CiAgICAgaWYgKGF1dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRl
bnRzOihpZClyZXByZXNlbnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAgW21fbGF5
ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFnZSgpLmdl
dCgpXTsKIH0KIAogdm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRDb250ZW50
U2NhbGUoZmxvYXQgc2NhbGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCShyZXZpc2lvbiAyMDU2NzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTc5LDMxICs3OSwyMiBAQCBDRkRhdGFSZWYgQml0bWFwSW1hZ2U6OmdldFRJRkZSZXByZXNlbnRh
CiAgICAgaWYgKG1fdGlmZlJlcCkKICAgICAgICAgcmV0dXJuIG1fdGlmZlJlcC5nZXQoKTsKIAot
ICAgIHVuc2lnbmVkIG51bUZyYW1lcyA9IGZyYW1lQ291bnQoKTsKKyAgICBhdXRvIG5hdGl2ZUlt
YWdlcyA9IHRoaXMtPmZyYW1lc05hdGl2ZUltYWdlcygpOwogCi0gICAgLy8gSWYgbnVtRnJhbWVz
IGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFs
aWQgZGF0YQorICAgIC8vIElmIGZyYW1lc0ltYWdlcy5zaXplKCkgaXMgemVybywgd2Uga25vdyBm
b3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCiAgICAgLy8gRXZl
biB0aG91Z2ggdGhlIGNhbGwgdG8gQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEgd2ls
bCBmYWlsIGFuZCB3ZSdsbCBoYW5kbGUgaXQgZ3JhY2VmdWxseSwKICAgICAvLyBpbiBjZXJ0YWlu
IGNpcmN1bXN0YW5jZXMgdGhhdCBjYWxsIHdpbGwgc3BhbSB0aGUgY29uc29sZSB3aXRoIGFuIGVy
cm9yIG1lc3NhZ2UKLSAgICBpZiAoIW51bUZyYW1lcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBWZWN0b3I8Q0dJbWFnZVJlZj4gaW1hZ2VzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1GcmFtZXM7ICsraSApIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVJ
bWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdlKQotICAgICAgICAgICAg
aW1hZ2VzLmFwcGVuZChjZ0ltYWdlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBudW1WYWxpZEZy
YW1lcyA9IGltYWdlcy5zaXplKCk7CisgICAgaWYgKCFuYXRpdmVJbWFnZXMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBk
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3Rp
bmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJRkYsIG51bVZhbGlkRnJh
bWVzLCAwKSk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRp
b24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCks
IGtVVFR5cGVUSUZGLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAwKSk7CiAKICAgICBpZiAoIWRlc3Rp
bmF0aW9uKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtVmFsaWRGcmFtZXM7ICsraSkKLSAgICAgICAg
Q0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlc1tpXSwg
MCk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBD
R0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgbmF0aXZlSW1hZ2Uu
Z2V0KCksIDApOwogCiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24u
Z2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1t
CShyZXZpc2lvbiAyMDU2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0
Miw3ICsxNDIsNyBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQCiAg
ICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX3ByZXZp
ZXdJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIG1fcHJldmlld0ltYWdl
ID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCk7CiAgICAgICAgIGlmICghbV9wcmV2aWV3SW1hZ2UpCiAg
ICAgICAgICAgICBicmVhazsKIApAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVAKIAogdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1h
Yzo6dXBkYXRlU2FtcGxlQnVmZmVyKCkKIHsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxC
dWZmZXJGcm9tQ0dJbWFnZShpbWFnZUJ1ZmZlcigpLT5jb3B5SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShpbWFn
ZUJ1ZmZlcigpLT5jb3B5SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSk7CiAgICAgYXV0byBz
YW1wbGVCdWZmZXIgPSBDTVNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlci5n
ZXQoKSk7CiAgICAgCiAgICAgbWVkaWFEYXRhVXBkYXRlZChNZWRpYVNhbXBsZUFWRk9iakM6OmNy
ZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAkocmV2aXNpb24gMjA1Njc2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM2LDkgKzEzNiw5IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2Uo
SW0KICAgICBDR0NvbnRleHRTY2FsZUNUTShkcmF3Q29udGV4dCwgMSwgLTEpOwogICAgIENHQ29u
dGV4dFNldEZpbGxDb2xvcihkcmF3Q29udGV4dCwgd2hpdGUpOwogICAgIENHQ29udGV4dEZpbGxS
ZWN0KGRyYXdDb250ZXh0LCByZWN0KTsKLSAgICBpZiAoYXV0byBzcmNJbWFnZSA9IGltZy0+Z2V0
Q0dJbWFnZVJlZigpKSB7CisgICAgaWYgKGF1dG8gc3JjSW1hZ2UgPSBpbWctPm5hdGl2ZUltYWdl
KCkpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRyYXdDb250ZXh0LCBrQ0dCbGVu
ZE1vZGVOb3JtYWwpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZHJhd0NvbnRleHQsIHJl
Y3QsIHNyY0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRyYXdDb250ZXh0LCBy
ZWN0LCBzcmNJbWFnZS5nZXQoKSk7CiAgICAgfQogICAgIENHQ29udGV4dFJlbGVhc2UoZHJhd0Nv
bnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU2NzYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxNi0wOS0w
OCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAg
IE1vdmUgdGhlIEJpdG1hcEltYWdlIHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIHRvIGEgbmV3IGZp
bGUgbmFtZWQgTmF0aXZlSW1hZ2VbQ0d8Q2Fpcm9dLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gRnJhc2VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFi
YXNlQ0cuY3BwOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKToK
KyAgICAgICAgKFdLSWNvbkRhdGFiYXNlVHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTCk6CisgICAg
ICAgIEl0IHdhcyB0aGUgb25seSBwbGFjZSBpbiB0aGUgY29kZSB3aGljaCB1c2VzIEJpdG1hcElt
YWdlOjpnZXRDR0ltYWdlQXJyYXkoKS4KKyAgICAgICAgQ2FsbCBCaXRtYXBJbWFnZTo6ZnJhbWVz
TmF0aXZlSW1hZ2VzKCkgaW5zdGVhZCBhbmQgZm9ybSB0aGUgcmV0dXJuZWQKKyAgICAgICAgVmVj
dG9yPE5hdGl2ZUltYWdlUHRyPiBidWlsZCB0aGUgQ0ZBcnJheVJlZi4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaDoKKyAgICAgICAgSW5jbHVkZSAiTmF0aXZlSW1hZ2Uu
aCIgaW5zdGVhZCBvZiAiTmF0aXZlSW1hZ2VQdHIuaCIuCisgICAgICAgIAorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IF9wcmVzZW50YXRpb25TbmFwc2hvdEZvclByZXZpZXdJdGVtQ29udHJvbGxlcjpd
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAgIENhbGwgQml0bWFwSW1hZ2U6
OmdldENHSW1hZ2VSZWYoKSBpbnN0ZWFkIG9mIGNhbGxpbmcgQml0bWFwSW1hZ2U6Om5hdGl2ZUlt
YWdlKCkuCisKIDIwMTYtMDktMDggIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIE1vdmUgd2Via2l0Mmd0ay5wYy5pbiwgd2Via2l0Mmd0ay13ZWItZXh0ZW5z
aW9uLnBjLmluIGZpbGVzIHVuZGVyIFNvdXJjZS9XZWJLaXQyL2d0ay8KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgJKHJldmlzaW9uIDIwNTY3NikKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZUNsaWVudC5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9OYXRpdmVJbWFnZVB0ci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvTmF0aXZlSW1hZ2UuaD4KIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBEYXRh
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNl
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9X
S0ljb25EYXRhYmFzZUNHLmNwcAkocmV2aXNpb24gMjA1Njc2KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBDR0ltYWdlUmVmIFdL
SWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZvclVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0
YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tTaXplIHNpemUpCiB7CiAgICAgSW1hZ2UqIGlt
YWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmlu
Zyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Rmlyc3RDR0ltYWdlUmVm
T2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8
aW50PihzaXplLmhlaWdodCkpKSA6IDA7CisgICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPm5hdGl2
ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3RhdGlj
X2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5nZXQoKSA6IG51bGxwdHI7CiB9CiAKIENGQXJyYXlS
ZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKFdLSWNvbkRhdGFiYXNl
UmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewogICAgIEltYWdlKiBpbWFn
ZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZTdHJpbmco
dXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldENHSW1hZ2VBcnJheSgpLmxl
YWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGltYWdlLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsKKyAg
ICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUobnVs
bHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7CisgICAg
Zm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDRkFycmF5QXBw
ZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdlLmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRhaW4oYXJyYXkpKTsKIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW0JKHJldmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MTMxLDcg
KzQxMzEsNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJlCiB7CiAg
ICAgaWYgKCFfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGlu
aXRXaXRoQ0dJbWFnZTpfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJ
bWFnZS0+Z2V0Q0dJbWFnZVJlZigpXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1VJSW1h
Z2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNh
dG9yLmNvbnRlbnRJbWFnZS0+bmF0aXZlSW1hZ2UoKS5nZXQoKV0gYXV0b3JlbGVhc2VdOwogfQog
CiAtIChOU0FycmF5ICopX3ByZXNlbnRhdGlvblJlY3RzRm9yUHJldmlld0l0ZW1Db250cm9sbGVy
OihVSVByZXZpZXdJdGVtQ29udHJvbGxlciAqKWNvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDIw
NTY3NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTczMCw3ICsxNzMwLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojp3
aW5kb3dlZFBsdWdpblZpc2liaWxpdAogI2lmIFBMQVRGT1JNKENPQ09BKQogc3RhdGljIGJvb2wg
aXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCiB7Ci0gICAgQ0dJbWFnZVJl
ZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOworICAgIENHSW1hZ2VSZWYgaW1hZ2Ug
PSBiaXRtYXAtPm5hdGl2ZUltYWdlKCkuZ2V0KCk7CiAgICAgQVNTRVJUKENHSW1hZ2VHZXRCaXRz
UGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKIAogICAgIENHQml0bWFwSW5mbyBpbWFnZUluZm8g
PSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhpbWFnZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMDU2NzYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wOS0wOCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJv
dWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhlIEJpdG1hcEltYWdlIHBsYXRm
b3JtIGRlcGVuZGVudCBjb2RlIHRvIGEgbmV3IGZpbGUgbmFtZWQgTmF0aXZlSW1hZ2VbQ0d8Q2Fp
cm9dLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgICog
RE9NL0RPTS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBnZXRQcmV2aWV3U25hcHNob3RJbWFnZTph
bmRSZWN0czpdKToKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJD
YWNoZSBpbWFnZUZvclVSTDpdKToKKyAgICAgICAgUmVwbGFjZSBCaXRtYXBJbWFnZTo6Z2V0Q0dJ
bWFnZVJlZigpIHdpdGggQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkuCisKIDIwMTYtMDktMDcg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBB
ZGRyZXNzIHNvbWUgY2xhbmcgc3RhdGljIGFuYWx5emVyIHdhcm5pbmdzIGluIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9ET00vRE9NLm1tCShyZXZpc2lvbiAyMDU2NzYpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9ET00vRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NjEsNyArNTYxLDcgQEAgLSAodm9pZCln
ZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZQogCiAgICAgaWYgKHRleHRJbmRpY2F0b3Ip
IHsKICAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpKQotICAgICAgICAgICAgKmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENH
SW1hZ2VSZXRhaW4oaW1hZ2UtPmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1h
Z2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0JKHJl
dmlzaW9uIDIwNTY3NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTIwNCw3ICsyMDQsNyBAQCArIChDR0ltYWdlUmVmKWltYWdlRm9yVVJM
OihOU1VSTCAqKXVybAogICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlJiBjYWNoZWRJbWFnZSA9IGRv
d25jYXN0PFdlYkNvcmU6OkNhY2hlZEltYWdlPigqY2FjaGVkUmVzb3VyY2UpOwogICAgIGlmICgh
Y2FjaGVkSW1hZ2UuaGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIGNhY2hlZEltYWdlLmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICByZXR1cm4gY2Fj
aGVkSW1hZ2UuaW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKTsKIH0KIAogI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykK
</data>

          </attachment>
      

    </bug>

</bugzilla>