<?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>206621</bug_id>
          
          <creation_ts>2020-01-22 15:45:29 -0800</creation_ts>
          <short_desc>Make ImageBuffer::getImageData() and putImageData() return and take ImageData</short_desc>
          <delta_ts>2020-02-18 01:31:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>204955</blocked>
    
    <blocked>207048</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1609802</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-22 15:45:29 -0800</bug_when>
    <thetext>This will make the prototype of these functions match the prototype of CanvasRenderingContext2D.getImageData() and CanvasRenderingContext2D.putImageData().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609809</commentid>
    <comment_count>1</comment_count>
      <attachid>388479</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-22 15:49:06 -0800</bug_when>
    <thetext>Created attachment 388479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609856</commentid>
    <comment_count>2</comment_count>
      <attachid>388487</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-22 16:52:08 -0800</bug_when>
    <thetext>Created attachment 388487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609860</commentid>
    <comment_count>3</comment_count>
      <attachid>388488</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-22 17:01:15 -0800</bug_when>
    <thetext>Created attachment 388488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609864</commentid>
    <comment_count>4</comment_count>
      <attachid>388489</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-22 17:07:47 -0800</bug_when>
    <thetext>Created attachment 388489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610117</commentid>
    <comment_count>5</comment_count>
      <attachid>388550</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-23 08:55:45 -0800</bug_when>
    <thetext>Created attachment 388550
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610141</commentid>
    <comment_count>6</comment_count>
      <attachid>388556</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-23 09:42:10 -0800</bug_when>
    <thetext>Created attachment 388556
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610220</commentid>
    <comment_count>7</comment_count>
      <attachid>388566</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-23 11:28:20 -0800</bug_when>
    <thetext>Created attachment 388566
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610324</commentid>
    <comment_count>8</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-23 14:24:38 -0800</bug_when>
    <thetext>Windows was crashing when running the layout test ast/canvas/canvas-toDataURL-jpeg-crash.html 

PROBLEM_CLASSES: 

    ID:     [0n313]
    Type:   [@ACCESS_VIOLATION]
    Class:  Addendum
    Scope:  BUCKET_ID
    Name:   Omit
    Data:   Omit
    PID:    [Unspecified]
    TID:    [0xd48]
    Frame:  [0] : VCRUNTIME140!memcpy

    ID:     [0n285]
    Type:   [INVALID_POINTER_READ]
    Class:  Primary
    Scope:  DEFAULT_BUCKET_ID (Failure Bucket ID prefix)
            BUCKET_ID
    Name:   Add
    Data:   Omit
    PID:    [Unspecified]
    TID:    [0xd48]
    Frame:  [0] : VCRUNTIME140!memcpy

LAST_CONTROL_TRANSFER:  from 00007ffa3bb08474 to 00007ffa493c1480

STACK_TEXT:  
000000e7`772fb438 00007ffa`3bb08474 : 00000000`00001f40 000000e7`772fb570 00000000`00001f40 00000000`00000000 : VCRUNTIME140!memcpy+0x190
000000e7`772fb440 00007ffa`3bcee330 : 000002c2`fe682670 000000e7`772fb570 000002c2`ff1e66a0 000000e7`772fc90e : CoreGraphics!CGAccessSessionGetBytes+0xa4
000000e7`772fb470 00007ffa`3bca5184 : 000002c2`ff216fe0 000002c2`ba1a6d50 000000e7`772fcb88 000002c2`ff210a60 : CoreGraphics!CGImageCreateCopyWithAlphaInfo+0x462f0
000000e7`772fc970 00007ffa`14ad5038 : 000002c2`00000001 000002c2`ff210a60 000002c2`ba1a6d50 000002c2`00000008 : CoreGraphics!CGImageDestinationFinalize+0xc4
000000e7`772fc9a0 00007ffa`1434d262 : 000002c2`ff1e66a0 000000e7`00000000 00000000`00f42400 000002c2`fe6825e0 : WebKit!WebCore::encodeImage+0x138
000000e7`772fca20 00007ffa`1434d3c8 : 000002c2`ba187760 000000e7`772fcba8 000002c2`fe660580 00007ffa`146d4b5f : WebKit!WebCore::ImageBuffer::toCFData+0x4c2
000000e7`772fcb20 00007ffa`143c61fd : 000002c2`fe660580 00000000`00000000 00000000`00000000 00000000`0000000a : WebKit!WebCore::ImageBuffer::toDataURL+0x48
000000e7`772fcb70 00007ffa`1441b22d : 00000000`00000001 000002c2`ff354000 000000e7`772fcc90 00007ffa`2982b357 : WebKit!WebCore::HTMLCanvasElement::toDataURL+0x15d
000000e7`772fcc10 00007ffa`1441b0c3 : 000002c2`fdd90080 000002c2`fe68da08 000000e7`772fcc70 000002c2`bd9b11be : WebKit!WebCore::jsHTMLCanvasElementPrototypeFunctionToDataURLBody+0x14d
000000e7`772fcca0 000002c2`bd9b11be : 000000e7`772fcd90 00007ffa`29b20cfc 000002c2`ff354000 000002c2`ff2421c0 : WebKit!WebCore::jsHTMLCanvasElementPrototypeFunctionToDataURL+0x63

This was because I moved the declaration:

    RefPtr&lt;Uint8ClampedArray&gt; premultipliedData;

inside the if statement:

    if (CFEqual(uti.get(), jpegUTI())) {
        RefPtr&lt;Uint8ClampedArray&gt; premultipliedData;
    }

This caused the Uint8ClampedArray to be freed before calling encodeImage().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610336</commentid>
    <comment_count>9</comment_count>
      <attachid>388566</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-01-23 14:46:10 -0800</bug_when>
    <thetext>Comment on attachment 388566
Patch

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

I think this is OK but the two apparent behavior changes worry me. Can we undo those parts?

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2788
&gt; +        auto imageData = ImageData::create(IntSize(logicalWidth, logicalHeight), makeRef(*array));

Is this a data copy? If not, can it WTFMove the array?

&gt; Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:442
&gt; +        protectedPixelArray = makeRefPtr(imageData-&gt;data());

This is not a copy, right?

&gt; Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:451
&gt; +        image = adoptCF(CGImageCreate(pixelArrayDimensions.width(), pixelArrayDimensions.height(), 8, 32, 4 * pixelArrayDimensions.width(), sRGBColorSpaceRef(), kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast, dataProvider.get(), 0, false, kCGRenderingIntentDefault));

This seems like a behavior change, because the returned CGImage used to be sized based on logical size, but now it&apos;s sized based on internal size.

&gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:133
&gt; +    auto* result = imageData ? imageData-&gt;data() : nullptr;
&gt; +    if (!result)

We use &quot;result&quot; as the value returned by the function, but that&apos;s not the case here.

&gt; Source/WebCore/platform/graphics/filters/FEDropShadow.cpp:102
&gt; +    IntRect shadowArea(IntPoint(), resultImage-&gt;logicalSize());

This seems like a behavior change too. Did you test SVG blur filters on Retina?

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:522
&gt; +    return m_unmultipliedImageResult-&gt;data();

I don&apos;t like that we pass raw pointers to these buffers around, with undetermined lifetimes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611524</commentid>
    <comment_count>10</comment_count>
      <attachid>388884</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-27 12:40:28 -0800</bug_when>
    <thetext>Created attachment 388884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611538</commentid>
    <comment_count>11</comment_count>
      <attachid>388566</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-27 13:08:40 -0800</bug_when>
    <thetext>Comment on attachment 388566
Patch

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

&gt;&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2788
&gt;&gt; +        auto imageData = ImageData::create(IntSize(logicalWidth, logicalHeight), makeRef(*array));
&gt; 
&gt; Is this a data copy? If not, can it WTFMove the array?

No it is not a data copy. So I used array.releaseNonNull() since array is a RefPtr&lt;Uint8ClampedArray&gt; and ImageData::create() expects Ref&lt;Uint8ClampedArray&gt;&amp;&amp;.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:442
&gt;&gt; +        protectedPixelArray = makeRefPtr(imageData-&gt;data());
&gt; 
&gt; This is not a copy, right?

No it is a copy. In a previous comment the purpose of this makeRef() is to protect the Uint8ClampedArray till encodeImage() is called at the end of this function.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:451
&gt;&gt; +        image = adoptCF(CGImageCreate(pixelArrayDimensions.width(), pixelArrayDimensions.height(), 8, 32, 4 * pixelArrayDimensions.width(), sRGBColorSpaceRef(), kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast, dataProvider.get(), 0, false, kCGRenderingIntentDefault));
&gt; 
&gt; This seems like a behavior change, because the returned CGImage used to be sized based on logical size, but now it&apos;s sized based on internal size.

I undid this part.

But it is not actually a behavior change. This function is called only from toDataURL() and toData() which are called only from the Canvas code. And the Canvas code creates its ImageBuffer with resolutionScale = 1. This means m_logicalSize == m_size == m_data.backingStoreSize == imageData-&gt;size(). The resolutionScale may not be 1 only in the filter code which will never call ImageBuffer::toCFData().

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:133
&gt;&gt; +    if (!result)
&gt; 
&gt; We use &quot;result&quot; as the value returned by the function, but that&apos;s not the case here.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEDropShadow.cpp:102
&gt;&gt; +    IntRect shadowArea(IntPoint(), resultImage-&gt;logicalSize());
&gt; 
&gt; This seems like a behavior change too. Did you test SVG blur filters on Retina?

This is the only place in the filters code that uses BackingStoreCoordinateSystem. FEColorMatrix::platformApplySoftware() for example uses logical coordinates.  So I think this code was unintentionally using backing store coordinates although logical coordinates could just work.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:522
&gt;&gt; +    return m_unmultipliedImageResult-&gt;data();
&gt; 
&gt; I don&apos;t like that we pass raw pointers to these buffers around, with undetermined lifetimes.

I checked the code and I found these functions are protected and are used internally by the derived classes. The returned pointers are never stored, they are just used for processing the data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611547</commentid>
    <comment_count>12</comment_count>
      <attachid>388890</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-27 13:14:58 -0800</bug_when>
    <thetext>Created attachment 388890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611675</commentid>
    <comment_count>13</comment_count>
      <attachid>388931</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-27 16:00:10 -0800</bug_when>
    <thetext>Created attachment 388931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618719</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-13 14:54:41 -0800</bug_when>
    <thetext>&lt;rdar://problem/59438954&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619300</commentid>
    <comment_count>15</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-02-14 17:03:54 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #11)
&gt; Comment on attachment 388566 [details]
&gt; Patch
&gt; &gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:522
&gt; &gt;&gt; +    return m_unmultipliedImageResult-&gt;data();
&gt; &gt; 
&gt; &gt; I don&apos;t like that we pass raw pointers to these buffers around, with undetermined lifetimes.
&gt; 
&gt; I checked the code and I found these functions are protected and are used
&gt; internally by the derived classes. The returned pointers are never stored,
&gt; they are just used for processing the data.

It&apos;s still not a *great* pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619878</commentid>
    <comment_count>16</comment_count>
      <attachid>390978</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-17 14:09:31 -0800</bug_when>
    <thetext>Created attachment 390978
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619889</commentid>
    <comment_count>17</comment_count>
      <attachid>390978</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-02-17 14:32:23 -0800</bug_when>
    <thetext>Comment on attachment 390978
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:118
&gt; +    void draw(GraphicsContext&amp;, const FloatRect&amp; destRect, const FloatRect&amp; srcRect = FloatRect(0, 0, -1, -1), const ImagePaintingOptions&amp; = { });

What is the magic 0, 0, -1, -1? Can we pass on Optional&lt;FloatRect&gt; instead?

Not new in this patch; can fix later

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:125
&gt; +    static void drawConsuming(std::unique_ptr&lt;ImageBuffer&gt;, GraphicsContext&amp;, const FloatRect&amp; destRect, const FloatRect&amp; srcRect = FloatRect(0, 0, -1, -1), const ImagePaintingOptions&amp; = { });

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620092</commentid>
    <comment_count>18</comment_count>
      <attachid>390978</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-18 01:31:36 -0800</bug_when>
    <thetext>Comment on attachment 390978
Patch

Clearing flags on attachment: 390978

Committed r256822: &lt;https://trac.webkit.org/changeset/256822&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620093</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-18 01:31:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388479</attachid>
            <date>2020-01-22 15:49:06 -0800</date>
            <delta_ts>2020-01-22 16:52:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200122154906.patch</filename>
            <type>text/plain</type>
            <size>60321</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJkMjM3OWQ0YzkzNDQ1
NjY2NzA2NmJlNGMwNTY5YTNjNGY1MTcwNS4uODk2ZjdkN2RlYTUzNzFiMDY1NDQ2ODkxNzBjODUw
ZGI0OTQ5N2UyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBpdHMgYm9keSB0byBjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9ucyBiZSBwdWJsaWMg
YW5kIHJlbW92ZSB0aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJT
aGFkb3dCdWZmZXIpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2lj
YWxVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9D
RkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlw
bGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5k
IHNpemVzIGhhdmUgdG8gYmUgcGFzc2VkIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRvCisgICAg
ICAgIGRlYWwgd2l0aCB0aGUgcGl4ZWxzJyBkYXRhIHdlIG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0
aGUgcmVzb2x1dGlvblNjYWxlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIFRoaXMgd2FzIHRoZSBvbmx5IHBsYWNlIHdo
aWNoIHdhcyBwYXNzaW5nIHNjYWxlZCByZWN0YW5nbGUgYWxvbmcgd2l0aCAKKyAgICAgICAgQmFj
a2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4gSW5zdGVhZCB3ZSBjYW4gcGFzcyB0aGUgbG9naWNh
bCByZWN0YW5nbGUKKyAgICAgICAgYW5kIHVzZSBJbWFnZURhdGE6OnNpemUoKSBzaW5jZSBpdCBt
dXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25TY2FsZSgpCisgICAgICAgIHdoZW4gdGhlIElt
YWdlRGF0YSBpcyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFn
ZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0
YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OnB1
dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBl
KToKKwogMjAyMC0wMS0yMiAgTmlrb3MgTW91Y2h0YXJpcyAgPG5tb3VjaHRhcmlzQGFwcGxlLmNv
bT4KIAogICAgICAgICBBdXRvbWF0aWMgbGluayByZXBsYWNlbWVudCB2aWEgIlNtYXJ0IGxpbmtz
IiBzaG91bGQgZW1pdCAiaW5zZXJ0TGluayIgaW5wdXQgZXZlbnRzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBlZGEx
NzE3ZGRmZmQ3ZWIwYmMzZjg3MDJiODI5M2U4OTliZDVjZTdiLi4zMmVlNWQ0ZjA3OGFkNWM3ZTE4
NjQzYTllMjU0ZThmZDI4NWQwNDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTkyMiwxMyArOTIyLDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSA9
IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXIt
PmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0
aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1
ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAgICAgICAgIGlmICghaW1hZ2VE
YXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlk
YXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPnBvc3NpYmx5U2hhcmVk
QnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFn
ZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJh
eUJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpW
YWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzc5LDE5ICsyNzc5LDI1
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAK
LSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlKFdU
Rk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICAg
ICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBhcnJheSA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRl
TGVuZ3RoKCkpOworICAgICAgICBpZiAoIWFycmF5KSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCksIG1ha2VSZWYoKmFycmF5KSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7Cisg
ICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
RmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAg
ICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIElu
dFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGlt
YWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6
OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4p
IH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5ZGEzZmZiMjkzZjBhLi5kMmI4
ZGI4MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiB9CiAK
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmUHRy
PEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJ
bWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwg
ZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jh
c2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0
IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50
ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4ICsyMTkxLDggQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFy
cmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVs
bHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICBhdXRv
IGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpIHsK
ICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1l
c3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFz
LiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51
bWJlcihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3ICsyMjAzLDcgQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0
YVJlY3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGlt
YWdlRGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHkpCkBAIC0yMjE3LDExICsy
MjEyLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBm
bG9hdCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6
OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdp
ZHRoLCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgs
IGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAg
ICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAo
IWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAg
ICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxp
bnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJl
Y3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJz
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6
TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXIt
PmludGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBA
IC0yMjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1
dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJl
Y3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7
CiAKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5
dGVBcnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0
YSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwogCiAgICAgZGlkRHJhdyhkZXN0
UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRv
dyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJm
NDk4YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1NDFmYzcyZjRkMzFiZDUxNzcz
NTA0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICszNzEsNiBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0lt
YWdlKFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVy
YXRvcik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRh
KEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0
IHN3LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwg
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQg
ZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0
KTsKLQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9v
bCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGUo
KS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODVi
YmMuLmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVkZTFhMjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9p
ZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBp
bWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50
KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0
ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOwogICAgICAgICAg
ICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9z
LCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhiYzgwYzE0MTdh
ZWFjMmZhZi4uYTUwZTJhZGZkNmEwNzc0MDc1ZDZlYTUyZGVkMzM3Y2ZjMWIzZTBhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgpAQCAtMTEzLDUxICsxMTQsMTQgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKIH0KICNlbmRpZgogCi0jaWYgIShVU0UoQ0cpIHx8
IFVTRShESVJFQ1QyRCkpCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENv
bG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAg
IGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVu
dAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3Jj
Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29s
b3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwot
ICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3Ip
OwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQo
Y29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFy
UmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JH
QikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmlj
ZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNv
bG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAg
IGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAg
ICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19
Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVyOjpnZW5lcmlj
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpCit2b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKIHsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50
ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZElt
YWdlRGF0YShsdW1pbmFuY2VSZWN0KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgSW50
UmVjdCBsb2dpY2FsUmVjdCA9IHsgSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSB9OworICAgIGF1
dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgbG9naWNhbFJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICBy
ZXR1cm47CiAgICAgCisgICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgp
OwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgo
KTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAgIHVpbnQ4X3QgYSA9IHNy
Y1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKQEAgLTE3MCwxMyArMTM0LDcgQEAg
aW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkK
ICAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4w
NzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CiAgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChw
aXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KLSAgICBwdXRCeXRlQXJyYXkoKnNyY1BpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNl
UmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQgcGxhdGZvcm0g
c3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFuY2VNYXNrIGhl
cmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICBwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VE
YXRhLCBsb2dpY2FsUmVjdCk7CiB9CiAKICNpZiAhVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggN2I3NzJhMmYyZDhmNmU3
NTc3ZWFmYzZkYjIyOTMwNmI3Y2ZlZGY5Yi4uN2FiZmUwZDE3MTE0MDZkOTA4ZTAzMWQyZjZhMDcx
ZTQ5MGFmMThhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDxtZW1vcnk+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CkBA
IC04NCwzNyArODMsNDggQEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgQ29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
OwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9y
IGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBp
bmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0
U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXpl
IGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0
YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKKyAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKyAgICAKICAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIo
KTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
OworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgZmx1c2hDb250ZXh0KCkg
Y29uc3Q7CisjZW5kaWYKKwogICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFj
a2luZyBzdG9yZQogICAgIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQogICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQogICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgCisgICAgc2l6ZV90IG1lbW9yeUNv
c3QoKSBjb25zdDsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKKyNpZiBV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OworI2VsaWYgVVNF
KENBSVJPKQorICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7CisjZW5kaWYK
IAogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJl
c29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPElt
YWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwotCi0gICAgZW51bSBDb29yZGlu
YXRlU3lzdGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5h
dGVTeXN0ZW0gfTsKLQotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51
bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7
Ci0KLSAgICB2b2lkIHB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBD
b29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pOwogICAgIAotICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxv
cHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0Owot
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBG
bG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0j
aWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7Cisj
aWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNp
bmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CiAjZW5kaWYK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOworICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKKyAgICB2b2lkIGNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKTsKICNpZiAhVVNFKENHKQogICAgIEFmZmluZVRyYW5zZm9ybSBi
YXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KICAgICB2
b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNw
YWNlIGRzdENvbG9yU3BhY2UpOwpAQCAtMTIyLDUwICsxMzIsMjAgQEAgcHVibGljOgogI2Vsc2UK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0
KCkpOyB9CiAjZW5kaWYKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7
CiAKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwotICAgIHNpemVfdCBleHRlcm5hbE1l
bW9yeUNvc3QoKSBjb25zdDsKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFE
YXRhKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQgPSB7IH0pOworICAgIAorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCiAgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpOwogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xh
bXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2Vy
IG9yIGNsaXBwZXIuCi0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxv
YXRTaXplJik7Ci0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRT
aXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6
ZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3Qg
Y2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0jaWYgVVNFKENHKQot
ICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJu
YWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhl
IHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJF
Q1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJE
MUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9p
ZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAt
MSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotCi0gICAgaW5saW5l
IHZvaWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAg
IGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3Mg
TmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdl
OwotICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWludEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBC
aXRtYXBJbWFnZTsKLQogcHJpdmF0ZToKICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwogICAg
IEludFNpemUgbV9zaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAppbmRleCA2ODFhYjU2ZWViMzQxOTQ2MmIyMzQ0NTBkMDBmNDFmOTMzNjc0
ZDE4Li5jN2FlMmY1ZDczYjkxMzhkNzU0ZWQxMmFhMDc4ZTcxYWI5NTk1MzRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtODg0LDEyICs4ODUsMTMgQEAgdm9pZCBTaGFkb3dC
bHVyOjpibHVyU2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRT
aXplJiB0ZW1wbGEKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQ
b2ludCgpLCB0ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5n
ZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0g
bGF5ZXJJbWFnZS5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBibHVyUmVjdCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGJsdXJMYXllckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCks
IGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5
ZXJEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0
LnNpemUoKSwgYmx1clJlY3QsIHsgfSk7CisgICAgYXV0byogYmx1clBpeGVsQXJyYXkgPSBsYXll
ckRhdGEtPmRhdGEoKTsKKyAgICBibHVyTGF5ZXJJbWFnZShibHVyUGl4ZWxBcnJheS0+ZGF0YSgp
LCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKKyAgICBsYXllckltYWdl
LnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICps
YXllckRhdGEsIGJsdXJSZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JT
aGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBs
YXRlU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKaW5kZXggYmJiNWM2NDgyYjZlMWQzZjI4YWM0
NzllYTdjNWQzMWIxZDMzNzkwMi4uY2RlYjdjNjg1ODJmMjI4ZTgwY2M1MTYyM2FhZDBkNjRhOThh
YWJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Miw0MSBAQCB2
b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJbWFn
ZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENv
bG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RD
b2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVh
clJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
U1JHQikKKyAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdC
ICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAg
ICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9
IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNS
R0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtp
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxh
dGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChk
c3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAg
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0g
aSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29t
cG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0
Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBs
b29rVXBUYWJsZSkKIHsKICAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b25zIG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTUsMTAgQEAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UKIH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24g
cHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFn
ZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxv
Z2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJlY3Qs
IGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3Qg
SW50U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKIHsKLSAgICAvLyBU
aGUgYXJlYSBjYW4gb3ZlcmZsb3cgaWYgdGhlIHJlY3QgaXMgdG9vIGJpZy4KLSAgICBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0Lndp
ZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkp
OworICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC5zaXplKCkpOwor
ICAgIGF1dG8qIHJlc3VsdCA9IGltYWdlRGF0YSA/IGltYWdlRGF0YS0+ZGF0YSgpIDogbnVsbHB0
cjsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTUyMiw1
MSArNTUyLDI5IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2ljYWxVbml0KGNv
bnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29vcmRpbmF0
ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8
IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0
IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGlu
ZSBVbml0IGJhY2tpbmdTdG9yZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpD
b29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVy
OjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjAp
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVz
dWx0LnNjYWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBJbnRS
ZWN0IGxvZ2ljYWxSZWN0ID0gcmVjdDsKKyAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBy
ZWN0OworICAgIGJhY2tpbmdTdG9yZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAg
IAorICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKQorICAgICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1f
ZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgcmV0
dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihi
YWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNp
emUsIG1fcmVzb2x1dGlvblNjYWxlKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewot
ICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lz
dGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0g
YmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3Jl
UmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci19CisgICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVj
dDsKKyAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBpbWFnZURhdGEuc2l6ZSgpOworICAg
IEludFBvaW50IHNjYWxlZERlc3RQb2ludCA9IGRlc3RQb2ludDsKIAotUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3Qg
PSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlE
aW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVS
ZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEs
IG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIHNjYWxl
ZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIHNjYWxlZFNvdXJjZVNp
emUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJj
ZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKQotewotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IGJhY2tpbmdTdG9y
ZVVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGJhY2tpbmdTdG9yZVVuaXQoc291cmNlU2l6
ZSwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50IHNj
YWxlZERlc3RQb2ludCA9IGJhY2tpbmdTdG9yZVVuaXQoZGVzdFBvaW50LCBjb29yZGluYXRlU3lz
dGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBsb2dpY2FsU291cmNlUmVjdCA9
IGxvZ2ljYWxVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBJbnRQb2ludCBsb2dpY2FsRGVzdFBvaW50ID0gbG9naWNhbFVuaXQoZGVzdFBv
aW50LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgSW50UmVjdCBs
b2dpY2FsU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgSW50UG9pbnQgbG9naWNhbERlc3RQ
b2ludCA9IGRlc3RQb2ludDsKIAogICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkg
PiAwKTsKICAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwpAQCAtNjEz
LDcgKzYyMSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpCiAgICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53aWR0aCgpOwogICAgIGludCBzdHJpZGUg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKIAot
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgb3JpZ2lueSAqIHNy
Y0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9
IGltYWdlRGF0YS5kYXRhKCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9y
aWdpbnggKiA0OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CiAgICAg
ICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVs
RGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBudW1Db2x1bW5zOyB4KyspIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggYWZkNWU0ZWM3MTllZGI0OTNmNzlk
YmJmYWJlNWFmOTNjYTA2NzA5Yi4uYzgwMmViMmY5NTY3MGI1MTcyYjE1ZDk5YTFkYTQ1ZTdlMjg4
MjIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTM3Nyw0OSArMzc3LDI2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzCiAgICAgfQogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVy
OjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSog
cGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0CiB7CiAgICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQogICAgICAg
ICBmbHVzaENvbnRleHQoKTsKIAotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIEludFJlY3Qgc2NhbGVkU3JjUmVj
dCA9IHNyY1JlY3Q7CisgICAgc2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
CiAKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxT
aXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJ
bnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJy
YXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJu
YWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKKyAgICByZXR1cm4g
bV9kYXRhLmdldERhdGEob3V0cHV0Rm9ybWF0LCBzY2FsZWRTcmNSZWN0LCBpbnRlcm5hbFNpemUo
KSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwogfQogCi12b2lkIEltYWdlQnVm
ZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCkKIHsKICAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAg
ICAgICAgIGZsdXNoQ29udGV4dCgpOwogCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0g
c291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwot
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0g
ICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAg
ICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9CisgICAg
SW50UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKIAotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNl
Rm9ybWF0LCBzY2FsZWRTb3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGlu
dGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7CisgICAgbV9k
YXRhLnB1dERhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc2NhbGVkU3JjUmVjdCwgZGVzdFBv
aW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwog
ICAgIAogICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2Ug
aWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2Uo
KS4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCkBAIC00NTYsMTEgKzQz
MywxMiBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YgogCiAgICAgaWYgKENGRXF1YWwodXRpLmdl
dCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEg
Y2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNr
LgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
SW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlmICghcHJlbXVs
dGlwbGllZERhdGEpCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbG9naWNhbFNp
emUoKSB9KTsKKyAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0
aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgYXV0byBwcmVtdWx0aXBsaWVk
RGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOwogICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmln
RW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKICAgICAgICAgYXV0
byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVs
bHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKICAg
ICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKaW5kZXggNjFmYzAzMWNj
MDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uNjRlMGE5NzJlMGJhYTI1ODcxYzYzZDll
Zjc4YjUxYzc1OTRiOThkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApAQCAtMTI1LDE3ICsxMjUsMTEg
QEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAorUmVmUHRyPEltYWdl
RGF0YT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0CiB7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFy
ZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90
KiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlm
ICghcmVzdWx0RGF0YSkKKyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJl
Y3Quc2l6ZSgpKTsKKyAgICBhdXRvKiByZXN1bHQgPSBpbWFnZURhdGEgPyBpbWFnZURhdGEtPmRh
dGEoKSA6IG51bGxwdHI7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKQEAgLTE3MCwxNyArMTY0
LDE3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9
IGVuZHkgLSBvcmlnaW55OwogICAgIAogICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8
IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm4gaW1hZ2VEYXRhOwogICAgIAogICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsg
ZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7CisgICAgdWludDhfdCogZGVzdFJv
d3MgPSByZXN1bHQtPmRhdGEoKSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0
OwogICAgIAogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93OwogICAgIHVpbnQ4X3QqIHNyY1Jv
d3M7CiAgICAgCiAgICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7CiAgICAgICAgIGlmICgh
ZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gaW1h
Z2VEYXRhOwogCiAgICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0
KCk7CiAgICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSAr
IG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwpAQCAtMjA2LDcgKzIwMCw3
IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRp
cGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwogI2VuZGlmCiAK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2VEYXRh
OwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKQEAgLTMzMSwxMCArMzI1LDEwIEBA
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAjZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gaW1hZ2VEYXRhOwogfQogCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZv
cm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nKQordm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBj
b25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCiB7CiAgICAgQVNT
RVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwogICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdo
dCgpID4gMCk7CkBAIC0zNjgsOCArMzYyLDggQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERh
dGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWMKICAg
ICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAg
ICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3Jj
Qnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7CisgICAgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOworICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyAob3JpZ2lueSAqIHNy
Y0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOwogICAgIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdzsKICAgICB1aW50OF90KiBkZXN0Um93czsKICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5o
CmluZGV4IDNlMjM3NGJhZDI0ZjA3ODdmZWYwNTQzYzFiNTFiOTEyMGYxMjMwZDQuLjZhNGZiZjJh
ZGU1ZTg2MGQzNGUyMTNlMWM0MTJlMTViZGFiYzUzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApAQCAtNDAs
NiArNDAsNyBAQCB0eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBJT1N1cmZhY2U7CiAKIHN0cnVjdCBJ
bWFnZUJ1ZmZlckRhdGEgewpAQCAtNTksOCArNjAsOCBAQCBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRh
IHsKICNlbmRpZgogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVy
YXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7
Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBj
b25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29u
c3Q7CisgICAgdm9pZCBwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcp
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXgg
ZTYxNDFiZGUzMjA0YzE3N2FiNjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4uNzI1Y2IwYWZiMDNhMzYy
NThkZDFkNzNmODJkN2VmYWM1ZjgwY2M3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0yODYsMTIgKzI4NiwxNSBAQCB2b2lkIEZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJl
Y3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIEludFNpemUg
cGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2Ut
PmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGltZW5zaW9u
cyk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0SW1h
Z2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IGltYWdlUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisgICAg
CisgICAgYXV0byBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgSW50U2l6ZSBw
aXhlbEFycmF5RGltZW5zaW9ucyA9IHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIHBp
eGVsQXJyYXlEaW1lbnNpb25zLnNjYWxlKHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2NhbGUoKSk7
CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VO
S05PV046CkBAIC0zMTEsNyArMzE0LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+
cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAg
cmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsICppbWFnZURhdGEsIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZk
ZGQ4NGVjYi4uMTM5NWEyZGI4NTAzMmM5ZTJhZTg2NGM2Mzk2NjY4YjM3NDFjYzMzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVy
LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTk5LDE0ICs5
OSwxNSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBT
aGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9y
KTsKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291
bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgotICAgIEludFJlY3Qgc2hhZG93QXJlYShJ
bnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4
ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0Fy
ZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsK
LSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50
KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJl
c3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgc2hhZG93QXJlYSk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgp
LCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwotCi0g
ICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEs
IEludFBvaW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsK
KyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4
dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIGltYWdlRGF0YS0+
c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5zaXplKCkud2lkdGgoKSk7CisgICAgCisgICAgcmVzdWx0
SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2ZDRl
YzJhOTc5Mjk2NjM4NGZjNTUwNzRhMmY5NzJiNTkwZmEuLmVhMjZkYWE3ODk3YWQ5YzQ5NzhjMzE3
YzRkZDI0OTdkMWY3YWE3ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3LDEwICsyNywxMCBA
QAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCkBAIC0yNzgsMTAgKzI3
OCwxMyBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50
UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFy
cmF5KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJ
bnRQb2ludCgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5
dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJl
Y3QsIEludFBvaW50KCkpOworICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewor
ICAgICAgICBhdXRvIGltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoZGVzdGluYXRpb25S
ZWN0LnNpemUoKSwgbWFrZVJlZigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpKTsKKyAgICAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsICppbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKKyAgICB9
IGVsc2UgeworICAgICAgICBhdXRvIGltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoZGVz
dGluYXRpb25SZWN0LnNpemUoKSwgbWFrZVJlZigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkp
OworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVj
dCk7CisgICAgfQogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBA
IC00NDMsOSArNDQ2LDEwIEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVz
dWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lv
biBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0
KSB7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKKyAgICAgICAgICAgIGF1dG8gaW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOworICAg
ICAgICAgICAgaWYgKCFpbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbWFrZVJlZlB0cihpbWFnZVJlc3Vs
dC0+ZGF0YSgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwpAQCAtNDY5LDkgKzQ3Mywx
MCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBp
bWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAg
ICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSkpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKKyAgICAgICAgICAgIGF1dG8gaW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJ
bnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgICAgIGlm
ICghaW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtYWtlUmVmUHRyKGltYWdlUmVzdWx0LT5kYXRhKCkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
LmNwcAppbmRleCBmZjFiMzk0MTVlYmIyMWJlNmNlZmFjNTkwNmY3ZDQyNTFiODM1OTNmLi42YmVm
ZTA4Y2E3ZWM0YjBmOWZjNzI1YjkzYjNmYmYzMzhhMzI3MThhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRh
dGFEaXJlY3QyRC5jcHAKQEAgLTI1NSwxOCArMjU1LDE1IEBAIHZvaWQgaW5QbGFjZUNoYW5nZVBy
ZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCiAg
ICAgfQogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAq
LywgZmxvYXQgLyogcmVzb2x1dGlvblNjYWxlICovKSBjb25zdAorUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsK
LSAgICBhdXRvIG51bUJ5dGVzID0gcmVjdC5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAg
ICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VE
YXRhOjpjcmVhdGUocmVjdC5zaXplKCkpOworICAgIGF1dG8gcmVzdWx0ID0gaW1hZ2VEYXRhID8g
aW1hZ2VEYXRhLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghYml0bWFwKQotICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwogCiAgICAgaWYgKCFyZWFkRGF0YUZyb21CaXRt
YXBJZk5lZWRlZChkZXNpcmVkRm9ybWF0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0y
OTEsNyArMjg4LDcgQEAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6
OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmUKICAgICAgICAgICAgIGluUGxh
Y2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCiBib29sIEltYWdlQnVm
ZmVyRGF0YTo6cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXNpcmVkRm9ybWF0KSBjb25zdApAQCAtMzU0LDIxICszNTEsMTkgQEAgYm9vbCBJbWFnZUJ1
ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzaXJlZEYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNp
emUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKQordm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXpl
JiBzaXplKQogewogICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NF
UlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwogCiAgICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbngg
PSBzb3VyY2VSZWN0LngoKTsKICAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+
KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIGRlc3R4ICo9IHJlc29sdXRp
b25TY2FsZTsKICAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJU
KGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKICAgICBBU1NFUlQob3JpZ2lueC51
bnNhZmVHZXQoKSA+PSAwKTsKICAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3Vy
Y2VSZWN0Lm1heFgoKSk7CiAKICAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgZW5keCAqPSByZXNvbHV0
aW9uU2NhbGU7CiAgICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsK
IAogICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKQEAgLTM3Niwx
NCArMzcxLDEyIEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAKICAgICBDaGVja2VkPGludD4g
b3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwogICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVj
a2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgZGVzdHkgKj0g
cmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKICAg
ICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKICAgICBBU1NFUlQo
b3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKICAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQo
KSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7CiAKICAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVj
a2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgZW5keSAq
PSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5o
ZWlnaHQoKSk7CiAKICAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQo
KTsKQEAgLTM5NSw5ICszODgsOSBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpYwogI2lmIEFTU0VS
VF9FTkFCTEVECiAgICAgaWYgKGJpdG1hcCkgewogICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IGJp
dG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0g
c291cmNlU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBp
bWFnZURhdGEuc2l6ZSgpLndpZHRoKCkpOwogICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRo
ID49IHNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNv
dXJjZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBp
bWFnZURhdGEuc2l6ZSgpLmhlaWdodCgpKTsKICAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWln
aHQgPj0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgfQogI2VuZGlmCkBAIC00MDUsNiArMzk4LDcgQEAg
dm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgQWxwaGFQcmVtdWx0aXBsaWMKICAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShzaXpl
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0b3oqIHNvdXJjZSA9IGltYWdlRGF0YS5kYXRh
KCk7CiAgICAgaWYgKHNvdXJjZVNpemUgPT0gc2l6ZSkgewogICAgICAgICBtZW1jcHkoZGF0YS5k
YXRhKCksIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSk7CiAgICAgICAgIGJ5dGVGb3Jt
YXQgPSBzb3VyY2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCmluZGV4IDljOTRk
OGE0ODIyZjEyNWY0MDZmMzAwNzc0N2ZmOTM1OGMxNTZhMzAuLjA5Y2M0OTNlMWMyYTVhNTZjMmNl
YWVmNWMzYTI5Yzk1MDQ1ZDFkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCkBAIC01
NCw4ICs1NCw4IEBAIHN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewogICAgIGVudW0gY2xhc3MgQml0
bWFwQnVmZmVyU3luYyB7IEluU3luYywgQml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMg
fTsKICAgICBtdXRhYmxlIEJpdG1hcEJ1ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1h
cEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYyB9OwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxv
YXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
U2l6ZSYpIGNvbnN0OworICAgIHZvaWQgcHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJik7CiAKICAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGlyZWN0MkQuY3BwCmluZGV4IGUwNDIxOGYxZWY0ZjU3OGNlMDdmOTRiN2E4ZWNiYjgz
MGE1MjY3ZjkuLjY5NTk3MDkwMTQwNmZkNDE3NDg1NjVjMmE4YWM3MjliNTY4ZjY4NTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyRC5jcHAKQEAgLTI3OCw0OSArMjc4LDI2IEBAIHZvaWQgSW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzCiAgICAgfQogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVm
ZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6
ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0CiB7CiAgICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQogICAg
ICAgICBmbHVzaENvbnRleHQoKTsKIAotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAg
IHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIEludFJlY3Qgc2NhbGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7CisgICAgc2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CiAKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5
RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJu
YWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0K
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRh
LmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKKyAg
ICByZXR1cm4gbV9kYXRhLmdldERhdGEob3V0cHV0Rm9ybWF0LCBzY2FsZWRTcmNSZWN0LCBpbnRl
cm5hbFNpemUoKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZv
cm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtKQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAK
LSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUg
c2NhbGVkU291cmNlU2l6ZSA9IHNvdXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0g
PT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIH0KKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBz
cmNSZWN0OworICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0g
ICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUs
IHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKKyAgICBtX2RhdGEucHV0RGF0YShpbnB1dEZvcm1h
dCwgaW1hZ2VEYXRhLCBzY2FsZWRTcmNSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpKTsK
IH0KIAogU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0aW9u
YWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3
NWEwYmNhZDdkNjc1Li40ZDhhMjkwN2JmY2FkZGYxYWVmOTE0MmIzYjVkMjc4MmQ4M2ExOGE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNs
dWRlICJSYXN0ZXJTaGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxT
aGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNo
b2xkLCBjCiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5k
cmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsK
IAotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1
ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VS
ZWN0LnNpemUoKSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAgICAg
ICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6
ZSgpIH0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5k
YXRhKCkpOworICAgICAgICBhdXRvIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAg
ICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwog
ICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBm
b3VyIGJ5dGVzOiBSR0JBLgogICAgICAgICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBz
dGF0aWNfY2FzdDx1aW50OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwg
MSkgKiAyNTUuMGYpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388487</attachid>
            <date>2020-01-22 16:52:08 -0800</date>
            <delta_ts>2020-01-22 17:01:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200122165207.patch</filename>
            <type>text/plain</type>
            <size>60468</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJkMjM3OWQ0YzkzNDQ1
NjY2NzA2NmJlNGMwNTY5YTNjNGY1MTcwNS4uODk2ZjdkN2RlYTUzNzFiMDY1NDQ2ODkxNzBjODUw
ZGI0OTQ5N2UyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBpdHMgYm9keSB0byBjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9ucyBiZSBwdWJsaWMg
YW5kIHJlbW92ZSB0aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJT
aGFkb3dCdWZmZXIpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2lj
YWxVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9D
RkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlw
bGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5k
IHNpemVzIGhhdmUgdG8gYmUgcGFzc2VkIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRvCisgICAg
ICAgIGRlYWwgd2l0aCB0aGUgcGl4ZWxzJyBkYXRhIHdlIG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0
aGUgcmVzb2x1dGlvblNjYWxlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIFRoaXMgd2FzIHRoZSBvbmx5IHBsYWNlIHdo
aWNoIHdhcyBwYXNzaW5nIHNjYWxlZCByZWN0YW5nbGUgYWxvbmcgd2l0aCAKKyAgICAgICAgQmFj
a2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4gSW5zdGVhZCB3ZSBjYW4gcGFzcyB0aGUgbG9naWNh
bCByZWN0YW5nbGUKKyAgICAgICAgYW5kIHVzZSBJbWFnZURhdGE6OnNpemUoKSBzaW5jZSBpdCBt
dXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25TY2FsZSgpCisgICAgICAgIHdoZW4gdGhlIElt
YWdlRGF0YSBpcyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFn
ZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0
YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OnB1
dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBl
KToKKwogMjAyMC0wMS0yMiAgTmlrb3MgTW91Y2h0YXJpcyAgPG5tb3VjaHRhcmlzQGFwcGxlLmNv
bT4KIAogICAgICAgICBBdXRvbWF0aWMgbGluayByZXBsYWNlbWVudCB2aWEgIlNtYXJ0IGxpbmtz
IiBzaG91bGQgZW1pdCAiaW5zZXJ0TGluayIgaW5wdXQgZXZlbnRzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBlZGEx
NzE3ZGRmZmQ3ZWIwYmMzZjg3MDJiODI5M2U4OTliZDVjZTdiLi4zMmVlNWQ0ZjA3OGFkNWM3ZTE4
NjQzYTllMjU0ZThmZDI4NWQwNDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTkyMiwxMyArOTIyLDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSA9
IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXIt
PmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0
aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1
ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAgICAgICAgIGlmICghaW1hZ2VE
YXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlk
YXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPnBvc3NpYmx5U2hhcmVk
QnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFn
ZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJh
eUJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpW
YWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzc5LDE5ICsyNzc5LDI1
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAK
LSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlKFdU
Rk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICAg
ICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBhcnJheSA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRl
TGVuZ3RoKCkpOworICAgICAgICBpZiAoIWFycmF5KSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCksIG1ha2VSZWYoKmFycmF5KSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7Cisg
ICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
RmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAg
ICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIElu
dFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGlt
YWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6
OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4p
IH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5ZGEzZmZiMjkzZjBhLi5kMmI4
ZGI4MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiB9CiAK
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmUHRy
PEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJ
bWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwg
ZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jh
c2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0
IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50
ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4ICsyMTkxLDggQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFy
cmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVs
bHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICBhdXRv
IGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpIHsK
ICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1l
c3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFz
LiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51
bWJlcihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3ICsyMjAzLDcgQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0
YVJlY3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGlt
YWdlRGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHkpCkBAIC0yMjE3LDExICsy
MjEyLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBm
bG9hdCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6
OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdp
ZHRoLCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgs
IGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAg
ICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAo
IWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAg
ICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxp
bnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJl
Y3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJz
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6
TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXIt
PmludGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBA
IC0yMjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1
dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJl
Y3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7
CiAKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5
dGVBcnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0
YSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwogCiAgICAgZGlkRHJhdyhkZXN0
UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRv
dyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJm
NDk4YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1NDFmYzcyZjRkMzFiZDUxNzcz
NTA0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICszNzEsNiBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0lt
YWdlKFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVy
YXRvcik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRh
KEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0
IHN3LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwg
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQg
ZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0
KTsKLQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9v
bCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGUo
KS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODVi
YmMuLmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVkZTFhMjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9p
ZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBp
bWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50
KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0
ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOwogICAgICAgICAg
ICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9z
LCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhiYzgwYzE0MTdh
ZWFjMmZhZi4uZjNlZWU5M2E1MzI1ZTUyZWJmMzNmZmRlNmM2YTY3MTc1ODc1NmMxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAt
MjgsOCArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CkBAIC0xMTMsNTEgKzExMywxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRv
QkdSQURhdGEoKSBjb25zdAogfQogI2VuZGlmCiAKLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVD
VDJEKSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBz
cmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0Nv
bG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25s
eSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYg
KChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNl
ICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9y
U3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpM
aW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKysp
IHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAg
ICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1
NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9
KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwot
ICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBb
XSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5l
YXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0g
PSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlm
IC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2so
KQogewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUo
KSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1
bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IGxvZ2lj
YWxSZWN0ID0geyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH07CisgICAgYXV0byBpbWFnZURh
dGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBsb2dpY2FsUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKICAg
ICAKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgIGZv
ciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwpAQCAtMTcwLDEzICsxMzMsNyBAQCBpbmxpbmUgdm9p
ZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogICAgICAgICBk
b3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChk
b3VibGUpYSAvIDI1NS4wKTsKICAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0
ICsgMywgbHVtYSk7CiAgICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUo
KSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBm
dW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4K
LSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2lj
YWxSZWN0KTsKIH0KIAogI2lmICFVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRi
MjI5MzA2YjdjZmVkZjliLi43YWJmZTBkMTcxMTQwNmQ5MDhlMDMxZDJmNmEwNzFlNDkwYWYxOGFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
QEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1MYXllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTg0LDM3ICs4
Myw0OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBz
dGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hl
biBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBt
YXNrZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25z
dCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1w
ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNp
emUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0
UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHN0YXRpYyBJbnRTaXpl
IGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOworICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwogCisgICAg
V0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisjaWYgVVNF
KENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKKyNl
bmRpZgorCiAgICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3Jl
CiAgICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CiAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0
OworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CisjZWxpZiBVU0UoQ0FJUk8pCisg
ICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0KLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0g
eyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9
OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0
ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29v
cmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLQotICAgIHZv
aWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVT
eXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgw
LCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJ
Uk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNpZiBVU0UoQ0cp
IHx8IFVTRShESVJFQ1QyRCkKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRp
dmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICNlbmRpZgorICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9u
OjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAorICAgIHZvaWQgY29udmVydFRvTHVtaW5h
bmNlTWFzaygpOwogI2lmICFVU0UoQ0cpCiAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQogICAgIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29s
b3JTcGFjZSk7CkBAIC0xMjIsNTAgKzEzMiwyMCBAQCBwdWJsaWM6CiAjZWxzZQogICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KICNl
bmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAotICAgIHNp
emVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgp
IGNvbnN0OworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9E
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdU
Rjo6bnVsbG9wdCkgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dDsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCA9IHsgfSk7CisgICAgCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0OwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9v
bCk7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUg
SW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBl
ci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsK
LSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9h
dFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRT
aXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhl
IHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4g
SWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0Lgot
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsK
LSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBz
aW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZv
aWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9pZCBnZW5l
cmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNs
YXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdl
R2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdl
OwotCiBwcml2YXRlOgogICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7CiAgICAgSW50U2l6ZSBt
X3NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
Y3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0MWY5MzM2NzRkMTguLmM3YWUy
ZjVkNzNiOTEzOGQ3NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJT
aGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBs
YQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRl
bXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdl
LmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJs
dXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmx1
ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qu
d2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBi
bHVyUmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0
YSgpOworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJSZWN0
LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwg
Ymx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZl
cihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiYmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1ZDMx
YjFkMzM3OTAyLi5iODRhYjJmYmJhMDY5MDAxZjc4ZGQ0NTU3Mjk2ZTIxM2E3NTgzYWQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUsOSArMzUsMTEgQEAKICNpbmNsdWRlICJDYWlyb09w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Myw0MSBAQCB2b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29s
b3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9y
dGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAg
fHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkc3RD
b2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29u
c3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09
IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNv
bG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7Cisg
ICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJn
YkxVVCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNv
bG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKIHsK
ICAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJh
dGVkIGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTYsMTAgQEAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UKIH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4K
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRh
dGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93
IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0g
cmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBhdXRvIGltYWdlRGF0
YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiByZXN1bHQgPSBp
bWFnZURhdGEgPyBpbWFnZURhdGEtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC01MjIsNTEgKzU1MywyOSBAQCBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
dCBJbnRSZWN0JiBsb2dpYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0g
SW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9
PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0g
ICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdTdG9y
ZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewotICAgIGlmIChj
b29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRp
bmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZShyZXNvbHV0aW9u
U2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IHNy
Y1JlY3Q7CisgICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gc3JjUmVjdDsKKyAgICBiYWNr
aW5nU3RvcmVSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICAKKyAgICBpZiAob3V0
cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKKyAg
ICAgICAgcmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9n
aWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICByZXR1cm4gZ2V0RGF0YTxBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2Fs
UmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsK
IH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1l
bnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit2b2lkIElt
YWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3Jt
YXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIEludFJlY3QgbG9naWNhbFJlY3Qg
PSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlE
aW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVS
ZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0
YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19CisgICAgSW50
UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKKyAgICBJbnRTaXplIHNjYWxlZFNv
dXJjZVNpemUgPSBpbWFnZURhdGEuc2l6ZSgpOworICAgIEludFBvaW50IHNjYWxlZERlc3RQb2lu
dCA9IGRlc3RQb2ludDsKIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBw
aXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBj
b25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29y
ZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3Rv
cmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4g
Z2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tp
bmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwg
bV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOworICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKLXZv
aWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIEludFJl
Y3Qgc2NhbGVkU291cmNlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQoc291cmNlUmVjdCwgY29vcmRp
bmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFNpemUgc2NhbGVkU291cmNl
U2l6ZSA9IGJhY2tpbmdTdG9yZVVuaXQoc291cmNlU2l6ZSwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50IHNjYWxlZERlc3RQb2ludCA9IGJhY2tpbmdT
dG9yZVVuaXQoZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgSW50UmVjdCBsb2dpY2FsU291cmNlUmVjdCA9IGxvZ2ljYWxVbml0KHNvdXJjZVJlY3Qs
IGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBsb2dp
Y2FsRGVzdFBvaW50ID0gbG9naWNhbFVuaXQoZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBt
X3Jlc29sdXRpb25TY2FsZSk7CisgICAgSW50UmVjdCBsb2dpY2FsU291cmNlUmVjdCA9IHNvdXJj
ZVJlY3Q7CisgICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2ludCA9IGRlc3RQb2ludDsKIAogICAg
IEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc2NhbGVk
U291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwpAQCAtNjEzLDcgKzYyMiw3IEBAIHZvaWQgSW1hZ2VC
dWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpCiAgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291
cmNlU2l6ZS53aWR0aCgpOwogICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jv
d3MgPSBzb3VyY2UuZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAq
IDQ7CisgICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IGltYWdlRGF0YS5kYXRhKCktPmRhdGEo
KSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwogICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CiAgICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWlu
dGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVz
dHkpKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAKaW5kZXggYWZkNWU0ZWM3MTllZGI0OTNmNzlkYmJmYWJlNWFmOTNjYTA2NzA5Yi4uYzgw
MmViMmY5NTY3MGI1MTcyYjE1ZDk5YTFkYTQ1ZTdlMjg4MjIwZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTM3
Nyw0OSArMzc3LDI2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzCiAgICAgfQogfQogCi1SZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+
IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQogICAgICAgICBmbHVzaENvbnRleHQoKTsKIAotICAg
IEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgc2NhbGVk
U3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKLSAgICBpZiAocGl4ZWxBcnJheURp
bWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgp
OwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1
ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRT
aXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkK
LSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0Owot
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAg
ICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFy
cmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5z
aXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKTsKKyAgICByZXR1cm4gbV9kYXRhLmdldERhdGEob3V0cHV0Rm9y
bWF0LCBzY2FsZWRTcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAoY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAgICAgIGZsdXNoQ29udGV4dCgpOwog
Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXpl
IHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVt
ID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Qu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9CisgICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0ID0g
c3JjUmVjdDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKIAot
ICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlRm9ybWF0LCBzY2FsZWRTb3VyY2VTaXpl
LCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSk7CisgICAgbV9kYXRhLnB1dERhdGEoaW5wdXRGb3JtYXQs
IGltYWdlRGF0YSwgc2NhbGVkU3JjUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwogICAgIAogICAgIC8vIEZvcmNlIHJlY3Jl
YXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91
Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KICAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkg
dGhpcyBpcyBuZWNlc3NhcnkuCkBAIC00NTYsMTEgKzQzMywxMiBAQCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YgogCiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAg
ICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBt
YW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVk
RGF0YSA9IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dp
Y2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEpCisgICAgICAgIGF1
dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSB9KTsKKyAgICAgICAgaWYgKCFp
bWFnZURhdGEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBzaXplX3Qg
ZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWln
aHQoKTsKKyAgICAgICAgYXV0byBwcmVtdWx0aXBsaWVkRGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgp
OwogICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRh
LT5kYXRhKCksIGRhdGFTaXplKTsKICAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEt
PmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5jcHAKaW5kZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZk
ZDJlYWJhYy4uNjRlMGE5NzJlMGJhYTI1ODcxYzYzZDllZjc4YjUxYzc1OTRiOThkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmNwcApAQCAtMTI1LDE3ICsxMjUsMTEgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0
aCwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IElt
YWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVy
YXRlUmVuZGVyaW5nKSBjb25zdAorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNv
bnN0CiB7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0Owot
ICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAg
ICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRhID0gcmVzdWx0ID8g
cmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0YSkKKyAgICBhdXRv
IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBy
ZXN1bHQgPSBpbWFnZURhdGEgPyBpbWFnZURhdGEtPmRhdGEoKSA6IG51bGxwdHI7CisgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGVu
ZHggPSByZWN0Lm1heFgoKTsKQEAgLTE3MCwxNyArMTY0LDE3IEBAIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0CiAgICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55OwogICAgIAog
ICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVHZXQoKSA8PSAw
KQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwogICAg
IAogICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAg
dWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cg
KyBkZXN0eCAqIDQ7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHQtPmRhdGEoKSArIGRl
c3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwogICAgIAogICAgIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93OwogICAgIHVpbnQ4X3QqIHNyY1Jvd3M7CiAgICAgCiAgICAgaWYgKCFhY2Nl
bGVyYXRlUmVuZGVyaW5nKSB7CiAgICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwogCiAgICAgICAgIHNyY0J5
dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7CiAgICAgICAgIHNyY1Jvd3MgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJv
dyArIG9yaWdpbnggKiA0OwpAQCAtMjA2LDcgKzIwMCw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0CiAgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwogICAgICAgICB9CiAjZW5kaWYKICAg
ICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpIHsKQEAgLTMzMSwxMCArMzI1LDEwIEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
CiAjZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKICAgICB9CiAg
ICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCi12b2lk
IEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQordm9p
ZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcpCiB7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+
IDApOwogICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7CkBAIC0zNjgsOCArMzYy
LDggQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWMKICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWln
aHQgPD0gMCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dz
ID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICog
NCkudW5zYWZlR2V0KCk7CisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogaW1hZ2VE
YXRhLnNpemUoKS53aWR0aCgpOworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURh
dGEuZGF0YSgpLT5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAq
IDQpLnVuc2FmZUdldCgpOwogICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsKICAgICB1aW50
OF90KiBkZXN0Um93czsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmluZGV4IDNlMjM3NGJhZDI0ZjA3ODdm
ZWYwNTQzYzFiNTFiOTEyMGYxMjMwZDQuLjZhNGZiZjJhZGU1ZTg2MGQzNGUyMTNlMWM0MTJlMTVi
ZGFiYzUzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApAQCAtNDAsNiArNDAsNyBAQCB0eXBlZGVmIHVpbnQz
Ml90IENHQml0bWFwSW5mbzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURh
dGE7CiBjbGFzcyBJT1N1cmZhY2U7CiAKIHN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewpAQCAtNTks
OCArNjAsOCBAQCBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKICNlbmRpZgogCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYs
IGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNl
Rm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6
ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7CisgICAgdm9pZCBwdXREYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IElu
dFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3N2FiNjlmNTFj
NWQwMzQyNWE0N2ZjNTk3NS4uNzI1Y2IwYWZiMDNhMzYyNThkZDFkNzNmODJkN2VmYWM1ZjgwY2M3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCkBAIC0yODYsMTIgKzI4NiwxNSBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0g
ICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgaWYgKCFwaXhlbEFycmF5
KQorICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CisgICAgaWYgKCFp
bWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0g
bm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisgICAgCisgICAgYXV0byBwaXhlbEFycmF5ID0g
aW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIHBpeGVsQXJyYXlEaW1lbnNpb25zLnNjYWxl
KHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2NhbGUoKSk7CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CkBAIC0zMTEsNyArMzE0LDcg
QEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXpl
KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGlt
YWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXgg
MjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZkZGQ4NGVjYi4uMTM5NWEyZGI4NTAzMmM5
ZTJhZTg2NGM2Mzk2NjY4YjM3NDFjYzMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMjMsOCAr
MjMsOCBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xh
bXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTk5LDE0ICs5OSwxNSBAQCB2b2lkIEZFRHJvcFNoYWRv
dzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3co
Ymx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKIAogICAgIC8vIFRPRE86IERpcmVj
dCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1h
Z2VEYXRhLgotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+
aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5n
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVy
OjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkp
CisgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2Fs
U2l6ZSgpKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSk7CisgICAg
aWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHRTaGFkb3cuYmx1
ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAq
IHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwotCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVB
cnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVy
OjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShz
cmNQaXhlbEFycmF5LT5kYXRhKCksIGltYWdlRGF0YS0+c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5z
aXplKCkud2lkdGgoKSk7CisgICAgCisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVh
KTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3Ip
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2ZDRlYzJhOTc5Mjk2NjM4NGZjNTUwNzRhMmY5
NzJiNTkwZmEuLmVhMjZkYWE3ODk3YWQ5YzQ5NzhjMzE3YzRkZDI0OTdkMWY3YWE3ZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5
cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCkBAIC0yNzgsMTAgKzI3OCwxMyBAQCBJbWFnZUJ1ZmZlciogRmls
dGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRp
b25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0
aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgIGlm
IChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgeworICAgICAgICBhdXRvIGltYWdlUmVzdWx0
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoZGVzdGluYXRpb25SZWN0LnNpemUoKSwgbWFrZVJlZigqbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFn
ZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGlt
YWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoZGVzdGluYXRpb25SZWN0LnNpemUoKSwgbWFr
ZVJlZigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkpOworICAgICAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCAqaW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgfQogICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC00NDMsOSArNDQ2LDEwIEBAIHZvaWQg
RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsK
ICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIu
CiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKKyAgICAgICAg
ICAgIGF1dG8gaW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOworICAgICAgICAgICAgaWYgKCFpbWFnZVJlc3Vs
dCkKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gbWFrZVJlZlB0cihpbWFnZVJlc3VsdC0+ZGF0YSgpKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKGlucHV0U2l6ZSkpOwpAQCAtNDY5LDkgKzQ3MywxMCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6
Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8g
V2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlm
IChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
SW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwotICAgICAg
ICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKKyAgICAgICAgICAgIGF1dG8g
aW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgICAgIGlmICghaW1hZ2VSZXN1bHQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBtYWtlUmVmUHRyKGltYWdlUmVzdWx0LT5kYXRhKCkpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwog
ICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRT
aXplKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAppbmRleCBmZjFiMzk0MTVlYmIy
MWJlNmNlZmFjNTkwNmY3ZDQyNTFiODM1OTNmLi42YmVmZTA4Y2E3ZWM0YjBmOWZjNzI1YjkzYjNm
YmYzMzhhMzI3MThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKQEAgLTI1NSwx
OCArMjU1LDE1IEBAIHZvaWQgaW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3Qq
IGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCiAgICAgfQogfQogCi1SZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgLyogcmVzb2x1dGlvblNj
YWxlICovKSBjb25zdAorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKLSAgICBhdXRvIG51bUJ5dGVzID0gcmVj
dC5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZs
b3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWlu
dDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0
KCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC5zaXplKCkp
OworICAgIGF1dG8gcmVzdWx0ID0gaW1hZ2VEYXRhID8gaW1hZ2VEYXRhLT5kYXRhKCkgOiBudWxs
cHRyOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlm
ICghYml0bWFwKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaW1hZ2VE
YXRhOwogCiAgICAgaWYgKCFyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChkZXNpcmVkRm9ybWF0
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yOTEsNyArMjg4LDcgQEAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXNpcmUKICAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlv
bjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwg
cmVzdWx0LT5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gaW1hZ2VEYXRhOwogfQogCiBib29sIEltYWdlQnVmZmVyRGF0YTo6cmVhZERhdGFGcm9tQml0
bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBjb25zdApA
QCAtMzU0LDIxICszNTEsMTkgQEAgYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJp
dG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEYKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNv
bnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxl
cmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQordm9pZCBJbWFnZUJ1ZmZl
ckRhdGE6OnB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVChz
b3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+
IDApOwogCiAgICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKICAgICBD
aGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNl
UmVjdC54KCkpOwotICAgIGRlc3R4ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBBU1NFUlQoZGVz
dHgudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6
ZS53aWR0aCgpKTsKICAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKICAgICBB
U1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7CiAKICAgICBD
aGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VS
ZWN0Lm1heFgoKSk7Ci0gICAgZW5keCAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJUKGVu
ZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIENoZWNrZWQ8aW50PiB3aWR0
aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKQEAgLTM3NiwxNCArMzcxLDEyIEBAIHZvaWQgSW1hZ2VC
dWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhh
UHJlbXVsdGlwbGljCiAKICAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgp
OwogICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkg
KyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgZGVzdHkgKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFT
U0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0
KCkgPCBzaXplLmhlaWdodCgpKTsKICAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAw
KTsKICAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7
CiAKICAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkg
KyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgZW5keSAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAg
QVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAKICAgICBDaGVja2Vk
PGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKQEAgLTM5NSw5ICszODgsOSBAQCB2
b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBBbHBoYVByZW11bHRpcGxpYwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgaWYgKGJpdG1h
cCkgewogICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0g
ICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gc291cmNlU2l6ZS53aWR0aCgpKTsKKyAg
ICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBpbWFnZURhdGEuc2l6ZSgpLndpZHRoKCkp
OwogICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNpemUud2lkdGgoKSk7Ci0gICAg
ICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOworICAg
ICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBpbWFnZURhdGEuc2l6ZSgpLmhlaWdodCgp
KTsKICAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc2l6ZS5oZWlnaHQoKSk7CiAg
ICAgfQogI2VuZGlmCkBAIC00MDUsNiArMzk4LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1
dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWMK
ICAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShzaXplKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgYXV0b3oqIHNvdXJjZSA9IGltYWdlRGF0YS5kYXRhKCk7CiAgICAgaWYgKHNvdXJjZVNpemUg
PT0gc2l6ZSkgewogICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCksIHNvdXJjZS5kYXRhKCksIHNv
dXJjZS5sZW5ndGgoKSk7CiAgICAgICAgIGJ5dGVGb3JtYXQgPSBzb3VyY2VGb3JtYXQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCmluZGV4IDljOTRkOGE0ODIyZjEyNWY0MDZmMzAwNzc0N2Zm
OTM1OGMxNTZhMzAuLjA5Y2M0OTNlMWMyYTVhNTZjMmNlYWVmNWMzYTI5Yzk1MDQ1ZDFkMDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRhdGFEaXJlY3QyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCkBAIC01NCw4ICs1NCw4IEBAIHN0cnVjdCBJbWFn
ZUJ1ZmZlckRhdGEgewogICAgIGVudW0gY2xhc3MgQml0bWFwQnVmZmVyU3luYyB7IEluU3luYywg
Qml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMgfTsKICAgICBtdXRhYmxlIEJpdG1hcEJ1
ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9m
U3luYyB9OwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpIGNvbnN0OwotICAgIHZvaWQg
cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6
ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZvaWQg
cHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBjb25zdCBJbnRTaXplJik7CiAKICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVC
aXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCmluZGV4
IGUwNDIxOGYxZWY0ZjU3OGNlMDdmOTRiN2E4ZWNiYjgzMGE1MjY3ZjkuLjY5NTk3MDkwMTQwNmZk
NDE3NDg1NjVjMmE4YWM3MjliNTY4ZjY4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKQEAg
LTI3OCw0OSArMjc4LDI2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzCiAgICAgfQogfQogCi1S
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMs
IENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK1JlZlB0cjxJbWFnZURh
dGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQogICAgICAgICBmbHVzaENvbnRleHQoKTsKIAot
ICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0g
TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgc2Nh
bGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKLSAgICBpZiAocGl4ZWxBcnJh
eURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6
ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0
LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSBy
ZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChw
aXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3Jj
UmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKKyAgICByZXR1cm4gbV9kYXRhLmdldERhdGEo
b3V0cHV0Rm9ybWF0LCBzY2FsZWRTcmNSZWN0LCBpbnRlcm5hbFNpemUoKSk7CiB9CiAKLXZvaWQg
SW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQordm9pZCBJbWFnZUJ1ZmZl
cjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50KQogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJj
ZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IHNvdXJj
ZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0
ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IH0KKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1Jl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNl
LCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAx
KTsKKyAgICBtX2RhdGEucHV0RGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzY2FsZWRTcmNS
ZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpKTsKIH0KIAogU3RyaW5nIEltYWdlQnVmZmVy
Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApp
bmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3NWEwYmNhZDdkNjc1Li40ZDhhMjkwN2Jm
Y2FkZGYxYWVmOTE0MmIzYjVkMjc4MmQ4M2ExOGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkJveFNoYXBl
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgpAQCAt
MTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3Rl
clNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgICAgIGlmIChpbWFn
ZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0
KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBpbWFn
ZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpIH0pOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5kYXRhKCkpOworICAgICAgICBhdXRvIHBp
eGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJh
eUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFy
cmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVzOiBSR0JBLgogICAgICAg
ICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihscm91
bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwgMSkgKiAyNTUuMGYpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388488</attachid>
            <date>2020-01-22 17:01:15 -0800</date>
            <delta_ts>2020-01-22 17:07:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200122170114.patch</filename>
            <type>text/plain</type>
            <size>60958</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJkMjM3OWQ0YzkzNDQ1
NjY2NzA2NmJlNGMwNTY5YTNjNGY1MTcwNS4uODk2ZjdkN2RlYTUzNzFiMDY1NDQ2ODkxNzBjODUw
ZGI0OTQ5N2UyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBpdHMgYm9keSB0byBjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9ucyBiZSBwdWJsaWMg
YW5kIHJlbW92ZSB0aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJT
aGFkb3dCdWZmZXIpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2lj
YWxVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9D
RkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlw
bGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5k
IHNpemVzIGhhdmUgdG8gYmUgcGFzc2VkIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRvCisgICAg
ICAgIGRlYWwgd2l0aCB0aGUgcGl4ZWxzJyBkYXRhIHdlIG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0
aGUgcmVzb2x1dGlvblNjYWxlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIFRoaXMgd2FzIHRoZSBvbmx5IHBsYWNlIHdo
aWNoIHdhcyBwYXNzaW5nIHNjYWxlZCByZWN0YW5nbGUgYWxvbmcgd2l0aCAKKyAgICAgICAgQmFj
a2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4gSW5zdGVhZCB3ZSBjYW4gcGFzcyB0aGUgbG9naWNh
bCByZWN0YW5nbGUKKyAgICAgICAgYW5kIHVzZSBJbWFnZURhdGE6OnNpemUoKSBzaW5jZSBpdCBt
dXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25TY2FsZSgpCisgICAgICAgIHdoZW4gdGhlIElt
YWdlRGF0YSBpcyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFn
ZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0
YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OnB1
dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBl
KToKKwogMjAyMC0wMS0yMiAgTmlrb3MgTW91Y2h0YXJpcyAgPG5tb3VjaHRhcmlzQGFwcGxlLmNv
bT4KIAogICAgICAgICBBdXRvbWF0aWMgbGluayByZXBsYWNlbWVudCB2aWEgIlNtYXJ0IGxpbmtz
IiBzaG91bGQgZW1pdCAiaW5zZXJ0TGluayIgaW5wdXQgZXZlbnRzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBlZGEx
NzE3ZGRmZmQ3ZWIwYmMzZjg3MDJiODI5M2U4OTliZDVjZTdiLi4zMmVlNWQ0ZjA3OGFkNWM3ZTE4
NjQzYTllMjU0ZThmZDI4NWQwNDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTkyMiwxMyArOTIyLDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSA9
IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXIt
PmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0
aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1
ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAgICAgICAgIGlmICghaW1hZ2VE
YXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlk
YXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPnBvc3NpYmx5U2hhcmVk
QnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFn
ZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJh
eUJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpW
YWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzc5LDE5ICsyNzc5LDI1
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAK
LSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlKFdU
Rk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICAg
ICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBhcnJheSA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRl
TGVuZ3RoKCkpOworICAgICAgICBpZiAoIWFycmF5KSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCksIG1ha2VSZWYoKmFycmF5KSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7Cisg
ICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
RmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAg
ICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIElu
dFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGlt
YWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6
OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4p
IH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5ZGEzZmZiMjkzZjBhLi5kMmI4
ZGI4MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiB9CiAK
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmUHRy
PEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJ
bWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwg
ZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jh
c2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0
IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50
ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4ICsyMTkxLDggQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFy
cmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVs
bHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICBhdXRv
IGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpIHsK
ICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1l
c3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFz
LiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51
bWJlcihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3ICsyMjAzLDcgQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0
YVJlY3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGlt
YWdlRGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHkpCkBAIC0yMjE3LDExICsy
MjEyLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBm
bG9hdCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6
OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdp
ZHRoLCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgs
IGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAg
ICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAo
IWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAg
ICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxp
bnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJl
Y3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJz
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6
TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXIt
PmludGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBA
IC0yMjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1
dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJl
Y3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7
CiAKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5
dGVBcnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0
YSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwogCiAgICAgZGlkRHJhdyhkZXN0
UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRv
dyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJm
NDk4YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1NDFmYzcyZjRkMzFiZDUxNzcz
NTA0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICszNzEsNiBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0lt
YWdlKFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVy
YXRvcik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRh
KEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0
IHN3LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwg
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQg
ZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0
KTsKLQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9v
bCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGUo
KS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODVi
YmMuLmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVkZTFhMjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9p
ZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBp
bWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50
KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0
ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOwogICAgICAgICAg
ICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9z
LCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhiYzgwYzE0MTdh
ZWFjMmZhZi4uZjNlZWU5M2E1MzI1ZTUyZWJmMzNmZmRlNmM2YTY3MTc1ODc1NmMxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAt
MjgsOCArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CkBAIC0xMTMsNTEgKzExMywxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRv
QkdSQURhdGEoKSBjb25zdAogfQogI2VuZGlmCiAKLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVD
VDJEKSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBz
cmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0Nv
bG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25s
eSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYg
KChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNl
ICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9y
U3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpM
aW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKysp
IHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAg
ICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1
NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9
KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwot
ICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBb
XSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5l
YXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0g
PSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlm
IC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2so
KQogewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUo
KSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1
bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IGxvZ2lj
YWxSZWN0ID0geyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH07CisgICAgYXV0byBpbWFnZURh
dGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBsb2dpY2FsUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKICAg
ICAKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgIGZv
ciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwpAQCAtMTcwLDEzICsxMzMsNyBAQCBpbmxpbmUgdm9p
ZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogICAgICAgICBk
b3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChk
b3VibGUpYSAvIDI1NS4wKTsKICAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0
ICsgMywgbHVtYSk7CiAgICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUo
KSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBm
dW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4K
LSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2lj
YWxSZWN0KTsKIH0KIAogI2lmICFVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRi
MjI5MzA2YjdjZmVkZjliLi43YWJmZTBkMTcxMTQwNmQ5MDhlMDMxZDJmNmEwNzFlNDkwYWYxOGFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
QEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1MYXllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTg0LDM3ICs4
Myw0OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBz
dGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hl
biBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBt
YXNrZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25z
dCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1w
ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNp
emUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0
UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHN0YXRpYyBJbnRTaXpl
IGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOworICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwogCisgICAg
V0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisjaWYgVVNF
KENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKKyNl
bmRpZgorCiAgICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3Jl
CiAgICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CiAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0
OworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CisjZWxpZiBVU0UoQ0FJUk8pCisg
ICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0KLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0g
eyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9
OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0
ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29v
cmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLQotICAgIHZv
aWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVT
eXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgw
LCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJ
Uk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNpZiBVU0UoQ0cp
IHx8IFVTRShESVJFQ1QyRCkKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRp
dmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICNlbmRpZgorICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9u
OjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAorICAgIHZvaWQgY29udmVydFRvTHVtaW5h
bmNlTWFzaygpOwogI2lmICFVU0UoQ0cpCiAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQogICAgIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29s
b3JTcGFjZSk7CkBAIC0xMjIsNTAgKzEzMiwyMCBAQCBwdWJsaWM6CiAjZWxzZQogICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KICNl
bmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAotICAgIHNp
emVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgp
IGNvbnN0OworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9E
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdU
Rjo6bnVsbG9wdCkgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dDsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCA9IHsgfSk7CisgICAgCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0OwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9v
bCk7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUg
SW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBl
ci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsK
LSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9h
dFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRT
aXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhl
IHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4g
SWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0Lgot
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsK
LSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBz
aW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZv
aWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9pZCBnZW5l
cmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNs
YXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdl
R2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdl
OwotCiBwcml2YXRlOgogICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7CiAgICAgSW50U2l6ZSBt
X3NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
Y3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0MWY5MzM2NzRkMTguLmM3YWUy
ZjVkNzNiOTEzOGQ3NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJT
aGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBs
YQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRl
bXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdl
LmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJs
dXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmx1
ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qu
d2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBi
bHVyUmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0
YSgpOworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJSZWN0
LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwg
Ymx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZl
cihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiYmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1ZDMx
YjFkMzM3OTAyLi44Y2FjZGQ5ZWNhOGY1NjU2NzE3NjVhN2Q0ZTAzN2VjYTYyMmZiNDQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUsOSArMzUsMTEgQEAKICNpbmNsdWRlICJDYWlyb09w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Myw0MSBAQCB2b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29s
b3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9y
dGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAg
fHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkc3RD
b2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29u
c3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09
IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNv
bG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7Cisg
ICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJn
YkxVVCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNv
bG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKIHsK
ICAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJh
dGVkIGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTYsMTAgQEAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UKIH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4K
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRh
dGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93
IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0g
cmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBhdXRvIGltYWdlRGF0
YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiByZXN1bHQgPSBp
bWFnZURhdGEgPyBpbWFnZURhdGEtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00NjksNyArNTAwLDcgQEAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
SW50UmVjdCYgbG9naWMKIAogICAgIC8vIE5vdGhpbmcgd2lsbCBiZSBjb3BpZWQsIHNvIGp1c3Qg
cmV0dXJuIHRoZSByZXN1bHQuCiAgICAgaWYgKG51bUNvbHVtbnMgPD0gMCB8fCBudW1Sb3dzIDw9
IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBpbWFnZURhdGE7CiAK
ICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJhY2tpbmdTdG9y
ZUNvb3JkaW5hdGVTeXN0ZW0uCiAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRldmljZSBzY2Fs
ZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIuCkBAIC01MTks
NTQgKzU1MCwzMiBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpYwogICAgICAgICBkZXN0Um93cyAr
PSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2ljYWxVbml0KGNvbnN0IFVuaXQm
IHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZW
YWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVt
T2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1
dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0
KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1dGlvblNjYWxlKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVl
LCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6Omdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUg
PT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1dGlv
blNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0KHZh
bHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBzcmNSZWN0OworICAgIEludFJlY3QgYmFj
a2luZ1N0b3JlUmVjdCA9IHNyY1JlY3Q7CisgICAgYmFja2luZ1N0b3JlUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisgICAgCisgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIHJldHVybiBnZXREYXRhPEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwg
bG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25T
Y2FsZSk7CisgICAgcmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBt
X2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CiB9CiAKLVJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGlt
YWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkKIHsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29v
cmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0
b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJu
IGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KGJh
Y2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6
ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9
IHNvdXJjZVJlY3Q7CisgICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gaW1hZ2VEYXRhLnNp
emUoKTsKKyAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBkZXN0UG9pbnQ7CiAKLVJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxv
Z2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVu
aXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChw
aXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFj
a2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVj
dCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0K
KyAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBzY2Fs
ZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBzY2FsZWREZXN0UG9p
bnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRl
QXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBi
YWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlv
blNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBiYWNraW5nU3RvcmVVbml0
KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJ
bnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0KGRlc3RQb2ludCwgY29v
cmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgbG9naWNhbFNv
dXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2ludCA9IGxvZ2ljYWxV
bml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOworICAg
IEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIEludFBvaW50IGxv
Z2ljYWxEZXN0UG9pbnQgPSBkZXN0UG9pbnQ7CiAKICAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVj
dC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAw
KTsKQEAgLTYxMyw3ICs2MjIsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaQogICAgIHVuc2ln
bmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKICAgICBp
bnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5n
ZXQoKSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9y
aWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OworICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQ
ZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsr
eSkgewogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWdu
ZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSArIGRlc3R5KSk7CiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmluZGV4IGFmZDVlNGVjNzE5
ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIuLmM4MDJlYjJmOTU2NzBiNTE3MmIxNWQ5OWEx
ZGE0NWU3ZTI4ODIyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0zNzcsNDkgKzM3NywyNiBAQCB2b2lkIElt
YWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0
OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQot
ICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBJbnRSZWN0IHNj
YWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEu
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3Qs
IGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0K
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lv
bnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAo
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgp
OwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAg
ICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1f
ZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1Jl
Y3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Cisg
ICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1hdCwgc2NhbGVkU3JjUmVjdCwgaW50
ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit2b2lkIEltYWdlQnVm
ZmVyOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKQogICAgICAgICBmbHVzaENvbnRleHQoKTsKIAotICAgIEludFJlY3Qgc2NhbGVkU291
cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291
cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5
c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0g
ICAgfQorICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgc2NhbGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKLSAgICBtX2RhdGEucHV0RGF0YShzb3Vy
Y2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVz
dFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
OworICAgIG1fZGF0YS5wdXREYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNyY1Jl
Y3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKTsKICAgICAKICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2Fj
aGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENy
ZWF0ZUltYWdlKCkuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgpAQCAt
NDU2LDExICs0MzMsMTIgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWIKIAogICAgIGlmIChDRkVx
dWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZl
IGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRv
cCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBp
ZiAoIXByZW11bHRpcGxpZWREYXRhKQorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCks
IGxvZ2ljYWxTaXplKCkgfSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxT
aXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIGF1dG8gcHJl
bXVsdGlwbGllZERhdGEgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICAgICAgdmVyaWZ5SW1hZ2VC
dWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CiAg
ICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdp
dGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxs
cHRyKSk7CiAgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmluZGV4
IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMuLjY0ZTBhOTcyZTBiYWEy
NTg3MWM2M2Q5ZWY3OGI1MWM3NTk0Yjk4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKQEAgLTEyNSwx
NyArMTI1LDExIEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEo
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKK1Jl
ZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAogewotICAgIENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgo
KTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhD
bGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0g
ICAgdWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0
cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShyZWN0LnNpemUoKSk7CisgICAgYXV0byogcmVzdWx0ID0gaW1hZ2VEYXRhID8gaW1h
Z2VEYXRhLT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7CkBAIC0x
NzAsMTcgKzE2NCwxNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0
YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAogICAgIENoZWNrZWQ8aW50
PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKICAgICAKICAgICBpZiAod2lkdGgudW5zYWZlR2V0
KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAgICAKICAgICB1bnNpZ25lZCBkZXN0Qnl0
ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVz
dWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OworICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gcmVzdWx0LT5kYXRhKCkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3R4ICogNDsKICAgICAKICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKICAgICB1aW50
OF90KiBzcmNSb3dzOwogICAgIAogICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewogICAg
ICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
cmV0dXJuIGltYWdlRGF0YTsKIAogICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93
LnVuc2FmZUdldCgpOwogICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKQEAgLTIw
Niw3ICsyMDAsNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAogICAgICAgICAgICAgdkltYWdl
VW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsK
ICNlbmRpZgogCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJu
IGltYWdlRGF0YTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChvdXRwdXRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CkBAIC0zMzEsMTAg
KzMyNSwxMCBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAogI2VuZGlmIC8vIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiAgICAgfQogICAgIAotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERh
dGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQog
ewogICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNl
UmVjdC5oZWlnaHQoKSA+IDApOwpAQCAtMzY4LDggKzM2Miw4IEBAIHZvaWQgSW1hZ2VCdWZmZXJE
YXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVs
dGlwbGljCiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndp
ZHRoKCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3Jp
Z2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOworICAgIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKKyAg
ICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgKG9y
aWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKICAgICB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgdWludDhfdCogZGVzdFJvd3M7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaAppbmRleCAzZTIzNzRiYWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0
Li42YTRmYmYyYWRlNWU4NjBkMzRlMjEzZTFjNDEyZTE1YmRhYmM1M2ZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmgKQEAgLTQwLDYgKzQwLDcgQEAgdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSU9TdXJmYWNlOwog
CiBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKQEAgLTU5LDggKzYwLDggQEAgc3RydWN0IEltYWdl
QnVmZmVyRGF0YSB7CiAjZW5kaWYKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7CisgICAg
UmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5k
ZXJpbmcpIGNvbnN0OworICAgIHZvaWQgcHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLjcyNWNi
MGFmYjAzYTM2MjU4ZGQxZDczZjgyZDdlZmFjNWY4MGNjNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEyICsyODYsMTUg
QEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJl
Y3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAg
ICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBhdXRvIGltYWdlRGF0YSA9
IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1
cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1
ZXMpOworICAgIAorICAgIGF1dG8gcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAg
IEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUo
KTsKKyAgICBwaXhlbEFycmF5RGltZW5zaW9ucy5zY2FsZShyZXN1bHRJbWFnZS0+cmVzb2x1dGlv
blNjYWxlKCkpOwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9VTktOT1dOOgpAQCAtMzExLDcgKzMxNCw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVz
dWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50
KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhU
eXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVh
MmQ1NjE4ZThmZGRkODRlY2IuLjEzOTVhMmRiODUwMzJjOWUyYWU4NjRjNjM5NjY2OGIzNzQxY2Mz
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJGRUdh
dXNzaWFuQmx1ci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBA
IC05OSwxNCArOTksMTUgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9z
aGFkb3dDb2xvcik7CiAKICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdl
QnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0YS4KLSAgICBJbnRSZWN0IHNo
YWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmludGVybmFsU2l6ZSgpKTsKLSAgICBh
dXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShzaGFkb3dBcmVhLCBudWxscHRyLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0
ZVN5c3RlbSk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgIEludFJlY3Qgc2hhZG93QXJl
YShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7CisgICAgYXV0byBpbWFn
ZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJy
YXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0
aCgpKTsKLQotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBz
aGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0
ZVN5c3RlbSk7CisgICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwor
ICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBp
bWFnZURhdGEtPnNpemUoKSwgNCAqIGltYWdlRGF0YS0+c2l6ZSgpLndpZHRoKCkpOworICAgIAor
ICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc2hhZG93QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAg
IHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRl
eCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi5lYTI2ZGFhNzg5N2Fk
OWM0OTc4YzMxN2M0ZGQyNDk3ZDFmN2FhN2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNywx
MCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQpAQCAt
Mjc4LDEwICsyNzgsMTMgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJS
ZXN1bHQoKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEludFJlY3QgZGVzdGluYXRp
b25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAo
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0
aW9uUmVjdCwgSW50UG9pbnQoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVz
dGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpIHsKKyAgICAgICAgYXV0byBpbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGRl
c3RpbmF0aW9uUmVjdC5zaXplKCksIG1ha2VSZWYoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVj
dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBpbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIG1ha2VSZWYoKm1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlUmVzdWx0LCBkZXN0
aW5hdGlvblJlY3QpOworICAgIH0KICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KTsKIH0KIApAQCAtNDQzLDkgKzQ0NiwxMCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVs
dGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAg
aWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBh
IGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1
ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1f
aW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBv
aW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgICAgICBpZiAoIW1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCisgICAgICAgICAgICBhdXRvIGltYWdlUmVzdWx0ID0g
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSB9KTsKKyAgICAgICAgICAgIGlmICghaW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1ha2VSZWZQdHIo
aW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRT
aXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKQEAgLTQ2
OSw5ICs0NzMsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24g
ZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkg
ewotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpCisgICAgICAgICAgICBhdXRvIGltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CisgICAg
ICAgICAgICBpZiAoIWltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbWFrZVJlZlB0cihpbWFnZVJlc3Vs
dC0+ZGF0YSgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRh
dGFEaXJlY3QyRC5jcHAKaW5kZXggZmYxYjM5NDE1ZWJiMjFiZTZjZWZhYzU5MDZmN2Q0MjUxYjgz
NTkzZi4uNmJlZmUwOGNhN2VjNGIwZjlmYzcyNWI5M2IzZmJmMzM4YTMyNzE4YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCkBAIC0yNTUsMTggKzI1NSwxNSBAQCB2b2lkIGluUGxh
Y2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbih1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0
ZUNvdW50KQogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
ckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVS
ZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAqLykgY29uc3QKK1JlZlB0cjxJ
bWFnZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUp
IGNvbnN0CiB7Ci0gICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRPdmVyZmxvdz4o
KSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKKyAgICBhdXRvIGltYWdlRGF0
YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGlt
YWdlRGF0YSA/IGltYWdlRGF0YS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWJpdG1hcCkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKIAogICAgIGlmICghcmVhZERh
dGFGcm9tQml0bWFwSWZOZWVkZWQoZGVzaXJlZEZvcm1hdCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMjkxLDcgKzI4OCw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlCiAgICAgICAg
ICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkpOwogICAg
IH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAogYm9v
bCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3QKQEAgLTM1NCwyMSArMzUxLDE5IEBAIGJv
b2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc2lyZWRGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW1hZ2VC
dWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBj
b25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0
IHJlc29sdXRpb25TY2FsZSkKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7
CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKIAogICAgIENoZWNrZWQ8aW50
PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7CiAgICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENo
ZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBkZXN0eCAq
PSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwog
ICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7CiAgICAgQVNTRVJU
KG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0
KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hl
Y2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIGVuZHgg
Kj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUu
d2lkdGgoKSk7CiAKICAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7
CkBAIC0zNzYsMTQgKzM3MSwxMiBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpYwogCiAgICAgQ2hl
Y2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKICAgICBDaGVja2VkPGludD4gZGVz
dHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAg
IGRlc3R5ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkg
Pj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7CiAg
ICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKG9yaWdpbnku
dW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGVu
ZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwot
ICAgIGVuZHkgKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgp
IDw9IHNpemUuaGVpZ2h0KCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJl
Y3QuaGVpZ2h0KCk7CkBAIC0zOTUsOSArMzg4LDkgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1
dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWMK
ICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGlmIChiaXRtYXApIHsKICAgICAgICAgYXV0byBwaXhl
bFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXpl
LndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7CisgICAgICAgIEFTU0VSVChwaXhlbFNpemUu
d2lkdGggPj0gaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpKTsKICAgICAgICAgQVNTRVJUKHBpeGVs
U2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhl
aWdodCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5o
ZWlnaHQgPj0gaW1hZ2VEYXRhLnNpemUoKS5oZWlnaHQoKSk7CiAgICAgICAgIEFTU0VSVChwaXhl
bFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwogICAgIH0KICNlbmRpZgpAQCAtNDA1LDYg
KzM5OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKCFlbnN1cmVCYWNraW5n
U3RvcmUoc2l6ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG96KiBzb3VyY2UgPSBpbWFn
ZURhdGEuZGF0YSgpOwogICAgIGlmIChzb3VyY2VTaXplID09IHNpemUpIHsKICAgICAgICAgbWVt
Y3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOwogICAgICAg
ICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaApp
bmRleCA5Yzk0ZDhhNDgyMmYxMjVmNDA2ZjMwMDc3NDdmZjkzNThjMTU2YTMwLi4wOWNjNDkzZTFj
MmE1YTU2YzJjZWFlZjVjM2EyOWM5NTA0NWQxZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0
MkQuaApAQCAtNTQsOCArNTQsOCBAQCBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKICAgICBlbnVt
IGNsYXNzIEJpdG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMsIEJpdG1hcE91dE9mU3luYywgQnVmZmVy
T3V0T2ZTeW5jIH07CiAgICAgbXV0YWJsZSBCaXRtYXBCdWZmZXJTeW5jIGJpdG1hcEJ1ZmZlclN5
bmMgeyBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMgfTsKIAotICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQg
cmVzb2x1dGlvblNjYWxlKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNv
bnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5k
ZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2b2lkIHB1dERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYpOwogCiAg
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0
Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAppbmRleCBlMDQyMThmMWVmNGY1NzhjZTA3Zjk0
YjdhOGVjYmI4MzBhNTI2N2Y5Li42OTU5NzA5MDE0MDZmZDQxNzQ4NTY1YzJhOGFjNzI5YjU2OGY2
ODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCkBAIC0yNzgsNDkgKzI3OCwyNiBAQCB2b2lk
IEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3Jk
aW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRSZWN0IHNyY1JlY3QgPSBy
ZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBJbnRSZWN0
IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAq
cGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2Rh
dGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1Jl
Y3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7
Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURp
bWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAg
ICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29u
dGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0
ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0g
ICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0
dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSwgMSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1hdCwgc2NhbGVkU3Jj
UmVjdCwgaW50ZXJuYWxTaXplKCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJy
YXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAg
ICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAgICAgIGZsdXNoQ29u
dGV4dCgpOwogCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAg
ICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGlu
YXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNv
dXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VT
aXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9CisgICAgSW50UmVjdCBzY2FsZWRT
cmNSZWN0ID0gc3JjUmVjdDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKIAotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgYnVmZmVyRm9ybWF0LCBzY2FsZWRT
b3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7CisgICAgbV9kYXRhLnB1dERhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc2NhbGVkU3JjUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5h
bFNpemUoKSk7CiB9CiAKIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYsIE9wdGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggODUxYTg2Njc4OWI0ODM1NDIy
YzU3YTQxZGRhNzVhMGJjYWQ3ZDY3NS4uNGQ4YTI5MDdiZmNhZGRmMWFlZjkxNDJiM2I1ZDI3ODJk
ODNhMThhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJCb3hTaGFwZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiUG9seWdvblNoYXBl
LmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hhcGUuaCIKQEAgLTE4OCw4ICsxODksOSBAQCBzdGQ6OnVu
aXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1hZ2UsIGZs
b2F0IHRocmVzaG9sZCwgYwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Qu
c2l6ZSgpKSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5
ID0gaW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50
KCksIGltYWdlUmVjdC5zaXplKCkpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocGl4ZWxBcnJh
eSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgaW1h
Z2VSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW1hZ2VEYXRhICYmIGlt
YWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5k
YXRhKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5s
ZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2gg
cGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KICAgICAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhy
ZXNob2xkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJl
c2hvbGQsIDAsIDEpICogMjU1LjBmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388489</attachid>
            <date>2020-01-22 17:07:47 -0800</date>
            <delta_ts>2020-01-23 08:55:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200122170746.patch</filename>
            <type>text/plain</type>
            <size>61147</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJkMjM3OWQ0YzkzNDQ1
NjY2NzA2NmJlNGMwNTY5YTNjNGY1MTcwNS4uODk2ZjdkN2RlYTUzNzFiMDY1NDQ2ODkxNzBjODUw
ZGI0OTQ5N2UyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBpdHMgYm9keSB0byBjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9ucyBiZSBwdWJsaWMg
YW5kIHJlbW92ZSB0aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJT
aGFkb3dCdWZmZXIpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2lj
YWxVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9D
RkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlw
bGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5k
IHNpemVzIGhhdmUgdG8gYmUgcGFzc2VkIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRvCisgICAg
ICAgIGRlYWwgd2l0aCB0aGUgcGl4ZWxzJyBkYXRhIHdlIG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0
aGUgcmVzb2x1dGlvblNjYWxlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIFRoaXMgd2FzIHRoZSBvbmx5IHBsYWNlIHdo
aWNoIHdhcyBwYXNzaW5nIHNjYWxlZCByZWN0YW5nbGUgYWxvbmcgd2l0aCAKKyAgICAgICAgQmFj
a2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4gSW5zdGVhZCB3ZSBjYW4gcGFzcyB0aGUgbG9naWNh
bCByZWN0YW5nbGUKKyAgICAgICAgYW5kIHVzZSBJbWFnZURhdGE6OnNpemUoKSBzaW5jZSBpdCBt
dXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25TY2FsZSgpCisgICAgICAgIHdoZW4gdGhlIElt
YWdlRGF0YSBpcyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFn
ZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0
YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OnB1
dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBl
KToKKwogMjAyMC0wMS0yMiAgTmlrb3MgTW91Y2h0YXJpcyAgPG5tb3VjaHRhcmlzQGFwcGxlLmNv
bT4KIAogICAgICAgICBBdXRvbWF0aWMgbGluayByZXBsYWNlbWVudCB2aWEgIlNtYXJ0IGxpbmtz
IiBzaG91bGQgZW1pdCAiaW5zZXJ0TGluayIgaW5wdXQgZXZlbnRzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBlZGEx
NzE3ZGRmZmQ3ZWIwYmMzZjg3MDJiODI5M2U4OTliZDVjZTdiLi4zMmVlNWQ0ZjA3OGFkNWM3ZTE4
NjQzYTllMjU0ZThmZDI4NWQwNDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTkyMiwxMyArOTIyLDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSA9
IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXIt
PmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0
aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1
ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAgICAgICAgIGlmICghaW1hZ2VE
YXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlk
YXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPnBvc3NpYmx5U2hhcmVk
QnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFn
ZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJh
eUJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpW
YWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzc5LDE5ICsyNzc5LDI1
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAK
LSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlKFdU
Rk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICAg
ICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBhcnJheSA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRl
TGVuZ3RoKCkpOworICAgICAgICBpZiAoIWFycmF5KSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCksIG1ha2VSZWYoKmFycmF5KSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7Cisg
ICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
RmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAg
ICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIElu
dFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGlt
YWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6
OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4p
IH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5ZGEzZmZiMjkzZjBhLi5kMmI4
ZGI4MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiB9CiAK
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmUHRy
PEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJ
bWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwg
ZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jh
c2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0
IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50
ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4ICsyMTkxLDggQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFy
cmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVs
bHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICBhdXRv
IGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpIHsK
ICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1l
c3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFz
LiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51
bWJlcihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3ICsyMjAzLDcgQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0
YVJlY3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGlt
YWdlRGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHkpCkBAIC0yMjE3LDExICsy
MjEyLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBm
bG9hdCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6
OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdp
ZHRoLCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgs
IGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAg
ICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAo
IWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAg
ICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxp
bnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJl
Y3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJz
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6
TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXIt
PmludGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBA
IC0yMjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1
dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJl
Y3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7
CiAKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5
dGVBcnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0
YSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwogCiAgICAgZGlkRHJhdyhkZXN0
UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRv
dyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJm
NDk4YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1NDFmYzcyZjRkMzFiZDUxNzcz
NTA0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICszNzEsNiBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0lt
YWdlKFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVy
YXRvcik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRh
KEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0
IHN3LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwg
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQg
ZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0
KTsKLQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9v
bCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGUo
KS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODVi
YmMuLmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVkZTFhMjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9p
ZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBp
bWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50
KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0
ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOwogICAgICAgICAg
ICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9z
LCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhiYzgwYzE0MTdh
ZWFjMmZhZi4uZjNlZWU5M2E1MzI1ZTUyZWJmMzNmZmRlNmM2YTY3MTc1ODc1NmMxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAt
MjgsOCArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CkBAIC0xMTMsNTEgKzExMywxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRv
QkdSQURhdGEoKSBjb25zdAogfQogI2VuZGlmCiAKLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVD
VDJEKSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBz
cmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0Nv
bG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25s
eSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYg
KChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNl
ICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9y
U3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpM
aW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKysp
IHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAg
ICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1
NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9
KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwot
ICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBb
XSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5l
YXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0g
PSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlm
IC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2so
KQogewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUo
KSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1
bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IGxvZ2lj
YWxSZWN0ID0geyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH07CisgICAgYXV0byBpbWFnZURh
dGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBsb2dpY2FsUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKICAg
ICAKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgIGZv
ciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwpAQCAtMTcwLDEzICsxMzMsNyBAQCBpbmxpbmUgdm9p
ZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogICAgICAgICBk
b3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChk
b3VibGUpYSAvIDI1NS4wKTsKICAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0
ICsgMywgbHVtYSk7CiAgICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUo
KSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBm
dW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4K
LSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2lj
YWxSZWN0KTsKIH0KIAogI2lmICFVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRi
MjI5MzA2YjdjZmVkZjliLi43YWJmZTBkMTcxMTQwNmQ5MDhlMDMxZDJmNmEwNzFlNDkwYWYxOGFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
QEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1MYXllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTg0LDM3ICs4
Myw0OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBz
dGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hl
biBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBt
YXNrZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25z
dCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1w
ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNp
emUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0
UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHN0YXRpYyBJbnRTaXpl
IGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOworICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwogCisgICAg
V0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisjaWYgVVNF
KENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKKyNl
bmRpZgorCiAgICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3Jl
CiAgICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CiAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0
OworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CisjZWxpZiBVU0UoQ0FJUk8pCisg
ICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0KLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0g
eyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9
OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0
ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29v
cmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLQotICAgIHZv
aWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVT
eXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgw
LCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJ
Uk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNpZiBVU0UoQ0cp
IHx8IFVTRShESVJFQ1QyRCkKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRp
dmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICNlbmRpZgorICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9u
OjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAorICAgIHZvaWQgY29udmVydFRvTHVtaW5h
bmNlTWFzaygpOwogI2lmICFVU0UoQ0cpCiAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQogICAgIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29s
b3JTcGFjZSk7CkBAIC0xMjIsNTAgKzEzMiwyMCBAQCBwdWJsaWM6CiAjZWxzZQogICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KICNl
bmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAotICAgIHNp
emVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgp
IGNvbnN0OworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9E
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdU
Rjo6bnVsbG9wdCkgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dDsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCA9IHsgfSk7CisgICAgCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0OwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9v
bCk7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUg
SW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBl
ci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsK
LSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9h
dFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRT
aXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhl
IHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4g
SWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0Lgot
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsK
LSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBz
aW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZv
aWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9pZCBnZW5l
cmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNs
YXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdl
R2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdl
OwotCiBwcml2YXRlOgogICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7CiAgICAgSW50U2l6ZSBt
X3NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
Y3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0MWY5MzM2NzRkMTguLmM3YWUy
ZjVkNzNiOTEzOGQ3NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJT
aGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBs
YQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRl
bXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdl
LmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJs
dXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmx1
ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qu
d2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBi
bHVyUmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0
YSgpOworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJSZWN0
LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwg
Ymx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZl
cihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiYmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1ZDMx
YjFkMzM3OTAyLi44Y2FjZGQ5ZWNhOGY1NjU2NzE3NjVhN2Q0ZTAzN2VjYTYyMmZiNDQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUsOSArMzUsMTEgQEAKICNpbmNsdWRlICJDYWlyb09w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Myw0MSBAQCB2b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29s
b3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9y
dGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAg
fHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkc3RD
b2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29u
c3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09
IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNv
bG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7Cisg
ICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJn
YkxVVCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNv
bG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKIHsK
ICAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJh
dGVkIGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTYsMTAgQEAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UKIH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4K
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRh
dGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93
IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0g
cmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBhdXRvIGltYWdlRGF0
YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiByZXN1bHQgPSBp
bWFnZURhdGEgPyBpbWFnZURhdGEtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00NjksNyArNTAwLDcgQEAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
SW50UmVjdCYgbG9naWMKIAogICAgIC8vIE5vdGhpbmcgd2lsbCBiZSBjb3BpZWQsIHNvIGp1c3Qg
cmV0dXJuIHRoZSByZXN1bHQuCiAgICAgaWYgKG51bUNvbHVtbnMgPD0gMCB8fCBudW1Sb3dzIDw9
IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBpbWFnZURhdGE7CiAK
ICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJhY2tpbmdTdG9y
ZUNvb3JkaW5hdGVTeXN0ZW0uCiAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRldmljZSBzY2Fs
ZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIuCkBAIC01MTks
NTQgKzU1MCwzMiBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpYwogICAgICAgICBkZXN0Um93cyAr
PSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2ljYWxVbml0KGNvbnN0IFVuaXQm
IHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZW
YWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVt
T2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1
dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0
KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1dGlvblNjYWxlKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVl
LCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6Omdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUg
PT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1dGlv
blNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0KHZh
bHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBzcmNSZWN0OworICAgIEludFJlY3QgYmFj
a2luZ1N0b3JlUmVjdCA9IHNyY1JlY3Q7CisgICAgYmFja2luZ1N0b3JlUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisgICAgCisgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIHJldHVybiBnZXREYXRhPEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwg
bG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25T
Y2FsZSk7CisgICAgcmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBt
X2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CiB9CiAKLVJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGlt
YWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkKIHsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29v
cmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0
b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJu
IGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KGJh
Y2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6
ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9
IHNvdXJjZVJlY3Q7CisgICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gaW1hZ2VEYXRhLnNp
emUoKTsKKyAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBkZXN0UG9pbnQ7CiAKLVJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxv
Z2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVu
aXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChw
aXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFj
a2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVj
dCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0K
KyAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBzY2Fs
ZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBzY2FsZWREZXN0UG9p
bnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRl
QXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBi
YWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlv
blNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBiYWNraW5nU3RvcmVVbml0
KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJ
bnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0KGRlc3RQb2ludCwgY29v
cmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgbG9naWNhbFNv
dXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2ludCA9IGxvZ2ljYWxV
bml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOworICAg
IEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIEludFBvaW50IGxv
Z2ljYWxEZXN0UG9pbnQgPSBkZXN0UG9pbnQ7CiAKICAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVj
dC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAw
KTsKQEAgLTYxMyw3ICs2MjIsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaQogICAgIHVuc2ln
bmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKICAgICBp
bnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5n
ZXQoKSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9y
aWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OworICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQ
ZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsr
eSkgewogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWdu
ZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSArIGRlc3R5KSk7CiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmluZGV4IGFmZDVlNGVjNzE5
ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIuLmM4MDJlYjJmOTU2NzBiNTE3MmIxNWQ5OWEx
ZGE0NWU3ZTI4ODIyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0zNzcsNDkgKzM3NywyNiBAQCB2b2lkIElt
YWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0
OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQot
ICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBJbnRSZWN0IHNj
YWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEu
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3Qs
IGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0K
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lv
bnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAo
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgp
OwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAg
ICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1f
ZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1Jl
Y3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Cisg
ICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1hdCwgc2NhbGVkU3JjUmVjdCwgaW50
ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit2b2lkIEltYWdlQnVm
ZmVyOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKQogICAgICAgICBmbHVzaENvbnRleHQoKTsKIAotICAgIEludFJlY3Qgc2NhbGVkU291
cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291
cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5
c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0g
ICAgfQorICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgc2NhbGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKLSAgICBtX2RhdGEucHV0RGF0YShzb3Vy
Y2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVz
dFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
OworICAgIG1fZGF0YS5wdXREYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNyY1Jl
Y3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKTsKICAgICAKICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2Fj
aGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENy
ZWF0ZUltYWdlKCkuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgpAQCAt
NDU2LDExICs0MzMsMTIgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWIKIAogICAgIGlmIChDRkVx
dWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZl
IGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRv
cCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBp
ZiAoIXByZW11bHRpcGxpZWREYXRhKQorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCks
IGxvZ2ljYWxTaXplKCkgfSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxT
aXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIGF1dG8gcHJl
bXVsdGlwbGllZERhdGEgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICAgICAgdmVyaWZ5SW1hZ2VC
dWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CiAg
ICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdp
dGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxs
cHRyKSk7CiAgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmluZGV4
IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMuLjY0NjFlNzQ1N2IxY2Fj
YTZhYTBlMjU0MDk1ZWQ2MTVmMjdkNTE1ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lu
bGluZXMuaD4KQEAgLTEyNSwxNyArMTI2LDExIEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
ckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1
ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJl
bmRlcmluZykgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAog
ewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBh
cmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYg
KGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJl
YS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3Vs
dC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCisgICAgYXV0byBpbWFn
ZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LnNpemUoKSk7CisgICAgYXV0byogcmVzdWx0
ID0gaW1hZ2VEYXRhID8gaW1hZ2VEYXRhLT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIENoZWNrZWQ8aW50PiBlbmR4ID0g
cmVjdC5tYXhYKCk7CkBAIC0xNzAsMTcgKzE2NSwxNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dAogICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKICAgICAKICAgICBp
ZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAgICAKICAg
ICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVz
dHggKiA0OworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0LT5kYXRhKCkgKyBkZXN0eSAq
IGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKICAgICAKICAgICB1bnNpZ25lZCBzcmNCeXRl
c1BlclJvdzsKICAgICB1aW50OF90KiBzcmNSb3dzOwogICAgIAogICAgIGlmICghYWNjZWxlcmF0
ZVJlbmRlcmluZykgewogICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKIAogICAgICAgICBzcmNCeXRlc1Bl
clJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwogICAgICAgICBzcmNSb3dzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBv
cmlnaW54ICogNDsKQEAgLTIwNiw3ICsyMDEsNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAog
ICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3Qs
IGt2SW1hZ2VOb0ZsYWdzKTsKICNlbmRpZgogCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAg
IGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkKSB7CkBAIC0zMzEsMTAgKzMyNiwxMCBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IElt
YWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAogI2Vu
ZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiAgICAgfQogICAgIAot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNp
emUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKK3ZvaWQgSW1h
Z2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nKQogewogICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsK
ICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwpAQCAtMzY4LDggKzM2Myw4IEBA
IHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9
IDApCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNv
dXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVu
c2FmZUdldCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIGltYWdlRGF0YS5z
aXplKCkud2lkdGgoKTsKKyAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRh
dGEoKS0+ZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51
bnNhZmVHZXQoKTsKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgdWludDhfdCog
ZGVzdFJvd3M7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRleCAzZTIzNzRiYWQyNGYwNzg3ZmVmMDU0
M2MxYjUxYjkxMjBmMTIzMGQ0Li42YTRmYmYyYWRlNWU4NjBkMzRlMjEzZTFjNDEyZTE1YmRhYmM1
M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmgKQEAgLTQwLDYgKzQwLDcgQEAgdHlwZWRlZiB1aW50MzJfdCBD
R0JpdG1hcEluZm87CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOwog
Y2xhc3MgSU9TdXJmYWNlOwogCiBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKQEAgLTU5LDggKzYw
LDggQEAgc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7CiAjZW5kaWYKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1h
dCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0
ZVJlbmRlcmluZyk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OworICAgIHZvaWQgcHV0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXpl
JiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0
MjVhNDdmYzU5NzUuLjcyNWNiMGFmYjAzYTM2MjU4ZGQxZDczZjgyZDdlZmFjNWY4MGNjNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApA
QCAtMjg2LDEyICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigq
aW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5s
b2dpY2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1
dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1h
Z2VSZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAg
ICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlmICghaW1hZ2VE
YXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1h
bGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIAorICAgIGF1dG8gcGl4ZWxBcnJheSA9IGltYWdl
RGF0YS0+ZGF0YSgpOworICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSByZXN1bHRJ
bWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBwaXhlbEFycmF5RGltZW5zaW9ucy5zY2FsZShyZXN1
bHRJbWFnZS0+cmVzb2x1dGlvblNjYWxlKCkpOwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgpAQCAtMzExLDcgKzMxNCw3IEBAIHZv
aWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBp
bWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBpbWFnZVJl
Y3QpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2
YTFhZWY1MzUzMjE0OTNjOWVhMmQ1NjE4ZThmZGRkODRlY2IuLjEzOTVhMmRiODUwMzJjOWUyYWU4
NjRjNjM5NjY2OGIzNzQxY2MzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTIzLDggKzIzLDgg
QEAKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCkBAIC05OSwxNCArOTksMTUgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJS
YWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CiAKICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4
ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0
YS4KLSAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmludGVy
bmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShzaGFkb3dBcmVhLCBudWxscHRyLCBJbWFnZUJ1ZmZlcjo6QmFj
a2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAg
IEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUo
KSk7CisgICAgYXV0byBpbWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEpOworICAgIGlmICgh
aW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXll
ckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFk
b3dBcmVhLnNpemUoKS53aWR0aCgpKTsKLQotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXko
KnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNo
YWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFj
a2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGlt
YWdlRGF0YS0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4
ZWxBcnJheS0+ZGF0YSgpLCBpbWFnZURhdGEtPnNpemUoKSwgNCAqIGltYWdlRGF0YS0+c2l6ZSgp
LndpZHRoKCkpOworICAgIAorICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc2hhZG93QXJlYSk7CiAK
ICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5
MGZhLi5lYTI2ZGFhNzg5N2FkOWM0OTc4YzMxN2M0ZGQyNDk3ZDFmN2FhN2Q1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCkBAIC0yNywxMCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFy
cmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQpAQCAtMjc4LDEwICsyNzgsMTMgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1f
aW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVj
dC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRp
b25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICBpZiAobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKKyAgICAgICAgYXV0byBpbWFnZVJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIG1ha2VSZWYoKm1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VSZXN1
bHQsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBpbWFnZVJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIG1ha2VSZWYo
Km1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
KmltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOworICAgIH0KICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDQzLDkgKzQ0NiwxMCBAQCB2b2lkIEZpbHRl
ckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAg
ICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7Ci0g
ICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCisgICAgICAgICAgICBh
dXRvIGltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgICAgIGlmICghaW1hZ2VSZXN1bHQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG1ha2VSZWZQdHIoaW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhp
bnB1dFNpemUpKTsKQEAgLTQ2OSw5ICs0NzMsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QK
ICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHBy
ZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9p
bWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJl
Y3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKLSAgICAgICAgICAg
IGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCisgICAgICAgICAgICBhdXRvIGltYWdl
UmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkgfSk7CisgICAgICAgICAgICBpZiAoIWltYWdlUmVzdWx0KQogICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbWFr
ZVJlZlB0cihpbWFnZVJlc3VsdC0+ZGF0YSgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAg
ICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKaW5kZXggZmYxYjM5NDE1ZWJiMjFiZTZj
ZWZhYzU5MDZmN2Q0MjUxYjgzNTkzZi4uNmJlZmUwOGNhN2VjNGIwZjlmYzcyNWI5M2IzZmJmMzM4
YTMyNzE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCkBAIC0yNTUsMTggKzI1
NSwxNSBAQCB2b2lkIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbih1aW50OF90KiBieXRl
RGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAq
LykgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNv
bnN0IEludFNpemUmIHNpemUpIGNvbnN0CiB7Ci0gICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJl
YTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xh
bXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsK
KyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IGltYWdlRGF0YSA/IGltYWdlRGF0YS0+ZGF0YSgpIDogbnVsbHB0cjsK
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWJp
dG1hcCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsK
IAogICAgIGlmICghcmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoZGVzaXJlZEZvcm1hdCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjkxLDcgKzI4OCw3IEBAIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzaXJlCiAgICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCksIHJlc3Vs
dC0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGlt
YWdlRGF0YTsKIH0KIAogYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1hcElm
TmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3QKQEAgLTM1
NCwyMSArMzUxLDE5IEBAIGJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21CaXRtYXBJ
Zk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJ
bnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVS
ZW5kZXJpbmcgKi8sIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRh
OjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQoc291cmNl
UmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsK
IAogICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7CiAgICAgQ2hlY2tl
ZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3Qu
eCgpKTsKLSAgICBkZXN0eCAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJUKGRlc3R4LnVu
c2FmZUdldCgpID49IDApOwogICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lk
dGgoKSk7CiAgICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJU
KG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCiAgICAgQ2hlY2tl
ZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5t
YXhYKCkpOwotICAgIGVuZHggKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR4LnVu
c2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBDaGVja2VkPGludD4gd2lkdGggPSBz
b3VyY2VSZWN0LndpZHRoKCk7CkBAIC0zNzYsMTQgKzM3MSwxMiBAQCB2b2lkIEltYWdlQnVmZmVy
RGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11
bHRpcGxpYwogCiAgICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKICAg
ICBDaGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291
cmNlUmVjdC55KCkpOwotICAgIGRlc3R5ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBBU1NFUlQo
ZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwg
c2l6ZS5oZWlnaHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7CiAg
ICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwogCiAg
ICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291
cmNlUmVjdC5tYXhZKCkpOwotICAgIGVuZHkgKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VS
VChlbmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+
IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7CkBAIC0zOTUsOSArMzg4LDkgQEAgdm9pZCBJ
bWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaWMKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGlmIChiaXRtYXApIHsK
ICAgICAgICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAg
ICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7CisgICAgICAg
IEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpKTsKICAg
ICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwotICAgICAgICBB
U1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAg
QVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gaW1hZ2VEYXRhLnNpemUoKS5oZWlnaHQoKSk7CiAg
ICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwogICAgIH0K
ICNlbmRpZgpAQCAtNDA1LDYgKzM5OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRh
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAg
aWYgKCFlbnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG96KiBzb3VyY2UgPSBpbWFnZURhdGEuZGF0YSgpOwogICAgIGlmIChzb3VyY2VTaXplID09IHNp
emUpIHsKICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2Uu
bGVuZ3RoKCkpOwogICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEYXRhRGlyZWN0MkQuaAppbmRleCA5Yzk0ZDhhNDgyMmYxMjVmNDA2ZjMwMDc3NDdmZjkzNThj
MTU2YTMwLi4wOWNjNDkzZTFjMmE1YTU2YzJjZWFlZjVjM2EyOWM5NTA0NWQxZDA3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaApAQCAtNTQsOCArNTQsOCBAQCBzdHJ1Y3QgSW1hZ2VCdWZm
ZXJEYXRhIHsKICAgICBlbnVtIGNsYXNzIEJpdG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMsIEJpdG1h
cE91dE9mU3luYywgQnVmZmVyT3V0T2ZTeW5jIH07CiAgICAgbXV0YWJsZSBCaXRtYXBCdWZmZXJT
eW5jIGJpdG1hcEJ1ZmZlclN5bmMgeyBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMg
fTsKIAotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0
ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25zdDsKLSAgICB2b2lkIHB1dERh
dGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgUmVm
UHRyPEltYWdlRGF0YT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2b2lkIHB1dERh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29u
c3QgSW50U2l6ZSYpOwogCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFw
KElEMkQxUmVuZGVyVGFyZ2V0Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAppbmRleCBlMDQy
MThmMWVmNGY1NzhjZTA3Zjk0YjdhOGVjYmI4MzBhNTI2N2Y5Li42OTU5NzA5MDE0MDZmZDQxNzQ4
NTY1YzJhOGFjNzI5YjU2OGY2ODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCkBAIC0yNzgs
NDkgKzI3OCwyNiBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJ
bnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1l
bnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsK
LQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSwgMSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50
U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsK
LSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAg
ICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxB
cnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Qu
c2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSwgMSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1
dEZvcm1hdCwgc2NhbGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCkpOwogfQogCi12b2lkIEltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNp
emUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCkKIHsKICAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
CiAgICAgICAgIGZsdXNoQ29udGV4dCgpOwogCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0
ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXpl
OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7
Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
ICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Cisg
ICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBzY2FsZWRTcmNSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKIAotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgYnVm
ZmVyRm9ybWF0LCBzY2FsZWRTb3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQs
IGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7Cisg
ICAgbV9kYXRhLnB1dERhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc2NhbGVkU3JjUmVjdCwg
ZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSk7CiB9CiAKIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXgg
ODUxYTg2Njc4OWI0ODM1NDIyYzU3YTQxZGRhNzVhMGJjYWQ3ZDY3NS4uNGQ4YTI5MDdiZmNhZGRm
MWFlZjkxNDJiM2I1ZDI3ODJkODNhMThhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJCb3hTaGFwZS5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAjaW5j
bHVkZSAiUG9seWdvblNoYXBlLmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hhcGUuaCIKQEAgLTE4OCw4
ICsxODksOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFw
ZShJbWFnZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgICAgICBpZiAoaW1hZ2UpCiAg
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQ
b2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQocGl4ZWxBcnJheSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gaW1hZ2VCdWZm
ZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IHsgSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaW1hZ2VEYXRhICYmIGltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byBwaXhlbEFy
cmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5n
dGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9m
ZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KICAgICAgICAgdWlu
dDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihj
bGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAsIDEpICogMjU1LjBmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388550</attachid>
            <date>2020-01-23 08:55:45 -0800</date>
            <delta_ts>2020-01-23 09:42:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200123085544.patch</filename>
            <type>text/plain</type>
            <size>69344</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJkMjM3OWQ0YzkzNDQ1
NjY2NzA2NmJlNGMwNTY5YTNjNGY1MTcwNS4uMzU4NTRiNGM2ZmE2MTNiNzIyMTIwZGM4MTQxYTFl
NjFjMDMzOGY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAyMC0wMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBtb3ZlIGl0cyBib2R5IHRvIGNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIE1ha2UgdGhlIHByaXZhdGUgZnVuY3Rpb25zIGJlIHB1
YmxpYyBhbmQgcmVtb3ZlIHRoZSBmcmllbmQgY2xhc3Nlcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
Ymx1clNoYWRvd0J1ZmZlcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
bG9naWNhbFVuaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YmFja2luZ1N0b3JlVW5p
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIFdoZW4gY2FsbGluZyBnZXRJbWFnZURhdGEoKSB3
ZSBoYXZlIHRvIHBhc3MgbG9naWNhbCBjb29yZGluYXRlcy4gQnV0IHdoZW4KKyAgICAgICAgd2Ug
bmVlZCB0byBkZWFsIHdpdGggdGhlIEltYWdlRGF0YSBvciB0aGUgTmF0aXZlSW1hZ2VQdHIgd2Ug
aGF2ZSB0byB1c2UKKyAgICAgICAgYmFjay1lbmQgY29vcmRpbmF0ZXMuCisKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1
dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoK
KyAgICAgICAgQWxsIHRoZSByZWN0YW5nbGVzIGFuZCBzaXplcyBoYXZlIHRvIGJlIHBhc3NlZCBp
biBsb2dpY2FsIGNvb3JkaW5hdGVzLiBUbworICAgICAgICBkZWFsIHdpdGggdGhlIHBpeGVscycg
ZGF0YSB3ZSBuZWVkIHRvIHNjYWxlIHRoZW0gYnkgdGhlIHJlc29sdXRpb25TY2FsZSgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICBUaGlzIHdhcyB0aGUgb25seSBwbGFjZSB3aGljaCB3YXMgcGFzc2luZyBhIHJlY3Rhbmds
ZSBpbiBhIHRoZSBiYWNrLWVuZAorICAgICAgICBjb29yZGluYXRlcyBhbG9uZyB3aXRoIEJhY2tp
bmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uIEluc3RlYWQgd2UgY2FuIHBhc3MKKyAgICAgICAgdGhl
IHJlY3RhbmdsZSBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzIGFuZCB0aGVuIHVzZSBJbWFnZURhdGE6
OnNpemUoKSBzaW5jZQorICAgICAgICBpdCBtdXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25T
Y2FsZSgpIHdoZW4gdGhlIEltYWdlRGF0YSBpcyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6
OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMC0wMS0yMiAgTmlrb3MgTW91Y2h0YXJpcyAgPG5t
b3VjaHRhcmlzQGFwcGxlLmNvbT4KIAogICAgICAgICBBdXRvbWF0aWMgbGluayByZXBsYWNlbWVu
dCB2aWEgIlNtYXJ0IGxpbmtzIiBzaG91bGQgZW1pdCAiaW5zZXJ0TGluayIgaW5wdXQgZXZlbnRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAppbmRleCBlZGExNzE3ZGRmZmQ3ZWIwYmMzZjg3MDJiODI5M2U4OTliZDVjZTdiLi4z
MmVlNWQ0ZjA3OGFkNWM3ZTE4NjQzYTllMjU0ZThmZDI4NWQwNDQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTky
MiwxMyArOTIyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRT
aXplJiBsb2dpY2FsU2l6ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBidWZmZXItPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAw
LCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAg
ICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlv
blJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURh
dGEtPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsK
ICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6
YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0yNzc5LDE5ICsyNzc5LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRB
cnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpKTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBhcnJh
eSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAs
IGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBpZiAoIWFycmF5KSB7CiAgICAg
ICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9
CiAKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKGxv
Z2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIG1ha2VSZWYoKmFycmF5KSk7CisgICAgICAgIGlm
ICghaW1hZ2VEYXRhKSB7CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAg
IGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmlt
YWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShs
b2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwg
bG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0
bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8
Ym9vbD4ob3JpZ2luQ2xlYW4pIH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXAp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5
ZGEzZmZiMjkzZjBhLi5kMmI4ZGI4MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9y
PFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJ
bWFnZURhdGEoZmxvCiB9CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBm
bG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFn
ZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQot
RXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsK
ICAgICBpZiAoIWNhbnZhc0Jhc2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2Fu
dmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4
ICsyMTkxLDggQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsK
IAotICAgIGF1dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
aW1hZ2VEYXRhUmVjdCwgbnVsbHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRl
QXJyYXkpIHsKKyAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAg
aWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsK
ICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFn
ZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNv
bGVNZXNzYWdlLmFwcGVuZE51bWJlcihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3
ICsyMjAzLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0
YTo6Y3JlYXRlKGltYWdlRGF0YVJlY3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQg
ZHkpCkBAIC0yMjE3LDExICsyMjEyLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBm
bG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEo
ZGF0YSwgSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5
WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VC
dWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0
IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQg
ZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5i
dWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwg
SW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4o
ZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0g
ICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3Rl
bSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2lj
YWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJz
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYg
KGRlc3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNl
UmVjdChkZXN0UmVjdCk7CkBAIC0yMjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVy
OjpDbwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgp
LCBkYXRhLmhlaWdodCgpKSk7CiAKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0
KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7
CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgZGF0YSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwog
CiAgICAgZGlkRHJhdyhkZXN0UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9y
ZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNk
ZmM5YzlmY2U1MmJlODg5MmJmNDk4YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1
NDFmYzcyZjRkMzFiZDUxNzczNTA0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICsz
NzEsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52
YXNDb21wb3NpdGVkRHJhd0ltYWdlKFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VE
YXRhPj4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBz
eCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4
LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgs
IGZsb2F0IGRpcnR5SGVpZ2h0KTsKLQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgYm9vbCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3
MjkwOWNiNzFmNzgyOGVmODViYmMuLmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVk
ZTFhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0z
NzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBh
dXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBz
b3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBp
bWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQ
b2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJj
ZVJlY3QpOwogICAgICAgICAgICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0
YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0
NzNlNmE4ODhiYzgwYzE0MTdhZWFjMmZhZi4uZjNlZWU5M2E1MzI1ZTUyZWJmMzNmZmRlNmM2YTY3
MTc1ODc1NmMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcApAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0xMTMsNTEgKzExMywxNCBAQCBWZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAogfQogI2VuZGlmCiAKLSNpZiAhKFVT
RShDRykgfHwgVVNFKERJUkVDVDJEKSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9y
U3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2Up
Ci17Ci0gICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0
aGUgbW9tZW50Ci0gICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJH
QiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RD
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENv
bG9yU3BhY2U6OlNSR0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFj
ZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAy
NTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVu
dChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90
Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZShsaW5lYXJSZ2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNw
YWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKysp
IHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAg
ICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1
NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9
KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwot
ICAgIH0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6
OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKQogewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2lu
dCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkK
KyAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0geyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH07
CisgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAg
ICAgICAgIHJldHVybjsKICAgICAKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRh
LT5kYXRhKCk7CiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXkt
Pmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgdWludDhf
dCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwpAQCAtMTcwLDEzICsx
MzMsNyBAQCBpbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKQogICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCAr
IGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKICAgICAgICAgc3JjUGl4ZWxBcnJh
eS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CiAgICAgfQotICAgIHB1dEJ5dGVBcnJheSgq
c3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBs
dW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBw
bGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5j
ZU1hc2sgaGVyZSBsYXRlci4KLSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwor
ICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KTsKIH0KIAogI2lmICFVU0UoQ0FJUk8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEy
ZjJkOGY2ZTc1NzdlYWZjNmRiMjI5MzA2YjdjZmVkZjliLi43YWJmZTBkMTcxMTQwNmQ5MDhlMDMx
ZDJmNmEwNzFlNDkwYWYxOGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2MuaD4KQEAgLTg0LDM3ICs4Myw0OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3Jl
YXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXpl
TmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVl
ZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0
aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBG
bG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7
CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAor
ICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFn
ZUJ1ZmZlcigpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Q7CisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBmbHVzaENv
bnRleHQoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9m
IHRoZSBiYWNraW5nIHN0b3JlCiAgICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAKKyAgICBzaXplX3Qg
bWVtb3J5Q29zdCgpIGNvbnN0OworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25z
dDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
OworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Cisj
ZWxpZiBVU0UoQ0FJUk8pCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsK
KyNlbmRpZgogCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0KLSAgICBlbnVt
IENvb3JkaW5hdGVTeXN0ZW0geyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3Jl
Q29vcmRpbmF0ZVN5c3RlbSB9OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSBjb25zdDsKLQotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CiAgICAg
Ci0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdU
Rjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
Y29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBj
b25zdDsKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICBzdGF0aWMgTmF0aXZlSW1h
Z2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsK
ICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAorICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwogI2lmICFVU0UoQ0cpCiAgICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsg
fQogICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7CkBAIC0xMjIsNTAgKzEzMiwyMCBAQCBwdWJsaWM6
CiAjZWxzZQogICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSk7IH0KICNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdDsKIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4
dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKKyAgICBW
ZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdDsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Q7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSk7CisgICAgCisgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVt
ZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBv
bmx5IHdvcmsKICAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1h
dCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCk7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQg
d2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVy
LCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhj
b25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25z
dCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNs
YW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBl
ZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZs
b2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBV
U0UoQ0cpCi0gICAgLy8gVGhlIHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRo
ZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwg
Y3JvcCB0aGUgcmVzdWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRp
YyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYg
VVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09N
UHRyPElEMkQxQml0bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAK
LSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1p
bmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0
KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAg
ICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJp
ZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1h
Z2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVu
ZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRp
ZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEJpdG1hcEltYWdlOwotCiBwcml2YXRlOgogICAgIEltYWdlQnVmZmVyRGF0YSBtX2Rh
dGE7CiAgICAgSW50U2l6ZSBtX3NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0
MWY5MzM2NzRkMTguLmM3YWUyZjVkNzNiOTEzOGQ3NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNv
bnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJS
ZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXll
ckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXll
ckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0
LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFy
cmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
Ymx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJh
eSA9IGxheWVyRGF0YS0+ZGF0YSgpOworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5
LT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxh
eWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJB
bmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6
ZSYgdGVtcGxhdGVTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiYmI1YzY0ODJiNmUx
ZDNmMjhhYzQ3OWVhN2M1ZDMxYjFkMzM3OTAyLi4yMjZkM2EzZjNmYjEwYWExZjMxZjA3ODdiZDVm
YWVmZThlZTQ3MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUsOSArMzUsMTEgQEAK
ICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5o
IgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Myw0MSBA
QCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBk
c3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxp
bmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikKKyAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewor
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxV
VCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9
IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJh
eVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAg
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlm
IChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+
JiBsb29rVXBUYWJsZSkKIHsKICAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZl
cnNpb25zIG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTYsMTAgQEAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UKIH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRp
b24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJ
bWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUm
IGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBj
b25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IElu
dFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7Ci0gICAgLy8gVGhl
IGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0
aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsK
KyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAg
ICBhdXRvKiByZXN1bHQgPSBpbWFnZURhdGEgPyBpbWFnZURhdGEtPmRhdGEoKSA6IG51bGxwdHI7
CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00NjksNyAr
NTAwLDcgQEAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWMKIAogICAgIC8vIE5vdGhpbmcgd2lsbCBi
ZSBjb3BpZWQsIHNvIGp1c3QgcmV0dXJuIHRoZSByZXN1bHQuCiAgICAgaWYgKG51bUNvbHVtbnMg
PD0gMCB8fCBudW1Sb3dzIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybiBpbWFnZURhdGE7CiAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNl
IGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCiAgICAgLy8gV2UgbmVlZCB0byBz
ZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1h
Z2VCdWZmZXIuCkBAIC01MTksNTQgKzU1MCwzMSBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpYwog
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2lj
YWxVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1
dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBpbWFnZURhdGE7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0
KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVT
eXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxl
KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBzcmNSZWN0
OworICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IHNyY1JlY3Q7CisgICAgYmFja2luZ1N0
b3JlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgCisgICAgaWYgKG91dHB1dEZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAg
IHJldHVybiBnZXREYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4o
YmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxT
aXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgcmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3Qs
IG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CiB9CiAK
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAordm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9n
aWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRp
bmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5z
aW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5z
aXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1f
c2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIEludFJlY3Qg
bG9naWNhbFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIEludFBvaW50IGxvZ2ljYWxEZXN0
UG9pbnQgPSBkZXN0UG9pbnQ7CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6
ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwg
Y29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2lu
Z1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAg
KnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0
dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihi
YWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNp
emUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KKyAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3Qg
PSBzb3VyY2VSZWN0OworICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGltYWdlRGF0YS5z
aXplKCk7CisgICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwogCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0
IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNp
emUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3Rv
cmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNh
bERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOworICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAK
ICAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNj
YWxlZFNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTYxMyw3ICs2MjEsNyBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaQogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxl
ZFNvdXJjZVNpemUud2lkdGgoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdp
bnggKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5k
YXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewogICAgICAgICB1bnNpZ25lZCogcm93ID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSAr
IGRlc3R5KSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIu
LmZkYzRkYWYxYWY2OWNjNTY1OTdkN2Q5YTI0YjBlODkxOGJiMDcwNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBA
IC0zNzcsNDkgKzM3NywyOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25z
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VE
YXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAK
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNj
YWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNp
emUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwg
SW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVj
dDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkK
LSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4
ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1Jl
Y3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1
dEZvcm1hdCwgc2NhbGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291
cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3Jk
aW5hdGVTeXN0ZW0pCit2b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgaWYg
KGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQogICAgICAgICBmbHVzaENvbnRleHQo
KTsKIAotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50
U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5
c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VS
ZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQorICAgIEludFJlY3Qgc2NhbGVkU3JjUmVj
dCA9IHNyY1JlY3Q7CisgICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50Owor
ICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIHNjYWxlZERl
c3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKLSAgICBtX2RhdGEucHV0RGF0YShz
b3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwg
ZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpOworICAgIG1fZGF0YS5wdXREYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNy
Y1JlY3QsIHNjYWxlZERlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKTsKICAgICAKICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1
cmZhY2UgY2FjaGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNl
Q29udGV4dENyZWF0ZUltYWdlKCkuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNz
YXJ5LgpAQCAtNDUyLDMxICs0MzEsMzAgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZm
ZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWIKICAgICBB
U1NFUlQodXRpKTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwogCiAgICAgaWYgKENGRXF1
YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUg
YW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9w
IG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlm
ICghcHJlbXVsdGlwbGllZERhdGEpCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwg
bG9naWNhbFNpemUoKSB9KTsKKyAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNp
emUoKS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgc2l6ZV90IGRh
dGFTaXplID0gNCAqIGludGVybmFsU2l6ZSgpLmFyZWEoKS51bnNhZmVHZXQoKTsKKyAgICAgICAg
YXV0byBwcmVtdWx0aXBsaWVkRGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOwogICAgICAgICB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFT
aXplKTsKICAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNp
emUsIG51bGxwdHIpKTsKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICog
bG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRl
T3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdl
dCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgICAgICBpbWFn
ZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbnRlcm5hbFNpemUoKS53aWR0aCgpLCBpbnRlcm5h
bFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBo
YU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5n
SW50ZW50RGVmYXVsdCkpOwogICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8
fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKICAgICAg
ICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlt
YWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFs
U2l6ZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUo
KS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VS
ZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIGF1dG8gY29u
dGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGludGVybmFsU2l6ZSgpLndp
ZHRoKCksIGludGVybmFsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogaW50ZXJuYWxTaXplKCkud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0
KSk7CiAgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWln
aHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2Fs
U2l6ZSgpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0
TWFrZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJT
cGFjZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZSgpLndpZHRoKCks
IGludGVybmFsU2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZSgpLndpZHRoKCksIGlu
dGVybmFsU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwogICAgICAgICBpbWFnZSA9IGFk
b3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwCmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJm
ZGQyZWFiYWMuLjY0NjFlNzQ1N2IxY2FjYTZhYTBlMjU0MDk1ZWQ2MTVmMjdkNTE1ZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0
YUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGFDRy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KQEAgLTEyNSwxNyArMTI2LDExIEBAIFZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nLCBpbnQgd2lkdGgsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUm
IHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+
IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nKSBjb25zdAogewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92
ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9
IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVz
dWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJl
c3VsdERhdGEpCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LnNp
emUoKSk7CisgICAgYXV0byogcmVzdWx0ID0gaW1hZ2VEYXRhID8gaW1hZ2VEYXRhLT5kYXRhKCkg
OiBudWxscHRyOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7CkBAIC0xNzAsMTcgKzE2NSwxNyBA
QCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAogICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5
IC0gb3JpZ2lueTsKICAgICAKICAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWln
aHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0
dXJuIGltYWdlRGF0YTsKICAgICAKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICog
cmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0g
cmVzdWx0LT5kYXRhKCkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKICAg
ICAKICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKICAgICB1aW50OF90KiBzcmNSb3dzOwog
ICAgIAogICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewogICAgICAgICBpZiAoIWRhdGEp
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGltYWdlRGF0
YTsKIAogICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwog
ICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmln
aW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKQEAgLTIwNiw3ICsyMDEsNyBAQCBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dAogICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKICNlbmRpZgogCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAg
ICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CkBAIC0zMzEsMTAgKzMyNiwxMCBAQCBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dAogI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCiAgICAgfQogICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGlt
YWdlRGF0YTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQs
IGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZykKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewogICAgIEFTU0VSVChz
b3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+
IDApOwpAQCAtMzY4LDggKzM2Myw4IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYg
KHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB1
bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29u
c3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVz
UGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVz
UGVyUm93ID0gNCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKKyAgICBjb25zdCB1aW50OF90
KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRl
c1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKICAgICB1bnNpZ25lZCBkZXN0Qnl0
ZXNQZXJSb3c7CiAgICAgdWludDhfdCogZGVzdFJvd3M7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRl
eCAzZTIzNzRiYWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li42YTRmYmYyYWRlNWU4
NjBkMzRlMjEzZTFjNDEyZTE1YmRhYmM1M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKQEAgLTQwLDYgKzQw
LDcgQEAgdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSU9TdXJmYWNlOwogCiBzdHJ1Y3QgSW1hZ2VC
dWZmZXJEYXRhIHsKQEAgLTU5LDggKzYwLDggQEAgc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7CiAj
ZW5kaWYKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJl
bmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAg
IHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3Qg
SW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7CisgICAgUmVmUHRyPEltYWdlRGF0
YT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0Owor
ICAgIHZvaWQgcHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2MTQx
YmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLjk2MTE1NDFkMmZlNDczNDAxOWUz
NTgyNDY4ZDhhMjdjY2NjMWFkNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjUsNyArMjUs
NyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEzICsyODYsMTUgQEAgdm9pZCBGRUNvbG9y
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KElu
dFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVs
QXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMpOwot
ICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFn
ZVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0
b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGF1dG8g
cGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIEludFNpemUgcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBpbWFnZURhdGEtPnNpemUoKTsKIAorICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVz
ID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisgICAgCiAgICAgc3dpdGNoIChtX3R5cGUp
IHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBicmVhazsK
QEAgLTMxMSw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRl
QXJyYXkoKnBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJ
bWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgKmltYWdlRGF0YSwgaW1hZ2VSZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNi
Li4xMzk1YTJkYjg1MDMyYzllMmFlODY0YzYzOTY2NjhiMzc0MWNjMzMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtOTksMTQgKzk5LDE1IEBA
IHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIFNoYWRvd0Js
dXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwogCiAg
ICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9p
ZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50
KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5
ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwgbnVs
bHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOwotICAgIGlm
ICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVz
dWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0SW1h
Z2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBz
aGFkb3dBcmVhKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Y29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNoYWRv
d0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7Ci0KLSAgICByZXN1
bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9p
bnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1
dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93
LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXplKCks
IDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICAKKyAgICByZXN1bHRJbWFnZS0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFn
ZURhdGEsIHNoYWRvd0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5Nzky
OTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uYWVlOGI0ZmJkZTM5ODNjNDRmNTU0NzU5YWE1NjZj
YzgzYTQyMDk1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKQEAgLTE5OSw3ICsxOTksNyBAQCB2
b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQogICAgIGlm
ICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQu
Z2V0KCk7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwogICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJy
YXktPmRhdGEoKTsKICAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXktPmxlbmd0
aCgpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0
c1JlY3Vyc2l2ZSgpCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVz
dWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJF
ZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJl
c3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0Lmdl
dCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0
aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwg
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsK
IAogICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjc5
LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0
KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9u
UmVjdCk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJy
YXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1
bHQuZ2V0KCk7CiB9CiAKQEAgLTQzOCw1MiArNDM4LDUyIEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogICAgIAotICAgIExPR19XSVRIX1NUUkVB
TShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAi
ICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2Ug
YnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQu
Z2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVm
ZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAgIGlmICghbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9u
IGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQp
IHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAg
ICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7
CiAgICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQo
KSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpj
cmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlV
bnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCks
ICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
IGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIHZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsK
IAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAi
IDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVy
cywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRo
aXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIg
IiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCkpOwogCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAv
LyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAg
aWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAg
ICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQt
PmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZSht
X2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0
U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAg
ICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5w
dXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJ
bWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlv
biwgcmVjdCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCkKQEAgLTUxNSw4ICs1MTUsMTEgQEAgVWludDhDbGFtcGVkQXJyYXkqIEZpbHRl
ckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIEludFNpemUgcmVz
dWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2Nh
bGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChyZXN1bHRTaXpl
LmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKLSAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC5nZXQoKTsKKyAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRh
OjpjcmVhdGUocmVzdWx0U2l6ZSk7CisgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCk7CiB9CiAKIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCkBAIC01MzEsOCArNTM0LDExIEBAIFVp
bnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXpl
KSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKChyZXN1bHRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKLSAgICBy
ZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKKyAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKIH0KIAog
dm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFjZSBk
c3RDb2xvclNwYWNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggYzk2NmZjYzIxNjM5ZGU1YTQwNGE3YzYy
ZjNlYTJiNmU5MzMyZmU0Mi4uMGI2ZjVkNTEyNjY1NDBiMWQ2ZDFhYjgyOGQ4NDA1MGY4N2VmNzZj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOwor
Y2xhc3MgSW1hZ2VEYXRhOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4g
RmlsdGVyRWZmZWN0VmVjdG9yOwogCkBAIC0xODIsOCArMTgzLDggQEAgcHJpdmF0ZToKICAgICBG
aWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0
YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIAogICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVj
dDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCmluZGV4IGZmMWIzOTQxNWVi
YjIxYmU2Y2VmYWM1OTA2ZjdkNDI1MWI4MzU5M2YuLjQ5YTRhZDA5NzRkNmM2MTY0NTMyNGM1ZTZi
MmYzODEyMmEwODExYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcApAQCAtMjU1
LDE4ICsyNTUsMTUgQEAgdm9pZCBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb24odWludDhf
dCogYnl0ZURhdGEsIHVuc2lnbmVkIGJ5dGVDb3VudCkKICAgICB9CiB9CiAKLVJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0aW9u
U2NhbGUgKi8pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckRhdGE6OmdldERh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewotICAgIGF1dG8gbnVtQnl0ZXMgPSBy
ZWN0LmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBV
aW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChudW1CeXRlcy51bnNhZmVH
ZXQoKSk7CisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LnNpemUo
KSk7CisgICAgYXV0byogcmVzdWx0ID0gaW1hZ2VEYXRhID8gaW1hZ2VEYXRhLT5kYXRhKCkgOiBu
dWxscHRyOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmICghYml0bWFwKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaW1h
Z2VEYXRhOwogCiAgICAgaWYgKCFyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChkZXNpcmVkRm9y
bWF0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yOTEsNyArMjg4LDcgQEAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXNpcmUKICAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNh
dGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEo
KSwgcmVzdWx0LT5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4gaW1hZ2VEYXRhOwogfQogCiBib29sIEltYWdlQnVmZmVyRGF0YTo6cmVhZERhdGFGcm9t
Qml0bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBjb25z
dApAQCAtMzU0LDIxICszNTEsMTkgQEAgYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJv
bUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEYKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQs
IGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNj
ZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQordm9pZCBJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VS
VChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQo
KSA+IDApOwogCiAgICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKICAg
ICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291
cmNlUmVjdC54KCkpOwotICAgIGRlc3R4ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBBU1NFUlQo
ZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpIDwg
c2l6ZS53aWR0aCgpKTsKICAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKICAg
ICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7CiAKICAg
ICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3Vy
Y2VSZWN0Lm1heFgoKSk7Ci0gICAgZW5keCAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJU
KGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIENoZWNrZWQ8aW50PiB3
aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKQEAgLTM3NiwxNCArMzcxLDEyIEBAIHZvaWQgSW1h
Z2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFs
cGhhUHJlbXVsdGlwbGljCiAKICAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3Qu
eSgpOwogICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50Lnko
KSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgZGVzdHkgKj0gcmVzb2x1dGlvblNjYWxlOwogICAg
IEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHkudW5zYWZl
R2V0KCkgPCBzaXplLmhlaWdodCgpKTsKICAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+
PSAwKTsKICAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFko
KSk7CiAKICAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50Lnko
KSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgZW5keSAqPSByZXNvbHV0aW9uU2NhbGU7CiAg
ICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAKICAgICBDaGVj
a2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKQEAgLTM5NSw5ICszODgsOSBA
QCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBBbHBoYVByZW11bHRpcGxpYwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgaWYgKGJp
dG1hcCkgewogICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7
Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gc291cmNlU2l6ZS53aWR0aCgpKTsK
KyAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBpbWFnZURhdGEuc2l6ZSgpLndpZHRo
KCkpOwogICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNpemUud2lkdGgoKSk7Ci0g
ICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBpbWFnZURhdGEuc2l6ZSgpLmhlaWdo
dCgpKTsKICAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc2l6ZS5oZWlnaHQoKSk7
CiAgICAgfQogI2VuZGlmCkBAIC00MDUsNiArMzk4LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBs
aWMKICAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShzaXplKSkKICAgICAgICAgcmV0dXJuOwog
CisgICAgYXV0b3oqIHNvdXJjZSA9IGltYWdlRGF0YS5kYXRhKCk7CiAgICAgaWYgKHNvdXJjZVNp
emUgPT0gc2l6ZSkgewogICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCksIHNvdXJjZS5kYXRhKCks
IHNvdXJjZS5sZW5ndGgoKSk7CiAgICAgICAgIGJ5dGVGb3JtYXQgPSBzb3VyY2VGb3JtYXQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEYXRhRGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCmluZGV4IDljOTRkOGE0ODIyZjEyNWY0MDZmMzAwNzc0
N2ZmOTM1OGMxNTZhMzAuLjA5Y2M0OTNlMWMyYTVhNTZjMmNlYWVmNWMzYTI5Yzk1MDQ1ZDFkMDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRhdGFEaXJlY3QyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCkBAIC01NCw4ICs1NCw4IEBAIHN0cnVjdCBJ
bWFnZUJ1ZmZlckRhdGEgewogICAgIGVudW0gY2xhc3MgQml0bWFwQnVmZmVyU3luYyB7IEluU3lu
YywgQml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMgfTsKICAgICBtdXRhYmxlIEJpdG1h
cEJ1ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91
dE9mU3luYyB9OwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpIGNvbnN0OwotICAgIHZv
aWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50
U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZv
aWQgcHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBjb25zdCBJbnRTaXplJik7CiAKICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGli
bGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCmlu
ZGV4IGUwNDIxOGYxZWY0ZjU3OGNlMDdmOTRiN2E4ZWNiYjgzMGE1MjY3ZjkuLmNmYWYxNWU0N2My
OTcyNTYyNzQzZmQ3MjE1ZmRmNTc1ZTRiNTAyOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAK
QEAgLTI3OCw0OSArMjc4LDI4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzCiAgICAgfQogfQog
Ci1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lv
bnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK1JlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgaWYgKGNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQogICAgICAgICBmbHVzaENvbnRleHQoKTsK
IAotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0g
PT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAg
c2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKLSAgICBpZiAocGl4ZWxB
cnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Qu
c2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29y
ZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3Qg
PSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlm
IChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0g
c3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKKyAgICByZXR1cm4gbV9kYXRhLmdldERh
dGEob3V0cHV0Rm9ybWF0LCBzY2FsZWRTcmNSZWN0LCBpbnRlcm5hbFNpemUoKSk7CiB9CiAKLXZv
aWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQordm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRSZWN0IHNjYWxlZFNv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IHNv
dXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVT
eXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIH0KKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIEludFJlY3Qg
c2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OworICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUobV9y
ZXNvbHV0aW9uU2NhbGUpOworICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7CiAKLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIGJ1ZmZlckZvcm1hdCwgc2NhbGVk
U291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwg
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOworICAgIG1fZGF0YS5wdXREYXRh
KGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNyY1JlY3QsIHNjYWxlZERlc3RQb2ludCwg
aW50ZXJuYWxTaXplKCkpOwogfQogCiBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDg1MWE4NjY3ODli
NDgzNTQyMmM1N2E0MWRkYTc1YTBiY2FkN2Q2NzUuLjRkOGEyOTA3YmZjYWRkZjFhZWY5MTQyYjNi
NWQyNzgyZDgzYTE4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUu
Y3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHln
b25TaGFwZS5oIgogI2luY2x1ZGUgIlJhc3RlclNoYXBlLmgiCkBAIC0xODgsOCArMTg5LDkgQEAg
c3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGlt
YWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1h
Z2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4
ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJ
bnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBp
eGVsQXJyYXkpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50
KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGltYWdlRGF0
YSAmJiBpbWFnZURhdGEtPmRhdGEoKSk7CisgICAgICAgIGF1dG8gcGl4ZWxBcnJheSA9IGltYWdl
RGF0YS0+ZGF0YSgpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxB
cnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAv
LyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAgICAgIHVpbnQ4X3QgYWxwaGFQ
aXhlbFRocmVzaG9sZCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyb3VuZGYoY2xhbXBUbzxmbG9h
dD4odGhyZXNob2xkLCAwLCAxKSAqIDI1NS4wZikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388556</attachid>
            <date>2020-01-23 09:42:10 -0800</date>
            <delta_ts>2020-01-23 11:28:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200123094209.patch</filename>
            <type>text/plain</type>
            <size>69610</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJkMjM3OWQ0YzkzNDQ1
NjY2NzA2NmJlNGMwNTY5YTNjNGY1MTcwNS4uMzU4NTRiNGM2ZmE2MTNiNzIyMTIwZGM4MTQxYTFl
NjFjMDMzOGY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAyMC0wMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBtb3ZlIGl0cyBib2R5IHRvIGNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIE1ha2UgdGhlIHByaXZhdGUgZnVuY3Rpb25zIGJlIHB1
YmxpYyBhbmQgcmVtb3ZlIHRoZSBmcmllbmQgY2xhc3Nlcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
Ymx1clNoYWRvd0J1ZmZlcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
bG9naWNhbFVuaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YmFja2luZ1N0b3JlVW5p
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIFdoZW4gY2FsbGluZyBnZXRJbWFnZURhdGEoKSB3
ZSBoYXZlIHRvIHBhc3MgbG9naWNhbCBjb29yZGluYXRlcy4gQnV0IHdoZW4KKyAgICAgICAgd2Ug
bmVlZCB0byBkZWFsIHdpdGggdGhlIEltYWdlRGF0YSBvciB0aGUgTmF0aXZlSW1hZ2VQdHIgd2Ug
aGF2ZSB0byB1c2UKKyAgICAgICAgYmFjay1lbmQgY29vcmRpbmF0ZXMuCisKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1
dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoK
KyAgICAgICAgQWxsIHRoZSByZWN0YW5nbGVzIGFuZCBzaXplcyBoYXZlIHRvIGJlIHBhc3NlZCBp
biBsb2dpY2FsIGNvb3JkaW5hdGVzLiBUbworICAgICAgICBkZWFsIHdpdGggdGhlIHBpeGVscycg
ZGF0YSB3ZSBuZWVkIHRvIHNjYWxlIHRoZW0gYnkgdGhlIHJlc29sdXRpb25TY2FsZSgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICBUaGlzIHdhcyB0aGUgb25seSBwbGFjZSB3aGljaCB3YXMgcGFzc2luZyBhIHJlY3Rhbmds
ZSBpbiBhIHRoZSBiYWNrLWVuZAorICAgICAgICBjb29yZGluYXRlcyBhbG9uZyB3aXRoIEJhY2tp
bmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uIEluc3RlYWQgd2UgY2FuIHBhc3MKKyAgICAgICAgdGhl
IHJlY3RhbmdsZSBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzIGFuZCB0aGVuIHVzZSBJbWFnZURhdGE6
OnNpemUoKSBzaW5jZQorICAgICAgICBpdCBtdXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25T
Y2FsZSgpIHdoZW4gdGhlIEltYWdlRGF0YSBpcyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6
OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMC0wMS0yMiAgTmlrb3MgTW91Y2h0YXJpcyAgPG5t
b3VjaHRhcmlzQGFwcGxlLmNvbT4KIAogICAgICAgICBBdXRvbWF0aWMgbGluayByZXBsYWNlbWVu
dCB2aWEgIlNtYXJ0IGxpbmtzIiBzaG91bGQgZW1pdCAiaW5zZXJ0TGluayIgaW5wdXQgZXZlbnRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAppbmRleCBlZGExNzE3ZGRmZmQ3ZWIwYmMzZjg3MDJiODI5M2U4OTliZDVjZTdiLi4z
MmVlNWQ0ZjA3OGFkNWM3ZTE4NjQzYTllMjU0ZThmZDI4NWQwNDQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTky
MiwxMyArOTIyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRT
aXplJiBsb2dpY2FsU2l6ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBidWZmZXItPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAw
LCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAg
ICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlv
blJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURh
dGEtPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsK
ICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6
YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0yNzc5LDE5ICsyNzc5LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRB
cnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpKTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBhcnJh
eSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAs
IGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBpZiAoIWFycmF5KSB7CiAgICAg
ICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9
CiAKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKGxv
Z2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIG1ha2VSZWYoKmFycmF5KSk7CisgICAgICAgIGlm
ICghaW1hZ2VEYXRhKSB7CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAg
IGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmlt
YWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShs
b2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwg
bG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0
bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8
Ym9vbD4ob3JpZ2luQ2xlYW4pIH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXAp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5
ZGEzZmZiMjkzZjBhLi5kMmI4ZGI4MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9y
PFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJ
bWFnZURhdGEoZmxvCiB9CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBm
bG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFn
ZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQot
RXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsK
ICAgICBpZiAoIWNhbnZhc0Jhc2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2Fu
dmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4
ICsyMTkxLDggQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsK
IAotICAgIGF1dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
aW1hZ2VEYXRhUmVjdCwgbnVsbHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRl
QXJyYXkpIHsKKyAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAg
aWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsK
ICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFn
ZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNv
bGVNZXNzYWdlLmFwcGVuZE51bWJlcihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3
ICsyMjAzLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0
YTo6Y3JlYXRlKGltYWdlRGF0YVJlY3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQg
ZHkpCkBAIC0yMjE3LDExICsyMjEyLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBm
bG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEo
ZGF0YSwgSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5
WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VC
dWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0
IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQg
ZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5i
dWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwg
SW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4o
ZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0g
ICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3Rl
bSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2lj
YWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJz
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYg
KGRlc3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNl
UmVjdChkZXN0UmVjdCk7CkBAIC0yMjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVy
OjpDbwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgp
LCBkYXRhLmhlaWdodCgpKSk7CiAKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0
KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7
CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgZGF0YSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwog
CiAgICAgZGlkRHJhdyhkZXN0UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9y
ZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNk
ZmM5YzlmY2U1MmJlODg5MmJmNDk4YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1
NDFmYzcyZjRkMzFiZDUxNzczNTA0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICsz
NzEsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52
YXNDb21wb3NpdGVkRHJhd0ltYWdlKFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VE
YXRhPj4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBz
eCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4
LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgs
IGZsb2F0IGRpcnR5SGVpZ2h0KTsKLQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgYm9vbCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3
MjkwOWNiNzFmNzgyOGVmODViYmMuLmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVk
ZTFhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0z
NzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBh
dXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBz
b3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBp
bWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQ
b2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJj
ZVJlY3QpOwogICAgICAgICAgICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0
YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0
NzNlNmE4ODhiYzgwYzE0MTdhZWFjMmZhZi4uZjNlZWU5M2E1MzI1ZTUyZWJmMzNmZmRlNmM2YTY3
MTc1ODc1NmMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcApAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0xMTMsNTEgKzExMywxNCBAQCBWZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAogfQogI2VuZGlmCiAKLSNpZiAhKFVT
RShDRykgfHwgVVNFKERJUkVDVDJEKSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9y
U3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2Up
Ci17Ci0gICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0
aGUgbW9tZW50Ci0gICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJH
QiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RD
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENv
bG9yU3BhY2U6OlNSR0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFj
ZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAy
NTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVu
dChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90
Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZShsaW5lYXJSZ2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNw
YWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKysp
IHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAg
ICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1
NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9
KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwot
ICAgIH0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6
OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKQogewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2lu
dCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkK
KyAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0geyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH07
CisgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAg
ICAgICAgIHJldHVybjsKICAgICAKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRh
LT5kYXRhKCk7CiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXkt
Pmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgdWludDhf
dCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwpAQCAtMTcwLDEzICsx
MzMsNyBAQCBpbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKQogICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCAr
IGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKICAgICAgICAgc3JjUGl4ZWxBcnJh
eS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CiAgICAgfQotICAgIHB1dEJ5dGVBcnJheSgq
c3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBs
dW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBw
bGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5j
ZU1hc2sgaGVyZSBsYXRlci4KLSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwor
ICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KTsKIH0KIAogI2lmICFVU0UoQ0FJUk8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEy
ZjJkOGY2ZTc1NzdlYWZjNmRiMjI5MzA2YjdjZmVkZjliLi43YWJmZTBkMTcxMTQwNmQ5MDhlMDMx
ZDJmNmEwNzFlNDkwYWYxOGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2MuaD4KQEAgLTg0LDM3ICs4Myw0OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3Jl
YXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXpl
TmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVl
ZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0
aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBG
bG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7
CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAor
ICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFn
ZUJ1ZmZlcigpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Q7CisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBmbHVzaENv
bnRleHQoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9m
IHRoZSBiYWNraW5nIHN0b3JlCiAgICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAKKyAgICBzaXplX3Qg
bWVtb3J5Q29zdCgpIGNvbnN0OworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25z
dDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
OworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Cisj
ZWxpZiBVU0UoQ0FJUk8pCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsK
KyNlbmRpZgogCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0KLSAgICBlbnVt
IENvb3JkaW5hdGVTeXN0ZW0geyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3Jl
Q29vcmRpbmF0ZVN5c3RlbSB9OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSBjb25zdDsKLQotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CiAgICAg
Ci0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdU
Rjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
Y29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBj
b25zdDsKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICBzdGF0aWMgTmF0aXZlSW1h
Z2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsK
ICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAorICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwogI2lmICFVU0UoQ0cpCiAgICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsg
fQogICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7CkBAIC0xMjIsNTAgKzEzMiwyMCBAQCBwdWJsaWM6
CiAjZWxzZQogICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSk7IH0KICNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdDsKIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4
dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKKyAgICBW
ZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdDsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Q7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSk7CisgICAgCisgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVt
ZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBv
bmx5IHdvcmsKICAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1h
dCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCk7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQg
d2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVy
LCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhj
b25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25z
dCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNs
YW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBl
ZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZs
b2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBV
U0UoQ0cpCi0gICAgLy8gVGhlIHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRo
ZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwg
Y3JvcCB0aGUgcmVzdWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRp
YyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYg
VVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09N
UHRyPElEMkQxQml0bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAK
LSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1p
bmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0
KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAg
ICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJp
ZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1h
Z2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVu
ZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRp
ZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEJpdG1hcEltYWdlOwotCiBwcml2YXRlOgogICAgIEltYWdlQnVmZmVyRGF0YSBtX2Rh
dGE7CiAgICAgSW50U2l6ZSBtX3NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0
MWY5MzM2NzRkMTguLmM3YWUyZjVkNzNiOTEzOGQ3NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNv
bnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJS
ZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXll
ckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXll
ckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0
LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFy
cmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
Ymx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJh
eSA9IGxheWVyRGF0YS0+ZGF0YSgpOworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5
LT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxh
eWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJB
bmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6
ZSYgdGVtcGxhdGVTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiYmI1YzY0ODJiNmUx
ZDNmMjhhYzQ3OWVhN2M1ZDMxYjFkMzM3OTAyLi4yMjZkM2EzZjNmYjEwYWExZjMxZjA3ODdiZDVm
YWVmZThlZTQ3MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUsOSArMzUsMTEgQEAK
ICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5o
IgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Myw0MSBA
QCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBk
c3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxp
bmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikKKyAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewor
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxV
VCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9
IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJh
eVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAg
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlm
IChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+
JiBsb29rVXBUYWJsZSkKIHsKICAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZl
cnNpb25zIG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTYsMTAgQEAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UKIH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRp
b24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJ
bWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUm
IGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBj
b25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IElu
dFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7Ci0gICAgLy8gVGhl
IGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0
aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsK
KyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAg
ICBhdXRvKiByZXN1bHQgPSBpbWFnZURhdGEgPyBpbWFnZURhdGEtPmRhdGEoKSA6IG51bGxwdHI7
CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00NjksNyAr
NTAwLDcgQEAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWMKIAogICAgIC8vIE5vdGhpbmcgd2lsbCBi
ZSBjb3BpZWQsIHNvIGp1c3QgcmV0dXJuIHRoZSByZXN1bHQuCiAgICAgaWYgKG51bUNvbHVtbnMg
PD0gMCB8fCBudW1Sb3dzIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybiBpbWFnZURhdGE7CiAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNl
IGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCiAgICAgLy8gV2UgbmVlZCB0byBz
ZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1h
Z2VCdWZmZXIuCkBAIC01MTksNTQgKzU1MCwzMSBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpYwog
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2lj
YWxVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1
dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBpbWFnZURhdGE7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0
KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVT
eXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxl
KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBzcmNSZWN0
OworICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IHNyY1JlY3Q7CisgICAgYmFja2luZ1N0
b3JlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgCisgICAgaWYgKG91dHB1dEZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAg
IHJldHVybiBnZXREYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4o
YmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxT
aXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgcmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3Qs
IG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CiB9CiAK
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAordm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9n
aWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRp
bmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5z
aW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5z
aXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1f
c2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIEludFJlY3Qg
bG9naWNhbFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIEludFBvaW50IGxvZ2ljYWxEZXN0
UG9pbnQgPSBkZXN0UG9pbnQ7CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6
ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwg
Y29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2lu
Z1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAg
KnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0
dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihi
YWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNp
emUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KKyAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3Qg
PSBzb3VyY2VSZWN0OworICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGltYWdlRGF0YS5z
aXplKCk7CisgICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwogCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0
IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNp
emUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3Rv
cmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNh
bERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOworICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAK
ICAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNj
YWxlZFNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTYxMyw3ICs2MjEsNyBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaQogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxl
ZFNvdXJjZVNpemUud2lkdGgoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdp
bnggKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5k
YXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewogICAgICAgICB1bnNpZ25lZCogcm93ID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSAr
IGRlc3R5KSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIu
LjZlY2Q5OGE3NmVlNTFjMjNhMjdlYzk3MDRiMzIwY2Y2YTRmNzk1OTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBA
IC0zNzcsNDkgKzM3NywyOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25z
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VE
YXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAK
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNj
YWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNp
emUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZv
cm1hdCwgc2NhbGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
cjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAK
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRh
LmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KKyAg
ICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIEludFBvaW50IHNjYWxlZERl
c3RQb2ludCA9IGRlc3RQb2ludDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKKyAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwog
Ci12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBp
ZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4
dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJ
bnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRl
U3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJj
ZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXpl
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShz
b3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwg
ZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpOworICAgIG1fZGF0YS5wdXREYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNy
Y1JlY3QsIHNjYWxlZERlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKTsKICAgICAKICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1
cmZhY2UgY2FjaGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNl
Q29udGV4dENyZWF0ZUltYWdlKCkuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNz
YXJ5LgpAQCAtNDUyLDMxICs0MzEsMzIgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZm
ZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWIKICAgICBB
U1NFUlQodXRpKTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwogCiAgICAgaWYgKENGRXF1
YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUg
YW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9w
IG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlm
ICghcHJlbXVsdGlwbGllZERhdGEpCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwg
bG9naWNhbFNpemUoKSB9KTsKKyAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNp
emUoKS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1h
Z2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7
Ci0gICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0
ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBu
dWxscHRyKSk7CisgICAgICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
KyAgICAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgp
OworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogcGl4ZWxBcnJheURpbWVuc2lvbnMuYXJl
YSgpLnVuc2FmZUdldCgpOworCisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2go
cGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHBpeGVsQXJy
YXktPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKICAgICAgICAgaWYgKCFkYXRhUHJvdmlk
ZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFz
dCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShwaXhlbEFycmF5RGlt
ZW5zaW9ucy53aWR0aCgpLCBwaXhlbEFycmF5RGltZW5zaW9ucy5oZWlnaHQoKSwgOCwgMzIsIDQg
KiBwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dC
aXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVBy
b3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwogICAg
IH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24g
PT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKICAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZElt
YWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAs
IGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKDAsIGludGVybmFsU2l6ZSgpLndpZHRoKCksIGludGVybmFsU2l6ZSgp
LmhlaWdodCgpLCA4LCA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VS
ZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CiAgICAgICAgIENHQ29udGV4
dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAg
Q0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2lj
YWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOwotICAgICAgICBGbG9h
dFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZSgpOwotICAgICAgICBDR0Nv
bnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNpemVJ
blVzZXJTcGFjZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQoKSksIGltYWdl
LmdldCgpKTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1Jl
Y3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZSgpLndpZHRoKCksIGludGVybmFsU2l6ZSgpLmhlaWdo
dCgpKSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKDAsIDAsIGludGVybmFsU2l6ZSgpLndpZHRoKCksIGludGVybmFsU2l6ZSgpLmhlaWdodCgp
KSwgaW1hZ2UuZ2V0KCkpOwogICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmlu
ZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMuLjY0NjFlNzQ1N2Ix
Y2FjYTZhYTBlMjU0MDk1ZWQ2MTVmMjdkNTE1ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KQEAgLTEyNSwxNyArMTI2LDExIEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1
ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgs
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFn
ZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0
ZVJlbmRlcmluZykgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6Z2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25z
dAogewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAg
ICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAg
aWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
YXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJl
c3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCisgICAgYXV0byBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LnNpemUoKSk7CisgICAgYXV0byogcmVz
dWx0ID0gaW1hZ2VEYXRhID8gaW1hZ2VEYXRhLT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIENoZWNrZWQ8aW50PiBlbmR4
ID0gcmVjdC5tYXhYKCk7CkBAIC0xNzAsMTcgKzE2NSwxNyBAQCBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dAogICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKICAgICAKICAg
ICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAgICAK
ICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVp
bnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsg
ZGVzdHggKiA0OworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0LT5kYXRhKCkgKyBkZXN0
eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKICAgICAKICAgICB1bnNpZ25lZCBzcmNC
eXRlc1BlclJvdzsKICAgICB1aW50OF90KiBzcmNSb3dzOwogICAgIAogICAgIGlmICghYWNjZWxl
cmF0ZVJlbmRlcmluZykgewogICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKIAogICAgICAgICBzcmNCeXRl
c1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwogICAgICAgICBzcmNSb3dzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cg
KyBvcmlnaW54ICogNDsKQEAgLTIwNiw3ICsyMDEsNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dAogICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKICNlbmRpZgogCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAgICAgICAgfQogI2VuZGlmCiAgICAg
ICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKSB7CkBAIC0zMzEsMTAgKzMyNiwxMCBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAog
I2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiAgICAgfQogICAg
IAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAotdm9pZCBJ
bWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKK3ZvaWQg
SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9y
bWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nKQogewogICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAw
KTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwpAQCAtMzY4LDggKzM2Myw4
IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0
IDw9IDApCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9
IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQp
LnVuc2FmZUdldCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIGltYWdlRGF0
YS5zaXplKCkud2lkdGgoKTsKKyAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRh
LmRhdGEoKS0+ZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0
KS51bnNhZmVHZXQoKTsKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgdWludDhf
dCogZGVzdFJvd3M7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRleCAzZTIzNzRiYWQyNGYwNzg3ZmVm
MDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li42YTRmYmYyYWRlNWU4NjBkMzRlMjEzZTFjNDEyZTE1YmRh
YmM1M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKQEAgLTQwLDYgKzQwLDcgQEAgdHlwZWRlZiB1aW50MzJf
dCBDR0JpdG1hcEluZm87CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRh
OwogY2xhc3MgSU9TdXJmYWNlOwogCiBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKQEAgLTU5LDgg
KzYwLDggQEAgc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7CiAjZW5kaWYKIAogICAgIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZv
cm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZyk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUm
LCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OworICAgIHZvaWQgcHV0RGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRT
aXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVk
MDM0MjVhNDdmYzU5NzUuLjk1MTgwMGVkYTkxNzQxMWM4OGI5YTRiZTU1MTRjZjFmNjhjNzg3OTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmls
dGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IApAQCAtMjg2LDEzICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdl
LT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAg
IGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
aW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxBcnJheSkK
KyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlmICghaW1h
Z2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5v
cm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURh
dGEtPmRhdGEoKTsKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRh
LT5zaXplKCk7CiAKKyAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMo
bV92YWx1ZXMpOworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAg
dm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCks
IGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGltYWdl
UmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMjM2
NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZkZGQ4NGVjYi4uMTM5NWEyZGI4NTAzMmM5ZTJh
ZTg2NGM2Mzk2NjY4YjM3NDFjYzMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMjMsOCArMjMs
OCBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTk5LDE0ICs5OSwxNSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1
clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKIAogICAgIC8vIFRPRE86IERpcmVjdCBw
aXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VE
YXRhLgotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50
ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpC
YWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisg
ICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6
ZSgpKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSk7CisgICAgaWYg
KCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxh
eWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNo
YWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwotCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJh
eSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
c2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVyOjpC
YWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0g
aW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQ
aXhlbEFycmF5LT5kYXRhKCksIGltYWdlRGF0YS0+c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5zaXpl
KCkud2lkdGgoKSk7CisgICAgCisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVhKTsK
IAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJh
dG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2ZDRlYzJhOTc5Mjk2NjM4NGZjNTUwNzRhMmY5NzJi
NTkwZmEuLmFlZThiNGZiZGUzOTgzYzQ0ZjU1NDc1OWFhNTY2Y2M4M2E0MjA5NTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVk
QXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmZv
cmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KQogICAgICAgICByZXR1cm47CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogaW1h
Z2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOworICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KTsKICAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LT5kYXRhKCk7CiAgICAgaW50
IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5sZW5ndGgoKTsKIApAQCAtMjY1LDcgKzI2
NSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQogCiBJbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiB7Ci0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1h
Z2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8
ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRl
ckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVy
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIWhhc1Jlc3Vs
dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1
ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAgICBJbnRSZWN0IGRl
c3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAg
ICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBk
ZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwogICAgIGVsc2UKLSAg
ICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlv
blJlY3QpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC00
MzgsNTIgKzQzOCw1MiBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhh
c1Jlc3VsdCgpKTsKICAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1l
KCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5n
IGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
IHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZm
ZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAg
ICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRT
aXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAg
ICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWlu
Z0FscGhhKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIGlucHV0U2l6ZSk7CisgICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhh
KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAgfQotICAgIGNvcHlJ
bWFnZUJ5dGVzKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvbiwgcmVjdCk7
CisgICAgY29weUltYWdlQnl0ZXMoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwg
ZGVzdGluYXRpb24sIHJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRp
cGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAKLSAgICBMT0dfV0lUSF9TVFJF
QU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwg
IiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFn
ZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwg
IiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVy
RWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRp
cGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAgIGlmICghbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVy
c2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VC
dWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwog
ICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRT
aXplKSk7CiAgICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUo
KSk7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChpbnB1dFNpemUuYXJlYSgpICogNCkudW5z
YWZlR2V0KCkpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFn
ZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGlucHV0U2l6ZSk7CisgICAgICAgICAg
ICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcygqbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwogfQogCiBJbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCkBAIC01MTUs
OCArNTE1LDExIEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KCkKICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVH
ZXQoKSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUp
OworICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwog
fQogCiBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQpAQCAtNTMxLDggKzUzNCwxMSBAQCBVaW50OENsYW1wZWRBcnJheSogRmls
dGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIEludFNpemUg
cmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgocmVzdWx0
U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LmdldCgpOworICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1h
Z2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7CisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojp0
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCmluZGV4IGM5NjZmY2MyMTYzOWRlNWE0MDRhN2M2MmYzZWEyYjZlOTMzMmZlNDIuLjBi
NmY1ZDUxMjY2NTQwYjFkNmQxYWI4MjhkODQwNTBmODdlZjc2YzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApA
QCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWx0ZXI7CiBjbGFz
cyBGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsKIAog
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsK
IApAQCAtMTgyLDggKzE4Myw4IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1f
aW5wdXRFZmZlY3RzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX2ltYWdl
QnVmZmVyUmVzdWx0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmNwcAppbmRleCBmZjFiMzk0MTVlYmIyMWJlNmNlZmFjNTkwNmY3ZDQy
NTFiODM1OTNmLi40OWE0YWQwOTc0ZDZjNjE2NDUzMjRjNWU2YjJmMzgxMjJhMDgxMWFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKQEAgLTI1NSwxOCArMjU1LDE1IEBAIHZvaWQg
aW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25l
ZCBieXRlQ291bnQpCiAgICAgfQogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxl
cmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgLyogcmVzb2x1dGlvblNjYWxlICovKSBjb25zdAorUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkgY29uc3QKIHsKLSAgICBhdXRvIG51bUJ5dGVzID0gcmVjdC5hcmVhPFJlY29yZE92ZXJm
bG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOworICAgIGF1dG8gaW1h
Z2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC5zaXplKCkpOworICAgIGF1dG8qIHJlc3Vs
dCA9IGltYWdlRGF0YSA/IGltYWdlRGF0YS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWJpdG1hcCkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKIAogICAgIGlmICgh
cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoZGVzaXJlZEZvcm1hdCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMjkxLDcgKzI4OCw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlCiAg
ICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkp
OwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0K
IAogYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3QKQEAgLTM1NCwyMSArMzUxLDE5
IEBAIGJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3Vy
Y2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8s
IGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdl
RGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgp
ID4gMCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKIAogICAgIENoZWNr
ZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7CiAgICAgQ2hlY2tlZDxpbnQ+IGRlc3R4
ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBk
ZXN0eCAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49
IDApOwogICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7CiAgICAg
QVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKG9yaWdpbngudW5z
YWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGVuZHgg
PSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAg
IGVuZHggKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9
IHNpemUud2lkdGgoKSk7CiAKICAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0Lndp
ZHRoKCk7CkBAIC0zNzYsMTQgKzM3MSwxMiBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0
YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpYwogCiAg
ICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKICAgICBDaGVja2VkPGlu
dD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkp
OwotICAgIGRlc3R5ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBBU1NFUlQoZGVzdHkudW5zYWZl
R2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQo
KSk7CiAgICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKG9y
aWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwogCiAgICAgQ2hlY2tlZDxp
bnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZ
KCkpOwotICAgIGVuZHkgKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR5LnVuc2Fm
ZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNv
dXJjZVJlY3QuaGVpZ2h0KCk7CkBAIC0zOTUsOSArMzg4LDkgQEAgdm9pZCBJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0
aXBsaWMKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGlmIChiaXRtYXApIHsKICAgICAgICAgYXV0
byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NFUlQocGl4
ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7CisgICAgICAgIEFTU0VSVChwaXhl
bFNpemUud2lkdGggPj0gaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpKTsKICAgICAgICAgQVNTRVJU
KHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxT
aXplLmhlaWdodCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKHBpeGVs
U2l6ZS5oZWlnaHQgPj0gaW1hZ2VEYXRhLnNpemUoKS5oZWlnaHQoKSk7CiAgICAgICAgIEFTU0VS
VChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwogICAgIH0KICNlbmRpZgpAQCAt
NDA1LDYgKzM5OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKCFlbnN1cmVC
YWNraW5nU3RvcmUoc2l6ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG96KiBzb3VyY2Ug
PSBpbWFnZURhdGEuZGF0YSgpOwogICAgIGlmIChzb3VyY2VTaXplID09IHNpemUpIHsKICAgICAg
ICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOwog
ICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0
MkQuaAppbmRleCA5Yzk0ZDhhNDgyMmYxMjVmNDA2ZjMwMDc3NDdmZjkzNThjMTU2YTMwLi4wOWNj
NDkzZTFjMmE1YTU2YzJjZWFlZjVjM2EyOWM5NTA0NWQxZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuaApAQCAtNTQsOCArNTQsOCBAQCBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKICAg
ICBlbnVtIGNsYXNzIEJpdG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMsIEJpdG1hcE91dE9mU3luYywg
QnVmZmVyT3V0T2ZTeW5jIH07CiAgICAgbXV0YWJsZSBCaXRtYXBCdWZmZXJTeW5jIGJpdG1hcEJ1
ZmZlclN5bmMgeyBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMgfTsKIAotICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3Jt
YXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJh
dGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgUmVmUHRyPEltYWdlRGF0
YT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2b2lkIHB1dERhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYp
OwogCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVy
VGFyZ2V0Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAppbmRleCBlMDQyMThmMWVmNGY1Nzhj
ZTA3Zjk0YjdhOGVjYmI4MzBhNTI2N2Y5Li5jZmFmMTVlNDdjMjk3MjU2Mjc0M2ZkNzIxNWZkZjU3
NWU0YjUwMjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCkBAIC0yNzgsNDkgKzI3OCwyOCBA
QCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRSZWN0IHNyY1Jl
Y3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBJ
bnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAg
ICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVy
biBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSwgMSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxB
cnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QK
LXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZs
dXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29v
cmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lv
bnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0g
ICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSwgMSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1hdCwgc2Nh
bGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRC
eXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdl
RGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkK
IHsKICAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAgICAgIGZs
dXNoQ29udGV4dCgpOwogCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVj
dDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChj
b29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNj
YWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRT
b3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9CisgICAgSW50UmVjdCBz
Y2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBJbnRSZWN0IHNjYWxlZERlc3RQb2ludCA9IGRl
c3RQb2ludDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAg
ICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgbV9kYXRh
LnB1dERhdGEoc291cmNlLCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNv
dXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpLCAxKTsKKyAgICBtX2RhdGEucHV0RGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VE
YXRhLCBzY2FsZWRTcmNSZWN0LCBzY2FsZWREZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpKTsKIH0K
IAogU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8
ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3NWEw
YmNhZDdkNjc1Li4wNDJkNWRkN2JiODM0ZjFlM2JlYTFhOWUxYTkwMmZlM2RiNmVmZmIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRl
ICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNsdWRl
ICJSYXN0ZXJTaGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFw
ZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xk
LCBjCiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3
SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAot
ICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZl
ci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0
LnNpemUoKSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAgICAgICAg
YXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgp
IH0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5kYXRh
KCkpOworICAgICAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAg
ICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91
ciBieXRlczogUkdCQS4KICAgICAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAsIDEp
ICogMjU1LjBmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388566</attachid>
            <date>2020-01-23 11:28:20 -0800</date>
            <delta_ts>2020-01-27 12:40:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200123112819.patch</filename>
            <type>text/plain</type>
            <size>69685</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJkMjM3OWQ0YzkzNDQ1
NjY2NzA2NmJlNGMwNTY5YTNjNGY1MTcwNS4uMzU4NTRiNGM2ZmE2MTNiNzIyMTIwZGM4MTQxYTFl
NjFjMDMzOGY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAyMC0wMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBtb3ZlIGl0cyBib2R5IHRvIGNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIE1ha2UgdGhlIHByaXZhdGUgZnVuY3Rpb25zIGJlIHB1
YmxpYyBhbmQgcmVtb3ZlIHRoZSBmcmllbmQgY2xhc3Nlcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
Ymx1clNoYWRvd0J1ZmZlcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
bG9naWNhbFVuaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YmFja2luZ1N0b3JlVW5p
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIFdoZW4gY2FsbGluZyBnZXRJbWFnZURhdGEoKSB3
ZSBoYXZlIHRvIHBhc3MgbG9naWNhbCBjb29yZGluYXRlcy4gQnV0IHdoZW4KKyAgICAgICAgd2Ug
bmVlZCB0byBkZWFsIHdpdGggdGhlIEltYWdlRGF0YSBvciB0aGUgTmF0aXZlSW1hZ2VQdHIgd2Ug
aGF2ZSB0byB1c2UKKyAgICAgICAgYmFjay1lbmQgY29vcmRpbmF0ZXMuCisKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1
dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoK
KyAgICAgICAgQWxsIHRoZSByZWN0YW5nbGVzIGFuZCBzaXplcyBoYXZlIHRvIGJlIHBhc3NlZCBp
biBsb2dpY2FsIGNvb3JkaW5hdGVzLiBUbworICAgICAgICBkZWFsIHdpdGggdGhlIHBpeGVscycg
ZGF0YSB3ZSBuZWVkIHRvIHNjYWxlIHRoZW0gYnkgdGhlIHJlc29sdXRpb25TY2FsZSgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICBUaGlzIHdhcyB0aGUgb25seSBwbGFjZSB3aGljaCB3YXMgcGFzc2luZyBhIHJlY3Rhbmds
ZSBpbiBhIHRoZSBiYWNrLWVuZAorICAgICAgICBjb29yZGluYXRlcyBhbG9uZyB3aXRoIEJhY2tp
bmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uIEluc3RlYWQgd2UgY2FuIHBhc3MKKyAgICAgICAgdGhl
IHJlY3RhbmdsZSBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzIGFuZCB0aGVuIHVzZSBJbWFnZURhdGE6
OnNpemUoKSBzaW5jZQorICAgICAgICBpdCBtdXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25T
Y2FsZSgpIHdoZW4gdGhlIEltYWdlRGF0YSBpcyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6
OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMC0wMS0yMiAgTmlrb3MgTW91Y2h0YXJpcyAgPG5t
b3VjaHRhcmlzQGFwcGxlLmNvbT4KIAogICAgICAgICBBdXRvbWF0aWMgbGluayByZXBsYWNlbWVu
dCB2aWEgIlNtYXJ0IGxpbmtzIiBzaG91bGQgZW1pdCAiaW5zZXJ0TGluayIgaW5wdXQgZXZlbnRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAppbmRleCBlZGExNzE3ZGRmZmQ3ZWIwYmMzZjg3MDJiODI5M2U4OTliZDVjZTdiLi4z
MmVlNWQ0ZjA3OGFkNWM3ZTE4NjQzYTllMjU0ZThmZDI4NWQwNDQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTky
MiwxMyArOTIyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRT
aXplJiBsb2dpY2FsU2l6ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBidWZmZXItPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAw
LCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAg
ICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlv
blJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURh
dGEtPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsK
ICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6
YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0yNzc5LDE5ICsyNzc5LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRB
cnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpKTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBhcnJh
eSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAs
IGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBpZiAoIWFycmF5KSB7CiAgICAg
ICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9
CiAKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKGxv
Z2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIG1ha2VSZWYoKmFycmF5KSk7CisgICAgICAgIGlm
ICghaW1hZ2VEYXRhKSB7CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAg
IGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmlt
YWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShs
b2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwg
bG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0
bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8
Ym9vbD4ob3JpZ2luQ2xlYW4pIH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXAp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5
ZGEzZmZiMjkzZjBhLi5kMmI4ZGI4MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9y
PFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJ
bWFnZURhdGEoZmxvCiB9CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBm
bG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFn
ZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQot
RXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsK
ICAgICBpZiAoIWNhbnZhc0Jhc2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2Fu
dmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4
ICsyMTkxLDggQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsK
IAotICAgIGF1dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
aW1hZ2VEYXRhUmVjdCwgbnVsbHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRl
QXJyYXkpIHsKKyAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAg
aWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsK
ICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFn
ZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNv
bGVNZXNzYWdlLmFwcGVuZE51bWJlcihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3
ICsyMjAzLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0
YTo6Y3JlYXRlKGltYWdlRGF0YVJlY3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQg
ZHkpCkBAIC0yMjE3LDExICsyMjEyLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBm
bG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEo
ZGF0YSwgSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5
WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VC
dWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0
IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQg
ZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5i
dWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwg
SW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4o
ZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0g
ICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3Rl
bSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2lj
YWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJz
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYg
KGRlc3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNl
UmVjdChkZXN0UmVjdCk7CkBAIC0yMjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVy
OjpDbwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgp
LCBkYXRhLmhlaWdodCgpKSk7CiAKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0
KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7
CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgZGF0YSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwog
CiAgICAgZGlkRHJhdyhkZXN0UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9y
ZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNk
ZmM5YzlmY2U1MmJlODg5MmJmNDk4YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1
NDFmYzcyZjRkMzFiZDUxNzczNTA0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICsz
NzEsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52
YXNDb21wb3NpdGVkRHJhd0ltYWdlKFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VE
YXRhPj4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBz
eCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4
LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgs
IGZsb2F0IGRpcnR5SGVpZ2h0KTsKLQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgYm9vbCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3
MjkwOWNiNzFmNzgyOGVmODViYmMuLmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVk
ZTFhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0z
NzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBh
dXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBz
b3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBp
bWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQ
b2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJj
ZVJlY3QpOwogICAgICAgICAgICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0
YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0
NzNlNmE4ODhiYzgwYzE0MTdhZWFjMmZhZi4uZjNlZWU5M2E1MzI1ZTUyZWJmMzNmZmRlNmM2YTY3
MTc1ODc1NmMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcApAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0xMTMsNTEgKzExMywxNCBAQCBWZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAogfQogI2VuZGlmCiAKLSNpZiAhKFVT
RShDRykgfHwgVVNFKERJUkVDVDJEKSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9y
U3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2Up
Ci17Ci0gICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0
aGUgbW9tZW50Ci0gICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJH
QiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RD
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENv
bG9yU3BhY2U6OlNSR0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFj
ZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAy
NTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVu
dChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90
Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZShsaW5lYXJSZ2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNw
YWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKysp
IHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAg
ICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1
NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9
KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwot
ICAgIH0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6
OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKQogewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2lu
dCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkK
KyAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0geyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH07
CisgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAg
ICAgICAgIHJldHVybjsKICAgICAKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRh
LT5kYXRhKCk7CiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXkt
Pmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgdWludDhf
dCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwpAQCAtMTcwLDEzICsx
MzMsNyBAQCBpbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKQogICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCAr
IGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKICAgICAgICAgc3JjUGl4ZWxBcnJh
eS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CiAgICAgfQotICAgIHB1dEJ5dGVBcnJheSgq
c3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBs
dW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBw
bGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5j
ZU1hc2sgaGVyZSBsYXRlci4KLSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwor
ICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KTsKIH0KIAogI2lmICFVU0UoQ0FJUk8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEy
ZjJkOGY2ZTc1NzdlYWZjNmRiMjI5MzA2YjdjZmVkZjliLi43YWJmZTBkMTcxMTQwNmQ5MDhlMDMx
ZDJmNmEwNzFlNDkwYWYxOGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2MuaD4KQEAgLTg0LDM3ICs4Myw0OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3Jl
YXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXpl
TmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVl
ZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0
aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBG
bG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7
CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAor
ICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFn
ZUJ1ZmZlcigpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Q7CisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBmbHVzaENv
bnRleHQoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9m
IHRoZSBiYWNraW5nIHN0b3JlCiAgICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAKKyAgICBzaXplX3Qg
bWVtb3J5Q29zdCgpIGNvbnN0OworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25z
dDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
OworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Cisj
ZWxpZiBVU0UoQ0FJUk8pCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsK
KyNlbmRpZgogCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0KLSAgICBlbnVt
IENvb3JkaW5hdGVTeXN0ZW0geyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3Jl
Q29vcmRpbmF0ZVN5c3RlbSB9OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSBjb25zdDsKLQotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CiAgICAg
Ci0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdU
Rjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
Y29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBj
b25zdDsKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICBzdGF0aWMgTmF0aXZlSW1h
Z2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsK
ICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAorICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwogI2lmICFVU0UoQ0cpCiAgICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsg
fQogICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7CkBAIC0xMjIsNTAgKzEzMiwyMCBAQCBwdWJsaWM6
CiAjZWxzZQogICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSk7IH0KICNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdDsKIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4
dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKKyAgICBW
ZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdDsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Q7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSk7CisgICAgCisgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVt
ZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBv
bmx5IHdvcmsKICAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1h
dCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCk7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQg
d2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVy
LCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhj
b25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25z
dCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNs
YW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBl
ZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZs
b2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBV
U0UoQ0cpCi0gICAgLy8gVGhlIHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRo
ZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwg
Y3JvcCB0aGUgcmVzdWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRp
YyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYg
VVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09N
UHRyPElEMkQxQml0bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAK
LSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1p
bmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0
KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAg
ICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJp
ZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1h
Z2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVu
ZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRp
ZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEJpdG1hcEltYWdlOwotCiBwcml2YXRlOgogICAgIEltYWdlQnVmZmVyRGF0YSBtX2Rh
dGE7CiAgICAgSW50U2l6ZSBtX3NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0
MWY5MzM2NzRkMTguLmM3YWUyZjVkNzNiOTEzOGQ3NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNv
bnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJS
ZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXll
ckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXll
ckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0
LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFy
cmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
Ymx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJh
eSA9IGxheWVyRGF0YS0+ZGF0YSgpOworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5
LT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxh
eWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJB
bmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6
ZSYgdGVtcGxhdGVTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiYmI1YzY0ODJiNmUx
ZDNmMjhhYzQ3OWVhN2M1ZDMxYjFkMzM3OTAyLi4yMjZkM2EzZjNmYjEwYWExZjMxZjA3ODdiZDVm
YWVmZThlZTQ3MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUsOSArMzUsMTEgQEAK
ICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5o
IgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Myw0MSBA
QCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBk
c3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxp
bmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikKKyAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewor
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxV
VCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9
IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJh
eVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAg
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlm
IChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+
JiBsb29rVXBUYWJsZSkKIHsKICAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZl
cnNpb25zIG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTYsMTAgQEAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UKIH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRp
b24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJ
bWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUm
IGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBj
b25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IElu
dFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7Ci0gICAgLy8gVGhl
IGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0
aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsK
KyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAg
ICBhdXRvKiByZXN1bHQgPSBpbWFnZURhdGEgPyBpbWFnZURhdGEtPmRhdGEoKSA6IG51bGxwdHI7
CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00NjksNyAr
NTAwLDcgQEAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWMKIAogICAgIC8vIE5vdGhpbmcgd2lsbCBi
ZSBjb3BpZWQsIHNvIGp1c3QgcmV0dXJuIHRoZSByZXN1bHQuCiAgICAgaWYgKG51bUNvbHVtbnMg
PD0gMCB8fCBudW1Sb3dzIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybiBpbWFnZURhdGE7CiAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNl
IGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCiAgICAgLy8gV2UgbmVlZCB0byBz
ZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1h
Z2VCdWZmZXIuCkBAIC01MTksNTQgKzU1MCwzMSBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpYwog
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2lj
YWxVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1
dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBpbWFnZURhdGE7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0
KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVT
eXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxl
KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBzcmNSZWN0
OworICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IHNyY1JlY3Q7CisgICAgYmFja2luZ1N0
b3JlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgCisgICAgaWYgKG91dHB1dEZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAg
IHJldHVybiBnZXREYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4o
YmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxT
aXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgcmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3Qs
IG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CiB9CiAK
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAordm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9n
aWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRp
bmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5z
aW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5z
aXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1f
c2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIEludFJlY3Qg
bG9naWNhbFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIEludFBvaW50IGxvZ2ljYWxEZXN0
UG9pbnQgPSBkZXN0UG9pbnQ7CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6
ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwg
Y29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2lu
Z1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAg
KnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0
dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihi
YWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNp
emUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KKyAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3Qg
PSBzb3VyY2VSZWN0OworICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGltYWdlRGF0YS5z
aXplKCk7CisgICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwogCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0
IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNp
emUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3Rv
cmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNh
bERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOworICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAK
ICAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNj
YWxlZFNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTYxMyw3ICs2MjEsNyBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaQogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxl
ZFNvdXJjZVNpemUud2lkdGgoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdp
bnggKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5k
YXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewogICAgICAgICB1bnNpZ25lZCogcm93ID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSAr
IGRlc3R5KSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIu
LmUzMGQwNjJjZTAxNzY3YTI2NWExZWU2ODdiMWRlYzgyMjU2NGY5NTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBA
IC0zNzcsNDkgKzM3NywyOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25z
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VE
YXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAK
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNj
YWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNp
emUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZv
cm1hdCwgc2NhbGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
cjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAK
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRh
LmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KKyAg
ICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIEludFBvaW50IHNjYWxlZERl
c3RQb2ludCA9IGRlc3RQb2ludDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKKyAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwog
Ci12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBp
ZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4
dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJ
bnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRl
U3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJj
ZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXpl
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShz
b3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwg
ZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpOworICAgIG1fZGF0YS5wdXREYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNy
Y1JlY3QsIHNjYWxlZERlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKTsKICAgICAKICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1
cmZhY2UgY2FjaGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNl
Q29udGV4dENyZWF0ZUltYWdlKCkuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNz
YXJ5LgpAQCAtNDUyLDMxICs0MzEsMzMgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZm
ZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWIKICAgICBB
U1NFUlQodXRpKTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOworICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gcHJvdGVjdGVkUGl4ZWxBcnJheTsKIAogICAgIGlmIChDRkVxdWFsKHV0
aS5nZXQoKSwganBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFs
cGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBi
bGFjay4KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXBy
ZW11bHRpcGxpZWREYXRhKQorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIGxvZ2lj
YWxTaXplKCkgfSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVm
ZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAg
ICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRo
RGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0
cikpOworICAgICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEt
PmRhdGEoKSk7CisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHByb3RlY3RlZFBpeGVsQXJyYXkt
PmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGlt
YWdlRGF0YS0+c2l6ZSgpOworCisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2go
cHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIs
IHByb3RlY3RlZFBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKICAgICAg
ICAgaWYgKCFkYXRhUHJvdmlkZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
ICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCks
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgp
LCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZShwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBwaXhlbEFycmF5RGltZW5zaW9ucy5o
ZWlnaHQoKSwgOCwgMzIsIDQgKiBwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBzUkdCQ29s
b3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5v
bmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50
ZW50RGVmYXVsdCkpOwogICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBw
cmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKICAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGltYWdl
ID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6
ZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5o
ZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYo
KSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIGF1dG8gY29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGludGVybmFsU2l6ZSgpLndpZHRo
KCksIGludGVybmFsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgo
KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7
CiAgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1v
ZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1Jl
Y3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQo
KSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6
ZSgpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFr
ZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFj
ZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChj
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZSgpLndpZHRoKCksIGlu
dGVybmFsU2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZSgpLndpZHRoKCksIGludGVy
bmFsU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwogICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwCmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQy
ZWFiYWMuLjY0NjFlNzQ1N2IxY2FjYTZhYTBlMjU0MDk1ZWQ2MTVmMjdkNTE1ZDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KQEAgLTEyNSwxNyArMTI2LDExIEBAIFZlY3Rv
cjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVu
ZGVyaW5nLCBpbnQgd2lkdGgsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IElt
YWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVy
YXRlUmVuZGVyaW5nKSBjb25zdAogewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJl
Y3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0
RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3Vs
dERhdGEpCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LnNpemUo
KSk7CisgICAgYXV0byogcmVzdWx0ID0gaW1hZ2VEYXRhID8gaW1hZ2VEYXRhLT5kYXRhKCkgOiBu
dWxscHRyOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7CkBAIC0xNzAsMTcgKzE2NSwxNyBAQCBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dAogICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0g
b3JpZ2lueTsKICAgICAKICAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQu
dW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJu
IGltYWdlRGF0YTsKICAgICAKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVj
dC53aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICog
ZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVz
dWx0LT5kYXRhKCkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKICAgICAK
ICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKICAgICB1aW50OF90KiBzcmNSb3dzOwogICAg
IAogICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewogICAgICAgICBpZiAoIWRhdGEpCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsK
IAogICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwogICAg
ICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55
ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKQEAgLTIwNiw3ICsyMDEsNyBAQCBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dAogICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKICNlbmRpZgogCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAgICAg
ICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CkBAIC0zMzEsMTAgKzMyNiwxMCBAQCBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dAogI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCiAgICAgfQogICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGltYWdl
RGF0YTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNv
bnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0
ZVJlbmRlcmluZykKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewogICAgIEFTU0VSVChzb3Vy
Y2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDAp
OwpAQCAtMzY4LDggKzM2Myw4IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKHdp
ZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3Qg
dWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVy
Um93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93ID0gNCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKKyAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1Bl
clJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3c7CiAgICAgdWludDhfdCogZGVzdFJvd3M7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRleCAz
ZTIzNzRiYWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li42YTRmYmYyYWRlNWU4NjBk
MzRlMjEzZTFjNDEyZTE1YmRhYmM1M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKQEAgLTQwLDYgKzQwLDcg
QEAgdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSU9TdXJmYWNlOwogCiBzdHJ1Y3QgSW1hZ2VCdWZm
ZXJEYXRhIHsKQEAgLTU5LDggKzYwLDggQEAgc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7CiAjZW5k
aWYKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZv
aWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50
U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4g
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OworICAg
IHZvaWQgcHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJ
bWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRl
MzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLjk1MTgwMGVkYTkxNzQxMWM4OGI5YTRi
ZTU1MTRjZjFmNjhjNzg3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBA
QAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEzICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0
cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJy
YXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAg
IGlmICghcGl4ZWxBcnJheSkKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJl
Y3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8
ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGF1dG8qIHBp
eGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1l
bnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAKKyAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9
IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBA
IC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFy
cmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1h
Z2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICppbWFnZURhdGEsIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZkZGQ4NGVjYi4u
MTM5NWEyZGI4NTAzMmM5ZTJhZTg2NGM2Mzk2NjY4YjM3NDFjYzMzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93
LmNwcApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTk5LDE0ICs5OSwxNSBAQCB2
b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBTaGFkb3dCbHVy
IGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKIAogICAg
IC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQg
Y29weWluZyB0aGUgSW1hZ2VEYXRhLgotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgp
LCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9
IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxw
dHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKLSAgICBpZiAo
IXNyY1BpeGVsQXJyYXkpCisgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3Vs
dEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdl
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hh
ZG93QXJlYSk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dB
cmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwotCi0gICAgcmVzdWx0
SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50
KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRv
KiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5i
bHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIGltYWdlRGF0YS0+c2l6ZSgpLCA0
ICogaW1hZ2VEYXRhLT5zaXplKCkud2lkdGgoKSk7CisgICAgCisgICAgcmVzdWx0SW1hZ2UtPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VE
YXRhLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4dC5maWxs
UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSks
IG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2ZDRlYzJhOTc5Mjk2
NjM4NGZjNTUwNzRhMmY5NzJiNTkwZmEuLmFlZThiNGZiZGUzOTgzYzQ0ZjU1NDc1OWFhNTY2Y2M4
M2E0MjA5NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKICAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICByZXR1cm47CiAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKTsKICAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5
LT5kYXRhKCk7CiAgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5sZW5ndGgo
KTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNS
ZWN1cnNpdmUoKQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3Vs
dCgpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1
bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhp
cyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1f
aW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAK
ICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI3OSw5
ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgp
CiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAg
ICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5h
dGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJl
Y3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5
KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50
UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpOwogfQogCkBAIC00MzgsNTIgKzQzOCw1MiBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29w
eVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKICAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0o
RmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAi
IDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1
ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIW1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBm
cm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7
Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAg
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwog
ICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAg
ICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkp
OworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3Jl
YXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBj
b3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGlucHV0U2l6ZSk7CisgICAgICAgICAgICBjb3B5VW5w
cmVtdWx0aXBseWluZ0FscGhhKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9
CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBk
ZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMoKm1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAK
LSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8
PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
IDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlz
IDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIg
PDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
KTsKIAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8g
V2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlm
IChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
SW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAg
ICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAgICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChpbnB1dFNp
emUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGlucHV0
U2l6ZSk7CisgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgaW5wdXRTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBjb3B5SW1h
Z2VCeXRlcygqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24s
IHJlY3QpOwogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpCkBAIC01MTUsOCArNTE1LDExIEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAgICBJbnRTaXplIHJlc3Vs
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgocmVzdWx0U2l6ZS5h
cmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQuZ2V0KCk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKHJlc3VsdFNpemUpOworICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpOwogfQogCiBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQpAQCAtNTMxLDggKzUzNCwxMSBAQCBVaW50
OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKQogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkp
OwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgcmV0
dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOworICAgIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7CisgICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
CisgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiB9CiAKIHZv
aWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2UgZHN0
Q29sb3JTcGFjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IGM5NjZmY2MyMTYzOWRlNWE0MDRhN2M2MmYz
ZWEyYjZlOTMzMmZlNDIuLjBiNmY1ZDUxMjY2NTQwYjFkNmQxYWI4MjhkODQwNTBmODdlZjc2YzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2Ns
YXNzIEltYWdlRGF0YTsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZp
bHRlckVmZmVjdFZlY3RvcjsKIApAQCAtMTgyLDggKzE4Myw4IEBAIHByaXZhdGU6CiAgICAgRmls
dGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxJbWFnZURhdGE+
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAppbmRleCBmZjFiMzk0MTVlYmIy
MWJlNmNlZmFjNTkwNmY3ZDQyNTFiODM1OTNmLi40OWE0YWQwOTc0ZDZjNjE2NDUzMjRjNWU2YjJm
MzgxMjJhMDgxMWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKQEAgLTI1NSwx
OCArMjU1LDE1IEBAIHZvaWQgaW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3Qq
IGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCiAgICAgfQogfQogCi1SZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgLyogcmVzb2x1dGlvblNj
YWxlICovKSBjb25zdAorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKLSAgICBhdXRvIG51bUJ5dGVzID0gcmVj
dC5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZs
b3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWlu
dDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0
KCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC5zaXplKCkp
OworICAgIGF1dG8qIHJlc3VsdCA9IGltYWdlRGF0YSA/IGltYWdlRGF0YS0+ZGF0YSgpIDogbnVs
bHB0cjsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBp
ZiAoIWJpdG1hcCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGltYWdl
RGF0YTsKIAogICAgIGlmICghcmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoZGVzaXJlZEZvcm1h
dCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjkxLDcgKzI4OCw3IEBAIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzaXJlCiAgICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRp
b248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCks
IHJlc3VsdC0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIGltYWdlRGF0YTsKIH0KIAogYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJp
dG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3QK
QEAgLTM1NCwyMSArMzUxLDE5IEBAIGJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21C
aXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3ZvaWQgSW1hZ2VCdWZm
ZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQo
c291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkg
PiAwKTsKIAogICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7CiAgICAg
Q2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJj
ZVJlY3QueCgpKTsKLSAgICBkZXN0eCAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJUKGRl
c3R4LnVuc2FmZUdldCgpID49IDApOwogICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA8IHNp
emUud2lkdGgoKSk7CiAgICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAg
QVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCiAgICAg
Q2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNl
UmVjdC5tYXhYKCkpOwotICAgIGVuZHggKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChl
bmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBDaGVja2VkPGludD4gd2lk
dGggPSBzb3VyY2VSZWN0LndpZHRoKCk7CkBAIC0zNzYsMTQgKzM3MSwxMiBAQCB2b2lkIEltYWdl
QnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpYwogCiAgICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0Lnko
KTsKICAgICBDaGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkp
ICsgc291cmNlUmVjdC55KCkpOwotICAgIGRlc3R5ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBB
U1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdl
dCgpIDwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0g
MCk7CiAgICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkp
OwogCiAgICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkp
ICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIGVuZHkgKj0gcmVzb2x1dGlvblNjYWxlOwogICAg
IEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwogCiAgICAgQ2hlY2tl
ZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7CkBAIC0zOTUsOSArMzg4LDkgQEAg
dm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgQWxwaGFQcmVtdWx0aXBsaWMKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGlmIChiaXRt
YXApIHsKICAgICAgICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwot
ICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7Cisg
ICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgp
KTsKICAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwotICAg
ICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gaW1hZ2VEYXRhLnNpemUoKS5oZWlnaHQo
KSk7CiAgICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwog
ICAgIH0KICNlbmRpZgpAQCAtNDA1LDYgKzM5OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpw
dXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGlj
CiAgICAgaWYgKCFlbnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGF1dG96KiBzb3VyY2UgPSBpbWFnZURhdGEuZGF0YSgpOwogICAgIGlmIChzb3VyY2VTaXpl
ID09IHNpemUpIHsKICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBz
b3VyY2UubGVuZ3RoKCkpOwogICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaAppbmRleCA5Yzk0ZDhhNDgyMmYxMjVmNDA2ZjMwMDc3NDdm
ZjkzNThjMTU2YTMwLi4wOWNjNDkzZTFjMmE1YTU2YzJjZWFlZjVjM2EyOWM5NTA0NWQxZDA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEYXRhRGlyZWN0MkQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaApAQCAtNTQsOCArNTQsOCBAQCBzdHJ1Y3QgSW1h
Z2VCdWZmZXJEYXRhIHsKICAgICBlbnVtIGNsYXNzIEJpdG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMs
IEJpdG1hcE91dE9mU3luYywgQnVmZmVyT3V0T2ZTeW5jIH07CiAgICAgbXV0YWJsZSBCaXRtYXBC
dWZmZXJTeW5jIGJpdG1hcEJ1ZmZlclN5bmMgeyBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRP
ZlN5bmMgfTsKIAotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25zdDsKLSAgICB2b2lk
IHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNp
emUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7Cisg
ICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2b2lk
IHB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VE
YXRhJiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgY29uc3QgSW50U2l6ZSYpOwogCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxl
Qml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAppbmRl
eCBlMDQyMThmMWVmNGY1NzhjZTA3Zjk0YjdhOGVjYmI4MzBhNTI2N2Y5Li5jZmFmMTVlNDdjMjk3
MjU2Mjc0M2ZkNzIxNWZkZjU3NWU0YjUwMjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCkBA
IC0yNzgsNDkgKzI3OCwyOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25z
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VE
YXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAK
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNj
YWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNp
emUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSwgMSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0g
cmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAo
cGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNy
Y1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0
KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRh
KG91dHB1dEZvcm1hdCwgc2NhbGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCkpOwogfQogCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3ZvaWQgSW1hZ2VCdWZm
ZXI6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpCiAgICAgICAgIGZsdXNoQ29udGV4dCgpOwogCi0gICAgSW50UmVjdCBzY2FsZWRTb3Vy
Y2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3Vy
Y2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAg
ICB9CisgICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBJbnRSZWN0IHNj
YWxlZERlc3RQb2ludCA9IGRlc3RQb2ludDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKKyAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOwogCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBidWZmZXJGb3JtYXQsIHNjYWxlZFNv
dXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKKyAgICBtX2RhdGEucHV0RGF0YShp
bnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzY2FsZWRTcmNSZWN0LCBzY2FsZWREZXN0UG9pbnQsIGlu
dGVybmFsU2l6ZSgpKTsKIH0KIAogU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiwgT3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5YjQ4
MzU0MjJjNTdhNDFkZGE3NWEwYmNhZDdkNjc1Li4wNDJkNWRkN2JiODM0ZjFlM2JlYTFhOWUxYTkw
MmZlM2RiNmVmZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5Z29u
U2hhcGUuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBAIHN0
ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFn
ZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdl
UmVjdC5zaXplKCkpKTsKIAotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVs
QXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50
UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhl
bEFycmF5KTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgp
LCBpbWFnZVJlY3Quc2l6ZSgpIH0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURhdGEg
JiYgaW1hZ2VEYXRhLT5kYXRhKCkpOworICAgICAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VE
YXRhLT5kYXRhKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFy
cmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8v
IEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KICAgICAgICAgdWludDhfdCBhbHBoYVBp
eGVsVGhyZXNob2xkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0
Pih0aHJlc2hvbGQsIDAsIDEpICogMjU1LjBmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388884</attachid>
            <date>2020-01-27 12:40:28 -0800</date>
            <delta_ts>2020-01-27 13:14:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200127124027.patch</filename>
            <type>text/plain</type>
            <size>78280</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU2ZmE4MGRmNjU1ZTkx
NDFlNzk4OTBhMWNlYjM1MTY3NTQxMjk3OC4uMTc2YmQzNzk4YTk1MjQ5MGRjMDA3MDdiMjc4NjJm
ODA5MDE2MGM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAyMC0wMS0yNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBtb3ZlIGl0cyBib2R5IHRvIGNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIE1ha2UgdGhlIHByaXZhdGUgZnVuY3Rpb25zIGJlIHB1
YmxpYyBhbmQgcmVtb3ZlIHRoZSBmcmllbmQgY2xhc3Nlcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNm
b3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFn
ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bG9naWNhbFVuaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6YmFja2luZ1N0b3JlVW5pdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldElt
YWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0NGRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
RGF0YUNHLmg6CisgICAgICAgIEFsbCB0aGUgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaGF2ZSB0byBi
ZSBwYXNzZWQgaW4gbG9naWNhbCBjb29yZGluYXRlcy4gVG8KKyAgICAgICAgZGVhbCB3aXRoIHRo
ZSBwaXhlbHMnIGRhdGEgd2UgbmVlZCB0byBzY2FsZSB0aGVtIGJ5IHRoZSByZXNvbHV0aW9uU2Nh
bGUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICBUaGlzIHdhcyB0aGUgb25seSBwbGFj
ZSB3aGljaCB3YXMgcGFzc2luZyBhIHJlY3RhbmdsZSBpbiBhIHRoZSBiYWNrLWVuZAorICAgICAg
ICBjb29yZGluYXRlcyBhbG9uZyB3aXRoIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uIElu
c3RlYWQgd2UgY2FuIHBhc3MKKyAgICAgICAgdGhlIHJlY3RhbmdsZSBpbiBsb2dpY2FsIGNvb3Jk
aW5hdGVzIGFuZCB0aGVuIHVzZSBJbWFnZURhdGE6OnNpemUoKSBzaW5jZQorICAgICAgICBpdCBt
dXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25TY2FsZSgpIHdoZW4gdGhlIEltYWdlRGF0YSBp
cyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxp
ZWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFn
ZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3Rl
clNoYXBlKToKKwogMjAyMC0wMS0yNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29t
PgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gQWRkIHN1cHBvcnQgZm9yIHRoZSBvcHRpb25z
IHBhcmFtZXRlciB0byBnZXRBbmltYXRpb25zKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDY4NzRkNWRhY2U3Nzgz
N2JlY2ZjYmY0NDE0NWYzYzlhZTFjMzI1YWUuLmIzZTkxMWI4ZWMxYjUxNzRmNjQzM2M1MjdmOTYz
MDM1NzVjNTM5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTIyLDEzICs5MjIsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5s
b2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2lj
YWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2lu
dDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAg
ICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9y
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsK
KyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0
YSgpLT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSB7
CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25F
cnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3NzksMTkgKzI3NzksMjUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJh
eUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBpZiAoIWlt
YWdlRGF0YSkgeworICAgICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7
CisgICAgICAgIGlmICghYXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwg
YXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAg
ICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxv
YXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAg
ICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9
CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBv
aW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGltYWdl
RGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pIH0p
OwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5ZGEzZmZiMjkzZjBhLi5kMmI4ZGI4
MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiB9CiAKIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFn
ZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxv
YXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jhc2Uo
KS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0IGlt
YWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50ZWQg
YnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4ICsyMTkxLDggQEAgRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFycmF5
ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVsbHB0
ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICBhdXRvIGlt
YWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpIHsKICAg
ICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3Nh
Z2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51bWJl
cihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3ICsyMjAzLDcgQEAgRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVJl
Y3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGltYWdl
RGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHkpCkBAIC0yMjE3LDExICsyMjEy
LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1h
Z2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9h
dCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6Okxv
Z2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRo
LCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAg
SW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1
ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAg
SW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3Qp
OwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmlu
dGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBAIC0y
MjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJlY3Qu
aW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7CiAK
ICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5dGVB
cnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQ
b2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YSwg
c291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwogCiAgICAgZGlkRHJhdyhkZXN0UmVj
dCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBh
bmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJmNDk4
YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1NDFmYzcyZjRkMzFiZDUxNzczNTA0
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICszNzEsNiBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdl
KFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRv
cik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKElt
YWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3
LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGly
dHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsK
LQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBo
YXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGUoKS5o
YXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVD
bGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMu
LmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVkZTFhMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQ
YWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFn
ZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCks
IHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFy
cmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhiYzgwYzE0MTdhZWFj
MmZhZi4uZjNlZWU5M2E1MzI1ZTUyZWJmMzNmZmRlNmM2YTY3MTc1ODc1NmMxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMjgs
OCArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CkBAIC0xMTMsNTEgKzExMywxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdS
QURhdGEoKSBjb25zdAogfQogI2VuZGlmCiAKLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmND
b2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9y
U3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBz
UkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChz
cmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9
IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5l
YXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBs
aW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4g
YXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsK
LSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAg
ICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7
Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAg
IH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7
Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBm
bG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJU
b1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBz
dGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3Jt
VHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8v
IFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQog
ewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7
Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWlu
YW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IGxvZ2ljYWxS
ZWN0ID0geyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH07CisgICAgYXV0byBpbWFnZURhdGEg
PSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBs
b2dpY2FsUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKICAgICAK
KyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+
aXRlbShwaXhlbE9mZnNldCArIDMpOwpAQCAtMTcwLDEzICsxMzMsNyBAQCBpbmxpbmUgdm9pZCBJ
bWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogICAgICAgICBkb3Vi
bGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3Vi
bGUpYSAvIDI1NS4wKTsKICAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsg
MywgbHVtYSk7CiAgICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwg
bHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5j
dGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAg
ICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxS
ZWN0KTsKIH0KIAogI2lmICFVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRiMjI5
MzA2YjdjZmVkZjliLi43YWJmZTBkMTcxMTQwNmQ5MDhlMDMxZDJmNmEwNzFlNDkwYWYxOGFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAg
LTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTg0LDM3ICs4Myw0
OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBj
bGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNr
ZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9h
dFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUo
Y29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVj
dCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHN0YXRpYyBJbnRTaXplIGNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOworICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwogCisgICAgV0VC
Q09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKKyNlbmRp
ZgorCiAgICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCiAg
ICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2lj
YWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0Owor
ICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworI2lmIFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CisjZWxpZiBVU0UoQ0FJUk8pCisgICAg
TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0KLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0geyBM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9Owot
Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwg
Q29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRp
bmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLQotICAgIHZvaWQg
cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0
ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFE
YXRhKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJUk8p
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNpZiBVU0UoQ0cpIHx8
IFVTRShESVJFQ1QyRCkKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJ
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICNlbmRpZgorICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
byk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAorICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNl
TWFzaygpOwogI2lmICFVU0UoQ0cpCiAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQogICAgIHZvaWQgdHJhbnNmb3Jt
Q29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JT
cGFjZSk7CkBAIC0xMjIsNTAgKzEzMiwyMCBAQCBwdWJsaWM6CiAjZWxzZQogICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEs
IDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KICNlbmRp
ZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAotICAgIHNpemVf
dCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0OworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6
bnVsbG9wdCkgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsK
KworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAgdm9p
ZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSk7CisgICAgCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0OwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0
aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3aXRo
IHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUg
dHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7
CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1h
Z2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4K
LSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAg
ICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNp
emUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXpl
JiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhlIHJl
dHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4gSWYg
eW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0LgotICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAg
ICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBzaW5r
SW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQg
Zmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRyYXcoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9pZCBnZW5lcmlj
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNz
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2Vu
ZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwot
CiBwcml2YXRlOgogICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7CiAgICAgSW50U2l6ZSBtX3Np
emU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
CmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0MWY5MzM2NzRkMTguLmM3YWUyZjVk
NzNiOTEzOGQ3NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQog
ICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBs
YXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJS
ZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmx1ckxh
eWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lk
dGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVy
UmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0YSgp
OworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJSZWN0LnNp
emUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1
clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJ
bWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiYmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1ZDMxYjFk
MzM3OTAyLi4yZmQ4ZmIyOTdiZjBlZWUwMmIzZWE0YjgyMDk4YWRmOWZjYTY5NTdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUsOSArMzUsMTEgQEAKICNpbmNsdWRlICJDYWlyb09wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Myw0MSBAQCB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JT
cGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVk
IGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwg
KGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkc3RDb2xv
clNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAg
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0g
aSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENv
bG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7
IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAg
ICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAg
ICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9y
ICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAg
ICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxV
VCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKIHsKICAg
ICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJhdGVk
IGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTYsMTAgQEAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
Y29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UK
IH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEs
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEm
IGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlm
IHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVj
dC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gcmVz
dWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDQzLDcgKzQ3NCw3IEBAIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3Qm
IGxvZ2ljCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKHJlY3QueCgpIDwgMCB8
fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOworICAgICAgICBwaXhlbEFycmF5LT56
ZXJvRmlsbCgpOwogCiAgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKICAgICBpbnQgZGVzdHgg
PSAwOwpAQCAtNDg1LDcgKzUxNiw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljCiAgICAgfQog
CiAgICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVz
dWx0LT5kYXRhKCk7CisgICAgdW5zaWduZWQgY2hhciogZGF0YURzdCA9IHBpeGVsQXJyYXktPmRh
dGEoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGlt
YWdlU3VyZmFjZS5nZXQoKSk7CiAgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJl
Y3Qud2lkdGgoKTsKIApAQCAtNTIyLDUxICs1NTMsMjggQEAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9n
aWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5s
aW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2Fs
ZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVu
aXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
T2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfHwg
cmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQg
cmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBzcmNSZWN0OworICAgIElu
dFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IHNyY1JlY3Q7CisgICAgYmFja2luZ1N0b3JlUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgCisgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIHJldHVybiBn
ZXREYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0
b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jl
c29sdXRpb25TY2FsZSk7CisgICAgcmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwg
bV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CiB9CiAKLVJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCkKIHsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQo
cmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3Qg
YmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAg
ICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0g
ICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9s
b2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIEludFJlY3QgbG9naWNhbFNv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBk
ZXN0UG9pbnQ7CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxB
cnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QK
LXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0
ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVj
dCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9u
U2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJy
YXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldElt
YWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3Rv
cmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLX0KKyAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VS
ZWN0OworICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGltYWdlRGF0YS5zaXplKCk7Cisg
ICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwogCi12b2lkIEltYWdlQnVm
ZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFNv
dXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBiYWNr
aW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0KGRl
c3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJl
Y3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRl
U3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2lu
dCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9u
U2NhbGUpOworICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
ICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKICAgICBBU1NF
UlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNjYWxlZFNvdXJj
ZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTYxMyw3ICs2MjEsNyBAQCB2b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVt
dWx0aXBsaQogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNp
emUud2lkdGgoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0g
c291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0Owor
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG51bVJvd3M7ICsreSkgewogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8dW5zaWduZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSArIGRlc3R5KSk7
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
CmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIuLjkxNjRjNjk5
NTE5N2VjYjNkNTNlZGQzMmJhZTBkMGU0NWZiZjc0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0zNzcsNDkg
KzM3NywyOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRS
ZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1Jl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNp
b25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQot
ICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1hdCwgc2Nh
bGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFy
cmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAor
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmIChjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRS
ZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlE
aW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxT
aXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KKyAgICBJbnRSZWN0
IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIEludFBvaW50IHNjYWxlZERlc3RQb2ludCA9
IGRlc3RQb2ludDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KyAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi12b2lkIElt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0g
ICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNj
YWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNv
dXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50
LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOworICAg
IG1fZGF0YS5wdXREYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNyY1JlY3QsIHNj
YWxlZERlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKTsKICAgICAKICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2Fj
aGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENy
ZWF0ZUltYWdlKCkuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgpAQCAt
NDUyLDE3ICs0MzEsMTkgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWIKICAgICBBU1NFUlQodXRp
KTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gcHJvdGVjdGVkUGl4ZWxBcnJheTsKIAogICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwg
anBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5u
ZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAg
ICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJl
Y3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxp
ZWREYXRhKQorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkg
fSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAq
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRv
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxs
cHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAg
ICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7
CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVkUGl4ZWxBcnJh
eS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJvdGVjdGVkUGl4ZWxB
cnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwogICAgICAgICBpZiAoIWRhdGFQcm92
aWRlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKaW5k
ZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uZmYwYWQwOTljNzE2
YWVmZmViMDQxYjdkZDg4NTAxNmViNjE0ZWRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApAQCAtMjks
NiArMjksNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgpAQCAtMTI1LDIzICsxMjYsMTcgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nKSBjb25zdAorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0
CiB7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAg
IGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBp
ZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChh
cmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVz
dWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0YSkKKyAgICBhdXRvIHJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBwaXhlbEFy
cmF5ID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghcGl4ZWxB
cnJheSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBDaGVja2VkPGludD4gZW5keCA9
IHJlY3QubWF4WCgpOwogICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7CiAgICAg
aWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNp
emUud2lkdGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
cmVzdWx0LT56ZXJvRmlsbCgpOworICAgICAgICBwaXhlbEFycmF5LT56ZXJvRmlsbCgpOwogICAg
IAogICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7CiAgICAgaW50IGRlc3R4ID0gMDsKQEAgLTE3
Myw3ICsxNjgsNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIAogICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRo
KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0
ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBwaXhlbEFycmF5
LT5kYXRhKCkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKICAgICAKICAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKICAgICB1aW50OF90KiBzcmNSb3dzOwpAQCAtMzM0
LDcgKzMyOSw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZykKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewogICAgIEFTU0VSVChzb3VyY2VSZWN0
LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwpAQCAt
MzY4LDggKzM2Myw4IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhf
dCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0g
NCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKKyAgICBjb25zdCB1aW50OF90KiBzcmNSb3dz
ID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyAr
IG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7
CiAgICAgdWludDhfdCogZGVzdFJvd3M7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRleCAzZTIzNzRi
YWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li42YTRmYmYyYWRlNWU4NjBkMzRlMjEz
ZTFjNDEyZTE1YmRhYmM1M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKQEAgLTQwLDYgKzQwLDcgQEAgdHlw
ZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgSW1hZ2VEYXRhOwogY2xhc3MgSU9TdXJmYWNlOwogCiBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRh
IHsKQEAgLTU5LDggKzYwLDggQEAgc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7CiAjZW5kaWYKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0
RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYs
IGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OworICAgIHZvaWQg
cHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggZmQ4ZTVl
OGUyZTk0ZTcwNTQ4OTZmOWFiYmJhN2E0NmY1MDIxNDFjOS4uYzk2ZTMzY2E1ZjYxMzFlNTJlMWU5
ZDQ1ZDdjMDIxNjNkZTRhY2MzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEx
MSw3ICsxMTEsOCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4y
ID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJh
eSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVz
dWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4
ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7CiAg
ICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLjk1MTgw
MGVkYTkxNzQxMWM4OGI5YTRiZTU1MTRjZjFmNjhjNzg3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEzICsyODYsMTUg
QEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJl
Y3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAg
ICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBhdXRvIGltYWdlRGF0YSA9
IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1
cm47CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1
ZXMpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBJbnRT
aXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAKKyAgICBWZWN0
b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIAogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoK
ICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1
bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQo
KSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5
cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCBmYTA0MTNjMDBk
YTQzYWM1ZGY1NWU1ZTAxZjY5NDRhYjllZGE3NDgzLi45NzhjNTVhNjdiOGRlNzIwZTlmYTc5YmQ4
Y2MzNGQ3NDUyOGEwMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTI2
LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Cisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgpAQCAtMTA4LDcgKzEwOCw4IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogaW1hZ2VSZXN1bHQgPSBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZVJlc3VsdCA/IGlt
YWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IGExOWVhMDUzNzU4MTljZWNkYWMyNWQ1
ZDk2M2Q1NDRkZDRkMWE5NjkuLjI2NTQ0MGY0Mzk0MmFmYTZhYTI5OGRhZjRlYzAyZWUzZDk1Y2Vj
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVDb21w
b3NpdGVBcml0aG1ldGljTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFy
cmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjksNyArMjI5LDggQEAgdm9pZCBG
RUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8qIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1
dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOwogICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDYyYzJmODMzNjUzNTg2ODQ0ZDlmMzkw
ZWVhNWVkYzEwOGUzMGEzODguLmE2ZTNmNGJiYWEyNDQ5N2Y5MjYzNDY1Njk3NWZmYjg3ZGM3YWI5
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1
ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zNzEsMTIgKzM3MSwx
MyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVk
QXJyYXkqIHJlc3VsdEltYWdlOworICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2U7CiAgICAgaWYg
KG1fcHJlc2VydmVBbHBoYSkKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1
dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwpAQCAtMzk1LDcgKzM5Niw3IEBAIHZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIFBhaW50aW5nRGF0
YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgICpzcmNQaXhlbEFycmF5LAotICAgICAgICAqcmVz
dWx0SW1hZ2UsCisgICAgICAgICpkc3RQaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lk
dGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAogICAgICAgICBtX2JpYXMgKiAyNTUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDBlOTQ0ZGYwMGE5NWNjMDZkMjZhYTQy
ZjE2OWVlNmE0NmY1YTI3ODIuLjUzNzM1NTA0NTNlNDk4NjJjMGU0MTZmMmRjYzI1NmI0NzBjOTE5
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRB
cnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTQsNyArOTQsOCBAQCB2b2lkIEZF
RGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEFTU0VSVChtX3hD
aGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5l
bFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSog
ZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAg
YXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6
IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0
ZWNiLi4xMzk1YTJkYjg1MDMyYzllMmFlODY0YzYzOTY2NjhiMzc0MWNjMzMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtOTksMTQgKzk5LDE1
IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIFNoYWRv
d0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwog
CiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBh
dm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBv
aW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFy
cmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwg
bnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOwotICAg
IGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwg
cmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0
SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNo
YWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7Ci0KLSAgICBy
ZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50
UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAg
IGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBjb250ZXh0U2hh
ZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXpl
KCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICAKKyAgICByZXN1bHRJbWFn
ZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpp
bWFnZURhdGEsIHNoYWRvd0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0
LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDQ5YmE4NDE3
M2MyZDFhOTk1NGU1NjEzOTBjZTAzYzI0YmM5MGM4MWIuLmE4Y2Y3NDEwYmYxNDgyY2FiMzIyMzFj
NDJiNjk0NTA4MGI4YTQyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC01MjIsMTQgKzUy
MiwxNSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewog
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBl
ZEFycmF5KiByZXN1bHRQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRQaXhlbEFycmF5KQorICAgIGF1dG8qIHJlc3VsdEltYWdlID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CisgICAgaWYg
KCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2Uo
aW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKnJlc3VsdFBpeGVsQXJyYXksIGVmZmVj
dERyYXdpbmdSZWN0KTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKmRzdFBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKIAogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkp
CiAgICAgICAgIHJldHVybjsKQEAgLTU0Myw3ICs1NDQsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KCpyZXN1bHRQaXhlbEFycmF5LCAqdG1wSW1h
Z2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6
ZSk7CisgICAgcGxhdGZvcm1BcHBseSgqZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2Vy
bmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOwogfQogCiBJ
bnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmlu
ZGV4IDBiYTUxYjc2MTJmMmNiMmY2OWY0ZjYwMjFjZWZjYmUzYzJlNzQyZDMuLjg1ZGUxY2QwNTFk
MGMyYzgwOTczNmQ2ZDgyMDgyYzVkYjdkNjM3NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtNDczLDcg
KzQ3Myw4IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRB
cnJheSogcmVzdXRQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
CisgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBhdXRvKiByZXN1dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdl
LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVzdXRQaXhlbEFycmF5KQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCAyNTE3ODFjYTVhYTUxZjc4MDI3YWQ1MDhk
ZjlhYzYxMGM2Nzk0ZmE1Li5jYmQ0MjQxOTc2NTcwYTg3Mzk0NTIwMGE5MTNlMGU5ZTY1OWFiNDI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xv
clV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0yMzQsNyArMjM0LDggQEAgdm9pZCBGRU1vcnBo
b2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFn
ZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAg
IGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAK
aW5kZXggODIyNzg3OWY1Nzg2ZGU2MzUwNTQzNmYxYjQ4MDE3YzBhZGQyOGVmNi4uMTk4MGFiOTM0
ZTU2ODcyYjYyNjQyMWYwMjIxMmU4MmY5OThhMjE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAt
MjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CkBAIC0zOTUsNyArMzk1LDggQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIo
RmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiAKIHZvaWQgRkVUdXJidWxlbmNlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFy
cmF5ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcGl4ZWxB
cnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAg
aWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRl
eCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi5hOWU4ZmNhMmM1ZDFk
Y2JiNjY3YTViN2NjMGQ0Zjc3MDI0ODRmMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNywx
MCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQpAQCAt
MTk5LDcgKzE5OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGll
ZFBpeGVscygpCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAgICBVaW50OENsYW1wZWRBcnJheSogaW1hZ2VBcnJh
eSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAgdWludDhfdCogcGl4
ZWxEYXRhID0gaW1hZ2VBcnJheS0+ZGF0YSgpOwogICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0g
aW1hZ2VBcnJheS0+bGVuZ3RoKCk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZpbHRlckVm
ZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBp
bWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0yNzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6
aW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9p
bnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5
KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQ
b2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBk
ZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDM4LDUyICs0MzgsNTIgQEAgdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdAogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAgICAgCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgp
LiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8
ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0
cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwog
CiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHBy
ZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9p
bWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICghbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBV
aW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXplLmFyZWEo
KSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNpemUpOwor
ICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5w
dXRTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVz
KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsK
IH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NF
UlQoaGFzUmVzdWx0KCkpOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29w
eVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2Ug
YnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7
CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5w
dXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAg
aW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAg
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRT
aXplKTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb3B5UHJlbXVs
dGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5n
QWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
Y29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvbiwg
cmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAtNDk3LDEzICs0OTcsMTAgQEAgSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgRmxv
YXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZl
clJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6
Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywgIkZp
bHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5h
bWUoKSwgdGhpcyk7CiAKQEAgLTUxNSwxMSArNTEyLDExIEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAgICBJbnRTaXpl
IHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXpl
LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgocmVzdWx0
U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVybiBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LmdldCgpOwogfQogCi1VaW50OENsYW1wZWRBcnJheSogRmlsdGVy
RWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZp
bHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKIApAQCAtNTMxLDcgKzUyOCw3IEBAIFVpbnQ4Q2xhbXBl
ZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAg
ICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAg
cmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKChyZXN1bHRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJl
dHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgK
aW5kZXggYzk2NmZjYzIxNjM5ZGU1YTQwNGE3YzYyZjNlYTJiNmU5MzMyZmU0Mi4uYWY0NjNlZmVi
MDEzNmFjNjE4ZTI5OWNkMDhkNDQ4MzhkMGVmNTY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC00MCw2
ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRl
ckVmZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOwogCiB0eXBlZGVm
IFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwogCkBAIC0x
NTMsOCArMTU0LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0ID0gMDsKIAogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJl
c3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKIAogICAg
IC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5
IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQg
ZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTE4Miw4ICsxODMsOCBAQCBw
cml2YXRlOgogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxJ
bWFnZURhdGE+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50UmVjdCBtX2Fi
c29sdXRlUGFpbnRSZWN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKaW5k
ZXggZmYxYjM5NDE1ZWJiMjFiZTZjZWZhYzU5MDZmN2Q0MjUxYjgzNTkzZi4uZWJiNjdjNjQzZWNi
ODkzYTc5MzdkODAyNDM1NzE4NmNiMTY0MjFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0
MkQuY3BwCkBAIC0yNTUsMTQgKzI1NSwxMSBAQCB2b2lkIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBs
aWNhdGlvbih1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQogICAgIH0KIH0K
IAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0
IC8qIHJlc29sdXRpb25TY2FsZSAqLykgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiB7Ci0gICAgYXV0
byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51
bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51
bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBhdXRvIHJlc3VsdCA9
IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0g
cmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghcGl4ZWxBcnJheSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWJpdG1hcCkKQEAgLTM1NCwyMSAr
MzUxLDE5IEBAIGJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRl
ZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJp
bmcgKi8sIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53
aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKIAogICAg
IENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7CiAgICAgQ2hlY2tlZDxpbnQ+
IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsK
LSAgICBkZXN0eCAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdl
dCgpID49IDApOwogICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7
CiAgICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKG9yaWdp
bngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+
IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkp
OwotICAgIGVuZHggKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR4LnVuc2FmZUdl
dCgpIDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VS
ZWN0LndpZHRoKCk7CkBAIC0zNzYsMTQgKzM3MSwxMiBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6
cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxp
YwogCiAgICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKICAgICBDaGVj
a2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVj
dC55KCkpOwotICAgIGRlc3R5ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBBU1NFUlQoZGVzdHku
dW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5o
ZWlnaHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNT
RVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwogCiAgICAgQ2hl
Y2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVj
dC5tYXhZKCkpOwotICAgIGVuZHkgKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR5
LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGhlaWdo
dCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7CkBAIC0zOTUsOSArMzg4LDkgQEAgdm9pZCBJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWMKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGlmIChiaXRtYXApIHsKICAgICAg
ICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NF
UlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7CisgICAgICAgIEFTU0VS
VChwaXhlbFNpemUud2lkdGggPj0gaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpKTsKICAgICAgICAg
QVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQo
cGl4ZWxTaXplLmhlaWdodCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJU
KHBpeGVsU2l6ZS5oZWlnaHQgPj0gaW1hZ2VEYXRhLnNpemUoKS5oZWlnaHQoKSk7CiAgICAgICAg
IEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwogICAgIH0KICNlbmRp
ZgpAQCAtNDA1LDYgKzM5OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKCFl
bnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG96KiBz
b3VyY2UgPSBpbWFnZURhdGEuZGF0YSgpOwogICAgIGlmIChzb3VyY2VTaXplID09IHNpemUpIHsK
ICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3Ro
KCkpOwogICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuaAppbmRleCA5Yzk0ZDhhNDgyMmYxMjVmNDA2ZjMwMDc3NDdmZjkzNThjMTU2YTMw
Li4wOWNjNDkzZTFjMmE1YTU2YzJjZWFlZjVjM2EyOWM5NTA0NWQxZDA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0
MkQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEYXRhRGlyZWN0MkQuaApAQCAtNTQsOCArNTQsOCBAQCBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRh
IHsKICAgICBlbnVtIGNsYXNzIEJpdG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMsIEJpdG1hcE91dE9m
U3luYywgQnVmZmVyT3V0T2ZTeW5jIH07CiAgICAgbXV0YWJsZSBCaXRtYXBCdWZmZXJTeW5jIGJp
dG1hcEJ1ZmZlclN5bmMgeyBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMgfTsKIAot
ICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3Vy
Y2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFj
Y2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2b2lkIHB1dERhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50
U2l6ZSYpOwogCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElEMkQx
UmVuZGVyVGFyZ2V0Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAppbmRleCBlMDQyMThmMWVm
NGY1NzhjZTA3Zjk0YjdhOGVjYmI4MzBhNTI2N2Y5Li5jZmFmMTVlNDdjMjk3MjU2Mjc0M2ZkNzIx
NWZkZjU3NWU0YjUwMjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCkBAIC0yNzgsNDkgKzI3
OCwyOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1
ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRSZWN0
IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29y
ZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1JlY3Qu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25z
KQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAg
IHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSwgMSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6
OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSog
cGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAg
ICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBp
ZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAg
c3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURp
bWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgp
OwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSwgMSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1h
dCwgc2NhbGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkKIHsKICAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAg
ICAgIGZsdXNoQ29udGV4dCgpOwogCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291
cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAg
IGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAg
ICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBz
Y2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9CisgICAgSW50
UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBJbnRSZWN0IHNjYWxlZERlc3RQb2lu
dCA9IGRlc3RQb2ludDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKyAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAg
bV9kYXRhLnB1dERhdGEoc291cmNlLCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNj
YWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKKyAgICBtX2RhdGEucHV0RGF0YShpbnB1dEZvcm1hdCwg
aW1hZ2VEYXRhLCBzY2FsZWRTcmNSZWN0LCBzY2FsZWREZXN0UG9pbnQsIGludGVybmFsU2l6ZSgp
KTsKIH0KIAogU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0
aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFk
ZGE3NWEwYmNhZDdkNjc1Li4wNDJkNWRkN2JiODM0ZjFlM2JlYTFhOWUxYTkwMmZlM2RiNmVmZmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNp
bmNsdWRlICJSYXN0ZXJTaGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0
cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhy
ZXNob2xkLCBjCiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkp
KTsKIAotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFn
ZUJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1h
Z2VSZWN0LnNpemUoKSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAg
ICAgICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Qu
c2l6ZSgpIH0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRh
LT5kYXRhKCkpOworICAgICAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7
CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgo
KTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwg
aXMgZm91ciBieXRlczogUkdCQS4KICAgICAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xk
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQs
IDAsIDEpICogMjU1LjBmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388890</attachid>
            <date>2020-01-27 13:14:58 -0800</date>
            <delta_ts>2020-01-27 16:00:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200127131457.patch</filename>
            <type>text/plain</type>
            <size>78436</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU2ZmE4MGRmNjU1ZTkx
NDFlNzk4OTBhMWNlYjM1MTY3NTQxMjk3OC4uMTc2YmQzNzk4YTk1MjQ5MGRjMDA3MDdiMjc4NjJm
ODA5MDE2MGM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAyMC0wMS0yNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBtb3ZlIGl0cyBib2R5IHRvIGNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIE1ha2UgdGhlIHByaXZhdGUgZnVuY3Rpb25zIGJlIHB1
YmxpYyBhbmQgcmVtb3ZlIHRoZSBmcmllbmQgY2xhc3Nlcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNm
b3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFn
ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bG9naWNhbFVuaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6YmFja2luZ1N0b3JlVW5pdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldElt
YWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0NGRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
RGF0YUNHLmg6CisgICAgICAgIEFsbCB0aGUgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaGF2ZSB0byBi
ZSBwYXNzZWQgaW4gbG9naWNhbCBjb29yZGluYXRlcy4gVG8KKyAgICAgICAgZGVhbCB3aXRoIHRo
ZSBwaXhlbHMnIGRhdGEgd2UgbmVlZCB0byBzY2FsZSB0aGVtIGJ5IHRoZSByZXNvbHV0aW9uU2Nh
bGUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICBUaGlzIHdhcyB0aGUgb25seSBwbGFj
ZSB3aGljaCB3YXMgcGFzc2luZyBhIHJlY3RhbmdsZSBpbiBhIHRoZSBiYWNrLWVuZAorICAgICAg
ICBjb29yZGluYXRlcyBhbG9uZyB3aXRoIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uIElu
c3RlYWQgd2UgY2FuIHBhc3MKKyAgICAgICAgdGhlIHJlY3RhbmdsZSBpbiBsb2dpY2FsIGNvb3Jk
aW5hdGVzIGFuZCB0aGVuIHVzZSBJbWFnZURhdGE6OnNpemUoKSBzaW5jZQorICAgICAgICBpdCBt
dXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25TY2FsZSgpIHdoZW4gdGhlIEltYWdlRGF0YSBp
cyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxp
ZWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFn
ZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3Rl
clNoYXBlKToKKwogMjAyMC0wMS0yNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29t
PgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gQWRkIHN1cHBvcnQgZm9yIHRoZSBvcHRpb25z
IHBhcmFtZXRlciB0byBnZXRBbmltYXRpb25zKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDY4NzRkNWRhY2U3Nzgz
N2JlY2ZjYmY0NDE0NWYzYzlhZTFjMzI1YWUuLmIzZTkxMWI4ZWMxYjUxNzRmNjQzM2M1MjdmOTYz
MDM1NzVjNTM5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTIyLDEzICs5MjIsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5s
b2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2lj
YWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2lu
dDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAg
ICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9y
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsK
KyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0
YSgpLT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSB7
CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25F
cnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3NzksMTkgKzI3NzksMjUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJh
eUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBpZiAoIWlt
YWdlRGF0YSkgeworICAgICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7
CisgICAgICAgIGlmICghYXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwg
YXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAg
ICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxv
YXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAg
ICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9
CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBv
aW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGltYWdl
RGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pIH0p
OwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5ZGEzZmZiMjkzZjBhLi5kMmI4ZGI4
MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiB9CiAKIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFn
ZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxv
YXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jhc2Uo
KS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0IGlt
YWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50ZWQg
YnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4ICsyMTkxLDggQEAgRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFycmF5
ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVsbHB0
ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICBhdXRvIGlt
YWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpIHsKICAg
ICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3Nh
Z2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51bWJl
cihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3ICsyMjAzLDcgQEAgRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVJl
Y3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGltYWdl
RGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHkpCkBAIC0yMjE3LDExICsyMjEy
LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1h
Z2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9h
dCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6Okxv
Z2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRo
LCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAg
SW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1
ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAg
SW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3Qp
OwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmlu
dGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBAIC0y
MjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJlY3Qu
aW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7CiAK
ICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5dGVB
cnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQ
b2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YSwg
c291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwogCiAgICAgZGlkRHJhdyhkZXN0UmVj
dCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBh
bmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJmNDk4
YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1NDFmYzcyZjRkMzFiZDUxNzczNTA0
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICszNzEsNiBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdl
KFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRv
cik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKElt
YWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3
LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGly
dHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsK
LQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBo
YXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGUoKS5o
YXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVD
bGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMu
LmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVkZTFhMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQ
YWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFn
ZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCks
IHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFy
cmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhiYzgwYzE0MTdhZWFj
MmZhZi4uZjNlZWU5M2E1MzI1ZTUyZWJmMzNmZmRlNmM2YTY3MTc1ODc1NmMxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMjgs
OCArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CkBAIC0xMTMsNTEgKzExMywxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdS
QURhdGEoKSBjb25zdAogfQogI2VuZGlmCiAKLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmND
b2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9y
U3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBz
UkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChz
cmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9
IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5l
YXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBs
aW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4g
YXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsK
LSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAg
ICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7
Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAg
IH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7
Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBm
bG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJU
b1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBz
dGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3Jt
VHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8v
IFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQog
ewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7
Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWlu
YW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IGxvZ2ljYWxS
ZWN0ID0geyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH07CisgICAgYXV0byBpbWFnZURhdGEg
PSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBs
b2dpY2FsUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKICAgICAK
KyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+
aXRlbShwaXhlbE9mZnNldCArIDMpOwpAQCAtMTcwLDEzICsxMzMsNyBAQCBpbmxpbmUgdm9pZCBJ
bWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogICAgICAgICBkb3Vi
bGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3Vi
bGUpYSAvIDI1NS4wKTsKICAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsg
MywgbHVtYSk7CiAgICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwg
bHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5j
dGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAg
ICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxS
ZWN0KTsKIH0KIAogI2lmICFVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRiMjI5
MzA2YjdjZmVkZjliLi43YWJmZTBkMTcxMTQwNmQ5MDhlMDMxZDJmNmEwNzFlNDkwYWYxOGFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAg
LTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTg0LDM3ICs4Myw0
OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBj
bGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNr
ZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9h
dFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUo
Y29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVj
dCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHN0YXRpYyBJbnRTaXplIGNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOworICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwogCisgICAgV0VC
Q09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKKyNlbmRp
ZgorCiAgICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCiAg
ICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2lj
YWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0Owor
ICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworI2lmIFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CisjZWxpZiBVU0UoQ0FJUk8pCisgICAg
TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0KLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0geyBM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9Owot
Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwg
Q29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRp
bmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLQotICAgIHZvaWQg
cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0
ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFE
YXRhKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJUk8p
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNpZiBVU0UoQ0cpIHx8
IFVTRShESVJFQ1QyRCkKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJ
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICNlbmRpZgorICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
byk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAorICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNl
TWFzaygpOwogI2lmICFVU0UoQ0cpCiAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQogICAgIHZvaWQgdHJhbnNmb3Jt
Q29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JT
cGFjZSk7CkBAIC0xMjIsNTAgKzEzMiwyMCBAQCBwdWJsaWM6CiAjZWxzZQogICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEs
IDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KICNlbmRp
ZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAotICAgIHNpemVf
dCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0OworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6
bnVsbG9wdCkgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsK
KworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAgdm9p
ZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSk7CisgICAgCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0OwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0
aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3aXRo
IHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUg
dHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7
CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1h
Z2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4K
LSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAg
ICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNp
emUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXpl
JiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhlIHJl
dHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4gSWYg
eW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0LgotICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAg
ICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBzaW5r
SW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQg
Zmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRyYXcoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9pZCBnZW5lcmlj
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNz
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2Vu
ZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwot
CiBwcml2YXRlOgogICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7CiAgICAgSW50U2l6ZSBtX3Np
emU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
CmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0MWY5MzM2NzRkMTguLmM3YWUyZjVk
NzNiOTEzOGQ3NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQog
ICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBs
YXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJS
ZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmx1ckxh
eWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lk
dGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVy
UmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0YSgp
OworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJSZWN0LnNp
emUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1
clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJ
bWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiYmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1ZDMxYjFk
MzM3OTAyLi4yZmQ4ZmIyOTdiZjBlZWUwMmIzZWE0YjgyMDk4YWRmOWZjYTY5NTdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUsOSArMzUsMTEgQEAKICNpbmNsdWRlICJDYWlyb09wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Myw0MSBAQCB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JT
cGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVk
IGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwg
KGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkc3RDb2xv
clNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAg
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0g
aSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENv
bG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7
IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAg
ICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAg
ICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9y
ICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAg
ICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxV
VCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKIHsKICAg
ICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJhdGVk
IGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTYsMTAgQEAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
Y29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UK
IH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEs
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEm
IGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlm
IHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVj
dC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gcmVz
dWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDQzLDcgKzQ3NCw3IEBAIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3Qm
IGxvZ2ljCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKHJlY3QueCgpIDwgMCB8
fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOworICAgICAgICBwaXhlbEFycmF5LT56
ZXJvRmlsbCgpOwogCiAgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKICAgICBpbnQgZGVzdHgg
PSAwOwpAQCAtNDg1LDcgKzUxNiw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljCiAgICAgfQog
CiAgICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVz
dWx0LT5kYXRhKCk7CisgICAgdW5zaWduZWQgY2hhciogZGF0YURzdCA9IHBpeGVsQXJyYXktPmRh
dGEoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGlt
YWdlU3VyZmFjZS5nZXQoKSk7CiAgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJl
Y3Qud2lkdGgoKTsKIApAQCAtNTIyLDUxICs1NTMsMjggQEAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9n
aWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5s
aW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2Fs
ZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVu
aXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
T2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfHwg
cmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQg
cmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBzcmNSZWN0OworICAgIElu
dFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IHNyY1JlY3Q7CisgICAgYmFja2luZ1N0b3JlUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgCisgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIHJldHVybiBn
ZXREYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0
b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jl
c29sdXRpb25TY2FsZSk7CisgICAgcmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwg
bV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CiB9CiAKLVJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCkKIHsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQo
cmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3Qg
YmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAg
ICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0g
ICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9s
b2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIEludFJlY3QgbG9naWNhbFNv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBk
ZXN0UG9pbnQ7CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxB
cnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QK
LXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0
ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVj
dCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9u
U2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJy
YXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldElt
YWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3Rv
cmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLX0KKyAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VS
ZWN0OworICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGltYWdlRGF0YS5zaXplKCk7Cisg
ICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwogCi12b2lkIEltYWdlQnVm
ZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFNv
dXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBiYWNr
aW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0KGRl
c3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJl
Y3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRl
U3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2lu
dCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9u
U2NhbGUpOworICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
ICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKICAgICBBU1NF
UlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNjYWxlZFNvdXJj
ZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTYxMyw3ICs2MjEsNyBAQCB2b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVt
dWx0aXBsaQogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNp
emUud2lkdGgoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0g
c291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0Owor
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG51bVJvd3M7ICsreSkgewogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8dW5zaWduZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSArIGRlc3R5KSk7
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
CmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIuLjkxNjRjNjk5
NTE5N2VjYjNkNTNlZGQzMmJhZTBkMGU0NWZiZjc0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0zNzcsNDkg
KzM3NywyOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRS
ZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1Jl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNp
b25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQot
ICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1hdCwgc2Nh
bGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFy
cmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAor
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmIChjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRS
ZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlE
aW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxT
aXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KKyAgICBJbnRSZWN0
IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIEludFBvaW50IHNjYWxlZERlc3RQb2ludCA9
IGRlc3RQb2ludDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KyAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi12b2lkIElt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0g
ICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNj
YWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNv
dXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50
LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOworICAg
IG1fZGF0YS5wdXREYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNyY1JlY3QsIHNj
YWxlZERlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKTsKICAgICAKICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2Fj
aGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENy
ZWF0ZUltYWdlKCkuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgpAQCAt
NDUyLDE3ICs0MzEsMTkgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWIKICAgICBBU1NFUlQodXRp
KTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gcHJvdGVjdGVkUGl4ZWxBcnJheTsKIAogICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwg
anBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5u
ZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAg
ICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJl
Y3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxp
ZWREYXRhKQorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkg
fSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAq
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRv
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxs
cHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAg
ICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7
CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVkUGl4ZWxBcnJh
eS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJvdGVjdGVkUGl4ZWxB
cnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwogICAgICAgICBpZiAoIWRhdGFQcm92
aWRlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKaW5k
ZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uZmYwYWQwOTljNzE2
YWVmZmViMDQxYjdkZDg4NTAxNmViNjE0ZWRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApAQCAtMjks
NiArMjksNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgpAQCAtMTI1LDIzICsxMjYsMTcgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nKSBjb25zdAorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0
CiB7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAg
IGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBp
ZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChh
cmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVz
dWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0YSkKKyAgICBhdXRvIHJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBwaXhlbEFy
cmF5ID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghcGl4ZWxB
cnJheSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBDaGVja2VkPGludD4gZW5keCA9
IHJlY3QubWF4WCgpOwogICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7CiAgICAg
aWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNp
emUud2lkdGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
cmVzdWx0LT56ZXJvRmlsbCgpOworICAgICAgICBwaXhlbEFycmF5LT56ZXJvRmlsbCgpOwogICAg
IAogICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7CiAgICAgaW50IGRlc3R4ID0gMDsKQEAgLTE3
Myw3ICsxNjgsNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIAogICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRo
KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0
ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBwaXhlbEFycmF5
LT5kYXRhKCkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKICAgICAKICAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKICAgICB1aW50OF90KiBzcmNSb3dzOwpAQCAtMzM0
LDcgKzMyOSw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZykKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewogICAgIEFTU0VSVChzb3VyY2VSZWN0
LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwpAQCAt
MzY4LDggKzM2Myw4IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhf
dCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0g
NCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKKyAgICBjb25zdCB1aW50OF90KiBzcmNSb3dz
ID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyAr
IG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7
CiAgICAgdWludDhfdCogZGVzdFJvd3M7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRleCAzZTIzNzRi
YWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li42YTRmYmYyYWRlNWU4NjBkMzRlMjEz
ZTFjNDEyZTE1YmRhYmM1M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKQEAgLTQwLDYgKzQwLDcgQEAgdHlw
ZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgSW1hZ2VEYXRhOwogY2xhc3MgSU9TdXJmYWNlOwogCiBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRh
IHsKQEAgLTU5LDggKzYwLDggQEAgc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7CiAjZW5kaWYKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0
RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYs
IGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OworICAgIHZvaWQg
cHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggZmQ4ZTVl
OGUyZTk0ZTcwNTQ4OTZmOWFiYmJhN2E0NmY1MDIxNDFjOS4uYzk2ZTMzY2E1ZjYxMzFlNTJlMWU5
ZDQ1ZDdjMDIxNjNkZTRhY2MzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEx
MSw3ICsxMTEsOCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4y
ID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJh
eSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVz
dWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4
ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7CiAg
ICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLjk1MTgw
MGVkYTkxNzQxMWM4OGI5YTRiZTU1MTRjZjFmNjhjNzg3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEzICsyODYsMTUg
QEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJl
Y3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAg
ICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBhdXRvIGltYWdlRGF0YSA9
IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1
cm47CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1
ZXMpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBJbnRT
aXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAKKyAgICBWZWN0
b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIAogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoK
ICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1
bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQo
KSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5
cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCBmYTA0MTNjMDBk
YTQzYWM1ZGY1NWU1ZTAxZjY5NDRhYjllZGE3NDgzLi45NzhjNTVhNjdiOGRlNzIwZTlmYTc5YmQ4
Y2MzNGQ3NDUyOGEwMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTI2
LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Cisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgpAQCAtMTA4LDcgKzEwOCw4IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogaW1hZ2VSZXN1bHQgPSBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZVJlc3VsdCA/IGlt
YWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IGExOWVhMDUzNzU4MTljZWNkYWMyNWQ1
ZDk2M2Q1NDRkZDRkMWE5NjkuLjI2NTQ0MGY0Mzk0MmFmYTZhYTI5OGRhZjRlYzAyZWUzZDk1Y2Vj
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVDb21w
b3NpdGVBcml0aG1ldGljTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFy
cmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjksNyArMjI5LDggQEAgdm9pZCBG
RUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8qIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1
dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOwogICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDYyYzJmODMzNjUzNTg2ODQ0ZDlmMzkw
ZWVhNWVkYzEwOGUzMGEzODguLmE2ZTNmNGJiYWEyNDQ5N2Y5MjYzNDY1Njk3NWZmYjg3ZGM3YWI5
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1
ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zNzEsMTIgKzM3MSwx
MyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVk
QXJyYXkqIHJlc3VsdEltYWdlOworICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2U7CiAgICAgaWYg
KG1fcHJlc2VydmVBbHBoYSkKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1
dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwpAQCAtMzk1LDcgKzM5Niw3IEBAIHZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIFBhaW50aW5nRGF0
YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgICpzcmNQaXhlbEFycmF5LAotICAgICAgICAqcmVz
dWx0SW1hZ2UsCisgICAgICAgICpkc3RQaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lk
dGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAogICAgICAgICBtX2JpYXMgKiAyNTUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDBlOTQ0ZGYwMGE5NWNjMDZkMjZhYTQy
ZjE2OWVlNmE0NmY1YTI3ODIuLjUzNzM1NTA0NTNlNDk4NjJjMGU0MTZmMmRjYzI1NmI0NzBjOTE5
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRB
cnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTQsNyArOTQsOCBAQCB2b2lkIEZF
RGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEFTU0VSVChtX3hD
aGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5l
bFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSog
ZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAg
YXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6
IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0
ZWNiLi4xMzk1YTJkYjg1MDMyYzllMmFlODY0YzYzOTY2NjhiMzc0MWNjMzMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtOTksMTQgKzk5LDE1
IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIFNoYWRv
d0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwog
CiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBh
dm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBv
aW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFy
cmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwg
bnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOwotICAg
IGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwg
cmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0
SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNo
YWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7Ci0KLSAgICBy
ZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50
UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAg
IGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBjb250ZXh0U2hh
ZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXpl
KCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICAKKyAgICByZXN1bHRJbWFn
ZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpp
bWFnZURhdGEsIHNoYWRvd0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0
LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDQ5YmE4NDE3
M2MyZDFhOTk1NGU1NjEzOTBjZTAzYzI0YmM5MGM4MWIuLmE4Y2Y3NDEwYmYxNDgyY2FiMzIyMzFj
NDJiNjk0NTA4MGI4YTQyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC01MjIsMTQgKzUy
MiwxNSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewog
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBl
ZEFycmF5KiByZXN1bHRQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRQaXhlbEFycmF5KQorICAgIGF1dG8qIHJlc3VsdEltYWdlID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CisgICAgaWYg
KCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2Uo
aW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKnJlc3VsdFBpeGVsQXJyYXksIGVmZmVj
dERyYXdpbmdSZWN0KTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKmRzdFBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKIAogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkp
CiAgICAgICAgIHJldHVybjsKQEAgLTU0Myw3ICs1NDQsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KCpyZXN1bHRQaXhlbEFycmF5LCAqdG1wSW1h
Z2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6
ZSk7CisgICAgcGxhdGZvcm1BcHBseSgqZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2Vy
bmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOwogfQogCiBJ
bnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmlu
ZGV4IDBiYTUxYjc2MTJmMmNiMmY2OWY0ZjYwMjFjZWZjYmUzYzJlNzQyZDMuLjZkYjg3ZmQ1NDVh
OGYxZGRhN2Q5YjU4OGEyNTQwNjU1YTU3OGZiMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGRUxpZ2h0
aW5nTkVPTi5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxl
bEpvYnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDczLDcgKzQ3NCw4IEBAIHZvaWQg
RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcmVzdXRQaXhl
bEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBy
ZXN1dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxs
cHRyOwogICAgIGlmICghcmVzdXRQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAppbmRleCAyNTE3ODFjYTVhYTUxZjc4MDI3YWQ1MDhkZjlhYzYxMGM2Nzk0ZmE1
Li5jYmQ0MjQxOTc2NTcwYTg3Mzk0NTIwMGE5MTNlMGU5ZTY1OWFiNDI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVs
Sm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CkBAIC0yMzQsNyArMjM0LDggQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxB
cnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggODIyNzg3OWY1
Nzg2ZGU2MzUwNTQzNmYxYjQ4MDE3YzBhZGQyOGVmNi4uMTk4MGFiOTM0ZTU2ODcyYjYyNjQyMWYw
MjIxMmU4MmY5OThhMjE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMjcsNyArMjcsNyBAQAog
I2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxl
bEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zOTUsNyArMzk1
LDggQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMpCiAKIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogewotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5ID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFwaXhlbEFycmF5
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3
OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi5hOWU4ZmNhMmM1ZDFkY2JiNjY3YTViN2NjMGQ0
Zjc3MDI0ODRmMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNywxMCArMjcsMTAgQEAKICNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQpAQCAtMTk5LDcgKzE5OSw3IEBA
IHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCiAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dC5nZXQoKTsKKyAgICBVaW50OENsYW1wZWRBcnJheSogaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VB
cnJheS0+ZGF0YSgpOwogICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS0+bGVu
Z3RoKCk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKCkKIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJS
ZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRl
ckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVy
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8
IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8
PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkp
OwogCiAgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0y
NzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1
bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVz
dGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRp
b25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVB
cnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3Qs
IEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKTsKIH0KIApAQCAtNDM4LDUyICs0MzgsNTIgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdAogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAgICAgCi0gICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFn
ZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwg
IiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVy
RWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlw
bGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNp
b24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3Vs
dCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUp
KTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
LSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdl
dCgpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6
OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
ICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKICAgICAg
ICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKCptX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAogdm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRS
ZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZl
ciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRh
dGEoKSk7CiAKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAg
IC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAg
ICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAg
ICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsg
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5w
dXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAg
ICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBp
bnB1dFNpemUpOworICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMo
Km1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29w
eUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKQpAQCAtNDk3LDEzICs0OTcsMTAgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgRmxvYXRTaXplIGNsYW1wZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KTsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVk
U2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBt
X3Jlc3VsdENvbG9yU3BhY2UpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAl
cCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CiAK
QEAgLTUxNSwxMSArNTEyLDExIEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0
KS51bnNhZmVHZXQoKSk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0
YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LmdldCgpOwogfQogCi1VaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJF
ZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LCB0aGlzKTsKIApAQCAtNTMxLDcgKzUyOCw3IEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAgICAgSW50U2l6ZSByZXN1
bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChyZXN1bHRTaXpl
LmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVybiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggYzk2NmZjYzIx
NjM5ZGU1YTQwNGE3YzYyZjNlYTJiNmU5MzMyZmU0Mi4uYWY0NjNlZmViMDEzNmFjNjE4ZTI5OWNk
MDhkNDQ4MzhkMGVmNTY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsKIGNsYXNz
IEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8
RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwogCkBAIC0xNTMsOCArMTU0LDggQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0g
MDsKIAogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBJ
bWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRh
KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKIAogICAgIC8vIFJldHVybiB0cnVl
IGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEg
dmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21w
b25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTE4Miw4ICsxODMsOCBAQCBwcml2YXRlOgogICAgIEZp
bHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKaW5kZXggZmYxYjM5NDE1ZWJi
MjFiZTZjZWZhYzU5MDZmN2Q0MjUxYjgzNTkzZi4uZWJiNjdjNjQzZWNiODkzYTc5MzdkODAyNDM1
NzE4NmNiMTY0MjFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCkBAIC0yNTUs
MTQgKzI1NSwxMSBAQCB2b2lkIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbih1aW50OF90
KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBz
aXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25T
Y2FsZSAqLykgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiB7Ci0gICAgYXV0byBudW1CeXRlcyA9IHJl
Y3QuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdl
dCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBhdXRvIHJlc3VsdCA9IEltYWdlRGF0YTo6Y3Jl
YXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gcmVzdWx0ID8gcmVzdWx0
LT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBpZiAoIWJpdG1hcCkKQEAgLTM1NCwyMSArMzUxLDE5IEBAIGJvb2wg
SW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc2lyZWRGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW1hZ2VCdWZm
ZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IHJl
c29sdXRpb25TY2FsZSkKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAg
ICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKIAogICAgIENoZWNrZWQ8aW50PiBv
cmlnaW54ID0gc291cmNlUmVjdC54KCk7CiAgICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNr
ZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBkZXN0eCAqPSBy
ZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwogICAg
IEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7CiAgICAgQVNTRVJUKG9y
aWdpbngudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkg
PD0gc291cmNlUmVjdC5tYXhYKCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tl
ZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIGVuZHggKj0g
cmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lk
dGgoKSk7CiAKICAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7CkBA
IC0zNzYsMTQgKzM3MSwxMiBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpYwogCiAgICAgQ2hlY2tl
ZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKICAgICBDaGVja2VkPGludD4gZGVzdHkg
PSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIGRl
c3R5ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0g
MCk7CiAgICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7CiAgICAg
QVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKG9yaWdpbnkudW5z
YWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGVuZHkg
PSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAg
IGVuZHkgKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9
IHNpemUuaGVpZ2h0KCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3Qu
aGVpZ2h0KCk7CkBAIC0zOTUsOSArMzg4LDkgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERh
dGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWMKICNp
ZiBBU1NFUlRfRU5BQkxFRAogICAgIGlmIChiaXRtYXApIHsKICAgICAgICAgYXV0byBwaXhlbFNp
emUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndp
ZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7CisgICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lk
dGggPj0gaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpKTsKICAgICAgICAgQVNTRVJUKHBpeGVsU2l6
ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdo
dCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWln
aHQgPj0gaW1hZ2VEYXRhLnNpemUoKS5oZWlnaHQoKSk7CiAgICAgICAgIEFTU0VSVChwaXhlbFNp
emUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwogICAgIH0KICNlbmRpZgpAQCAtNDA1LDYgKzM5
OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKCFlbnN1cmVCYWNraW5nU3Rv
cmUoc2l6ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG96KiBzb3VyY2UgPSBpbWFnZURh
dGEuZGF0YSgpOwogICAgIGlmIChzb3VyY2VTaXplID09IHNpemUpIHsKICAgICAgICAgbWVtY3B5
KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOwogICAgICAgICBi
eXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAppbmRl
eCA5Yzk0ZDhhNDgyMmYxMjVmNDA2ZjMwMDc3NDdmZjkzNThjMTU2YTMwLi4wOWNjNDkzZTFjMmE1
YTU2YzJjZWFlZjVjM2EyOWM5NTA0NWQxZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
aApAQCAtNTQsOCArNTQsOCBAQCBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKICAgICBlbnVtIGNs
YXNzIEJpdG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMsIEJpdG1hcE91dE9mU3luYywgQnVmZmVyT3V0
T2ZTeW5jIH07CiAgICAgbXV0YWJsZSBCaXRtYXBCdWZmZXJTeW5jIGJpdG1hcEJ1ZmZlclN5bmMg
eyBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMgfTsKIAotICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0
IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2b2lkIHB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYpOwogCiAgICAg
Q09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0Kik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAppbmRleCBlMDQyMThmMWVmNGY1NzhjZTA3Zjk0Yjdh
OGVjYmI4MzBhNTI2N2Y5Li5jZmFmMTVlNDdjMjk3MjU2Mjc0M2ZkNzIxNWZkZjU3NWU0YjUwMjk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCkBAIC0yNzgsNDkgKzI3OCwyOCBAQCB2b2lkIElt
YWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0
OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQot
ICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBJbnRSZWN0IHNj
YWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEu
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3Qs
IGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7Ci19
Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVu
c2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBp
ZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4
dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5
c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAg
ICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJu
IG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNy
Y1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwg
MSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1hdCwgc2NhbGVkU3JjUmVj
dCwgaW50ZXJuYWxTaXplKCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXko
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBi
dWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29v
cmRpbmF0ZVN5c3RlbSkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBp
ZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAgICAgIGZsdXNoQ29udGV4
dCgpOwogCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJ
bnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRl
U3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJj
ZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXpl
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9CisgICAgSW50UmVjdCBzY2FsZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKKyAgICBJbnRSZWN0IHNjYWxlZERlc3RQb2ludCA9IGRlc3RQb2ludDsK
KyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBzY2FsZWRE
ZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgbV9kYXRhLnB1dERhdGEo
c291cmNlLCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3Qs
IGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpLCAxKTsKKyAgICBtX2RhdGEucHV0RGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzY2Fs
ZWRTcmNSZWN0LCBzY2FsZWREZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpKTsKIH0KIAogU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8ZG91YmxlPiwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3NWEwYmNhZDdkNjc1
Li4wNDJkNWRkN2JiODM0ZjFlM2JlYTFhOWUxYTkwMmZlM2RiNmVmZmIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJMZW5ndGhG
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNsdWRlICJSYXN0ZXJT
aGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6
OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAg
ICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmlt
YWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAgICAgICAgYXV0byBpbWFn
ZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpIH0pOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5kYXRhKCkpOworICAg
ICAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgICAgIHVuc2ln
bmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5z
aWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczog
UkdCQS4KICAgICAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAsIDEpICogMjU1LjBm
KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388931</attachid>
            <date>2020-01-27 16:00:10 -0800</date>
            <delta_ts>2020-02-17 14:09:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200127160009.patch</filename>
            <type>text/plain</type>
            <size>78619</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU2ZmE4MGRmNjU1ZTkx
NDFlNzk4OTBhMWNlYjM1MTY3NTQxMjk3OC4uMTc2YmQzNzk4YTk1MjQ5MGRjMDA3MDdiMjc4NjJm
ODA5MDE2MGM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAyMC0wMS0yNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
KSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGluIG9uZSBmdW5j
dGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBNYWtlIGdldElt
YWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhlIGNhbnZhcyBj
b2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVkIFVpbnQ4Q2xh
bXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5kIGl0IHRvIEph
dmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAgICAgICBtYWtl
IGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0byBiZSBhc3Nv
Y2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGluZyB0aGVtIGRv
ZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUgdGhlIGVudW0g
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBuZWVkIHRvCisg
ICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBjb29yZGluYXRl
cy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFjY29yZGluZyB0
byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAq
IHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIEltYWdlQnVm
ZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJlIG5vdCAKKyAg
ICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBtb3ZlIGl0cyBib2R5IHRvIGNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIE1ha2UgdGhlIHByaXZhdGUgZnVuY3Rpb25zIGJlIHB1
YmxpYyBhbmQgcmVtb3ZlIHRoZSBmcmllbmQgY2xhc3Nlcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNm
b3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFn
ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bG9naWNhbFVuaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6YmFja2luZ1N0b3JlVW5pdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldElt
YWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0NGRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
RGF0YUNHLmg6CisgICAgICAgIEFsbCB0aGUgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaGF2ZSB0byBi
ZSBwYXNzZWQgaW4gbG9naWNhbCBjb29yZGluYXRlcy4gVG8KKyAgICAgICAgZGVhbCB3aXRoIHRo
ZSBwaXhlbHMnIGRhdGEgd2UgbmVlZCB0byBzY2FsZSB0aGVtIGJ5IHRoZSByZXNvbHV0aW9uU2Nh
bGUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICBUaGlzIHdhcyB0aGUgb25seSBwbGFj
ZSB3aGljaCB3YXMgcGFzc2luZyBhIHJlY3RhbmdsZSBpbiBhIHRoZSBiYWNrLWVuZAorICAgICAg
ICBjb29yZGluYXRlcyBhbG9uZyB3aXRoIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uIElu
c3RlYWQgd2UgY2FuIHBhc3MKKyAgICAgICAgdGhlIHJlY3RhbmdsZSBpbiBsb2dpY2FsIGNvb3Jk
aW5hdGVzIGFuZCB0aGVuIHVzZSBJbWFnZURhdGE6OnNpemUoKSBzaW5jZQorICAgICAgICBpdCBt
dXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25TY2FsZSgpIHdoZW4gdGhlIEltYWdlRGF0YSBp
cyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxp
ZWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFn
ZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3Rl
clNoYXBlKToKKwogMjAyMC0wMS0yNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29t
PgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gQWRkIHN1cHBvcnQgZm9yIHRoZSBvcHRpb25z
IHBhcmFtZXRlciB0byBnZXRBbmltYXRpb25zKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDY4NzRkNWRhY2U3Nzgz
N2JlY2ZjYmY0NDE0NWYzYzlhZTFjMzI1YWUuLmIzZTkxMWI4ZWMxYjUxNzRmNjQzM2M1MjdmOTYz
MDM1NzVjNTM5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTIyLDEzICs5MjIsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5s
b2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2lj
YWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2lu
dDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAg
ICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9y
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsK
KyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0
YSgpLT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSB7
CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25F
cnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3NzksMTkgKzI3NzksMjUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJh
eUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBpZiAoIWlt
YWdlRGF0YSkgeworICAgICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7
CisgICAgICAgIGlmICghYXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwg
YXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAg
ICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxv
YXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAg
ICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9
CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBv
aW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGltYWdl
RGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pIH0p
OwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5ZGEzZmZiMjkzZjBhLi5kMmI4ZGI4
MTRkMzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiB9CiAKIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFn
ZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxv
YXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jhc2Uo
KS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0IGlt
YWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50ZWQg
YnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4ICsyMTkxLDggQEAgRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFycmF5
ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVsbHB0
ciwgY29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICBhdXRvIGlt
YWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpIHsKICAg
ICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3Nh
Z2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51bWJl
cihpbWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3ICsyMjAzLDcgQEAgRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVJl
Y3Quc2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGltYWdl
RGF0YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHkpCkBAIC0yMjE3LDExICsyMjEy
LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1h
Z2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9h
dCBkaXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6Okxv
Z2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRo
LCBkaXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAg
SW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1
ZmZlcikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAg
SW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3Qp
OwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmlu
dGVybmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgYnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBAIC0y
MjUzLDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJlY3Qu
aW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7CiAK
ICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5dGVB
cnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQ
b2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YSwg
c291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwogCiAgICAgZGlkRHJhdyhkZXN0UmVj
dCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBh
bmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJmNDk4
YWU2NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1NDFmYzcyZjRkMzFiZDUxNzczNTA0
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICszNzEsNiBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdl
KFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRv
cik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKElt
YWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3
LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGly
dHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsK
LQogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBo
YXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGUoKS5o
YXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVD
bGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMu
LmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVkZTFhMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQ
YWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFn
ZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCks
IHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFy
cmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhiYzgwYzE0MTdhZWFj
MmZhZi4uZjNlZWU5M2E1MzI1ZTUyZWJmMzNmZmRlNmM2YTY3MTc1ODc1NmMxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMjgs
OCArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CkBAIC0xMTMsNTEgKzExMywxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdS
QURhdGEoKSBjb25zdAogfQogI2VuZGlmCiAKLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmND
b2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9y
U3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBz
UkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChz
cmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9
IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5l
YXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBs
aW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4g
YXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsK
LSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAg
ICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7
Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAg
IH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7
Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBm
bG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJU
b1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBz
dGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3Jt
VHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8v
IFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQog
ewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7
Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWlu
YW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IGxvZ2ljYWxS
ZWN0ID0geyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH07CisgICAgYXV0byBpbWFnZURhdGEg
PSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBs
b2dpY2FsUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKICAgICAK
KyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+
aXRlbShwaXhlbE9mZnNldCArIDMpOwpAQCAtMTcwLDEzICsxMzMsNyBAQCBpbmxpbmUgdm9pZCBJ
bWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogICAgICAgICBkb3Vi
bGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3Vi
bGUpYSAvIDI1NS4wKTsKICAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsg
MywgbHVtYSk7CiAgICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwg
bHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5j
dGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAg
ICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxS
ZWN0KTsKIH0KIAogI2lmICFVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRiMjI5
MzA2YjdjZmVkZjliLi43YWJmZTBkMTcxMTQwNmQ5MDhlMDMxZDJmNmEwNzFlNDkwYWYxOGFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAg
LTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTg0LDM3ICs4Myw0
OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBj
bGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNr
ZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9h
dFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUo
Y29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVj
dCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHN0YXRpYyBJbnRTaXplIGNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOworICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwogCisgICAgV0VC
Q09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKKyNlbmRp
ZgorCiAgICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCiAg
ICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2lj
YWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0Owor
ICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworI2lmIFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CisjZWxpZiBVU0UoQ0FJUk8pCisgICAg
TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0KLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0geyBM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9Owot
Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwg
Q29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRp
bmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLQotICAgIHZvaWQg
cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0
ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFE
YXRhKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJUk8p
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKKyNpZiBVU0UoQ0cpIHx8
IFVTRShESVJFQ1QyRCkKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJ
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICNlbmRpZgorICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
byk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAorICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNl
TWFzaygpOwogI2lmICFVU0UoQ0cpCiAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQogICAgIHZvaWQgdHJhbnNmb3Jt
Q29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JT
cGFjZSk7CkBAIC0xMjIsNTAgKzEzMiwyMCBAQCBwdWJsaWM6CiAjZWxzZQogICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEs
IDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KICNlbmRp
ZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAotICAgIHNpemVf
dCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0OworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6
bnVsbG9wdCkgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsK
KworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAgdm9p
ZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSk7CisgICAgCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0OwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0
aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3aXRo
IHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUg
dHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7
CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1h
Z2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4K
LSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAg
ICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNp
emUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXpl
JiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhlIHJl
dHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4gSWYg
eW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0LgotICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAg
ICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBzaW5r
SW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQg
Zmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRyYXcoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9pZCBnZW5lcmlj
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNz
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2Vu
ZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwot
CiBwcml2YXRlOgogICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7CiAgICAgSW50U2l6ZSBtX3Np
emU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
CmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0MWY5MzM2NzRkMTguLmM3YWUyZjVk
NzNiOTEzOGQ3NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQog
ICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBs
YXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJS
ZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmx1ckxh
eWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lk
dGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVy
UmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0YSgp
OworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJSZWN0LnNp
emUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1
clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJ
bWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiYmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1ZDMxYjFk
MzM3OTAyLi4yZmQ4ZmIyOTdiZjBlZWUwMmIzZWE0YjgyMDk4YWRmOWZjYTY5NTdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUsOSArMzUsMTEgQEAKICNpbmNsdWRlICJDYWlyb09wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiUGF0dGVybi5oIgpAQCAtMzgxLDYgKzM4Myw0MSBAQCB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlYwogICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JT
cGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVk
IGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwg
KGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkc3RDb2xv
clNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAg
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0g
aSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENv
bG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7
IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAg
ICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAg
ICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9y
ICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAg
ICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxV
VCk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKIHsKICAg
ICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJhdGVk
IGNhbnZhc2VzLgpAQCAtNDE5LDE2ICs0NTYsMTAgQEAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
Y29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UK
IH0KIAogdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEs
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpCitSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEm
IGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlm
IHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVj
dC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gcmVz
dWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDQzLDcgKzQ3NCw3IEBAIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3Qm
IGxvZ2ljCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKHJlY3QueCgpIDwgMCB8
fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOworICAgICAgICBwaXhlbEFycmF5LT56
ZXJvRmlsbCgpOwogCiAgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKICAgICBpbnQgZGVzdHgg
PSAwOwpAQCAtNDg1LDcgKzUxNiw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljCiAgICAgfQog
CiAgICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVz
dWx0LT5kYXRhKCk7CisgICAgdW5zaWduZWQgY2hhciogZGF0YURzdCA9IHBpeGVsQXJyYXktPmRh
dGEoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGlt
YWdlU3VyZmFjZS5nZXQoKSk7CiAgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJl
Y3Qud2lkdGgoKTsKIApAQCAtNTIyLDUxICs1NTMsMjggQEAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9n
aWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5s
aW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2Fs
ZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVu
aXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
T2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfHwg
cmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQg
cmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBzcmNSZWN0OworICAgIElu
dFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IHNyY1JlY3Q7CisgICAgYmFja2luZ1N0b3JlUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgCisgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIHJldHVybiBn
ZXREYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0
b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jl
c29sdXRpb25TY2FsZSk7CisgICAgcmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwg
bV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7CiB9CiAKLVJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCkKIHsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQo
cmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3Qg
YmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAg
ICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0g
ICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9s
b2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQorICAgIEludFJlY3QgbG9naWNhbFNv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBk
ZXN0UG9pbnQ7CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxB
cnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QK
LXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0
ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVj
dCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9u
U2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJy
YXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldElt
YWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3Rv
cmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLX0KKyAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VS
ZWN0OworICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGltYWdlRGF0YS5zaXplKCk7Cisg
ICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwogCi12b2lkIEltYWdlQnVm
ZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFNv
dXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBiYWNr
aW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0KGRl
c3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJl
Y3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRl
U3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2lu
dCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9u
U2NhbGUpOworICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
ICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CiAKICAgICBBU1NF
UlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNjYWxlZFNvdXJj
ZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTYxMyw3ICs2MjEsNyBAQCB2b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVt
dWx0aXBsaQogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNp
emUud2lkdGgoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0g
c291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0Owor
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG51bVJvd3M7ICsreSkgewogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8dW5zaWduZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSArIGRlc3R5KSk7
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
CmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIuLjkxNjRjNjk5
NTE5N2VjYjNkNTNlZGQzMmJhZTBkMGU0NWZiZjc0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0zNzcsNDkg
KzM3NywyOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRS
ZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKyAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1Jl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNp
b25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQot
ICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1hdCwgc2Nh
bGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKTsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFy
cmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAor
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmIChjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRS
ZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlE
aW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxT
aXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KKyAgICBJbnRSZWN0
IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIEludFBvaW50IHNjYWxlZERlc3RQb2ludCA9
IGRlc3RQb2ludDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KyAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi12b2lkIElt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0g
ICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNj
YWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNv
dXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50
LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOworICAg
IG1fZGF0YS5wdXREYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNyY1JlY3QsIHNj
YWxlZERlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKTsKICAgICAKICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2Fj
aGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENy
ZWF0ZUltYWdlKCkuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgpAQCAt
NDUyLDE3ICs0MzEsMTkgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWIKICAgICBBU1NFUlQodXRp
KTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gcHJvdGVjdGVkUGl4ZWxBcnJheTsKIAogICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwg
anBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5u
ZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAg
ICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJl
Y3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxp
ZWREYXRhKQorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkg
fSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAq
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRv
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxs
cHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAg
ICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7
CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVkUGl4ZWxBcnJh
eS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJvdGVjdGVkUGl4ZWxB
cnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwogICAgICAgICBpZiAoIWRhdGFQcm92
aWRlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKaW5k
ZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uZmYwYWQwOTljNzE2
YWVmZmViMDQxYjdkZDg4NTAxNmViNjE0ZWRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApAQCAtMjks
NiArMjksNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgpAQCAtMTI1LDIzICsxMjYsMTcgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nKSBjb25zdAorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0
CiB7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAg
IGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBp
ZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChh
cmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVz
dWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0YSkKKyAgICBhdXRvIHJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBwaXhlbEFy
cmF5ID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghcGl4ZWxB
cnJheSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBDaGVja2VkPGludD4gZW5keCA9
IHJlY3QubWF4WCgpOwogICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7CiAgICAg
aWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNp
emUud2lkdGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
cmVzdWx0LT56ZXJvRmlsbCgpOworICAgICAgICBwaXhlbEFycmF5LT56ZXJvRmlsbCgpOwogICAg
IAogICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7CiAgICAgaW50IGRlc3R4ID0gMDsKQEAgLTE3
Myw3ICsxNjgsNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIAogICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRo
KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0
ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBwaXhlbEFycmF5
LT5kYXRhKCkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKICAgICAKICAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKICAgICB1aW50OF90KiBzcmNSb3dzOwpAQCAtMzM0
LDcgKzMyOSw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZykKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewogICAgIEFTU0VSVChzb3VyY2VSZWN0
LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwpAQCAt
MzY4LDggKzM2Myw4IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhf
dCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0g
NCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKKyAgICBjb25zdCB1aW50OF90KiBzcmNSb3dz
ID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyAr
IG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7
CiAgICAgdWludDhfdCogZGVzdFJvd3M7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRleCAzZTIzNzRi
YWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li42YTRmYmYyYWRlNWU4NjBkMzRlMjEz
ZTFjNDEyZTE1YmRhYmM1M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKQEAgLTQwLDYgKzQwLDcgQEAgdHlw
ZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgSW1hZ2VEYXRhOwogY2xhc3MgSU9TdXJmYWNlOwogCiBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRh
IHsKQEAgLTU5LDggKzYwLDggQEAgc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7CiAjZW5kaWYKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0
RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYs
IGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OworICAgIHZvaWQg
cHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggZmQ4ZTVl
OGUyZTk0ZTcwNTQ4OTZmOWFiYmJhN2E0NmY1MDIxNDFjOS4uYzk2ZTMzY2E1ZjYxMzFlNTJlMWU5
ZDQ1ZDdjMDIxNjNkZTRhY2MzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEx
MSw3ICsxMTEsOCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4y
ID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJh
eSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVz
dWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4
ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7CiAg
ICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLjk1MTgw
MGVkYTkxNzQxMWM4OGI5YTRiZTU1MTRjZjFmNjhjNzg3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEzICsyODYsMTUg
QEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJl
Y3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAg
ICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBhdXRvIGltYWdlRGF0YSA9
IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1
cm47CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1
ZXMpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBJbnRT
aXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAKKyAgICBWZWN0
b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIAogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoK
ICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1
bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQo
KSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5
cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCBmYTA0MTNjMDBk
YTQzYWM1ZGY1NWU1ZTAxZjY5NDRhYjllZGE3NDgzLi45NzhjNTVhNjdiOGRlNzIwZTlmYTc5YmQ4
Y2MzNGQ3NDUyOGEwMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTI2
LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Cisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgpAQCAtMTA4LDcgKzEwOCw4IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogaW1hZ2VSZXN1bHQgPSBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZVJlc3VsdCA/IGlt
YWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IGExOWVhMDUzNzU4MTljZWNkYWMyNWQ1
ZDk2M2Q1NDRkZDRkMWE5NjkuLjI2NTQ0MGY0Mzk0MmFmYTZhYTI5OGRhZjRlYzAyZWUzZDk1Y2Vj
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVDb21w
b3NpdGVBcml0aG1ldGljTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFy
cmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjksNyArMjI5LDggQEAgdm9pZCBG
RUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8qIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1
dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOwogICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDYyYzJmODMzNjUzNTg2ODQ0ZDlmMzkw
ZWVhNWVkYzEwOGUzMGEzODguLmE2ZTNmNGJiYWEyNDQ5N2Y5MjYzNDY1Njk3NWZmYjg3ZGM3YWI5
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1
ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zNzEsMTIgKzM3MSwx
MyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVk
QXJyYXkqIHJlc3VsdEltYWdlOworICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2U7CiAgICAgaWYg
KG1fcHJlc2VydmVBbHBoYSkKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1
dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwpAQCAtMzk1LDcgKzM5Niw3IEBAIHZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIFBhaW50aW5nRGF0
YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgICpzcmNQaXhlbEFycmF5LAotICAgICAgICAqcmVz
dWx0SW1hZ2UsCisgICAgICAgICpkc3RQaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lk
dGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAogICAgICAgICBtX2JpYXMgKiAyNTUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDBlOTQ0ZGYwMGE5NWNjMDZkMjZhYTQy
ZjE2OWVlNmE0NmY1YTI3ODIuLjUzNzM1NTA0NTNlNDk4NjJjMGU0MTZmMmRjYzI1NmI0NzBjOTE5
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRB
cnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTQsNyArOTQsOCBAQCB2b2lkIEZF
RGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEFTU0VSVChtX3hD
aGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5l
bFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSog
ZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAg
YXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6
IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0
ZWNiLi4xMzk1YTJkYjg1MDMyYzllMmFlODY0YzYzOTY2NjhiMzc0MWNjMzMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtOTksMTQgKzk5LDE1
IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIFNoYWRv
d0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwog
CiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBh
dm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBv
aW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFy
cmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwg
bnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOwotICAg
IGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwg
cmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0
SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNo
YWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7Ci0KLSAgICBy
ZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50
UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAg
IGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBjb250ZXh0U2hh
ZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXpl
KCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICAKKyAgICByZXN1bHRJbWFn
ZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpp
bWFnZURhdGEsIHNoYWRvd0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0
LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDQ5YmE4NDE3
M2MyZDFhOTk1NGU1NjEzOTBjZTAzYzI0YmM5MGM4MWIuLmQ3ZWQ5YjI0NDkwMTc4ZmZiZmJlYjFj
ZDQyYmVhNWU4ZmYxNTllNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCkBA
IC01MjIsMTQgKzUyMywxNSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1bHRQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRQaXhlbEFycmF5KQorICAgIGF1dG8qIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byog
ZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxw
dHI7CisgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJ
c0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKnJlc3VsdFBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1
bHQoKmRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKIAogICAgIGlmICghbV9zdGRY
ICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKQEAgLTU0Myw3ICs1NDUsNyBAQCB2b2lkIEZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICghdG1wSW1hZ2VE
YXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KCpyZXN1bHRQaXhlbEFy
cmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0
KCksIHBhaW50U2l6ZSk7CisgICAgcGxhdGZvcm1BcHBseSgqZHN0UGl4ZWxBcnJheSwgKnRtcElt
YWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNp
emUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwCmluZGV4IDBiYTUxYjc2MTJmMmNiMmY2OWY0ZjYwMjFjZWZjYmUzYzJlNzQyZDMu
LjZkYjg3ZmQ1NDVhOGYxZGRhN2Q5YjU4OGEyNTQwNjU1YTU3OGZiMjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJGRUxpZ2h0aW5nTkVPTi5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
PHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDczLDcgKzQ3
NCw4IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJh
eSogcmVzdXRQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICBhdXRvKiByZXN1dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5k
YXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVzdXRQaXhlbEFycmF5KQogICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCAyNTE3ODFjYTVhYTUxZjc4MDI3YWQ1MDhkZjlh
YzYxMGM2Nzk0ZmE1Li5jYmQ0MjQxOTc2NTcwYTg3Mzk0NTIwMGE5MTNlMGU5ZTY1OWFiNDI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvclV0
aWxpdGllcy5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8
d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0yMzQsNyArMjM0LDggQEAgdm9pZCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJy
YXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlm
ICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5k
ZXggODIyNzg3OWY1Nzg2ZGU2MzUwNTQzNmYxYjQ4MDE3YzBhZGQyOGVmNi4uMTk4MGFiOTM0ZTU2
ODcyYjYyNjQyMWYwMjIxMmU4MmY5OThhMjE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMjcs
NyArMjcsNyBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBA
IC0zOTUsNyArMzk1LDggQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmls
bFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiAKIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5
ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFn
ZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYg
KCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2
ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi5hOWU4ZmNhMmM1ZDFkY2Ji
NjY3YTViN2NjMGQ0Zjc3MDI0ODRmMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNywxMCAr
MjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQpAQCAtMTk5
LDcgKzE5OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAgICBVaW50OENsYW1wZWRBcnJheSogaW1hZ2VBcnJheSA9
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAgdWludDhfdCogcGl4ZWxE
YXRhID0gaW1hZ2VBcnJheS0+ZGF0YSgpOwogICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1h
Z2VBcnJheS0+bGVuZ3RoKCk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6
aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAi
IGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1l
KCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFn
ZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0yNzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1h
Z2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2lu
dCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1
bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0
aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5w
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDM4LDUyICs0MzgsNTIgQEAgdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdAogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAgICAgCi0gICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmls
dGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBF
eGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAi
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIg
Y29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAg
ICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZl
ciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFn
ZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAq
IDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAg
ICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRT
aXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKCpt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0K
IAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQo
aGFzUmVzdWx0KCkpOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAi
RmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1
ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUo
KSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5n
IGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVm
ZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAg
ICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5w
dXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAg
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXpl
KTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb3B5UHJlbXVsdGlw
bHlpbmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxw
aGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29w
eUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvbiwgcmVj
dCk7CisgICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAtNDk3LDEzICs0OTcsMTAgQEAgSW1hZ2VCdWZm
ZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgRmxvYXRT
aXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKTsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywgIkZpbHRl
ckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUo
KSwgdGhpcyk7CiAKQEAgLTUxNSwxMSArNTEyLDExIEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAgICBJbnRTaXplIHJl
c3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXplLnNj
YWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgocmVzdWx0U2l6
ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVybiBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0LmdldCgpOwogfQogCi1VaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZm
ZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZpbHRl
cnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Iiwg
ZmlsdGVyTmFtZSgpLCB0aGlzKTsKIApAQCAtNTMxLDcgKzUyOCw3IEBAIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAgICAg
SW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NF
UlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVz
dWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KChyZXN1bHRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVy
biBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5k
ZXggYzk2NmZjYzIxNjM5ZGU1YTQwNGE3YzYyZjNlYTJiNmU5MzMyZmU0Mi4uYWY0NjNlZmViMDEz
NmFjNjE4ZTI5OWNkMDhkNDQ4MzhkMGVmNTY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC00MCw2ICs0
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVm
ZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOwogCiB0eXBlZGVmIFZl
Y3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwogCkBAIC0xNTMs
OCArMTU0LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0ID0gMDsKIAogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKIAogICAgIC8v
IFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9u
IHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFj
aCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTE4Miw4ICsxODMsOCBAQCBwcml2
YXRlOgogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxJbWFn
ZURhdGE+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50UmVjdCBtX2Fic29s
dXRlUGFpbnRSZWN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKaW5kZXgg
ZmYxYjM5NDE1ZWJiMjFiZTZjZWZhYzU5MDZmN2Q0MjUxYjgzNTkzZi4uZWJiNjdjNjQzZWNiODkz
YTc5MzdkODAyNDM1NzE4NmNiMTY0MjFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
Y3BwCkBAIC0yNTUsMTQgKzI1NSwxMSBAQCB2b2lkIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNh
dGlvbih1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQogICAgIH0KIH0KIAot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8q
IHJlc29sdXRpb25TY2FsZSAqLykgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVy
RGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiB7Ci0gICAgYXV0byBu
dW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5
dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5
dGVzLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBhdXRvIHJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gcmVz
dWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghcGl4ZWxBcnJheSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWJpdG1hcCkKQEAgLTM1NCwyMSArMzUx
LDE5IEBAIGJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcg
Ki8sIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGlt
YWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0
aCgpID4gMCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKIAogICAgIENo
ZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7CiAgICAgQ2hlY2tlZDxpbnQ+IGRl
c3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAg
ICBkZXN0eCAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgp
ID49IDApOwogICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7CiAg
ICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKG9yaWdpbngu
dW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGVu
ZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwot
ICAgIGVuZHggKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgp
IDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0
LndpZHRoKCk7CkBAIC0zNzYsMTQgKzM3MSwxMiBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0
RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpYwog
CiAgICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKICAgICBDaGVja2Vk
PGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55
KCkpOwotICAgIGRlc3R5ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBBU1NFUlQoZGVzdHkudW5z
YWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWln
aHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7CiAgICAgQVNTRVJU
KG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwogCiAgICAgQ2hlY2tl
ZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5t
YXhZKCkpOwotICAgIGVuZHkgKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChlbmR5LnVu
c2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9
IHNvdXJjZVJlY3QuaGVpZ2h0KCk7CkBAIC0zOTUsOSArMzg4LDkgQEAgdm9pZCBJbWFnZUJ1ZmZl
ckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVt
dWx0aXBsaWMKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGlmIChiaXRtYXApIHsKICAgICAgICAg
YXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NFUlQo
cGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7CisgICAgICAgIEFTU0VSVChw
aXhlbFNpemUud2lkdGggPj0gaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpKTsKICAgICAgICAgQVNT
RVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4
ZWxTaXplLmhlaWdodCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKHBp
eGVsU2l6ZS5oZWlnaHQgPj0gaW1hZ2VEYXRhLnNpemUoKS5oZWlnaHQoKSk7CiAgICAgICAgIEFT
U0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwogICAgIH0KICNlbmRpZgpA
QCAtNDA1LDYgKzM5OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljCiAgICAgaWYgKCFlbnN1
cmVCYWNraW5nU3RvcmUoc2l6ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG96KiBzb3Vy
Y2UgPSBpbWFnZURhdGEuZGF0YSgpOwogICAgIGlmIChzb3VyY2VTaXplID09IHNpemUpIHsKICAg
ICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkp
OwogICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuaAppbmRleCA5Yzk0ZDhhNDgyMmYxMjVmNDA2ZjMwMDc3NDdmZjkzNThjMTU2YTMwLi4w
OWNjNDkzZTFjMmE1YTU2YzJjZWFlZjVjM2EyOWM5NTA0NWQxZDA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuaApAQCAtNTQsOCArNTQsOCBAQCBzdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsK
ICAgICBlbnVtIGNsYXNzIEJpdG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMsIEJpdG1hcE91dE9mU3lu
YywgQnVmZmVyT3V0T2ZTeW5jIH07CiAgICAgbXV0YWJsZSBCaXRtYXBCdWZmZXJTeW5jIGJpdG1h
cEJ1ZmZlclN5bmMgeyBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMgfTsKIAotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgUmVmUHRyPEltYWdl
RGF0YT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2b2lkIHB1dERhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6
ZSYpOwogCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElEMkQxUmVu
ZGVyVGFyZ2V0Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAppbmRleCBlMDQyMThmMWVmNGY1
NzhjZTA3Zjk0YjdhOGVjYmI4MzBhNTI2N2Y5Li5jZmFmMTVlNDdjMjk3MjU2Mjc0M2ZkNzIxNWZk
ZjU3NWU0YjUwMjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCkBAIC0yNzgsNDkgKzI3OCwy
OCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlcwogICAgIH0KIH0KIAotUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkKICAgICAgICAgZmx1c2hDb250ZXh0KCk7CiAKLSAgICBJbnRSZWN0IHNy
Y1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAg
ICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIHNjYWxlZFNyY1JlY3Quc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQot
ICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJl
dHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSwgMSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6Omdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4
ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29u
c3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAg
IGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAo
Y29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVu
c2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwot
Ci0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSwgMSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKG91dHB1dEZvcm1hdCwg
c2NhbGVkU3JjUmVjdCwgaW50ZXJuYWxTaXplKCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpw
dXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGlt
YWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCkKIHsKICAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAgICAg
IGZsdXNoQ29udGV4dCgpOwogCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNl
UmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAg
IHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2Fs
ZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9CisgICAgSW50UmVj
dCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBJbnRSZWN0IHNjYWxlZERlc3RQb2ludCA9
IGRlc3RQb2ludDsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KyAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgbV9k
YXRhLnB1dERhdGEoc291cmNlLCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxl
ZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpLCAxKTsKKyAgICBtX2RhdGEucHV0RGF0YShpbnB1dEZvcm1hdCwgaW1h
Z2VEYXRhLCBzY2FsZWRTcmNSZWN0LCBzY2FsZWREZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpKTsK
IH0KIAogU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0aW9u
YWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3
NWEwYmNhZDdkNjc1Li4wNDJkNWRkN2JiODM0ZjFlM2JlYTFhOWUxYTkwMmZlM2RiNmVmZmIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNs
dWRlICJSYXN0ZXJTaGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxT
aGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNo
b2xkLCBjCiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5k
cmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsK
IAotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1
ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VS
ZWN0LnNpemUoKSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAgICAg
ICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6
ZSgpIH0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5k
YXRhKCkpOworICAgICAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAg
ICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsK
ICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMg
Zm91ciBieXRlczogUkdCQS4KICAgICAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAs
IDEpICogMjU1LjBmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390978</attachid>
            <date>2020-02-17 14:09:31 -0800</date>
            <delta_ts>2020-02-18 01:31:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206621-20200217140930.patch</filename>
            <type>text/plain</type>
            <size>78803</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYThiZTQ4YjRkY2Q4NGMx
OTQ4Y2U3ZWJjZGY1ZGI4ZWU4NTE2MTE3Yy4uNTU1NWQ3ZDk1NDg5NDYxMDU4OWM4NGIxNmI4ZWQ0
ODc0NGQxNTk1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAyMC0wMi0xNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSByZXR1cm4gYW5k
IHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAg
ICAgIC0tIENvbWJpbmUgSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSgpIGFu
ZCBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKCkKKyAgICAgICAgICAgaW4gb25lIGZ1bmN0aW9u
IGFuZCBuYW1lIGl0IGdldEltYWdlRGF0YSgpOworCisgICAgICAgIC0tIE1ha2UgZ2V0SW1hZ2VE
YXRhKCkgcmV0dXJucyBhIFJlZlB0cjxJbWFnZURhdGE+IHNpbmNlIHRoZSBjYW52YXMgY29kZQor
ICAgICAgICAgICB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSByZXR1cm5lZCB0aGUgcmV0dXJuZWQg
VWludDhDbGFtcGVkQXJyYXkgaW50bworICAgICAgICAgICBhbiBJbWFnZURhdGEgYW5kIHNlbmQg
aXQgdG8gSmF2YVNjcmlwdENvcmUuCisKKyAgICAgICAgLS0gUmVuYW1lIEltYWdlQnVmZmVyOjpw
dXRCeXRlQXJyYXkoKSB0byBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKCkgYW5kCisgICAgICAg
ICAgIG1ha2UgaXQgdGFrZSBhbiBJbWFnZURhdGEgc2luY2UgdGhlIGJ5dGUgYXJyYXkgaGFzIHRv
IGJlIGFzc29jaWF0ZWQKKyAgICAgICAgICAgd2l0aCBhbiBJbnRTaXplIGFuZCBzZXBhcmF0aW5n
IHRoZW0gZG9lcyBub3QgbG9vayBhIGdvb2QgZGVzaWduLgorCisgICAgICAgIC0tIFJlbW92ZSB0
aGUgZW51bSBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbS4gQWxsIHRoZSBjYWxsZXJzIG5l
ZWQgdG8KKyAgICAgICAgICAgcGFzcyByZWN0YW5nbGVzIGFuZCBzaXplcyBpbiBsb2dpY2FsIGNv
b3JkaW5hdGVzLiBUaGUgSW1hZ2VEYXRhIGhhcyB0bworICAgICAgICAgICBiZSBzY2FsZWQgYWNj
b3JkaW5nIHRvIHRoZSBJbWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUoKS4gCisKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRJbWFnZUJpdG1hcCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6Cisg
ICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnZl
cnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5z
Zm9ybUNvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8g
SW1hZ2VCdWZmZXJDYWlyby5jcHAuCisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpn
ZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIGNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKSBhbmQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhcmUg
bm90IAorICAgICAgICBvdmVycmlkZGVuIGJ5IGFueSBwbGF0Zm9ybS4gU28gZGVsZXRlIGdlbmVy
aWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYW5kCisgICAgICAgIG1vdmUgaXRzIGJvZHkgdG8g
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgTWFrZSB0aGUgcHJpdmF0ZSBmdW5jdGlv
bnMgYmUgcHVibGljIGFuZCByZW1vdmUgdGhlIGZyaWVuZCBjbGFzc2VzLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsVW5pdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpiYWNraW5nU3RvcmVVbml0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnB1dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Omdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyRGF0YTo6cHV0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuaDoKKyAgICAgICAgQWxsIHRoZSByZWN0YW5nbGVzIGFuZCBzaXplcyBo
YXZlIHRvIGJlIHBhc3NlZCBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzLiBUbworICAgICAgICBkZWFs
IHdpdGggdGhlIHBpeGVscycgZGF0YSB3ZSBuZWVkIHRvIHNjYWxlIHRoZW0gYnkgdGhlIHJlc29s
dXRpb25TY2FsZSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRy
aXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIFRoaXMgd2FzIHRoZSBv
bmx5IHBsYWNlIHdoaWNoIHdhcyBwYXNzaW5nIGEgcmVjdGFuZ2xlIGluIGEgdGhlIGJhY2stZW5k
CisgICAgICAgIGNvb3JkaW5hdGVzIGFsb25nIHdpdGggQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5
c3RlbS4gSW5zdGVhZCB3ZSBjYW4gcGFzcworICAgICAgICB0aGUgcmVjdGFuZ2xlIGluIGxvZ2lj
YWwgY29vcmRpbmF0ZXMgYW5kIHRoZW4gdXNlIEltYWdlRGF0YTo6c2l6ZSgpIHNpbmNlCisgICAg
ICAgIGl0IG11c3QgYmUgc2NhbGVkIHdpdGggcmVzb2x1dGlvblNjYWxlKCkgd2hlbiB0aGUgSW1h
Z2VEYXRhIGlzIGNyZWF0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJl
TXVsdGlwbGllZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdl
QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVs
dGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyRGF0YTo6cHV0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGF0YURpcmVjdDJELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0
SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3Jl
YXRlUmFzdGVyU2hhcGUpOgorCiAyMDIwLTAyLTE3ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0xGQ10gUmVtb3ZlIFJlcGxhY2VkQm94OjptX2xheW91dEJveApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKaW5kZXggYzRjN2UyODgyNzcyNjZkZGVjNzUyMDQxMjEyYjVlMmJjNWZhYTM1OC4uODRj
MTY0ZGEzZTIwYTVmMjczYzgxMWY3OGEzODc3YmI3MjYzOWMwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05NDMs
MTMgKzk0MywxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSW50U2l6
ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIGF1dG8gaW1h
Z2VEYXRhID0gYnVmZmVyLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoMCwgMCwg
bG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgYXV0
byBpbWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0pOwogICAg
ICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gaW1hZ2VEYXRh
LT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOworICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFy
cmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCktPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CiAg
ICAgICAgIGlmICghYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0
aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
Mjg2NSwxOSArMjg2NSwyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVM
ZW5ndGgoKSk7CisgICAgICAgIGF1dG8gYXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsK
KyAgICAgICAgaWYgKCFhcnJheSkgeworICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEludFNpemUgbG9naWNhbFNp
emUgPSBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIEludFNp
emUgaW1hZ2VEYXRhU2l6ZSA9IGxvZ2ljYWxTaXplOworICAgICAgICBpbWFnZURhdGFTaXplLnNj
YWxlKHJlc29sdXRpb25TY2FsZSk7CisKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURh
dGE6OmNyZWF0ZShpbWFnZURhdGFTaXplLCBhcnJheS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CisgICAgICAgIGF1
dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFNpemUpLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOwogICAgICAgICBp
ZiAoIWJ1ZmZlcikgewogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFn
ZURhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFNpemUobG9n
aWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgeyBJbnRQ
b2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAogICAgICAgICBhdXRvIGJpdG1hcCA9IElt
YWdlQml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIHN0YXRpY19jYXN0PGJvb2w+KG9y
aWdpbkNsZWFuKSB9KTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0bWFwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAKaW5kZXggZDQ5NDcxMjA4MzIzMTBjN2MwZDdiZWYxYzg3OWRhM2ZmYjI5
M2YwYS4uZDJiOGRiODE0ZDMxMzQxODY0MTJmYTVkOGFlYWY3YTIzODBiMTI4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAKQEAgLTIxNTgsMTEgKzIxNTgsNiBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlSW1hZ2VEYXRh
KGZsbwogfQogCiBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3cs
IGZsb2F0IHNoKSBjb25zdAotewotICAgIHJldHVybiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6
OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBzeCwgc3ksIHN3LCBzaCk7Ci19Ci0KLUV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJ
bWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwg
ZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CiB7CiAgICAgaWYg
KCFjYW52YXNCYXNlKCkub3JpZ2luQ2xlYW4oKSkgewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVW5h
YmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzIGJlY2F1c2UgdGhlIGNhbnZhcyBoYXMg
YmVlbiB0YWludGVkIGJ5IGNyb3NzLW9yaWdpbiBkYXRhLiIpKTsKQEAgLTIxOTYsOCArMjE5MSw4
IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJl
dHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFnZURhdGFSZWN0LnNpemUoKSk7CiAKLSAgICBh
dXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0
YVJlY3QsIG51bGxwdHIsIGNvb3JkaW5hdGVTeXN0ZW0pOwotICAgIGlmICghYnl0ZUFycmF5KSB7
CisgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJlY3QpOworICAgIGlmICghaW1h
Z2VEYXRhKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAg
IGNvbnNvbGVNZXNzYWdlLmFwcGVuZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBm
cm9tIGNhbnZhcy4gUmVxdWVzdGVkIHNpemUgd2FzICIpOwogICAgICAgICBjb25zb2xlTWVzc2Fn
ZS5hcHBlbmROdW1iZXIoaW1hZ2VEYXRhUmVjdC53aWR0aCgpKTsKQEAgLTIyMDgsNyArMjIwMyw3
IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJldHVybiBJbWFnZURhdGE6OmNyZWF0
ZShpbWFnZURhdGFSZWN0LnNpemUoKSwgYnl0ZUFycmF5LnJlbGVhc2VOb25OdWxsKCkpOworICAg
IHJldHVybiBpbWFnZURhdGE7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5KQpAQCAt
MjIxNywxMSArMjIxMiw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwg
ZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGly
dHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCi17Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIElt
YWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5
WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpD
b29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxv
YXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVp
Z2h0KQogewogICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXNCYXNlKCkuYnVmZmVyKCk7
CiAgICAgaWYgKCFidWZmZXIpCkBAIC0yMjQ1LDcgKzIyMzUsNyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVm
ZmVyOjpDbwogICAgIEludFNpemUgZGVzdE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3Rh
dGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJlY3QgZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0UmVjdC5tb3ZlKGRlc3RPZmZzZXQpOwotICAgIGRlc3RS
ZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3JkaW5hdGVTeXN0ZW0gPT0gSW1h
Z2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgp
IDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOworICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRS
ZWN0KEludFBvaW50KCksIGJ1ZmZlci0+bG9naWNhbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVz
dFJlY3QpOwpAQCAtMjI1Myw3ICsyMjQzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAg
ICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5o
ZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVm
ZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291
cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAg
ICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIGRhdGEsIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpKTsKIAogICAgIGRp
ZERyYXcoZGVzdFJlY3QsIENhbnZhc0RpZERyYXdBcHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNm
b3JtLCBzaGFkb3cgYW5kIGNsaXAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRleCAzZGZjOWM5ZmNl
NTJiZTg4OTJiZjQ5OGFlNjcyMjE4N2YxYmVlOTFkLi5kYjNmYWM4YjA4YjcwM2JkNTQxZmM3MmY0
ZDMxYmQ1MTc3MzUwNGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCkBAIC0zNzEsOSArMzcxLDYgQEAg
cHJvdGVjdGVkOgogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBmdWxsQ2FudmFzQ29tcG9z
aXRlZERyYXdJbWFnZShUJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29t
cG9zaXRlT3BlcmF0b3IpOwogCi0gICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IGdl
dEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0
IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBk
aXJ0eUhlaWdodCk7Ci0KICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0YzM1MzMwOTE2MTlkYzY0M2Y4NzI5MDljYjcx
Zjc4MjhlZjg1YmJjLi5lNjBjZGUxNGQxYTdjNmMzMDQyODkwNzUwN2M2MTBiZTU1ZGUxYTIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApAQCAtMzc2LDcgKzM3
Niw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmCiAgICAgICAgICAgICAgICAgYXV0byBzb3Vy
Y2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUsIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVj
dChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZm
ZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLT5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50UG9pbnQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzb3VyY2VSZWN0KTsK
ICAgICAgICAgICAgICAgICAgICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImlt
YWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDIwYjk4MTBjMjkxNDFlNDczZTZhODg4
YmM4MGMxNDE3YWVhYzJmYWYuLmYzZWVlOTNhNTMyNWU1MmViZjMzZmZkZTZjNmE2NzE3NTg3NTZj
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgpAQCAtMTEzLDUxICsxMTMsMTQgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKIH0KICNlbmRpZgogCi0jaWYgIShVU0UoQ0cpIHx8
IFVTRShESVJFQ1QyRCkpCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENv
bG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAg
IGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVu
dAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3Jj
Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29s
b3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwot
ICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3Ip
OwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQo
Y29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFy
UmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JH
QikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmlj
ZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNv
bG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAg
IGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAg
ICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19
Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVyOjpnZW5lcmlj
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpCit2b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKIHsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50
ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZElt
YWdlRGF0YShsdW1pbmFuY2VSZWN0KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgSW50
UmVjdCBsb2dpY2FsUmVjdCA9IHsgSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSB9OworICAgIGF1
dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgbG9naWNhbFJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICBy
ZXR1cm47CiAgICAgCisgICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgp
OwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgo
KTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAgIHVpbnQ4X3QgYSA9IHNy
Y1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKQEAgLTE3MCwxMyArMTMzLDcgQEAg
aW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkK
ICAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4w
NzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CiAgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChw
aXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KLSAgICBwdXRCeXRlQXJyYXkoKnNyY1BpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNl
UmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQgcGxhdGZvcm0g
c3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFuY2VNYXNrIGhl
cmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICBwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VE
YXRhLCBsb2dpY2FsUmVjdCk7CiB9CiAKICNpZiAhVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggN2I3NzJhMmYyZDhmNmU3
NTc3ZWFmYzZkYjIyOTMwNmI3Y2ZlZGY5Yi4uN2FiZmUwZDE3MTE0MDZkOTA4ZTAzMWQyZjZhMDcx
ZTQ5MGFmMThhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDxtZW1vcnk+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CkBA
IC04NCwzNyArODMsNDggQEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgQ29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
OwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9y
IGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBp
bmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0
U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXpl
IGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0
YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKKyAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKyAgICAKICAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIo
KTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
OworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgZmx1c2hDb250ZXh0KCkg
Y29uc3Q7CisjZW5kaWYKKwogICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFj
a2luZyBzdG9yZQogICAgIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQogICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQogICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgCisgICAgc2l6ZV90IG1lbW9yeUNv
c3QoKSBjb25zdDsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKKyNpZiBV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OworI2VsaWYgVVNF
KENBSVJPKQorICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7CisjZW5kaWYK
IAogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJl
c29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPElt
YWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwotCi0gICAgZW51bSBDb29yZGlu
YXRlU3lzdGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5h
dGVTeXN0ZW0gfTsKLQotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51
bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7
Ci0KLSAgICB2b2lkIHB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBD
b29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pOwogICAgIAotICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxv
cHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0Owot
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBG
bG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0j
aWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7Cisj
aWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNp
bmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CiAjZW5kaWYK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOworICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKKyAgICB2b2lkIGNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKTsKICNpZiAhVVNFKENHKQogICAgIEFmZmluZVRyYW5zZm9ybSBi
YXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KICAgICB2
b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNw
YWNlIGRzdENvbG9yU3BhY2UpOwpAQCAtMTIyLDUwICsxMzIsMjAgQEAgcHVibGljOgogI2Vsc2UK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0
KCkpOyB9CiAjZW5kaWYKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7
CiAKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwotICAgIHNpemVfdCBleHRlcm5hbE1l
bW9yeUNvc3QoKSBjb25zdDsKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFE
YXRhKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQgPSB7IH0pOworICAgIAorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCiAgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpOwogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xh
bXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2Vy
IG9yIGNsaXBwZXIuCi0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxv
YXRTaXplJik7Ci0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRT
aXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6
ZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3Qg
Y2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0jaWYgVVNFKENHKQot
ICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJu
YWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhl
IHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJF
Q1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJE
MUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9p
ZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAt
MSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotCi0gICAgaW5saW5l
IHZvaWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAg
IGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3Mg
TmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdl
OwotICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWludEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBC
aXRtYXBJbWFnZTsKLQogcHJpdmF0ZToKICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwogICAg
IEludFNpemUgbV9zaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAppbmRleCA2ODFhYjU2ZWViMzQxOTQ2MmIyMzQ0NTBkMDBmNDFmOTMzNjc0
ZDE4Li5jN2FlMmY1ZDczYjkxMzhkNzU0ZWQxMmFhMDc4ZTcxYWI5NTk1MzRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtODg0LDEyICs4ODUsMTMgQEAgdm9pZCBTaGFkb3dC
bHVyOjpibHVyU2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRT
aXplJiB0ZW1wbGEKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQ
b2ludCgpLCB0ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5n
ZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0g
bGF5ZXJJbWFnZS5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBibHVyUmVjdCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGJsdXJMYXllckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCks
IGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5
ZXJEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0
LnNpemUoKSwgYmx1clJlY3QsIHsgfSk7CisgICAgYXV0byogYmx1clBpeGVsQXJyYXkgPSBsYXll
ckRhdGEtPmRhdGEoKTsKKyAgICBibHVyTGF5ZXJJbWFnZShibHVyUGl4ZWxBcnJheS0+ZGF0YSgp
LCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKKyAgICBsYXllckltYWdl
LnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICps
YXllckRhdGEsIGJsdXJSZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JT
aGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBs
YXRlU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKaW5kZXggZjJiZjkzMjQyZmJiMDc5YTEzMjMx
YTkxOGZhNGZmOGM4ZTdiYzcwYS4uYjEzYmI2N2M4NzBiNzAzM2MwMDBjMzFiZDJmMjU5YmQ3YmQ4
MmY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKQEAgLTM1LDkgKzM1LDExIEBACiAjaW5jbHVk
ZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTM4Miw2ICszODQsNDEgQEAgdm9pZCBJ
bWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWMKICAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBtX3NpemUsIGRlc3RSZWN0LCBzcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZm
ZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNw
YWNlIGRzdENvbG9yU3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JT
cGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0Ig
YXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50CisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENv
bG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0Ip
CisgICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBk
c3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7
CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBm
bG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9M
aW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBz
dGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3Jt
VHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOworICAgIH0gZWxzZSBpZiAoZHN0Q29s
b3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7CisgICAgICAgICAgICBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAy
NTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVu
dChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90
Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZShkZXZpY2VSZ2JMVVQpOworICAgIH0KK30KKwogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1Vw
VGFibGUpCiB7CiAgICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBv
biBhY2NlbGVyYXRlZCBjYW52YXNlcy4KQEAgLTQyMCwxNiArNDU3LDEwIEBAIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlCiB9CiAKIHRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIHByZW11
bHRpcGxpZWQ+Ci1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsUmVjdCwgY29uc3QgSW1hZ2VCdWZm
ZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBsb2dpY2Fs
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsUmVjdCwgY29uc3QgSW1h
Z2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBs
b2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQogewotICAgIC8vIFRoZSBhcmVhIGNh
biBvdmVyZmxvdyBpZiB0aGUgcmVjdCBpcyB0b28gYmlnLgotICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAg
ICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7CisgICAgYXV0
byByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LnNpemUoKSk7CisgICAgYXV0byogcGl4
ZWxBcnJheSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQ0NCw3ICs0NzUsNyBAQCBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbnRSZWN0JiBsb2dpYwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChy
ZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHggPiBzaXplLndpZHRoKCkgfHwgZW5k
eSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKKyAgICAgICAg
cGl4ZWxBcnJheS0+emVyb0ZpbGwoKTsKIAogICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7CiAg
ICAgaW50IGRlc3R4ID0gMDsKQEAgLTQ4Niw3ICs1MTcsNyBAQCBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBs
b2dpYwogICAgIH0KIAogICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgY2hhciog
ZGF0YURzdCA9IHJlc3VsdC0+ZGF0YSgpOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFEc3QgPSBw
aXhlbEFycmF5LT5kYXRhKCk7CiAgICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwogICAgIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdyA9IDQgKiByZWN0LndpZHRoKCk7CiAKQEAgLTUyMyw1MSArNTU0LDI4IEBAIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0
IEludFJlY3QmIGxvZ2ljCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2ljYWxVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFn
ZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJ
bWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09
IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAg
ICByZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgYmFja2luZ1N0b3Jl
VW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29v
cmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK1JlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNv
b3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGlu
YXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1
ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29sdXRpb25T
Y2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gc3Jj
UmVjdDsKKyAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBzcmNSZWN0OworICAgIGJhY2tp
bmdTdG9yZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIAorICAgIGlmIChvdXRw
dXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQorICAg
ICAgICByZXR1cm4gZ2V0RGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dp
Y2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOworICAgIHJldHVybiBnZXREYXRhPEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxS
ZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwog
fQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVu
c2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3ZvaWQgSW1h
Z2VCdWZmZXI6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9
IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNv
b3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURp
bWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJl
Y3Quc2l6ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRh
LCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KKyAgICBJbnRS
ZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKKyAgICBJbnRQb2ludCBsb2dpY2Fs
RGVzdFBvaW50ID0gZGVzdFBvaW50OwogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxVbml0KHJl
Y3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGJh
Y2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAg
ICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgpOwotICAg
IHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2lj
YWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19CisgICAgSW50UmVjdCBzY2FsZWRTb3VyY2VS
ZWN0ID0gc291cmNlUmVjdDsKKyAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBpbWFnZURh
dGEuc2l6ZSgpOworICAgIEludFBvaW50IHNjYWxlZERlc3RQb2ludCA9IGRlc3RQb2ludDsKIAot
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgSW50
UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VSZWN0LCBjb29y
ZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3Vy
Y2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VTaXplLCBjb29yZGluYXRlU3lzdGVtLCBt
X3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gYmFja2lu
Z1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxl
KTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gbG9naWNhbFVuaXQoc291cmNlUmVj
dCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50IGxv
Z2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OwogCiAgICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwogICAgIEFTU0VS
VChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7CkBAIC02MTQsNyArNjIyLDcgQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGkKICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBz
Y2FsZWRTb3VyY2VTaXplLndpZHRoKCk7CiAgICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwogCi0gICAgY29uc3QgdWludDhf
dCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBv
cmlnaW54ICogNDsKKyAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEo
KS0+ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7CiAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKICAgICAgICAgdW5zaWduZWQqIHJv
dyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICog
KHkgKyBkZXN0eSkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgr
KykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAppbmRleCBhZmQ1ZTRlYzcxOWVkYjQ5M2Y3OWRiYmZhYmU1YWY5M2NhMDY3
MDliLi45MTY0YzY5OTUxOTdlY2IzZDUzZWRkMzJiYWUwZDBlNDVmYmY3NDU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cApAQCAtMzc3LDQ5ICszNzcsMjggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXMKICAgICB9CiB9
CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5z
aW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAorUmVmUHRyPElt
YWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBpZiAo
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAgICAgIGZsdXNoQ29udGV4dCgp
OwogCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisgICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAg
ICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKIAotICAgIGlmIChwaXhl
bEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVj
dC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOworICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShvdXRw
dXRGb3JtYXQsIHNjYWxlZFNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSk7CiB9CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50
U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAo
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAgICAgIGZsdXNoQ29udGV4dCgp
OwogCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAg
ICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1f
ZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1Jl
Y3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19
CisgICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBJbnRQb2ludCBzY2Fs
ZWREZXN0UG9pbnQgPSBkZXN0UG9pbnQ7CisgICAgc2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisgICAgc2NhbGVkRGVzdFBvaW50LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJ
bnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0g
ICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENv
bnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0g
ICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRT
b3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNl
U2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERh
dGEoc291cmNlLCBzb3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJl
Y3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKTsKKyAgICBtX2RhdGEucHV0RGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzY2Fs
ZWRTcmNSZWN0LCBzY2FsZWREZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSk7CiAgICAgCiAgICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUg
SU9TdXJmYWNlIGNhY2hlZCBpbWFnZSBpZiBpdCBpcyByZXF1ZXN0ZWQgdGhyb3VnaCBDR0lPU3Vy
ZmFjZUNvbnRleHRDcmVhdGVJbWFnZSgpLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5l
Y2Vzc2FyeS4KQEAgLTQ1MiwxNyArNDMxLDE5IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdl
QnVmZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3ViCiAg
ICAgQVNTRVJUKHV0aSk7CiAKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKKyAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IHByb3RlY3RlZFBpeGVsQXJyYXk7CiAKICAgICBpZiAoQ0ZFcXVh
bCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBh
biBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Ag
b2YgYmxhY2suCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpKTsKLSAgICAgICAgaWYg
KCFwcmVtdWx0aXBsaWVkRGF0YSkKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBs
b2dpY2FsU2l6ZSgpIH0pOworICAgICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6
ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsK
LSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51
bGxwdHIpKTsKKyAgICAgICAgcHJvdGVjdGVkUGl4ZWxBcnJheSA9IG1ha2VSZWZQdHIoaW1hZ2VE
YXRhLT5kYXRhKCkpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByb3Rl
Y3RlZFBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUpOworCisgICAgICAgIGF1dG8gZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHBy
b3RlY3RlZFBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKICAgICAgICAg
aWYgKCFkYXRhUHJvdmlkZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwCmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMu
LmZmMGFkMDk5YzcxNmFlZmZlYjA0MWI3ZGQ4ODUwMTZlYjYxNGVkYTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KQEAgLTEyNSwyMyArMTI2LDE3IEBAIFZlY3Rvcjx1aW50
OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5n
LCBpbnQgd2lkdGgsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVu
ZGVyaW5nKSBjb25zdAogewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBh
cmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVp
Z2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9
IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEp
CisgICAgYXV0byByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LnNpemUoKSk7CisgICAg
YXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKKyAg
ICBpZiAoIXBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgQ2hlY2tl
ZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKICAgICBDaGVja2VkPGludD4gZW5keSA9IHJlY3Qu
bWF4WSgpOwogICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgudW5z
YWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0
KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKKyAgICAgICAgcGl4ZWxBcnJheS0+emVy
b0ZpbGwoKTsKICAgICAKICAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0
eCA9IDA7CkBAIC0xNzMsNyArMTY4LDcgQEAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFn
ZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXQKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0
ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRl
c3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OworICAgIHVpbnQ4X3QqIGRlc3RSb3dz
ID0gcGl4ZWxBcnJheS0+ZGF0YSgpICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAq
IDQ7CiAgICAgCiAgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7CiAgICAgdWludDhfdCogc3Jj
Um93czsKQEAgLTMzNCw3ICszMjksNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9y
bWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFj
Y2VsZXJhdGVSZW5kZXJpbmcpCit2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKICAgICBBU1NF
UlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0
KCkgPiAwKTsKQEAgLTM2OCw4ICszNjMsOCBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0
YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpYwogICAg
IGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgpOwotICAg
IGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNC
eXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1bnNpZ25lZCBzcmNC
eXRlc1BlclJvdyA9IDQgKiBpbWFnZURhdGEuc2l6ZSgpLndpZHRoKCk7CisgICAgY29uc3QgdWlu
dDhfdCogc3JjUm93cyA9IGltYWdlRGF0YS5kYXRhKCktPmRhdGEoKSArIChvcmlnaW55ICogc3Jj
Qnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7CiAgICAgdW5zaWduZWQgZGVz
dEJ5dGVzUGVyUm93OwogICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgK
aW5kZXggM2UyMzc0YmFkMjRmMDc4N2ZlZjA1NDNjMWI1MWI5MTIwZjEyMzBkNC4uNmE0ZmJmMmFk
ZTVlODYwZDM0ZTIxM2UxYzQxMmUxNWJkYWJjNTNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCkBAIC00MCw2
ICs0MCw3IEBAIHR5cGVkZWYgdWludDMyX3QgQ0dCaXRtYXBJbmZvOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsKIGNsYXNzIElPU3VyZmFjZTsKIAogc3RydWN0IElt
YWdlQnVmZmVyRGF0YSB7CkBAIC01OSw4ICs2MCw4IEBAIHN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEg
ewogI2VuZGlmCiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YShib29sIGFjY2VsZXJh
dGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7Ci0gICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdDsK
LSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNv
bnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpOworICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25z
dDsKKyAgICB2b2lkIHB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
CmluZGV4IGZkOGU1ZThlMmU5NGU3MDU0ODk2ZjlhYmJiYTdhNDZmNTAyMTQxYzkuLmM5NmUzM2Nh
NWY2MTMxZTUyZTFlOWQ0NWQ3YzAyMTYzZGU0YWNjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5k
TkVPTi5oCkBAIC0xMTEsNyArMTExLDggQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkq
IGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvKiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGF1dG8qIGRzdFBpeGVsQXJyYXkgPSBpbWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkg
OiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3
ZmM1OTc1Li45NTE4MDBlZGE5MTc0MTFjODhiOWE0YmU1NTE0Y2YxZjY4Yzc4Nzk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Vp
bnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTI4
NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNh
bFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9uczsKLSAgICBhdXRvIHBp
eGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVj
dCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgYXV0
byBpbWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIWltYWdlRGF0YSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVk
RmxvYXRzKG1fdmFsdWVzKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRh
KCk7CisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgp
OwogCisgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVz
KTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVD
b2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJl
Y3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBpbWFnZVJlY3QpOwog
fQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Q29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5k
ZXggZmEwNDEzYzAwZGE0M2FjNWRmNTVlNWUwMWY2OTQ0YWI5ZWRhNzQ4My4uOTc4YzU1YTY3Yjhk
ZTcyMGU5ZmE3OWJkOGNjMzRkNzQ1MjhhMDI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNm
ZXIuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1w
ZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KQEAgLTEwOCw3ICsxMDgsOCBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1h
Z2VSZXN1bHQgPyBpbWFnZVJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXBpeGVs
QXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCBhMTllYTA1Mzc1
ODE5Y2VjZGFjMjVkNWQ5NjNkNTQ0ZGQ0ZDFhOTY5Li4yNjU0NDBmNDM5NDJhZmE2YWEyOThkYWY0
ZWMwMmVlM2Q5NWNlYzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2lu
Y2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5LDcgKzIy
OSw4IEBAIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmls
dGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBVaW50OENsYW1wZWRBcnJh
eSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
ICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgICAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFn
ZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAg
ICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCA2MmMyZjgzMzY1
MzU4Njg0NGQ5ZjM5MGVlYTVlZGMxMDhlMzBhMzg4Li5hNmUzZjRiYmFhMjQ0OTdmOTI2MzQ2NTY5
NzVmZmI4N2RjN2FiOWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTI1LDcgKzI1
LDcgQEAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKICNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRl
IDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAt
MzcxLDEyICszNzEsMTMgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1bHRJbWFnZTsKKyAgICBJbWFnZURhdGEqIHJlc3VsdElt
YWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCiAgICAgICAgIHJlc3VsdEltYWdlID0gY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdElt
YWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJ
bWFnZSkKKyAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFn
ZS0+ZGF0YSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTM5NSw3ICszOTYs
NyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAg
ICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewogICAgICAgICAqc3JjUGl4ZWxBcnJheSwK
LSAgICAgICAgKnJlc3VsdEltYWdlLAorICAgICAgICAqZHN0UGl4ZWxBcnJheSwKICAgICAgICAg
cGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKICAgICAgICAg
bV9iaWFzICogMjU1LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCAwZTk0NGRmMDBh
OTVjYzA2ZDI2YWE0MmYxNjllZTZhNDZmNWEyNzgyLi41MzczNTUwNDUzZTQ5ODYyYzBlNDE2ZjJk
Y2MyNTZiNDcwYzkxOTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtMjcsNyAr
MjcsNyBAQAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk0LDcgKzk0
LDggQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAgICAgQVNT
RVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogCi0gICAgVWludDhD
bGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdElt
YWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEy
ZDU2MThlOGZkZGQ4NGVjYi4uMTM5NWEyZGI4NTAzMmM5ZTJhZTg2NGM2Mzk2NjY4YjM3NDFjYzMz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAg
LTk5LDE0ICs5OSwxNSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3No
YWRvd0NvbG9yKTsKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VC
dWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgotICAgIEludFJlY3Qgc2hh
ZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1
dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRl
U3lzdGVtKTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgSW50UmVjdCBzaGFkb3dBcmVh
KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIGltYWdl
RGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJh
eS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRo
KCkpOwotCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXplKCksIHNo
YWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRl
U3lzdGVtKTsKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Cisg
ICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIGlt
YWdlRGF0YS0+c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5zaXplKCkud2lkdGgoKSk7CisgICAgCisg
ICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRleHQu
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAg
cmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApp
bmRleCA0OWJhODQxNzNjMmQxYTk5NTRlNTYxMzkwY2UwM2MyNGJjOTBjODFiLi5kN2VkOWIyNDQ5
MDE3OGZmYmZiZWIxY2Q0MmJlYTVlOGZmMTU5ZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5oIgogI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShB
Q0NFTEVSQVRFKQpAQCAtNTIyLDE0ICs1MjMsMTUgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcmVzdWx0UGl4ZWxBcnJheSA9IGNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0UGl4ZWxBcnJheSkK
KyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5k
YXRhKCkgOiBudWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBJbnRS
ZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KCpyZXN1bHRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgaW4tPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAg
ICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1cm47CkBAIC01NDMsNyArNTQ1
LDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBp
ZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1BcHBseSgq
cmVzdWx0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJu
ZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHkoKmRzdFBpeGVs
QXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWln
aHQoKSwgcGFpbnRTaXplKTsKIH0KIAogSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0
cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCAwYmE1MWI3NjEyZjJjYjJmNjlmNGY2MDIxY2Vm
Y2JlM2MyZTc0MmQzLi42ZGI4N2ZkNTQ1YThmMWRkYTdkOWI1ODhhMjU0MDY1NWE1NzhmYjI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ3Myw3ICs0NzQsOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHJlc3V0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyBy
ZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXJlc3V0UGl4ZWxBcnJheSkK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggMjUxNzgxY2E1YWE1MWY3
ODAyN2FkNTA4ZGY5YWM2MTBjNjc5NGZhNS4uY2JkNDI0MTk3NjU3MGE4NzM5NDUyMDBhOTEzZTBl
OWU2NTlhYjQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5j
bHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMjM0LDcgKzIzNCw4IEBAIHZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQ
aXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRv
KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVs
bHB0cjsKICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwCmluZGV4IDZkNjBjZGRlYmIxMDJmNTJkYzNjMjFhZWNjMmE1MGRiNGJmNzgzNGIu
LmYxNmI5YjMxYTU1OWQ3NDYyMWZmMjMyNDRkYTkzMmRmNDMxNjhkNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFy
cmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgpAQCAtMzk1LDcgKzM5NSw4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVn
aW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogCiB2b2lkIEZFVHVy
YnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBVaW50OENsYW1wZWRBcnJh
eSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0
byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8qIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxs
cHRyOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uYTll
OGZjYTJjNWQxZGNiYjY2N2E1YjdjYzBkNGY3NzAyNDg0ZjM0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cApAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFBy
ZU11bHRpcGxpZWRQaXhlbHMoKQogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0g
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgVWludDhDbGFtcGVkQXJyYXkq
IGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwogICAgIHVp
bnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXktPmRhdGEoKTsKICAgICBpbnQgcGl4ZWxBcnJh
eUxlbmd0aCA9IGltYWdlQXJyYXktPmxlbmd0aCgpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAgdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiAKIEltYWdlQnVmZmVyKiBG
aWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0o
RmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAi
IDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIg
IiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7
CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIg
PDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4g
RXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAg
IiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25S
ZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1
dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9u
UmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAgICBtX2lt
YWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0
LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQzOCw1MiArNDM4
LDUyIEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwogICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVm
ZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVm
ZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpKTsKIAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAg
ICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAg
ICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAg
ICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQt
PmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsg
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBp
ZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAgICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUo
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0
U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAgICAg
IGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5w
dXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMo
Km1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBjb3B5
SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlv
biwgcmVjdCk7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhp
cyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAi
IDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsK
KyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8
PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
IDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20g
dGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAg
ICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJ
bnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKICAg
ICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAg
ICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7
CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3Jl
YXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICptX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlQcmVt
dWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAg
ICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVz
dGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIEltYWdlQnVmZmVyKiBG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKQEAgLTQ5NywxMyArNDk3LDEw
IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkK
IAogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZSht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwg
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICBpZiAoIW1f
aW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKLVVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0ltYWdlRGF0YSogRmls
dGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZp
bHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQi
LCBmaWx0ZXJOYW1lKCksIHRoaXMpOwogCkBAIC01MTUsMTEgKzUxMiwxMSBAQCBVaW50OENsYW1w
ZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAg
ICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAg
cmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQoKHJlc3VsdFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKICAgICByZXR1
cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFtcGVkQXJy
YXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0ltYWdl
RGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewog
ICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CiAKQEAgLTUzMSw3ICs1MjgsNyBAQCBV
aW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKQogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6
ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXpl
KTsKICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oCmluZGV4IGM5NjZmY2MyMTYzOWRlNWE0MDRhN2M2MmYzZWEyYjZlOTMzMmZlNDIu
LmFmNDYzZWZlYjAxMzZhYzYxOGUyOTljZDA4ZDQ0ODM4ZDBlZjU2NTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWx0ZXI7CiBj
bGFzcyBGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsK
IAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3Rv
cjsKIApAQCAtMTUzLDggKzE1NCw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlVW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOworICAgIEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRl
IGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAogICAgIC8vIGFscGhhIGluIFsw
LDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCkBAIC0xODIsOCAr
MTgzLDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7
Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIAogICAgIElu
dFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0
MkQuY3BwCmluZGV4IGZmMWIzOTQxNWViYjIxYmU2Y2VmYWM1OTA2ZjdkNDI1MWI4MzU5M2YuLmVi
YjY3YzY0M2VjYjg5M2E3OTM3ZDgwMjQzNTcxODZjYjE2NDIxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmNwcApAQCAtMjU1LDE0ICsyNTUsMTEgQEAgdm9pZCBpblBsYWNlQ2hhbmdl
UHJlbXVsdGlwbGljYXRpb24odWludDhfdCogYnl0ZURhdGEsIHVuc2lnbmVkIGJ5dGVDb3VudCkK
ICAgICB9CiB9CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5n
ICovLCBmbG9hdCAvKiByZXNvbHV0aW9uU2NhbGUgKi8pIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRh
PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVk
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAog
ewotICAgIGF1dG8gbnVtQnl0ZXMgPSByZWN0LmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0Owot
ICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFyZXN1bHQpCisgICAgYXV0
byByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LnNpemUoKSk7CisgICAgYXV0byogcGl4
ZWxBcnJheSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIXBp
eGVsQXJyYXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFiaXRtYXApCkBA
IC0zNTQsMjEgKzM1MSwxOSBAQCBib29sIEltYWdlQnVmZmVyRGF0YTo6cmVhZERhdGFGcm9tQml0
bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRgogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVy
YXRlUmVuZGVyaW5nICovLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit2b2lkIEltYWdlQnVmZmVy
RGF0YTo6cHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgQVNTRVJUKHNv
dXJjZVJlY3Qud2lkdGgoKSA+IDApOwogICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4g
MCk7CiAKICAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwogICAgIENo
ZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VS
ZWN0LngoKSk7Ci0gICAgZGVzdHggKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIEFTU0VSVChkZXN0
eC51bnNhZmVHZXQoKSA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPCBzaXpl
LndpZHRoKCkpOwogICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwogICAgIEFT
U0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKIAogICAgIENo
ZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJl
Y3QubWF4WCgpKTsKLSAgICBlbmR4ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBBU1NFUlQoZW5k
eC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwogCiAgICAgQ2hlY2tlZDxpbnQ+IHdpZHRo
ID0gc291cmNlUmVjdC53aWR0aCgpOwpAQCAtMzc2LDE0ICszNzEsMTIgQEAgdm9pZCBJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWMKIAogICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7
CiAgICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSAr
IHNvdXJjZVJlY3QueSgpKTsKLSAgICBkZXN0eSAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAgQVNT
RVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwogICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQo
KSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDAp
OwogICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsK
IAogICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSAr
IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBlbmR5ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBB
U1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKIAogICAgIENoZWNrZWQ8
aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwpAQCAtMzk1LDkgKzM4OCw5IEBAIHZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBpZiAoYml0bWFw
KSB7CiAgICAgICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAg
ICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzb3VyY2VTaXplLndpZHRoKCkpOworICAg
ICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IGltYWdlRGF0YS5zaXplKCkud2lkdGgoKSk7
CiAgICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKLSAgICAg
ICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc291cmNlU2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IGltYWdlRGF0YS5zaXplKCkuaGVpZ2h0KCkp
OwogICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzaXplLmhlaWdodCgpKTsKICAg
ICB9CiAjZW5kaWYKQEAgLTQwNSw2ICszOTgsNyBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0
RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpYwog
ICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHNpemUpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBhdXRveiogc291cmNlID0gaW1hZ2VEYXRhLmRhdGEoKTsKICAgICBpZiAoc291cmNlU2l6ZSA9
PSBzaXplKSB7CiAgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwgc291
cmNlLmxlbmd0aCgpKTsKICAgICAgICAgYnl0ZUZvcm1hdCA9IHNvdXJjZUZvcm1hdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRh
dGFEaXJlY3QyRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmgKaW5kZXggOWM5NGQ4YTQ4MjJmMTI1ZjQwNmYzMDA3NzQ3ZmY5
MzU4YzE1NmEzMC4uMDljYzQ5M2UxYzJhNWE1NmMyY2VhZWY1YzNhMjljOTUwNDVkMWQwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKQEAgLTU0LDggKzU0LDggQEAgc3RydWN0IEltYWdl
QnVmZmVyRGF0YSB7CiAgICAgZW51bSBjbGFzcyBCaXRtYXBCdWZmZXJTeW5jIHsgSW5TeW5jLCBC
aXRtYXBPdXRPZlN5bmMsIEJ1ZmZlck91dE9mU3luYyB9OwogICAgIG11dGFibGUgQml0bWFwQnVm
ZmVyU3luYyBiaXRtYXBCdWZmZXJTeW5jIHsgQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZT
eW5jIH07CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkgY29uc3Q7Ci0gICAgdm9pZCBw
dXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXpl
JiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworICAg
IFJlZlB0cjxJbWFnZURhdGE+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisgICAgdm9pZCBw
dXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IGNvbnN0IEludFNpemUmKTsKIAogICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJp
dG1hcChJRDJEMVJlbmRlclRhcmdldCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKaW5kZXgg
ZTA0MjE4ZjFlZjRmNTc4Y2UwN2Y5NGI3YThlY2JiODMwYTUyNjdmOS4uY2ZhZjE1ZTQ3YzI5NzI1
NjI3NDNmZDcyMTVmZGY1NzVlNGI1MDI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcApAQCAt
Mjc4LDQ5ICsyNzgsMjggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXMKICAgICB9CiB9CiAKLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAorUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAgICAgIGZsdXNoQ29udGV4dCgpOwogCi0g
ICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7CisgICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBzY2Fs
ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKIAotICAgIGlmIChwaXhlbEFycmF5
RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXpl
KCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IElt
YWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJl
Y3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0p
Ci0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBp
eGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNS
ZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOworICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShv
dXRwdXRGb3JtYXQsIHNjYWxlZFNyY1JlY3QsIGludGVybmFsU2l6ZSgpKTsKIH0KIAotdm9pZCBJ
bWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3Vy
Y2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit2b2lkIEltYWdlQnVmZmVy
OjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQpCiB7CiAgICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKQogICAgICAgICBmbHVzaENvbnRleHQoKTsKIAotICAgIEludFJlY3Qgc2NhbGVkU291cmNl
UmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNl
U2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
fQorICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgSW50UmVjdCBzY2Fs
ZWREZXN0UG9pbnQgPSBkZXN0UG9pbnQ7CisgICAgc2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisgICAgc2NhbGVkRGVzdFBvaW50LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKIAotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgYnVmZmVyRm9ybWF0LCBzY2FsZWRTb3Vy
Y2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7CisgICAgbV9kYXRhLnB1dERhdGEoaW5w
dXRGb3JtYXQsIGltYWdlRGF0YSwgc2NhbGVkU3JjUmVjdCwgc2NhbGVkRGVzdFBvaW50LCBpbnRl
cm5hbFNpemUoKSk7CiB9CiAKIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYsIE9wdGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggODUxYTg2Njc4OWI0ODM1
NDIyYzU3YTQxZGRhNzVhMGJjYWQ3ZDY3NS4uMDQyZDVkZDdiYjgzNGYxZTNiZWExYTllMWE5MDJm
ZTNkYjZlZmZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJCb3hTaGFwZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiUG9seWdvblNo
YXBlLmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hhcGUuaCIKQEAgLTE4OCw4ICsxODksOSBAQCBzdGQ6
OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1hZ2Us
IGZsb2F0IHRocmVzaG9sZCwgYwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBncmFw
aGljc0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJl
Y3Quc2l6ZSgpKSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFy
cmF5ID0gaW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBv
aW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocGl4ZWxB
cnJheSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwg
aW1hZ2VSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW1hZ2VEYXRhICYm
IGltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byogcGl4ZWxBcnJheSA9IGltYWdlRGF0
YS0+ZGF0YSgpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJh
eS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBF
YWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAgICAgIHVpbnQ4X3QgYWxwaGFQaXhl
bFRocmVzaG9sZCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyb3VuZGYoY2xhbXBUbzxmbG9hdD4o
dGhyZXNob2xkLCAwLCAxKSAqIDI1NS4wZikpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>