<?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>177903</bug_id>
          
          <creation_ts>2017-10-04 16:45:44 -0700</creation_ts>
          <short_desc>Lots of missing frames in YouTube360 when fullscreen on MacBook</short_desc>
          <delta_ts>2018-01-04 11:51:43 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=179368</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>177992</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>noam</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sam</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>1356723</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-10-04 16:45:44 -0700</bug_when>
    <thetext>Lots of missing frames in YouTube360 when fullscreen on MacBook</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356749</commentid>
    <comment_count>1</comment_count>
      <attachid>322747</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-10-04 17:30:24 -0700</bug_when>
    <thetext>Created attachment 322747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356752</commentid>
    <comment_count>2</comment_count>
      <attachid>322747</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-04 17:35:39 -0700</bug_when>
    <thetext>Comment on attachment 322747
Patch

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

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.h:49
&gt; +    int _width;
&gt; +    int _height;

IntSize?

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:75
&gt; +    [super setTransform:CATransform3DScale(t, 1., -1., 1.)];

This can be CATransform3DScale(t, 1, -1, 1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356773</commentid>
    <comment_count>3</comment_count>
      <attachid>322747</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-10-04 18:35:18 -0700</bug_when>
    <thetext>Comment on attachment 322747
Patch

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

&gt; Source/WebCore/platform/graphics/cocoa/GraphicsContext3DCocoa.mm:678
&gt; +    LOG(WebGL, &quot;Tell the WebGL layer to create IOSurface backing store. (%p)&quot;, this);

Would make more sense to just log the function name, size, and m_attrs.alpha.

&gt; Source/WebCore/platform/graphics/cocoa/GraphicsContext3DCocoa.mm:684
&gt; +    LOG(WebGL, &quot;Tell the WebGL layer to bind to the framebuffer. (%p)&quot;, this);

Log the function name

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.h:47
&gt; +    std::unique_ptr&lt;WebCore::IOSurface&gt; _contentsBuffer;
&gt; +    std::unique_ptr&lt;WebCore::IOSurface&gt; _drawingBuffer;
&gt; +    std::unique_ptr&lt;WebCore::IOSurface&gt; _spareBuffer;

What about frontBuffer, backBuffer and secondaryBackBuffer as we use in RemoteLayerBackingStore?

&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.h:49
&gt;&gt; +    int _height;
&gt; 
&gt; IntSize?

Yes.

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:59
&gt; +    self.transform = CATransform3DIdentity;

Is this necessary?

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:68
&gt; +// means that any incoming transform (unlikely, since this

Unlikely, or impossible?

&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:75
&gt;&gt; +    [super setTransform:CATransform3DScale(t, 1., -1., 1.)];
&gt; 
&gt; This can be CATransform3DScale(t, 1, -1, 1)

Seems odd to do this as an override. Maybe the init method should just set the transform and anchor point?

What happens with object-fit on a WebGL? Is the WebGLLayer itself just a content layer?

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:149
&gt; +static std::unique_ptr&lt;WebCore::IOSurface&gt; createAppropriateIOSurface(int width, int height)

&quot;Appropriate&quot; in what sense?

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:152
&gt; +    auto surface = WebCore::IOSurface::create(IntSize(width, height), sRGBColorSpaceRef());
&gt; +    return surface;

No need for the local variable.

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:155
&gt; +- (void)createIOSurfaceBackingStoreWithWidth:(int)width height:(int)height usingAlpha:(BOOL)usingAlpha

A function called &quot;create&quot; is normally expected to return a retained object.

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:181
&gt; +#ifndef NDEBUG

This should be ASSERTIONS_ENABLED, but probably cleaner to just ASSERT_UNUSED()

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:78
&gt; +    for (int i = 0; i &lt; totalBytes; i += 4)
&gt; +        pixels[i + 3] = 255;

Seems like Accelerate might have a faster way to do this?

I assume the buffers never have rowByte padding?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356891</commentid>
    <comment_count>4</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2017-10-05 00:36:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/33273300&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357062</commentid>
    <comment_count>5</comment_count>
      <attachid>322747</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-10-05 10:20:35 -0700</bug_when>
    <thetext>Comment on attachment 322747
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cocoa/GraphicsContext3DCocoa.mm:678
&gt;&gt; +    LOG(WebGL, &quot;Tell the WebGL layer to create IOSurface backing store. (%p)&quot;, this);
&gt; 
&gt; Would make more sense to just log the function name, size, and m_attrs.alpha.

Done.

&gt;&gt; Source/WebCore/platform/graphics/cocoa/GraphicsContext3DCocoa.mm:684
&gt;&gt; +    LOG(WebGL, &quot;Tell the WebGL layer to bind to the framebuffer. (%p)&quot;, this);
&gt; 
&gt; Log the function name

Done.

&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.h:47
&gt;&gt; +    std::unique_ptr&lt;WebCore::IOSurface&gt; _spareBuffer;
&gt; 
&gt; What about frontBuffer, backBuffer and secondaryBackBuffer as we use in RemoteLayerBackingStore?

I like my names better, because they make more sense with respect to how they are used. WebGL is drawing into a buffer that it thinks is the front. And what does secondaryBackBuffer mean? It&apos;s really a third spare buffer.

&gt;&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.h:49
&gt;&gt;&gt; +    int _height;
&gt;&gt; 
&gt;&gt; IntSize?
&gt; 
&gt; Yes.

Changed.

&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:59
&gt;&gt; +    self.transform = CATransform3DIdentity;
&gt; 
&gt; Is this necessary?

It is, so that we call the flipping code. I could set it directly, but then it would be unflipped by the code in setTransform :)

&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:68
&gt;&gt; +// means that any incoming transform (unlikely, since this
&gt; 
&gt; Unlikely, or impossible?

Impossible.

&gt;&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:75
&gt;&gt;&gt; +    [super setTransform:CATransform3DScale(t, 1., -1., 1.)];
&gt;&gt; 
&gt;&gt; This can be CATransform3DScale(t, 1, -1, 1)
&gt; 
&gt; Seems odd to do this as an override. Maybe the init method should just set the transform and anchor point?
&gt; 
&gt; What happens with object-fit on a WebGL? Is the WebGLLayer itself just a content layer?

It can&apos;t be just the init method, since GraphicsLayerCA::setupContentsLayer comes along and sets an anchor point (and maybe a transform) after creation. I thought it would be better to specialize here rather than in the higher-level code.

&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:149
&gt;&gt; +static std::unique_ptr&lt;WebCore::IOSurface&gt; createAppropriateIOSurface(int width, int height)
&gt; 
&gt; &quot;Appropriate&quot; in what sense?

I removed this method.

&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:155
&gt;&gt; +- (void)createIOSurfaceBackingStoreWithWidth:(int)width height:(int)height usingAlpha:(BOOL)usingAlpha
&gt; 
&gt; A function called &quot;create&quot; is normally expected to return a retained object.

Renamed to allocate.

&gt;&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:181
&gt;&gt; +#ifndef NDEBUG
&gt; 
&gt; This should be ASSERTIONS_ENABLED, but probably cleaner to just ASSERT_UNUSED()

