<?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>45912</bug_id>
          
          <creation_ts>2010-09-16 11:57:01 -0700</creation_ts>
          <short_desc>[chromium] Change compositor to use GraphicsContext3D rather than GLES2Context</short_desc>
          <delta_ts>2010-09-20 18:17:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>45913</dependson>
    
    <dependson>45914</dependson>
    
    <dependson>45916</dependson>
    
    <dependson>45921</dependson>
    
    <dependson>45939</dependson>
    
    <dependson>46115</dependson>
          <blocked>45069</blocked>
    
    <blocked>46131</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>darin</cc>
    
    <cc>jamesr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>vrk</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>280246</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-16 11:57:01 -0700</bug_when>
    <thetext>In order to improve the testability of Chromium&apos;s accelerated compositing code, as well as to re-enable multi-DLL builds on Windows, we need to change the compositor (LayerRendererChromium and associated code) to build on top of GraphicsContext3D instead of GLES2Context. Once this effort is complete, the GLES2Context and WebGLES2Context will be removed from the WebKit tree. This master bug will track the multiple required checkins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281772</commentid>
    <comment_count>1</comment_count>
      <attachid>68127</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-20 13:11:38 -0700</bug_when>
    <thetext>Created attachment 68127
Patch

From the ChangeLog:

Switched Chromium&apos;s compositor to use GraphicsContext3D to issue its OpenGL rendering calls rather than the Chromium-specific GLES2Context and command buffer OpenGL implementation.

The in-process software rendering path for GraphicsContext3D does not yet work with the compositor, at least not on Mac OS X. This will be worked on in subsequent bugs.

Tested manually with 3D CSS, WebGL and video content on Mac OS X and Linux. No new tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281774</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-20 13:15:23 -0700</bug_when>
    <thetext>Attachment 68127 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebViewImpl.cpp:2447:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281784</commentid>
    <comment_count>3</comment_count>
      <attachid>68127</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-20 13:42:07 -0700</bug_when>
    <thetext>Comment on attachment 68127
Patch

Looking pretty good overall, some nits.  The style bot&apos;s nit is accurate.

Not touching review? so the rest of the bots get a chance to chug on it.

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

&gt; WebCore/platform/graphics/chromium/CanvasLayerChromium.h:50
&gt; +        SharedValues(GraphicsContext3D*);

explicit

&gt; WebCore/platform/graphics/chromium/ContentLayerChromium.h:58
&gt; +        SharedValues(GraphicsContext3D*);

explicit

&gt; WebCore/platform/graphics/chromium/LayerChromium.h:174
&gt; +        SharedValues(GraphicsContext3D*);

explicit

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.h:106
&gt; +    void noticeResize(const IntSize&amp;);

Name is odd, it&apos;s not really telling the LayerRendererChromium to do something. I liked resizeOnscreenContent().

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:178
&gt; +        void* mem = context-&gt;mapTexSubImage2DCHROMIUM(GraphicsContext3D::TEXTURE_2D, 0, updateRect.x(), updateRect.y(), updateRect.width(), updateRect.height(), GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, GraphicsContext3D::WRITE_ONLY);

I see that you aren&apos;t changing behavior here, but could you file a bug on the video guys to check for a NULL return here and handle it?  The mapTexSub..() extension may return null if it can&apos;t get a suitable shared memory segment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281787</commentid>
    <comment_count>4</comment_count>
      <attachid>68127</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-09-20 13:50:31 -0700</bug_when>
    <thetext>Comment on attachment 68127
Patch

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

&gt; WebKit/chromium/src/GraphicsContext3D.cpp:807
&gt; +    if (!internal-&gt;initialize(attrs, hostWindow, renderStyle == RenderDirectlyToHostWindow ? true : false)) {

Nit:  you can omit the ternary.  A relational expression in C++ is type bool already.

&gt; WebKit/chromium/src/GraphicsContext3D.cpp:810
&gt; +    PassOwnPtr&lt;GraphicsContext3D&gt; result = new GraphicsContext3D(attrs, hostWindow, renderStyle == RenderDirectlyToHostWindow ? true : false);

Same as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281839</commentid>
    <comment_count>5</comment_count>
      <attachid>68142</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-20 15:04:01 -0700</bug_when>
    <thetext>Created attachment 68142
Revised patch

Addressed above code review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281842</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-20 15:06:05 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 68127 [details])
&gt; Looking pretty good overall, some nits.  The style bot&apos;s nit is accurate.

Revised patch fixes style error.

&gt; Not touching review? so the rest of the bots get a chance to chug on it.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68127&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/CanvasLayerChromium.h:50
&gt; &gt; +        SharedValues(GraphicsContext3D*);
&gt; 
&gt; explicit

Done.

&gt; &gt; WebCore/platform/graphics/chromium/ContentLayerChromium.h:58
&gt; &gt; +        SharedValues(GraphicsContext3D*);
&gt; 
&gt; explicit

Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerChromium.h:174
&gt; &gt; +        SharedValues(GraphicsContext3D*);
&gt; 
&gt; explicit
&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.h:106
&gt; &gt; +    void noticeResize(const IntSize&amp;);
&gt; 
&gt; Name is odd, it&apos;s not really telling the LayerRendererChromium to do something. I liked resizeOnscreenContent().

That&apos;s fine; changed it to resizeOnscreenContent.

&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:178
&gt; &gt; +        void* mem = context-&gt;mapTexSubImage2DCHROMIUM(GraphicsContext3D::TEXTURE_2D, 0, updateRect.x(), updateRect.y(), updateRect.width(), updateRect.height(), GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, GraphicsContext3D::WRITE_ONLY);
&gt; 
&gt; I see that you aren&apos;t changing behavior here, but could you file a bug on the video guys to check for a NULL return here and handle it?  The mapTexSub..() extension may return null if it can&apos;t get a suitable shared memory segment.

Their new patch at https://bugs.webkit.org/show_bug.cgi?id=45069 handles the NULL return value. It will be best if they can also handle the absence of the GL_CHROMIUM_map_sub extension, which I&apos;ll file after this lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281843</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-20 15:06:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 68127 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68127&amp;action=review
&gt; 
&gt; &gt; WebKit/chromium/src/GraphicsContext3D.cpp:807
&gt; &gt; +    if (!internal-&gt;initialize(attrs, hostWindow, renderStyle == RenderDirectlyToHostWindow ? true : false)) {
&gt; 
&gt; Nit:  you can omit the ternary.  A relational expression in C++ is type bool already.

Good point. Done.

&gt; &gt; WebKit/chromium/src/GraphicsContext3D.cpp:810
&gt; &gt; +    PassOwnPtr&lt;GraphicsContext3D&gt; result = new GraphicsContext3D(attrs, hostWindow, renderStyle == RenderDirectlyToHostWindow ? true : false);
&gt; 
&gt; Same as above.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281848</commentid>
    <comment_count>8</comment_count>
      <attachid>68142</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-20 15:20:09 -0700</bug_when>
    <thetext>Comment on attachment 68142
Revised patch

R=me

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

&gt; WebCore/ChangeLog:66
&gt; +        (WebCore::LayerRendererChromium::noticeResize):

nit: changelog out of date, this function is called resizeOnscreenContent() now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281854</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-20 15:28:56 -0700</bug_when>
    <thetext>Committed r67885: &lt;http://trac.webkit.org/changeset/67885&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281858</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-20 15:30:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 68142 [details])
&gt; R=me
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68142&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/ChangeLog:66
&gt; &gt; +        (WebCore::LayerRendererChromium::noticeResize):
&gt; 
&gt; nit: changelog out of date, this function is called resizeOnscreenContent() now.

Fixed in landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281982</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-20 18:06:29 -0700</bug_when>
    <thetext>Committed r67903: &lt;http://trac.webkit.org/changeset/67903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281983</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-20 18:09:19 -0700</bug_when>
    <thetext>Looks like you had a mis-merged ChangeLog, Darin.  Reopening this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281984</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-20 18:12:11 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Looks like you had a mis-merged ChangeLog, Darin.  Reopening this bug.

Yes. webkit-patch is not my friend :-(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68127</attachid>
            <date>2010-09-20 13:11:38 -0700</date>
            <delta_ts>2010-09-20 15:04:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>gc3d-compositor.patch</filename>
            <type>text/plain</type>
            <size>78118</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzg3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMDktMjAgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtj
aHJvbWl1bV0gQ2hhbmdlIGNvbXBvc2l0b3IgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNEIHJhdGhl
ciB0aGFuIEdMRVMyQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDU5MTIKKworICAgICAgICBTd2l0Y2hlZCBDaHJvbWl1bSdzIGNvbXBvc2l0
b3IgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNEIHRvIGlzc3VlCisgICAgICAgIGl0cyBPcGVuR0wg
cmVuZGVyaW5nIGNhbGxzIHJhdGhlciB0aGFuIHRoZSBDaHJvbWl1bS1zcGVjaWZpYworICAgICAg
ICBHTEVTMkNvbnRleHQgYW5kIGNvbW1hbmQgYnVmZmVyIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4K
KworICAgICAgICBUaGUgaW4tcHJvY2VzcyBzb2Z0d2FyZSByZW5kZXJpbmcgcGF0aCBmb3IgR3Jh
cGhpY3NDb250ZXh0M0QgZG9lcworICAgICAgICBub3QgeWV0IHdvcmsgd2l0aCB0aGUgY29tcG9z
aXRvciwgYXQgbGVhc3Qgbm90IG9uIE1hYyBPUyBYLiBUaGlzCisgICAgICAgIHdpbGwgYmUgd29y
a2VkIG9uIGluIHN1YnNlcXVlbnQgYnVncy4KKworICAgICAgICBUZXN0ZWQgbWFudWFsbHkgd2l0
aCAzRCBDU1MsIFdlYkdMIGFuZCB2aWRlbyBjb250ZW50IG9uIE1hYyBPUyBYCisgICAgICAgIGFu
ZCBMaW51eC4gTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJDaHJvbWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFs
dWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
czo6flNoYXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVt
OjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
ckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21p
dW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6On5TaGFyZWRWYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmRyYXcpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3Jt
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6On5TaGFyZWRWYWx1ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlU2hhZGVyUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpsYXllclJlbmRlcmVyQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpkcmF3QXNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnByZXBhcmVGb3JEcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXM6OmNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVMYXllclRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJJbnRvU3RlbmNpbEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzY2lz
c29yVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6bWFr
ZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6bm90aWNlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2gpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRzQ29weVRl
eHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6
CisKIDIwMTAtMDktMjAgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDcg
QEAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkRyYXdp
bmdCdWZmZXIuaCIKLQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTQsNyArNTMsNyBAQCBD
YW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvCiBDYW52YXMyRExheWVyQ2hy
b21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0oKQogewogICAgIGlmIChtX3RleHR1cmVJZCkK
LSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlSWQpOworICAgICAgICBsYXll
clJlbmRlcmVyQ29udGV4dCgpLT5kZWxldGVUZXh0dXJlKG1fdGV4dHVyZUlkKTsKIH0KIAogdm9p
ZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKQEAgLTYyLDI2ICs2MSwy
NyBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVuCiAgICAgaWYgKCFt
X2RyYXdpbmdCdWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobV90ZXh0dXJlQ2hhbmdl
ZCkgeyAvLyBXZSBoYXZlIHRvIGdlbmVyYXRlIGEgbmV3IGJhY2tpbmcgdGV4dHVyZS4KKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwog
ICAgICAgICBpZiAobV90ZXh0dXJlSWQpCi0gICAgICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX3RleHR1cmVJZCk7Ci0gICAgICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZUlkKTsK
LSAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKLSAgICAgICAgZ2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgICAgICBjb250ZXh0LT5k
ZWxldGVUZXh0dXJlKG1fdGV4dHVyZUlkKTsKKyAgICAgICAgbV90ZXh0dXJlSWQgPSBjb250ZXh0
LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKICAgICAgICAgSW50U2l6
ZSBzaXplID0gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCk7Ci0gICAgICAgIGdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICAvLyBTZXQgdGhlIG1pbi1t
YWcgZmlsdGVycyB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR0xfQ0xBTVBfVE9fRURHRQor
ICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIDApOworICAgICAgICAvLyBTZXQgdGhlIG1pbi1tYWcgZmlsdGVycyB0byBsaW5lYXIg
YW5kIHdyYXAgbW9kZXMgdG8gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UKICAgICAg
ICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KLSAg
ICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJ
TFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAg
ICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFN
UF9UT19FREdFKTsKKyAgICAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgLy8gRklYTUU6IFRoZSBnbEZpbmlzaCgpIGhlcmUgaXMgcmVxdWly
ZWQgYmVjYXVzZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0dXJlIGNyZWF0ZWQg
aW4gdGhpcworICAgICAgICAvLyBGSVhNRTogVGhlIGZpbmlzaCgpIGhlcmUgaXMgcmVxdWlyZWQg
YmVjYXVzZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0dXJlIGNyZWF0ZWQgaW4g
dGhpcwogICAgICAgICAvLyBjb250ZXh0ICh0aGUgY29tcG9zaXRvciBjb250ZXh0KSBpcyBhY3R1
YWxseSBjcmVhdGVkIGJ5IHRoZSBzZXJ2aWNlIHNpZGUgYmVmb3JlIHRoZSBjaGlsZCBjb250ZXh0
Ci0gICAgICAgIC8vIGF0dGVtcHRzIHRvIHVzZSBpdCAoaW4gcHVibGlzaFRvUGxhdGZvcm1MYXll
cikuICBnbEZpbmlzaCgpIGlzIGN1cnJlbnRseSB0aGUgb25seSBjYWxsIHdpdGggc3Ryb25nCisg
ICAgICAgIC8vIGF0dGVtcHRzIHRvIHVzZSBpdCAoaW4gcHVibGlzaFRvUGxhdGZvcm1MYXllciku
ICBmaW5pc2goKSBpcyBjdXJyZW50bHkgdGhlIG9ubHkgY2FsbCB3aXRoIHN0cm9uZwogICAgICAg
ICAvLyBlbm91Z2ggc2VtYW50aWNzIHRvIHByb21pc2UgdGhpcywgYnV0IGlzIGFjdHVhbGx5IG11
Y2ggc3Ryb25nZXIuICBJZGVhbGx5IHdlJ2QgZG8gc29tZXRoaW5nIGxpa2UKICAgICAgICAgLy8g
aW5zZXJ0aW5nIGEgZmVuY2UgaGVyZSBhbmQgd2FpdGluZyBmb3IgaXQgYmVmb3JlIHRyeWluZyB0
byBwdWJsaXNoLgotICAgICAgICBnbEZpbmlzaCgpOworICAgICAgICBjb250ZXh0LT5maW5pc2go
KTsKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2Vk
IGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwxNiArMzQsMTYgQEAKIAogI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKIAor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCiAKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1bnNpZ25lZCBDYW52YXNMYXllckNocm9taXVtOjptX3NoYWRlclByb2dyYW1JZCA9IDA7
CiAKLUNhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKCkKLSAg
ICA6IG1fY2FudmFzU2hhZGVyUHJvZ3JhbSgwKQorQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVk
VmFsdWVzOjpTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fY2FudmFzU2hhZGVyUHJvZ3JhbSgwKQogICAgICwg
bV9zaGFkZXJTYW1wbGVyTG9jYXRpb24oLTEpCiAgICAgLCBtX3NoYWRlck1hdHJpeExvY2F0aW9u
KC0xKQogICAgICwgbV9zaGFkZXJBbHBoYUxvY2F0aW9uKC0xKQpAQCAtNzMsMTUgKzczLDE1IEBA
IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmUKICAgICAgICAgIiAgZ2xf
RnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhD
b2xvci53KSAqIGFscGhhOyBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLSAgICBtX2NhbnZhc1NoYWRlclByb2dy
YW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21lbnRTaGFk
ZXJTdHJpbmcpOworICAgIG1fY2FudmFzU2hhZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dy
YW0obV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKTsK
ICAgICBpZiAoIW1fY2FudmFzU2hhZGVyUHJvZ3JhbSkgewogICAgICAgICBMT0dfRVJST1IoIkNh
bnZhc0xheWVyQ2hyb21pdW06IEZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24obV9jYW52YXNTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7Ci0g
ICAgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY2FudmFz
U2hhZGVyUHJvZ3JhbSwgIm1hdHJpeCIpOwotICAgIG1fc2hhZGVyQWxwaGFMb2NhdGlvbiA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKG1fY2FudmFzU2hhZGVyUHJvZ3JhbSwgImFscGhhIik7CisgICAg
bV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbiht
X2NhbnZhc1NoYWRlclByb2dyYW0sICJzX3RleHR1cmUiKTsKKyAgICBtX3NoYWRlck1hdHJpeExv
Y2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9jYW52YXNTaGFkZXJQcm9n
cmFtLCAibWF0cml4Iik7CisgICAgbV9zaGFkZXJBbHBoYUxvY2F0aW9uID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24obV9jYW52YXNTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsKICAgICBB
U1NFUlQobV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gIT0gLTEpOwogICAgIEFTU0VSVChtX3NoYWRl
ck1hdHJpeExvY2F0aW9uICE9IC0xKTsKICAgICBBU1NFUlQobV9zaGFkZXJBbHBoYUxvY2F0aW9u
ICE9IC0xKTsKQEAgLTkyLDcgKzkyLDcgQEAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzOjpTaGFyZQogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFs
dWVzKCkKIHsKICAgICBpZiAobV9jYW52YXNTaGFkZXJQcm9ncmFtKQotICAgICAgICBHTEMoZ2xE
ZWxldGVQcm9ncmFtKG1fY2FudmFzU2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9jYW52YXNTaGFkZXJQcm9ncmFtKSk7CiB9
CiAKIENhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcikKQEAgLTExMSwxMSArMTExLDEyIEBAIHZvaWQgQ2FudmFzTGF5ZXJD
aHJvbWl1bTo6ZHJhdygpCiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAgICAgY29uc3Qg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBzdiA9IGxheWVyUmVuZGVyZXIoKS0+
Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKTsKICAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxp
emVkKCkpOwotICAgIEdMQyhnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTEMo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCkpOworICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CiAgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VT
aGFkZXIoc3YtPmNhbnZhc1NoYWRlclByb2dyYW0oKSk7Ci0gICAgR0xDKGdsVW5pZm9ybTFpKHN2
LT5zaGFkZXJTYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAgIGRyYXdUZXh0dXJlZFF1YWQobGF5
ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKKyAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5zaGFkZXJTYW1wbGVyTG9jYXRpb24o
KSwgMCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5w
cm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKICAgICAgICAgICAgICAgICAgICAg
IGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAogICAg
ICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIHN2LT5zaGFkZXJB
bHBoYUxvY2F0aW9uKCkpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gNjc4NzQp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBjbGFz
cyBTaGFyZWRWYWx1ZXMgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2hhcmVkVmFsdWVzKCk7Cisg
ICAgICAgIFNoYXJlZFZhbHVlcyhHcmFwaGljc0NvbnRleHQzRCopOwogICAgICAgICB+U2hhcmVk
VmFsdWVzKCk7CiAKICAgICAgICAgdW5zaWduZWQgY2FudmFzU2hhZGVyUHJvZ3JhbSgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FudmFzU2hhZGVyUHJvZ3JhbTsgfQpAQCAtNTcsNiArNTcsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxp
emVkOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250
ZXh0OwogICAgICAgICB1bnNpZ25lZCBtX2NhbnZhc1NoYWRlclByb2dyYW07CiAgICAgICAgIGlu
dCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsKICAgICAgICAgaW50IG1fc2hhZGVyTWF0cml4TG9j
YXRpb247CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNjc4NzQpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiQ29udGVudExh
eWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCiAKQEAgLTQ3LDEyICs0OCwxMSBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1h
cENvbnRleHQuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVk
VmFsdWVzKCkKLSAgICA6IG1fY29udGVudFNoYWRlclByb2dyYW0oMCkKK0NvbnRlbnRMYXllckNo
cm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcyhHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jb250ZW50U2hhZGVyUHJv
Z3JhbSgwKQogICAgICwgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24oLTEpCiAgICAgLCBtX3NoYWRl
ck1hdHJpeExvY2F0aW9uKC0xKQogICAgICwgbV9zaGFkZXJBbHBoYUxvY2F0aW9uKC0xKQpAQCAt
OTAsMTUgKzkwLDE1IEBAIENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXIK
ICNlbmRpZgogICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIjsKIAotICAgIG1fY29udGVudFNoYWRlclByb2dyYW0gPSBjcmVhdGVT
aGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21lbnRTaGFkZXJTdHJpbmcpOwor
ICAgIG1fY29udGVudFNoYWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKG1fY29udGV4
dCwgdmVydGV4U2hhZGVyU3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZyk7CiAgICAgaWYgKCFt
X2NvbnRlbnRTaGFkZXJQcm9ncmFtKSB7CiAgICAgICAgIExPR19FUlJPUigiQ29udGVudExheWVy
Q2hyb21pdW06IEZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uID0gZ2xHZXRVbmlmb3Jt
TG9jYXRpb24obV9jb250ZW50U2hhZGVyUHJvZ3JhbSwgInNfdGV4dHVyZSIpOwotICAgIG1fc2hh
ZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbnRlbnRTaGFkZXJQ
cm9ncmFtLCAibWF0cml4Iik7Ci0gICAgbV9zaGFkZXJBbHBoYUxvY2F0aW9uID0gZ2xHZXRVbmlm
b3JtTG9jYXRpb24obV9jb250ZW50U2hhZGVyUHJvZ3JhbSwgImFscGhhIik7CisgICAgbV9zaGFk
ZXJTYW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbnRl
bnRTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7CisgICAgbV9zaGFkZXJNYXRyaXhMb2NhdGlv
biA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fY29udGVudFNoYWRlclByb2dyYW0s
ICJtYXRyaXgiKTsKKyAgICBtX3NoYWRlckFscGhhTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihtX2NvbnRlbnRTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsKICAgICBBU1NF
UlQobV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gIT0gLTEpOwogICAgIEFTU0VSVChtX3NoYWRlck1h
dHJpeExvY2F0aW9uICE9IC0xKTsKICAgICBBU1NFUlQobV9zaGFkZXJBbHBoYUxvY2F0aW9uICE9
IC0xKTsKQEAgLTEwOSw3ICsxMDksNyBAQCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzOjpTaGFyCiBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFs
dWVzKCkKIHsKICAgICBpZiAobV9jb250ZW50U2hhZGVyUHJvZ3JhbSkKLSAgICAgICAgR0xDKGds
RGVsZXRlUHJvZ3JhbShtX2NvbnRlbnRTaGFkZXJQcm9ncmFtKSk7CisgICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2NvbnRlbnRTaGFkZXJQcm9ncmFtKSk7
CiB9CiAKIApAQCAtMTI3LDcgKzEyNyw3IEBAIENvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50
TGF5ZXJDaHJvbWkKIENvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVudExheWVyQ2hyb21pdW0o
KQogewogICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgR0xDKGdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fY29udGVudHNUZXh0dXJlKSk7CisgICAgICAgIEdMQyhsYXllclJlbmRlcmVy
Q29udGV4dCgpLCBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5kZWxldGVUZXh0dXJlKG1fY29udGVu
dHNUZXh0dXJlKSk7CiB9CiAKIApAQCAtMjM2LDIwICsyMzYsMjEgQEAgdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZQogICAgIGlmICghcGl4ZWxzKQogICAgICAgICByZXR1
cm47CiAKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7CisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAg
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0
dXJlSWQpOwogCiAgICAgLy8gSWYgdGhlIHRleHR1cmUgaWQgb3Igc2l6ZSBjaGFuZ2VkIHNpbmNl
IGxhc3QgdGltZSB0aGVuIHdlIG5lZWQgdG8gdGVsbCBHTAogICAgIC8vIHRvIHJlLWFsbG9jYXRl
IGEgdGV4dHVyZS4KICAgICBpZiAobV9jb250ZW50c1RleHR1cmUgIT0gdGV4dHVyZUlkIHx8IHJl
cXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkgewogICAgICAgICBB
U1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVTaXplKTsKLSAgICAgICAgR0xDKGds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCByZXF1aXJlZFRleHR1cmVTaXpl
LndpZHRoKCksIHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIHBpeGVscykpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIHJlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSwgcmVxdWlyZWRUZXh0dXJlU2l6
ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKIAogICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9
IHRleHR1cmVJZDsKICAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJlcXVpcmVkVGV4
dHVyZVNpemU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHVwZGF0ZVJlY3Qud2lkdGgo
KSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkgJiYgdXBkYXRlUmVjdC5oZWlnaHQo
KSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgpKTsKICAgICAgICAgQVNTRVJUKHVw
ZGF0ZVJlY3Qud2lkdGgoKSA9PSBiaXRtYXBTaXplLndpZHRoKCkgJiYgdXBkYXRlUmVjdC5oZWln
aHQoKSA9PSBiaXRtYXBTaXplLmhlaWdodCgpKTsKLSAgICAgICAgR0xDKGdsVGV4U3ViSW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0
ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgcGl4ZWxzKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhTdWJJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBk
YXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBw
aXhlbHMpKTsKICAgICB9CiAKICAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsK
QEAgLTI2NCwxMSArMjY1LDEyIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQog
ICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9t
aXVtOjpTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZW50TGF5ZXJTaGFy
ZWRWYWx1ZXMoKTsKICAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxpemVkKCkpOwotICAgIEdM
QyhnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTEMoZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX2NvbnRlbnRzVGV4dHVyZSkpOworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fY29udGVudHNUZXh0dXJlKSk7CiAgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFk
ZXIoc3YtPmNvbnRlbnRTaGFkZXJQcm9ncmFtKCkpOwotICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+
c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVy
UmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShzdi0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCks
IDApKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJv
amVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCiAgICAgICAgICAgICAgICAgICAgICBi
b3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKICAgICAg
ICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxw
aGFMb2NhdGlvbigpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDY3ODc0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICAvLyBj
b250ZXh0KS4KICAgICBjbGFzcyBTaGFyZWRWYWx1ZXMgewogICAgIHB1YmxpYzoKLSAgICAgICAg
U2hhcmVkVmFsdWVzKCk7CisgICAgICAgIFNoYXJlZFZhbHVlcyhHcmFwaGljc0NvbnRleHQzRCop
OwogICAgICAgICB+U2hhcmVkVmFsdWVzKCk7CiAKICAgICAgICAgdW5zaWduZWQgY29udGVudFNo
YWRlclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaGFkZXJQcm9ncmFtOyB9CkBA
IC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgaW50IGluaXRpYWxpemVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pbml0aWFsaXplZDsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICAgICAgdW5zaWduZWQgbV9jb250ZW50U2hhZGVy
UHJvZ3JhbTsKICAgICAgICAgaW50IG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uOwogICAgICAgICBp
bnQgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDY3ODc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
cmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksNiBA
QAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgogI2VuZGlmCiAKLSNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KLSNpZm5kZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotI2RlZmluZSBHTF9H
TEVYVF9QUk9UT1RZUEVTIDEKLSNlbmRpZgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBEcmF3aW5nQnVmZmVySW50ZXJuYWwgewpAQCAt
MTA1LDggKzk5LDggQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheQog
ICAgIC8vIGhhcHBlbnMgYmVmb3JlIHRoZSBjb21wb3NpdG9yIGRyYXdzLiAgVGhpcyBtZWFucyB3
ZSBtaWdodCBkcmF3IHN0YWxlIGZyYW1lcyBzb21ldGltZXMuICBJZGVhbGx5IHRoaXMKICAgICAv
LyB3b3VsZCBpbnNlcnQgYSBmZW5jZSBpbnRvIHRoZSBjaGlsZCBjb21tYW5kIHN0cmVhbSB0aGF0
IHRoZSBjb21wb3NpdG9yIGNvdWxkIHdhaXQgZm9yLgogICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xDb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZShtX2ludGVybmFs
LT5vZmZzY3JlZW5Db2xvclRleHR1cmUsIHBhcmVudFRleHR1cmUpOwotICAgIGdsRmx1c2goKTsK
KyAgICBtX2NvbnRleHQtPmNvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0obV9pbnRl
cm5hbC0+b2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCBwYXJlbnRUZXh0dXJlKTsKKyAgICBtX2NvbnRl
eHQtPmZsdXNoKCk7CiB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2Nzg3NCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgiCiAjaWYgUExBVEZPUk0oU0tJQSkKICNpbmNsdWRlICJOYXRpdmVJ
bWFnZVNraWEuaCIKQEAgLTQxLDggKzQyLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgogI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgotCi0j
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTEsMjQgKzUxLDI2IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiBjb25zdCB1bnNpZ25lZCBMYXllckNocm9taXVtOjpzX3Bvc2l0aW9uQXR0cmliTG9j
YXRpb24gPSAwOwogY29uc3QgdW5zaWduZWQgTGF5ZXJDaHJvbWl1bTo6c190ZXhDb29yZEF0dHJp
YkxvY2F0aW9uID0gMTsKIAotc3RhdGljIEdMdWludCBsb2FkU2hhZGVyKEdMZW51bSB0eXBlLCBj
b25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpCitzdGF0aWMgdW5zaWduZWQgbG9hZFNoYWRlcihHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgdHlwZSwgY29uc3QgY2hhciogc2hhZGVy
U291cmNlKQogewotICAgIEdMdWludCBzaGFkZXIgPSBnbENyZWF0ZVNoYWRlcih0eXBlKTsKKyAg
ICB1bnNpZ25lZCBzaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVTaGFkZXIodHlwZSk7CiAgICAgaWYg
KCFzaGFkZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIEdMQyhnbFNoYWRlclNvdXJjZShzaGFk
ZXIsIDEsICZzaGFkZXJTb3VyY2UsIDApKTsKLSAgICBHTEMoZ2xDb21waWxlU2hhZGVyKHNoYWRl
cikpOwotICAgIEdMaW50IGNvbXBpbGVkOwotICAgIEdMQyhnbEdldFNoYWRlcml2KHNoYWRlciwg
R0xfQ09NUElMRV9TVEFUVVMsICZjb21waWxlZCkpOworICAgIFN0cmluZyBzb3VyY2VTdHJpbmco
c2hhZGVyU291cmNlKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+c2hhZGVyU291cmNlKHNo
YWRlciwgc291cmNlU3RyaW5nKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmNvbXBpbGVT
aGFkZXIoc2hhZGVyKSk7CisgICAgaW50IGNvbXBpbGVkOworICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRV
UywgJmNvbXBpbGVkKSk7CiAgICAgaWYgKCFjb21waWxlZCkgewotICAgICAgICBHTEMoZ2xEZWxl
dGVTaGFkZXIoc2hhZGVyKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kZWxldGVT
aGFkZXIoc2hhZGVyKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4gc2hh
ZGVyOwogfQogCi1MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcygpCi0g
ICAgOiBtX3F1YWRWZXJ0aWNlc1ZibygwKQorTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpT
aGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKKyAgICAsIG1fcXVhZFZlcnRpY2VzVmJvKDApCiAgICAgLCBtX3F1YWRFbGVtZW50
c1ZibygwKQogICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgwKQogICAgICwgbV9ib3JkZXJTaGFkZXJQ
cm9ncmFtKDApCkBAIC03NywyNCArNzksMjIgQEAgTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
OjpTaGFyZWRWYWx1ZQogICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKIHsKICAgICAvLyBWZXJ0
ZXggcG9zaXRpb25zIGFuZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgNCBjb3JuZXJzIG9m
IGEgMXgxIHF1YWQuCi0gICAgR0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAtMC41ZiwgIDAuNWYsIDAu
MGYsIDAuMGYsICAxLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAuNWYsIC0wLjVm
LCAwLjBmLCAwLjBmLCAgMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAt
MC41ZiwgMC4wZiwgMS4wZiwgIDAuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41
ZiwgIDAuNWYsIDAuMGYsIDEuMGYsICAxLjBmIH07Ci0gICAgR0x1c2hvcnQgaW5kaWNlc1tdID0g
eyAwLCAxLCAyLCAwLCAyLCAzLCAvLyBUaGUgdHdvIHRyaWFuZ2xlcyB0aGF0IG1ha2UgdXAgdGhl
IGxheWVyIHF1YWQuCisgICAgZmxvYXQgdmVydGljZXNbXSA9IHsgLTAuNWYsICAwLjVmLCAwLjBm
LCAwLjBmLCAgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtMC41ZiwgLTAuNWYsIDAu
MGYsIDAuMGYsICAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAuNWYsIC0wLjVmLCAw
LjBmLCAxLjBmLCAgMC4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAgMC41Ziwg
MC4wZiwgMS4wZiwgIDEuMGYgfTsKKyAgICB1aW50MTZfdCBpbmRpY2VzW10gPSB7IDAsIDEsIDIs
IDAsIDIsIDMsIC8vIFRoZSB0d28gdHJpYW5nbGVzIHRoYXQgbWFrZSB1cCB0aGUgbGF5ZXIgcXVh
ZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDN9OyAvLyBBIGxpbmUgcGF0
aCBmb3IgZHJhd2luZyB0aGUgbGF5ZXIgYm9yZGVyLgogCi0gICAgR0x1aW50IHZib0lkc1syXTsK
LSAgICBHTEMoZ2xHZW5CdWZmZXJzKDIsIHZib0lkcykpOwotICAgIG1fcXVhZFZlcnRpY2VzVmJv
ID0gdmJvSWRzWzBdOwotICAgIG1fcXVhZEVsZW1lbnRzVmJvID0gdmJvSWRzWzFdOwotICAgIEdM
QyhnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3F1YWRWZXJ0aWNlc1ZibykpOwotICAg
IEdMQyhnbEJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0
aWNlcywgR0xfU1RBVElDX0RSQVcpKTsKLSAgICBHTEMoZ2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSLCBtX3F1YWRFbGVtZW50c1ZibykpOwotICAgIEdMQyhnbEJ1ZmZlckRhdGEo
R0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHNpemVvZihpbmRpY2VzKSwgaW5kaWNlcywgR0xfU1RB
VElDX0RSQVcpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX3F1YWRWZXJ0aWNlc1ZibyA9IG1fY29u
dGV4dC0+Y3JlYXRlQnVmZmVyKCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fcXVhZEVsZW1lbnRz
VmJvID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcXVh
ZFZlcnRpY2VzVmJvKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5idWZmZXJEYXRh
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRp
Y2VzLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpKTsKKyAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlf
QlVGRkVSLCBtX3F1YWRFbGVtZW50c1ZibykpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsIHNp
emVvZihpbmRpY2VzKSwgaW5kaWNlcywgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKSk7
CiAKICAgICAvLyBHZXQgdGhlIG1heCB0ZXh0dXJlIHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0
ZW0uCi0gICAgR0xDKGdsR2V0SW50ZWdlcnYoR0xfTUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4
dHVyZVNpemUpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSkpOwog
CiAgICAgLy8gU2hhZGVycyBmb3IgZHJhd2luZyB0aGUgZGVidWcgYm9yZGVycyBhcm91bmQgdGhl
IGxheWVycy4KICAgICBjaGFyIGJvcmRlclZlcnRleFNoYWRlclN0cmluZ1tdID0KQEAgLTExMiwx
NCArMTEyLDE0IEBAIExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWUKICAg
ICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci54eXogKiBjb2xvci53LCBjb2xvci53
KTtcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiI7CiAKLSAgICBtX2JvcmRlclNoYWRlclByb2dyYW0gPSBjcmVhdGVTaGFk
ZXJQcm9ncmFtKGJvcmRlclZlcnRleFNoYWRlclN0cmluZywgYm9yZGVyRnJhZ21lbnRTaGFkZXJT
dHJpbmcpOworICAgIG1fYm9yZGVyU2hhZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dyYW0o
bV9jb250ZXh0LCBib3JkZXJWZXJ0ZXhTaGFkZXJTdHJpbmcsIGJvcmRlckZyYWdtZW50U2hhZGVy
U3RyaW5nKTsKICAgICBpZiAoIW1fYm9yZGVyU2hhZGVyUHJvZ3JhbSkgewogICAgICAgICBMT0df
RVJST1IoIkNvbnRlbnRMYXllckNocm9taXVtOiBGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9n
cmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JvcmRlclNoYWRlck1hdHJp
eExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9ib3JkZXJTaGFkZXJQcm9ncmFtLCAi
bWF0cml4Iik7Ci0gICAgbV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uID0gZ2xHZXRVbmlmb3Jt
TG9jYXRpb24obV9ib3JkZXJTaGFkZXJQcm9ncmFtLCAiY29sb3IiKTsKKyAgICBtX2JvcmRlclNo
YWRlck1hdHJpeExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9ib3Jk
ZXJTaGFkZXJQcm9ncmFtLCAibWF0cml4Iik7CisgICAgbV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0
aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9ib3JkZXJTaGFkZXJQcm9ncmFt
LCAiY29sb3IiKTsKICAgICBBU1NFUlQobV9ib3JkZXJTaGFkZXJNYXRyaXhMb2NhdGlvbiAhPSAt
MSk7CiAgICAgQVNTRVJUKG1fYm9yZGVyU2hhZGVyQ29sb3JMb2NhdGlvbiAhPSAtMSk7CiAKQEAg
LTEyOCwxMSArMTI4LDEwIEBAIExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFs
dWUKIAogTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKCkKIHsKLSAg
ICBHTHVpbnQgdmJvSWRzWzJdID0geyBtX3F1YWRWZXJ0aWNlc1ZibywgbV9xdWFkRWxlbWVudHNW
Ym8gfTsKLSAgICBHTEMoZ2xEZWxldGVCdWZmZXJzKDIsIHZib0lkcykpOwotCisgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXNWYm8pKTsKKyAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3F1YWRFbGVtZW50c1Zi
bykpOwogICAgIGlmIChtX2JvcmRlclNoYWRlclByb2dyYW0pCi0gICAgICAgIEdMQyhnbERlbGV0
ZVByb2dyYW0obV9ib3JkZXJTaGFkZXJQcm9ncmFtKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2JvcmRlclNoYWRlclByb2dyYW0pKTsKIH0KIAog
CkBAIC0xODEsNDUgKzE4MCw0NSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVy
ZXIoTGF5CiAgICAgbV9sYXllclJlbmRlcmVyID0gcmVuZGVyZXI7CiB9CiAKLXVuc2lnbmVkIExh
eWVyQ2hyb21pdW06OmNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKK3Vuc2lnbmVkIExheWVy
Q2hyb21pdW06OmNyZWF0ZVNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFk
ZXJTb3VyY2UpCiB7Ci0gICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfVkVS
VEVYX1NIQURFUiwgdmVydGV4U2hhZGVyU291cmNlKTsKKyAgICB1bnNpZ25lZCB2ZXJ0ZXhTaGFk
ZXIgPSBsb2FkU2hhZGVyKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
LCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwogICAgIGlmICghdmVydGV4U2hhZGVyKSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB2ZXJ0ZXggc2hhZGVyIik7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIo
R0xfRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgdW5zaWduZWQg
ZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKICAgICBpZiAoIWZyYWdtZW50
U2hhZGVyKSB7Ci0gICAgICAgIEdMQyhnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKTsKKyAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKTsK
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGZyYWdtZW50IHNoYWRlciIpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBHTHVpbnQgcHJvZ3JhbU9iamVjdCA9IGds
Q3JlYXRlUHJvZ3JhbSgpOworICAgIHVuc2lnbmVkIHByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5j
cmVhdGVQcm9ncmFtKCk7CiAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICBHTEMoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbU9iamVjdCwgdmVydGV4
U2hhZGVyKSk7Ci0gICAgR0xDKGdsQXR0YWNoU2hhZGVyKHByb2dyYW1PYmplY3QsIGZyYWdtZW50
U2hhZGVyKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFt
T2JqZWN0LCB2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YXR0YWNo
U2hhZGVyKHByb2dyYW1PYmplY3QsIGZyYWdtZW50U2hhZGVyKSk7CiAKICAgICAvLyBCaW5kIHRo
ZSBjb21tb24gYXR0cmliIGxvY2F0aW9ucy4KLSAgICBHTEMoZ2xCaW5kQXR0cmliTG9jYXRpb24o
cHJvZ3JhbU9iamVjdCwgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uLCAiYV9wb3NpdGlvbiIpKTsK
LSAgICBHTEMoZ2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbU9iamVjdCwgc190ZXhDb29yZEF0
dHJpYkxvY2F0aW9uLCAiYV90ZXhDb29yZCIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1PYmplY3QsIHNfcG9zaXRpb25BdHRyaWJMb2NhdGlv
biwgImFfcG9zaXRpb24iKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtT2JqZWN0LCBzX3RleENvb3JkQXR0cmliTG9jYXRpb24sICJhX3RleENv
b3JkIikpOwogCi0gICAgR0xDKGdsTGlua1Byb2dyYW0ocHJvZ3JhbU9iamVjdCkpOwotICAgIEdM
aW50IGxpbmtlZDsKLSAgICBHTEMoZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbU9iamVjdCwgR0xfTElO
S19TVEFUVVMsICZsaW5rZWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+bGlua1Byb2dy
YW0ocHJvZ3JhbU9iamVjdCkpOworICAgIGludCBsaW5rZWQ7CisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPmdldFByb2dyYW1pdihwcm9ncmFtT2JqZWN0LCBHcmFwaGljc0NvbnRleHQzRDo6TElO
S19TVEFUVVMsICZsaW5rZWQpKTsKICAgICBpZiAoIWxpbmtlZCkgewogICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBsaW5rIHNoYWRlciBwcm9ncmFtIik7Ci0gICAgICAgIEdMQyhnbERlbGV0
ZVByb2dyYW0ocHJvZ3JhbU9iamVjdCkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
ZGVsZXRlUHJvZ3JhbShwcm9ncmFtT2JqZWN0KSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIEdMQyhnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKTsKLSAgICBHTEMoZ2xEZWxl
dGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGVs
ZXRlU2hhZGVyKHZlcnRleFNoYWRlcikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kZWxl
dGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKTsKICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdDsKIH0K
IApAQCAtMzkzLDExICszOTIsMTcgQEAgdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0cml4KGZs
b2F0KiBmbAogICAgIGZsYXR0ZW5lZFsxNV0gPSBtLm00NCgpOwogfQogCi12b2lkIExheWVyQ2hy
b21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2pl
Y3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4LAorR3Jh
cGhpY3NDb250ZXh0M0QqIExheWVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXJDb250ZXh0KCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKKyAgICByZXR1cm4gbGF5ZXJSZW5k
ZXJlcigpLT5jb250ZXh0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVk
UXVhZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0
cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbikKIHsKLSAgICBz
dGF0aWMgR0xmbG9hdCBnbE1hdHJpeFsxNl07CisgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2
XTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IGRyYXdNYXRyaXg7
CiAKQEAgLTQwOSwxNyArNDE0LDE3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVk
UXVhZChjb24KIAogICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCByZW5kZXJNYXRyaXgpOwog
Ci0gICAgR0xDKGdsVW5pZm9ybU1hdHJpeDRmdihtYXRyaXhMb2NhdGlvbiwgMSwgZmFsc2UsICZn
bE1hdHJpeFswXSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2
KG1hdHJpeExvY2F0aW9uLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAxKSk7CiAKICAgICBpZiAoYWxw
aGFMb2NhdGlvbiAhPSAtMSkKLSAgICAgICAgR0xDKGdsVW5pZm9ybTFmKGFscGhhTG9jYXRpb24s
IG9wYWNpdHkpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihhbHBo
YUxvY2F0aW9uLCBvcGFjaXR5KSk7CiAKLSAgICBHTEMoZ2xEcmF3RWxlbWVudHMoR0xfVFJJQU5H
TEVTLCA2LCBHTF9VTlNJR05FRF9TSE9SVCwgMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
ZHJhd0RlYnVnQm9yZGVyKCkKIHsKLSAgICBzdGF0aWMgR0xmbG9hdCBnbE1hdHJpeFsxNl07Cisg
ICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKICAgICBpZiAoIWJvcmRlckNvbG9yKCkuYWxw
aGEoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MzEsMTQgKzQzNiwxNSBAQCB2b2lkIExheWVy
Q2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlcigpCiAgICAgcmVuZGVyTWF0cml4LnNjYWxlM2QoYm91
bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIDEpOwogICAgIHJlbmRlck1hdHJpeC5t
dWx0aXBseShsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSk7CiAgICAgdG9HTE1h
dHJpeCgmZ2xNYXRyaXhbMF0sIHJlbmRlck1hdHJpeCk7Ci0gICAgR0xDKGdsVW5pZm9ybU1hdHJp
eDRmdihzdi0+Ym9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsICZnbE1hdHJp
eFswXSkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNv
bnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihzdi0+
Ym9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24oKSwgZmFsc2UsICZnbE1hdHJpeFswXSwgMSkpOwog
Ci0gICAgR0xDKGdsVW5pZm9ybTRmKHN2LT5ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uKCksIGJv
cmRlckNvbG9yKCkucmVkKCkgLyAyNTUuMCwgYm9yZGVyQ29sb3IoKS5ncmVlbigpIC8gMjU1LjAs
IGJvcmRlckNvbG9yKCkuYmx1ZSgpIC8gMjU1LjAsIDEpKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybTRmKHN2LT5ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uKCksIGJvcmRlckNv
bG9yKCkucmVkKCkgLyAyNTUuMCwgYm9yZGVyQ29sb3IoKS5ncmVlbigpIC8gMjU1LjAsIGJvcmRl
ckNvbG9yKCkuYmx1ZSgpIC8gMjU1LjAsIDEpKTsKIAotICAgIEdMQyhnbExpbmVXaWR0aChib3Jk
ZXJXaWR0aCgpKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmxpbmVXaWR0aChib3JkZXJX
aWR0aCgpKSk7CiAKICAgICAvLyBUaGUgaW5kaWNlcyBmb3IgdGhlIGxpbmUgYXJlIHN0b3JlZCBp
biB0aGUgc2FtZSBhcnJheSBhcyB0aGUgdHJpYW5nbGUgaW5kaWNlcy4KLSAgICBHTEMoZ2xEcmF3
RWxlbWVudHMoR0xfTElORV9MT09QLCA0LCBHTF9VTlNJR05FRF9TSE9SVCwgKHZvaWQqKSg2ICog
c2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZHJh
d0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIDQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVCwgNiAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpKTsKIH0KIAog
Y29uc3QgRmxvYXRSZWN0IExheWVyQ2hyb21pdW06OmdldERyYXdSZWN0KCkgY29uc3QKQEAgLTQ2
NSwyNCArNDcxLDI2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd0FzTWFzaygpCiAgICAgLy8g
V2UgcmV1c2UgdGhlIGJvcmRlciBzaGFkZXIgaGVyZSBhcyBhbGwgd2UgbmVlZCBhIHNpbmdsZSBj
b2xvcmVkIHNoYWRlciBwYXNzLgogICAgIC8vIFRoZSBjb2xvciBzcGVjaWZpZWQgaGVyZSBpcyBv
bmx5IGZvciBkZWJ1ZyBwdXByb3NlcyBhcyB0eXBpY2FsbHkgd2hlbiB3ZSBjYWxsIHRoaXMKICAg
ICAvLyBtZXRob2QsIHdyaXRlcyB0byB0aGUgY29sb3IgY2hhbm5lbHMgYXJlIGRpc2FibGVkLgot
ICAgIEdMQyhnbFVuaWZvcm00Zihzdi0+Ym9yZGVyU2hhZGVyQ29sb3JMb2NhdGlvbigpLCAwLCAx
ICwgMCwgMC43KSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRl
cmVyQ29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYoc3YtPmJv
cmRlclNoYWRlckNvbG9yTG9jYXRpb24oKSwgMCwgMSAsIDAsIDAuNykpOwogCi0gICAgZHJhd1Rl
eHR1cmVkUXVhZChsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5z
Zm9ybSgpLAotICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJh
d09wYWNpdHkoKSwKLSAgICAgICAgc3YtPmJvcmRlclNoYWRlck1hdHJpeExvY2F0aW9uKCksIC0x
KTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVj
dGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAgICAgICBib3Vu
ZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICAgICAg
ICAgICAgICAgICAgIHN2LT5ib3JkZXJTaGFkZXJNYXRyaXhMb2NhdGlvbigpLCAtMSk7CiB9CiAK
IC8vIHN0YXRpYwogdm9pZCBMYXllckNocm9taXVtOjpwcmVwYXJlRm9yRHJhdyhjb25zdCBTaGFy
ZWRWYWx1ZXMqIHN2KQogewotICAgIEdMQyhnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBz
di0+cXVhZFZlcnRpY2VzVmJvKCkpKTsKLSAgICBHTEMoZ2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSLCBzdi0+cXVhZEVsZW1lbnRzVmJvKCkpKTsKLSAgICBHTHVpbnQgb2Zmc2V0
ID0gMDsKLSAgICBHTEMoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNfcG9zaXRpb25BdHRyaWJMb2Nh
dGlvbiwgMywgR0xfRkxPQVQsIEdMX0ZBTFNFLCA1ICogc2l6ZW9mKEdMZmxvYXQpLCAoR0x2b2lk
KilvZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMyAqIHNpemVvZihHTGZsb2F0KTsKLSAgICBHTEMo
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNfdGV4Q29vcmRBdHRyaWJMb2NhdGlvbiwgMiwgR0xfRkxP
QVQsIEdMX0ZBTFNFLCA1ICogc2l6ZW9mKEdMZmxvYXQpLCAoR0x2b2lkKilvZmZzZXQpKTsKLSAg
ICBHTEMoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzX3Bvc2l0aW9uQXR0cmliTG9jYXRpb24p
KTsKLSAgICBHTEMoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzX3RleENvb3JkQXR0cmliTG9j
YXRpb24pKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IHN2LT5jb250ZXh0KCk7
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgc3YtPnF1YWRWZXJ0aWNlc1ZibygpKSk7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSLCBzdi0+cXVhZEVsZW1lbnRzVmJvKCkpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwor
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNfcG9zaXRpb25B
dHRyaWJMb2NhdGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgNSAqIHNp
emVvZihmbG9hdCksIG9mZnNldCkpOworICAgIG9mZnNldCArPSAzICogc2l6ZW9mKGZsb2F0KTsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihzX3RleENvb3Jk
QXR0cmliTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDUgKiBz
aXplb2YoZmxvYXQpLCBvZmZzZXQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uKSk7CisgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNfdGV4Q29vcmRBdHRyaWJM
b2NhdGlvbikpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMTcxLDkgKzE3MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gY29udGV4dCkuCiAgICAgY2xh
c3MgU2hhcmVkVmFsdWVzIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNoYXJlZFZhbHVlcygpOwor
ICAgICAgICBTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICAgICAgflNoYXJl
ZFZhbHVlcygpOwogCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgICAgIHVuc2lnbmVkIHF1YWRWZXJ0aWNlc1Zibygp
IGNvbnN0IHsgcmV0dXJuIG1fcXVhZFZlcnRpY2VzVmJvOyB9CiAgICAgICAgIHVuc2lnbmVkIHF1
YWRFbGVtZW50c1ZibygpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZEVsZW1lbnRzVmJvOyB9CiAgICAg
ICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7
IH0KQEAgLTE4Myw2ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaW5pdGlhbGl6ZWQo
KSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxpemVkOyB9CiAKICAgICBwcml2YXRlOgorICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgICAgICB1bnNpZ25lZCBtX3F1YWRW
ZXJ0aWNlc1ZibzsKICAgICAgICAgdW5zaWduZWQgbV9xdWFkRWxlbWVudHNWYm87CiAgICAgICAg
IGludCBtX21heFRleHR1cmVTaXplOwpAQCAtMTk5LDE0ICsyMDEsMTUgQEAgcHJvdGVjdGVkOgog
ICAgIExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAKICAgICBM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xh
eWVyUmVuZGVyZXI7IH0KKyAgICBHcmFwaGljc0NvbnRleHQzRCogbGF5ZXJSZW5kZXJlckNvbnRl
eHQoKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBsYXllck1hdHJpeCwKKyAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKEdy
YXBoaWNzQ29udGV4dDNEKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25N
YXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJpeCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0
IG9wYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0cml4TG9j
YXRpb24sIGludCBhbHBoYUxvY2F0aW9uKTsKIAogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgo
ZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgc3RhdGljIHVuc2ln
bmVkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgc3RhdGljIHVuc2lnbmVkIGNy
ZWF0ZVNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKIAogICAgIElu
dFNpemUgbV9ib3VuZHM7CiAgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKIAog
I2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkdMRVMyQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2ViR0xMYXll
ckNocm9taXVtLmgiCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NH
Qml0bWFwQ29udGV4dC5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9NYXRy
aXgoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wLCBmbG9h
dCBuZWFyWiwgZmxvYXQgZmFyWikKQEAgLTc1LDE5ICs3MywxOSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgY29tcGFyZUxheWVyWihjb25zdCBMCiAgICAgcmV0dXJuIHRyYW5zZm9ybUEubTQzKCkgPCB0
cmFuc2Zvcm1CLm00MygpOwogfQogCi1QYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IGds
ZXMyQ29udGV4dCkKK1Bhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
KQogewotICAgIGlmICghZ2xlczJDb250ZXh0KQorICAgIGlmICghY29udGV4dCkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRl
cmVyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0oZ2xlczJDb250ZXh0KSk7CisgICAgT3duUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihuZXcgTGF5ZXJSZW5kZXJlckNo
cm9taXVtKGNvbnRleHQpKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9z
aXRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5y
ZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtKFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpCitMYXllclJlbmRlcmVy
Q2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KQogICAgIDogbV9yb290TGF5ZXJUZXh0dXJlSWQoMCkKICAgICAsIG1fcm9v
dExheWVyVGV4dHVyZVdpZHRoKDApCiAgICAgLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQoMCkK
QEAgLTk2LDcgKzk0LDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hy
bwogICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX3Njcm9sbFBvc2l0aW9uKElu
dFBvaW50KC0xLCAtMSkpCiAgICAgLCBtX2N1cnJlbnRTaGFkZXIoMCkKLSAgICAsIG1fZ2xlczJD
b250ZXh0KGdsZXMyQ29udGV4dCkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogewogICAgIG1f
aGFyZHdhcmVDb21wb3NpdGluZyA9IGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCk7CiB9CkBAIC0x
MDYsMTEgKzEwNCwxNiBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJlbmRlcmVyQ2hy
CiAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRlYnVnR0xDYWxsKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUs
IGludCBsaW5lKQorR3JhcGhpY3NDb250ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29u
dGV4dCgpCiB7Ci0gICAgR0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJv
ciAhPSBHTF9OT19FUlJPUikKLSAgICAgICAgTE9HX0VSUk9SKCJHTCBjb21tYW5kIGZhaWxlZDog
RmlsZTogJXNcblx0TGluZSAlZFxuXHRjb21tYW5kOiAlcywgZXJyb3IgJXhcbiIsIGZpbGUsIGxp
bmUsIGNvbW1hbmQsIGVycm9yKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworfQorCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5l
KQoreworICAgIHVuc2lnbmVkIGxvbmcgZXJyb3IgPSBjb250ZXh0LT5nZXRFcnJvcigpOworICAg
IGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgIExPR19F
UlJPUigiR0wgY29tbWFuZCBmYWlsZWQ6IEZpbGU6ICVzXG5cdExpbmUgJWRcblx0Y29tbWFuZDog
JXMsIGVycm9yICV4XG4iLCBmaWxlLCBsaW5lLCBjb21tYW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGVy
cm9yKSk7CiB9CiAKIC8vIENyZWF0ZXMgYSBjYW52YXMgYW5kIGFuIGFzc29jaWF0ZWQgZ3JhcGhp
Y3MgY29udGV4dCB0aGF0IHRoZSByb290IGxheWVyIHdpbGwKQEAgLTE1MSw3ICsxNTQsNyBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Um9vdExheWVyCiB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuc2lnbmVkIHByb2dyYW1JZCkKIHsKICAgICBpZiAocHJv
Z3JhbUlkICE9IG1fY3VycmVudFNoYWRlcikgewotICAgICAgICBHTEMoZ2xVc2VQcm9ncmFtKHBy
b2dyYW1JZCkpOworICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVzZVByb2dyYW0o
cHJvZ3JhbUlkKSk7CiAgICAgICAgIG1fY3VycmVudFNoYWRlciA9IHByb2dyYW1JZDsKICAgICB9
CiB9CkBAIC0xNjgsNyArMTcxLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBh
cmVUb0RyYQogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBHTEMoZ2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOworICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CiAKICAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUg
dmlzaWJsZSBhcmVhIGhhcyBjaGFuZ2VkIHRoZW4gYWxsb2NhdGUgYSBuZXcgdGV4dHVyZQogICAg
IC8vIHRvIHN0b3JlIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllciBhbmQgYWRqdXN0IHRo
ZSBwcm9qZWN0aW9uIG1hdHJpeApAQCAtMTgwLDIwICsxODMsMjAgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYQogICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVIZWln
aHQgPSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKIAogICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXgg
PSBvcnRob01hdHJpeCgwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdodCwgMCwg
LTEwMDAsIDEwMDApOwotICAgICAgICBHTEMoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IEdMX1JHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoLCBtX3Jvb3RMYXllclRleHR1cmVIZWln
aHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApKTsKKyAgICAgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1f
cm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CiAgICAgfQogCiAgICAgLy8gVGhlIEdM
IHZpZXdwb3J0IGNvdmVycyB0aGUgZW50aXJlIHZpc2libGUgYXJlYSwgaW5jbHVkaW5nIHRoZSBz
Y3JvbGxiYXJzLgotICAgIEdMQyhnbFZpZXdwb3J0KDAsIDAsIHZpc2libGVSZWN0V2lkdGgsIHZp
c2libGVSZWN0SGVpZ2h0KSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT52aWV3cG9y
dCgwLCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdodCkpOwogCiAgICAgLy8g
QmluZCB0aGUgY29tbW9uIHZlcnRleCBhdHRyaWJ1dGVzIHVzZWQgZm9yIGRyYXdpbmcgYWxsIHRo
ZSBsYXllcnMuCiAgICAgTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZUZvckRyYXcobGF5ZXJTaGFyZWRW
YWx1ZXMoKSk7CiAKICAgICAvLyBGSVhNRTogVGhlc2UgY2FsbHMgY2FuIGJlIG1hZGUgb25jZSwg
d2hlbiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGlzIGluaXRpYWxpemVkLgotICAgIEdMQyhnbERp
c2FibGUoR0xfREVQVEhfVEVTVCkpOwotICAgIEdMQyhnbERpc2FibGUoR0xfQ1VMTF9GQUNFKSk7
Ci0gICAgR0xDKGdsRGVwdGhGdW5jKEdMX0xFUVVBTCkpOwotICAgIEdMQyhnbENsZWFyU3RlbmNp
bCgwKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9URVNUKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0UpKTsKKyAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmRlcHRoRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6TEVRVUFMKSk7CisgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCkpOwogCiAgICAgaWYgKG1fc2Ny
b2xsUG9zaXRpb24gPT0gSW50UG9pbnQoLTEsIC0xKSkKICAgICAgICAgbV9zY3JvbGxQb3NpdGlv
biA9IHNjcm9sbFBvc2l0aW9uOwpAQCAtMjEyLDEyICsyMTUsMTIgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYQogICAgICAgICBzY3JvbGxlZExheWVyTWF0cml4LnNj
YWxlM2QoMSwgLTEsIDEpOwogCiAgICAgICAgIHVzZVNoYWRlcihtX3Njcm9sbFNoYWRlclByb2dy
YW0pOwotICAgICAgICBHTEMoZ2xVbmlmb3JtMWkobV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRp
b24sIDApKTsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChtX3Byb2pl
Y3Rpb25NYXRyaXgsIHNjcm9sbGVkTGF5ZXJNYXRyaXgsCisgICAgICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+dW5pZm9ybTFpKG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxvY2F0aW9uLCAwKSk7
CisgICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQobV9jb250ZXh0LmdldCgp
LCBtX3Byb2plY3Rpb25NYXRyaXgsIHNjcm9sbGVkTGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJl
Y3QuaGVpZ2h0KCksIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9zY3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiwgLTEpOwogCi0gICAgICAgIEdMQyhnbENvcHlU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIGNvbnRlbnRSZWN0Lndp
ZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+Y29weVRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIDAsIDAsIDAsIDAsIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgp
KSk7CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9IGVs
c2UgaWYgKGFicyhzY3JvbGxEZWx0YS55KCkpID4gY29udGVudFJlY3QuaGVpZ2h0KCkgfHwgYWJz
KHNjcm9sbERlbHRhLngoKSkgPiBjb250ZW50UmVjdC53aWR0aCgpKSB7CiAgICAgICAgIC8vIFNj
cm9sbGluZyBsYXJnZXIgdGhhbiB0aGUgY29udGVudFJlY3Qgc2l6ZSBkb2VzIG5vdCBwcmVzZXJ2
ZSBhbnkgb2YgdGhlIHBpeGVscywgc28gdGhlcmUgaXMKQEAgLTI0NCw3ICsyNDcsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExhCiAgICAgaWYgKCFtX3Jvb3RMYXll
cikKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRl
eHR1cmVJZCkpOwogCiAgICAgLy8gVXBkYXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCiAgICAg
QVNTRVJUKCh1cGRhdGVSZWN0LnJpZ2h0KCkgIDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQpA
QCAtMjY1LDQwICsyNjgsNDAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJv
b3RMYQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5k
aWYKICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSBy
b290IGxheWVyIHRleHR1cmUuCi0gICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwg
dXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7
CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVw
ZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKIH0KIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogewogICAgIEFTU0VSVChtX2hh
cmR3YXJlQ29tcG9zaXRpbmcpOwogCi0gICAgZ2xDbGVhckNvbG9yKDAsIDAsIDEsIDEpOwotICAg
IGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpOworICAg
IG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAxLCAxKTsKKyAgICBtX2NvbnRleHQtPmNsZWFy
KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0JVRkZFUl9CSVQpOwogCi0gICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRl
eHR1cmVJZCkpOwogCiAgICAgLy8gUmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0
aGF0IHRha2VzIHVwIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCiAgICAg
Ly8gV2UgcmV1c2UgdGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21p
dW0uCiAgICAgY29uc3QgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVu
dExheWVyVmFsdWVzID0gY29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CiAgICAgdXNlU2hhZGVy
KGNvbnRlbnRMYXllclZhbHVlcy0+Y29udGVudFNoYWRlclByb2dyYW0oKSk7Ci0gICAgR0xDKGds
VW5pZm9ybTFpKGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDAp
KTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0xaShjb250ZW50TGF5ZXJW
YWx1ZXMtPnNoYWRlclNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbGF5ZXJNYXRyaXg7CiAgICAgbGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QodmlzaWJsZVJl
Y3Qud2lkdGgoKSAqIDAuNWYsIHZpc2libGVSZWN0LmhlaWdodCgpICogMC41ZiwgMCk7Ci0gICAg
TGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChtX3Byb2plY3Rpb25NYXRyaXgsIGxheWVy
TWF0cml4LAorICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQobV9jb250ZXh0Lmdl
dCgpLCBtX3Byb2plY3Rpb25NYXRyaXgsIGxheWVyTWF0cml4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0
KCksIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50TGF5ZXJW
YWx1ZXMtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVy
QWxwaGFMb2NhdGlvbigpKTsKIAogICAgIC8vIElmIGN1bGxpbmcgaXMgZW5hYmxlZCB0aGVuIHdl
IHdpbGwgY3VsbCB0aGUgYmFja2ZhY2UuCi0gICAgR0xDKGdsQ3VsbEZhY2UoR0xfQkFDSykpOwor
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y3VsbEZhY2UoR3JhcGhpY3NDb250ZXh0M0Q6
OkJBQ0spKTsKICAgICAvLyBUaGUgb3J0aG9ncmFwaGljIHByb2plY3Rpb24gaXMgc2V0dXAgc3Vj
aCB0aGF0IFkgc3RhcnRzIGF0IHplcm8gYW5kCiAgICAgLy8gaW5jcmVhc2VzIGdvaW5nIGRvd24g
dGhlIHBhZ2Ugc28gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHdpbmRpbmcgb3JkZXIgb2YKICAgICAv
LyBmcm9udCBmYWNpbmcgdHJpYW5nbGVzLgotICAgIEdMQyhnbEZyb250RmFjZShHTF9DVykpOwor
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZnJvbnRGYWNlKEdyYXBoaWNzQ29udGV4dDNE
OjpDVykpOwogCiAgICAgLy8gVGhlIHNoYWRlciB1c2VkIHRvIHJlbmRlciBsYXllcnMgcmV0dXJu
cyBwcmUtbXVsdGlwbGllZCBhbHBoYSBjb2xvcnMKICAgICAvLyBzbyB3ZSBuZWVkIHRvIHNlbmQg
dGhlIGJsZW5kaW5nIG1vZGUgYXBwcm9wcmlhdGVseS4KLSAgICBHTEMoZ2xFbmFibGUoR0xfQkxF
TkQpKTsKLSAgICBHTEMoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhB
KSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQ
SEEpKTsKIAogICAgIC8vIFNldCB0aGUgcm9vdFZpc2libGVSZWN0IC0tLSB1c2VkIGJ5IHN1YnNl
cXVlbnQgZHJhd0xheWVycyBjYWxscwogICAgIG1fcm9vdFZpc2libGVSZWN0ID0gdmlzaWJsZVJl
Y3Q7CkBAIC0zMTUsNyArMzE4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnMoYwogICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgp
LCBtYXRyaXgsIG9wYWNpdHkpOwogCiAgICAgLy8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQg
cmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5ZXJzIG92ZXIgdGhlIHNjcm9sbGJhcnMuCi0gICAgR0xD
KGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICBGbG9hdFJl
Y3Qgc2Npc3NvclJlY3QoY29udGVudFJlY3QpOwogCiAgICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNo
b3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KQEAgLTMyMywyNiArMzI2LDI5IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGMKICAgICBzY2lzc29yVG9S
ZWN0KHNjaXNzb3JSZWN0KTsKIAogICAgIC8vIENsZWFyIHRoZSBzdGVuY2lsIGJ1ZmZlciB0byAw
LgotICAgIEdMQyhnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpOworICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVS
X0JJVCkpOwogICAgIC8vIERpc2FibGUgd3JpdGVzIHRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4KLSAg
ICBHTEMoZ2xTdGVuY2lsTWFzaygwKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5z
dGVuY2lsTWFzaygwKSk7CiAKICAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBvbmUgbW9y
ZSB0aW1lIHRvIGRyYXcgdGhlIGxheWVycy4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1
YmxheWVycy5zaXplKCk7IGkrKykKICAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXll
cnNbaV0uZ2V0KCksIHNjaXNzb3JSZWN0KTsKIAotICAgIEdMQyhnbERpc2FibGUoR0xfU0NJU1NP
Ul9URVNUKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmZpbmlzaCgpCiB7Ci0gICAgZ2xGaW5pc2goKTsKKyAgICBtX2NvbnRleHQtPmZpbmlzaCgp
OwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgpCiB7CiAgICAgLy8g
V2UncmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKLSAgICBtX2dsZXMyQ29udGV4dC0+c3dh
cEJ1ZmZlcnMoKTsKKworICAgIC8vIE5vdGUgdGhhdCBjdXJyZW50bHkgdGhpcyBoYXMgdGhlIHNh
bWUgZWZmZWN0IGFzIHN3YXBCdWZmZXJzOyB3ZSBzaG91bGQKKyAgICAvLyBjb25zaWRlciBleHBv
c2luZyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBvbiBHcmFwaGljc0NvbnRleHQzRC4KKyAgICBt
X2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsK
IH0KIApAQCAtMzU2LDIyICszNjIsMjIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omdl
dEZyYW1lYnVmZgogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBHTEMoZ2xSZWFk
UGl4ZWxzKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7
CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogfQogCiAvLyBGSVhNRTogVGhpcyBtZXRo
b2Qgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVwbGFjZWQgYnkgYSBwcm9wZXIgdGV4dHVyZSBtYW5h
Z2VyLgogdW5zaWduZWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVMYXllclRleHR1cmUo
KQogewotICAgIEdMdWludCB0ZXh0dXJlSWQgPSAwOwotICAgIEdMQyhnbEdlblRleHR1cmVzKDEs
ICZ0ZXh0dXJlSWQpKTsKLSAgICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0
dXJlSWQpKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSAwOworICAgIEdMQyhtX2NvbnRleHQs
IHRleHR1cmVJZCA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpKTsKKyAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCB0ZXh0dXJlSWQpKTsKICAgICAvLyBEbyBiYXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6
ZS4KLSAgICBHTEMoZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xDKGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOwotICAgIC8vIE5QT1QgdGV4
dHVyZXMgaW4gR0wgRVMgb25seSB3b3JrIHdoZW4gdGhlIHdyYXAgbW9kZSBpcyBzZXQgdG8gR0xf
Q0xBTVBfVE9fRURHRS4KLSAgICBHTEMoZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgR0xDKGdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSkp
OworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
UikpOworICAgIC8vIE5QT1QgdGV4dHVyZXMgaW4gR0wgRVMgb25seSB3b3JrIHdoZW4gdGhlIHdy
YXAgbW9kZSBpcyBzZXQgdG8gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UuCisgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KSk7CiAgICAgcmV0dXJuIHRleHR1cmVJZDsKIH0KIApAQCAtNDcwLDE4ICs0NzYsMTggQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllckludAogewogICAgIC8vIEVuYWJsZSB3
cml0ZXMgdG8gdGhlIHN0ZW5jaWwgYnVmZmVyIGFuZCBpbmNyZW1lbnQgdGhlIHN0ZW5jaWwgdmFs
dWVzCiAgICAgLy8gYnkgb25lIGZvciBldmVyeSBwaXhlbCB1bmRlciB0aGUgY3VycmVudCBsYXll
ci4KLSAgICBHTEMoZ2xTdGVuY2lsTWFzaygweGZmKSk7Ci0gICAgR0xDKGdsU3RlbmNpbEZ1bmMo
R0xfQUxXQVlTLCAxLCAweGZmKSk7Ci0gICAgR0xlbnVtIHN0ZW5jaWxPcCA9IChkZWNyZW1lbnQg
PyBHTF9ERUNSIDogR0xfSU5DUik7Ci0gICAgR0xDKGdsU3RlbmNpbE9wKHN0ZW5jaWxPcCwgc3Rl
bmNpbE9wLCBzdGVuY2lsT3ApKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnN0ZW5j
aWxNYXNrKDB4ZmYpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnN0ZW5jaWxGdW5j
KEdyYXBoaWNzQ29udGV4dDNEOjpBTFdBWVMsIDEsIDB4ZmYpKTsKKyAgICB1bnNpZ25lZCBzdGVu
Y2lsT3AgPSAoZGVjcmVtZW50ID8gR3JhcGhpY3NDb250ZXh0M0Q6OkRFQ1IgOiBHcmFwaGljc0Nv
bnRleHQzRDo6SU5DUik7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsT3Ao
c3RlbmNpbE9wLCBzdGVuY2lsT3AsIHN0ZW5jaWxPcCkpOwogCi0gICAgR0xDKGdsQ29sb3JNYXNr
KEdMX0ZBTFNFLCBHTF9GQUxTRSwgR0xfRkFMU0UsIEdMX0ZBTFNFKSk7CisgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpKTsK
IAogICAgIGxheWVyLT5kcmF3QXNNYXNrKCk7CiAKICAgICAvLyBEaXNhYmxlIHdyaXRlcyB0byB0
aGUgc3RlbmNpbCBidWZmZXIuCi0gICAgR0xDKGdsU3RlbmNpbE1hc2soMCkpOwotICAgIEdMQyhn
bENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKSk7CisgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsTWFzaygwKSk7CisgICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpOwogfQogCiAv
LyBSZWN1cnNpdmVseSB3YWxrIHRoZSBsYXllciB0cmVlIGFuZCBkcmF3IHRoZSBsYXllcnMuCkBA
IC00OTgsNyArNTA0LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNS
ZQogICAgIGJvb2wgbXVzdENsZWFyRGVwdGggPSBmYWxzZTsKICAgICBpZiAobGF5ZXItPnByZXNl
cnZlczNEKCkpIHsKICAgICAgICAgaWYgKCFkZXB0aFRlc3RFbmFibGVkRm9yU3VidHJlZSkgewot
ICAgICAgICAgICAgR0xDKGdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpKTsKKyAgICAgICAgICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9U
RVNUKSk7CiAgICAgICAgICAgICBkZXB0aFRlc3RFbmFibGVkRm9yU3VidHJlZSA9IHRydWU7CiAK
ICAgICAgICAgICAgIC8vIE5lZWQgdG8gY2xlYXIgdGhlIGRlcHRoIGJ1ZmZlciB3aGVuIHdlJ3Jl
IGRvbmUgcmVuZGVyaW5nIHRoaXMgc3VidHJlZS4KQEAgLTUzNSw3ICs1NDEsNyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc1JlCiAgICAgICAgICAgICAvLyBpcyByZW5k
ZXJlZCwgdGhlIHN0ZW5jaWwgdmFsdWVzIHNob3VsZCBiZSBhbGwgYmFjayB0byB6ZXJvLiBBbiA4
IGJpdCBzdGVuY2lsIGJ1ZmZlcgogICAgICAgICAgICAgLy8gd2lsbCBhbGxvdyB1cyB1cCB0byAy
NTUgbmVzdGVkIGNsaXBwaW5nIGxheWVycyB3aGljaCBpcyBob3BlZnVsbHkgZW5vdWdoLgogICAg
ICAgICAgICAgaWYgKCFjdXJyZW50U3RlbmNpbFZhbHVlKQotICAgICAgICAgICAgICAgIEdMQyhn
bEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSk7CiAK
ICAgICAgICAgICAgIGRyYXdMYXllckludG9TdGVuY2lsQnVmZmVyKGxheWVyLCBmYWxzZSk7CiAK
QEAgLTU0Nyw3ICs1NTMsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c1JlCiAgICAgLy8gY3VycmVudFN0ZW5jaWxWYWx1ZS4KICAgICBpZiAoZGlkU3RlbmNpbERyYXcp
IHsKICAgICAgICAgLy8gVGhlIHN1YmxheWVycyB3aWxsIHJlbmRlciBvbmx5IGlmIHRoZSBzdGVu
Y2lsIHRlc3QgcGFzc2VzLgotICAgICAgICBHTEMoZ2xTdGVuY2lsRnVuYyhHTF9FUVVBTCwgY3Vy
cmVudFN0ZW5jaWxWYWx1ZSwgMHhmZikpOworICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRl
eHQtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTCwgY3VycmVudFN0ZW5jaWxW
YWx1ZSwgMHhmZikpOwogICAgIH0KIAogICAgIC8vIElmIHdlJ3JlIHVzaW5nIGRlcHRoIHRlc3Rp
bmcgdGhlbiB3ZSBuZWVkIHRvIHNvcnQgdGhlIGNoaWxkcmVuIGluIFogdG8KQEAgLTU3OCw4ICs1
ODQsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc1JlCiAgICAgICAg
IGN1cnJlbnRTdGVuY2lsVmFsdWUtLTsKICAgICAgICAgaWYgKCFjdXJyZW50U3RlbmNpbFZhbHVl
KSB7CiAgICAgICAgICAgICAvLyBEaXNhYmxlIHN0ZW5jaWwgdGVzdGluZy4KLSAgICAgICAgICAg
IEdMQyhnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7Ci0gICAgICAgICAgICBHTEMoZ2xTdGVu
Y2lsRnVuYyhHTF9BTFdBWVMsIDAsIDB4ZmYpKTsKKyAgICAgICAgICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSk7Cisg
ICAgICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKEdyYXBoaWNz
Q29udGV4dDNEOjpBTFdBWVMsIDAsIDB4ZmYpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTg4
LDggKzU5NCw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzUmUKICAg
ICB9CiAKICAgICBpZiAobXVzdENsZWFyRGVwdGgpIHsKLSAgICAgICAgR0xDKGdsRGlzYWJsZShH
TF9ERVBUSF9URVNUKSk7Ci0gICAgICAgIEdMQyhnbENsZWFyKEdMX0RFUFRIX0JVRkZFUl9CSVQp
KTsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9URVNUKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKTsKICAgICAgICAgZGVw
dGhUZXN0RW5hYmxlZEZvclN1YnRyZWUgPSBmYWxzZTsKICAgICB9CiB9CkBAIC02MDMsMTMgKzYw
OSwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKExhCiAgICAgICAg
IGlmIChsYXllci0+Y29udGVudHNEaXJ0eSgpKSB7CiAgICAgICAgICAgICAvLyBVcGRhdGUgdGhl
IGJhY2tpbmcgdGV4dHVyZSBjb250ZW50cyBmb3IgYW55IGRpcnR5IHBvcnRpb24gb2YgdGhlIGxh
eWVyLgogICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRzKCk7Ci0gICAgICAgICAgICBt
X2dsZXMyQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobGF5ZXItPmRvdWJs
ZVNpZGVkKCkpCi0gICAgICAgICAgICBnbERpc2FibGUoR0xfQ1VMTF9GQUNFKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZ2xFbmFibGUoR0xfQ1VMTF9GQUNFKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0UpOwogCiAg
ICAgICAgIGxheWVyLT5kcmF3KCk7CiAgICAgfQpAQCAtNjI0LDEyICs2MzAsMTMgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnNjaXNzb3JUb1JlYwogewogICAgIC8vIENvbXB1dGUgdGhl
IGxvd2VyIGxlZnQgY29ybmVyIG9mIHRoZSBzY2lzc29yIHJlY3QuCiAgICAgZmxvYXQgYm90dG9t
ID0gc3RkOjptYXgoKGZsb2F0KW1fcm9vdFZpc2libGVSZWN0LmhlaWdodCgpIC0gc2Npc3NvclJl
Y3QuYm90dG9tKCksIDAuZik7Ci0gICAgR0xDKGdsU2Npc3NvcihzY2lzc29yUmVjdC54KCksIGJv
dHRvbSwgc2Npc3NvclJlY3Qud2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsKKyAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnNjaXNzb3Ioc2Npc3NvclJlY3QueCgpLCBib3R0b20s
IHNjaXNzb3JSZWN0LndpZHRoKCksIHNjaXNzb3JSZWN0LmhlaWdodCgpKSk7CiB9CiAKIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewotICAgIHJldHVy
biBtX2dsZXMyQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBDaGVja3Mgd2hldGhlciBh
IGdpdmVuIHNpemUgaXMgd2l0aGluIHRoZSBtYXhpbXVtIGFsbG93ZWQgdGV4dHVyZSBzaXplIHJh
bmdlLgpAQCAtNjQwLDYgKzY0NywxMiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hl
Y2tUZXh0dXJlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpub3RpY2VSZXNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9jb250
ZXh0KQorICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKK30KKwogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRP
YmplY3RzKCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTY2NywxNSArNjgwLDE1
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgIiAg
Z2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0
ZXhDb2xvci53KTsgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iOwogCi0gICAgbV9zY3JvbGxTaGFkZXJQcm9ncmFtID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlU2hhZGVyUHJvZ3JhbShzY3JvbGxWZXJ0ZXhTaGFkZXJTdHJp
bmcsIHNjcm9sbEZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBtX3Njcm9sbFNoYWRlclByb2dy
YW0gPSBMYXllckNocm9taXVtOjpjcmVhdGVTaGFkZXJQcm9ncmFtKG1fY29udGV4dC5nZXQoKSwg
c2Nyb2xsVmVydGV4U2hhZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVudFNoYWRlclN0cmluZyk7CiAg
ICAgaWYgKCFtX3Njcm9sbFNoYWRlclByb2dyYW0pIHsKICAgICAgICAgTE9HX0VSUk9SKCJMYXll
clJlbmRlcmVyQ2hyb21pdW06IEZhaWxlZCB0byBjcmVhdGUgc2Nyb2xsIHNoYWRlciBwcm9ncmFt
Iik7CiAgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBHTEMobV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBnbEdl
dFVuaWZvcm1Mb2NhdGlvbihtX3Njcm9sbFNoYWRlclByb2dyYW0sICJzX3RleHR1cmUiKSk7Ci0g
ICAgR0xDKG1fc2Nyb2xsU2hhZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihtX3Njcm9sbFNoYWRlclByb2dyYW0sICJtYXRyaXgiKSk7CisgICAgR0xDKG1fY29udGV4dCwg
bV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihtX3Njcm9sbFNoYWRlclByb2dyYW0sICJzX3RleHR1cmUiKSk7CisgICAgR0xDKG1fY29u
dGV4dCwgbV9zY3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9y
bUxvY2F0aW9uKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSwgIm1hdHJpeCIpKTsKICAgICBpZiAobV9z
Y3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb24gPT0gLTEgfHwgbV9zY3JvbGxTaGFkZXJNYXRyaXhM
b2NhdGlvbiA9PSAtMSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXpl
IHNjcm9sbCBzaGFkZXIuIik7CiAgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CkBAIC02
OTEsMTkgKzcwNCwxOSBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
CiAgICAgfQogICAgIC8vIFR1cm4gb2ZmIGZpbHRlcmluZyBmb3IgdGhlIHJvb3QgbGF5ZXIgdG8g
YXZvaWQgYmx1cnJpbmcgZnJvbSB0aGUgcmVwZWF0ZWQKICAgICAvLyB3cml0ZXMgYW5kIHJlYWRz
IHRvIHRoZSBmcmFtZWJ1ZmZlciB0aGF0IGhhcHBlbiB3aGlsZSBzY3JvbGxpbmcuCi0gICAgR0xD
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKLSAg
ICBHTEMoZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiwgR0xfTkVBUkVTVCkpOwotICAgIEdMQyhnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKSk7CisgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9y
b290TGF5ZXJUZXh0dXJlSWQpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7CisgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFw
aGljc0NvbnRleHQzRDo6TkVBUkVTVCkpOwogCiAgICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBz
aXplIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgotICAgIEdMQyhnbEdldEludGVnZXJ2KEdMX01B
WF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKSk7CisgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0la
RSwgJm1fbWF4VGV4dHVyZVNpemUpKTsKIAogICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGJpdHMg
YXZhaWxhYmxlIGluIHRoZSBzdGVuY2lsIGJ1ZmZlci4KLSAgICBHTEMoZ2xHZXRJbnRlZ2VydihH
TF9TVEVOQ0lMX0JJVFMsICZtX251bVN0ZW5jaWxCaXRzKSk7CisgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CSVRTLCAm
bV9udW1TdGVuY2lsQml0cykpOwogCi0gICAgbV9sYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRy
KG5ldyBMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMoKSk7Ci0gICAgbV9jb250ZW50TGF5ZXJT
aGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZh
bHVlcygpKTsKLSAgICBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IENh
bnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcygpKTsKKyAgICBtX2xheWVyU2hhcmVkVmFs
dWVzID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQu
Z2V0KCkpKTsKKyAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOworICAg
IG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ2FudmFzTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwogICAgIGlmICghbV9sYXllclNo
YXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMt
PmluaXRpYWxpemVkKCkgfHwgIW1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVk
KCkpIHsKICAgICAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNzIxLDEyICs3MzQsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNs
ZWFudXBTaGFyZQogICAgIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKIAogICAg
IGlmIChtX3Njcm9sbFNoYWRlclByb2dyYW0pIHsKLSAgICAgICAgR0xDKGdsRGVsZXRlUHJvZ3Jh
bShtX3Njcm9sbFNoYWRlclByb2dyYW0pKTsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5kZWxldGVQcm9ncmFtKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkpOwogICAgICAgICBtX3Nj
cm9sbFNoYWRlclByb2dyYW0gPSAwOwogICAgIH0KIAogICAgIGlmIChtX3Jvb3RMYXllclRleHR1
cmVJZCkgewotICAgICAgICBHTEMoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9yb290TGF5ZXJUZXh0
dXJlSWQpKTsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJl
KG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUlkID0g
MDsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHJldmlzaW9uIDY3ODc0KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTYgKzUxLDE4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgR0xFUzJDb250ZXh0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAK
IC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVy
cyB1c2luZyBHTC4KIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBjcmVhdGUoUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IGdsZXMyQ29udGV4dCk7CisgICAg
c3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3NDb250ZXh0M0QpOwogCi0gICAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtKFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpOworICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBncmFw
aGljc0NvbnRleHQzRCk7CiAgICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCisgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKwogICAgIC8vIHVwZGF0ZXMgc2l6ZSBvZiByb290
IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5kIHNjcm9sbHMgdGhlIGJhY2tidWZmZXIuCiAgICAgdm9p
ZCBwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKIApA
QCAtODksNyArOTEsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRleHR1
cmUoKTsKIAotICAgIHN0YXRpYyB2b2lkIGRlYnVnR0xDYWxsKGNvbnN0IGNoYXIqIGNvbW1hbmQs
IGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ2Fs
bChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZp
bGUsIGludCBsaW5lKTsKIAogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0
aW9uTWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV9wcm9qZWN0aW9uTWF0cml4OyB9CiAKQEAgLTEw
MSw2ICsxMDMsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ29udGVudExheWVyQ2hyb21pdW06OlNo
YXJlZFZhbHVlcyogY29udGVudExheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KICAgICBjb25zdCBDYW52YXNMYXllckNo
cm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogCisgICAgdm9pZCBub3Rp
Y2VSZXNpemUoY29uc3QgSW50U2l6ZSYpOworCiAgICAgSW50U2l6ZSByb290TGF5ZXJUZXh0dXJl
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1f
cm9vdExheWVyVGV4dHVyZUhlaWdodCk7IH0KICAgICB2b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxz
KHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCk7CiAKQEAgLTE2Nyw3ICsxNzEsNyBA
QCBwcml2YXRlOgogICAgIE93blB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
PiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlczsKICAgICBPd25QdHI8Q2FudmFzTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzOwogCi0gICAgT3du
UHRyPEdMRVMyQ29udGV4dD4gbV9nbGVzMkNvbnRleHQ7CisgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBtX2NvbnRleHQ7CiB9OwogCiAvLyBTZXR0aW5nIERFQlVHX0dMX0NBTExTIHRvIDEg
d2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkgR0wKQEAgLTE3Niw5ICsx
ODAsOSBAQCBwcml2YXRlOgogI2RlZmluZSBERUJVR19HTF9DQUxMUyAwCiAKICNpZiBERUJVR19H
TF9DQUxMUyAmJiAhZGVmaW5lZCAoIE5ERUJVRyApCi0jZGVmaW5lIEdMQyh4KSB7ICh4KSwgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbCgjeCwgX19GSUxFX18sIF9fTElORV9fKTsg
fQorI2RlZmluZSBHTEMoY29udGV4dCwgeCkgeyAoeCksIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZGVidWdHTENhbGwoY29udGV4dCwgI3gsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0KICNlbHNlCi0j
ZGVmaW5lIEdMQyh4KSAoeCkKKyNkZWZpbmUgR0xDKGNvbnRleHQsIHgpICh4KQogI2VuZGlmCiAK
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDE0ICszMywxMSBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2Fu
dmFzLmgiCiAKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNkZWZpbmUgR0xfR0xFWFRfUFJPVE9U
WVBFUwotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotCiAjaWYgUExBVEZPUk0oU0tJQSkKICNp
bmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lh
LmgiCkBAIC0xNTMsOSArMTUwLDEwIEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVU
ZXh0dXJlUmUKICAgICBpZiAoIXBpeGVscykKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICBjb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKICAgICBBU1NF
UlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVTaXplKTsKLSAgICBnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpLCBy
ZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCBwaXhlbHMpOworICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCByZXF1aXJlZFRleHR1cmVTaXpl
LndpZHRoKCksIHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKTsKIAog
ICAgIG1fY29udGVudHNUZXh0dXJlID0gdGV4dHVyZUlkOwogICAgIG1fYWxsb2NhdGVkVGV4dHVy
ZVNpemUgPSByZXF1aXJlZFRleHR1cmVTaXplOwpAQCAtMTc0LDExICsxNzIsMTMgQEAgdm9pZCBW
aWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZQogICAgIFNrQml0bWFwOjpDb25maWcg
c2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOwogCiAgICAgaWYgKHNraWFDb25maWcg
PT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKSB7Ci0gICAgICAgIGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICAgICAgdm9pZCogbWVtID0gZ2xNYXBUZXhT
dWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBHTF9XUklURV9PTkxZKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgICAgICBjb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKKyAgICAg
ICAgQVNTRVJUKGNvbnRleHQtPnN1cHBvcnRzTWFwU3ViQ0hST01JVU0oKSk7CisgICAgICAgIHZv
aWQqIG1lbSA9IGNvbnRleHQtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRh
dGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgR3JhcGhpY3NDb250ZXh0M0Q6
OldSSVRFX09OTFkpOwogICAgICAgICBza2lhQml0bWFwLT5zZXRQaXhlbHMobWVtKTsKICAgICAg
ICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKm1fZ3JhcGhpY3NDb250ZXh0
LCB1cGRhdGVSZWN0KTsKLSAgICAgICAgZ2xVbm1hcFRleFN1YkltYWdlMkQobWVtKTsKKyAgICAg
ICAgY29udGV4dC0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKTsKICAgICB9CiAKICAg
ICB1cGRhdGVDb21wbGV0ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDY3
ODc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgot
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDE1
ICs1MiwxNiBAQCBXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bShHCiAKIHZv
aWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCiB7CisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIHJlbmRlcmVyQ29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CiAgICAg
QVNTRVJUKG1fY29udGV4dCk7CiAgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKLSAgICAgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgIHJlbmRl
cmVyQ29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
dGV4dHVyZUlkKTsKICAgICAgICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFy
IGFuZCB3cmFwIG1vZGVzIHRvIEdMX0NMQU1QX1RPX0VER0UKICAgICAgICAgLy8gdG8gZ2V0IGFy
b3VuZCBOUE9UIHRleHR1cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KLSAgICAgICAgZ2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsK
LSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgZ2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICAgICAgcmVuZGVyZXJDb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgcmVuZGVyZXJDb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAg
ICAgcmVuZGVyZXJDb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgcmVuZGVyZXJDb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICAgICAg
bV90ZXh0dXJlQ2hhbmdlZCA9IGZhbHNlOwogICAgIH0KICAgICAvLyBVcGRhdGUgdGhlIGNvbnRl
bnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuY3BwCShyZXZpc2lvbiA2Nzg3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYg
KzExNCwxMSBAQCB2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VyCiAgICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwogfQogCit2b2lkIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCit7CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOworfQor
CiB1bnNpZ25lZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQog
ewogICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CkBAIC0xNjQsNiAr
MTY5LDE3IEBAIGJvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRzQkcKICAgICBy
ZXR1cm4gbV9jb250ZXh0LT5zdXBwb3J0c0JHUkEoKTsKIH0KIAorYm9vbCBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6c3VwcG9ydHNDb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKCkK
KworeworICAgIHJldHVybiBtX2NvbnRleHQtPnN1cHBvcnRzQ29weVRleHR1cmVUb1BhcmVudFRl
eHR1cmVDSFJPTUlVTSgpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5
VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKHVuc2lnbmVkIHRleHR1cmUsIHVuc2lnbmVk
IHBhcmVudFRleHR1cmUpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y29weVRleHR1cmVUb1Bh
cmVudFRleHR1cmVDSFJPTUlVTSh0ZXh0dXJlLCBwYXJlbnRUZXh0dXJlKTsKK30KKwogVGV4dHVy
ZSogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIg
cHRyLCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAg
ICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmUgPSBtX3RleHR1cmVzLmdldChwdHIpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGlj
c0NvbnRleHQzRC5oCShyZXZpc2lvbiA2Nzg3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYg
KzcwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUs
IGxvbmcgZmlyc3QsIGxvbmcgY291bnQpOwogICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsK
ICAgICB2b2lkIGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOwor
ICAgIHZvaWQgZmx1c2goKTsKIAogICAgIHVuc2lnbmVkIGNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAg
ICAgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpOwpAQCAtOTgsNiArOTksMTAgQEAgcHVibGljOgog
CiAgICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsKIAorICAgIC8vIEdMX0NIUk9NSVVNX2NvcHlfdGV4
dHVyZV90b19wYXJlbnRfdGV4dHVyZQorICAgIGJvb2wgc3VwcG9ydHNDb3B5VGV4dHVyZVRvUGFy
ZW50VGV4dHVyZUNIUk9NSVVNKCk7CisgICAgdm9pZCBjb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVy
ZUNIUk9NSVVNKHVuc2lnbmVkIHRleHR1cmUsIHVuc2lnbmVkIHBhcmVudFRleHR1cmUpOworCiAg
ICAgLy8gQ3JlYXRlcyBhIHRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBpbWFnZS4g
IElzIG93bmVkIGJ5IHRoaXMgY29udGV4dCdzCiAgICAgLy8gVGV4dHVyZUhhc2hNYXAuCiAgICAg
VGV4dHVyZSogY3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2Nzg3NSkK
KysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MyBAQAorMjAxMC0wOS0yMCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBD
aGFuZ2UgY29tcG9zaXRvciB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QgcmF0aGVyIHRoYW4gR0xF
UzJDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NTkxMgorCisgICAgICAgIFN3aXRjaGVkIENocm9taXVtJ3MgY29tcG9zaXRvciB0byB1c2Ug
R3JhcGhpY3NDb250ZXh0M0QgdG8gaXNzdWUKKyAgICAgICAgaXRzIE9wZW5HTCByZW5kZXJpbmcg
Y2FsbHMgcmF0aGVyIHRoYW4gdGhlIENocm9taXVtLXNwZWNpZmljCisgICAgICAgIEdMRVMyQ29u
dGV4dCBhbmQgY29tbWFuZCBidWZmZXIgT3BlbkdMIGltcGxlbWVudGF0aW9uLgorCisgICAgICAg
IFRoZSBpbi1wcm9jZXNzIHNvZnR3YXJlIHJlbmRlcmluZyBwYXRoIGZvciBHcmFwaGljc0NvbnRl
eHQzRCBkb2VzCisgICAgICAgIG5vdCB5ZXQgd29yayB3aXRoIHRoZSBjb21wb3NpdG9yLCBhdCBs
ZWFzdCBub3Qgb24gTWFjIE9TIFguIFRoaXMKKyAgICAgICAgd2lsbCBiZSB3b3JrZWQgb24gaW4g
c3Vic2VxdWVudCBidWdzLgorCisgICAgICAgIFRlc3RlZCBtYW51YWxseSB3aXRoIDNEIENTUywg
V2ViR0wgYW5kIHZpZGVvIGNvbnRlbnQgb24gTWFjIE9TIFgKKyAgICAgICAgYW5kIExpbnV4LiBO
byBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpleHRyYWN0V2ViR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZSk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDoKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpnbGVzMkNv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEwLTA5LTIwICBLZW5uZXRoIFJ1
c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEds
YXprb3YuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAko
cmV2aXNpb24gNjc4NzQpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDggKzEwMCw3IEBAIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6On5HcmFwaGljc0NvbnQKICNlbmRpZgogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6
ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKIHsKICAgICBXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXM7CiAgICAgd2ViQXR0
cmlidXRlcy5hbHBoYSA9IGF0dHJzLmFscGhhOwpAQCAtMTIwLDcgKzExOSw3IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGkKIAogICAgIGlmICghbV93ZWJWaWV3SW1w
bCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghd2ViQ29udGV4dC0+aW5pdGlhbGl6
ZSh3ZWJBdHRyaWJ1dGVzLCBtX3dlYlZpZXdJbXBsKSkgeworICAgIGlmICghd2ViQ29udGV4dC0+
aW5pdGlhbGl6ZSh3ZWJBdHRyaWJ1dGVzLCBtX3dlYlZpZXdJbXBsLCByZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdykpIHsKICAgICAgICAgZGVsZXRlIHdlYkNvbnRleHQ7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CkBAIC0xMzIsNiArMTMxLDEzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6aW5pdGlhbGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRCogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZXh0cmFjdFdlYkdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnRleHQtPm1faW50ZXJu
YWwtPm1faW1wbC5nZXQoKTsKK30KKwogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9pbXBsLmdldCgpOwpAQCAtNzk3LDE0ICs4MDMsMTEgQEAgR3JhcGhpY3ND
b250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAKIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKLSAgICAvLyBGSVhNRTogbXVzdCBwYXNzIGRvd24g
cmVuZGVyU3R5bGUgYXJndW1lbnQgd2hlbiBzd2l0Y2hpbmcgY29tcG9zaXRvciB0byBHcmFwaGlj
c0NvbnRleHQzRC4KLSAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3cpCi0gICAgICAgIHJldHVybiAwOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsPiBpbnRlcm5hbCA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFs
KCkpOwotICAgIGlmICghaW50ZXJuYWwtPmluaXRpYWxpemUoYXR0cnMsIGhvc3RXaW5kb3cpKSB7
CisgICAgaWYgKCFpbnRlcm5hbC0+aW5pdGlhbGl6ZShhdHRycywgaG9zdFdpbmRvdywgcmVuZGVy
U3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cgPyB0cnVlIDogZmFsc2UpKSB7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiByZXN1bHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIGZhbHNl
KTsKKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiByZXN1bHQgPSBuZXcgR3JhcGhp
Y3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93ID8gdHJ1ZSA6IGZhbHNlKTsKICAgICByZXN1bHQtPm1faW50ZXJuYWwg
PSBpbnRlcm5hbC5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCShyZXZpc2lv
biA2Nzg3NCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbCgpOwogICAgIH5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7
CiAKLSAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhv
c3RXaW5kb3cqKTsKKyAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYWNjZXNz
IHRvIHRoZSBsb3dlci1sZXZlbCBXZWJHcmFwaGljc0NvbnRleHQzRCwKKyAgICAvLyB3aGljaCBp
cyBuZWVkZWQgZm9yIHN1Ym9yZGluYXRlIGNvbnRleHRzIGxpa2UgV2ViR0wncyB0byBzaGFyZSBy
ZXNvdXJjZXMKKyAgICAvLyB3aXRoIHRoZSBjb21wb3NpdG9yJ3MgY29udGV4dC4KKyAgICBzdGF0
aWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKIAogICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OwogICAgIFBsYXRmb3Jt
M0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDkgQEAKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgotI2luY2x1ZGUgIkdMRVMyQ29udGV4dC5oIgotI2luY2x1ZGUgIkdMRVMyQ29udGV4
dEludGVybmFsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgi
CiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC05MjcsOSArOTI2LDkgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIAogICAgIH0KIAogI2lmIE9TKERB
UldJTikKLSAgICBpZiAobV9nbGVzMkNvbnRleHQpIHsKLSAgICAgICAgbV9nbGVzMkNvbnRleHQt
PnJlc2l6ZU9uc2NyZWVuQ29udGVudChXZWJTaXplKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSkpOworICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsK
KyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5ub3RpY2VSZXNpemUoV2ViQ29yZTo6SW50U2l6ZShz
dGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKSk7CiAg
ICAgfQogI2VuZGlmCiB9CkBAIC0yMzAzLDcgKzIzMDIsMTMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
c2V0SXNBY2NlbGVyYXRlZENvbXBvcwogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWN0aXZl
KSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3Jl
YXRlKGdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkpOworICAgICAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0Qu
cmVsZWFzZSgpOworICAgICAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHQg
PSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
KCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdyk7CisgICAgICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1f
c2l6ZS5oZWlnaHQpKTsKKyAgICAgICAgfQorICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0LnJlbGVhc2UoKSk7CiAgICAgICAgIGlm
IChtX2xheWVyUmVuZGVyZXIpIHsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTI0MTMsMTQgKzI0MTgsNiBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiAjZW5kaWYKIAogCi1QYXNzT3duUHRy
PEdMRVMyQ29udGV4dD4gV2ViVmlld0ltcGw6OmdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkKLXsK
LSAgICBXZWJHTEVTMkNvbnRleHQqIGNvbnRleHQgPSBnbGVzMkNvbnRleHQoKTsKLSAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBHTEVTMkNvbnRleHQ6OmNy
ZWF0ZShHTEVTMkNvbnRleHRJbnRlcm5hbDo6Y3JlYXRlKGNvbnRleHQsIGZhbHNlKSk7Ci19Ci0K
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6Z2V0U2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QoKQogewogICAgIGlmICghbV9zaGFyZWRDb250ZXh0M0QpIHsKQEAgLTI0MzQsMzIg
KzI0MzEsMzIgQEAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpnZQogICAg
IHJldHVybiBtX3NoYXJlZENvbnRleHQzRC5nZXQoKTsKIH0KIAotLy8gUmV0dXJucyB0aGUgR0xF
UzIgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBWaWV3LiBJZiBvbmUgZG9lc24ndCBleGlz
dAotLy8gaXQgd2lsbCBnZXQgY3JlYXRlZCBmaXJzdC4KIFdlYkdMRVMyQ29udGV4dCogV2ViVmll
d0ltcGw6OmdsZXMyQ29udGV4dCgpCiB7Ci0gICAgaWYgKCFtX2dsZXMyQ29udGV4dCkgewotICAg
ICAgICBtX2dsZXMyQ29udGV4dCA9IHdlYktpdENsaWVudCgpLT5jcmVhdGVHTEVTMkNvbnRleHQo
KTsKLSAgICAgICAgaWYgKCFtX2dsZXMyQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiAwOwot
Ci0gICAgICAgIGlmICghbV9nbGVzMkNvbnRleHQtPmluaXRpYWxpemUodGhpcywgMCkpIHsKLSAg
ICAgICAgICAgIG1fZ2xlczJDb250ZXh0LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgfQotCi0jaWYgT1MoREFSV0lOKQotICAgICAgICBtX2dsZXMyQ29udGV4dC0+cmVz
aXplT25zY3JlZW5Db250ZW50KFdlYlNpemUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2xl
czJDb250ZXh0LmdldCgpOworICAgIHJldHVybiAwOwogfQogCiBXZWJHcmFwaGljc0NvbnRleHQz
RCogV2ViVmlld0ltcGw6OmdyYXBoaWNzQ29udGV4dDNEKCkKIHsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50IHRoaXMuCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0ID0gMDsKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAg
ICAgICBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgZWxzZSBpZiAo
bV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEKSB7CisgICAgICAgIGNvbnRleHQg
PSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAg
ICAgICAgbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEID0gR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNo
cm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwor
I2lmIE9TKERBUldJTikKKyAgICAgICAgaWYgKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0Nv
bnRleHQzRCkKKyAgICAgICAgICAgIG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQz
RC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1heCgxLCBtX3NpemUu
aGVpZ2h0KSk7CisjZW5kaWYKKyAgICAgICAgY29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5H
cmFwaGljc0NvbnRleHQzRC5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0KTsKKyNlbHNl
CiAgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiA2Nzg3NCkKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBA
QAogI2lmbmRlZiBXZWJWaWV3SW1wbF9oCiAjZGVmaW5lIFdlYlZpZXdJbXBsX2gKIAotI2luY2x1
ZGUgIldlYkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25Qb2xpY3kuaCIK
ICNpbmNsdWRlICJXZWJQb2ludC5oIgogI2luY2x1ZGUgIldlYlJlY3QuaCIKQEAgLTQ0LDYgKzQz
LDcgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJEcmFn
Q2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTYsNyAr
NTYsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0Owog
Y2xhc3MgRnJhbWU7Ci1jbGFzcyBHTEVTMkNvbnRleHQ7CiBjbGFzcyBIaXN0b3J5SXRlbTsKIGNs
YXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBLZXlib2FyZEV2ZW50OwpAQCAtMzMzLDE0ICszMzIs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7
CiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CiAjZW5kaWYKLSAgICAvLyBPbnNjcmVlbiBjb250ZXh0cyBkaXNwbGF5IHRvIHRoZSBzY3Jl
ZW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldy4KLSAgICAvLyBPZmZzY3JlZW4gY29udGV4dHMg
cmVuZGVyIG9mZnNjcmVlbiBidXQgY2FuIHNoYXJlIHJlc291cmNlcyB3aXRoIHRoZQotICAgIC8v
IG9uc2NyZWVuIGNvbnRleHQgYW5kIHRodXMgY2FuIGJlIGNvbXBvc2l0ZWQuCi0gICAgLy8gRklY
TUU6IHJlbW92ZSB0aGlzIG9uY2UgdGhlIGNvbXBvc2l0b3IgaXMgc3dpdGNoZWQgdG8gdXNlIEdy
YXBoaWNzQ29udGV4dDNELgotICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R0xFUzJDb250ZXh0PiBn
ZXRPbnNjcmVlbkdMRVMyQ29udGV4dCgpOwotCi0gICAgLy8gUmV0dXJucyBhbiBvbnNjcmVlbiBj
b250ZXh0Ci0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIG9uY2UgdGhlIGNvbXBvc2l0b3IgaXMg
c3dpdGNoZWQgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJWE1FOiByZW1vdmUg
dGhpcyBtZXRob2Qgb25jZSB0aGUgY29tcG9zaXRvciBpcyBmdWxseSBzd2l0Y2hlZAorICAgIC8v
IG92ZXIgdG8gR3JhcGhpY3NDb250ZXh0M0QuCiAgICAgdmlydHVhbCBXZWJHTEVTMkNvbnRleHQq
IGdsZXMyQ29udGV4dCgpOwogCiAgICAgLy8gUmV0dXJucyB0aGUgb25zY3JlZW4gM0QgY29udGV4
dCB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGlzCkBAIC01NDMsOCArNTM2LDEwIEBAIHBy
aXZhdGU6CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBTcGVlY2hJbnB1dENsaWVudElt
cGwgbV9zcGVlY2hJbnB1dENsaWVudDsKICNlbmRpZgotCi0gICAgT3duUHRyPFdlYkdMRVMyQ29u
dGV4dD4gbV9nbGVzMkNvbnRleHQ7CisgICAgLy8gSWYgd2UgYXR0ZW1wdCB0byBmZXRjaCB0aGUg
b24tc2NyZWVuIEdyYXBoaWNzQ29udGV4dDNEIGJlZm9yZQorICAgIC8vIHRoZSBjb21wb3NpdG9y
IGhhcyBiZWVuIHR1cm5lZCBvbiwgd2UgbmVlZCB0byBpbnN0YW50aWF0ZSBpdAorICAgIC8vIGVh
cmx5LiBUaGlzIG1lbWJlciBob2xkcyBvbiB0byB0aGUgR0MzRCBpbiB0aGlzIGNhc2UuCisgICAg
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBtX3RlbXBvcmFyeU9uc2NyZWVuR3Jh
cGhpY3NDb250ZXh0M0Q7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q+IG1fc2hhcmVkQ29udGV4dDNEOwogCg==
</data>
<flag name="commit-queue"
          id="57588"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68142</attachid>
            <date>2010-09-20 15:04:01 -0700</date>
            <delta_ts>2010-09-20 15:20:09 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>gc3d-compositor.patch</filename>
            <type>text/plain</type>
            <size>78147</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzg3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMDktMjAgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtj
aHJvbWl1bV0gQ2hhbmdlIGNvbXBvc2l0b3IgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNEIHJhdGhl
ciB0aGFuIEdMRVMyQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDU5MTIKKworICAgICAgICBTd2l0Y2hlZCBDaHJvbWl1bSdzIGNvbXBvc2l0
b3IgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNEIHRvIGlzc3VlCisgICAgICAgIGl0cyBPcGVuR0wg
cmVuZGVyaW5nIGNhbGxzIHJhdGhlciB0aGFuIHRoZSBDaHJvbWl1bS1zcGVjaWZpYworICAgICAg
ICBHTEVTMkNvbnRleHQgYW5kIGNvbW1hbmQgYnVmZmVyIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4K
KworICAgICAgICBUaGUgaW4tcHJvY2VzcyBzb2Z0d2FyZSByZW5kZXJpbmcgcGF0aCBmb3IgR3Jh
cGhpY3NDb250ZXh0M0QgZG9lcworICAgICAgICBub3QgeWV0IHdvcmsgd2l0aCB0aGUgY29tcG9z
aXRvciwgYXQgbGVhc3Qgbm90IG9uIE1hYyBPUyBYLiBUaGlzCisgICAgICAgIHdpbGwgYmUgd29y
a2VkIG9uIGluIHN1YnNlcXVlbnQgYnVncy4KKworICAgICAgICBUZXN0ZWQgbWFudWFsbHkgd2l0
aCAzRCBDU1MsIFdlYkdMIGFuZCB2aWRlbyBjb250ZW50IG9uIE1hYyBPUyBYCisgICAgICAgIGFu
ZCBMaW51eC4gTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJDaHJvbWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFs
dWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
czo6flNoYXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVt
OjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
ckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21p
dW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6On5TaGFyZWRWYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmRyYXcpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3Jt
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6On5TaGFyZWRWYWx1ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlU2hhZGVyUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpsYXllclJlbmRlcmVyQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpkcmF3QXNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnByZXBhcmVGb3JEcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXM6OmNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVMYXllclRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJJbnRvU3RlbmNpbEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzY2lz
c29yVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6bWFr
ZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6bm90aWNlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2gpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRzQ29weVRl
eHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6
CisKIDIwMTAtMDktMjAgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDcg
QEAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkRyYXdp
bmdCdWZmZXIuaCIKLQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTQsNyArNTMsNyBAQCBD
YW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvCiBDYW52YXMyRExheWVyQ2hy
b21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0oKQogewogICAgIGlmIChtX3RleHR1cmVJZCkK
LSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlSWQpOworICAgICAgICBsYXll
clJlbmRlcmVyQ29udGV4dCgpLT5kZWxldGVUZXh0dXJlKG1fdGV4dHVyZUlkKTsKIH0KIAogdm9p
ZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKQEAgLTYyLDI2ICs2MSwy
NyBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVuCiAgICAgaWYgKCFt
X2RyYXdpbmdCdWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobV90ZXh0dXJlQ2hhbmdl
ZCkgeyAvLyBXZSBoYXZlIHRvIGdlbmVyYXRlIGEgbmV3IGJhY2tpbmcgdGV4dHVyZS4KKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwog
ICAgICAgICBpZiAobV90ZXh0dXJlSWQpCi0gICAgICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX3RleHR1cmVJZCk7Ci0gICAgICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZUlkKTsK
LSAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKLSAgICAgICAgZ2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgICAgICBjb250ZXh0LT5k
ZWxldGVUZXh0dXJlKG1fdGV4dHVyZUlkKTsKKyAgICAgICAgbV90ZXh0dXJlSWQgPSBjb250ZXh0
LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKICAgICAgICAgSW50U2l6
ZSBzaXplID0gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCk7Ci0gICAgICAgIGdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICAvLyBTZXQgdGhlIG1pbi1t
YWcgZmlsdGVycyB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR0xfQ0xBTVBfVE9fRURHRQor
ICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIDApOworICAgICAgICAvLyBTZXQgdGhlIG1pbi1tYWcgZmlsdGVycyB0byBsaW5lYXIg
YW5kIHdyYXAgbW9kZXMgdG8gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UKICAgICAg
ICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KLSAg
ICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJ
TFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAg
ICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFN
UF9UT19FREdFKTsKKyAgICAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgLy8gRklYTUU6IFRoZSBnbEZpbmlzaCgpIGhlcmUgaXMgcmVxdWly
ZWQgYmVjYXVzZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0dXJlIGNyZWF0ZWQg
aW4gdGhpcworICAgICAgICAvLyBGSVhNRTogVGhlIGZpbmlzaCgpIGhlcmUgaXMgcmVxdWlyZWQg
YmVjYXVzZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0dXJlIGNyZWF0ZWQgaW4g
dGhpcwogICAgICAgICAvLyBjb250ZXh0ICh0aGUgY29tcG9zaXRvciBjb250ZXh0KSBpcyBhY3R1
YWxseSBjcmVhdGVkIGJ5IHRoZSBzZXJ2aWNlIHNpZGUgYmVmb3JlIHRoZSBjaGlsZCBjb250ZXh0
Ci0gICAgICAgIC8vIGF0dGVtcHRzIHRvIHVzZSBpdCAoaW4gcHVibGlzaFRvUGxhdGZvcm1MYXll
cikuICBnbEZpbmlzaCgpIGlzIGN1cnJlbnRseSB0aGUgb25seSBjYWxsIHdpdGggc3Ryb25nCisg
ICAgICAgIC8vIGF0dGVtcHRzIHRvIHVzZSBpdCAoaW4gcHVibGlzaFRvUGxhdGZvcm1MYXllciku
ICBmaW5pc2goKSBpcyBjdXJyZW50bHkgdGhlIG9ubHkgY2FsbCB3aXRoIHN0cm9uZwogICAgICAg
ICAvLyBlbm91Z2ggc2VtYW50aWNzIHRvIHByb21pc2UgdGhpcywgYnV0IGlzIGFjdHVhbGx5IG11
Y2ggc3Ryb25nZXIuICBJZGVhbGx5IHdlJ2QgZG8gc29tZXRoaW5nIGxpa2UKICAgICAgICAgLy8g
aW5zZXJ0aW5nIGEgZmVuY2UgaGVyZSBhbmQgd2FpdGluZyBmb3IgaXQgYmVmb3JlIHRyeWluZyB0
byBwdWJsaXNoLgotICAgICAgICBnbEZpbmlzaCgpOworICAgICAgICBjb250ZXh0LT5maW5pc2go
KTsKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2Vk
IGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwxNiArMzQsMTYgQEAKIAogI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKIAor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCiAKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1bnNpZ25lZCBDYW52YXNMYXllckNocm9taXVtOjptX3NoYWRlclByb2dyYW1JZCA9IDA7
CiAKLUNhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKCkKLSAg
ICA6IG1fY2FudmFzU2hhZGVyUHJvZ3JhbSgwKQorQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVk
VmFsdWVzOjpTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fY2FudmFzU2hhZGVyUHJvZ3JhbSgwKQogICAgICwg
bV9zaGFkZXJTYW1wbGVyTG9jYXRpb24oLTEpCiAgICAgLCBtX3NoYWRlck1hdHJpeExvY2F0aW9u
KC0xKQogICAgICwgbV9zaGFkZXJBbHBoYUxvY2F0aW9uKC0xKQpAQCAtNzMsMTUgKzczLDE1IEBA
IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmUKICAgICAgICAgIiAgZ2xf
RnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhD
b2xvci53KSAqIGFscGhhOyBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLSAgICBtX2NhbnZhc1NoYWRlclByb2dy
YW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21lbnRTaGFk
ZXJTdHJpbmcpOworICAgIG1fY2FudmFzU2hhZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dy
YW0obV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKTsK
ICAgICBpZiAoIW1fY2FudmFzU2hhZGVyUHJvZ3JhbSkgewogICAgICAgICBMT0dfRVJST1IoIkNh
bnZhc0xheWVyQ2hyb21pdW06IEZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24obV9jYW52YXNTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7Ci0g
ICAgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY2FudmFz
U2hhZGVyUHJvZ3JhbSwgIm1hdHJpeCIpOwotICAgIG1fc2hhZGVyQWxwaGFMb2NhdGlvbiA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKG1fY2FudmFzU2hhZGVyUHJvZ3JhbSwgImFscGhhIik7CisgICAg
bV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbiht
X2NhbnZhc1NoYWRlclByb2dyYW0sICJzX3RleHR1cmUiKTsKKyAgICBtX3NoYWRlck1hdHJpeExv
Y2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9jYW52YXNTaGFkZXJQcm9n
cmFtLCAibWF0cml4Iik7CisgICAgbV9zaGFkZXJBbHBoYUxvY2F0aW9uID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24obV9jYW52YXNTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsKICAgICBB
U1NFUlQobV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gIT0gLTEpOwogICAgIEFTU0VSVChtX3NoYWRl
ck1hdHJpeExvY2F0aW9uICE9IC0xKTsKICAgICBBU1NFUlQobV9zaGFkZXJBbHBoYUxvY2F0aW9u
ICE9IC0xKTsKQEAgLTkyLDcgKzkyLDcgQEAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzOjpTaGFyZQogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFs
dWVzKCkKIHsKICAgICBpZiAobV9jYW52YXNTaGFkZXJQcm9ncmFtKQotICAgICAgICBHTEMoZ2xE
ZWxldGVQcm9ncmFtKG1fY2FudmFzU2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9jYW52YXNTaGFkZXJQcm9ncmFtKSk7CiB9
CiAKIENhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcikKQEAgLTExMSwxMSArMTExLDEyIEBAIHZvaWQgQ2FudmFzTGF5ZXJD
aHJvbWl1bTo6ZHJhdygpCiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAgICAgY29uc3Qg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBzdiA9IGxheWVyUmVuZGVyZXIoKS0+
Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKTsKICAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxp
emVkKCkpOwotICAgIEdMQyhnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTEMo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCkpOworICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CiAgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VT
aGFkZXIoc3YtPmNhbnZhc1NoYWRlclByb2dyYW0oKSk7Ci0gICAgR0xDKGdsVW5pZm9ybTFpKHN2
LT5zaGFkZXJTYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAgIGRyYXdUZXh0dXJlZFF1YWQobGF5
ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKKyAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5zaGFkZXJTYW1wbGVyTG9jYXRpb24o
KSwgMCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5w
cm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKICAgICAgICAgICAgICAgICAgICAg
IGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAogICAg
ICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIHN2LT5zaGFkZXJB
bHBoYUxvY2F0aW9uKCkpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gNjc4NzQp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBjbGFz
cyBTaGFyZWRWYWx1ZXMgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2hhcmVkVmFsdWVzKCk7Cisg
ICAgICAgIGV4cGxpY2l0IFNoYXJlZFZhbHVlcyhHcmFwaGljc0NvbnRleHQzRCopOwogICAgICAg
ICB+U2hhcmVkVmFsdWVzKCk7CiAKICAgICAgICAgdW5zaWduZWQgY2FudmFzU2hhZGVyUHJvZ3Jh
bSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzU2hhZGVyUHJvZ3JhbTsgfQpAQCAtNTcsNiArNTcs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBt
X2luaXRpYWxpemVkOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBHcmFwaGljc0NvbnRleHQz
RCogbV9jb250ZXh0OwogICAgICAgICB1bnNpZ25lZCBtX2NhbnZhc1NoYWRlclByb2dyYW07CiAg
ICAgICAgIGludCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsKICAgICAgICAgaW50IG1fc2hhZGVy
TWF0cml4TG9jYXRpb247CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNjc4
NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAi
Q29udGVudExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJCYWNraW5nLmgiCiAKQEAgLTQ3LDEyICs0OCwxMSBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0JpdG1hcENvbnRleHQuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
czo6U2hhcmVkVmFsdWVzKCkKLSAgICA6IG1fY29udGVudFNoYWRlclByb2dyYW0oMCkKK0NvbnRl
bnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcyhHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jb250ZW50
U2hhZGVyUHJvZ3JhbSgwKQogICAgICwgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24oLTEpCiAgICAg
LCBtX3NoYWRlck1hdHJpeExvY2F0aW9uKC0xKQogICAgICwgbV9zaGFkZXJBbHBoYUxvY2F0aW9u
KC0xKQpAQCAtOTAsMTUgKzkwLDE1IEBAIENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1
ZXM6OlNoYXIKICNlbmRpZgogICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotICAgIG1fY29udGVudFNoYWRlclByb2dyYW0g
PSBjcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21lbnRTaGFkZXJT
dHJpbmcpOworICAgIG1fY29udGVudFNoYWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFt
KG1fY29udGV4dCwgdmVydGV4U2hhZGVyU3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZyk7CiAg
ICAgaWYgKCFtX2NvbnRlbnRTaGFkZXJQcm9ncmFtKSB7CiAgICAgICAgIExPR19FUlJPUigiQ29u
dGVudExheWVyQ2hyb21pdW06IEZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24obV9jb250ZW50U2hhZGVyUHJvZ3JhbSwgInNfdGV4dHVyZSIpOwot
ICAgIG1fc2hhZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbnRl
bnRTaGFkZXJQcm9ncmFtLCAibWF0cml4Iik7Ci0gICAgbV9zaGFkZXJBbHBoYUxvY2F0aW9uID0g
Z2xHZXRVbmlmb3JtTG9jYXRpb24obV9jb250ZW50U2hhZGVyUHJvZ3JhbSwgImFscGhhIik7Cisg
ICAgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlv
bihtX2NvbnRlbnRTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7CisgICAgbV9zaGFkZXJNYXRy
aXhMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fY29udGVudFNoYWRl
clByb2dyYW0sICJtYXRyaXgiKTsKKyAgICBtX3NoYWRlckFscGhhTG9jYXRpb24gPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbnRlbnRTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsK
ICAgICBBU1NFUlQobV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gIT0gLTEpOwogICAgIEFTU0VSVCht
X3NoYWRlck1hdHJpeExvY2F0aW9uICE9IC0xKTsKICAgICBBU1NFUlQobV9zaGFkZXJBbHBoYUxv
Y2F0aW9uICE9IC0xKTsKQEAgLTEwOSw3ICsxMDksNyBAQCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzOjpTaGFyCiBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+
U2hhcmVkVmFsdWVzKCkKIHsKICAgICBpZiAobV9jb250ZW50U2hhZGVyUHJvZ3JhbSkKLSAgICAg
ICAgR0xDKGdsRGVsZXRlUHJvZ3JhbShtX2NvbnRlbnRTaGFkZXJQcm9ncmFtKSk7CisgICAgICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2NvbnRlbnRTaGFkZXJQ
cm9ncmFtKSk7CiB9CiAKIApAQCAtMTI3LDcgKzEyNyw3IEBAIENvbnRlbnRMYXllckNocm9taXVt
OjpDb250ZW50TGF5ZXJDaHJvbWkKIENvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVudExheWVy
Q2hyb21pdW0oKQogewogICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgR0xDKGds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29udGVudHNUZXh0dXJlKSk7CisgICAgICAgIEdMQyhsYXll
clJlbmRlcmVyQ29udGV4dCgpLCBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5kZWxldGVUZXh0dXJl
KG1fY29udGVudHNUZXh0dXJlKSk7CiB9CiAKIApAQCAtMjM2LDIwICsyMzYsMjEgQEAgdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZQogICAgIGlmICghcGl4ZWxzKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVJ
ZCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4
dCgpOworICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCB0ZXh0dXJlSWQpOwogCiAgICAgLy8gSWYgdGhlIHRleHR1cmUgaWQgb3Igc2l6ZSBjaGFu
Z2VkIHNpbmNlIGxhc3QgdGltZSB0aGVuIHdlIG5lZWQgdG8gdGVsbCBHTAogICAgIC8vIHRvIHJl
LWFsbG9jYXRlIGEgdGV4dHVyZS4KICAgICBpZiAobV9jb250ZW50c1RleHR1cmUgIT0gdGV4dHVy
ZUlkIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkgewog
ICAgICAgICBBU1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVTaXplKTsKLSAgICAg
ICAgR0xDKGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCByZXF1aXJlZFRl
eHR1cmVTaXplLndpZHRoKCksIHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworICAgICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIHJlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSwgcmVxdWlyZWRU
ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKIAogICAgICAgICBtX2NvbnRlbnRz
VGV4dHVyZSA9IHRleHR1cmVJZDsKICAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJl
cXVpcmVkVGV4dHVyZVNpemU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHVwZGF0ZVJl
Y3Qud2lkdGgoKSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkgJiYgdXBkYXRlUmVj
dC5oZWlnaHQoKSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgpKTsKICAgICAgICAg
QVNTRVJUKHVwZGF0ZVJlY3Qud2lkdGgoKSA9PSBiaXRtYXBTaXplLndpZHRoKCkgJiYgdXBkYXRl
UmVjdC5oZWlnaHQoKSA9PSBiaXRtYXBTaXplLmhlaWdodCgpKTsKLSAgICAgICAgR0xDKGdsVGV4
U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55
KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50
ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0
LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWln
aHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBwaXhlbHMpKTsKICAgICB9CiAKICAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEZsb2F0
U2l6ZSgpKTsKQEAgLTI2NCwxMSArMjY1LDEyIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06
OmRyYXcoKQogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogICAgIGNvbnN0IENvbnRlbnRM
YXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZW50
TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKICAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxpemVkKCkp
OwotICAgIEdMQyhnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTEMoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbnRlbnRzVGV4dHVyZSkpOworICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fY29udGVudHNUZXh0dXJlKSk7CiAgICAgbGF5ZXJSZW5kZXJlcigp
LT51c2VTaGFkZXIoc3YtPmNvbnRlbnRTaGFkZXJQcm9ncmFtKCkpOwotICAgIEdMQyhnbFVuaWZv
cm0xaShzdi0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICBkcmF3VGV4dHVyZWRR
dWFkKGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCks
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShzdi0+c2hhZGVyU2FtcGxlckxv
Y2F0aW9uKCksIDApKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVy
ZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCiAgICAgICAgICAgICAg
ICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHko
KSwKICAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+
c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgJKHJldmlz
aW9uIDY3ODc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBjb250ZXh0KS4KICAgICBjbGFzcyBTaGFyZWRWYWx1ZXMgewogICAgIHB1YmxpYzoK
LSAgICAgICAgU2hhcmVkVmFsdWVzKCk7CisgICAgICAgIGV4cGxpY2l0IFNoYXJlZFZhbHVlcyhH
cmFwaGljc0NvbnRleHQzRCopOwogICAgICAgICB+U2hhcmVkVmFsdWVzKCk7CiAKICAgICAgICAg
dW5zaWduZWQgY29udGVudFNoYWRlclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRT
aGFkZXJQcm9ncmFtOyB9CkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgaW50IGlu
aXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXplZDsgfQogCiAgICAgcHJpdmF0
ZToKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICAgICAgdW5zaWdu
ZWQgbV9jb250ZW50U2hhZGVyUHJvZ3JhbTsKICAgICAgICAgaW50IG1fc2hhZGVyU2FtcGxlckxv
Y2F0aW9uOwogICAgICAgICBpbnQgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbjsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdC
dWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDY3ODc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxMiArMzksNiBAQAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgog
I2VuZGlmCiAKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpZm5kZWYgR0xfR0xFWFRfUFJPVE9U
WVBFUwotI2RlZmluZSBHTF9HTEVYVF9QUk9UT1RZUEVTIDEKLSNlbmRpZgotI2luY2x1ZGUgPEdM
RVMyL2dsMmV4dC5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBEcmF3aW5nQnVm
ZmVySW50ZXJuYWwgewpAQCAtMTA1LDggKzk5LDggQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJs
aXNoVG9QbGF0Zm9ybUxheQogICAgIC8vIGhhcHBlbnMgYmVmb3JlIHRoZSBjb21wb3NpdG9yIGRy
YXdzLiAgVGhpcyBtZWFucyB3ZSBtaWdodCBkcmF3IHN0YWxlIGZyYW1lcyBzb21ldGltZXMuICBJ
ZGVhbGx5IHRoaXMKICAgICAvLyB3b3VsZCBpbnNlcnQgYSBmZW5jZSBpbnRvIHRoZSBjaGlsZCBj
b21tYW5kIHN0cmVhbSB0aGF0IHRoZSBjb21wb3NpdG9yIGNvdWxkIHdhaXQgZm9yLgogICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xDb3B5VGV4dHVyZVRvUGFyZW50
VGV4dHVyZShtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1cmUsIHBhcmVudFRleHR1cmUp
OwotICAgIGdsRmx1c2goKTsKKyAgICBtX2NvbnRleHQtPmNvcHlUZXh0dXJlVG9QYXJlbnRUZXh0
dXJlQ0hST01JVU0obV9pbnRlcm5hbC0+b2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCBwYXJlbnRUZXh0
dXJlKTsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA2Nzg3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaWYgUExBVEZPUk0oU0tJQSkK
ICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKQEAgLTQxLDggKzQyLDcgQEAKICNlbmRpZgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgInNraWEvZXh0L3BsYXRm
b3JtX2NhbnZhcy5oIgotCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTEsMjQgKzUxLDI2
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBjb25zdCB1bnNpZ25lZCBMYXllckNocm9taXVtOjpz
X3Bvc2l0aW9uQXR0cmliTG9jYXRpb24gPSAwOwogY29uc3QgdW5zaWduZWQgTGF5ZXJDaHJvbWl1
bTo6c190ZXhDb29yZEF0dHJpYkxvY2F0aW9uID0gMTsKIAotc3RhdGljIEdMdWludCBsb2FkU2hh
ZGVyKEdMZW51bSB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UpCitzdGF0aWMgdW5zaWdu
ZWQgbG9hZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgdHlwZSwg
Y29uc3QgY2hhciogc2hhZGVyU291cmNlKQogewotICAgIEdMdWludCBzaGFkZXIgPSBnbENyZWF0
ZVNoYWRlcih0eXBlKTsKKyAgICB1bnNpZ25lZCBzaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVTaGFk
ZXIodHlwZSk7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIEdMQyhn
bFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2UsIDApKTsKLSAgICBHTEMoZ2xD
b21waWxlU2hhZGVyKHNoYWRlcikpOwotICAgIEdMaW50IGNvbXBpbGVkOwotICAgIEdMQyhnbEdl
dFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsICZjb21waWxlZCkpOworICAgIFN0
cmluZyBzb3VyY2VTdHJpbmcoc2hhZGVyU291cmNlKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+c2hhZGVyU291cmNlKHNoYWRlciwgc291cmNlU3RyaW5nKSk7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKSk7CisgICAgaW50IGNvbXBpbGVkOworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29udGV4
dDNEOjpDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVkKSk7CiAgICAgaWYgKCFjb21waWxlZCkgewot
ICAgICAgICBHTEMoZ2xEZWxldGVTaGFkZXIoc2hhZGVyKSk7CisgICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5kZWxldGVTaGFkZXIoc2hhZGVyKSk7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KICAgICByZXR1cm4gc2hhZGVyOwogfQogCi1MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6
OlNoYXJlZFZhbHVlcygpCi0gICAgOiBtX3F1YWRWZXJ0aWNlc1ZibygwKQorTGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
CisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fcXVhZFZlcnRpY2VzVmJvKDApCiAg
ICAgLCBtX3F1YWRFbGVtZW50c1ZibygwKQogICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgwKQogICAg
ICwgbV9ib3JkZXJTaGFkZXJQcm9ncmFtKDApCkBAIC03NywyNCArNzksMjIgQEAgTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZQogICAgICwgbV9pbml0aWFsaXplZChmYWxz
ZSkKIHsKICAgICAvLyBWZXJ0ZXggcG9zaXRpb25zIGFuZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZv
ciB0aGUgNCBjb3JuZXJzIG9mIGEgMXgxIHF1YWQuCi0gICAgR0xmbG9hdCB2ZXJ0aWNlc1tdID0g
eyAtMC41ZiwgIDAuNWYsIDAuMGYsIDAuMGYsICAxLjBmLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLTAuNWYsIC0wLjVmLCAwLjBmLCAwLjBmLCAgMC4wZiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLjVmLCAtMC41ZiwgMC4wZiwgMS4wZiwgIDAuMGYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC41ZiwgIDAuNWYsIDAuMGYsIDEuMGYsICAxLjBmIH07Ci0gICAgR0x1
c2hvcnQgaW5kaWNlc1tdID0geyAwLCAxLCAyLCAwLCAyLCAzLCAvLyBUaGUgdHdvIHRyaWFuZ2xl
cyB0aGF0IG1ha2UgdXAgdGhlIGxheWVyIHF1YWQuCisgICAgZmxvYXQgdmVydGljZXNbXSA9IHsg
LTAuNWYsICAwLjVmLCAwLjBmLCAwLjBmLCAgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAtMC41ZiwgLTAuNWYsIDAuMGYsIDAuMGYsICAwLjBmLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIDAuNWYsIC0wLjVmLCAwLjBmLCAxLjBmLCAgMC4wZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjVmLCAgMC41ZiwgMC4wZiwgMS4wZiwgIDEuMGYgfTsKKyAgICB1aW50MTZfdCBpbmRp
Y2VzW10gPSB7IDAsIDEsIDIsIDAsIDIsIDMsIC8vIFRoZSB0d28gdHJpYW5nbGVzIHRoYXQgbWFr
ZSB1cCB0aGUgbGF5ZXIgcXVhZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIs
IDN9OyAvLyBBIGxpbmUgcGF0aCBmb3IgZHJhd2luZyB0aGUgbGF5ZXIgYm9yZGVyLgogCi0gICAg
R0x1aW50IHZib0lkc1syXTsKLSAgICBHTEMoZ2xHZW5CdWZmZXJzKDIsIHZib0lkcykpOwotICAg
IG1fcXVhZFZlcnRpY2VzVmJvID0gdmJvSWRzWzBdOwotICAgIG1fcXVhZEVsZW1lbnRzVmJvID0g
dmJvSWRzWzFdOwotICAgIEdMQyhnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3F1YWRW
ZXJ0aWNlc1ZibykpOwotICAgIEdMQyhnbEJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXpl
b2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR0xfU1RBVElDX0RSQVcpKTsKLSAgICBHTEMoZ2xCaW5k
QnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX3F1YWRFbGVtZW50c1ZibykpOwotICAg
IEdMQyhnbEJ1ZmZlckRhdGEoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHNpemVvZihpbmRpY2Vz
KSwgaW5kaWNlcywgR0xfU1RBVElDX0RSQVcpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX3F1YWRW
ZXJ0aWNlc1ZibyA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCkpOworICAgIEdMQyhtX2NvbnRl
eHQsIG1fcXVhZEVsZW1lbnRzVmJvID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKSk7CisgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzVmJvKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVv
Zih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpKTsK
KyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX3F1YWRFbGVtZW50c1ZibykpOworICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVO
VF9BUlJBWV9CVUZGRVIsIHNpemVvZihpbmRpY2VzKSwgaW5kaWNlcywgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUQVRJQ19EUkFXKSk7CiAKICAgICAvLyBHZXQgdGhlIG1heCB0ZXh0dXJlIHNpemUgc3Vw
cG9ydGVkIGJ5IHRoZSBzeXN0ZW0uCi0gICAgR0xDKGdsR2V0SW50ZWdlcnYoR0xfTUFYX1RFWFRV
UkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9t
YXhUZXh0dXJlU2l6ZSkpOwogCiAgICAgLy8gU2hhZGVycyBmb3IgZHJhd2luZyB0aGUgZGVidWcg
Ym9yZGVycyBhcm91bmQgdGhlIGxheWVycy4KICAgICBjaGFyIGJvcmRlclZlcnRleFNoYWRlclN0
cmluZ1tdID0KQEAgLTExMiwxNCArMTEyLDE0IEBAIExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
czo6U2hhcmVkVmFsdWUKICAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci54eXog
KiBjb2xvci53LCBjb2xvci53KTtcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLSAgICBtX2JvcmRlclNoYWRlclBy
b2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKGJvcmRlclZlcnRleFNoYWRlclN0cmluZywgYm9y
ZGVyRnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIG1fYm9yZGVyU2hhZGVyUHJvZ3JhbSA9IGNy
ZWF0ZVNoYWRlclByb2dyYW0obV9jb250ZXh0LCBib3JkZXJWZXJ0ZXhTaGFkZXJTdHJpbmcsIGJv
cmRlckZyYWdtZW50U2hhZGVyU3RyaW5nKTsKICAgICBpZiAoIW1fYm9yZGVyU2hhZGVyUHJvZ3Jh
bSkgewogICAgICAgICBMT0dfRVJST1IoIkNvbnRlbnRMYXllckNocm9taXVtOiBGYWlsZWQgdG8g
Y3JlYXRlIHNoYWRlciBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X2JvcmRlclNoYWRlck1hdHJpeExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9ib3Jk
ZXJTaGFkZXJQcm9ncmFtLCAibWF0cml4Iik7Ci0gICAgbV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0
aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9ib3JkZXJTaGFkZXJQcm9ncmFtLCAiY29sb3Ii
KTsKKyAgICBtX2JvcmRlclNoYWRlck1hdHJpeExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlm
b3JtTG9jYXRpb24obV9ib3JkZXJTaGFkZXJQcm9ncmFtLCAibWF0cml4Iik7CisgICAgbV9ib3Jk
ZXJTaGFkZXJDb2xvckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9i
b3JkZXJTaGFkZXJQcm9ncmFtLCAiY29sb3IiKTsKICAgICBBU1NFUlQobV9ib3JkZXJTaGFkZXJN
YXRyaXhMb2NhdGlvbiAhPSAtMSk7CiAgICAgQVNTRVJUKG1fYm9yZGVyU2hhZGVyQ29sb3JMb2Nh
dGlvbiAhPSAtMSk7CiAKQEAgLTEyOCwxMSArMTI4LDEwIEBAIExheWVyQ2hyb21pdW06OlNoYXJl
ZFZhbHVlczo6U2hhcmVkVmFsdWUKIAogTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hh
cmVkVmFsdWVzKCkKIHsKLSAgICBHTHVpbnQgdmJvSWRzWzJdID0geyBtX3F1YWRWZXJ0aWNlc1Zi
bywgbV9xdWFkRWxlbWVudHNWYm8gfTsKLSAgICBHTEMoZ2xEZWxldGVCdWZmZXJzKDIsIHZib0lk
cykpOwotCisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFk
VmVydGljZXNWYm8pKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZl
cihtX3F1YWRFbGVtZW50c1ZibykpOwogICAgIGlmIChtX2JvcmRlclNoYWRlclByb2dyYW0pCi0g
ICAgICAgIEdMQyhnbERlbGV0ZVByb2dyYW0obV9ib3JkZXJTaGFkZXJQcm9ncmFtKSk7CisgICAg
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2JvcmRlclNoYWRl
clByb2dyYW0pKTsKIH0KIAogCkBAIC0xODEsNDUgKzE4MCw0NSBAQCB2b2lkIExheWVyQ2hyb21p
dW06OnNldExheWVyUmVuZGVyZXIoTGF5CiAgICAgbV9sYXllclJlbmRlcmVyID0gcmVuZGVyZXI7
CiB9CiAKLXVuc2lnbmVkIExheWVyQ2hyb21pdW06OmNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSkKK3Vuc2lnbmVkIExheWVyQ2hyb21pdW06OmNyZWF0ZVNoYWRlclByb2dyYW0oR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCiB7Ci0gICAgR0x1aW50IHZlcnRleFNoYWRlciA9
IGxvYWRTaGFkZXIoR0xfVkVSVEVYX1NIQURFUiwgdmVydGV4U2hhZGVyU291cmNlKTsKKyAgICB1
bnNpZ25lZCB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfU0hBREVSLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwogICAgIGlmICghdmVydGV4
U2hhZGVyKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB2ZXJ0ZXggc2hh
ZGVyIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEdMdWludCBmcmFnbWVudFNo
YWRlciA9IGxvYWRTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNoYWRlclNvdXJj
ZSk7CisgICAgdW5zaWduZWQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKGNvbnRleHQsIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsK
ICAgICBpZiAoIWZyYWdtZW50U2hhZGVyKSB7Ci0gICAgICAgIEdMQyhnbERlbGV0ZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRlbGV0ZVNoYWRl
cih2ZXJ0ZXhTaGFkZXIpKTsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGZy
YWdtZW50IHNoYWRlciIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBHTHVpbnQg
cHJvZ3JhbU9iamVjdCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgIHVuc2lnbmVkIHByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CiAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSIp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBHTEMoZ2xBdHRhY2hTaGFkZXIocHJv
Z3JhbU9iamVjdCwgdmVydGV4U2hhZGVyKSk7Ci0gICAgR0xDKGdsQXR0YWNoU2hhZGVyKHByb2dy
YW1PYmplY3QsIGZyYWdtZW50U2hhZGVyKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmF0
dGFjaFNoYWRlcihwcm9ncmFtT2JqZWN0LCB2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1PYmplY3QsIGZyYWdtZW50U2hhZGVyKSk7
CiAKICAgICAvLyBCaW5kIHRoZSBjb21tb24gYXR0cmliIGxvY2F0aW9ucy4KLSAgICBHTEMoZ2xC
aW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbU9iamVjdCwgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9u
LCAiYV9wb3NpdGlvbiIpKTsKLSAgICBHTEMoZ2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbU9i
amVjdCwgc190ZXhDb29yZEF0dHJpYkxvY2F0aW9uLCAiYV90ZXhDb29yZCIpKTsKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1PYmplY3QsIHNfcG9z
aXRpb25BdHRyaWJMb2NhdGlvbiwgImFfcG9zaXRpb24iKSk7CisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtT2JqZWN0LCBzX3RleENvb3JkQXR0cmli
TG9jYXRpb24sICJhX3RleENvb3JkIikpOwogCi0gICAgR0xDKGdsTGlua1Byb2dyYW0ocHJvZ3Jh
bU9iamVjdCkpOwotICAgIEdMaW50IGxpbmtlZDsKLSAgICBHTEMoZ2xHZXRQcm9ncmFtaXYocHJv
Z3JhbU9iamVjdCwgR0xfTElOS19TVEFUVVMsICZsaW5rZWQpKTsKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbU9iamVjdCkpOworICAgIGludCBsaW5rZWQ7Cisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmdldFByb2dyYW1pdihwcm9ncmFtT2JqZWN0LCBHcmFw
aGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMsICZsaW5rZWQpKTsKICAgICBpZiAoIWxpbmtlZCkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBsaW5rIHNoYWRlciBwcm9ncmFtIik7Ci0g
ICAgICAgIEdMQyhnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbU9iamVjdCkpOworICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtT2JqZWN0KSk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIEdMQyhnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIp
KTsKLSAgICBHTEMoZ2xEZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcikpOworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKTsKICAgICByZXR1cm4g
cHJvZ3JhbU9iamVjdDsKIH0KIApAQCAtMzkzLDExICszOTIsMTcgQEAgdm9pZCBMYXllckNocm9t
aXVtOjp0b0dMTWF0cml4KGZsb2F0KiBmbAogICAgIGZsYXR0ZW5lZFsxNV0gPSBtLm00NCgpOwog
fQogCi12b2lkIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBkcmF3TWF0cml4LAorR3JhcGhpY3NDb250ZXh0M0QqIExheWVyQ2hyb21pdW06OmxheWVyUmVu
ZGVyZXJDb250ZXh0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKKyAg
ICByZXR1cm4gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJv
bWl1bTo6ZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBkcmF3TWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxwaGFM
b2NhdGlvbikKIHsKLSAgICBzdGF0aWMgR0xmbG9hdCBnbE1hdHJpeFsxNl07CisgICAgc3RhdGlj
IGZsb2F0IGdsTWF0cml4WzE2XTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1h
dHJpeCA9IGRyYXdNYXRyaXg7CiAKQEAgLTQwOSwxNyArNDE0LDE3IEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb24KIAogICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBd
LCByZW5kZXJNYXRyaXgpOwogCi0gICAgR0xDKGdsVW5pZm9ybU1hdHJpeDRmdihtYXRyaXhMb2Nh
dGlvbiwgMSwgZmFsc2UsICZnbE1hdHJpeFswXSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtTWF0cml4NGZ2KG1hdHJpeExvY2F0aW9uLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAx
KSk7CiAKICAgICBpZiAoYWxwaGFMb2NhdGlvbiAhPSAtMSkKLSAgICAgICAgR0xDKGdsVW5pZm9y
bTFmKGFscGhhTG9jYXRpb24sIG9wYWNpdHkpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnVuaWZvcm0xZihhbHBoYUxvY2F0aW9uLCBvcGFjaXR5KSk7CiAKLSAgICBHTEMoZ2xEcmF3
RWxlbWVudHMoR0xfVFJJQU5HTEVTLCA2LCBHTF9VTlNJR05FRF9TSE9SVCwgMCkpOworICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFO
R0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7CiB9CiAKIHZv
aWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd0RlYnVnQm9yZGVyKCkKIHsKLSAgICBzdGF0aWMgR0xmbG9h
dCBnbE1hdHJpeFsxNl07CisgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKICAgICBpZiAo
IWJvcmRlckNvbG9yKCkuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MzEsMTQgKzQz
NiwxNSBAQCB2b2lkIExheWVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlcigpCiAgICAgcmVuZGVy
TWF0cml4LnNjYWxlM2QoYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIDEpOwog
ICAgIHJlbmRlck1hdHJpeC5tdWx0aXBseShsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRy
aXgoKSk7CiAgICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIHJlbmRlck1hdHJpeCk7Ci0gICAg
R0xDKGdsVW5pZm9ybU1hdHJpeDRmdihzdi0+Ym9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24oKSwg
MSwgZmFsc2UsICZnbE1hdHJpeFswXSkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDRmdihzdi0+Ym9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24oKSwgZmFsc2UsICZn
bE1hdHJpeFswXSwgMSkpOwogCi0gICAgR0xDKGdsVW5pZm9ybTRmKHN2LT5ib3JkZXJTaGFkZXJD
b2xvckxvY2F0aW9uKCksIGJvcmRlckNvbG9yKCkucmVkKCkgLyAyNTUuMCwgYm9yZGVyQ29sb3Io
KS5ncmVlbigpIC8gMjU1LjAsIGJvcmRlckNvbG9yKCkuYmx1ZSgpIC8gMjU1LjAsIDEpKTsKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHN2LT5ib3JkZXJTaGFkZXJDb2xvckxv
Y2F0aW9uKCksIGJvcmRlckNvbG9yKCkucmVkKCkgLyAyNTUuMCwgYm9yZGVyQ29sb3IoKS5ncmVl
bigpIC8gMjU1LjAsIGJvcmRlckNvbG9yKCkuYmx1ZSgpIC8gMjU1LjAsIDEpKTsKIAotICAgIEdM
QyhnbExpbmVXaWR0aChib3JkZXJXaWR0aCgpKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmxpbmVXaWR0aChib3JkZXJXaWR0aCgpKSk7CiAKICAgICAvLyBUaGUgaW5kaWNlcyBmb3IgdGhl
IGxpbmUgYXJlIHN0b3JlZCBpbiB0aGUgc2FtZSBhcnJheSBhcyB0aGUgdHJpYW5nbGUgaW5kaWNl
cy4KLSAgICBHTEMoZ2xEcmF3RWxlbWVudHMoR0xfTElORV9MT09QLCA0LCBHTF9VTlNJR05FRF9T
SE9SVCwgKHZvaWQqKSg2ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpKTsKKyAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1As
IDQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgNiAqIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCkpKTsKIH0KIAogY29uc3QgRmxvYXRSZWN0IExheWVyQ2hyb21pdW06OmdldERyYXdS
ZWN0KCkgY29uc3QKQEAgLTQ2NSwyNCArNDcxLDI2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJh
d0FzTWFzaygpCiAgICAgLy8gV2UgcmV1c2UgdGhlIGJvcmRlciBzaGFkZXIgaGVyZSBhcyBhbGwg
d2UgbmVlZCBhIHNpbmdsZSBjb2xvcmVkIHNoYWRlciBwYXNzLgogICAgIC8vIFRoZSBjb2xvciBz
cGVjaWZpZWQgaGVyZSBpcyBvbmx5IGZvciBkZWJ1ZyBwdXByb3NlcyBhcyB0eXBpY2FsbHkgd2hl
biB3ZSBjYWxsIHRoaXMKICAgICAvLyBtZXRob2QsIHdyaXRlcyB0byB0aGUgY29sb3IgY2hhbm5l
bHMgYXJlIGRpc2FibGVkLgotICAgIEdMQyhnbFVuaWZvcm00Zihzdi0+Ym9yZGVyU2hhZGVyQ29s
b3JMb2NhdGlvbigpLCAwLCAxICwgMCwgMC43KSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtNGYoc3YtPmJvcmRlclNoYWRlckNvbG9yTG9jYXRpb24oKSwgMCwgMSAsIDAsIDAu
NykpOwogCi0gICAgZHJhd1RleHR1cmVkUXVhZChsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25N
YXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAotICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3Vu
ZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKLSAgICAgICAgc3YtPmJvcmRlclNoYWRlck1h
dHJpeExvY2F0aW9uKCksIC0xKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVy
UmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCisgICAgICAg
ICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09w
YWNpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN2LT5ib3JkZXJTaGFkZXJNYXRyaXhMb2Nh
dGlvbigpLCAtMSk7CiB9CiAKIC8vIHN0YXRpYwogdm9pZCBMYXllckNocm9taXVtOjpwcmVwYXJl
Rm9yRHJhdyhjb25zdCBTaGFyZWRWYWx1ZXMqIHN2KQogewotICAgIEdMQyhnbEJpbmRCdWZmZXIo
R0xfQVJSQVlfQlVGRkVSLCBzdi0+cXVhZFZlcnRpY2VzVmJvKCkpKTsKLSAgICBHTEMoZ2xCaW5k
QnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBzdi0+cXVhZEVsZW1lbnRzVmJvKCkpKTsK
LSAgICBHTHVpbnQgb2Zmc2V0ID0gMDsKLSAgICBHTEMoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNf
cG9zaXRpb25BdHRyaWJMb2NhdGlvbiwgMywgR0xfRkxPQVQsIEdMX0ZBTFNFLCA1ICogc2l6ZW9m
KEdMZmxvYXQpLCAoR0x2b2lkKilvZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMyAqIHNpemVvZihH
TGZsb2F0KTsKLSAgICBHTEMoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNfdGV4Q29vcmRBdHRyaWJM
b2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCA1ICogc2l6ZW9mKEdMZmxvYXQpLCAoR0x2
b2lkKilvZmZzZXQpKTsKLSAgICBHTEMoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzX3Bvc2l0
aW9uQXR0cmliTG9jYXRpb24pKTsKLSAgICBHTEMoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShz
X3RleENvb3JkQXR0cmliTG9jYXRpb24pKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IHN2LT5jb250ZXh0KCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc3YtPnF1YWRWZXJ0aWNlc1ZibygpKSk7
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBzdi0+cXVhZEVsZW1lbnRzVmJvKCkpKTsKKyAgICB1bnNp
Z25lZCBvZmZzZXQgPSAwOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKHNfcG9zaXRpb25BdHRyaWJMb2NhdGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FULCBmYWxzZSwgNSAqIHNpemVvZihmbG9hdCksIG9mZnNldCkpOworICAgIG9mZnNldCArPSAz
ICogc2l6ZW9mKGZsb2F0KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dmVydGV4QXR0cmli
UG9pbnRlcihzX3RleENvb3JkQXR0cmliTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVCwgZmFsc2UsIDUgKiBzaXplb2YoZmxvYXQpLCBvZmZzZXQpKTsKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc19wb3NpdGlvbkF0dHJpYkxvY2F0
aW9uKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHNfdGV4Q29vcmRBdHRyaWJMb2NhdGlvbikpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkocmV2aXNpb24g
Njc4NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDkgKzE3MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8g
Y29udGV4dCkuCiAgICAgY2xhc3MgU2hhcmVkVmFsdWVzIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IFNoYXJlZFZhbHVlcygpOworICAgICAgICBleHBsaWNpdCBTaGFyZWRWYWx1ZXMoR3JhcGhpY3ND
b250ZXh0M0QqKTsKICAgICAgICAgflNoYXJlZFZhbHVlcygpOwogCisgICAgICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgICAg
IHVuc2lnbmVkIHF1YWRWZXJ0aWNlc1ZibygpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZFZlcnRpY2Vz
VmJvOyB9CiAgICAgICAgIHVuc2lnbmVkIHF1YWRFbGVtZW50c1ZibygpIGNvbnN0IHsgcmV0dXJu
IG1fcXVhZEVsZW1lbnRzVmJvOyB9CiAgICAgICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KQEAgLTE4Myw2ICsxODQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxpemVk
OyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0
OwogICAgICAgICB1bnNpZ25lZCBtX3F1YWRWZXJ0aWNlc1ZibzsKICAgICAgICAgdW5zaWduZWQg
bV9xdWFkRWxlbWVudHNWYm87CiAgICAgICAgIGludCBtX21heFRleHR1cmVTaXplOwpAQCAtMTk5
LDE0ICsyMDEsMTUgQEAgcHJvdGVjdGVkOgogICAgIExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcik7CiAKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXI7IH0KKyAgICBHcmFwaGljc0Nv
bnRleHQzRCogbGF5ZXJSZW5kZXJlckNvbnRleHQoKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lk
IGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25N
YXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJpeCwKKyAgICBzdGF0
aWMgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBsYXllck1hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKTsKIAog
ICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpOwogCi0gICAgc3RhdGljIHVuc2lnbmVkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSk7CisgICAgc3RhdGljIHVuc2lnbmVkIGNyZWF0ZVNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250
ZXh0M0QqLCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlKTsKIAogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgRmxvYXRSZWN0
IG1fZGlydHlSZWN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNjc4
NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJM
YXllclJlbmRlcmVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1
bS5oIgotI2luY2x1ZGUgIkdMRVMyQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCkBAIC00Niw4ICs0Niw2IEBA
CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgogI2VuZGlmCiAKLSNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgVHJh
bnNmb3JtYXRpb25NYXRyaXggb3J0aG9NYXRyaXgoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZs
b2F0IGJvdHRvbSwgZmxvYXQgdG9wLCBmbG9hdCBuZWFyWiwgZmxvYXQgZmFyWikKQEAgLTc1LDE5
ICs3MywxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUxheWVyWihjb25zdCBMCiAgICAg
cmV0dXJuIHRyYW5zZm9ybUEubTQzKCkgPCB0cmFuc2Zvcm1CLm00MygpOwogfQogCi1QYXNzT3du
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
UGFzc093blB0cjxHTEVTMkNvbnRleHQ+IGdsZXMyQ29udGV4dCkKK1Bhc3NPd25QdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzT3duUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogewotICAgIGlmICghZ2xlczJDb250ZXh0KQor
ICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0o
Z2xlczJDb250ZXh0KSk7CisgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJS
ZW5kZXJlcihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKGNvbnRleHQpKTsKICAgICBpZiAoIWxh
eWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBn
bGVzMkNvbnRleHQpCitMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1
bShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDogbV9yb290TGF5
ZXJUZXh0dXJlSWQoMCkKICAgICAsIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKDApCiAgICAgLCBt
X3Jvb3RMYXllclRleHR1cmVIZWlnaHQoMCkKQEAgLTk2LDcgKzk0LDcgQEAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hybwogICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2Up
CiAgICAgLCBtX3Njcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAgICAgLCBtX2N1cnJl
bnRTaGFkZXIoMCkKLSAgICAsIG1fZ2xlczJDb250ZXh0KGdsZXMyQ29udGV4dCkKKyAgICAsIG1f
Y29udGV4dChjb250ZXh0KQogewogICAgIG1faGFyZHdhcmVDb21wb3NpdGluZyA9IGluaXRpYWxp
emVTaGFyZWRPYmplY3RzKCk7CiB9CkBAIC0xMDYsMTEgKzEwNCwxNiBAQCBMYXllclJlbmRlcmVy
Q2hyb21pdW06On5MYXllclJlbmRlcmVyQ2hyCiAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsK
IH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxsKGNvbnN0IGNoYXIq
IGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKQorR3JhcGhpY3NDb250ZXh0M0Qq
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29udGV4dCgpCiB7Ci0gICAgR0xlbnVtIGVycm9yID0g
Z2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvciAhPSBHTF9OT19FUlJPUikKLSAgICAgICAgTE9H
X0VSUk9SKCJHTCBjb21tYW5kIGZhaWxlZDogRmlsZTogJXNcblx0TGluZSAlZFxuXHRjb21tYW5k
OiAlcywgZXJyb3IgJXhcbiIsIGZpbGUsIGxpbmUsIGNvbW1hbmQsIGVycm9yKTsKKyAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVi
dWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvbW1hbmQs
IGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKQoreworICAgIHVuc2lnbmVkIGxvbmcgZXJyb3Ig
PSBjb250ZXh0LT5nZXRFcnJvcigpOworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9fRVJST1IpCisgICAgICAgIExPR19FUlJPUigiR0wgY29tbWFuZCBmYWlsZWQ6IEZpbGU6
ICVzXG5cdExpbmUgJWRcblx0Y29tbWFuZDogJXMsIGVycm9yICV4XG4iLCBmaWxlLCBsaW5lLCBj
b21tYW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSk7CiB9CiAKIC8vIENyZWF0ZXMgYSBjYW52
YXMgYW5kIGFuIGFzc29jaWF0ZWQgZ3JhcGhpY3MgY29udGV4dCB0aGF0IHRoZSByb290IGxheWVy
IHdpbGwKQEAgLTE1MSw3ICsxNTQsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0
Um9vdExheWVyCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuc2lnbmVk
IHByb2dyYW1JZCkKIHsKICAgICBpZiAocHJvZ3JhbUlkICE9IG1fY3VycmVudFNoYWRlcikgewot
ICAgICAgICBHTEMoZ2xVc2VQcm9ncmFtKHByb2dyYW1JZCkpOworICAgICAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbUlkKSk7CiAgICAgICAgIG1fY3VycmVu
dFNoYWRlciA9IHByb2dyYW1JZDsKICAgICB9CiB9CkBAIC0xNjgsNyArMTcxLDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYQogCiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAKLSAgICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXll
clRleHR1cmVJZCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CiAK
ICAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSBhcmVhIGhhcyBjaGFuZ2VkIHRoZW4g
YWxsb2NhdGUgYSBuZXcgdGV4dHVyZQogICAgIC8vIHRvIHN0b3JlIHRoZSBjb250ZW50cyBvZiB0
aGUgcm9vdCBsYXllciBhbmQgYWRqdXN0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeApAQCAtMTgwLDIw
ICsxODMsMjAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYQogICAg
ICAgICBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQgPSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKIAog
ICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBvcnRob01hdHJpeCgwLCB2aXNpYmxlUmVjdFdp
ZHRoLCB2aXNpYmxlUmVjdEhlaWdodCwgMCwgLTEwMDAsIDEwMDApOwotICAgICAgICBHTEMoZ2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdp
ZHRoLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIDApKTsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
bV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAw
KSk7CiAgICAgfQogCiAgICAgLy8gVGhlIEdMIHZpZXdwb3J0IGNvdmVycyB0aGUgZW50aXJlIHZp
c2libGUgYXJlYSwgaW5jbHVkaW5nIHRoZSBzY3JvbGxiYXJzLgotICAgIEdMQyhnbFZpZXdwb3J0
KDAsIDAsIHZpc2libGVSZWN0V2lkdGgsIHZpc2libGVSZWN0SGVpZ2h0KSk7CisgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNp
YmxlUmVjdEhlaWdodCkpOwogCiAgICAgLy8gQmluZCB0aGUgY29tbW9uIHZlcnRleCBhdHRyaWJ1
dGVzIHVzZWQgZm9yIGRyYXdpbmcgYWxsIHRoZSBsYXllcnMuCiAgICAgTGF5ZXJDaHJvbWl1bTo6
cHJlcGFyZUZvckRyYXcobGF5ZXJTaGFyZWRWYWx1ZXMoKSk7CiAKICAgICAvLyBGSVhNRTogVGhl
c2UgY2FsbHMgY2FuIGJlIG1hZGUgb25jZSwgd2hlbiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGlz
IGluaXRpYWxpemVkLgotICAgIEdMQyhnbERpc2FibGUoR0xfREVQVEhfVEVTVCkpOwotICAgIEdM
QyhnbERpc2FibGUoR0xfQ1VMTF9GQUNFKSk7Ci0gICAgR0xDKGdsRGVwdGhGdW5jKEdMX0xFUVVB
TCkpOwotICAgIEdMQyhnbENsZWFyU3RlbmNpbCgwKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKSk7CisgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZB
Q0UpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlcHRoRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6TEVRVUFMKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVhclN0
ZW5jaWwoMCkpOwogCiAgICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gSW50UG9pbnQoLTEsIC0x
KSkKICAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwpAQCAtMjEyLDEy
ICsyMTUsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYQogICAg
ICAgICBzY3JvbGxlZExheWVyTWF0cml4LnNjYWxlM2QoMSwgLTEsIDEpOwogCiAgICAgICAgIHVz
ZVNoYWRlcihtX3Njcm9sbFNoYWRlclByb2dyYW0pOwotICAgICAgICBHTEMoZ2xVbmlmb3JtMWko
bV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb24sIDApKTsKLSAgICAgICAgTGF5ZXJDaHJvbWl1
bTo6ZHJhd1RleHR1cmVkUXVhZChtX3Byb2plY3Rpb25NYXRyaXgsIHNjcm9sbGVkTGF5ZXJNYXRy
aXgsCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fc2Nyb2xs
U2hhZGVyU2FtcGxlckxvY2F0aW9uLCAwKSk7CisgICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdU
ZXh0dXJlZFF1YWQobV9jb250ZXh0LmdldCgpLCBtX3Byb2plY3Rpb25NYXRyaXgsIHNjcm9sbGVk
TGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlz
aWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zY3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiwg
LTEpOwogCi0gICAgICAgIEdMQyhnbENvcHlUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IDAsIDAsIDAsIDAsIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKSk7
CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIGNvbnRlbnRSZWN0Lndp
ZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24g
PSBzY3JvbGxQb3NpdGlvbjsKICAgICB9IGVsc2UgaWYgKGFicyhzY3JvbGxEZWx0YS55KCkpID4g
Y29udGVudFJlY3QuaGVpZ2h0KCkgfHwgYWJzKHNjcm9sbERlbHRhLngoKSkgPiBjb250ZW50UmVj
dC53aWR0aCgpKSB7CiAgICAgICAgIC8vIFNjcm9sbGluZyBsYXJnZXIgdGhhbiB0aGUgY29udGVu
dFJlY3Qgc2l6ZSBkb2VzIG5vdCBwcmVzZXJ2ZSBhbnkgb2YgdGhlIHBpeGVscywgc28gdGhlcmUg
aXMKQEAgLTI0NCw3ICsyNDcsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
Um9vdExhCiAgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xD
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKyAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOwogCiAgICAgLy8gVXBkYXRlIHRo
ZSByb290IGxheWVyIHRleHR1cmUuCiAgICAgQVNTRVJUKCh1cGRhdGVSZWN0LnJpZ2h0KCkgIDw9
IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQpAQCAtMjY1LDQwICsyNjgsNDAgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVu
dCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBv
ZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgR0xDKGds
VGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVj
dC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB1cGRhdGVS
ZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5o
ZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBwaXhlbHMpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KQogewogICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogCi0gICAgZ2xD
bGVhckNvbG9yKDAsIDAsIDEsIDEpOwotICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCB8
IEdMX0RFUFRIX0JVRkZFUl9CSVQpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAx
LCAxKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZG
RVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpOwogCi0gICAgR0xD
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKyAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOwogCiAgICAgLy8gUmVuZGVyIHRo
ZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRoZSBlbnRpcmUgdmlzaWJs
ZSBhcmVhIG9mIHRoZSB3aW5kb3cuCiAgICAgLy8gV2UgcmV1c2UgdGhlIHNoYWRlciBwcm9ncmFt
IHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCiAgICAgY29uc3QgQ29udGVudExheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0gY29udGVudExheWVyU2hh
cmVkVmFsdWVzKCk7CiAgICAgdXNlU2hhZGVyKGNvbnRlbnRMYXllclZhbHVlcy0+Y29udGVudFNo
YWRlclByb2dyYW0oKSk7Ci0gICAgR0xDKGdsVW5pZm9ybTFpKGNvbnRlbnRMYXllclZhbHVlcy0+
c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRl
eHQtPnVuaWZvcm0xaShjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlclNhbXBsZXJMb2NhdGlvbigp
LCAwKSk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJNYXRyaXg7CiAgICAgbGF5ZXJN
YXRyaXgudHJhbnNsYXRlM2QodmlzaWJsZVJlY3Qud2lkdGgoKSAqIDAuNWYsIHZpc2libGVSZWN0
LmhlaWdodCgpICogMC41ZiwgMCk7Ci0gICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVh
ZChtX3Byb2plY3Rpb25NYXRyaXgsIGxheWVyTWF0cml4LAorICAgIExheWVyQ2hyb21pdW06OmRy
YXdUZXh0dXJlZFF1YWQobV9jb250ZXh0LmdldCgpLCBtX3Byb2plY3Rpb25NYXRyaXgsIGxheWVy
TWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3Qu
d2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlck1hdHJpeExvY2F0aW9uKCks
IGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKIAogICAgIC8vIElm
IGN1bGxpbmcgaXMgZW5hYmxlZCB0aGVuIHdlIHdpbGwgY3VsbCB0aGUgYmFja2ZhY2UuCi0gICAg
R0xDKGdsQ3VsbEZhY2UoR0xfQkFDSykpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
Y3VsbEZhY2UoR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0spKTsKICAgICAvLyBUaGUgb3J0aG9ncmFw
aGljIHByb2plY3Rpb24gaXMgc2V0dXAgc3VjaCB0aGF0IFkgc3RhcnRzIGF0IHplcm8gYW5kCiAg
ICAgLy8gaW5jcmVhc2VzIGdvaW5nIGRvd24gdGhlIHBhZ2Ugc28gd2UgbmVlZCB0byBhZGp1c3Qg
dGhlIHdpbmRpbmcgb3JkZXIgb2YKICAgICAvLyBmcm9udCBmYWNpbmcgdHJpYW5nbGVzLgotICAg
IEdMQyhnbEZyb250RmFjZShHTF9DVykpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
ZnJvbnRGYWNlKEdyYXBoaWNzQ29udGV4dDNEOjpDVykpOwogCiAgICAgLy8gVGhlIHNoYWRlciB1
c2VkIHRvIHJlbmRlciBsYXllcnMgcmV0dXJucyBwcmUtbXVsdGlwbGllZCBhbHBoYSBjb2xvcnMK
ICAgICAvLyBzbyB3ZSBuZWVkIHRvIHNlbmQgdGhlIGJsZW5kaW5nIG1vZGUgYXBwcm9wcmlhdGVs
eS4KLSAgICBHTEMoZ2xFbmFibGUoR0xfQkxFTkQpKTsKLSAgICBHTEMoZ2xCbGVuZEZ1bmMoR0xf
T05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CisgICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAogICAgIC8vIFNldCB0aGUgcm9vdFZp
c2libGVSZWN0IC0tLSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVycyBjYWxscwogICAgIG1f
cm9vdFZpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7CkBAIC0zMTUsNyArMzE4LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoYwogICAgICAgICB1cGRhdGVMYXllcnNS
ZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpLCBtYXRyaXgsIG9wYWNpdHkpOwogCiAgICAgLy8g
RW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5ZXJzIG92
ZXIgdGhlIHNjcm9sbGJhcnMuCi0gICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkpOwor
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpKTsKICAgICBGbG9hdFJlY3Qgc2Npc3NvclJlY3QoY29udGVudFJlY3QpOwog
CiAgICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9m
ZnNldC4KQEAgLTMyMywyNiArMzI2LDI5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzKGMKICAgICBzY2lzc29yVG9SZWN0KHNjaXNzb3JSZWN0KTsKIAogICAgIC8vIENs
ZWFyIHRoZSBzdGVuY2lsIGJ1ZmZlciB0byAwLgotICAgIEdMQyhnbENsZWFyKEdMX1NURU5DSUxf
QlVGRkVSX0JJVCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpOwogICAgIC8vIERpc2FibGUgd3JpdGVz
IHRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4KLSAgICBHTEMoZ2xTdGVuY2lsTWFzaygwKSk7CisgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsTWFzaygwKSk7CiAKICAgICAvLyBUcmF2
ZXJzZSB0aGUgbGF5ZXIgdHJlZSBvbmUgbW9yZSB0aW1lIHRvIGRyYXcgdGhlIGxheWVycy4KICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKICAgICAgICAg
ZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIHNjaXNzb3JSZWN0KTsKIAot
ICAgIEdMQyhnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKSk7CisgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaCgpCiB7Ci0gICAgZ2xGaW5pc2go
KTsKKyAgICBtX2NvbnRleHQtPmZpbmlzaCgpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cHJlc2VudCgpCiB7CiAgICAgLy8gV2UncmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVy
cyEKLSAgICBtX2dsZXMyQ29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKKworICAgIC8vIE5vdGUgdGhh
dCBjdXJyZW50bHkgdGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHN3YXBCdWZmZXJzOyB3ZSBz
aG91bGQKKyAgICAvLyBjb25zaWRlciBleHBvc2luZyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBv
biBHcmFwaGljc0NvbnRleHQzRC4KKyAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CiAg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIApAQCAtMzU2LDIyICszNjIsMjIgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZgogCiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAKLSAgICBHTEMoZ2xSZWFkUGl4ZWxzKHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5yZWFkUGl4ZWxzKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscykp
OwogfQogCiAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVwbGFj
ZWQgYnkgYSBwcm9wZXIgdGV4dHVyZSBtYW5hZ2VyLgogdW5zaWduZWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGVMYXllclRleHR1cmUoKQogewotICAgIEdMdWludCB0ZXh0dXJlSWQgPSAw
OwotICAgIEdMQyhnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlSWQpKTsKLSAgICBHTEMoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJl
SWQgPSAwOworICAgIEdMQyhtX2NvbnRleHQsIHRleHR1cmVJZCA9IG1fY29udGV4dC0+Y3JlYXRl
VGV4dHVyZSgpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKICAgICAvLyBEbyBiYXNp
YyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KLSAgICBHTEMoZ2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xD
KGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdM
X0xJTkVBUikpOwotICAgIC8vIE5QT1QgdGV4dHVyZXMgaW4gR0wgRVMgb25seSB3b3JrIHdoZW4g
dGhlIHdyYXAgbW9kZSBpcyBzZXQgdG8gR0xfQ0xBTVBfVE9fRURHRS4KLSAgICBHTEMoZ2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19F
REdFKSk7Ci0gICAgR0xDKGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikp
OworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgIC8vIE5QT1QgdGV4dHVyZXMgaW4g
R0wgRVMgb25seSB3b3JrIHdoZW4gdGhlIHdyYXAgbW9kZSBpcyBzZXQgdG8gR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UuCisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7Cisg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CiAgICAgcmV0dXJuIHRleHR1cmVJZDsKIH0K
IApAQCAtNDcwLDE4ICs0NzYsMTggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllckludAogewogICAgIC8vIEVuYWJsZSB3cml0ZXMgdG8gdGhlIHN0ZW5jaWwgYnVmZmVyIGFu
ZCBpbmNyZW1lbnQgdGhlIHN0ZW5jaWwgdmFsdWVzCiAgICAgLy8gYnkgb25lIGZvciBldmVyeSBw
aXhlbCB1bmRlciB0aGUgY3VycmVudCBsYXllci4KLSAgICBHTEMoZ2xTdGVuY2lsTWFzaygweGZm
KSk7Ci0gICAgR0xDKGdsU3RlbmNpbEZ1bmMoR0xfQUxXQVlTLCAxLCAweGZmKSk7Ci0gICAgR0xl
bnVtIHN0ZW5jaWxPcCA9IChkZWNyZW1lbnQgPyBHTF9ERUNSIDogR0xfSU5DUik7Ci0gICAgR0xD
KGdsU3RlbmNpbE9wKHN0ZW5jaWxPcCwgc3RlbmNpbE9wLCBzdGVuY2lsT3ApKTsKKyAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKDB4ZmYpKTsKKyAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpBTFdBWVMsIDEs
IDB4ZmYpKTsKKyAgICB1bnNpZ25lZCBzdGVuY2lsT3AgPSAoZGVjcmVtZW50ID8gR3JhcGhpY3ND
b250ZXh0M0Q6OkRFQ1IgOiBHcmFwaGljc0NvbnRleHQzRDo6SU5DUik7CisgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsT3Aoc3RlbmNpbE9wLCBzdGVuY2lsT3AsIHN0ZW5jaWxP
cCkpOwogCi0gICAgR0xDKGdsQ29sb3JNYXNrKEdMX0ZBTFNFLCBHTF9GQUxTRSwgR0xfRkFMU0Us
IEdMX0ZBTFNFKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jb2xvck1hc2soZmFs
c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIGxheWVyLT5kcmF3QXNNYXNrKCk7CiAK
ICAgICAvLyBEaXNhYmxlIHdyaXRlcyB0byB0aGUgc3RlbmNpbCBidWZmZXIuCi0gICAgR0xDKGds
U3RlbmNpbE1hc2soMCkpOwotICAgIEdMQyhnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBH
TF9UUlVFLCBHTF9UUlVFKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2ls
TWFzaygwKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwg
dHJ1ZSwgdHJ1ZSwgdHJ1ZSkpOwogfQogCiAvLyBSZWN1cnNpdmVseSB3YWxrIHRoZSBsYXllciB0
cmVlIGFuZCBkcmF3IHRoZSBsYXllcnMuCkBAIC00OTgsNyArNTA0LDcgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNSZQogICAgIGJvb2wgbXVzdENsZWFyRGVwdGggPSBm
YWxzZTsKICAgICBpZiAobGF5ZXItPnByZXNlcnZlczNEKCkpIHsKICAgICAgICAgaWYgKCFkZXB0
aFRlc3RFbmFibGVkRm9yU3VidHJlZSkgewotICAgICAgICAgICAgR0xDKGdsRW5hYmxlKEdMX0RF
UFRIX1RFU1QpKTsKKyAgICAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKSk7CiAgICAgICAgICAgICBkZXB0aFRlc3RF
bmFibGVkRm9yU3VidHJlZSA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIE5lZWQgdG8gY2xlYXIg
dGhlIGRlcHRoIGJ1ZmZlciB3aGVuIHdlJ3JlIGRvbmUgcmVuZGVyaW5nIHRoaXMgc3VidHJlZS4K
QEAgLTUzNSw3ICs1NDEsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c1JlCiAgICAgICAgICAgICAvLyBpcyByZW5kZXJlZCwgdGhlIHN0ZW5jaWwgdmFsdWVzIHNob3Vs
ZCBiZSBhbGwgYmFjayB0byB6ZXJvLiBBbiA4IGJpdCBzdGVuY2lsIGJ1ZmZlcgogICAgICAgICAg
ICAgLy8gd2lsbCBhbGxvdyB1cyB1cCB0byAyNTUgbmVzdGVkIGNsaXBwaW5nIGxheWVycyB3aGlj
aCBpcyBob3BlZnVsbHkgZW5vdWdoLgogICAgICAgICAgICAgaWYgKCFjdXJyZW50U3RlbmNpbFZh
bHVlKQotICAgICAgICAgICAgICAgIEdMQyhnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAg
ICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9URVNUKSk7CiAKICAgICAgICAgICAgIGRyYXdMYXllckludG9TdGVu
Y2lsQnVmZmVyKGxheWVyLCBmYWxzZSk7CiAKQEAgLTU0Nyw3ICs1NTMsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc1JlCiAgICAgLy8gY3VycmVudFN0ZW5jaWxWYWx1
ZS4KICAgICBpZiAoZGlkU3RlbmNpbERyYXcpIHsKICAgICAgICAgLy8gVGhlIHN1YmxheWVycyB3
aWxsIHJlbmRlciBvbmx5IGlmIHRoZSBzdGVuY2lsIHRlc3QgcGFzc2VzLgotICAgICAgICBHTEMo
Z2xTdGVuY2lsRnVuYyhHTF9FUVVBTCwgY3VycmVudFN0ZW5jaWxWYWx1ZSwgMHhmZikpOworICAg
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4
dDNEOjpFUVVBTCwgY3VycmVudFN0ZW5jaWxWYWx1ZSwgMHhmZikpOwogICAgIH0KIAogICAgIC8v
IElmIHdlJ3JlIHVzaW5nIGRlcHRoIHRlc3RpbmcgdGhlbiB3ZSBuZWVkIHRvIHNvcnQgdGhlIGNo
aWxkcmVuIGluIFogdG8KQEAgLTU3OCw4ICs1ODQsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyc1JlCiAgICAgICAgIGN1cnJlbnRTdGVuY2lsVmFsdWUtLTsKICAgICAg
ICAgaWYgKCFjdXJyZW50U3RlbmNpbFZhbHVlKSB7CiAgICAgICAgICAgICAvLyBEaXNhYmxlIHN0
ZW5jaWwgdGVzdGluZy4KLSAgICAgICAgICAgIEdMQyhnbERpc2FibGUoR0xfU1RFTkNJTF9URVNU
KSk7Ci0gICAgICAgICAgICBHTEMoZ2xTdGVuY2lsRnVuYyhHTF9BTFdBWVMsIDAsIDB4ZmYpKTsK
KyAgICAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9URVNUKSk7CisgICAgICAgICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpBTFdBWVMsIDAsIDB4ZmYpKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNTg4LDggKzU5NCw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzUmUKICAgICB9CiAKICAgICBpZiAobXVzdENsZWFyRGVwdGgp
IHsKLSAgICAgICAgR0xDKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSk7Ci0gICAgICAgIEdMQyhn
bENsZWFyKEdMX0RFUFRIX0JVRkZFUl9CSVQpKTsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKSk7CisgICAgICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0JVRkZFUl9CSVQpKTsKICAgICAgICAgZGVwdGhUZXN0RW5hYmxlZEZvclN1YnRyZWUgPSBmYWxz
ZTsKICAgICB9CiB9CkBAIC02MDMsMTMgKzYwOSwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyKExhCiAgICAgICAgIGlmIChsYXllci0+Y29udGVudHNEaXJ0eSgpKSB7
CiAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGJhY2tpbmcgdGV4dHVyZSBjb250ZW50cyBmb3Ig
YW55IGRpcnR5IHBvcnRpb24gb2YgdGhlIGxheWVyLgogICAgICAgICAgICAgbGF5ZXItPnVwZGF0
ZUNvbnRlbnRzKCk7Ci0gICAgICAgICAgICBtX2dsZXMyQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAobGF5ZXItPmRvdWJsZVNpZGVkKCkpCi0gICAgICAgICAgICBnbERpc2Fi
bGUoR0xfQ1VMTF9GQUNFKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6Q1VMTF9GQUNFKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2xFbmFi
bGUoR0xfQ1VMTF9GQUNFKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpDVUxMX0ZBQ0UpOwogCiAgICAgICAgIGxheWVyLT5kcmF3KCk7CiAgICAgfQpA
QCAtNjI0LDEyICs2MzAsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNjaXNzb3JU
b1JlYwogewogICAgIC8vIENvbXB1dGUgdGhlIGxvd2VyIGxlZnQgY29ybmVyIG9mIHRoZSBzY2lz
c29yIHJlY3QuCiAgICAgZmxvYXQgYm90dG9tID0gc3RkOjptYXgoKGZsb2F0KW1fcm9vdFZpc2li
bGVSZWN0LmhlaWdodCgpIC0gc2Npc3NvclJlY3QuYm90dG9tKCksIDAuZik7Ci0gICAgR0xDKGds
U2Npc3NvcihzY2lzc29yUmVjdC54KCksIGJvdHRvbSwgc2Npc3NvclJlY3Qud2lkdGgoKSwgc2Np
c3NvclJlY3QuaGVpZ2h0KCkpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnNjaXNz
b3Ioc2Npc3NvclJlY3QueCgpLCBib3R0b20sIHNjaXNzb3JSZWN0LndpZHRoKCksIHNjaXNzb3JS
ZWN0LmhlaWdodCgpKSk7CiB9CiAKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQogewotICAgIHJldHVybiBtX2dsZXMyQ29udGV4dC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiB0cnVl
OwogfQogCiAvLyBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHNpemUgaXMgd2l0aGluIHRoZSBtYXhp
bXVtIGFsbG93ZWQgdGV4dHVyZSBzaXplIHJhbmdlLgpAQCAtNjQwLDYgKzY0NywxMiBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hlY2tUZXh0dXJlCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZXNpemVPbnNjcmVlbkNvbnRlbnQoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICBtX2NvbnRl
eHQtPnJlc2hhcGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKwogYm9vbCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKQEAgLTY2NywxNSArNjgwLDE1IEBAIGJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0
ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KTsgXG4iCiAgICAg
ICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG4iOwogCi0gICAgbV9zY3JvbGxTaGFkZXJQcm9ncmFtID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
U2hhZGVyUHJvZ3JhbShzY3JvbGxWZXJ0ZXhTaGFkZXJTdHJpbmcsIHNjcm9sbEZyYWdtZW50U2hh
ZGVyU3RyaW5nKTsKKyAgICBtX3Njcm9sbFNoYWRlclByb2dyYW0gPSBMYXllckNocm9taXVtOjpj
cmVhdGVTaGFkZXJQcm9ncmFtKG1fY29udGV4dC5nZXQoKSwgc2Nyb2xsVmVydGV4U2hhZGVyU3Ry
aW5nLCBzY3JvbGxGcmFnbWVudFNoYWRlclN0cmluZyk7CiAgICAgaWYgKCFtX3Njcm9sbFNoYWRl
clByb2dyYW0pIHsKICAgICAgICAgTE9HX0VSUk9SKCJMYXllclJlbmRlcmVyQ2hyb21pdW06IEZh
aWxlZCB0byBjcmVhdGUgc2Nyb2xsIHNoYWRlciBwcm9ncmFtIik7CiAgICAgICAgIGNsZWFudXBT
aGFyZWRPYmplY3RzKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBHTEMo
bV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3Nj
cm9sbFNoYWRlclByb2dyYW0sICJzX3RleHR1cmUiKSk7Ci0gICAgR0xDKG1fc2Nyb2xsU2hhZGVy
TWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3Njcm9sbFNoYWRlclByb2dy
YW0sICJtYXRyaXgiKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9zY3JvbGxTaGFkZXJTYW1wbGVy
TG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3Njcm9sbFNoYWRlclBy
b2dyYW0sICJzX3RleHR1cmUiKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9zY3JvbGxTaGFkZXJN
YXRyaXhMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2Nyb2xsU2hh
ZGVyUHJvZ3JhbSwgIm1hdHJpeCIpKTsKICAgICBpZiAobV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9j
YXRpb24gPT0gLTEgfHwgbV9zY3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiA9PSAtMSkgewogICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIHNjcm9sbCBzaGFkZXIuIik7CiAg
ICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CkBAIC02OTEsMTkgKzcwNCwxOSBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoCiAgICAgfQogICAgIC8vIFR1cm4g
b2ZmIGZpbHRlcmluZyBmb3IgdGhlIHJvb3QgbGF5ZXIgdG8gYXZvaWQgYmx1cnJpbmcgZnJvbSB0
aGUgcmVwZWF0ZWQKICAgICAvLyB3cml0ZXMgYW5kIHJlYWRzIHRvIHRoZSBmcmFtZWJ1ZmZlciB0
aGF0IGhhcHBlbiB3aGlsZSBzY3JvbGxpbmcuCi0gICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKLSAgICBHTEMoZ2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCkpOwotICAg
IEdMQyhnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVS
LCBHTF9ORUFSRVNUKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsK
KyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVT
VCkpOwogCiAgICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBzaXplIHN1cHBvcnRlZCBieSB0aGUg
c3lzdGVtLgotICAgIEdMQyhnbEdldEludGVnZXJ2KEdMX01BWF9URVhUVVJFX1NJWkUsICZtX21h
eFRleHR1cmVTaXplKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5nZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUp
KTsKIAogICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBzdGVu
Y2lsIGJ1ZmZlci4KLSAgICBHTEMoZ2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0JJVFMsICZtX251
bVN0ZW5jaWxCaXRzKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5nZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CSVRTLCAmbV9udW1TdGVuY2lsQml0cykpOwog
Ci0gICAgbV9sYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBMYXllckNocm9taXVtOjpT
aGFyZWRWYWx1ZXMoKSk7Ci0gICAgbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0
cihuZXcgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcygpKTsKLSAgICBtX2NhbnZh
c0xheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IENhbnZhc0xheWVyQ2hyb21pdW06OlNo
YXJlZFZhbHVlcygpKTsKKyAgICBtX2xheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IExh
eWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX2NvbnRl
bnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOworICAgIG1fY2FudmFzTGF5ZXJTaGFyZWRW
YWx1ZXMgPSBhZG9wdFB0cihuZXcgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1f
Y29udGV4dC5nZXQoKSkpOwogICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6
ZWQoKSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1f
Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgY2xlYW51
cFNoYXJlZE9iamVjdHMoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzIxLDEyICs3MzQs
MTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZQogICAgIG1fY2Fu
dmFzTGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKIAogICAgIGlmIChtX3Njcm9sbFNoYWRlclBy
b2dyYW0pIHsKLSAgICAgICAgR0xDKGdsRGVsZXRlUHJvZ3JhbShtX3Njcm9sbFNoYWRlclByb2dy
YW0pKTsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1f
c2Nyb2xsU2hhZGVyUHJvZ3JhbSkpOwogICAgICAgICBtX3Njcm9sbFNoYWRlclByb2dyYW0gPSAw
OwogICAgIH0KIAogICAgIGlmIChtX3Jvb3RMYXllclRleHR1cmVJZCkgewotICAgICAgICBHTEMo
Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKyAgICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fcm9vdExheWVyVGV4dHVyZUlk
KSk7CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUlkID0gMDsKICAgICB9CiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgJKHJldmlzaW9uIDY3ODc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsMTYgKzUxLDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR0xFUzJD
b250ZXh0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxl
cyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KIGNsYXNzIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoUGFzc093blB0
cjxHTEVTMkNvbnRleHQ+IGdsZXMyQ29udGV4dCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Z3JhcGhpY3NDb250ZXh0M0QpOwogCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NPd25Q
dHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1
bShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBncmFwaGljc0NvbnRleHQzRCk7CiAgICAg
fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQoKTsKKwogICAgIC8vIHVwZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwg
YW5kIHNjcm9sbHMgdGhlIGJhY2tidWZmZXIuCiAgICAgdm9pZCBwcmVwYXJlVG9EcmF3TGF5ZXJz
KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwg
Y29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKIApAQCAtODksNyArOTEsNyBAQCBwdWJs
aWM6CiAKICAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRleHR1cmUoKTsKIAotICAgIHN0YXRpYyB2
b2lkIGRlYnVnR0xDYWxsKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGlu
dCBsaW5lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQzRCos
IGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKTsKIAogICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9qZWN0aW9uTWF0cml4OyB9CiAKQEAgLTEwMSw2ICsxMDMsOCBAQCBwdWJsaWM6
CiAgICAgY29uc3QgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExh
eWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1
ZXMuZ2V0KCk7IH0KICAgICBjb25zdCBDYW52YXNMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMq
IGNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXNMYXllclNo
YXJlZFZhbHVlcy5nZXQoKTsgfQogCisgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29u
c3QgSW50U2l6ZSYpOworCiAgICAgSW50U2l6ZSByb290TGF5ZXJUZXh0dXJlU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIEludFNpemUobV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4
dHVyZUhlaWdodCk7IH0KICAgICB2b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVs
cywgY29uc3QgSW50UmVjdCYgcmVjdCk7CiAKQEAgLTE2Nyw3ICsxNzEsNyBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NvbnRlbnRM
YXllclNoYXJlZFZhbHVlczsKICAgICBPd25QdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVk
VmFsdWVzPiBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzOwogCi0gICAgT3duUHRyPEdMRVMyQ29u
dGV4dD4gbV9nbGVzMkNvbnRleHQ7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2Nv
bnRleHQ7CiB9OwogCiAvLyBTZXR0aW5nIERFQlVHX0dMX0NBTExTIHRvIDEgd2lsbCBjYWxsIGds
R2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkgR0wKQEAgLTE3Niw5ICsxODAsOSBAQCBwcml2
YXRlOgogI2RlZmluZSBERUJVR19HTF9DQUxMUyAwCiAKICNpZiBERUJVR19HTF9DQUxMUyAmJiAh
ZGVmaW5lZCAoIE5ERUJVRyApCi0jZGVmaW5lIEdMQyh4KSB7ICh4KSwgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkZWJ1Z0dMQ2FsbCgjeCwgX19GSUxFX18sIF9fTElORV9fKTsgfQorI2RlZmluZSBH
TEMoY29udGV4dCwgeCkgeyAoeCksIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENhbGwo
Y29udGV4dCwgI3gsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0KICNlbHNlCi0jZGVmaW5lIEdMQyh4
KSAoeCkKKyNkZWZpbmUgR0xDKGNvbnRleHQsIHgpICh4KQogI2VuZGlmCiAKIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmNwcAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDE0ICszMywxMSBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRl
ICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCiAKLSNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNkZWZpbmUgR0xfR0xFWFRfUFJPVE9UWVBFUwotI2luY2x1
ZGUgPEdMRVMyL2dsMmV4dC5oPgotCiAjaWYgUExBVEZPUk0oU0tJQSkKICNpbmNsdWRlICJOYXRp
dmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCkBAIC0xNTMs
OSArMTUwLDEwIEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlUmUKICAg
ICBpZiAoIXBpeGVscykKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCB0ZXh0dXJlSWQpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0g
bGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKICAgICBBU1NFUlQoYml0bWFwU2l6
ZSA9PSByZXF1aXJlZFRleHR1cmVTaXplKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgR0xfUkdCQSwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpLCByZXF1aXJlZFRleHR1
cmVTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwor
ICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCksIHJl
cXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKTsKIAogICAgIG1fY29udGVu
dHNUZXh0dXJlID0gdGV4dHVyZUlkOwogICAgIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUgPSByZXF1
aXJlZFRleHR1cmVTaXplOwpAQCAtMTc0LDExICsxNzIsMTMgQEAgdm9pZCBWaWRlb0xheWVyQ2hy
b21pdW06OnVwZGF0ZVRleHR1cmVSZQogICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9
IHNraWFCaXRtYXAtPmNvbmZpZygpOwogCiAgICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6
OmtBUkdCXzg4ODhfQ29uZmlnKSB7Ci0gICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgdGV4dHVyZUlkKTsKLSAgICAgICAgdm9pZCogbWVtID0gZ2xNYXBUZXhTdWJJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVj
dC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCBHTF9XUklURV9PTkxZKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBs
YXllclJlbmRlcmVyQ29udGV4dCgpOworICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKKyAgICAgICAgQVNTRVJUKGNv
bnRleHQtPnN1cHBvcnRzTWFwU3ViQ0hST01JVU0oKSk7CisgICAgICAgIHZvaWQqIG1lbSA9IGNv
bnRleHQtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRo
KCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgR3JhcGhpY3NDb250ZXh0M0Q6OldSSVRFX09OTFkp
OwogICAgICAgICBza2lhQml0bWFwLT5zZXRQaXhlbHMobWVtKTsKICAgICAgICAgbV9vd25lci0+
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKm1fZ3JhcGhpY3NDb250ZXh0LCB1cGRhdGVSZWN0
KTsKLSAgICAgICAgZ2xVbm1hcFRleFN1YkltYWdlMkQobWVtKTsKKyAgICAgICAgY29udGV4dC0+
dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKTsKICAgICB9CiAKICAgICB1cGRhdGVDb21w
bGV0ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xM
YXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDY3ODc0KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgPEdM
RVMyL2dsMi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDE1ICs1MiwxNiBAQCBX
ZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bShHCiAKIHZvaWQgV2ViR0xMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIHJl
bmRlcmVyQ29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CiAgICAgQVNTRVJUKG1fY29u
dGV4dCk7CiAgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKLSAgICAgICAgZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgIHJlbmRlcmVyQ29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsK
ICAgICAgICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFwIG1v
ZGVzIHRvIEdMX0NMQU1QX1RPX0VER0UKICAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRl
eHR1cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAg
cmVuZGVyZXJDb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKTsKKyAgICAgICAgcmVuZGVyZXJDb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
QUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgcmVuZGVyZXJD
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKKyAgICAgICAgcmVuZGVyZXJDb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Qs
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICAgICAgbV90ZXh0dXJlQ2hh
bmdlZCA9IGZhbHNlOwogICAgIH0KICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0
ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCShy
ZXZpc2lvbiA2Nzg3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCwxMSBAQCB2
b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VyCiAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwogfQogCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOjpmbHVzaCgpCit7CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOworfQorCiB1bnNpZ25lZCBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewogICAgIHJldHVy
biBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CkBAIC0xNjQsNiArMTY5LDE3IEBAIGJv
b2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRzQkcKICAgICByZXR1cm4gbV9jb250
ZXh0LT5zdXBwb3J0c0JHUkEoKTsKIH0KIAorYm9vbCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
c3VwcG9ydHNDb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKCkKKworeworICAgIHJl
dHVybiBtX2NvbnRleHQtPnN1cHBvcnRzQ29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlV
TSgpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4dHVyZVRvUGFy
ZW50VGV4dHVyZUNIUk9NSVVNKHVuc2lnbmVkIHRleHR1cmUsIHVuc2lnbmVkIHBhcmVudFRleHR1
cmUpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVD
SFJPTUlVTSh0ZXh0dXJlLCBwYXJlbnRUZXh0dXJlKTsKK30KKwogVGV4dHVyZSogU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBUZXh0dXJl
OjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgUmVmUHRyPFRl
eHR1cmU+IHRleHR1cmUgPSBtX3RleHR1cmVzLmdldChwdHIpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5o
CShyZXZpc2lvbiA2Nzg3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJl
ZEdyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3Qs
IGxvbmcgY291bnQpOwogICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsKICAgICB2b2lkIGdl
dEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworICAgIHZvaWQgZmx1
c2goKTsKIAogICAgIHVuc2lnbmVkIGNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgdW5zaWduZWQg
Y3JlYXRlVGV4dHVyZSgpOwpAQCAtOTgsNiArOTksMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBz
dXBwb3J0c0JHUkEoKTsKIAorICAgIC8vIEdMX0NIUk9NSVVNX2NvcHlfdGV4dHVyZV90b19wYXJl
bnRfdGV4dHVyZQorICAgIGJvb2wgc3VwcG9ydHNDb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNI
Uk9NSVVNKCk7CisgICAgdm9pZCBjb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKHVu
c2lnbmVkIHRleHR1cmUsIHVuc2lnbmVkIHBhcmVudFRleHR1cmUpOworCiAgICAgLy8gQ3JlYXRl
cyBhIHRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBpbWFnZS4gIElzIG93bmVkIGJ5
IHRoaXMgY29udGV4dCdzCiAgICAgLy8gVGV4dHVyZUhhc2hNYXAuCiAgICAgVGV4dHVyZSogY3Jl
YXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9ybWF0LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2Nzg3NSkKKysrIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0w
OS0yMCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBDaGFuZ2UgY29tcG9z
aXRvciB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QgcmF0aGVyIHRoYW4gR0xFUzJDb250ZXh0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTkxMgorCisg
ICAgICAgIFN3aXRjaGVkIENocm9taXVtJ3MgY29tcG9zaXRvciB0byB1c2UgR3JhcGhpY3NDb250
ZXh0M0QgdG8gaXNzdWUKKyAgICAgICAgaXRzIE9wZW5HTCByZW5kZXJpbmcgY2FsbHMgcmF0aGVy
IHRoYW4gdGhlIENocm9taXVtLXNwZWNpZmljCisgICAgICAgIEdMRVMyQ29udGV4dCBhbmQgY29t
bWFuZCBidWZmZXIgT3BlbkdMIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFRoZSBpbi1wcm9j
ZXNzIHNvZnR3YXJlIHJlbmRlcmluZyBwYXRoIGZvciBHcmFwaGljc0NvbnRleHQzRCBkb2VzCisg
ICAgICAgIG5vdCB5ZXQgd29yayB3aXRoIHRoZSBjb21wb3NpdG9yLCBhdCBsZWFzdCBub3Qgb24g
TWFjIE9TIFguIFRoaXMKKyAgICAgICAgd2lsbCBiZSB3b3JrZWQgb24gaW4gc3Vic2VxdWVudCBi
dWdzLgorCisgICAgICAgIFRlc3RlZCBtYW51YWxseSB3aXRoIDNEIENTUywgV2ViR0wgYW5kIHZp
ZGVvIGNvbnRlbnQgb24gTWFjIE9TIFgKKyAgICAgICAgYW5kIExpbnV4LiBObyBuZXcgdGVzdHMu
CisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0
M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAg
ICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDoKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpnbGVzMkNvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEwLTA5LTIwICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNjc4
NzQpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDggKzEwMCw3IEBAIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5H
cmFwaGljc0NvbnQKICNlbmRpZgogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZShHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCBy
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKIHsKICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXM7CiAgICAgd2ViQXR0cmlidXRlcy5hbHBo
YSA9IGF0dHJzLmFscGhhOwpAQCAtMTIwLDcgKzExOSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6aW5pdGlhbGkKIAogICAgIGlmICghbV93ZWJWaWV3SW1wbCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghd2ViQ29udGV4dC0+aW5pdGlhbGl6ZSh3ZWJBdHRyaWJ1
dGVzLCBtX3dlYlZpZXdJbXBsKSkgeworICAgIGlmICghd2ViQ29udGV4dC0+aW5pdGlhbGl6ZSh3
ZWJBdHRyaWJ1dGVzLCBtX3dlYlZpZXdJbXBsLCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykp
IHsKICAgICAgICAgZGVsZXRlIHdlYkNvbnRleHQ7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CkBAIC0xMzIsNiArMTMxLDEzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
aW5pdGlhbGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRCogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnRleHQtPm1faW50ZXJuYWwtPm1faW1wbC5n
ZXQoKTsKK30KKwogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9pbXBsLmdldCgpOwpAQCAtNzk3LDE0ICs4MDMsMTEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5H
cmFwaGljc0NvbnRleHQzRCgpCiAKIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSBy
ZW5kZXJTdHlsZSkKIHsKLSAgICAvLyBGSVhNRTogbXVzdCBwYXNzIGRvd24gcmVuZGVyU3R5bGUg
YXJndW1lbnQgd2hlbiBzd2l0Y2hpbmcgY29tcG9zaXRvciB0byBHcmFwaGljc0NvbnRleHQzRC4K
LSAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCi0gICAg
ICAgIHJldHVybiAwOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBpbnRl
cm5hbCA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKCkpOwotICAgIGlm
ICghaW50ZXJuYWwtPmluaXRpYWxpemUoYXR0cnMsIGhvc3RXaW5kb3cpKSB7CisgICAgaWYgKCFp
bnRlcm5hbC0+aW5pdGlhbGl6ZShhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUgPT0gUmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAg
ICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiByZXN1bHQgPSBuZXcgR3JhcGhpY3NDb250
ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIGZhbHNlKTsKKyAgICBQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiByZXN1bHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5k
b3csIHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICByZXN1
bHQtPm1faW50ZXJuYWwgPSBpbnRlcm5hbC5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbC5oCShyZXZpc2lvbiA2Nzg3NCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCwxMiBAQCBwdWJs
aWM6CiAgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOwogICAgIH5HcmFwaGljc0NvbnRl
eHQzREludGVybmFsKCk7CiAKLSAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqKTsKKyAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wg
cmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBsb3dlci1sZXZlbCBXZWJHcmFwaGljc0NvbnRleHQzRCwK
KyAgICAvLyB3aGljaCBpcyBuZWVkZWQgZm9yIHN1Ym9yZGluYXRlIGNvbnRleHRzIGxpa2UgV2Vi
R0wncyB0byBzaGFyZSByZXNvdXJjZXMKKyAgICAvLyB3aXRoIHRoZSBjb21wb3NpdG9yJ3MgY29u
dGV4dC4KKyAgICBzdGF0aWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZXh0cmFjdFdl
YkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKIAogICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0
OwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7CkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNjc4NzQpCisrKyBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2
LDkgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdMRVMyQ29udGV4dC5oIgotI2luY2x1
ZGUgIkdMRVMyQ29udGV4dEludGVybmFsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzREludGVybmFsLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC05Mjcs
OSArOTI2LDkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIAogICAg
IH0KIAogI2lmIE9TKERBUldJTikKLSAgICBpZiAobV9nbGVzMkNvbnRleHQpIHsKLSAgICAgICAg
bV9nbGVzMkNvbnRleHQtPnJlc2l6ZU9uc2NyZWVuQ29udGVudChXZWJTaXplKHN0ZDo6bWF4KDEs
IG1fc2l6ZS53aWR0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSkpOworICAgIGlmIChtX2xh
eWVyUmVuZGVyZXIpIHsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZXNpemVPbnNjcmVlbkNv
bnRlbnQoV2ViQ29yZTo6SW50U2l6ZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0yMzAz
LDcgKzIzMDIsMTMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvcwog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5k
ZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGdldE9uc2NyZWVuR0xFUzJDb250
ZXh0KCkpOworICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX3Rl
bXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QucmVsZWFzZSgpOworICAgICAgICBpZiAo
IWNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4
KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKKyAgICAgICAg
fQorICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0
ZShjb250ZXh0LnJlbGVhc2UoKSk7CiAgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKICAg
ICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTI0MTMsMTQgKzI0MTgsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0Nv
bXBvc2l0ZSgpCiAjZW5kaWYKIAogCi1QYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gV2ViVmlld0lt
cGw6OmdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkKLXsKLSAgICBXZWJHTEVTMkNvbnRleHQqIGNv
bnRleHQgPSBnbGVzMkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBHTEVTMkNvbnRleHQ6OmNyZWF0ZShHTEVTMkNvbnRleHRJbnRlcm5h
bDo6Y3JlYXRlKGNvbnRleHQsIGZhbHNlKSk7Ci19Ci0KIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
KiBXZWJWaWV3SW1wbDo6Z2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKQogewogICAgIGlmICgh
bV9zaGFyZWRDb250ZXh0M0QpIHsKQEAgLTI0MzQsMzIgKzI0MzEsMzIgQEAgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpnZQogICAgIHJldHVybiBtX3NoYXJlZENvbnRleHQz
RC5nZXQoKTsKIH0KIAotLy8gUmV0dXJucyB0aGUgR0xFUzIgY29udGV4dCBhc3NvY2lhdGVkIHdp
dGggdGhpcyBWaWV3LiBJZiBvbmUgZG9lc24ndCBleGlzdAotLy8gaXQgd2lsbCBnZXQgY3JlYXRl
ZCBmaXJzdC4KIFdlYkdMRVMyQ29udGV4dCogV2ViVmlld0ltcGw6OmdsZXMyQ29udGV4dCgpCiB7
Ci0gICAgaWYgKCFtX2dsZXMyQ29udGV4dCkgewotICAgICAgICBtX2dsZXMyQ29udGV4dCA9IHdl
YktpdENsaWVudCgpLT5jcmVhdGVHTEVTMkNvbnRleHQoKTsKLSAgICAgICAgaWYgKCFtX2dsZXMy
Q29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGlmICghbV9nbGVzMkNv
bnRleHQtPmluaXRpYWxpemUodGhpcywgMCkpIHsKLSAgICAgICAgICAgIG1fZ2xlczJDb250ZXh0
LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0jaWYgT1MoREFS
V0lOKQotICAgICAgICBtX2dsZXMyQ29udGV4dC0+cmVzaXplT25zY3JlZW5Db250ZW50KFdlYlNp
emUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKSk7
Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2xlczJDb250ZXh0LmdldCgpOworICAgIHJl
dHVybiAwOwogfQogCiBXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViVmlld0ltcGw6OmdyYXBoaWNz
Q29udGV4dDNEKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0g
MDsKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBjb250ZXh0ID0gbV9sYXllclJl
bmRlcmVyLT5jb250ZXh0KCk7CisgICAgZWxzZSBpZiAobV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBo
aWNzQ29udGV4dDNEKQorICAgICAgICBjb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBo
aWNzQ29udGV4dDNELmdldCgpOworICAgIGVsc2UgeworICAgICAgICBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAgICBtX3RlbXBvcmFyeU9uc2NyZWVuR3Jh
cGhpY3NDb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisjaWYgT1MoREFSV0lOKQorICAgICAgICBpZiAo
bV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEKQorICAgICAgICAgICAgbV90ZW1w
b3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6
ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKKyNlbmRpZgorICAgICAgICBj
b250ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELmdldCgpOworICAg
IH0KKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZXh0cmFjdFdlYkdyYXBo
aWNzQ29udGV4dDNEKGNvbnRleHQpOworI2Vsc2UKICAgICByZXR1cm4gMDsKKyNlbmRpZgogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJ
KHJldmlzaW9uIDY3ODc0KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaWZuZGVmIFdlYlZpZXdJbXBsX2gKICNk
ZWZpbmUgV2ViVmlld0ltcGxfaAogCi0jaW5jbHVkZSAiV2ViR0xFUzJDb250ZXh0LmgiCiAjaW5j
bHVkZSAiV2ViTmF2aWdhdGlvblBvbGljeS5oIgogI2luY2x1ZGUgIldlYlBvaW50LmgiCiAjaW5j
bHVkZSAiV2ViUmVjdC5oIgpAQCAtNDQsNiArNDMsNyBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51
Q2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkRyYWdDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiRWRp
dG9yQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEltcGwuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCkBAIC01Niw3ICs1Niw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3Q7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIEdMRVMyQ29u
dGV4dDsKIGNsYXNzIEhpc3RvcnlJdGVtOwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIEtl
eWJvYXJkRXZlbnQ7CkBAIC0zMzMsMTQgKzMzMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9s
bFJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5
ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICNlbmRpZgotICAgIC8vIE9uc2NyZWVu
IGNvbnRleHRzIGRpc3BsYXkgdG8gdGhlIHNjcmVlbiBhc3NvY2lhdGVkIHdpdGggdGhpcyB2aWV3
LgotICAgIC8vIE9mZnNjcmVlbiBjb250ZXh0cyByZW5kZXIgb2Zmc2NyZWVuIGJ1dCBjYW4gc2hh
cmUgcmVzb3VyY2VzIHdpdGggdGhlCi0gICAgLy8gb25zY3JlZW4gY29udGV4dCBhbmQgdGh1cyBj
YW4gYmUgY29tcG9zaXRlZC4KLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgb25jZSB0aGUgY29t
cG9zaXRvciBpcyBzd2l0Y2hlZCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QuCi0gICAgUGFzc093
blB0cjxXZWJDb3JlOjpHTEVTMkNvbnRleHQ+IGdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCk7Ci0K
LSAgICAvLyBSZXR1cm5zIGFuIG9uc2NyZWVuIGNvbnRleHQKLSAgICAvLyBGSVhNRTogcmVtb3Zl
IHRoaXMgb25jZSB0aGUgY29tcG9zaXRvciBpcyBzd2l0Y2hlZCB0byB1c2UgR3JhcGhpY3NDb250
ZXh0M0QuCisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIG1ldGhvZCBvbmNlIHRoZSBjb21wb3Np
dG9yIGlzIGZ1bGx5IHN3aXRjaGVkCisgICAgLy8gb3ZlciB0byBHcmFwaGljc0NvbnRleHQzRC4K
ICAgICB2aXJ0dWFsIFdlYkdMRVMyQ29udGV4dCogZ2xlczJDb250ZXh0KCk7CiAKICAgICAvLyBS
ZXR1cm5zIHRoZSBvbnNjcmVlbiAzRCBjb250ZXh0IHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuIFRo
aXMgaXMKQEAgLTU0Myw4ICs1MzYsMTAgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSU5QVVRfU1BF
RUNIKQogICAgIFNwZWVjaElucHV0Q2xpZW50SW1wbCBtX3NwZWVjaElucHV0Q2xpZW50OwogI2Vu
ZGlmCi0KLSAgICBPd25QdHI8V2ViR0xFUzJDb250ZXh0PiBtX2dsZXMyQ29udGV4dDsKKyAgICAv
LyBJZiB3ZSBhdHRlbXB0IHRvIGZldGNoIHRoZSBvbi1zY3JlZW4gR3JhcGhpY3NDb250ZXh0M0Qg
YmVmb3JlCisgICAgLy8gdGhlIGNvbXBvc2l0b3IgaGFzIGJlZW4gdHVybmVkIG9uLCB3ZSBuZWVk
IHRvIGluc3RhbnRpYXRlIGl0CisgICAgLy8gZWFybHkuIFRoaXMgbWVtYmVyIGhvbGRzIG9uIHRv
IHRoZSBHQzNEIGluIHRoaXMgY2FzZS4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q+IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRDsKIAogICAgIFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gbV9zaGFyZWRDb250ZXh0M0Q7CiAK
</data>
<flag name="review"
          id="57610"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="57611"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>