FIxed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357063</commentid>
    <comment_count>6</comment_count>
      <attachid>322848</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-10-05 10:23:17 -0700</bug_when>
    <thetext>Created attachment 322848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357064</commentid>
    <comment_count>7</comment_count>
      <attachid>322849</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-10-05 10:26:06 -0700</bug_when>
    <thetext>Created attachment 322849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357411</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-10-05 19:31:52 -0700</bug_when>
    <thetext>Committed r222951: &lt;http://trac.webkit.org/changeset/222951&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357448</commentid>
    <comment_count>9</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-10-05 21:39:12 -0700</bug_when>
    <thetext>(In reply to Dean Jackson from comment #8)
&gt; Committed r222951: &lt;http://trac.webkit.org/changeset/222951&gt;

This change failed to build on iOS EWS before it was landed. It broke the build:
https://build.webkit.org/builders/Apple%20iOS%2011%20Release%20%28Build%29/builds/529</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357451</commentid>
    <comment_count>10</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-10-05 21:44:33 -0700</bug_when>
    <thetext>LayoutTest webgl/1.0.2/conformance/textures/copy-tex-image-2d-formats.html is also failing on macOS after this change:
https://build.webkit.org/results/Apple%20El%20Capitan%20Release%20WK2%20(Tests)/r222951%20(5013)/results.html
https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=webgl%2F1.0.2%2Fconformance%2Ftextures%2Fcopy-tex-image-2d-formats.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357454</commentid>
    <comment_count>11</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-10-05 21:58:28 -0700</bug_when>
    <thetext>I see there was an iOS build fix in http://trac.webkit.org/changeset/222952, but the build is still failing:
https://build.webkit.org/builders/Apple%20iOS%2011%20Simulator%20Release%20%28Build%29/builds/481

It looks like another function is outside the #if PLATFORM(MAC) block, so it should be easy to fix. Still, I am going to roll out due to the build breakage and LayoutTest regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357456</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-05 21:59:16 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 177992</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357479</commentid>
    <comment_count>13</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-10-05 23:37:33 -0700</bug_when>
    <thetext>Committed r222961: &lt;http://trac.webkit.org/changeset/222961&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322747</attachid>
            <date>2017-10-04 17:30:24 -0700</date>
            <delta_ts>2017-10-05 10:23:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177903-20171004173023.patch</filename>
            <type>text/plain</type>
            <size>24628</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ3ZGQ2MjAxNzA5ODEy
NTk2ZTU1NzQ1NWI1ZDg1NWJkYmFkZTI3Yi4uNzFhOTY3OGM1NjE0MTdhYWRhZWI1OTQ3OTBkYmE1
MzEwMzY5ZjA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE3LTEwLTA0ICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBMb3RzIG9mIG1pc3NpbmcgZnJh
bWVzIGluIFlvdVR1YmUzNjAgd2hlbiBmdWxsc2NyZWVuIG9uIE1hY0Jvb2sKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkwMworICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMzMyNzMzMDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgT3VyIGNvbXBvc2l0aW5nIHBhdGggZm9yIFdlYkdMIG9uIG1hY09TIHdh
cyB0b28gc2xvdywgcmVxdWlyaW5nIGEgY29weQorICAgICAgICBvZiB0aGUgZnJhbWVidWZmZXIg
aW50byBhbm90aGVyIEdMIGNvbnRleHQuIFJlcGxhY2UgdGhpcyBieSBoYXZpbmcKKyAgICAgICAg
V2ViR0wgcmVuZGVyIGludG8gYSB0ZXh0dXJlIHRoYXQgaXMgYmFja2VkIGJ5IGFuIElPU3VyZmFj
ZSwgYW5kIHRoZW4KKyAgICAgICAgc2V0IHRoZSBXZWJHTExheWVyIHRvIHVzZSB0aGUgSU9TdXJm
YWNlIGFzIGNvbnRlbnRzLgorCisgICAgICAgIENvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIFdlYkdM
IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUg
Y29uc3QpOiBXZSBubyBsb25nZXIgdXNlIHRoZQorICAgICAgICBmcmFtZWJ1ZmZlciBvYmplY3Qg
b3V0c2lkZSB0aGUgY2xhc3MsIHNvIGNoYW5nZSB0aGlzIHRvIHJldHVybiB0aGUgR0wgdGV4dHVy
ZQorICAgICAgICB0aGF0IHRoZSBmcmFtZWJ1ZmZlciBpcyByZW5kZXJpbmcgaW4gdG8uIEl0IHdh
cyBraW5kLW9mIHN0cmFuZ2UgdGhhdCBpdCB3YXMKKyAgICAgICAgbmFtZWQgdGhpcyB3YXkgb3Jp
Z2luYWxseS4KKyAgICAgICAgQWxzbyBtYWtlIGVuZFBhaW50IGF2YWlsYWJsZSBvbiBtYWNPUywg
YW5kIGFkZCB0aGUgZGVmaW5pdGlvbnMgZm9yCisgICAgICAgIGNyZWF0ZUlPU3VyZmFjZUJhY2tp
bmdTdG9yZSBhbmQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVy
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RD
b2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRCk6IE5vdyB0aGF0IHdlJ3JlIHVzaW5nIGFuIElPU3VyZmFjZSwKKyAgICAgICAgd2Un
cmUgYmluZGluZyB0byBhIG5ldyBhdHRhY2htZW50IHBvaW50LCBHTF9URVhUVVJFX1JFQ1RBTkdM
RS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCk6IFRoaXMg
aXMgbm93IGJlaW5nIGNhbGxlZCBvbiBtYWNPUyBhbmQgaU9TLAorICAgICAgICBzbyBhZGQgYSBj
b21tZW50IHRoYXQgZXhwbGFpbnMgdGhlIGV4dHJhIHdvcmsgdGhhdCBpT1MgbmVlZHMgdG8gZG8u
IEF0IHNvbWUgZnV0dXJlCisgICAgICAgIHBvaW50IGl0IHdvdWxkIGJlIG5pY2UgdG8gbWFrZSB0
aGlzIHNsaWdodGx5IGNsZWFuZXIsIHNvIHRoYXQgaU9TIGFuZCBtYWNPUyBhcmUKKyAgICAgICAg
bW9yZSBzaW1pbGFyLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZSk6IE5ldyBmdW5jdGlvbiB0aGF0IGNhbGxzCisgICAgICAg
IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgV2ViR0xMYXllciBmdW5jdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5n
U3RvcmVGcm9tTGF5ZXIpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aXBl
QWxwaGFDaGFubmVsRnJvbVBpeGVscyk6IEJvdGggcmVhZFBpeGVscyBhbmQgZHJhd2luZyBhIFdl
YkdMIGNvbnRleHQKKyAgICAgICAgaW50byBhbm90aGVyIGJ1ZmZlciBuZWVkIHRvIGZpbGwgb3V0
IHRoZSBhbHBoYSBjaGFubmVsIGlmIHRoaXMgY29udGV4dCB3YXMKKyAgICAgICAgY3JlYXRlZCB3
aXRob3V0IG9uZSwgb3RoZXJ3aXNlIHRoZSBJT1N1cmZhY2UgYmFja2luZyBzdG9yZSB3aWxsIGhh
cHBpbHkgcHJvdmlkZQorICAgICAgICB3aGF0IG1pZ2h0IGJlIG5vbi16ZXJvIHZhbHVlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRv
QkdSQUlmTmVjZXNzYXJ5KTogQ2FsbCB0aGUgaGVscGVyIGFib3ZlLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKTogQWRkIG1vcmUgY29kZSB0byBjYWxs
IGludG8gdGhlIG1hY09TLXNwZWNpZmljCisgICAgICAgIGZ1bmN0aW9uIHRvIHVzZSBhbiBJT1N1
cmZhY2UgYXMgdGhlIGZyYW1lYnVmZmVyIHRleHR1cmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6IENhbGwgdGhlIGhlbHBlciBhYm92ZS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1t
OgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNvcHlDb250ZW50c0Zyb21MYXllcik6
IFJlcGxhY2UgdGhlIHVzZSBvZiB0aGUKKyAgICAgICAgZGVwcmVjYXRlZCBzZXRDb250ZW50c0No
YW5nZWQgd2l0aCByZWxvYWRWYWx1ZUZvcktleVBhdGguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmg6IFRoZSBtYWNPUyBpbXBsZW1lbnRhdGlvbiBub3cK
KyAgICAgICAgaW5oZXJpdHMgZnJvbSBDQUxheWVyIGRpcmVjdGx5IHJhdGhlciB0aGFuIENBT3Bl
bkdMTGF5ZXIuIEl0IGFsc28gYWRkcworICAgICAgICBhIGZldyBtZW1iZXIgdmFyaWFibGVzIHRv
IGhhbmRsZSB0aGUgSU9TdXJmYWNlcyB1c2VkIGZvciB0cmlwbGUgYnVmZmVyaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbToKKyAgICAgICAgKC1b
V2ViR0xMYXllciBpbml0V2l0aEdyYXBoaWNzQ29udGV4dDNEOl0pOiBJZiB3ZSB3ZXJlIGNyZWF0
ZWQgd2l0aG91dCBhbgorICAgICAgICBhbHBoYSBjaGFubmVsLCB0ZWxsIENBIHRoYXQgd2UncmUg
YW4gb3BhcXVlIGxheWVyLiBBbHNvIHNldCB0aGUgbGF5ZXIncyB0cmFuc2Zvcm0KKyAgICAgICAg
dG8gaWRlbnRpdHksIHNvIHRoYXQgaXQgY2FsbHMgaW50byB0aGUgY29kZSBiZWxvdyB0byBmbGlw
IHRoZSBjb250ZW50cy4KKyAgICAgICAgKC1bV2ViR0xMYXllciBzZXRUcmFuc2Zvcm06XSk6IEJl
Y2F1c2UgYW4gSU9TdXJmYWNlIGlzIHVzZWQgZm9yIHRoZSBsYXllciBjb250ZW50cywKKyAgICAg
ICAgd2UgZG9uJ3QgZ2V0IGEgY2hhbmNlIHRvIGZsaXAgdGhlIGRyYXdpbmcgdGhlIHdheSB3ZSBk
byB2aWEgdGhlIGRyYXdJbkNvbnRleHQgZGVsZWdhdGUuCisgICAgICAgIEluc3RlYWQgd2UgaGF2
ZSB0byBhcHBseSBhIHNjYWxlKDEsIC0xKSB0cmFuc2Zvcm0gb24gdG9wIG9mIHRoZSBsYXllciB0
cmFuc2Zvcm0gdG8KKyAgICAgICAgbWFrZSBzdXJlIHRoZSBsYXllciBpcyByZW5kZXJlZCByaWdo
dC13YXkgdXAuCisgICAgICAgICgtW1dlYkdMTGF5ZXIgc2V0QW5jaG9yUG9pbnQ6XSk6IERpdHRv
LCBleGNlcHQgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIGFuY2hvciBwb2ludCBpcworICAgICAgICBh
dCB0aGUgYm90dG9tIG9mIHRoZSBsYXllciwgc28gZmxpcCB0aGUgWSB2YWx1ZS4KKyAgICAgICAg
KC1bV2ViR0xMYXllciBkaXNwbGF5XSk6IFN3YXAgYmV0d2VlbiB0aGUgZHJhd2luZyBidWZmZXIg
YW5kIHRoZSBjb250ZW50cyBidWZmZXIsIGFuZAorICAgICAgICB0aGVuIGdldCBhIG5ldyBidWZm
ZXIgcmVhZHkgZm9yIGRpc3BsYXkuCisgICAgICAgIChjcmVhdGVBcHByb3ByaWF0ZUlPU3VyZmFj
ZSk6IEhlbHBlci4KKyAgICAgICAgKC1bV2ViR0xMYXllciBjcmVhdGVJT1N1cmZhY2VCYWNraW5n
U3RvcmVXaXRoV2lkdGg6aGVpZ2h0OnVzaW5nQWxwaGE6XSk6IEluaXRpYWxpemVzIHRoZQorICAg
ICAgICBJT1N1cmZhY2VzIHVzZWQgZm9yIGRyYXdpbmcgYnVmZmVycy4KKyAgICAgICAgKC1bV2Vi
R0xMYXllciBiaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNlXSk6IFRha2UgdGhl
IG5leHQgYXZhaWxhYmxlIElPU3VyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCB0aGUgZHJhd2lu
ZyBidWZmZXIgKGJpbmRpbmcgaW4gdG8gV2ViR0wgYXQgdGhlIHNhbWUgdGltZSkuCisgICAgICAg
ICgtW1dlYkdMTGF5ZXIgY29weUNHTFBpeGVsRm9ybWF0Rm9yRGlzcGxheU1hc2s6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUNHTENvbnRleHRGb3JQaXhlbEZvcm1hdDpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViR0xMYXllciBkcmF3SW5DR0xDb250ZXh0OnBpeGVs
Rm9ybWF0OmZvckxheWVyVGltZTpkaXNwbGF5VGltZTpdKTogRGVsZXRlZC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbTogUmVtb3ZlIHRoZSBkZWZpbml0aW9u
IG9mIHJlbG9hZFZhbHVlRm9yS2V5UGF0aC4KKwogMjAxNy0wOS0yNSAgQ2FybG9zIEFsYmVydG8g
TG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBCdWlsZGluZyByZWxl
YXNlIHdpdGggLURMT0dfRElTQUJMRUQ9MCBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNDE0
ZDkwMTgxNzhmOTA4NWM5ZTZiNDNmOTc2MzVmZmRmYmIzMmM1Ni4uNTg0MjQyODdjMTg0NGU2NmZh
MDRkOGQ5MjllZjY0MGViYTc3NGI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTctMTAtMDQgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAg
IExvdHMgb2YgbWlzc2luZyBmcmFtZXMgaW4gWW91VHViZTM2MCB3aGVuIGZ1bGxzY3JlZW4gb24g
TWFjQm9vaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc3OTAzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzI3MzMwMD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgcmVsb2FkVmFsdWVGb3JLZXlQ
YXRoIHRvIHJlcGxhY2Ugc2V0Q29udGVudHNDaGFuZ2VkIG9uIENBTGF5ZXIuCisKKyAgICAgICAg
KiBwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaDoKKwogMjAxNy0wOS0yNSAgVGltb3RoeSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBwcm9ncmVz
cyBvbiBnZXR0aW5nIE1hYyBDTWFrZSBidWlsZGluZyBhZ2FpbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oCmluZGV4IDgzYjIzM2EyYTIwMzFi
ZjMwZmM3Yjc3YTAwZWQ2OGRhYTE2ODNiYmEuLjJhMTkwNmJhNTZiOGQxNjc4ZTE3NDBjZGRkMzM4
OTljMWRjMThkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29h
L1F1YXJ0ekNvcmVTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9R
dWFydHpDb3JlU1BJLmgKQEAgLTkxLDcgKzkxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0NBUmVuZGVy
Q29udGV4dCBDQVJlbmRlckNvbnRleHQ7CiAtICh2b2lkKXNldENvbnRleHRJZDoodWludDMyX3Qp
Y29udGV4dElEOwogLSAoQ0dTaXplKXNpemU7CiAtICh2b2lkICopcmVnaW9uQmVpbmdEcmF3bjsK
LS0gKHZvaWQpc2V0Q29udGVudHNDaGFuZ2VkOworLSAodm9pZClyZWxvYWRWYWx1ZUZvcktleVBh
dGg6KE5TU3RyaW5nICopa2V5UGF0aDsKIEBwcm9wZXJ0eSBCT09MIGFsbG93c0dyb3VwQmxlbmRp
bmc7CiBAcHJvcGVydHkgQk9PTCBjYW5EcmF3Q29uY3VycmVudGx5OwogQHByb3BlcnR5IEJPT0wg
Y29udGVudHNPcGFxdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA2NjZkZDg0OGU5ZTJmNmM5NzQyOTgxZWU2Y2Q3
ODUyMjhjY2FiOGViLi5iMmYxZGE2YmYzNWI2ZmUyZmFhYmY5ZTg5MjhjZWViMWU4ZWFhNmVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKQEAgLTc0Nyw3ICs3NDcsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRPYmo7IH0KLSAgICBQbGF0Zm9ybTNET2JqZWN0
IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmJvOyB9CisgICAgUGxhdGZvcm0z
RE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KICAg
ICBDQUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQogI2Vsc2UKICAgICBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKTsKQEAgLTExNDcsMTIg
KzExNDcsMTYgQEAgcHVibGljOgogICAgIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAgICAgYm9vbCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9D
YW52YXMoSW1hZ2VCdWZmZXIqKTsKIAotI2lmIFBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIGVuZFBhaW50KCk7CiAjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykK
KyAgICB2b2lkIGNyZWF0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShpbnQgd2lkdGgsIGludCBoZWln
aHQpOworICAgIHZvaWQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxh
eWVyKCk7CiAgICAgdm9pZCB1cGRhdGVDR0xDb250ZXh0KCk7CiAjZW5kaWYKKwogICAgIHZvaWQg
c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCk7CiAKICAgICBHcmFwaGljc0NvbnRleHQzRFBvd2Vy
UHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNB
TGF5ZXJDb2NvYS5tbQppbmRleCA1NmVkMDA5Y2YwOWZhMjZlYzA2ODYxNThjNTRmM2JmOWQ0OWRk
MGVlLi42OGRjNTc3MTg3NDI1OTBmN2UyYThlY2ViNmM0YjVjZWUxNGI4YTg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5
ZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2Nv
YS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbQpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyQ29jb2E6OmNvcHlDb250ZW50c0Zyb21MYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxh
eWVyKQogICAgIGlmIChbbV9sYXllciBjb250ZW50c10gIT0gW2NhTGF5ZXIgY29udGVudHNdKQog
ICAgICAgICBbbV9sYXllciBzZXRDb250ZW50czpbY2FMYXllciBjb250ZW50c11dOwogICAgIGVs
c2UKLSAgICAgICAgW21fbGF5ZXIgc2V0Q29udGVudHNDaGFuZ2VkXTsKKyAgICAgICAgW21fbGF5
ZXIgcmVsb2FkVmFsdWVGb3JLZXlQYXRoOkAiY29udGVudHMiXTsKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCmluZGV4IDEz
MjU3ODE1YmEwOWYzM2NiODczZDExOTliYTVlMjdjZjVmNmI0MzkuLjFlOGEyMTg5YjRmMDI1YTVl
YmJlMjdjMzFlZmFjNWE1MjI5NjEzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5t
bQpAQCAtNDc5LDIwICs0NzksMjIgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmQKICAgICAgICAg
OjpnbEVuYWJsZShHTF9NVUxUSVNBTVBMRSk7CiAjZW5kaWYKIAorICAgIC8vIENyZWF0ZSB0aGUg
dGV4dHVyZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGZyYW1lYnVmZmVyLgogI2lmIFBMQVRG
T1JNKElPUykKICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKICNlbHNl
Ci0gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50bwogICAgIDo6Z2xHZW5UZXh0
dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIDApOworICAgIC8vIFdlIGJpbmQgdG8gR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhUIHJhdGhl
ciB0aGFuIFRFWFRVUkVfMkQgYmVjYXVzZQorICAgIC8vIHRoYXQncyB3aGF0IGlzIHJlcXVpcmVk
IGZvciBhIHRleHR1cmUgYmFja2VkIGJ5IElPU3VyZmFjZS4KKyAgICA6OmdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwg
R0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIDApOwogI2VuZGlmCiAKLSAgICAvLyBjcmVhdGUg
YW4gRkJPCisgICAgLy8gQ3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QuCiAgICAgOjpnbEdl
bkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwogICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CiAKQEAgLTUwMCw3ICs1MDIsNyBAQCBHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVz
IGF0dHJzLCBIb3N0V2luZAogICAgIGlmICghbV9hdHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMu
c3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkKICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKIAotICAgIC8vIGNyZWF0ZSBhbiBtdWx0aXNh
bXBsZSBGQk8KKyAgICAvLyBJZiBuZWNlc3NhcnksIGNyZWF0ZSBhbm90aGVyIGZyYW1lYnVmZmVy
IGZvciB0aGUgbXVsdGlzYW1wbGUgcmVzdWx0cy4KICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMp
IHsKICAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7
CiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211
bHRpc2FtcGxlRkJPKTsKQEAgLTY1NCwyMCArNjU2LDM1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNoZWNrR1BVU3RhdHVzKCkKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oSU9TKQogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykKICAgICAgICAgcmVzb2x2ZU11bHRpc2Ft
cGxpbmdJZk5lY2Vzc2FyeSgpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBUaGlzIGlzIHRo
ZSBwbGFjZSB3aGVyZSB3ZSBhY3R1YWxseSBwdXNoIG91ciBjdXJyZW50IHJlbmRlcmluZworICAg
IC8vIHJlc3VsdHMgdG8gdGhlIGNvbXBvc2l0b3Igb24gaU9TLiBPbiBtYWNPUyBpdCBjb21lcyBm
cm9tIHRoZQorICAgIC8vIGNhbGxpbmcgZnVuY3Rpb24sIHdoaWNoIGlzIGluc2lkZSBXZWJHTExh
eWVyLgogICAgIDo6Z2xGbHVzaCgpOwogICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRF
UkJVRkZFUiwgbV90ZXh0dXJlKTsKICAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPihtX2Nv
bnRleHRPYmopIHByZXNlbnRSZW5kZXJidWZmZXI6R0xfUkVOREVSQlVGRkVSXTsKICAgICBbRUFH
TENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKLX0KICNlbmRpZgorfQogCiAjaWYgUExB
VEZPUk0oTUFDKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlSU9TdXJmYWNlQmFja2lu
Z1N0b3JlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBMT0coV2ViR0wsICJUZWxsIHRo
ZSBXZWJHTCBsYXllciB0byBjcmVhdGUgSU9TdXJmYWNlIGJhY2tpbmcgc3RvcmUuICglcCkiLCB0
aGlzKTsKKyAgICBbbV93ZWJHTExheWVyIGNyZWF0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhX
aWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0IHVzaW5nQWxwaGE6bV9hdHRycy5hbHBoYV07Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdT
dG9yZUZyb21MYXllcigpCit7CisgICAgTE9HKFdlYkdMLCAiVGVsbCB0aGUgV2ViR0wgbGF5ZXIg
dG8gYmluZCB0byB0aGUgZnJhbWVidWZmZXIuICglcCkiLCB0aGlzKTsKKyAgICBbbV93ZWJHTExh
eWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdOworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1cGRhdGVDR0xDb250ZXh0KCkKIHsKICAgICBpZiAoIW1fY29udGV4
dE9iaikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkdMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkdMTGF5ZXIuaAppbmRleCAwZTAyZTE3N2RiMDQ2NjY0YTJiMDQ1M2I4NTRhMmEzYTFiMzE5ZGIx
Li4yZjhmYmZhZjliZWRlNWQ2ZmQwZDgzYjUwYmVhMzljODZjYWNmN2M2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oCkBAIC0y
NSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW1wb3J0ICJJT1N1cmZhY2UuaCIKICNp
bXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zMiwxNCArMzMsMjIgQEAgY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogfQogCi0jaWYgUExBVEZPUk0oSU9TKQotQGludGVyZmFjZSBXZWJHTExheWVyIDog
Q0FFQUdMTGF5ZXIKKyNpZiBQTEFURk9STShNQUMpCitAaW50ZXJmYWNlIFdlYkdMTGF5ZXIgOiBD
QUxheWVyCiAjZWxzZQotQGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FPcGVuR0xMYXllcgorQGlu
dGVyZmFjZSBXZWJHTExheWVyIDogQ0FFQUdMTGF5ZXIKICNlbmRpZgogewogICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEKiBfY29udGV4dDsKICAgICBmbG9hdCBfZGV2aWNlUGl4ZWxSYXRp
bzsKKyNpZiBQTEFURk9STShNQUMpCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3Vy
ZmFjZT4gX2NvbnRlbnRzQnVmZmVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1
cmZhY2U+IF9kcmF3aW5nQnVmZmVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1
cmZhY2U+IF9zcGFyZUJ1ZmZlcjsKKyAgICBpbnQgX3dpZHRoOworICAgIGludCBfaGVpZ2h0Owor
ICAgIEJPT0wgX3VzaW5nQWxwaGE7CisjZW5kaWYKIH0KIAogQHByb3BlcnR5IChub25hdG9taWMp
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0OwpAQCAtNDgsNSArNTcsMTAgQEAg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAKIC0gKENHSW1hZ2VSZWYpY29weUltYWdlU25hcHNo
b3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3BhY2U7CiAKKyNpZiBQTEFU
Rk9STShNQUMpCistICh2b2lkKWNyZWF0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhXaWR0aDoo
aW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCB1c2luZ0FscGhhOihCT09MKXVzaW5nQWxwaGE7
CistICh2b2lkKWJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2U7CisjZW5kaWYK
KwogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJHTExheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViR0xMYXllci5tbQppbmRleCAzNmE3YzQ5YmNlMWQyNjNmNGJjZDM4ZTMwZmM0OGMwYmYz
ZDFlZTc0Li5kYTZkZjI3MTNlMzQ4NjFlMzcwZjQwMGU2MGJiNzU5MzEwNjgwNmQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIu
bW0KQEAgLTMzLDEwICszMywxMSBAQAogI2ltcG9ydCAiR3JhcGhpY3NMYXllci5oIgogI2ltcG9y
dCAiR3JhcGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKyNpbXBv
cnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgogI2ltcG9ydCA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmICFQTEFURk9STShJT1MpCisj
aWYgUExBVEZPUk0oTUFDKQogI2ltcG9ydCA8T3BlbkdML09wZW5HTC5oPgogI2ltcG9ydCA8T3Bl
bkdML2dsLmg+CiAjZW5kaWYKQEAgLTUzLDExMyArNTQsMzcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBfZGV2aWNlUGl4ZWxSYXRpbyA9
IGNvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuZGV2aWNlUGl4ZWxSYXRpbzsKICNpZiBQ
TEFURk9STShNQUMpCisgICAgaWYgKCFjb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFs
cGhhKQorICAgICAgICBzZWxmLm9wYXF1ZSA9IFlFUzsKKyAgICBzZWxmLnRyYW5zZm9ybSA9IENB
VHJhbnNmb3JtM0RJZGVudGl0eTsKICAgICBzZWxmLmNvbnRlbnRzU2NhbGUgPSBfZGV2aWNlUGl4
ZWxSYXRpbzsKLSAgICBzZWxmLmNvbG9yc3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLShDR0xQaXhl
bEZvcm1hdE9iailjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JEaXNwbGF5TWFzazoodWludDMyX3QpbWFz
awotewotICAgIC8vIFdlJ3JlIGJhc2ljYWxseSBjb3B5aW5nIHRoZSBwaXhlbCBmb3JtYXQgb2Jq
ZWN0IGZyb20gdGhlIGV4aXN0aW5nCi0gICAgLy8gV2ViR0wgY29udGV4dCwgc28gd2UgZG9uJ3Qg
bmVlZCB0byB1c2UgdGhlIGRpc3BsYXkgbWFzay4KLSAgICBVTlVTRURfUEFSQU0obWFzayk7Ci0K
LSAgICBDR0xQaXhlbEZvcm1hdE9iaiB3ZWJnbFBpeGVsRm9ybWF0ID0gQ0dMR2V0UGl4ZWxGb3Jt
YXQoX2NvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0KLSAgICBWZWN0b3I8
Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+IGF0dHJpYnM7Ci0gICAgR0xpbnQgdmFsdWU7Ci0KLSAg
ICBDR0xEZXNjcmliZVBpeGVsRm9ybWF0KHdlYmdsUGl4ZWxGb3JtYXQsIDAsIGtDR0xQRkFDb2xv
clNpemUsICZ2YWx1ZSk7Ci0gICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUNvbG9yU2l6ZSk7Ci0g
ICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KHZh
bHVlKSk7Ci0KLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBkZXB0aCBzaXplIHNp
bmNlIHdlJ3JlIG9ubHkKLSAgICAvLyB1c2luZyB0aGlzIGNvbnRleHQgYXMgYSAyZCBibGl0IGRl
c3RpbmF0aW9uIGZvciB0aGUgV2ViR0wgRkJPLgotICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFE
ZXB0aFNpemUpOwotICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlPigwKSk7Ci0KLSAgICBDR0xEZXNjcmliZVBpeGVsRm9ybWF0KHdlYmdsUGl4ZWxG
b3JtYXQsIDAsIGtDR0xQRkFBbGxvd09mZmxpbmVSZW5kZXJlcnMsICZ2YWx1ZSk7Ci0gICAgaWYg
KHZhbHVlKQotICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQWxsb3dPZmZsaW5lUmVuZGVy
ZXJzKTsKLQotICAgIENHTERlc2NyaWJlUGl4ZWxGb3JtYXQod2ViZ2xQaXhlbEZvcm1hdCwgMCwg
a0NHTFBGQUFjY2VsZXJhdGVkLCAmdmFsdWUpOwotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgYXR0
cmlicy5hcHBlbmQoa0NHTFBGQUFjY2VsZXJhdGVkKTsKLQotICAgIENHTERlc2NyaWJlUGl4ZWxG
b3JtYXQod2ViZ2xQaXhlbEZvcm1hdCwgMCwga0NHTFBGQU9wZW5HTFByb2ZpbGUsICZ2YWx1ZSk7
Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFPcGVuR0xQ
cm9maWxlKTsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3Jt
YXRBdHRyaWJ1dGU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgYXR0cmlicy5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDApKTsKLQotICAgIENHTFBpeGVsRm9ybWF0
T2JqIHBpeGVsRm9ybWF0OwotICAgIEdMaW50IG51bVBpeGVsRm9ybWF0cyA9IDA7Ci0gICAgQ0dM
Q2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdCwgJm51bVBpeGVs
Rm9ybWF0cyk7Ci0KLSAgICBBU1NFUlQocGl4ZWxGb3JtYXQpOwotICAgIEFTU0VSVChudW1QaXhl
bEZvcm1hdHMpOwotCi0gICAgcmV0dXJuIHBpeGVsRm9ybWF0OwotfQotCi0tKENHTENvbnRleHRP
YmopY29weUNHTENvbnRleHRGb3JQaXhlbEZvcm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxG
b3JtYXQKKyNpZiBQTEFURk9STShNQUMpCisvLyBPbiBNYWMsIHdlIG5lZWQgdG8gZmxpcCB0aGUg
bGF5ZXIgdG8gdGFrZSBpbnRvIGFjY291bnQKKy8vIHRoYXQgdGhlIElPU3VyZmFjZSBwcm92aWRl
cyBjb250ZW50IGluIFktdXAuIFRoaXMKKy8vIG1lYW5zIHRoYXQgYW55IGluY29taW5nIHRyYW5z
Zm9ybSAodW5saWtlbHksIHNpbmNlIHRoaXMKKy8vIGlzIGEgY29udGVudHMgbGF5ZXIpIGFuZCBh
bmNob3IgcG9pbnQgbXVzdCBhZGQgYQorLy8gWSBzY2FsZSBvZiAtMSBhbmQgbWFrZSBzdXJlIHRo
ZSB0cmFuc2Zvcm0gaGFwcGVucyBmcm9tCisvLyB0aGUgdG9wLgorCistICh2b2lkKXNldFRyYW5z
Zm9ybTooQ0FUcmFuc2Zvcm0zRCl0CiB7Ci0gICAgQ0dMQ29udGV4dE9iaiBjb250ZXh0T2JqOwot
ICAgIENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXQsIF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEKCksICZjb250ZXh0T2JqKTsKLSAgICByZXR1cm4gY29udGV4dE9iajsKKyAg
ICBbc3VwZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RTY2FsZSh0LCAxLiwgLTEuLCAxLild
OwogfQogCi0tKHZvaWQpZHJhd0luQ0dMQ29udGV4dDooQ0dMQ29udGV4dE9iailnbENvbnRleHQg
cGl4ZWxGb3JtYXQ6KENHTFBpeGVsRm9ybWF0T2JqKXBpeGVsRm9ybWF0IGZvckxheWVyVGltZToo
Q0ZUaW1lSW50ZXJ2YWwpdGltZUludGVydmFsIGRpc3BsYXlUaW1lOihjb25zdCBDVlRpbWVTdGFt
cCAqKXRpbWVTdGFtcAorLSAodm9pZClzZXRBbmNob3JQb2ludDooQ0dQb2ludClwCiB7Ci0gICAg
aWYgKCFfY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2NvbnRleHQtPnByZXBhcmVU
ZXh0dXJlKCk7Ci0KLSAgICBDR0xTZXRDdXJyZW50Q29udGV4dChnbENvbnRleHQpOwotCi0gICAg
Q0dSZWN0IGZyYW1lID0gW3NlbGYgZnJhbWVdOwotICAgIGZyYW1lLnNpemUud2lkdGggKj0gX2Rl
dmljZVBpeGVsUmF0aW87Ci0gICAgZnJhbWUuc2l6ZS5oZWlnaHQgKj0gX2RldmljZVBpeGVsUmF0
aW87Ci0KLSAgICAvLyBkcmF3IHRoZSBGQk8gaW50byB0aGUgbGF5ZXIKLSAgICBnbFZpZXdwb3J0
KDAsIDAsIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKLSAgICBnbE1hdHJp
eE1vZGUoR0xfUFJPSkVDVElPTik7Ci0gICAgZ2xMb2FkSWRlbnRpdHkoKTsKLSAgICBnbE9ydGhv
KC0xLCAxLCAtMSwgMSwgLTEsIDEpOwotICAgIGdsTWF0cml4TW9kZShHTF9NT0RFTFZJRVcpOwot
ICAgIGdsTG9hZElkZW50aXR5KCk7Ci0KLSAgICBnbEVuYWJsZShHTF9URVhUVVJFXzJEKTsKLSAg
ICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIF9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUo
KSk7Ci0KLSAgICBnbEJlZ2luKEdMX1RSSUFOR0xFX0ZBTik7Ci0gICAgICAgIGdsVGV4Q29vcmQy
ZigwLCAwKTsKLSAgICAgICAgZ2xWZXJ0ZXgyZigtMSwgLTEpOwotICAgICAgICBnbFRleENvb3Jk
MmYoMSwgMCk7Ci0gICAgICAgIGdsVmVydGV4MmYoMSwgLTEpOwotICAgICAgICBnbFRleENvb3Jk
MmYoMSwgMSk7Ci0gICAgICAgIGdsVmVydGV4MmYoMSwgMSk7Ci0gICAgICAgIGdsVGV4Q29vcmQy
ZigwLCAxKTsKLSAgICAgICAgZ2xWZXJ0ZXgyZigtMSwgMSk7Ci0gICAgZ2xFbmQoKTsKLQotICAg
IGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgZ2xEaXNhYmxlKEdMX1RFWFRV
UkVfMkQpOwotCi0gICAgLy8gQ2FsbCBzdXBlciB0byBmaW5hbGl6ZSB0aGUgZHJhd2luZy4gQnkg
ZGVmYXVsdCBhbGwgaXQgZG9lcyBpcyBjYWxsIGdsRmx1c2goKS4KLSAgICBbc3VwZXIgZHJhd0lu
Q0dMQ29udGV4dDpnbENvbnRleHQgcGl4ZWxGb3JtYXQ6cGl4ZWxGb3JtYXQgZm9yTGF5ZXJUaW1l
OnRpbWVJbnRlcnZhbCBkaXNwbGF5VGltZTp0aW1lU3RhbXBdOworICAgIFtzdXBlciBzZXRBbmNo
b3JQb2ludDpDR1BvaW50TWFrZShwLngsIDEuMCAtIHAueSldOwogfQorI2VuZGlmCiAKIHN0YXRp
YyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUg
Ki8pCiB7CiAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkICo+KGRhdGEpKTsKIH0KLSNlbmRp
ZgogCiAtKENHSW1hZ2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xv
clNwYWNlUmVmKWNvbG9yU3BhY2UKIHsKQEAgLTIwMywxNyArMTI4LDYzIEBAIHN0YXRpYyB2b2lk
IGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAg
ICAgaWYgKCFfY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgUExBVEZPUk0oSU9TKQog
ICAgIF9jb250ZXh0LT5lbmRQYWludCgpOwotI2Vsc2UKLSAgICBbc3VwZXIgZGlzcGxheV07CisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CisgICAg
aWYgKF9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIHN0ZDo6c3dhcChfY29udGVudHNCdWZmZXIs
IF9kcmF3aW5nQnVmZmVyKTsKKyAgICAgICAgc2VsZi5jb250ZW50cyA9IF9jb250ZW50c0J1ZmZl
ci0+YXNMYXllckNvbnRlbnRzKCk7CisgICAgICAgIFtzZWxmIHJlbG9hZFZhbHVlRm9yS2V5UGF0
aDpAImNvbnRlbnRzIl07CisgICAgICAgIFtzZWxmIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWls
YWJsZVN1cmZhY2VdOworICAgIH0KICNlbmRpZgorCiAgICAgX2NvbnRleHQtPm1hcmtMYXllckNv
bXBvc2l0ZWQoKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gUGxhdGZvcm1DQUxheWVy
OjpwbGF0Zm9ybUNBTGF5ZXIoc2VsZik7CiAgICAgaWYgKGxheWVyICYmIGxheWVyLT5vd25lcigp
KQogICAgICAgICBsYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5
KGxheWVyKTsKIH0KIAorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+
IGNyZWF0ZUFwcHJvcHJpYXRlSU9TdXJmYWNlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAg
ICBhdXRvIHN1cmZhY2UgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShJbnRTaXplKHdpZHRo
LCBoZWlnaHQpLCBzUkdCQ29sb3JTcGFjZVJlZigpKTsKKyAgICByZXR1cm4gc3VyZmFjZTsKK30K
KworLSAodm9pZCljcmVhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoV2lkdGg6KGludCl3aWR0
aCBoZWlnaHQ6KGludCloZWlnaHQgdXNpbmdBbHBoYTooQk9PTCl1c2luZ0FscGhhCit7CisgICAg
X3dpZHRoID0gd2lkdGg7CisgICAgX2hlaWdodCA9IGhlaWdodDsKKyAgICBfdXNpbmdBbHBoYSA9
IHVzaW5nQWxwaGE7CisgICAgX2NvbnRlbnRzQnVmZmVyID0gY3JlYXRlQXBwcm9wcmlhdGVJT1N1
cmZhY2Uod2lkdGgsIGhlaWdodCk7CisgICAgX2RyYXdpbmdCdWZmZXIgPSBjcmVhdGVBcHByb3By
aWF0ZUlPU3VyZmFjZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBBU1NFUlQoX2NvbnRlbnRzQnVmZmVy
KTsKKyAgICBBU1NFUlQoX2RyYXdpbmdCdWZmZXIpOworfQorCistICh2b2lkKWJpbmRGcmFtZWJ1
ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2UKK3sKKyAgICBHQzNEZW51bSB0ZXh0dXJlID0gX2Nv
bnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKKworICAgIGlmIChfZHJhd2luZ0J1ZmZlciAmJiBfZHJh
d2luZ0J1ZmZlci0+aXNJblVzZSgpKSB7CisgICAgICAgIGlmICghX3NwYXJlQnVmZmVyKQorICAg
ICAgICAgICAgX3NwYXJlQnVmZmVyID0gY3JlYXRlQXBwcm9wcmlhdGVJT1N1cmZhY2UoX3dpZHRo
LCBfaGVpZ2h0KTsKKyAgICAgICAgc3RkOjpzd2FwKF9kcmF3aW5nQnVmZmVyLCBfc3BhcmVCdWZm
ZXIpOworICAgIH0KKworICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UgPSBfZHJhd2luZ0J1ZmZl
ci0+c3VyZmFjZSgpOworICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gX3VzaW5nQWxwaGEg
PyBHTF9SR0JBIDogR0xfUkdCOworCisgICAgLy8gTGluayB0aGUgSU9TdXJmYWNlIHRvIHRoZSB0
ZXh0dXJlLgorI2lmbmRlZiBOREVCVUcKKyAgICBDR0xFcnJvciBlcnJvciA9CisjZW5kaWYKKyAg
ICBDR0xUZXhJbWFnZUlPU3VyZmFjZTJEKF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKCksIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgaW50ZXJuYWxGb3JtYXQsIF93aWR0aCwg
X2hlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBpb1N1cmZhY2Us
IDApOworICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7Cit9CisKIEBlbmQKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJMYXllci5tbQppbmRleCAzZmM3NmM5YzQwNDU4NzIwMGQ2NzNkZmNmMWMwNWJl
ZmRkMjNkOTQzLi45ODMzOGFiYmEzYWVmOWNjYTE3NGM3ZTZjZGE3ZDVkYTI5MzNmZjQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCkBA
IC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJHcmFwaGljc0xheWVyQ0EuaCIKICNpbXBvcnQgIlBs
YXRmb3JtQ0FMYXllci5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1w
b3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KICNpbXBvcnQgPHd0Zi9TZXRGb3JT
Y29wZS5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMzgsMTAgKzM5LDYgQEAKICNpbXBvcnQg
IldlYkNvcmVUaHJlYWQuaCIKICNlbmRpZgogCi1AaW50ZXJmYWNlIENBTGF5ZXIoV2ViQ29yZUNB
TGF5ZXJQcml2YXRlKQotLSAodm9pZClyZWxvYWRWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICop
a2V5UGF0aDsKLUBlbmQKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNpZiBQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCA1NTNhODk3
MGQzMDRkMWNhNmI0N2ZiZjQ1MjM0MjNlZTcxZjM5NjNjLi5hMDFiZWYzZmRhYmNkYTE5NDQxM2M1
OGNiYjNiYzYzN2E1YzQ0ZDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5j
cHAKQEAgLTI5LDE2ICsyOSwxNSBAQAogI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKwogI2lmIFBMQVRGT1JNKElPUykKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRElPUy5oIgogI2VuZGlmCi0KICNpbmNsdWRlICJFeHRl
bnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6
ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVGVtcG9yYXJ5T3Bl
bkdMU2V0dGluZy5oIgotCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNzdHJpbmc+
CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTcwLDYgKzY5LDE1IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAorc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCit7CisgICAgLy8gV2UgY2Fu
IGFzc3VtZSB0aGlzIGRvZXNuJ3Qgb3ZlcmZsb3cgYmVjYXVzZSB0aGUgY2FsbGluZyBmdW5jdGlv
bnMKKyAgICAvLyB1c2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgIGludCB0b3RhbEJ5dGVzID0g
d2lkdGggKiBoZWlnaHQgKiA0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsg
aSArPSA0KQorICAgICAgICBwaXhlbHNbaSArIDNdID0gMjU1OworfQorCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCiB7CiAg
ICAgLy8gTlZJRElBIGRyaXZlcnMgaGF2ZSBhIGJ1ZyB3aGVyZSBjYWxsaW5nIHJlYWRQaXhlbHMg
aW4gQkdSQSBjYW4gcmV0dXJuIHRoZSB3cm9uZyB2YWx1ZXMgZm9yIHRoZSBhbHBoYSBjaGFubmVs
IHdoZW4gdGhlIGFscGhhIGlzIG9mZiBmb3IgdGhlIGNvbnRleHQuCkBAIC05OCw2ICsxMDYsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5l
Y2Vzc2FyeShpbnQgeCwgaW50IHksIGludAogI2VuZGlmCiAgICAgfSBlbHNlCiAgICAgICAgIDo6
Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lO
VF84XzhfOF84X1JFViwgcGl4ZWxzKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1f
YXR0cnMuYWxwaGEpCisgICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKHdpZHRoLCBo
ZWlnaHQsIHBpeGVscyk7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFs
aWRhdGVBdHRyaWJ1dGVzKCkKQEAgLTE3MCw2ICsxODMsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7CiAgICAgOjpnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVO
REVSQlVGRkVSLCBtX3RleHR1cmUpOwogICAgIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJh
d2FibGUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CisjZWxpZiBQTEFURk9STShN
QUMpCisgICAgY3JlYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKHdpZHRoLCBoZWlnaHQpOworICAg
IHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpOworICAgIDo6
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBtX3RleHR1cmUsIDApOwog
I2Vsc2UKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKICAg
ICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKQEAg
LTQ0Miw2ICs0NTksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICA6OmdsUmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwogICAgIGlmICht
X2F0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
CiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAo
IW1fYXR0cnMuYWxwaGEgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCBm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJHUkEpICYmIChtX3N0YXRlLmJvdW5kRkJPID09
IG1fZmJvIHx8IChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pKSkKKyAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMod2lkdGgs
IGhlaWdodCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpKTsKKyNlbmRpZgogfQog
CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322848</attachid>
            <date>2017-10-05 10:23:17 -0700</date>
            <delta_ts>2017-10-05 10:26:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177903-20171005102317.patch</filename>
            <type>text/plain</type>
            <size>24469</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ3ZGQ2MjAxNzA5ODEy
NTk2ZTU1NzQ1NWI1ZDg1NWJkYmFkZTI3Yi4uMGEyMTQzOGIwNjE0MDNiMTJiYTYwNTM2NTg2N2Iz
NDY5NWE5YjY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE3LTEwLTA0ICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBMb3RzIG9mIG1pc3NpbmcgZnJh
bWVzIGluIFlvdVR1YmUzNjAgd2hlbiBmdWxsc2NyZWVuIG9uIE1hY0Jvb2sKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkwMworICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMzMyNzMzMDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgT3VyIGNvbXBvc2l0aW5nIHBhdGggZm9yIFdlYkdMIG9uIG1hY09TIHdh
cyB0b28gc2xvdywgcmVxdWlyaW5nIGEgY29weQorICAgICAgICBvZiB0aGUgZnJhbWVidWZmZXIg
aW50byBhbm90aGVyIEdMIGNvbnRleHQuIFJlcGxhY2UgdGhpcyBieSBoYXZpbmcKKyAgICAgICAg
V2ViR0wgcmVuZGVyIGludG8gYSB0ZXh0dXJlIHRoYXQgaXMgYmFja2VkIGJ5IGFuIElPU3VyZmFj
ZSwgYW5kIHRoZW4KKyAgICAgICAgc2V0IHRoZSBXZWJHTExheWVyIHRvIHVzZSB0aGUgSU9TdXJm
YWNlIGFzIGNvbnRlbnRzLgorCisgICAgICAgIENvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIFdlYkdM
IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUg
Y29uc3QpOiBXZSBubyBsb25nZXIgdXNlIHRoZQorICAgICAgICBmcmFtZWJ1ZmZlciBvYmplY3Qg
b3V0c2lkZSB0aGUgY2xhc3MsIHNvIGNoYW5nZSB0aGlzIHRvIHJldHVybiB0aGUgR0wgdGV4dHVy
ZQorICAgICAgICB0aGF0IHRoZSBmcmFtZWJ1ZmZlciBpcyByZW5kZXJpbmcgaW4gdG8uIEl0IHdh
cyBraW5kLW9mIHN0cmFuZ2UgdGhhdCBpdCB3YXMKKyAgICAgICAgbmFtZWQgdGhpcyB3YXkgb3Jp
Z2luYWxseS4KKyAgICAgICAgQWxzbyBtYWtlIGVuZFBhaW50IGF2YWlsYWJsZSBvbiBtYWNPUywg
YW5kIGFkZCB0aGUgZGVmaW5pdGlvbnMgZm9yCisgICAgICAgIGNyZWF0ZUlPU3VyZmFjZUJhY2tp
bmdTdG9yZSBhbmQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVy
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RD
b2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRCk6IE5vdyB0aGF0IHdlJ3JlIHVzaW5nIGFuIElPU3VyZmFjZSwKKyAgICAgICAgd2Un
cmUgYmluZGluZyB0byBhIG5ldyBhdHRhY2htZW50IHBvaW50LCBHTF9URVhUVVJFX1JFQ1RBTkdM
RS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCk6IFRoaXMg
aXMgbm93IGJlaW5nIGNhbGxlZCBvbiBtYWNPUyBhbmQgaU9TLAorICAgICAgICBzbyBhZGQgYSBj
b21tZW50IHRoYXQgZXhwbGFpbnMgdGhlIGV4dHJhIHdvcmsgdGhhdCBpT1MgbmVlZHMgdG8gZG8u
IEF0IHNvbWUgZnV0dXJlCisgICAgICAgIHBvaW50IGl0IHdvdWxkIGJlIG5pY2UgdG8gbWFrZSB0
aGlzIHNsaWdodGx5IGNsZWFuZXIsIHNvIHRoYXQgaU9TIGFuZCBtYWNPUyBhcmUKKyAgICAgICAg
bW9yZSBzaW1pbGFyLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9j
YXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKTogTmV3IGZ1bmN0aW9uIHRoYXQgY2FsbHMKKyAgICAg
ICAgaW50byB0aGUgY29ycmVzcG9uZGluZyBXZWJHTExheWVyIGZ1bmN0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tp
bmdTdG9yZUZyb21MYXllcik6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondp
cGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKTogQm90aCByZWFkUGl4ZWxzIGFuZCBkcmF3aW5nIGEg
V2ViR0wgY29udGV4dAorICAgICAgICBpbnRvIGFub3RoZXIgYnVmZmVyIG5lZWQgdG8gZmlsbCBv
dXQgdGhlIGFscGhhIGNoYW5uZWwgaWYgdGhpcyBjb250ZXh0IHdhcworICAgICAgICBjcmVhdGVk
IHdpdGhvdXQgb25lLCBvdGhlcndpc2UgdGhlIElPU3VyZmFjZSBiYWNraW5nIHN0b3JlIHdpbGwg
aGFwcGlseSBwcm92aWRlCisgICAgICAgIHdoYXQgbWlnaHQgYmUgbm9uLXplcm8gdmFsdWVzLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0
VG9CR1JBSWZOZWNlc3NhcnkpOiBDYWxsIHRoZSBoZWxwZXIgYWJvdmUuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOiBBZGQgbW9yZSBjb2RlIHRvIGNh
bGwgaW50byB0aGUgbWFjT1Mtc3BlY2lmaWMKKyAgICAgICAgZnVuY3Rpb24gdG8gdXNlIGFuIElP
U3VyZmFjZSBhcyB0aGUgZnJhbWVidWZmZXIgdGV4dHVyZS4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKTogQ2FsbCB0aGUgaGVscGVyIGFib3ZlLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2Eu
bW06CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y29weUNvbnRlbnRzRnJvbUxheWVy
KTogUmVwbGFjZSB0aGUgdXNlIG9mIHRoZQorICAgICAgICBkZXByZWNhdGVkIHNldENvbnRlbnRz
Q2hhbmdlZCB3aXRoIHJlbG9hZFZhbHVlRm9yS2V5UGF0aC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaDogVGhlIG1hY09TIGltcGxlbWVudGF0aW9uIG5v
dworICAgICAgICBpbmhlcml0cyBmcm9tIENBTGF5ZXIgZGlyZWN0bHkgcmF0aGVyIHRoYW4gQ0FP
cGVuR0xMYXllci4gSXQgYWxzbyBhZGRzCisgICAgICAgIGEgZmV3IG1lbWJlciB2YXJpYWJsZXMg
dG8gaGFuZGxlIHRoZSBJT1N1cmZhY2VzIHVzZWQgZm9yIHRyaXBsZSBidWZmZXJpbmcuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tOgorICAgICAgICAo
LVtXZWJHTExheWVyIGluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6XSk6IElmIHdlIHdlcmUgY3Jl
YXRlZCB3aXRob3V0IGFuCisgICAgICAgIGFscGhhIGNoYW5uZWwsIHRlbGwgQ0EgdGhhdCB3ZSdy
ZSBhbiBvcGFxdWUgbGF5ZXIuIEFsc28gc2V0IHRoZSBsYXllcidzIHRyYW5zZm9ybQorICAgICAg
ICB0byBpZGVudGl0eSwgc28gdGhhdCBpdCBjYWxscyBpbnRvIHRoZSBjb2RlIGJlbG93IHRvIGZs
aXAgdGhlIGNvbnRlbnRzLgorICAgICAgICAoLVtXZWJHTExheWVyIHNldFRyYW5zZm9ybTpdKTog
QmVjYXVzZSBhbiBJT1N1cmZhY2UgaXMgdXNlZCBmb3IgdGhlIGxheWVyIGNvbnRlbnRzLAorICAg
ICAgICB3ZSBkb24ndCBnZXQgYSBjaGFuY2UgdG8gZmxpcCB0aGUgZHJhd2luZyB0aGUgd2F5IHdl
IGRvIHZpYSB0aGUgZHJhd0luQ29udGV4dCBkZWxlZ2F0ZS4KKyAgICAgICAgSW5zdGVhZCB3ZSBo
YXZlIHRvIGFwcGx5IGEgc2NhbGUoMSwgLTEpIHRyYW5zZm9ybSBvbiB0b3Agb2YgdGhlIGxheWVy
IHRyYW5zZm9ybSB0bworICAgICAgICBtYWtlIHN1cmUgdGhlIGxheWVyIGlzIHJlbmRlcmVkIHJp
Z2h0LXdheSB1cC4KKyAgICAgICAgKC1bV2ViR0xMYXllciBzZXRBbmNob3JQb2ludDpdKTogRGl0
dG8sIGV4Y2VwdCB3ZSBoYXZlIHRvIGFzc3VtZSB0aGUgYW5jaG9yIHBvaW50IGlzCisgICAgICAg
IGF0IHRoZSBib3R0b20gb2YgdGhlIGxheWVyLCBzbyBmbGlwIHRoZSBZIHZhbHVlLgorICAgICAg
ICAoLVtXZWJHTExheWVyIGRpc3BsYXldKTogU3dhcCBiZXR3ZWVuIHRoZSBkcmF3aW5nIGJ1ZmZl
ciBhbmQgdGhlIGNvbnRlbnRzIGJ1ZmZlciwgYW5kCisgICAgICAgIHRoZW4gZ2V0IGEgbmV3IGJ1
ZmZlciByZWFkeSBmb3IgZGlzcGxheS4KKyAgICAgICAgKGNyZWF0ZUFwcHJvcHJpYXRlSU9TdXJm
YWNlKTogSGVscGVyLgorICAgICAgICAoLVtXZWJHTExheWVyIGFsbG9jYXRlSU9TdXJmYWNlQmFj
a2luZ1N0b3JlV2l0aFNpemU6dXNpbmdBbHBoYTpdKTogSW5pdGlhbGl6ZXMgdGhlCisgICAgICAg
IElPU3VyZmFjZXMgdXNlZCBmb3IgZHJhd2luZyBidWZmZXJzLgorICAgICAgICAoLVtXZWJHTExh
eWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdKTogVGFrZSB0aGUgbmV4
dCBhdmFpbGFibGUgSU9TdXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHRoZSBkcmF3aW5nIGJ1
ZmZlciAoYmluZGluZyBpbiB0byBXZWJHTCBhdCB0aGUgc2FtZSB0aW1lKS4KKyAgICAgICAgKC1b
V2ViR0xMYXllciBjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JEaXNwbGF5TWFzazpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV2ViR0xMYXllciBjb3B5Q0dMQ29udGV4dEZvclBpeGVsRm9ybWF0Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXZWJHTExheWVyIGRyYXdJbkNHTENvbnRleHQ6cGl4ZWxGb3Jt
YXQ6Zm9yTGF5ZXJUaW1lOmRpc3BsYXlUaW1lOl0pOiBEZWxldGVkLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tOiBSZW1vdmUgdGhlIGRlZmluaXRpb24gb2Yg
cmVsb2FkVmFsdWVGb3JLZXlQYXRoLgorCiAyMDE3LTA5LTI1ICBDYXJsb3MgQWxiZXJ0byBMb3Bl
eiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIEJ1aWxkaW5nIHJlbGVhc2Ug
d2l0aCAtRExPR19ESVNBQkxFRD0wIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA0MTRkOTAx
ODE3OGY5MDg1YzllNmI0M2Y5NzYzNWZmZGZiYjMyYzU2Li41ODQyNDI4N2MxODQ0ZTY2ZmEwNGQ4
ZDkyOWVmNjQwZWJhNzc0YjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxNy0xMC0wNCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgTG90
cyBvZiBtaXNzaW5nIGZyYW1lcyBpbiBZb3VUdWJlMzYwIHdoZW4gZnVsbHNjcmVlbiBvbiBNYWNC
b29rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5
MDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMjczMzAwPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCByZWxvYWRWYWx1ZUZvcktleVBhdGgg
dG8gcmVwbGFjZSBzZXRDb250ZW50c0NoYW5nZWQgb24gQ0FMYXllci4KKworICAgICAgICAqIHBh
bC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oOgorCiAyMDE3LTA5LTI1ICBUaW1vdGh5IEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHByb2dyZXNzIG9u
IGdldHRpbmcgTWFjIENNYWtlIGJ1aWxkaW5nIGFnYWluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmgKaW5kZXggODNiMjMzYTJhMjAzMWJmMzBm
YzdiNzdhMDBlZDY4ZGFhMTY4M2JiYS4uMmExOTA2YmE1NmI4ZDE2NzhlMTc0MGNkZGQzMzg5OWMx
ZGMxOGQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUXVh
cnR6Q29yZVNQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1F1YXJ0
ekNvcmVTUEkuaApAQCAtOTEsNyArOTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBfQ0FSZW5kZXJDb250
ZXh0IENBUmVuZGVyQ29udGV4dDsKIC0gKHZvaWQpc2V0Q29udGV4dElkOih1aW50MzJfdCljb250
ZXh0SUQ7CiAtIChDR1NpemUpc2l6ZTsKIC0gKHZvaWQgKilyZWdpb25CZWluZ0RyYXduOwotLSAo
dm9pZClzZXRDb250ZW50c0NoYW5nZWQ7CistICh2b2lkKXJlbG9hZFZhbHVlRm9yS2V5UGF0aDoo
TlNTdHJpbmcgKilrZXlQYXRoOwogQHByb3BlcnR5IEJPT0wgYWxsb3dzR3JvdXBCbGVuZGluZzsK
IEBwcm9wZXJ0eSBCT09MIGNhbkRyYXdDb25jdXJyZW50bHk7CiBAcHJvcGVydHkgQk9PTCBjb250
ZW50c09wYXF1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDY2NmRkODQ4ZTllMmY2Yzk3NDI5ODFlZTZjZDc4NTIy
OGNjYWI4ZWIuLmQ5MDEwMTBiNmIyM2VmNjgwZGVlNGMzN2Q3NDNhMzEwYzgyN2YyMGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaApAQCAtNzQ3LDcgKzc0Nyw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dE9iajsgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgcGxh
dGZvcm1UZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9mYm87IH0KKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQogICAgIENB
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PENB
TGF5ZXIqPihtX3dlYkdMTGF5ZXIuZ2V0KCkpOyB9CiAjZWxzZQogICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOwpAQCAtMTE0NywxMiArMTE0
NywxNiBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKTsKICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZh
cyhJbWFnZUJ1ZmZlciopOwogCi0jaWYgUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIHZvaWQgZW5kUGFpbnQoKTsKICNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQorICAg
IHZvaWQgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSk7CisgICAgdm9pZCB1
cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKTsKICAgICB2b2lk
IHVwZGF0ZUNHTENvbnRleHQoKTsKICNlbmRpZgorCiAgICAgdm9pZCBzZXRDb250ZXh0VmlzaWJp
bGl0eShib29sKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlIHBvd2Vy
UHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJl
bmNlVXNlZEZvckNyZWF0aW9uOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmlu
ZGV4IDU2ZWQwMDljZjA5ZmEyNmVjMDY4NjE1OGM1NGYzYmY5ZDQ5ZGQwZWUuLjY4ZGM1NzcxODc0
MjU5MGY3ZTJhOGVjZWI2YzRiNWNlZTE0YjhhODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXll
ckNvY29hLm1tCkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6
Y29weUNvbnRlbnRzRnJvbUxheWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCiAgICAgaWYgKFtt
X2xheWVyIGNvbnRlbnRzXSAhPSBbY2FMYXllciBjb250ZW50c10pCiAgICAgICAgIFttX2xheWVy
IHNldENvbnRlbnRzOltjYUxheWVyIGNvbnRlbnRzXV07CiAgICAgZWxzZQotICAgICAgICBbbV9s
YXllciBzZXRDb250ZW50c0NoYW5nZWRdOworICAgICAgICBbbV9sYXllciByZWxvYWRWYWx1ZUZv
cktleVBhdGg6QCJjb250ZW50cyJdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0M0RDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KaW5kZXggMTMyNTc4MTViYTA5ZjMzY2I4
NzNkMTE5OWJhNWUyN2NmNWY2YjQzOS4uYzBmODRiZjMzZDFiNmEyMWQ0YzZjYTlhNmE2NzJiYThk
YjUwZTZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCkBAIC00NzksMjAgKzQ3
OSwyMiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZAogICAgICAgICA6OmdsRW5hYmxlKEdMX01V
TFRJU0FNUExFKTsKICNlbmRpZgogCisgICAgLy8gQ3JlYXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2ls
bCBiZSB1c2VkIGZvciB0aGUgZnJhbWVidWZmZXIuCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIDo6
Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3RleHR1cmUpOwogI2Vsc2UKLSAgICAvLyBjcmVhdGUg
YSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCiAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAg
IDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9U
T19FREdFKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgLy8g
V2UgYmluZCB0byBHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQgcmF0aGVyIHRoYW4gVEVYVFVSRV8y
RCBiZWNhdXNlCisgICAgLy8gdGhhdCdzIHdoYXQgaXMgcmVxdWlyZWQgZm9yIGEgdGV4dHVyZSBi
YWNrZWQgYnkgSU9TdXJmYWNlLgorICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RB
TkdMRV9FWFQsIG1fdGV4dHVyZSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNU
QU5HTEVfRVhULCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0VYVCwgMCk7CiAjZW5kaWYKIAotICAgIC8vIGNyZWF0ZSBhbiBGQk8KKyAgICAvLyBD
cmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdC4KICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhU
KDEsICZtX2Zibyk7CiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKIApAQCAtNTAwLDcgKzUwMiw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5k
CiAgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpKQogICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOwogCi0gICAgLy8gY3JlYXRlIGFuIG11bHRpc2FtcGxlIEZCTworICAgIC8v
IElmIG5lY2Vzc2FyeSwgY3JlYXRlIGFub3RoZXIgZnJhbWVidWZmZXIgZm9yIHRoZSBtdWx0aXNh
bXBsZSByZXN1bHRzLgogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewogICAgICAgICA6Omds
R2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwpA
QCAtNjU0LDIwICs2NTYsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tHUFVTdGF0
dXMoKQogI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9STShJT1MpCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjplbmRQYWludCgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKQogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHdl
IGFjdHVhbGx5IHB1c2ggb3VyIGN1cnJlbnQgcmVuZGVyaW5nCisgICAgLy8gcmVzdWx0cyB0byB0
aGUgY29tcG9zaXRvciBvbiBpT1MuIE9uIG1hY09TIGl0IGNvbWVzIGZyb20gdGhlCisgICAgLy8g
Y2FsbGluZyBmdW5jdGlvbiwgd2hpY2ggaXMgaW5zaWRlIFdlYkdMTGF5ZXIuCiAgICAgOjpnbEZs
dXNoKCk7CiAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1
cmUpOwogICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9iaikgcHJlc2Vu
dFJlbmRlcmJ1ZmZlcjpHTF9SRU5ERVJCVUZGRVJdOwogICAgIFtFQUdMQ29udGV4dCBzZXRDdXJy
ZW50Q29udGV4dDpuaWxdOwotfQogI2VuZGlmCit9CiAKICNpZiBQTEFURk9STShNQUMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXpl
IHNpemUpCit7CisgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9T
dXJmYWNlQmFja2luZ1N0b3JlIGF0ICVkIHggJWQuICglcCkiLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCksIHRoaXMpOworICAgIFttX3dlYkdMTGF5ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNr
aW5nU3RvcmVXaXRoU2l6ZTpzaXplIHVzaW5nQWxwaGE6bV9hdHRycy5hbHBoYV07Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9y
ZUZyb21MYXllcigpCit7CisgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0
ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpLiAoJXApIiwgdGhpcyk7
CisgICAgW21fd2ViR0xMYXllciBiaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNl
XTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlQ0dMQ29udGV4dCgpCiB7CiAg
ICAgaWYgKCFtX2NvbnRleHRPYmopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKaW5kZXggMGUwMmUxNzdkYjA0NjY2NGEyYjA0NTNi
ODU0YTJhM2ExYjMxOWRiMS4uNWI0YjUxODQwMWVlOTljY2VhN2NiMTZlOGMwOTJkYmNjZDBmY2M3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
R0xMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkdMTGF5ZXIuaApAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2ltcG9ydCAi
SU9TdXJmYWNlLmgiCisjaW1wb3J0ICJJbnRTaXplLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1
YXJ0ekNvcmUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIsMTQgKzM0LDIxIEBAIGNs
YXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIH0KIAotI2lmIFBM
QVRGT1JNKElPUykKLUBpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBRUFHTExheWVyCisjaWYgUExB
VEZPUk0oTUFDKQorQGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FMYXllcgogI2Vsc2UKLUBpbnRl
cmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdMTGF5ZXIKK0BpbnRlcmZhY2UgV2ViR0xMYXllciA6
IENBRUFHTExheWVyCiAjZW5kaWYKIHsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCog
X2NvbnRleHQ7CiAgICAgZmxvYXQgX2RldmljZVBpeGVsUmF0aW87CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9jb250ZW50c0J1ZmZl
cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfZHJhd2luZ0J1ZmZl
cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfc3BhcmVCdWZmZXI7
CisgICAgV2ViQ29yZTo6SW50U2l6ZSBfYnVmZmVyU2l6ZTsKKyAgICBCT09MIF91c2luZ0FscGhh
OworI2VuZGlmCiB9CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dDsKQEAgLTQ4LDUgKzU3LDEwIEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogCiAtIChDR0ltYWdlUmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6KENH
Q29sb3JTcGFjZVJlZiljb2xvclNwYWNlOwogCisjaWYgUExBVEZPUk0oTUFDKQorLSAodm9pZClh
bGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOihXZWJDb3JlOjpJbnRTaXplKXNp
emUgdXNpbmdBbHBoYTooQk9PTCl1c2luZ0FscGhhOworLSAodm9pZCliaW5kRnJhbWVidWZmZXJU
b05leHRBdmFpbGFibGVTdXJmYWNlOworI2VuZGlmCisKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KaW5kZXggMzZh
N2M0OWJjZTFkMjYzZjRiY2QzOGUzMGZjNDhjMGJmM2QxZWU3NC4uMTBjOWRlMTQ2OGUxZmQ3Yjg2
OGI1ZmQ4NzcyNWFjN2Q0M2QzMTkxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCkBAIC0zMywxMCArMzMsMTEgQEAKICNp
bXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2lt
cG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNv
cmVTUEkuaD4KICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICNpbXBvcnQg
PE9wZW5HTC9PcGVuR0wuaD4KICNpbXBvcnQgPE9wZW5HTC9nbC5oPgogI2VuZGlmCkBAIC01Mywx
MTMgKzU0LDM3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CiAgICAgX2RldmljZVBpeGVsUmF0aW8gPSBjb250ZXh0LT5nZXRDb250ZXh0QXR0cmli
dXRlcygpLmRldmljZVBpeGVsUmF0aW87CiAjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmICghY29u
dGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkKKyAgICAgICAgc2VsZi5vcGFxdWUg
PSBZRVM7CisgICAgc2VsZi50cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNESWRlbnRpdHk7CiAgICAg
c2VsZi5jb250ZW50c1NjYWxlID0gX2RldmljZVBpeGVsUmF0aW87Ci0gICAgc2VsZi5jb2xvcnNw
YWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKICNlbmRpZgogICAgIHJldHVybiBzZWxmOwogfQog
Ci0jaWYgIVBMQVRGT1JNKElPUykKLS0oQ0dMUGl4ZWxGb3JtYXRPYmopY29weUNHTFBpeGVsRm9y
bWF0Rm9yRGlzcGxheU1hc2s6KHVpbnQzMl90KW1hc2sKKyNpZiBQTEFURk9STShNQUMpCisvLyBP
biBNYWMsIHdlIG5lZWQgdG8gZmxpcCB0aGUgbGF5ZXIgdG8gdGFrZSBpbnRvIGFjY291bnQKKy8v
IHRoYXQgdGhlIElPU3VyZmFjZSBwcm92aWRlcyBjb250ZW50IGluIFktdXAuIFRoaXMKKy8vIG1l
YW5zIHRoYXQgYW55IGluY29taW5nIHRyYW5zZm9ybSAodW5saWtlbHksIHNpbmNlIHRoaXMKKy8v
IGlzIGEgY29udGVudHMgbGF5ZXIpIGFuZCBhbmNob3IgcG9pbnQgbXVzdCBhZGQgYQorLy8gWSBz
Y2FsZSBvZiAtMSBhbmQgbWFrZSBzdXJlIHRoZSB0cmFuc2Zvcm0gaGFwcGVucyBmcm9tCisvLyB0
aGUgdG9wLgorCistICh2b2lkKXNldFRyYW5zZm9ybTooQ0FUcmFuc2Zvcm0zRCl0CiB7Ci0gICAg
Ly8gV2UncmUgYmFzaWNhbGx5IGNvcHlpbmcgdGhlIHBpeGVsIGZvcm1hdCBvYmplY3QgZnJvbSB0
aGUgZXhpc3RpbmcKLSAgICAvLyBXZWJHTCBjb250ZXh0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHVz
ZSB0aGUgZGlzcGxheSBtYXNrLgotICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKLQotICAgIENHTFBp
eGVsRm9ybWF0T2JqIHdlYmdsUGl4ZWxGb3JtYXQgPSBDR0xHZXRQaXhlbEZvcm1hdChfY29udGV4
dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKLQotICAgIFZlY3RvcjxDR0xQaXhlbEZv
cm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKLSAgICBHTGludCB2YWx1ZTsKLQotICAgIENHTERlc2Ny
aWJlUGl4ZWxGb3JtYXQod2ViZ2xQaXhlbEZvcm1hdCwgMCwga0NHTFBGQUNvbG9yU2l6ZSwgJnZh
bHVlKTsKLSAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQ29sb3JTaXplKTsKLSAgICBhdHRyaWJz
LmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4odmFsdWUpKTsKLQot
ICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIGRlcHRoIHNpemUgc2luY2Ugd2UncmUg
b25seQotICAgIC8vIHVzaW5nIHRoaXMgY29udGV4dCBhcyBhIDJkIGJsaXQgZGVzdGluYXRpb24g
Zm9yIHRoZSBXZWJHTCBGQk8uCi0gICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQURlcHRoU2l6ZSk7
Ci0gICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+
KDApKTsKLQotICAgIENHTERlc2NyaWJlUGl4ZWxGb3JtYXQod2ViZ2xQaXhlbEZvcm1hdCwgMCwg
a0NHTFBGQUFsbG93T2ZmbGluZVJlbmRlcmVycywgJnZhbHVlKTsKLSAgICBpZiAodmFsdWUpCi0g
ICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFBbGxvd09mZmxpbmVSZW5kZXJlcnMpOwotCi0g
ICAgQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdCh3ZWJnbFBpeGVsRm9ybWF0LCAwLCBrQ0dMUEZBQWNj
ZWxlcmF0ZWQsICZ2YWx1ZSk7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBhdHRyaWJzLmFwcGVu
ZChrQ0dMUEZBQWNjZWxlcmF0ZWQpOwotCi0gICAgQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdCh3ZWJn
bFBpeGVsRm9ybWF0LCAwLCBrQ0dMUEZBT3BlbkdMUHJvZmlsZSwgJnZhbHVlKTsKLSAgICBpZiAo
dmFsdWUpIHsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQU9wZW5HTFByb2ZpbGUpOwot
ICAgICAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0
ZT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQ
aXhlbEZvcm1hdEF0dHJpYnV0ZT4oMCkpOwotCi0gICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxG
b3JtYXQ7Ci0gICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsKLSAgICBDR0xDaG9vc2VQaXhl
bEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0LCAmbnVtUGl4ZWxGb3JtYXRzKTsK
LQotICAgIEFTU0VSVChwaXhlbEZvcm1hdCk7Ci0gICAgQVNTRVJUKG51bVBpeGVsRm9ybWF0cyk7
Ci0KLSAgICByZXR1cm4gcGl4ZWxGb3JtYXQ7CisgICAgW3N1cGVyIHNldFRyYW5zZm9ybTpDQVRy
YW5zZm9ybTNEU2NhbGUodCwgMSwgLTEsIDEpXTsKIH0KIAotLShDR0xDb250ZXh0T2JqKWNvcHlD
R0xDb250ZXh0Rm9yUGl4ZWxGb3JtYXQ6KENHTFBpeGVsRm9ybWF0T2JqKXBpeGVsRm9ybWF0Cist
ICh2b2lkKXNldEFuY2hvclBvaW50OihDR1BvaW50KXAKIHsKLSAgICBDR0xDb250ZXh0T2JqIGNv
bnRleHRPYmo7Ci0gICAgQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1hdCwgX2NvbnRleHQtPnBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgJmNvbnRleHRPYmopOwotICAgIHJldHVybiBjb250
ZXh0T2JqOwotfQotCi0tKHZvaWQpZHJhd0luQ0dMQ29udGV4dDooQ0dMQ29udGV4dE9iailnbENv
bnRleHQgcGl4ZWxGb3JtYXQ6KENHTFBpeGVsRm9ybWF0T2JqKXBpeGVsRm9ybWF0IGZvckxheWVy
VGltZTooQ0ZUaW1lSW50ZXJ2YWwpdGltZUludGVydmFsIGRpc3BsYXlUaW1lOihjb25zdCBDVlRp
bWVTdGFtcCAqKXRpbWVTdGFtcAotewotICAgIGlmICghX2NvbnRleHQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIF9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwotCi0gICAgQ0dMU2V0Q3VycmVu
dENvbnRleHQoZ2xDb250ZXh0KTsKLQotICAgIENHUmVjdCBmcmFtZSA9IFtzZWxmIGZyYW1lXTsK
LSAgICBmcmFtZS5zaXplLndpZHRoICo9IF9kZXZpY2VQaXhlbFJhdGlvOwotICAgIGZyYW1lLnNp
emUuaGVpZ2h0ICo9IF9kZXZpY2VQaXhlbFJhdGlvOwotCi0gICAgLy8gZHJhdyB0aGUgRkJPIGlu
dG8gdGhlIGxheWVyCi0gICAgZ2xWaWV3cG9ydCgwLCAwLCBmcmFtZS5zaXplLndpZHRoLCBmcmFt
ZS5zaXplLmhlaWdodCk7Ci0gICAgZ2xNYXRyaXhNb2RlKEdMX1BST0pFQ1RJT04pOwotICAgIGds
TG9hZElkZW50aXR5KCk7Ci0gICAgZ2xPcnRobygtMSwgMSwgLTEsIDEsIC0xLCAxKTsKLSAgICBn
bE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsKLSAgICBnbExvYWRJZGVudGl0eSgpOwotCi0gICAg
Z2xFbmFibGUoR0xfVEVYVFVSRV8yRCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBfY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCkpOwotCi0gICAgZ2xCZWdpbihHTF9UUklBTkdM
RV9GQU4pOwotICAgICAgICBnbFRleENvb3JkMmYoMCwgMCk7Ci0gICAgICAgIGdsVmVydGV4MmYo
LTEsIC0xKTsKLSAgICAgICAgZ2xUZXhDb29yZDJmKDEsIDApOwotICAgICAgICBnbFZlcnRleDJm
KDEsIC0xKTsKLSAgICAgICAgZ2xUZXhDb29yZDJmKDEsIDEpOwotICAgICAgICBnbFZlcnRleDJm
KDEsIDEpOwotICAgICAgICBnbFRleENvb3JkMmYoMCwgMSk7Ci0gICAgICAgIGdsVmVydGV4MmYo
LTEsIDEpOwotICAgIGdsRW5kKCk7Ci0KLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOwotICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzJEKTsKLQotICAgIC8vIENhbGwgc3VwZXIg
dG8gZmluYWxpemUgdGhlIGRyYXdpbmcuIEJ5IGRlZmF1bHQgYWxsIGl0IGRvZXMgaXMgY2FsbCBn
bEZsdXNoKCkuCi0gICAgW3N1cGVyIGRyYXdJbkNHTENvbnRleHQ6Z2xDb250ZXh0IHBpeGVsRm9y
bWF0OnBpeGVsRm9ybWF0IGZvckxheWVyVGltZTp0aW1lSW50ZXJ2YWwgZGlzcGxheVRpbWU6dGlt
ZVN0YW1wXTsKKyAgICBbc3VwZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UocC54LCAxLjAg
LSBwLnkpXTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0
IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogewogICAgIGZhc3RGcmVlKGNvbnN0X2Nh
c3Q8dm9pZCAqPihkYXRhKSk7CiB9Ci0jZW5kaWYKIAogLShDR0ltYWdlUmVmKWNvcHlJbWFnZVNu
YXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29sb3JTcGFjZVJlZiljb2xvclNwYWNlCiB7CkBAIC0y
MDMsMTcgKzEyOCw1MyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQg
KmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgIGlmICghX2NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmIFBMQVRGT1JNKElPUykKICAgICBfY29udGV4dC0+ZW5kUGFpbnQoKTsKLSNl
bHNlCi0gICAgW3N1cGVyIGRpc3BsYXldOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIF9jb250
ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAgIGlmIChfZHJhd2luZ0J1ZmZlcikgeworICAgICAg
ICBzdGQ6OnN3YXAoX2NvbnRlbnRzQnVmZmVyLCBfZHJhd2luZ0J1ZmZlcik7CisgICAgICAgIHNl
bGYuY29udGVudHMgPSBfY29udGVudHNCdWZmZXItPmFzTGF5ZXJDb250ZW50cygpOworICAgICAg
ICBbc2VsZiByZWxvYWRWYWx1ZUZvcktleVBhdGg6QCJjb250ZW50cyJdOworICAgICAgICBbc2Vs
ZiBiaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNlXTsKKyAgICB9CiAjZW5kaWYK
KwogICAgIF9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgUGxhdGZvcm1DQUxh
eWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAg
IGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkKICAgICAgICAgbGF5ZXItPm93bmVyKCktPnBs
YXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShsYXllcik7CiB9CiAKKy0gKHZvaWQpYWxsb2Nh
dGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTooSW50U2l6ZSlzaXplIHVzaW5nQWxwaGE6
KEJPT0wpdXNpbmdBbHBoYQoreworICAgIF9idWZmZXJTaXplID0gc2l6ZTsKKyAgICBfdXNpbmdB
bHBoYSA9IHVzaW5nQWxwaGE7CisgICAgX2NvbnRlbnRzQnVmZmVyID0gV2ViQ29yZTo6SU9TdXJm
YWNlOjpjcmVhdGUoc2l6ZSwgc1JHQkNvbG9yU3BhY2VSZWYoKSk7CisgICAgX2RyYXdpbmdCdWZm
ZXIgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShzaXplLCBzUkdCQ29sb3JTcGFjZVJlZigp
KTsKKyAgICBBU1NFUlQoX2NvbnRlbnRzQnVmZmVyKTsKKyAgICBBU1NFUlQoX2RyYXdpbmdCdWZm
ZXIpOworfQorCistICh2b2lkKWJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2UK
K3sKKyAgICBHQzNEZW51bSB0ZXh0dXJlID0gX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOwor
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKKwor
ICAgIGlmIChfZHJhd2luZ0J1ZmZlciAmJiBfZHJhd2luZ0J1ZmZlci0+aXNJblVzZSgpKSB7Cisg
ICAgICAgIGlmICghX3NwYXJlQnVmZmVyKQorICAgICAgICAgICAgX3NwYXJlQnVmZmVyID0gV2Vi
Q29yZTo6SU9TdXJmYWNlOjpjcmVhdGUoX2J1ZmZlclNpemUsIHNSR0JDb2xvclNwYWNlUmVmKCkp
OworICAgICAgICBzdGQ6OnN3YXAoX2RyYXdpbmdCdWZmZXIsIF9zcGFyZUJ1ZmZlcik7CisgICAg
fQorCisgICAgSU9TdXJmYWNlUmVmIGlvU3VyZmFjZSA9IF9kcmF3aW5nQnVmZmVyLT5zdXJmYWNl
KCk7CisgICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSBfdXNpbmdBbHBoYSA/IEdMX1JHQkEg
OiBHTF9SR0I7CisKKyAgICAvLyBMaW5rIHRoZSBJT1N1cmZhY2UgdG8gdGhlIHRleHR1cmUuCisg
ICAgQ0dMRXJyb3IgZXJyb3IgPSBDR0xUZXhJbWFnZUlPU3VyZmFjZTJEKF9jb250ZXh0LT5wbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCksIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgaW50ZXJu
YWxGb3JtYXQsIF9idWZmZXJTaXplLndpZHRoKCksIF9idWZmZXJTaXplLmhlaWdodCgpLCBHTF9C
R1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIGlvU3VyZmFjZSwgMCk7CisgICAgQVNT
RVJUX1VOVVNFRChlcnJvciwgZXJyb3IgPT0ga0NHTE5vRXJyb3IpOworfQorCiBAZW5kCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvV2ViTGF5ZXIubW0KaW5kZXggM2ZjNzZjOWM0MDQ1ODcyMDBkNjczZGZjZjFjMDVi
ZWZkZDIzZDk0My4uOTgzMzhhYmJhM2FlZjljY2ExNzRjN2U2Y2RhN2Q1ZGEyOTMzZmY0MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQpA
QCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJQ
bGF0Zm9ybUNBTGF5ZXIuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2lt
cG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CiAjaW1wb3J0IDx3dGYvU2V0Rm9y
U2NvcGUuaD4KIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTM4LDEwICszOSw2IEBACiAjaW1wb3J0
ICJXZWJDb3JlVGhyZWFkLmgiCiAjZW5kaWYKIAotQGludGVyZmFjZSBDQUxheWVyKFdlYkNvcmVD
QUxheWVyUHJpdmF0ZSkKLS0gKHZvaWQpcmVsb2FkVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAq
KWtleVBhdGg7Ci1AZW5kCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjaWYgUExBVEZP
Uk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXggNTUzYTg5
NzBkMzA0ZDFjYTZiNDdmYmY0NTIzNDIzZWU3MWYzOTYzYy4uMTcyYzg4MjIyMWFlMTVhNzYzMmZk
ZTU4MmQ1MDExYTc1ZDJhNmJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwCkBAIC0yOSwxNiArMjksMTUgQEAKICNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkK
IAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKICNpZiBQTEFURk9STShJT1MpCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKICNlbmRpZgotCiAjaW5jbHVkZSAiRXh0
ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeU9w
ZW5HTFNldHRpbmcuaCIKLQogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5n
PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC03MCw2ICs2OSwxNSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3
aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQoreworICAgIC8vIFdlIGNh
biBhc3N1bWUgdGhpcyBkb2Vzbid0IG92ZXJmbG93IGJlY2F1c2UgdGhlIGNhbGxpbmcgZnVuY3Rp
b25zCisgICAgLy8gdXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBpbnQgdG90YWxCeXRlcyA9
IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7
IGkgKz0gNCkKKyAgICAgICAgcGl4ZWxzW2kgKyAzXSA9IDI1NTsKK30KKwogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQogewog
ICAgIC8vIE5WSURJQSBkcml2ZXJzIGhhdmUgYSBidWcgd2hlcmUgY2FsbGluZyByZWFkUGl4ZWxz
IGluIEJHUkEgY2FuIHJldHVybiB0aGUgd3JvbmcgdmFsdWVzIGZvciB0aGUgYWxwaGEgY2hhbm5l
bCB3aGVuIHRoZSBhbHBoYSBpcyBvZmYgZm9yIHRoZSBjb250ZXh0LgpAQCAtOTgsNiArMTA2LDEx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZO
ZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQKICNlbmRpZgogICAgIH0gZWxzZQogICAgICAgICA6
OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9J
TlRfOF84XzhfOF9SRVYsIHBpeGVscyk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFt
X2F0dHJzLmFscGhhKQorICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwg
aGVpZ2h0LCBwaXhlbHMpOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlQXR0cmlidXRlcygpCkBAIC0xNzAsNiArMTgzLDEwIEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgOjpnbEJpbmRSZW5k
ZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOwogICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1JF
TkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKICAgICBzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURy
YXdhYmxlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworI2VsaWYgUExBVEZPUk0o
TUFDKQorICAgIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUod2lkdGgsIGhl
aWdodCkpOworICAgIHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXll
cigpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBtX3Rl
eHR1cmUsIDApOwogI2Vsc2UKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlKTsKICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFs
Q29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9C
WVRFLCAwKTsKQEAgLTQ0Miw2ICs0NTksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVh
ZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAg
ICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBpZiAoIW1fYXR0cnMuYWxwaGEgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJHUkEpICYmIChtX3N0YXRl
LmJvdW5kRkJPID09IG1fZmJvIHx8IChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5k
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pKSkKKyAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21Q
aXhlbHMod2lkdGgsIGhlaWdodCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpKTsK
KyNlbmRpZgogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322849</attachid>
            <date>2017-10-05 10:26:06 -0700</date>
            <delta_ts>2017-10-05 10:29:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177903-20171005102605.patch</filename>
            <type>text/plain</type>
            <size>24496</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ3ZGQ2MjAxNzA5ODEy
NTk2ZTU1NzQ1NWI1ZDg1NWJkYmFkZTI3Yi4uMGEyMTQzOGIwNjE0MDNiMTJiYTYwNTM2NTg2N2Iz
NDY5NWE5YjY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE3LTEwLTA0ICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBMb3RzIG9mIG1pc3NpbmcgZnJh
bWVzIGluIFlvdVR1YmUzNjAgd2hlbiBmdWxsc2NyZWVuIG9uIE1hY0Jvb2sKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkwMworICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMzMyNzMzMDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgT3VyIGNvbXBvc2l0aW5nIHBhdGggZm9yIFdlYkdMIG9uIG1hY09TIHdh
cyB0b28gc2xvdywgcmVxdWlyaW5nIGEgY29weQorICAgICAgICBvZiB0aGUgZnJhbWVidWZmZXIg
aW50byBhbm90aGVyIEdMIGNvbnRleHQuIFJlcGxhY2UgdGhpcyBieSBoYXZpbmcKKyAgICAgICAg
V2ViR0wgcmVuZGVyIGludG8gYSB0ZXh0dXJlIHRoYXQgaXMgYmFja2VkIGJ5IGFuIElPU3VyZmFj
ZSwgYW5kIHRoZW4KKyAgICAgICAgc2V0IHRoZSBXZWJHTExheWVyIHRvIHVzZSB0aGUgSU9TdXJm
YWNlIGFzIGNvbnRlbnRzLgorCisgICAgICAgIENvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIFdlYkdM
IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUg
Y29uc3QpOiBXZSBubyBsb25nZXIgdXNlIHRoZQorICAgICAgICBmcmFtZWJ1ZmZlciBvYmplY3Qg
b3V0c2lkZSB0aGUgY2xhc3MsIHNvIGNoYW5nZSB0aGlzIHRvIHJldHVybiB0aGUgR0wgdGV4dHVy
ZQorICAgICAgICB0aGF0IHRoZSBmcmFtZWJ1ZmZlciBpcyByZW5kZXJpbmcgaW4gdG8uIEl0IHdh
cyBraW5kLW9mIHN0cmFuZ2UgdGhhdCBpdCB3YXMKKyAgICAgICAgbmFtZWQgdGhpcyB3YXkgb3Jp
Z2luYWxseS4KKyAgICAgICAgQWxzbyBtYWtlIGVuZFBhaW50IGF2YWlsYWJsZSBvbiBtYWNPUywg
YW5kIGFkZCB0aGUgZGVmaW5pdGlvbnMgZm9yCisgICAgICAgIGNyZWF0ZUlPU3VyZmFjZUJhY2tp
bmdTdG9yZSBhbmQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVy
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RD
b2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRCk6IE5vdyB0aGF0IHdlJ3JlIHVzaW5nIGFuIElPU3VyZmFjZSwKKyAgICAgICAgd2Un
cmUgYmluZGluZyB0byBhIG5ldyBhdHRhY2htZW50IHBvaW50LCBHTF9URVhUVVJFX1JFQ1RBTkdM
RS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCk6IFRoaXMg
aXMgbm93IGJlaW5nIGNhbGxlZCBvbiBtYWNPUyBhbmQgaU9TLAorICAgICAgICBzbyBhZGQgYSBj
b21tZW50IHRoYXQgZXhwbGFpbnMgdGhlIGV4dHJhIHdvcmsgdGhhdCBpT1MgbmVlZHMgdG8gZG8u
IEF0IHNvbWUgZnV0dXJlCisgICAgICAgIHBvaW50IGl0IHdvdWxkIGJlIG5pY2UgdG8gbWFrZSB0
aGlzIHNsaWdodGx5IGNsZWFuZXIsIHNvIHRoYXQgaU9TIGFuZCBtYWNPUyBhcmUKKyAgICAgICAg
bW9yZSBzaW1pbGFyLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9j
YXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKTogTmV3IGZ1bmN0aW9uIHRoYXQgY2FsbHMKKyAgICAg
ICAgaW50byB0aGUgY29ycmVzcG9uZGluZyBXZWJHTExheWVyIGZ1bmN0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tp
bmdTdG9yZUZyb21MYXllcik6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondp
cGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKTogQm90aCByZWFkUGl4ZWxzIGFuZCBkcmF3aW5nIGEg
V2ViR0wgY29udGV4dAorICAgICAgICBpbnRvIGFub3RoZXIgYnVmZmVyIG5lZWQgdG8gZmlsbCBv
dXQgdGhlIGFscGhhIGNoYW5uZWwgaWYgdGhpcyBjb250ZXh0IHdhcworICAgICAgICBjcmVhdGVk
IHdpdGhvdXQgb25lLCBvdGhlcndpc2UgdGhlIElPU3VyZmFjZSBiYWNraW5nIHN0b3JlIHdpbGwg
aGFwcGlseSBwcm92aWRlCisgICAgICAgIHdoYXQgbWlnaHQgYmUgbm9uLXplcm8gdmFsdWVzLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0
VG9CR1JBSWZOZWNlc3NhcnkpOiBDYWxsIHRoZSBoZWxwZXIgYWJvdmUuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOiBBZGQgbW9yZSBjb2RlIHRvIGNh
bGwgaW50byB0aGUgbWFjT1Mtc3BlY2lmaWMKKyAgICAgICAgZnVuY3Rpb24gdG8gdXNlIGFuIElP
U3VyZmFjZSBhcyB0aGUgZnJhbWVidWZmZXIgdGV4dHVyZS4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKTogQ2FsbCB0aGUgaGVscGVyIGFib3ZlLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2Eu
bW06CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y29weUNvbnRlbnRzRnJvbUxheWVy
KTogUmVwbGFjZSB0aGUgdXNlIG9mIHRoZQorICAgICAgICBkZXByZWNhdGVkIHNldENvbnRlbnRz
Q2hhbmdlZCB3aXRoIHJlbG9hZFZhbHVlRm9yS2V5UGF0aC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaDogVGhlIG1hY09TIGltcGxlbWVudGF0aW9uIG5v
dworICAgICAgICBpbmhlcml0cyBmcm9tIENBTGF5ZXIgZGlyZWN0bHkgcmF0aGVyIHRoYW4gQ0FP
cGVuR0xMYXllci4gSXQgYWxzbyBhZGRzCisgICAgICAgIGEgZmV3IG1lbWJlciB2YXJpYWJsZXMg
dG8gaGFuZGxlIHRoZSBJT1N1cmZhY2VzIHVzZWQgZm9yIHRyaXBsZSBidWZmZXJpbmcuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tOgorICAgICAgICAo
LVtXZWJHTExheWVyIGluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6XSk6IElmIHdlIHdlcmUgY3Jl
YXRlZCB3aXRob3V0IGFuCisgICAgICAgIGFscGhhIGNoYW5uZWwsIHRlbGwgQ0EgdGhhdCB3ZSdy
ZSBhbiBvcGFxdWUgbGF5ZXIuIEFsc28gc2V0IHRoZSBsYXllcidzIHRyYW5zZm9ybQorICAgICAg
ICB0byBpZGVudGl0eSwgc28gdGhhdCBpdCBjYWxscyBpbnRvIHRoZSBjb2RlIGJlbG93IHRvIGZs
aXAgdGhlIGNvbnRlbnRzLgorICAgICAgICAoLVtXZWJHTExheWVyIHNldFRyYW5zZm9ybTpdKTog
QmVjYXVzZSBhbiBJT1N1cmZhY2UgaXMgdXNlZCBmb3IgdGhlIGxheWVyIGNvbnRlbnRzLAorICAg
ICAgICB3ZSBkb24ndCBnZXQgYSBjaGFuY2UgdG8gZmxpcCB0aGUgZHJhd2luZyB0aGUgd2F5IHdl
IGRvIHZpYSB0aGUgZHJhd0luQ29udGV4dCBkZWxlZ2F0ZS4KKyAgICAgICAgSW5zdGVhZCB3ZSBo
YXZlIHRvIGFwcGx5IGEgc2NhbGUoMSwgLTEpIHRyYW5zZm9ybSBvbiB0b3Agb2YgdGhlIGxheWVy
IHRyYW5zZm9ybSB0bworICAgICAgICBtYWtlIHN1cmUgdGhlIGxheWVyIGlzIHJlbmRlcmVkIHJp
Z2h0LXdheSB1cC4KKyAgICAgICAgKC1bV2ViR0xMYXllciBzZXRBbmNob3JQb2ludDpdKTogRGl0
dG8sIGV4Y2VwdCB3ZSBoYXZlIHRvIGFzc3VtZSB0aGUgYW5jaG9yIHBvaW50IGlzCisgICAgICAg
IGF0IHRoZSBib3R0b20gb2YgdGhlIGxheWVyLCBzbyBmbGlwIHRoZSBZIHZhbHVlLgorICAgICAg
ICAoLVtXZWJHTExheWVyIGRpc3BsYXldKTogU3dhcCBiZXR3ZWVuIHRoZSBkcmF3aW5nIGJ1ZmZl
ciBhbmQgdGhlIGNvbnRlbnRzIGJ1ZmZlciwgYW5kCisgICAgICAgIHRoZW4gZ2V0IGEgbmV3IGJ1
ZmZlciByZWFkeSBmb3IgZGlzcGxheS4KKyAgICAgICAgKGNyZWF0ZUFwcHJvcHJpYXRlSU9TdXJm
YWNlKTogSGVscGVyLgorICAgICAgICAoLVtXZWJHTExheWVyIGFsbG9jYXRlSU9TdXJmYWNlQmFj
a2luZ1N0b3JlV2l0aFNpemU6dXNpbmdBbHBoYTpdKTogSW5pdGlhbGl6ZXMgdGhlCisgICAgICAg
IElPU3VyZmFjZXMgdXNlZCBmb3IgZHJhd2luZyBidWZmZXJzLgorICAgICAgICAoLVtXZWJHTExh
eWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdKTogVGFrZSB0aGUgbmV4
dCBhdmFpbGFibGUgSU9TdXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHRoZSBkcmF3aW5nIGJ1
ZmZlciAoYmluZGluZyBpbiB0byBXZWJHTCBhdCB0aGUgc2FtZSB0aW1lKS4KKyAgICAgICAgKC1b
V2ViR0xMYXllciBjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JEaXNwbGF5TWFzazpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV2ViR0xMYXllciBjb3B5Q0dMQ29udGV4dEZvclBpeGVsRm9ybWF0Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXZWJHTExheWVyIGRyYXdJbkNHTENvbnRleHQ6cGl4ZWxGb3Jt
YXQ6Zm9yTGF5ZXJUaW1lOmRpc3BsYXlUaW1lOl0pOiBEZWxldGVkLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tOiBSZW1vdmUgdGhlIGRlZmluaXRpb24gb2Yg
cmVsb2FkVmFsdWVGb3JLZXlQYXRoLgorCiAyMDE3LTA5LTI1ICBDYXJsb3MgQWxiZXJ0byBMb3Bl
eiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIEJ1aWxkaW5nIHJlbGVhc2Ug
d2l0aCAtRExPR19ESVNBQkxFRD0wIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA0MTRkOTAx
ODE3OGY5MDg1YzllNmI0M2Y5NzYzNWZmZGZiYjMyYzU2Li41ODQyNDI4N2MxODQ0ZTY2ZmEwNGQ4
ZDkyOWVmNjQwZWJhNzc0YjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxNy0xMC0wNCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgTG90
cyBvZiBtaXNzaW5nIGZyYW1lcyBpbiBZb3VUdWJlMzYwIHdoZW4gZnVsbHNjcmVlbiBvbiBNYWNC
b29rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5
MDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMjczMzAwPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCByZWxvYWRWYWx1ZUZvcktleVBhdGgg
dG8gcmVwbGFjZSBzZXRDb250ZW50c0NoYW5nZWQgb24gQ0FMYXllci4KKworICAgICAgICAqIHBh
bC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oOgorCiAyMDE3LTA5LTI1ICBUaW1vdGh5IEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHByb2dyZXNzIG9u
IGdldHRpbmcgTWFjIENNYWtlIGJ1aWxkaW5nIGFnYWluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmgKaW5kZXggODNiMjMzYTJhMjAzMWJmMzBm
YzdiNzdhMDBlZDY4ZGFhMTY4M2JiYS4uMmExOTA2YmE1NmI4ZDE2NzhlMTc0MGNkZGQzMzg5OWMx
ZGMxOGQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUXVh
cnR6Q29yZVNQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL1F1YXJ0
ekNvcmVTUEkuaApAQCAtOTEsNyArOTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBfQ0FSZW5kZXJDb250
ZXh0IENBUmVuZGVyQ29udGV4dDsKIC0gKHZvaWQpc2V0Q29udGV4dElkOih1aW50MzJfdCljb250
ZXh0SUQ7CiAtIChDR1NpemUpc2l6ZTsKIC0gKHZvaWQgKilyZWdpb25CZWluZ0RyYXduOwotLSAo
dm9pZClzZXRDb250ZW50c0NoYW5nZWQ7CistICh2b2lkKXJlbG9hZFZhbHVlRm9yS2V5UGF0aDoo
TlNTdHJpbmcgKilrZXlQYXRoOwogQHByb3BlcnR5IEJPT0wgYWxsb3dzR3JvdXBCbGVuZGluZzsK
IEBwcm9wZXJ0eSBCT09MIGNhbkRyYXdDb25jdXJyZW50bHk7CiBAcHJvcGVydHkgQk9PTCBjb250
ZW50c09wYXF1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDY2NmRkODQ4ZTllMmY2Yzk3NDI5ODFlZTZjZDc4NTIy
OGNjYWI4ZWIuLmQ5MDEwMTBiNmIyM2VmNjgwZGVlNGMzN2Q3NDNhMzEwYzgyN2YyMGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaApAQCAtNzQ3LDcgKzc0Nyw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dE9iajsgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgcGxh
dGZvcm1UZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9mYm87IH0KKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQogICAgIENB
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PENB
TGF5ZXIqPihtX3dlYkdMTGF5ZXIuZ2V0KCkpOyB9CiAjZWxzZQogICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOwpAQCAtMTE0NywxMiArMTE0
NywxNiBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKTsKICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZh
cyhJbWFnZUJ1ZmZlciopOwogCi0jaWYgUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIHZvaWQgZW5kUGFpbnQoKTsKICNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQorICAg
IHZvaWQgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSk7CisgICAgdm9pZCB1
cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKTsKICAgICB2b2lk
IHVwZGF0ZUNHTENvbnRleHQoKTsKICNlbmRpZgorCiAgICAgdm9pZCBzZXRDb250ZXh0VmlzaWJp
bGl0eShib29sKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlIHBvd2Vy
UHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJl
bmNlVXNlZEZvckNyZWF0aW9uOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmlu
ZGV4IDU2ZWQwMDljZjA5ZmEyNmVjMDY4NjE1OGM1NGYzYmY5ZDQ5ZGQwZWUuLjY4ZGM1NzcxODc0
MjU5MGY3ZTJhOGVjZWI2YzRiNWNlZTE0YjhhODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXll
ckNvY29hLm1tCkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6
Y29weUNvbnRlbnRzRnJvbUxheWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCiAgICAgaWYgKFtt
X2xheWVyIGNvbnRlbnRzXSAhPSBbY2FMYXllciBjb250ZW50c10pCiAgICAgICAgIFttX2xheWVy
IHNldENvbnRlbnRzOltjYUxheWVyIGNvbnRlbnRzXV07CiAgICAgZWxzZQotICAgICAgICBbbV9s
YXllciBzZXRDb250ZW50c0NoYW5nZWRdOworICAgICAgICBbbV9sYXllciByZWxvYWRWYWx1ZUZv
cktleVBhdGg6QCJjb250ZW50cyJdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0M0RDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KaW5kZXggMTMyNTc4MTViYTA5ZjMzY2I4
NzNkMTE5OWJhNWUyN2NmNWY2YjQzOS4uYzBmODRiZjMzZDFiNmEyMWQ0YzZjYTlhNmE2NzJiYThk
YjUwZTZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCkBAIC00NzksMjAgKzQ3
OSwyMiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZAogICAgICAgICA6OmdsRW5hYmxlKEdMX01V
TFRJU0FNUExFKTsKICNlbmRpZgogCisgICAgLy8gQ3JlYXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2ls
bCBiZSB1c2VkIGZvciB0aGUgZnJhbWVidWZmZXIuCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIDo6
Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3RleHR1cmUpOwogI2Vsc2UKLSAgICAvLyBjcmVhdGUg
YSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCiAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAg
IDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9U
T19FREdFKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgLy8g
V2UgYmluZCB0byBHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQgcmF0aGVyIHRoYW4gVEVYVFVSRV8y
RCBiZWNhdXNlCisgICAgLy8gdGhhdCdzIHdoYXQgaXMgcmVxdWlyZWQgZm9yIGEgdGV4dHVyZSBi
YWNrZWQgYnkgSU9TdXJmYWNlLgorICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RB
TkdMRV9FWFQsIG1fdGV4dHVyZSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNU
QU5HTEVfRVhULCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0VYVCwgMCk7CiAjZW5kaWYKIAotICAgIC8vIGNyZWF0ZSBhbiBGQk8KKyAgICAvLyBD
cmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdC4KICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhU
KDEsICZtX2Zibyk7CiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKIApAQCAtNTAwLDcgKzUwMiw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5k
CiAgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpKQogICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOwogCi0gICAgLy8gY3JlYXRlIGFuIG11bHRpc2FtcGxlIEZCTworICAgIC8v
IElmIG5lY2Vzc2FyeSwgY3JlYXRlIGFub3RoZXIgZnJhbWVidWZmZXIgZm9yIHRoZSBtdWx0aXNh
bXBsZSByZXN1bHRzLgogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewogICAgICAgICA6Omds
R2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwpA
QCAtNjU0LDIwICs2NTYsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tHUFVTdGF0
dXMoKQogI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9STShJT1MpCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjplbmRQYWludCgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKQogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHdl
IGFjdHVhbGx5IHB1c2ggb3VyIGN1cnJlbnQgcmVuZGVyaW5nCisgICAgLy8gcmVzdWx0cyB0byB0
aGUgY29tcG9zaXRvciBvbiBpT1MuIE9uIG1hY09TIGl0IGNvbWVzIGZyb20gdGhlCisgICAgLy8g
Y2FsbGluZyBmdW5jdGlvbiwgd2hpY2ggaXMgaW5zaWRlIFdlYkdMTGF5ZXIuCiAgICAgOjpnbEZs
dXNoKCk7CiAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1
cmUpOwogICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9iaikgcHJlc2Vu
dFJlbmRlcmJ1ZmZlcjpHTF9SRU5ERVJCVUZGRVJdOwogICAgIFtFQUdMQ29udGV4dCBzZXRDdXJy
ZW50Q29udGV4dDpuaWxdOwotfQogI2VuZGlmCit9CiAKICNpZiBQTEFURk9STShNQUMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXpl
IHNpemUpCit7CisgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9T
dXJmYWNlQmFja2luZ1N0b3JlIGF0ICVkIHggJWQuICglcCkiLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCksIHRoaXMpOworICAgIFttX3dlYkdMTGF5ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNr
aW5nU3RvcmVXaXRoU2l6ZTpzaXplIHVzaW5nQWxwaGE6bV9hdHRycy5hbHBoYV07Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9y
ZUZyb21MYXllcigpCit7CisgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0
ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpLiAoJXApIiwgdGhpcyk7
CisgICAgW21fd2ViR0xMYXllciBiaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNl
XTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlQ0dMQ29udGV4dCgpCiB7CiAg
ICAgaWYgKCFtX2NvbnRleHRPYmopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKaW5kZXggMGUwMmUxNzdkYjA0NjY2NGEyYjA0NTNi
ODU0YTJhM2ExYjMxOWRiMS4uNWI0YjUxODQwMWVlOTljY2VhN2NiMTZlOGMwOTJkYmNjZDBmY2M3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
R0xMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkdMTGF5ZXIuaApAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2ltcG9ydCAi
SU9TdXJmYWNlLmgiCisjaW1wb3J0ICJJbnRTaXplLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1
YXJ0ekNvcmUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIsMTQgKzM0LDIxIEBAIGNs
YXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIH0KIAotI2lmIFBM
QVRGT1JNKElPUykKLUBpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBRUFHTExheWVyCisjaWYgUExB
VEZPUk0oTUFDKQorQGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FMYXllcgogI2Vsc2UKLUBpbnRl
cmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdMTGF5ZXIKK0BpbnRlcmZhY2UgV2ViR0xMYXllciA6
IENBRUFHTExheWVyCiAjZW5kaWYKIHsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCog
X2NvbnRleHQ7CiAgICAgZmxvYXQgX2RldmljZVBpeGVsUmF0aW87CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9jb250ZW50c0J1ZmZl
cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfZHJhd2luZ0J1ZmZl
cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfc3BhcmVCdWZmZXI7
CisgICAgV2ViQ29yZTo6SW50U2l6ZSBfYnVmZmVyU2l6ZTsKKyAgICBCT09MIF91c2luZ0FscGhh
OworI2VuZGlmCiB9CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dDsKQEAgLTQ4LDUgKzU3LDEwIEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogCiAtIChDR0ltYWdlUmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6KENH
Q29sb3JTcGFjZVJlZiljb2xvclNwYWNlOwogCisjaWYgUExBVEZPUk0oTUFDKQorLSAodm9pZClh
bGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOihXZWJDb3JlOjpJbnRTaXplKXNp
emUgdXNpbmdBbHBoYTooQk9PTCl1c2luZ0FscGhhOworLSAodm9pZCliaW5kRnJhbWVidWZmZXJU
b05leHRBdmFpbGFibGVTdXJmYWNlOworI2VuZGlmCisKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KaW5kZXggMzZh
N2M0OWJjZTFkMjYzZjRiY2QzOGUzMGZjNDhjMGJmM2QxZWU3NC4uODdlNWJmYjQzOTVhOWI5Y2I2
OTE3Y2QzZGM0ODEyZmE5ZjhlOWRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCkBAIC0zMywxMCArMzMsMTEgQEAKICNp
bXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2lt
cG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNv
cmVTUEkuaD4KICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICNpbXBvcnQg
PE9wZW5HTC9PcGVuR0wuaD4KICNpbXBvcnQgPE9wZW5HTC9nbC5oPgogI2VuZGlmCkBAIC01Mywx
MTMgKzU0LDM3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CiAgICAgX2RldmljZVBpeGVsUmF0aW8gPSBjb250ZXh0LT5nZXRDb250ZXh0QXR0cmli
dXRlcygpLmRldmljZVBpeGVsUmF0aW87CiAjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmICghY29u
dGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkKKyAgICAgICAgc2VsZi5vcGFxdWUg
PSBZRVM7CisgICAgc2VsZi50cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNESWRlbnRpdHk7CiAgICAg
c2VsZi5jb250ZW50c1NjYWxlID0gX2RldmljZVBpeGVsUmF0aW87Ci0gICAgc2VsZi5jb2xvcnNw
YWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKICNlbmRpZgogICAgIHJldHVybiBzZWxmOwogfQog
Ci0jaWYgIVBMQVRGT1JNKElPUykKLS0oQ0dMUGl4ZWxGb3JtYXRPYmopY29weUNHTFBpeGVsRm9y
bWF0Rm9yRGlzcGxheU1hc2s6KHVpbnQzMl90KW1hc2sKLXsKLSAgICAvLyBXZSdyZSBiYXNpY2Fs
bHkgY29weWluZyB0aGUgcGl4ZWwgZm9ybWF0IG9iamVjdCBmcm9tIHRoZSBleGlzdGluZwotICAg
IC8vIFdlYkdMIGNvbnRleHQsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXNlIHRoZSBkaXNwbGF5IG1h
c2suCi0gICAgVU5VU0VEX1BBUkFNKG1hc2spOwotCi0gICAgQ0dMUGl4ZWxGb3JtYXRPYmogd2Vi
Z2xQaXhlbEZvcm1hdCA9IENHTEdldFBpeGVsRm9ybWF0KF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEKCkpOwotCi0gICAgVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiBh
dHRyaWJzOwotICAgIEdMaW50IHZhbHVlOwotCi0gICAgQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdCh3
ZWJnbFBpeGVsRm9ybWF0LCAwLCBrQ0dMUEZBQ29sb3JTaXplLCAmdmFsdWUpOwotICAgIGF0dHJp
YnMuYXBwZW5kKGtDR0xQRkFDb2xvclNpemUpOwotICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19j
YXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPih2YWx1ZSkpOwotCi0gICAgLy8gV2UgZG9uJ3Qg
bmVlZCB0byBzcGVjaWZ5IGEgZGVwdGggc2l6ZSBzaW5jZSB3ZSdyZSBvbmx5Ci0gICAgLy8gdXNp
bmcgdGhpcyBjb250ZXh0IGFzIGEgMmQgYmxpdCBkZXN0aW5hdGlvbiBmb3IgdGhlIFdlYkdMIEZC
Ty4KLSAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBRGVwdGhTaXplKTsKLSAgICBhdHRyaWJzLmFw
cGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMCkpOwotCi0gICAgQ0dM
RGVzY3JpYmVQaXhlbEZvcm1hdCh3ZWJnbFBpeGVsRm9ybWF0LCAwLCBrQ0dMUEZBQWxsb3dPZmZs
aW5lUmVuZGVyZXJzLCAmdmFsdWUpOwotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgYXR0cmlicy5h
cHBlbmQoa0NHTFBGQUFsbG93T2ZmbGluZVJlbmRlcmVycyk7Ci0KLSAgICBDR0xEZXNjcmliZVBp
eGVsRm9ybWF0KHdlYmdsUGl4ZWxGb3JtYXQsIDAsIGtDR0xQRkFBY2NlbGVyYXRlZCwgJnZhbHVl
KTsKLSAgICBpZiAodmFsdWUpCi0gICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFBY2NlbGVy
YXRlZCk7Ci0KLSAgICBDR0xEZXNjcmliZVBpeGVsRm9ybWF0KHdlYmdsUGl4ZWxGb3JtYXQsIDAs
IGtDR0xQRkFPcGVuR0xQcm9maWxlLCAmdmFsdWUpOwotICAgIGlmICh2YWx1ZSkgewotICAgICAg
ICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBT3BlbkdMUHJvZmlsZSk7Ci0gICAgICAgIGF0dHJpYnMu
YXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPih2YWx1ZSkpOwotICAg
IH0KLQotICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmli
dXRlPigwKSk7Ci0KLSAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdDsKLSAgICBHTGlu
dCBudW1QaXhlbEZvcm1hdHMgPSAwOwotICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMu
ZGF0YSgpLCAmcGl4ZWxGb3JtYXQsICZudW1QaXhlbEZvcm1hdHMpOwotCi0gICAgQVNTRVJUKHBp
eGVsRm9ybWF0KTsKLSAgICBBU1NFUlQobnVtUGl4ZWxGb3JtYXRzKTsKLQotICAgIHJldHVybiBw
aXhlbEZvcm1hdDsKLX0KLQotLShDR0xDb250ZXh0T2JqKWNvcHlDR0xDb250ZXh0Rm9yUGl4ZWxG
b3JtYXQ6KENHTFBpeGVsRm9ybWF0T2JqKXBpeGVsRm9ybWF0CisjaWYgUExBVEZPUk0oTUFDKQor
Ly8gT24gTWFjLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIGxheWVyIHRvIHRha2UgaW50byBhY2NvdW50
CisvLyB0aGF0IHRoZSBJT1N1cmZhY2UgcHJvdmlkZXMgY29udGVudCBpbiBZLXVwLiBUaGlzCisv
LyBtZWFucyB0aGF0IGFueSBpbmNvbWluZyB0cmFuc2Zvcm0gKHVubGlrZWx5LCBzaW5jZSB0aGlz
CisvLyBpcyBhIGNvbnRlbnRzIGxheWVyKSBhbmQgYW5jaG9yIHBvaW50IG11c3QgYWRkIGEKKy8v
IFkgc2NhbGUgb2YgLTEgYW5kIG1ha2Ugc3VyZSB0aGUgdHJhbnNmb3JtIGhhcHBlbnMgZnJvbQor
Ly8gdGhlIHRvcC4KKworLSAodm9pZClzZXRUcmFuc2Zvcm06KENBVHJhbnNmb3JtM0QpdAogewot
ICAgIENHTENvbnRleHRPYmogY29udGV4dE9iajsKLSAgICBDR0xDcmVhdGVDb250ZXh0KHBpeGVs
Rm9ybWF0LCBfY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCAmY29udGV4dE9i
aik7Ci0gICAgcmV0dXJuIGNvbnRleHRPYmo7CisgICAgW3N1cGVyIHNldFRyYW5zZm9ybTpDQVRy
YW5zZm9ybTNEU2NhbGUodCwgMSwgLTEsIDEpXTsKIH0KIAotLSh2b2lkKWRyYXdJbkNHTENvbnRl
eHQ6KENHTENvbnRleHRPYmopZ2xDb250ZXh0IHBpeGVsRm9ybWF0OihDR0xQaXhlbEZvcm1hdE9i
ailwaXhlbEZvcm1hdCBmb3JMYXllclRpbWU6KENGVGltZUludGVydmFsKXRpbWVJbnRlcnZhbCBk
aXNwbGF5VGltZTooY29uc3QgQ1ZUaW1lU3RhbXAgKil0aW1lU3RhbXAKKy0gKHZvaWQpc2V0QW5j
aG9yUG9pbnQ6KENHUG9pbnQpcAogewotICAgIGlmICghX2NvbnRleHQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIF9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwotCi0gICAgQ0dMU2V0Q3VycmVu
dENvbnRleHQoZ2xDb250ZXh0KTsKLQotICAgIENHUmVjdCBmcmFtZSA9IFtzZWxmIGZyYW1lXTsK
LSAgICBmcmFtZS5zaXplLndpZHRoICo9IF9kZXZpY2VQaXhlbFJhdGlvOwotICAgIGZyYW1lLnNp
emUuaGVpZ2h0ICo9IF9kZXZpY2VQaXhlbFJhdGlvOwotCi0gICAgLy8gZHJhdyB0aGUgRkJPIGlu
dG8gdGhlIGxheWVyCi0gICAgZ2xWaWV3cG9ydCgwLCAwLCBmcmFtZS5zaXplLndpZHRoLCBmcmFt
ZS5zaXplLmhlaWdodCk7Ci0gICAgZ2xNYXRyaXhNb2RlKEdMX1BST0pFQ1RJT04pOwotICAgIGds
TG9hZElkZW50aXR5KCk7Ci0gICAgZ2xPcnRobygtMSwgMSwgLTEsIDEsIC0xLCAxKTsKLSAgICBn
bE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsKLSAgICBnbExvYWRJZGVudGl0eSgpOwotCi0gICAg
Z2xFbmFibGUoR0xfVEVYVFVSRV8yRCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBfY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCkpOwotCi0gICAgZ2xCZWdpbihHTF9UUklBTkdM
RV9GQU4pOwotICAgICAgICBnbFRleENvb3JkMmYoMCwgMCk7Ci0gICAgICAgIGdsVmVydGV4MmYo
LTEsIC0xKTsKLSAgICAgICAgZ2xUZXhDb29yZDJmKDEsIDApOwotICAgICAgICBnbFZlcnRleDJm
KDEsIC0xKTsKLSAgICAgICAgZ2xUZXhDb29yZDJmKDEsIDEpOwotICAgICAgICBnbFZlcnRleDJm
KDEsIDEpOwotICAgICAgICBnbFRleENvb3JkMmYoMCwgMSk7Ci0gICAgICAgIGdsVmVydGV4MmYo
LTEsIDEpOwotICAgIGdsRW5kKCk7Ci0KLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOwotICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzJEKTsKLQotICAgIC8vIENhbGwgc3VwZXIg
dG8gZmluYWxpemUgdGhlIGRyYXdpbmcuIEJ5IGRlZmF1bHQgYWxsIGl0IGRvZXMgaXMgY2FsbCBn
bEZsdXNoKCkuCi0gICAgW3N1cGVyIGRyYXdJbkNHTENvbnRleHQ6Z2xDb250ZXh0IHBpeGVsRm9y
bWF0OnBpeGVsRm9ybWF0IGZvckxheWVyVGltZTp0aW1lSW50ZXJ2YWwgZGlzcGxheVRpbWU6dGlt
ZVN0YW1wXTsKKyAgICBbc3VwZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UocC54LCAxLjAg
LSBwLnkpXTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0
IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogewogICAgIGZhc3RGcmVlKGNvbnN0X2Nh
c3Q8dm9pZCAqPihkYXRhKSk7CiB9Ci0jZW5kaWYKIAogLShDR0ltYWdlUmVmKWNvcHlJbWFnZVNu
YXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29sb3JTcGFjZVJlZiljb2xvclNwYWNlCiB7CkBAIC0y
MDMsMTcgKzEyOCw1NSBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQg
KmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgIGlmICghX2NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmIFBMQVRGT1JNKElPUykKICAgICBfY29udGV4dC0+ZW5kUGFpbnQoKTsKLSNl
bHNlCi0gICAgW3N1cGVyIGRpc3BsYXldOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIF9jb250
ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAgIGlmIChfZHJhd2luZ0J1ZmZlcikgeworICAgICAg
ICBzdGQ6OnN3YXAoX2NvbnRlbnRzQnVmZmVyLCBfZHJhd2luZ0J1ZmZlcik7CisgICAgICAgIHNl
bGYuY29udGVudHMgPSBfY29udGVudHNCdWZmZXItPmFzTGF5ZXJDb250ZW50cygpOworICAgICAg
ICBbc2VsZiByZWxvYWRWYWx1ZUZvcktleVBhdGg6QCJjb250ZW50cyJdOworICAgICAgICBbc2Vs
ZiBiaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNlXTsKKyAgICB9CiAjZW5kaWYK
KwogICAgIF9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgUGxhdGZvcm1DQUxh
eWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAg
IGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkKICAgICAgICAgbGF5ZXItPm93bmVyKCktPnBs
YXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShsYXllcik7CiB9CiAKKyNpZiBQTEFURk9STShN
QUMpCistICh2b2lkKWFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNpemU6KEludFNp
emUpc2l6ZSB1c2luZ0FscGhhOihCT09MKXVzaW5nQWxwaGEKK3sKKyAgICBfYnVmZmVyU2l6ZSA9
IHNpemU7CisgICAgX3VzaW5nQWxwaGEgPSB1c2luZ0FscGhhOworICAgIF9jb250ZW50c0J1ZmZl
ciA9IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlKHNpemUsIHNSR0JDb2xvclNwYWNlUmVmKCkp
OworICAgIF9kcmF3aW5nQnVmZmVyID0gV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGUoc2l6ZSwg
c1JHQkNvbG9yU3BhY2VSZWYoKSk7CisgICAgQVNTRVJUKF9jb250ZW50c0J1ZmZlcik7CisgICAg
QVNTRVJUKF9kcmF3aW5nQnVmZmVyKTsKK30KKworLSAodm9pZCliaW5kRnJhbWVidWZmZXJUb05l
eHRBdmFpbGFibGVTdXJmYWNlCit7CisgICAgR0MzRGVudW0gdGV4dHVyZSA9IF9jb250ZXh0LT5w
bGF0Zm9ybVRleHR1cmUoKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FSQiwgdGV4dHVyZSk7CisKKyAgICBpZiAoX2RyYXdpbmdCdWZmZXIgJiYgX2RyYXdpbmdCdWZm
ZXItPmlzSW5Vc2UoKSkgeworICAgICAgICBpZiAoIV9zcGFyZUJ1ZmZlcikKKyAgICAgICAgICAg
IF9zcGFyZUJ1ZmZlciA9IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlKF9idWZmZXJTaXplLCBz
UkdCQ29sb3JTcGFjZVJlZigpKTsKKyAgICAgICAgc3RkOjpzd2FwKF9kcmF3aW5nQnVmZmVyLCBf
c3BhcmVCdWZmZXIpOworICAgIH0KKworICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UgPSBfZHJh
d2luZ0J1ZmZlci0+c3VyZmFjZSgpOworICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gX3Vz
aW5nQWxwaGEgPyBHTF9SR0JBIDogR0xfUkdCOworCisgICAgLy8gTGluayB0aGUgSU9TdXJmYWNl
IHRvIHRoZSB0ZXh0dXJlLgorICAgIENHTEVycm9yIGVycm9yID0gQ0dMVGV4SW1hZ2VJT1N1cmZh
Y2UyRChfY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCBHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BUkIsIGludGVybmFsRm9ybWF0LCBfYnVmZmVyU2l6ZS53aWR0aCgpLCBfYnVmZmVy
U2l6ZS5oZWlnaHQoKSwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBpb1N1
cmZhY2UsIDApOworICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsIGVycm9yID09IGtDR0xOb0Vycm9y
KTsKK30KKyNlbmRpZgorCiBAZW5kCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KaW5kZXggM2Zj
NzZjOWM0MDQ1ODcyMDBkNjczZGZjZjFjMDViZWZkZDIzZDk0My4uOTgzMzhhYmJhM2FlZjljY2Ex
NzRjN2U2Y2RhN2Q1ZGEyOTMzZmY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiR3Jh
cGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbXBvcnQgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3Jl
U1BJLmg+CiAjaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KIAogI2lmIFBMQVRGT1JNKElPUykK
QEAgLTM4LDEwICszOSw2IEBACiAjaW1wb3J0ICJXZWJDb3JlVGhyZWFkLmgiCiAjZW5kaWYKIAot
QGludGVyZmFjZSBDQUxheWVyKFdlYkNvcmVDQUxheWVyUHJpdmF0ZSkKLS0gKHZvaWQpcmVsb2Fk
VmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGg7Ci1AZW5kCi0KIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTC5jcHAKaW5kZXggNTUzYTg5NzBkMzA0ZDFjYTZiNDdmYmY0NTIzNDIzZWU3MWYz
OTYzYy4uMTcyYzg4MjIyMWFlMTVhNzYzMmZkZTU4MmQ1MDExYTc1ZDJhNmJlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0yOSwxNiArMjksMTUgQEAKICNpZiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisKICNpZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJT1Mu
aCIKICNlbmRpZgotCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCIKLQogI2luY2x1ZGUgPGFs
Z29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CkBAIC03MCw2ICs2OSwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHdpcGVB
bHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hh
ciogcGl4ZWxzKQoreworICAgIC8vIFdlIGNhbiBhc3N1bWUgdGhpcyBkb2Vzbid0IG92ZXJmbG93
IGJlY2F1c2UgdGhlIGNhbGxpbmcgZnVuY3Rpb25zCisgICAgLy8gdXNlIGNoZWNrZWQgYXJpdGht
ZXRpYy4KKyAgICBpbnQgdG90YWxCeXRlcyA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgcGl4ZWxzW2kgKyAz
XSA9IDI1NTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZl
cnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
dW5zaWduZWQgY2hhciogcGl4ZWxzKQogewogICAgIC8vIE5WSURJQSBkcml2ZXJzIGhhdmUgYSBi
dWcgd2hlcmUgY2FsbGluZyByZWFkUGl4ZWxzIGluIEJHUkEgY2FuIHJldHVybiB0aGUgd3Jvbmcg
dmFsdWVzIGZvciB0aGUgYWxwaGEgY2hhbm5lbCB3aGVuIHRoZSBhbHBoYSBpcyBvZmYgZm9yIHRo
ZSBjb250ZXh0LgpAQCAtOTgsNiArMTA2LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQKICNl
bmRpZgogICAgIH0gZWxzZQogICAgICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscyk7CisKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFtX2F0dHJzLmFscGhhKQorICAgICAgICB3aXBlQWxw
aGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOworI2VuZGlmCiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCkBAIC0xNzAsNiAr
MTgzLDEwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3Rl
eHR1cmUpOwogICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
R0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKICAgICBz
ZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJl
bnRIZWlnaHQpOworI2VsaWYgUExBVEZPUk0oTUFDKQorICAgIGFsbG9jYXRlSU9TdXJmYWNlQmFj
a2luZ1N0b3JlKEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAgIHVwZGF0ZUZyYW1lYnVmZmVy
VGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1
cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xf
VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBtX3RleHR1cmUsIDApOwogI2Vsc2UKICAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKICAgICA6OmdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAs
IGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKQEAgLTQ0Miw2ICs0NTksMTEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAm
JiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCiAgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1fYXR0cnMuYWxwaGEgJiYg
KGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkJHUkEpICYmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fZmJvIHx8IChtX2F0dHJz
LmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pKSkKKyAg
ICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpKTsKKyNlbmRpZgogfQogCiB9Cg==
</data>
<flag name="review"
          id="342677"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>