<?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>89031</bug_id>
          
          <creation_ts>2012-06-13 13:11:52 -0700</creation_ts>
          <short_desc>[chromium] Move opaque rectangle tracking logic out of compositor core</short_desc>
          <delta_ts>2012-06-14 11:54:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>648396</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 13:11:52 -0700</bug_when>
    <thetext>[chromium] Move opaque rectangle tracking logic out of compositor core</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648409</commentid>
    <comment_count>1</comment_count>
      <attachid>147399</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 13:30:47 -0700</bug_when>
    <thetext>Created attachment 147399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648484</commentid>
    <comment_count>2</comment_count>
      <attachid>147399</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-13 14:52:12 -0700</bug_when>
    <thetext>Comment on attachment 147399
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h:49
&gt; +    explicit OpaqueRectTrackingContentLayerDelegate(GraphicsContextPainter* something);

I&apos;m sure you can come up with something better than this parameter name.

&gt; Source/WebCore/platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp:51
&gt;  void SkPictureCanvasLayerTextureUpdater::prepareToUpdate(const IntRect&amp; contentRect, const IntSize&amp; /* tileSize */, int borderTexels, float contentsScale, IntRect&amp; resultingOpaqueRect)

Can the borderTexels parameter get removed too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648588</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 16:56:11 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 147399 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147399&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h:49
&gt; &gt; +    explicit OpaqueRectTrackingContentLayerDelegate(GraphicsContextPainter* something);
&gt; 
&gt; I&apos;m sure you can come up with something better than this parameter name.

Whoops, fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp:51
&gt; &gt;  void SkPictureCanvasLayerTextureUpdater::prepareToUpdate(const IntRect&amp; contentRect, const IntSize&amp; /* tileSize */, int borderTexels, float contentsScale, IntRect&amp; resultingOpaqueRect)
&gt; 
&gt; Can the borderTexels parameter get removed too?

Yes! Removed and added lots of OVERRIDEs to this class hierarchy to make it less brittle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648589</commentid>
    <comment_count>4</comment_count>
      <attachid>147445</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 16:57:34 -0700</bug_when>
    <thetext>Created attachment 147445
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648594</commentid>
    <comment_count>5</comment_count>
      <attachid>147445</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-13 17:00:46 -0700</bug_when>
    <thetext>Comment on attachment 147445
Patch

Thanks! R=me, assuming Clang builds with all of those overrides.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648614</commentid>
    <comment_count>6</comment_count>
      <attachid>147445</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-13 17:33:38 -0700</bug_when>
    <thetext>Comment on attachment 147445
Patch

Actually, I&apos;m going to rescind my R+.  You need to update the code I landed in ScrollbarlayerChromium that uses LayerPainterChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648626</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 17:46:29 -0700</bug_when>
    <thetext>Yeah, I noticed when syncing.  The changes look pretty mechanical though - just update the signature so it compiles.  Do you want to take another look at the updated patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648630</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 17:51:10 -0700</bug_when>
    <thetext>I think this does the trick (hopefully layout tests will let me know if I&apos;m wrong):


diff --git a/Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp b/Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp
index f061580..8ceba89 100644
--- a/Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp
@@ -29,7 +29,9 @@
 #include &quot;ScrollbarLayerChromium.h&quot;
 
 #include &quot;BitmapCanvasLayerTextureUpdater.h&quot;
+#include &quot;GraphicsContext.h&quot;
 #include &quot;LayerPainterChromium.h&quot;
+#include &quot;PlatformContextSkia.h&quot;
 #include &quot;Scrollbar.h&quot;
 #include &quot;ScrollbarThemeComposite.h&quot;
 #include &quot;cc/CCLayerTreeHost.h&quot;
@@ -109,8 +111,11 @@ public:
         return adoptPtr(new ScrollbarBackgroundPainter(scrollbar, theme));
     }
 
-    virtual void paint(GraphicsContext&amp; context, const IntRect&amp; contentRect)
+    virtual void paint(SkCanvas* canvas, const IntRect&amp; contentRect, IntRect&amp;) OVERRIDE
     {
+        PlatformContextSkia platformContext(canvas);
+        GraphicsContext context(&amp;platformContext);
+
         // The following is a simplification of ScrollbarThemeComposite::paint.
         m_theme-&gt;paintScrollbarBackground(&amp;context, m_scrollbar);
 
@@ -162,8 +167,11 @@ public:
         return adoptPtr(new ScrollbarThumbPainter(scrollbar, theme));
     }
 
-    virtual void paint(GraphicsContext&amp; context, const IntRect&amp; contentRect)
+    virtual void paint(SkCanvas* canvas, const IntRect&amp; contentRect, IntRect&amp; opaque) OVERRIDE
     {
+        PlatformContextSkia platformContext(canvas);
+        GraphicsContext context(&amp;platformContext);
+
         context.clearRect(contentRect);
 
         // Consider the thumb to be at the origin when painting.
@@ -229,7 +237,7 @@ void ScrollbarLayerChromium::updatePart(LayerTextureUpdater* painter, LayerTextu
 
     // Paint and upload the entire part.
     IntRect paintedOpaqueRect;
-    painter-&gt;prepareToUpdate(rect, rect.size(), false, 1, paintedOpaqueRect);
+    painter-&gt;prepareToUpdate(rect, rect.size(), false, paintedOpaqueRect);
     texture-&gt;prepareRect(rect);
 
     IntRect destRect(IntPoint(), rect.size());


one side effect is it&apos;s not doing opaque rect tracking at all - I could use the opaque rect tracking stuff here, or perhaps set the opaque rects more specifically if we want them, but I don&apos;t think that we will be able to do much useful culling based on 15px wide opaque rects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648632</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 17:52:32 -0700</bug_when>
    <thetext>Hah nope, that doesn&apos;t work (the scrollbars are just all black in DRT)....hmmmm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648653</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 18:26:18 -0700</bug_when>
    <thetext>Ah whoops, I mixed up the &quot;borderTexels&quot; and &quot;contentsScale&quot; factor on the call to prepareToUpdate and was passing &quot;false&quot; in as the scale.  D&apos;oh!

This appears to pass all tests and is sane with some manual smoke testing:


diff --git a/Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp b/Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp
index f061580..006c92f 100644
--- a/Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp
@@ -29,7 +29,9 @@
 #include &quot;ScrollbarLayerChromium.h&quot;
 
 #include &quot;BitmapCanvasLayerTextureUpdater.h&quot;
+#include &quot;GraphicsContext.h&quot;
 #include &quot;LayerPainterChromium.h&quot;
+#include &quot;PlatformContextSkia.h&quot;
 #include &quot;Scrollbar.h&quot;
 #include &quot;ScrollbarThemeComposite.h&quot;
 #include &quot;cc/CCLayerTreeHost.h&quot;
@@ -109,8 +111,14 @@ public:
         return adoptPtr(new ScrollbarBackgroundPainter(scrollbar, theme));
     }
 
-    virtual void paint(GraphicsContext&amp; context, const IntRect&amp; contentRect)
+    virtual void paint(SkCanvas* canvas, const IntRect&amp; contentRect, IntRect&amp;) OVERRIDE
     {
+        PlatformContextSkia platformContext(canvas);
+        platformContext.setDrawingToImageBuffer(true);
+        GraphicsContext context(&amp;platformContext);
+        context.clearRect(contentRect);
+        context.clip(contentRect);
+
         // The following is a simplification of ScrollbarThemeComposite::paint.
         m_theme-&gt;paintScrollbarBackground(&amp;context, m_scrollbar);
 
@@ -162,8 +170,12 @@ public:
         return adoptPtr(new ScrollbarThumbPainter(scrollbar, theme));
     }
 
-    virtual void paint(GraphicsContext&amp; context, const IntRect&amp; contentRect)
+    virtual void paint(SkCanvas* canvas, const IntRect&amp; contentRect, IntRect&amp; opaque) OVERRIDE
     {
+        PlatformContextSkia platformContext(canvas);
+        platformContext.setDrawingToImageBuffer(true);
+        GraphicsContext context(&amp;platformContext);
+
         context.clearRect(contentRect);
 
         // Consider the thumb to be at the origin when painting.
@@ -229,7 +241,7 @@ void ScrollbarLayerChromium::updatePart(LayerTextureUpdater* painter, LayerTextu
 
     // Paint and upload the entire part.
     IntRect paintedOpaqueRect;
-    painter-&gt;prepareToUpdate(rect, rect.size(), false, 1, paintedOpaqueRect);
+    painter-&gt;prepareToUpdate(rect, rect.size(), 1, paintedOpaqueRect);
     texture-&gt;prepareRect(rect);
 
     IntRect destRect(IntPoint(), rect.size());


will upload a new patch for EWS and posterity</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648654</commentid>
    <comment_count>11</comment_count>
      <attachid>147458</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 18:28:13 -0700</bug_when>
    <thetext>Created attachment 147458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649320</commentid>
    <comment_count>12</comment_count>
      <attachid>147458</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-14 11:16:02 -0700</bug_when>
    <thetext>Comment on attachment 147458
Patch

R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649352</commentid>
    <comment_count>13</comment_count>
      <attachid>147458</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 11:54:31 -0700</bug_when>
    <thetext>Comment on attachment 147458
Patch

Clearing flags on attachment: 147458

Committed r120346: &lt;http://trac.webkit.org/changeset/120346&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649353</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 11:54:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147399</attachid>
            <date>2012-06-13 13:30:47 -0700</date>
            <delta_ts>2012-06-13 16:57:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89031-20120613133046.patch</filename>
            <type>text/plain</type>
            <size>64643</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjg2ZjFlY2NlZjBhYzVk
YzgwY2VkZDhhNzIwYTdjNzNjYTA5N2QxNy4uYjA0NmRkYWUwYTlmM2UyZjJhNmRlYWI4MjIzMTMy
OWRkZjQ1NjhhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTA2LTEzICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIG9wYXF1ZSByZWN0YW5nbGUgdHJhY2tpbmcgbG9naWMgb3V0IG9mIGNvbXBvc2l0b3IgY29y
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1v
dmVzIHRoZSBvcGFxdWUgcGFpbnQgdHJhY2tpbmcgbG9naWMgZnJvbSB0aGUgY29tcG9zaXRvciAo
c3BlY2lmaWNhbGx5IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpIG91dCB0byBhCisgICAgICAg
IGRlZGljYXRlZCBjbGFzcyB1c2VkIGJ5IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSBmb3IgR3JhcGhp
Y3NDb250ZXh0LXBhaW50ZWQgY29udGVudC4gVGhpcyBjaGFuZ2VzIHRoZSBpbnRlcmZhY2UKKyAg
ICAgICAgZXhwb3NlZCBieSB0aGUgY29tcG9zaXRvciB0byBwYXNzIGEgU2tDYW52YXMgYW5kIGxl
dCB0aGUgdXNlciBmaWxsIGluIGFuIG9wYXF1ZSByZWN0IGlmIG5lZWRlZC4gQ2FsbGVycyB0aGF0
IGFyZQorICAgICAgICB1c2luZyBHcmFwaGljc0NvbnRleHQgdG8gcGFpbnQgY2FuIGluc3RhbnRp
YXRlIGEgUGxhdGZvcm1Db250ZXh0U2tpYSAvIEdyYXBoaWNzQ29udGV4dCBhcm91bmQgdGhpcyBT
a0NhbnZhcyBpZgorICAgICAgICB0aGV5IGNob29zZSB0bywgb3IgdXNlIHNvbWUgb3RoZXIgc3Ry
YXRlZ3ksIG9yIG5vdCBmaWxsIGl0IGluIGF0IGFsbC4gVGhpcyBhdm9pZHMgY3JlYXRpbmcgZXh0
cmEgd3JhcHBlciBjbGFzc2VzCisgICAgICAgIGlmIHRoZSBldmVudHVhbCBjYWxsZXIgaXMgZ29p
bmcgdG8gdXNlIHRoZSB1bmRlcmx5aW5nIFNrQ2FudmFzIGFueXdheSAoc3VjaCBhcyBXZWJDb250
ZW50TGF5ZXIpIGFuZCBicmVha3MgdGhlCisgICAgICAgIGRlcGVuZGVuY3kgZnJvbSB0aGUgY29t
cG9zaXRvciBjb2RlIG9uIEdyYXBoaWNzQ29udGV4dCAvIFBsYXRmb3JtQ29udGV4dFNraWEuCisK
KyAgICAgICAgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUgaXMgYSBoZWxw
ZXIgY2xhc3MgdGhhdCB3cmFwcyBhIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9u
IHdpdGgKKyAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSdzIG9wYXF1ZSByZWdpb24gdHJhY2tp
bmcgbG9naWMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFx
dWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllclBhaW50ZXI6OnBhaW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9taXVtKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoTGF5ZXJQYWludGVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hs
aWdodDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGlua0hpZ2hsaWdodC5oOgorICAgICAgICAoTGlua0hpZ2hsaWdodCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVy
RGVsZWdhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGU6Ok9wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlOjp+T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExh
eWVyRGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVjdFRyYWNraW5nQ29udGVu
dExheWVyRGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHRQYWludGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBhaW50ZXI6On5HcmFwaGljc0Nv
bnRleHRQYWludGVyKToKKyAgICAgICAgKE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRl
bGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXll
ckRlbGVnYXRlOjpzZXRPcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsYXRmb3JtQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpQYWludGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTA2LTEyICBKYW1lcyBSb2JpbnNv
biAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSRUdSRVNTSU9O
KDExOTc2OSk6IENhbnZhczJETGF5ZXJCcmlkZ2UgbWF5IGdvIGF3YXkgYmVmb3JlIGl0cyBUZXh0
dXJlTGF5ZXJDaHJvbWl1bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjYzFkZmViZWJk
ODJlN2EwZjA0MWFkODc5ZDNhZTMyOGZhZjVkZTYwLi5lNTc4YzFjZGU1YTVjZTJmYTlhYjE5ZTMz
NjNhY2QyZjIyM2RkMjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1
IEBACisyMDEyLTA2LTEzICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIG9wYXF1ZSByZWN0YW5nbGUgdHJhY2tpbmcgbG9naWMg
b3V0IG9mIGNvbXBvc2l0b3IgY29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlcyB0aGUgZ3JheXNjYWxlL3N1YnBpeGVsIEFBIHRleHQgZGVjaXNp
b24gaW50byBOb25Db21wb3NpdGVkQ29udGVudEhvc3QgYW5kIHJlbW92ZXMgb25lIGxheWVyIG9m
IGluZGlyZWN0aW9uCisgICAgICAgIGJldHdlbiBOQ0NIIGFuZCBXVkkgdGhhdCBleGlzdGVkIG9u
bHkgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4KKworICAgICAgICBQb3J0cyB0aGUgb3BhcXVlIHJl
Y3QgdHJhY2tpbmcgdGVzdHMgdGhhdCB3ZXJlIGluIExheWVyVGV4dHVyZVVwZGF0ZXJUZXN0IHRv
CisgICAgICAgIE9wYXF1ZXJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCB0byBy
ZWZsZWN0IHRoZSBtb3ZlIGluIHJlc3BvbnNpYmlsaXRpZXMuCisKKyAgICAgICAgKiBXZWJLaXQu
Z3lwaToKKyAgICAgICAgKiBzcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpOb25Db21wb3NpdGVkQ29udGVu
dEhvc3QpOgorICAgICAgICAoV2ViS2l0OjpOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnNldE9w
YXF1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6cGFpbnRD
b250ZW50cyk6CisgICAgICAgICogc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpOb25D
b21wb3NpdGVkQ29udGVudEhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChOb25Db21wb3NpdGVkQ29u
dGVudEhvc3QpOgorICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyk6CisgICAgICAg
ICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvbnRlbnRMYXllcklt
cGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpwYWludFJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorICAgICAgICAqIHRlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpUZXN0T3BhY2l0eUNoYW5nZUxheWVy
RGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV1RGOjpNb2NrQ29udGVudExheWVy
RGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHRlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogdGVzdHMvT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVs
ZWdhdGVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBhaW50
Q2FsbGJhY2spOgorICAgICAgICAoVGVzdExheWVyUGFpbnRlckNocm9taXVtKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RMYXllclBhaW50ZXJDaHJvbWl1bTo6VGVzdExheWVyUGFpbnRlckNocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50RmlsbEFscGhhOjpvcGVyYXRvcigpKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhaW50RmlsbFBhcnRpYWxPcGFxdWU6OlBhaW50RmlsbFBhcnRpYWxP
cGFxdWUpOgorICAgICAgICAoUGFpbnRGaWxsUGFydGlhbE9wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYWludEZpbGxQYXJ0aWFsT3BhcXVlOjpvcGVyYXRvcigpKToKKyAgICAgICAgKE9wYXF1
ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3Q6Ok9wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpPcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3Q6OnNrQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdDo6
Y2FudmFzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorCiAyMDEyLTA2LTEyICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBSRUdSRVNTSU9OKDExOTc2OSk6IENhbnZhczJETGF5ZXJCcmlkZ2UgbWF5IGdvIGF3YXkgYmVm
b3JlIGl0cyBUZXh0dXJlTGF5ZXJDaHJvbWl1bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDdhMjFjYjVi
MjVlM2NlMjIyYjBkNzRkYWM3MjJhY2YwNWZlNjBiMmQuLmFmZGQ2ZjY1Yzc2NTBlMGMzMmFiMTFi
Njg2YTJlMDU1NGNmZDUyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2MjEsNiArMzYyMSw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4
dHVyZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBs
YXllclByaXZhdGVDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGxhdGZvcm1Db2xvci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0
bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggZDIwNWExN2ZmZWQ4NTIyMGI4
MGRhMWViNTBiYTFmZmRhZTQwYjk5ZC4uNWEwMWY1YWEwYmM2NDNmNDNjYTZhN2M4NWJlOTE4ODJk
ZDQ2ZTY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCisjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTgsNiArNTksNyBAQCBQYXNzUmVmUHRyPEJpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6
OmNyZQogCiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIs
IGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCiAgICAgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KHBhaW50ZXIpCisgICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAsIG1fdGV4U3ViSW1hZ2UodXNl
TWFwVGV4U3ViSW1hZ2UpCiB7CiB9CkBAIC04MiwzMSArODQsMzEgQEAgdm9pZCBCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QKIHsKICAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7
CiAKLSAgICBib29sIGxheWVySXNPcGFxdWUgPSBtX2NhbnZhcy5vcGFxdWUoKTsKLQotICAgIG1f
Y2FudmFzLnJlc2l6ZShjb250ZW50UmVjdC5zaXplKCkpOwotICAgIC8vIEFzc3VtcHRpb246IGlm
IGEgdGlsZXIgaXMgdXNpbmcgYm9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQot
ICAgIC8vIGxheWVyIGlzIGxpa2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVj
YXVzZSBvZiBpdCBtaWdodCBiZQotICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGlu
IGdyYXlzY2FsZSBpbnN0ZWFkIG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICBib29sIHVz
ZUdyYXlzY2FsZVRleHQgPSBib3JkZXJUZXhlbHMgfHwgIWxheWVySXNPcGFxdWU7Ci0gICAgUGxh
dGZvcm1DYW52YXM6OlBhaW50ZXI6OlRleHRPcHRpb24gdGV4dE9wdGlvbiA9Ci0gICAgICAgIHVz
ZUdyYXlzY2FsZVRleHQgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6
IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7Ci0gICAgUGxhdGZvcm1DYW52
YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOwotICAgIGNh
bnZhc1BhaW50ZXIuc2tpYUNvbnRleHQoKS0+c2V0VHJhY2tPcGFxdWVSZWdpb24oIWxheWVySXNP
cGFxdWUpOwotICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCAqY2Fu
dmFzUGFpbnRlci5za2lhQ29udGV4dCgpLCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSwgcmVz
dWx0aW5nT3BhcXVlUmVjdCk7CisgICAgaWYgKG1fY2FudmFzU2l6ZSAhPSBjb250ZW50UmVjdC5z
aXplKCkpIHsKKyAgICAgICAgbV9jYW52YXNTaXplID0gY29udGVudFJlY3Quc2l6ZSgpOworICAg
ICAgICBtX2NhbnZhcyA9IGFkb3B0UHRyKHNraWE6OkNyZWF0ZUJpdG1hcENhbnZhcyhtX2NhbnZh
c1NpemUud2lkdGgoKSwgbV9jYW52YXNTaXplLmhlaWdodCgpLCBtX29wYXF1ZSkpOworICAgIH0K
KworICAgIHBhaW50Q29udGVudHMobV9jYW52YXMuZ2V0KCksIGNvbnRlbnRSZWN0LCBjb250ZW50
c1NjYWxlLCByZXN1bHRpbmdPcGFxdWVSZWN0KTsKIH0KIAogdm9pZCBCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdChDQ0dyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7
Ci0gICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZtX2NhbnZhcyk7CisgICAg
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0
bWFwKGZhbHNlKTsKKyAgICBiaXRtYXAubG9ja1BpeGVscygpOwogCiAgICAgdGV4dHVyZS0+Ymlu
ZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKLSAgICBtX3RleFN1YkltYWdlLnVwbG9hZChs
b2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0
dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7CisgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQoc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpdG1hcC5nZXRQaXhlbHMoKSksIGNvbnRlbnRSZWN0KCks
IHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7CisgICAg
Yml0bWFwLnVubG9ja1BpeGVscygpOwogfQogCiB2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OnNldE9wYXF1ZShib29sIG9wYXF1ZSkKIHsKLSAgICBtX2NhbnZhcy5zZXRPcGFx
dWUob3BhcXVlKTsKKyAgICBpZiAob3BhcXVlICE9IG1fb3BhcXVlKSB7CisgICAgICAgIG1fY2Fu
dmFzLmNsZWFyKCk7CisgICAgICAgIG1fY2FudmFzU2l6ZSA9IEludFNpemUoKTsKKyAgICB9Cisg
ICAgbV9vcGFxdWUgPSBvcGFxdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCA2ZmY3
YzYzOTZhYzA2OGZmZWY0ZjU4YTcxZjhhMTQ5ZjExOTdjYzA1Li44ZmU2ODI4NzhmZWYyZjY3ZWFi
MzU2YzgwYTg5MzBmZTEwNWI1MDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0zMSwxMyArMzEsMTQgQEAKIAogI2luY2x1ZGUgIkNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFn
ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCisKK2NsYXNzIFNrQ2FudmFzOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOwogCi0vLyBU
aGlzIGNsYXNzIHJhc3Rlcml6ZXMgdGhlIGNvbnRlbnRSZWN0IGludG8gYSBQbGF0Zm9ybUNhbnZh
cy4gSXQgdGhlbiB1cGRhdGVzCisvLyBUaGlzIGNsYXNzIHJhc3Rlcml6ZXMgdGhlIGNvbnRlbnRS
ZWN0IGludG8gYSBza2lhIGJpdG1hcCBjYW52YXMuIEl0IHRoZW4gdXBkYXRlcwogLy8gdGV4dHVy
ZXMgYnkgY29weWluZyBmcm9tIHRoZSBjYW52YXMgaW50byB0aGUgdGV4dHVyZSwgdXNpbmcgTWFw
U3ViSW1hZ2UgaWYKIC8vIHBvc3NpYmxlLgogY2xhc3MgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlciA6IHB1YmxpYyBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIHsKQEAgLTY4LDcgKzY5
LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1Yklt
YWdlKTsKIAotICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworICAgIE93blB0cjxTa0NhbnZh
cz4gbV9jYW52YXM7CisgICAgSW50U2l6ZSBtX2NhbnZhc1NpemU7CisgICAgYm9vbCBtX29wYXF1
ZTsKICAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCBjZjhiMjkzYTdiMWRl
YzMwMzkzNzFhYmNiMzgzYjlhNjQwYWQwYWMxLi5iNDY0YTNkNDhlY2RlNjAyM2I2OTdjODg0MzRj
Y2YxYTY2MjgzN2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgorI2luY2x1ZGUgIlNraWFVdGlscy5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsMzggKzQ3LDI1IEBAIENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6On5DYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgUGxhdGZvcm1Db250ZXh0U2tpYSYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgZmxvYXQgY29udGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5n
T3BhcXVlUmVjdCkKK3ZvaWQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50
cyhTa0NhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgZmxvYXQgY29u
dGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCkKIHsKLSAgICBjb250ZXh0
LnRyYW5zbGF0ZSgtY29udGVudFJlY3QueCgpLCAtY29udGVudFJlY3QueSgpKTsKLSAgICB7Ci0g
ICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludCIsIHRo
aXMsIDApOworICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cGFpbnRDb250ZW50cyIpOworICAgIGNhbnZhcy0+c2F2ZSgpOworICAgIGNhbnZhcy0+dHJh
bnNsYXRlKFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoLWNvbnRlbnRSZWN0LngoKSksIFdlYkNvcmVG
bG9hdFRvU2tTY2FsYXIoLWNvbnRlbnRSZWN0LnkoKSkpOwogCi0gICAgICAgIEludFJlY3Qgc2Nh
bGVkQ29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKKyAgICBJbnRSZWN0IHNjYWxlZENvbnRlbnRS
ZWN0ID0gY29udGVudFJlY3Q7CiAKLSAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4wKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2NhbGUo
RmxvYXRTaXplKGNvbnRlbnRzU2NhbGUsIGNvbnRlbnRzU2NhbGUpKTsKKyAgICBpZiAoY29udGVu
dHNTY2FsZSAhPSAxLjApIHsKKyAgICAgICAgY2FudmFzLT5zY2FsZShXZWJDb3JlRmxvYXRUb1Nr
U2NhbGFyKGNvbnRlbnRzU2NhbGUpLCBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKGNvbnRlbnRzU2Nh
bGUpKTsKIAotICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBjb250ZW50UmVjdDsKLSAgICAg
ICAgICAgIHJlY3Quc2NhbGUoMSAvIGNvbnRlbnRzU2NhbGUpOwotICAgICAgICAgICAgc2NhbGVk
Q29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gUmVjb3JkIHRyYW5zZm9ybSBwcmlvciB0byBwYWludGluZywgYXMgYWxsIG9wYXF1ZSB0
cmFja2luZyB3aWxsIGJlCi0gICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoaXMgY3VycmVudCB2YWx1
ZS4KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGNhbnZhc1RvQ29udGVudFRyYW5zZm9ybSA9IGNv
bnRleHQuZ2V0Q1RNKCkuaW52ZXJzZSgpOwotCi0gICAgICAgIG1fcGFpbnRlci0+cGFpbnQoY29u
dGV4dCwgc2NhbGVkQ29udGVudFJlY3QpOworICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IGNvbnRl
bnRSZWN0OworICAgICAgICByZWN0LnNjYWxlKDEgLyBjb250ZW50c1NjYWxlKTsKKyAgICAgICAg
c2NhbGVkQ29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOworICAgIH0KIAotICAg
ICAgICAvLyBUcmFuc2Zvcm0gdHJhY2tlZCBvcGFxdWUgcGFpbnRzIGJhY2sgdG8gb3VyIGxheWVy
J3MgY29udGVudCBzcGFjZS4KLSAgICAgICAgQVNTRVJUKGNhbnZhc1RvQ29udGVudFRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSk7Ci0gICAgICAgIEFTU0VSVChjYW52YXNUb0NvbnRlbnRUcmFuc2Zv
cm0ucHJlc2VydmVzQXhpc0FsaWdubWVudCgpKTsKLSAgICAgICAgRmxvYXRSZWN0IG9wYXF1ZUNh
bnZhc1JlY3QgPSBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCk7Ci0gICAg
ICAgIHJlc3VsdGluZ09wYXF1ZVJlY3QgPSBlbmNsb3NlZEludFJlY3QoY2FudmFzVG9Db250ZW50
VHJhbnNmb3JtLm1hcFJlY3Qob3BhcXVlQ2FudmFzUmVjdCkpOworICAgIG1fcGFpbnRlci0+cGFp
bnQoY2FudmFzLCBzY2FsZWRDb250ZW50UmVjdCwgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CisgICAg
Y2FudmFzLT5yZXN0b3JlKCk7CiAKLSAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4wKQot
ICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQogICAgIG1fY29udGVudFJlY3Qg
PSBjb250ZW50UmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oCmluZGV4IGFiYTljYTQ3OTlhZjk3OWYxM2RlMWRmN2Q3YjU2YTMzOWNmNTE0NWYuLmM5NTFl
OTNmZWQ2Njg0MDAxZmQ3ZTQ0OTIwYTdjNmEzZGFhNDI5OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTMxLDEwICszMSwxMSBAQAogCiAjaW5jbHVkZSAi
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogCitjbGFzcyBTa0NhbnZhczsKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKLWNsYXNzIFBsYXRmb3JtQ29u
dGV4dFNraWE7CiAKIC8vIEJhc2UgY2xhc3MgZm9yIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIgYW5kCiAvLyBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIHRoYXQgcmVk
dWNlcyBjb2RlIGR1cGxpY2F0aW9uIGJldHdlZW4KQEAgLTQ2LDcgKzQ3LDcgQEAgcHVibGljOgog
cHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwogCi0gICAgdm9pZCBwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYsIFBsYXRmb3JtQ29udGV4dFNraWEmLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCwgZmxvYXQgY29udGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVj
dCk7CisgICAgdm9pZCBwYWludENvbnRlbnRzKFNrQ2FudmFzKiwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJl
Y3QpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50UmVjdDsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGFlOGQzMjA4YmZiYWI4ZDdhZGU5ODJhN2Q4YTkzYTJkODNlZDdkYWYuLmUwNjEz
ZTc1N2MyNmU1NTIzNDYzYTBlMzA4ZTQ0ODBiZDliMDk0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU0LDEyICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ29udGVudExheWVyUGFpbnRlcihkZWxlZ2F0ZSkpOwogICAgIH0K
IAotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KQorICAgIHZpcnR1YWwgdm9pZCBwYWludChTa0NhbnZhcyog
Y2FudmFzLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgSW50UmVjdCYgb3BhcXVlKQogICAg
IHsKICAgICAgICAgZG91YmxlIHBhaW50U3RhcnQgPSBjdXJyZW50VGltZSgpOwotICAgICAgICBj
b250ZXh0LmNsZWFyUmVjdChjb250ZW50UmVjdCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcChjb250
ZW50UmVjdCk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnBhaW50Q29udGVudHMoY29udGV4dCwgY29u
dGVudFJlY3QpOworICAgICAgICBtX2RlbGVnYXRlLT5wYWludENvbnRlbnRzKGNhbnZhcywgY29u
dGVudFJlY3QsIG9wYXF1ZSk7CiAgICAgICAgIGRvdWJsZSBwYWludEVuZCA9IGN1cnJlbnRUaW1l
KCk7CiAgICAgICAgIGRvdWJsZSBwaXhlbHNQZXJTZWMgPSAoY29udGVudFJlY3Qud2lkdGgoKSAq
IGNvbnRlbnRSZWN0LmhlaWdodCgpKSAvIChwYWludEVuZCAtIHBhaW50U3RhcnQpOwogICAgICAg
ICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVu
ZGVyZXI0LkFjY2VsQ29udGVudFBhaW50RHVyYXRpb25NUyIsIChwYWludEVuZCAtIHBhaW50U3Rh
cnQpICogMTAwMCwgMCwgMTIwLCAzMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApp
bmRleCBjY2MxZTAwOGMwODk2ZjE3ZTFlOTJjNDk3NTY1ZjdjZWVhMDZkYzNiLi5hMzQxZGU1YTJi
NjU2MGU5NmE0ZDhjNzNlNmFhNWY3ZDU0YjNlMjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJUaWxlZExheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCiAKK2NsYXNzIFNrQ2FudmFzOwor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTQ1LDEz
ICs0NywxMyBAQCBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwogCiBjbGFzcyBDb250ZW50TGF5
ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKFNrQ2FudmFzKiwgY29uc3QgSW50UmVjdCYgY2xpcCwgSW50UmVjdCYg
b3BhcXVlKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJEZWxl
Z2F0ZSgpIHsgfQogfTsKIAotLy8gQSBMYXllciB0aGF0IHJlcXVpcmVzIGEgR3JhcGhpY3NDb250
ZXh0IHRvIHJlbmRlciBpdHMgY29udGVudHMuCisvLyBBIGxheWVyIHRoYXQgcmVuZGVycyBpdHMg
Y29udGVudHMgaW50byBhbiBTa0NhbnZhcy4KIGNsYXNzIENvbnRlbnRMYXllckNocm9taXVtIDog
cHVibGljIFRpbGVkTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q29udGVudExheWVyQ2hyb21pdW0+IGNyZWF0ZShDb250ZW50TGF5ZXJEZWxlZ2F0ZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjM1Mzk4NGQ0ZGRhMWM4
YjJjMjIyZDc0ZjgwYzY4MzNjODgyZTYyMy4uODZhMWYzMjk5NmM2YjZlMWU2ZTU0ZjBjMzM5ZTgz
YmEyMTIwYTkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01
MCwxMCArNTAsMTIgQEAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VM
YXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxp
bmtIaWdobGlnaHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTa01hdHJpeDQ0LmgiCiAjaW5jbHVkZSAi
U3lzdGVtVGltZS5oIgpAQCAtODcsNyArODksOCBAQCBHcmFwaGljc0xheWVyQ2hyb21pdW06Okdy
YXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgLCBt
X2luU2V0Q2hpbGRyZW4oZmFsc2UpCiAgICAgLCBtX3BhZ2VTY2FsZUNoYW5nZWQoZmFsc2UpCiB7
Ci0gICAgbV9sYXllciA9IFdlYkNvbnRlbnRMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKHRoaXMpKTsKKyAgICBtX29wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRl
ID0gYWRvcHRQdHIobmV3IE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlKHRo
aXMpKTsKKyAgICBtX2xheWVyID0gV2ViQ29udGVudExheWVyKENvbnRlbnRMYXllckNocm9taXVt
OjpjcmVhdGUobV9vcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5nZXQoKSkp
OwogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CkBAIC04NzQsOCArODc3LDkgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpCiAgICAgbV9wYWdlU2NhbGVDaGFuZ2VkID0gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBjbGlwKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY2xpcCkKIHsKKyAgICBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLT5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih0cnVlKTsKICAgICBw
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBjbGlwKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBiOTk0OTkxMmNiNzMwZWM1NjRkYTIzYTA3YjRm
OWQ4NjlmNjBmYjQ2Li5kZWRlYzZhNTVlNmUxYjZlZGEzZTQ1NDE0ZGE4NjIyYzNhYzkzNjZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtMzYsNiArMzYsNyBAQAogI2lu
Y2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIk9wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlv
bkRlbGVnYXRlLmgiCiAKICNpbmNsdWRlIDxwdWJsaWMvV2ViQ29udGVudExheWVyLmg+CkBAIC00
Nyw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBj
bGFzcyBMaW5rSGlnaGxpZ2h0OwogCi1jbGFzcyBHcmFwaGljc0xheWVyQ2hyb21pdW0gOiBwdWJs
aWMgR3JhcGhpY3NMYXllciwgcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlLCBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkRlbGVnYXRlIHsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSA6IHB1
YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgR3JhcGhpY3NDb250ZXh0UGFpbnRlciwgcHVibGlj
IENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgR3JhcGhpY3NMYXllckNo
cm9taXVtKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVy
Q2hyb21pdW0oKTsKQEAgLTExNyw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgpOwogICAgIHZp
cnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKIAotICAgIC8vIENv
bnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOworICAgIC8v
IEdyYXBoaWNzQ29udGV4dFBhaW50ZXIgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lk
IHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApIE9WRVJSSURFOwog
CiAgICAgLy8gQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpOwpAQCAt
MTYyLDYgKzE2Myw4IEBAIHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJMYXllciBtX3RyYW5zZm9y
bUxheWVyOwogICAgIFdlYktpdDo6V2ViTGF5ZXIgbV9jb250ZW50c0xheWVyOwogCisgICAgT3du
UHRyPE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlPiBtX29wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlOworCiAgICAgZW51bSBDb250ZW50c0xheWVyUHVy
cG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCiAgICAgICAgIENvbnRlbnRzTGF5
ZXJGb3JJbWFnZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oCmluZGV4IDk0MjlkYTVm
YWI5YTM3ZWIzOGMwZGVjNTY2N2MwMjFlYmY2Y2EzNjEuLmRiNmE4ODRjMWY5MTg3NDhiNDgyZjdk
OWU2ZmY4MmVkNzI5ZGZkYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJQYWludGVyQ2hyb21pdW0uaApAQCAt
MjksMTUgKzI5LDE2IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKK2Ns
YXNzIFNrQ2FudmFzOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKIGNsYXNzIEludFJlY3Q7CiAKIGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5MYXllclBhaW50ZXJDaHJvbWl1bSgpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludChTa0NhbnZhcyosIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBJbnRSZWN0JiBvcGFxdWUpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAKaW5kZXggYmVhMzJjMGEzNTc5YWY1NzFmYzdm
MDUyYTc0ZGJkYzdmYjlkZTY3OC4uM2JjMWU2M2RhMWFkZTA1NDE0MjgwNTk4NjY5MjcyM2VmZmM5
YWE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGlua0hpZ2hsaWdodC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
ICJMaW5rSGlnaGxpZ2h0LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiY2MvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTkxLDggKzkyLDEwIEBAIENvbnRlbnRMYXllckNocm9taXVt
KiBMaW5rSGlnaGxpZ2h0Ojpjb250ZW50TGF5ZXIoKQogICAgIHJldHVybiBtX2NvbnRlbnRMYXll
ci5nZXQoKTsKIH0KIAotdm9pZCBMaW5rSGlnaGxpZ2h0OjpwYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmKQordm9pZCBMaW5rSGlnaGxpZ2h0OjpwYWludENv
bnRlbnRzKFNrQ2FudmFzKiBjYW52YXMsIGNvbnN0IEludFJlY3QmLCBJbnRSZWN0JikKIHsKKyAg
ICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOworICAgIEdyYXBo
aWNzQ29udGV4dCBnYygmcGxhdGZvcm1Db250ZXh0KTsKICAgICAvLyBGSVhNRTogbWFrZSBjb2xv
dXIgY29uZmlndXJhYmxlPwogICAgIGdjLnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1NSwg
MjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgZ2Muc2V0U3Ryb2tlVGhpY2tuZXNzKDIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGlua0hpZ2hsaWdodC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGlua0hpZ2hsaWdodC5oCmluZGV4IDhkNzg4OWZjZTcyMDU5Zjk4MWE4OTc2MjE2ZGRhZWVl
ZTMxOWRiODQuLjFmYmVmOWJhOTQ2OGE3MWI5ODNmN2IxNWI0Yzg1MWEwNWQ0YmFiMjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdo
bGlnaHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
aW5rSGlnaGxpZ2h0LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIENvbnRlbnRMYXll
ckNocm9taXVtKiBjb250ZW50TGF5ZXIoKTsKIAogICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRl
IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRDb250ZW50cyhTa0NhbnZhcyosIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBJ
bnRSZWN0JiBvcGFxdWUpIE9WRVJSSURFOwogCiAgICAgLy8gQ0NMYXllckFuaW1hdGlvbkRlbGVn
YXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFy
dGVkKGRvdWJsZSB0aW1lKSBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRl
bGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09w
YXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjYx
OTY2Yjk1ZGQ5MTAzYmUzMzJhY2M1NjE5ZTkzZTY5Y2FiNDNhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNr
aW5nQ29udGVudExheWVyRGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIk9wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRl
OjpPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZShHcmFwaGljc0NvbnRleHRQ
YWludGVyKiBwYWludGVyKQorICAgIDogbV9wYWludGVyKHBhaW50ZXIpCisgICAgLCBtX29wYXF1
ZShmYWxzZSkKK3sKK30KKworT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGU6
On5PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSgpCit7Cit9CisKK3ZvaWQg
T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGU6OnBhaW50Q29udGVudHMoU2tD
YW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgY2xpcCwgSW50UmVjdCYgb3BhcXVlKQorewor
ICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7CisgICAgcGxh
dGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKCFtX29wYXF1ZSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBjb250ZXh0LmNsZWFy
UmVjdChjbGlwKTsKKyAgICBjb250ZXh0LmNsaXAoY2xpcCk7CisKKyAgICAvLyBSZWNvcmQgdHJh
bnNmb3JtIHByaW9yIHRvIHBhaW50aW5nLCBhcyBhbGwgb3BhcXVlIHRyYWNraW5nIHdpbGwgYmUK
KyAgICAvLyByZWxhdGl2ZSB0byB0aGlzIGN1cnJlbnQgdmFsdWUuCisgICAgQWZmaW5lVHJhbnNm
b3JtIGNhbnZhc1RvQ29udGVudFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCkuaW52ZXJzZSgp
OworCisgICAgbV9wYWludGVyLT5wYWludChjb250ZXh0LCBjbGlwKTsKKworICAgIC8vIFRyYW5z
Zm9ybSB0cmFja2VkIG9wYXF1ZSBwYWludHMgYmFjayB0byBvdXIgbGF5ZXIncyBjb250ZW50IHNw
YWNlLgorICAgIEFTU0VSVChjYW52YXNUb0NvbnRlbnRUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkp
OworICAgIEFTU0VSVChjYW52YXNUb0NvbnRlbnRUcmFuc2Zvcm0ucHJlc2VydmVzQXhpc0FsaWdu
bWVudCgpKTsKKyAgICBGbG9hdFJlY3Qgb3BhcXVlQ2FudmFzUmVjdCA9IHBsYXRmb3JtQ29udGV4
dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKTsKKyAgICBvcGFxdWUgPSBlbmNsb3NlZEludFJlY3Qo
Y2FudmFzVG9Db250ZW50VHJhbnNmb3JtLm1hcFJlY3Qob3BhcXVlQ2FudmFzUmVjdCkpOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExh
eWVyRGVsZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDNlODZjOGFiZDc1NTAzODNmYmQwNmVlNWZmMzg1
MDM0YzFmNmUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuaApA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9wYXF1ZVJlY3RUcmFja2lu
Z0NvbnRlbnRMYXllckRlbGVnYXRlX2gKKyNkZWZpbmUgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVu
dExheWVyRGVsZWdhdGVfaAorCisjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCitjbGFzcyBTa0NhbnZhczsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRSZWN0OworCitj
bGFzcyBHcmFwaGljc0NvbnRleHRQYWludGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAwOworCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0UGFpbnRlcigpIHsgfQorfTsKKwor
Y2xhc3MgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ29u
dGVudExheWVyRGVsZWdhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlKTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZShHcmFwaGljc0NvbnRleHRQYWludGVy
KiBzb21ldGhpbmcpOworICAgIHZpcnR1YWwgfk9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXll
ckRlbGVnYXRlKCk7CisKKyAgICAvLyBJZiB3ZSBrbm93IHRoYXQgZXZlcnl0aGluZyB0aGF0IHdp
bGwgYmUgcGFpbnRlZCB0aHJvdWdoIHRoaXMgZGVsZWdhdGUsIHRoZW4gd2UgZG9uJ3QgYm90aGVy
CisgICAgLy8gdHJhY2tpbmcgb3BhcXVlbmVzcy4KKyAgICB2b2lkIHNldE9wYXF1ZShib29sIG9w
YXF1ZSkgeyBtX29wYXF1ZSA9IG9wYXF1ZTsgfQorCisgICAgLy8gQ29udGVudExheWVyRGVsZWdh
dGUKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhTa0NhbnZhcyosIGNvbnN0IEludFJl
Y3QmIGNsaXAsIEludFJlY3QmIG9wYXF1ZSkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgR3Jh
cGhpY3NDb250ZXh0UGFpbnRlciogbV9wYWludGVyOworICAgIGJvb2wgbV9vcGFxdWU7Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Q
bGF0Zm9ybUNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAKaW5kZXggYzVlMzhkNmFhMzUzYWIzZTYwZWI2ZmUxNzJl
ODdkYTRhODkxNTBjMS4uN2ExZjExN2QzYTU0Mjc1YmUyNjliOTA0ZWI1MTY5ZjIwYmIzZGZkZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxh
dGZvcm1DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcApAQCAtOTcsOCArOTcsNiBAQCBQbGF0Zm9ybUNhbnZh
czo6UGFpbnRlcjo6UGFpbnRlcihQbGF0Zm9ybUNhbnZhcyogY2FudmFzLCBQbGF0Zm9ybUNhbnZh
czo6UGFpbnRlcgogewogICAgIG1fc2tpYUNvbnRleHQgPSBhZG9wdFB0cihuZXcgUGxhdGZvcm1D
b250ZXh0U2tpYShjYW52YXMtPm1fc2tpYUNhbnZhcy5nZXQoKSkpOwogCi0gICAgbV9za2lhQ29u
dGV4dC0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIob3B0aW9uID09IEdyYXlzY2FsZVRleHQpOwot
CiAgICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dChyZWludGVycHJl
dF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4obV9za2lhQ29udGV4dC5nZXQoKSkpKTsK
ICAgICBjb250ZXh0KCktPnNhdmUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggYjQ5OTAxMmU2MWI1MzdhYzk1
NGNlYTEzOGY5YzE4ODIzNjMxYTU2Ni4uZjMxMWYxOWIxNTcyYzFmNWM1MTk0MDMxNTJmZDE0MmM4
NDlhMDE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5jcHAKQEAgLTUxLDE3ICs1MSw3IEBAIFNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6On5Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkKIHZv
aWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiAvKiB0aWxlU2l6ZSAqLywg
aW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5n
T3BhcXVlUmVjdCkKIHsKICAgICBTa0NhbnZhcyogY2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVj
b3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKLSAgICBQ
bGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOwotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXREZWZlcnJlZCh0cnVlKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tP
cGFxdWVSZWdpb24oIW1fbGF5ZXJJc09wYXF1ZSk7Ci0gICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0
aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCi0gICAg
Ly8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNl
IGl0IG1pZ2h0IGJlCi0gICAgLy8gdHJhbnNmb3JtZWQsIHNldCBpbWFnZSBidWZmZXIgZmxhZyB0
byBkcmF3IHRoZSB0ZXh0IGluIGdyYXlzY2FsZQotICAgIC8vIGluc3RlYWQgb2YgdXNpbmcgc3Vi
cGl4ZWwgYW50aWFsaWFzaW5nLgotICAgIGJvb2wgdXNlR3JheXNjYWxlVGV4dCA9IGJvcmRlclRl
eGVscyB8fCAhbV9sYXllcklzT3BhcXVlOwotICAgIHBsYXRmb3JtQ29udGV4dC5zZXREcmF3aW5n
VG9JbWFnZUJ1ZmZlcih1c2VHcmF5c2NhbGVUZXh0KTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOwotICAgIHBhaW50Q29udGVudHMoZ3JhcGhp
Y3NDb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQsIGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlLCBy
ZXN1bHRpbmdPcGFxdWVSZWN0KTsKKyAgICBwYWludENvbnRlbnRzKGNhbnZhcywgY29udGVudFJl
Y3QsIGNvbnRlbnRzU2NhbGUsIHJlc3VsdGluZ09wYXF1ZVJlY3QpOwogICAgIG1fcGljdHVyZS5l
bmRSZWNvcmRpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXgg
ZjRmNDgyYmVhNjdjNzZiNmJlMTUwNDVlMTdmZTFmOTYxNzg3YmY2MS4uNjI1ZDNlMTE1ZDdmNjBh
NWQ0ZTk3NzY5YzE4YmRmOGIzM2YwYzY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAK
ICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSZWdp
b24uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
CmluZGV4IDNjM2FlMDNmNjZjOGVmNDU3YTgzMWNlNjJkYzFkODRmY2ZjMzQxZTIuLmI5ZDI0ODIz
N2VjMDdmOTU0ODRlOGZhMDI3NDU1Zjc2MDE2M2YxNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oCkBAIC00Nyw3ICs0Nyw2IEBAIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFz
cyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50OwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CiBjbGFz
cyBSZWdpb247CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yOwogY2xhc3MgVGV4dHVyZU1hbmFnZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBjMTg3MjhiMDA5MzBhYWIwYTIzNGUx
MjM4NWZiMTY1N2U0ZDBlMTRiLi4zODk1NGYwNGZiZjcyMWJkNGI2OGJmNmE3ZDYzNTBkNTlhZjg2
ZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTEyMSwxMiArMTIxLDEyIEBA
CiAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9M
YXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xheWVyUmVuZGVyZXJD
aHJvbWl1bVRlc3QuY3BwJywKLSAgICAgICAgICAgICd0ZXN0cy9MYXllclRleHR1cmVVcGRhdGVy
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvTGlua0hpZ2hsaWdodFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9M
aXN0ZW5lckxlYWtUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTG9jYWxpemVkTnVtYmVy
SUNVVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tDQ1F1YWRDdWxsZXIuaCcsCisg
ICAgICAgICAgICAndGVzdHMvT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGVU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUGFpbnRBZ2dyZWdhdG9yVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcApp
bmRleCBjNzYxNWU4YzRiYWU3OTEzODNlMTYxNWQ3NzJhOThiZWU0OTU4OGE4Li4yYzM3MjA5YzYw
Nzc1MGY1MTU4MDExOWM4ZDQ5MmYyNWYwZGJjNWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAKQEAgLTMxLDEz
ICszMSwxNSBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJQYWludGVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAi
V2ViVmlld0ltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLU5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Tm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0KFBhc3NPd25QdHI8V2ViQ29yZTo6TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRl
bnRQYWludCkKLSAgICA6IG1fY29udGVudFBhaW50KGNvbnRlbnRQYWludCkKK05vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KFdlYlZpZXdJbXBsKiB3ZWJW
aWV3KQorICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgLCBtX29wYXF1ZSh0cnVlKQogICAg
ICwgbV9zaG93RGVidWdCb3JkZXJzKGZhbHNlKQogICAgICwgbV9kZXZpY2VTY2FsZUZhY3Rvcigx
LjApCiB7CkBAIC02NCw2ICs2Niw3IEBAIHZvaWQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Ojpz
ZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogCiB2b2lkIE5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6c2V0T3BhcXVlKGJvb2wgb3BhcXVlKQogeworICAgIG1f
b3BhcXVlID0gb3BhcXVlOwogICAgIG1fZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpLT5z
ZXRPcGFxdWUob3BhcXVlKTsKIH0KIApAQCAtMTY1LDEwICsxNjgsMTYgQEAgdm9pZCBOb25Db21w
b3NpdGVkQ29udGVudEhvc3Q6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKikKIAogdm9pZCBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnBhaW50Q29udGVu
dHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQogeworICAgIC8vIE9uIG5vbi1hbmRyb2lkIHBsYXRm
b3Jtcywgd2Ugd2FudCB0byByZW5kZXIgdGV4dCB3aXRoIHN1YnBpeGVsIGFudGlhbGlhc2luZyBv
biB0aGUgcm9vdCBsYXllcgorICAgIC8vIHNvIGxvbmcgYXMgdGhlIHJvb3QgaXMgb3BhcXVlLiBP
biBhbmRyb2lkIGFsbCB0ZXh0IGlzIGdyYXlzY2FsZS4KKyNpZiAhT1MoQU5EUk9JRCkKKyAgICBp
ZiAobV9vcGFxdWUpCisgICAgICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnNldERyYXdp
bmdUb0ltYWdlQnVmZmVyKGZhbHNlKTsKKyNlbmRpZgogICAgIGNvbnRleHQudHJhbnNsYXRlKC1t
X2xheWVyQWRqdXN0KTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IGFkanVzdGVkQ2xpcFJlY3QgPSBj
bGlwUmVjdDsKICAgICBhZGp1c3RlZENsaXBSZWN0Lm1vdmUobV9sYXllckFkanVzdCk7Ci0gICAg
bV9jb250ZW50UGFpbnQtPnBhaW50KGNvbnRleHQsIGFkanVzdGVkQ2xpcFJlY3QpOworICAgIG1f
d2ViVmlldy0+cGFpbnRSb290TGF5ZXIoY29udGV4dCwgYWRqdXN0ZWRDbGlwUmVjdCk7CiB9CiAK
IHZvaWQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpzZXRTaG93RGVidWdCb3JkZXJzKGJvb2wg
c2hvd0RlYnVnQm9yZGVycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgKaW5kZXggN2NhZTIwYTE0MzNkNTQyYWYzNGFiNGU5
N2U4MTM4YTI3OTBjM2M4Yy4uOTcwNjg2MGQ3ZWZkMTZiNDc4OTM3ZmVmZjBmOTc0MTdlYzQ2NGZk
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0LmgKQEAgLTQwLDE3ICs0MCwxNyBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBMYXllckNocm9taXVtOwot
Y2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgV2ViVmlld0ltcGw7CiAKIGNsYXNzIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA6IHB1Ymxp
YyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKIFdURl9NQUtFX05PTkNPUFlBQkxFKE5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBjcmVhdGUoUGFzc093blB0cjxXZWJDb3JlOjpMYXll
clBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPE5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gY3JlYXRlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb25Db21wb3NpdGVkQ29udGVudEhvc3Qo
Y29udGVudFBhaW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0KHdlYlZpZXcpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Tm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0KCk7CiAKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
U2hvd0RlYnVnQm9yZGVycyhib29sKTsKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE5vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdChQYXNzT3duUHRyPFdlYkNvcmU6OkxheWVyUGFpbnRlckNocm9t
aXVtPiBjb250ZW50UGFpbnQpOworICAgIGV4cGxpY2l0IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dChXZWJWaWV3SW1wbCopOwogCiBwcml2YXRlOgogICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQK
QEAgLTgyLDEwICs4MiwxMSBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkxheWVyQ2hyb21pdW0q
IHNjcm9sbExheWVyKCk7CiAKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9n
cmFwaGljc0xheWVyOwotICAgIE93blB0cjxXZWJDb3JlOjpMYXllclBhaW50ZXJDaHJvbWl1bT4g
bV9jb250ZW50UGFpbnQ7CisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlldzsKICAgICBXZWJDb3Jl
OjpJbnRTaXplIG1fdmlld3BvcnRTaXplOwogICAgIFdlYkNvcmU6OkludFNpemUgbV9sYXllckFk
anVzdDsKIAorICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgYm9vbCBtX3Nob3dEZWJ1Z0JvcmRlcnM7
CiAgICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZhY3RvcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCmluZGV4IDIyMmZhMmZhNzY2
NTIwMjI4MDhjMTRhY2U5MTE0MTQxYmE0N2VkNWQuLmVjNzUzZTdmZWM4OTcwOGFkMjJlM2UyMjVj
ODMxMmVkYTk1YzE3YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC01MywxMSArNTMsMTAgQEAgV2ViQ29udGVudExheWVy
SW1wbDo6fldlYkNvbnRlbnRMYXllckltcGwoKQogICAgIGNsZWFyRGVsZWdhdGUoKTsKIH0KIAot
dm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYg
Z2MsIGNvbnN0IEludFJlY3QmIGNsaXApCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50
Q29udGVudHMoU2tDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgY2xpcCwgSW50UmVjdCYp
CiB7CiAgICAgaWYgKCFtX2NvbnRlbnRDbGllbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJD
YW52YXMqIGNhbnZhcyA9IGdjLnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKICAgICBtX2Nv
bnRlbnRDbGllbnQtPnBhaW50Q29udGVudHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCmlu
ZGV4IGEwNmNmOTA4MjkxZmFmZWE2MjNjYmJlNzU3YWNlMjY4YmY1MmRkMDguLjU0MmJkOWI4ZWYz
MzZiZDRjN2Y3OWJhOGJkOTMyNzFmYTQ5MzE2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfldlYkNvbnRlbnRMYXllckltcGwoKTsKIAogICAgIC8vIENvbnRl
bnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFNrQ2FudmFzKiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY2xpcCwgV2ViQ29yZTo6SW50UmVjdCYgb3BhcXVlKTsKIAogICAg
IFdlYkNvbnRlbnRMYXllckNsaWVudCogbV9jb250ZW50Q2xpZW50OwogICAgIGJvb2wgbV9kcmF3
c0NvbnRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5k
ZXggOTMwYTIyM2ZjZDhjNGZmZjUyZDY5YWE2Y2FmOTA1Y2NmNTUyZGQ2ZS4uYjNjMTA1MjJiNjk1
MGVlNWE4MGUyYmI3YWE3ZmVhNWNjZTM5YmQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzQwOSwzOCArMzQwOSwyMCBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB9CiAjZW5kaWYKIAotY2xhc3MgV2ViVmlld0ltcGxD
b250ZW50UGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcik7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8V2ViVmlld0ltcGxDb250ZW50UGFpbnRlcio+IGNyZWF0ZShXZWJW
aWV3SW1wbCogd2ViVmlld0ltcGwpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXIod2ViVmlld0ltcGwpKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSBwYWludFN0YXJ0ID0gY3VycmVu
dFRpbWUoKTsKLSAgICAgICAgUGFnZSogcGFnZSA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKTsKLSAg
ICAgICAgaWYgKCFwYWdlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGcmFtZVZpZXcq
IHZpZXcgPSBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgICAgICB2aWV3LT5wYWludENv
bnRlbnRzKCZjb250ZXh0LCBjb250ZW50UmVjdCk7Ci0gICAgICAgIGRvdWJsZSBwYWludEVuZCA9
IGN1cnJlbnRUaW1lKCk7Ci0gICAgICAgIGRvdWJsZSBwaXhlbHNQZXJTZWMgPSAoY29udGVudFJl
Y3Qud2lkdGgoKSAqIGNvbnRlbnRSZWN0LmhlaWdodCgpKSAvIChwYWludEVuZCAtIHBhaW50U3Rh
cnQpOwotICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3Rv
bUNvdW50cygiUmVuZGVyZXI0LkFjY2VsUm9vdFBhaW50RHVyYXRpb25NUyIsIChwYWludEVuZCAt
IHBhaW50U3RhcnQpICogMTAwMCwgMCwgMTIwLCAzMCk7Ci0gICAgICAgIFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQuQWNjZWxSb290
UGFpbnRNZWdhcGl4UGVyU2Vjb25kIiwgcGl4ZWxzUGVyU2VjIC8gMTAwMDAwMCwgMTAsIDIxMCwg
MzApOwotCi0gICAgICAgIG1fd2ViVmlld0ltcGwtPnNldEJhY2tncm91bmRDb2xvcih2aWV3LT5k
b2N1bWVudEJhY2tncm91bmRDb2xvcigpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcihXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpCi0g
ICAgICAgIDogbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKLSAgICB7Ci0gICAgfQordm9pZCBX
ZWJWaWV3SW1wbDo6cGFpbnRSb290TGF5ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBkb3VibGUgcGFpbnRTdGFydCA9IGN1cnJl
bnRUaW1lKCk7CisgICAgaWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgdmlldy0+cGFpbnRD
b250ZW50cygmY29udGV4dCwgY29udGVudFJlY3QpOworICAgIGRvdWJsZSBwYWludEVuZCA9IGN1
cnJlbnRUaW1lKCk7CisgICAgZG91YmxlIHBpeGVsc1BlclNlYyA9IChjb250ZW50UmVjdC53aWR0
aCgpICogY29udGVudFJlY3QuaGVpZ2h0KCkpIC8gKHBhaW50RW5kIC0gcGFpbnRTdGFydCk7Cisg
ICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJl
bmRlcmVyNC5BY2NlbFJvb3RQYWludER1cmF0aW9uTVMiLCAocGFpbnRFbmQgLSBwYWludFN0YXJ0
KSAqIDEwMDAsIDAsIDEyMCwgMzApOworICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+
aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQuQWNjZWxSb290UGFpbnRNZWdhcGl4UGVy
U2Vjb25kIiwgcGl4ZWxzUGVyU2VjIC8gMTAwMDAwMCwgMTAsIDIxMCwgMzApOwogCi0gICAgV2Vi
Vmlld0ltcGwqIG1fd2ViVmlld0ltcGw7Ci19OworICAgIHNldEJhY2tncm91bmRDb2xvcih2aWV3
LT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpKTsKK30KIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0
SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogewpAQCAtMzQ3OCw3
ICszNDYwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MuZGVmYXVs
dFRpbGVTaXplID0gc2V0dGluZ3NJbXBsKCktPmRlZmF1bHRUaWxlU2l6ZSgpOwogICAgICAgICBs
YXllclRyZWVWaWV3U2V0dGluZ3MubWF4VW50aWxlZExheWVyU2l6ZSA9IHNldHRpbmdzSW1wbCgp
LT5tYXhVbnRpbGVkTGF5ZXJTaXplKCk7CiAKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dEhvc3QgPSBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OmNyZWF0ZShXZWJWaWV3SW1wbENvbnRl
bnRQYWludGVyOjpjcmVhdGUodGhpcykpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKHRoaXMpOwogICAgICAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0U2hvd0RlYnVnQm9yZGVycyhwYWdlKCktPnNl
dHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKSk7CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LT5zZXRPcGFxdWUoIWlzVHJhbnNwYXJlbnQoKSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGEwODg5Njc4YTE0MDA3NDJjYzI2ZTBlYmZi
YmUyM2UxOThiOTJkMmUuLjhkMzBmNDRlZDBhMDU0ZTc1YjY5Njg0NTMwYmJmOWJkNjdjZWIzODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNTA1LDYgKzUw
NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKTsK
ICAgICB2b2lkIHNjcm9sbFJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Ny
b2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICB2b2lkIGlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lk
IHBhaW50Um9vdExheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAgICBOb25Db21wb3NpdGVkQ29udGVudEhvc3QqIG5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpOwogICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IFdlYkNvcmU6OkNvbG9yJik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGFhY2Q5YTVkNjkwZjMy
MTc0YjFlMmU5YTJlMjFiYmM5N2VhNmQwYzYuLjM0ZjQ5ZTkxZGJlZDFkZTQ0MzdhZDhjODc0N2Q5
MTM2OGExYmJmZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMTE1MCw3ICsxMTUwLDcgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0JikKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhTa0Nh
bnZhcyosIGNvbnN0IEludFJlY3QmLCBJbnRSZWN0JikKICAgICB7CiAgICAgICAgIC8vIFNldCBs
YXllciBvcGFjaXR5IHRvIDAuCiAgICAgICAgIG1fdGVzdC0+bGF5ZXJUcmVlSG9zdCgpLT5yb290
TGF5ZXIoKS0+c2V0T3BhY2l0eSgwKTsKQEAgLTEyNDQsNyArMTI0NCw3IEBAIGNsYXNzIE1vY2tD
b250ZW50TGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJs
aWM6CiAgICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
TU9DS19DT05TVF9NRVRIT0QwKHByZXNlcnZlczNELCBib29sKCkpOwotICAgIHZvaWQgcGFpbnRD
b250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdm9pZCBw
YWludENvbnRlbnRzKFNrQ2FudmFzKiwgY29uc3QgSW50UmVjdCYsIEludFJlY3QmKSB7IH0KICAg
ICB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpIHsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCA5NTQxNzRhYjc2
MzU3YTcxMzI0MDFhMWQwYTNjYzgzOGM4ZWQ5MWE5Li41ZTVmNzAxMDExODA1YWRkOGZmOGMzMTZj
YjFjOWM0ZWFiZTZlODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtNzAsNyArNzAsNyBAQCBwcml2YXRlOgogCiBjbGFz
cyBNb2NrTGF5ZXJQYWludGVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0g
ewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFNrQ2FudmFzKiwgY29uc3Qg
SW50UmVjdCYsIEludFJlY3QmKSB7IH0KIH07CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDFhOTdiYjViNzg0OWM1Y2JlNzk5OTM1MGNhZWFhNTk5MWE2
NDkyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0KLSNpbmNsdWRlICJC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiQml0bWFwU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIkZyYW1lQnVmZmVyU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKLQotI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+Ci0jaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0
cnVjdCBQYWludENhbGxiYWNrIHsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikgPSAwOwotfTsKLQotY2xhc3MgVGVzdExheWVyUGFp
bnRlckNocm9taXVtIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKLXB1YmxpYzoKLSAg
ICBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oUGFpbnRDYWxsYmFjayYgY2FsbGJhY2spIDogbV9j
YWxsYmFjayhjYWxsYmFjaykgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLSAgICB7Ci0gICAg
ICAgIG1fY2FsbGJhY2soY29udGV4dCwgY29udGVudFJlY3QpOwotICAgIH0KLQotICBwcml2YXRl
OgotICAgIFBhaW50Q2FsbGJhY2smIG1fY2FsbGJhY2s7Ci19OwotCi0vLyBQYWludCBjYWxsYmFj
ayBmdW5jdGlvbnMKLQotc3RydWN0IFBhaW50RmlsbE9wYXF1ZSA6IHB1YmxpYyBQYWludENhbGxi
YWNrIHsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotICAgIHsKLSAgICAgICAgQ29sb3Igb3Bh
cXVlKDI1NSwgMCwgMCwgMjU1KTsKLSAgICAgICAgSW50UmVjdCB0b3AoY29udGVudFJlY3QueCgp
LCBjb250ZW50UmVjdC55KCksIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdo
dCgpIC8gMik7Ci0gICAgICAgIEludFJlY3QgYm90dG9tKGNvbnRlbnRSZWN0LngoKSwgY29udGVu
dFJlY3QueSgpICsgY29udGVudFJlY3QuaGVpZ2h0KCkgLyAyLCBjb250ZW50UmVjdC53aWR0aCgp
LCBjb250ZW50UmVjdC5oZWlnaHQoKSAvIDIpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHRv
cCwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5maWxsUmVj
dChib3R0b20sIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgfQotfTsKLQotc3Ry
dWN0IFBhaW50RmlsbEFscGhhIDogcHVibGljIFBhaW50Q2FsbGJhY2sgewotICAgIHZpcnR1YWwg
dm9pZCBvcGVyYXRvcigpKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpCi0gICAgewotICAgICAgICBDb2xvciBhbHBoYSgwLCAwLCAwLCAwKTsKLSAg
ICAgICAgY29udGV4dC5maWxsUmVjdChjb250ZW50UmVjdCwgYWxwaGEsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwotICAgIH0KLX07Ci0KLXN0cnVjdCBQYWludEZpbGxQYXJ0aWFsT3BhcXVlIDogcHVi
bGljIFBhaW50Q2FsbGJhY2sgewotICAgIFBhaW50RmlsbFBhcnRpYWxPcGFxdWUoSW50UmVjdCBv
cGFxdWVSZWN0KQotICAgICAgICA6IG1fb3BhcXVlUmVjdChvcGFxdWVSZWN0KQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotICAgIHsKLSAgICAgICAgQ29sb3IgYWxw
aGEoMCwgMCwgMCwgMCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY29udGVudFJlY3QsIGFs
cGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLQotICAgICAgICBJbnRSZWN0IGZpbGxPcGFxdWUg
PSBtX29wYXF1ZVJlY3Q7Ci0gICAgICAgIGZpbGxPcGFxdWUuaW50ZXJzZWN0KGNvbnRlbnRSZWN0
KTsKLQotICAgICAgICBDb2xvciBvcGFxdWUoMjU1LCAyNTUsIDI1NSwgMjU1KTsKLSAgICAgICAg
Y29udGV4dC5maWxsUmVjdChmaWxsT3BhcXVlLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwotICAgIH0KLQotICAgIEludFJlY3QgbV9vcGFxdWVSZWN0OwotfTsKLQotI2RlZmluZSBFWFBF
Q1RfRVFfUkVDVChhLCBiKSBcCi0gICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKLSAgICBF
WFBFQ1RfRVEoYS5tYXhYKCksIGIubWF4WCgpKTsgXAotICAgIEVYUEVDVF9FUShhLnkoKSwgYi55
KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEubWF4WSgpLCBiLm1heFkoKSk7Ci0KLVRFU1QoTGF5ZXJU
ZXh0dXJlVXBkYXRlclRlc3QsIHRlc3RPcGFxdWVSZWN0UHJlc2VudEFmdGVyT3BhcXVlUGFpbnQp
Ci17Ci0gICAgUGFpbnRGaWxsT3BhcXVlIGZpbGxPcGFxdWU7Ci0gICAgUmVmUHRyPExheWVyVGV4
dHVyZVVwZGF0ZXI+IHVwZGF0ZXI7Ci0gICAgSW50UmVjdCBvcGFxdWVSZWN0OwotICAgIE93blB0
cjxUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXI7Ci0KLSAgICBvcGFxdWVSZWN0ID0g
SW50UmVjdCgpOwotICAgIHBhaW50ZXIgPSBhZG9wdFB0cihuZXcgVGVzdExheWVyUGFpbnRlckNo
cm9taXVtKGZpbGxPcGFxdWUpKTsKLSAgICB1cGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVsZWFzZSgpLCBmYWxzZSk7Ci0gICAgdXBkYXRl
ci0+cHJlcGFyZVRvVXBkYXRlKEludFJlY3QoMCwgMCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwg
NDAwKSwgMCwgMSwgb3BhcXVlUmVjdCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAw
LCA0MDAsIDQwMCksIG9wYXF1ZVJlY3QpOwotCi0gICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsK
LSAgICBwYWludGVyID0gYWRvcHRQdHIobmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxs
T3BhcXVlKSk7Ci0gICAgdXBkYXRlciA9IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVhc2UoKSwgZmFsc2UpOwotICAgIHVwZGF0ZXIt
PnByZXBhcmVUb1VwZGF0ZShJbnRSZWN0KDAsIDAsIDQwMCwgNDAwKSwgSW50U2l6ZSg0MDAsIDQw
MCksIDAsIDEsIG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwg
NDAwLCA0MDApLCBvcGFxdWVSZWN0KTsKLQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0g
ICAgcGFpbnRlciA9IGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbE9w
YXF1ZSkpOwotICAgIHVwZGF0ZXIgPSBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVhc2UoKSk7Ci0gICAgdXBkYXRlci0+cHJl
cGFyZVRvVXBkYXRlKEludFJlY3QoMCwgMCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwg
MCwgMSwgb3BhcXVlUmVjdCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCA0MDAs
IDQwMCksIG9wYXF1ZVJlY3QpOwotfQotCi1URVNUKExheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LCB0
ZXN0T3BhcXVlUmVjdE5vdFByZXNlbnRBZnRlck5vbk9wYXF1ZVBhaW50KQotewotICAgIFBhaW50
RmlsbEFscGhhIGZpbGxBbHBoYTsKLSAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gdXBk
YXRlcjsKLSAgICBJbnRSZWN0IG9wYXF1ZVJlY3Q7Ci0gICAgT3duUHRyPFRlc3RMYXllclBhaW50
ZXJDaHJvbWl1bT4gcGFpbnRlcjsKLQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAg
cGFpbnRlciA9IGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbEFscGhh
KSk7Ci0gICAgdXBkYXRlciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZShwYWludGVyLnJlbGVhc2UoKSwgZmFsc2UpOwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0
ZShJbnRSZWN0KDAsIDAsIDQwMCwgNDAwKSwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIDEsIG9wYXF1
ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJl
Y3QpOwotCi0gICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQ
dHIobmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxsQWxwaGEpKTsKLSAgICB1cGRhdGVy
ID0gQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50
ZXIucmVsZWFzZSgpLCBmYWxzZSk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKEludFJl
Y3QoMCwgMCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgMSwgb3BhcXVlUmVjdCk7
Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb3BhcXVlUmVjdCk7Ci0K
LSAgICBvcGFxdWVSZWN0ID0gSW50UmVjdCgpOwotICAgIHBhaW50ZXIgPSBhZG9wdFB0cihuZXcg
VGVzdExheWVyUGFpbnRlckNocm9taXVtKGZpbGxBbHBoYSkpOwotICAgIHVwZGF0ZXIgPSBGcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShwYWludGVy
LnJlbGVhc2UoKSk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKEludFJlY3QoMCwgMCwg
NDAwLCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgMSwgb3BhcXVlUmVjdCk7Ci0gICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb3BhcXVlUmVjdCk7Ci19Ci0KLVRFU1Qo
TGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QsIHRlc3RPcGFxdWVSZWN0Tm90UHJlc2VudEZvck9wYXF1
ZUxheWVyV2l0aE9wYXF1ZVBhaW50KQotewotICAgIFBhaW50RmlsbE9wYXF1ZSBmaWxsT3BhcXVl
OwotICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB1cGRhdGVyOwotICAgIEludFJlY3Qg
b3BhcXVlUmVjdDsKLSAgICBPd25QdHI8VGVzdExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVy
OwotCi0gICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQdHIo
bmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxsT3BhcXVlKSk7Ci0gICAgdXBkYXRlciA9
IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVhc2Uo
KSwgZmFsc2UpOwotICAgIHVwZGF0ZXItPnNldE9wYXF1ZSh0cnVlKTsKLSAgICB1cGRhdGVyLT5w
cmVwYXJlVG9VcGRhdGUoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0MDAp
LCAwLCAxLCBvcGFxdWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAs
IDApLCBvcGFxdWVSZWN0KTsKLQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgcGFp
bnRlciA9IGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbE9wYXF1ZSkp
OwotICAgIHVwZGF0ZXIgPSBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCksIGZhbHNlKTsKLSAgICB1cGRhdGVyLT5zZXRPcGFx
dWUodHJ1ZSk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKEludFJlY3QoMCwgMCwgNDAw
LCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgMSwgb3BhcXVlUmVjdCk7Ci0gICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb3BhcXVlUmVjdCk7Ci0KLSAgICBvcGFxdWVS
ZWN0ID0gSW50UmVjdCgpOwotICAgIHBhaW50ZXIgPSBhZG9wdFB0cihuZXcgVGVzdExheWVyUGFp
bnRlckNocm9taXVtKGZpbGxPcGFxdWUpKTsKLSAgICB1cGRhdGVyID0gRnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCkp
OwotICAgIHVwZGF0ZXItPnNldE9wYXF1ZSh0cnVlKTsKLSAgICB1cGRhdGVyLT5wcmVwYXJlVG9V
cGRhdGUoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0MDApLCAwLCAxLCBv
cGFxdWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvcGFx
dWVSZWN0KTsKLX0KLQotVEVTVChMYXllclRleHR1cmVVcGRhdGVyVGVzdCwgdGVzdE9wYXF1ZVJl
Y3ROb3RQcmVzZW50Rm9yT3BhcXVlTGF5ZXJXaXRoTm9uT3BhcXVlUGFpbnQpCi17Ci0gICAgUGFp
bnRGaWxsQWxwaGEgZmlsbEFscGhhOwotICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB1
cGRhdGVyOwotICAgIEludFJlY3Qgb3BhcXVlUmVjdDsKLSAgICBPd25QdHI8VGVzdExheWVyUGFp
bnRlckNocm9taXVtPiBwYWludGVyOwotCi0gICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAg
ICBwYWludGVyID0gYWRvcHRQdHIobmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxsQWxw
aGEpKTsKLSAgICB1cGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3Jl
YXRlKHBhaW50ZXIucmVsZWFzZSgpLCBmYWxzZSk7Ci0gICAgdXBkYXRlci0+c2V0T3BhcXVlKHRy
dWUpOwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShJbnRSZWN0KDAsIDAsIDQwMCwgNDAw
KSwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIDEsIG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJlY3QpOwotCi0gICAgb3BhcXVlUmVjdCA9
IEludFJlY3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQdHIobmV3IFRlc3RMYXllclBhaW50ZXJD
aHJvbWl1bShmaWxsQWxwaGEpKTsKLSAgICB1cGRhdGVyID0gQml0bWFwU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVsZWFzZSgpLCBmYWxzZSk7Ci0g
ICAgdXBkYXRlci0+c2V0T3BhcXVlKHRydWUpOwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0
ZShJbnRSZWN0KDAsIDAsIDQwMCwgNDAwKSwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIDEsIG9wYXF1
ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJl
Y3QpOwotCi0gICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQ
dHIobmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxsQWxwaGEpKTsKLSAgICB1cGRhdGVy
ID0gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUo
cGFpbnRlci5yZWxlYXNlKCkpOwotICAgIHVwZGF0ZXItPnNldE9wYXF1ZSh0cnVlKTsKLSAgICB1
cGRhdGVyLT5wcmVwYXJlVG9VcGRhdGUoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUo
NDAwLCA0MDApLCAwLCAxLCBvcGFxdWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDAsIDAsIDAsIDApLCBvcGFxdWVSZWN0KTsKLX0KLQotVEVTVChMYXllclRleHR1cmVVcGRhdGVy
VGVzdCwgdGVzdFBhcnRpYWxPcGFxdWVSZWN0Tm9UcmFuc2Zvcm0pCi17Ci0gICAgSW50UmVjdCBw
YXJ0aWFsUmVjdCgxMDAsIDIwMCwgNTAsIDc1KTsKLSAgICBQYWludEZpbGxQYXJ0aWFsT3BhcXVl
IGZpbGxQYXJ0aWFsKHBhcnRpYWxSZWN0KTsKLSAgICBPd25QdHI8VGVzdExheWVyUGFpbnRlckNo
cm9taXVtPiBwYWludGVyKGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmls
bFBhcnRpYWwpKSk7Ci0gICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHVwZGF0ZXIgPSBC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCks
IGZhbHNlKTsKLQotICAgIEludFJlY3Qgb3BhcXVlUmVjdDsKLSAgICB1cGRhdGVyLT5wcmVwYXJl
VG9VcGRhdGUoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0MDApLCAwLCAx
LCBvcGFxdWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChwYXJ0aWFsUmVjdCwgb3BhcXVlUmVj
dCk7Ci19Ci0KLVRFU1QoTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QsIHRlc3RQYXJ0aWFsT3BhcXVl
UmVjdFRyYW5zbGF0aW9uKQotewotICAgIEludFJlY3QgcGFydGlhbFJlY3QoMTAwLCAyMDAsIDUw
LCA3NSk7Ci0gICAgUGFpbnRGaWxsUGFydGlhbE9wYXF1ZSBmaWxsUGFydGlhbChwYXJ0aWFsUmVj
dCk7Ci0KLSAgICBPd25QdHI8VGVzdExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKGFkb3B0
UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbFBhcnRpYWwpKSk7Ci0gICAgUmVm
UHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHVwZGF0ZXIgPSBCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCksIGZhbHNlKTsKLQotICAgIEludFJl
Y3Qgb3BhcXVlUmVjdDsKLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KDExLCAxMiwgMzg5LCAzODgp
OwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50UmVjdCwgSW50U2l6ZSg0MDAs
IDQwMCksIDAsIDEsIG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9SRUNUKHBhcnRpYWxSZWN0
LCBvcGFxdWVSZWN0KTsKLX0KLQotVEVTVChMYXllclRleHR1cmVVcGRhdGVyVGVzdCwgdGVzdFBh
cnRpYWxPcGFxdWVSZWN0U2NhbGUpCi17Ci0gICAgZmxvYXQgY29udGVudHNTY2FsZSA9IDAuNTsK
LQotICAgIEludFJlY3QgcGFydGlhbFJlY3QoOSwgMjAsIDUwLCA3NSk7Ci0gICAgSW50UmVjdCBw
YXJ0aWFsRGV2aWNlUmVjdChwYXJ0aWFsUmVjdCk7Ci0gICAgUGFpbnRGaWxsUGFydGlhbE9wYXF1
ZSBmaWxsUGFydGlhbChwYXJ0aWFsRGV2aWNlUmVjdCk7Ci0gICAgT3duUHRyPFRlc3RMYXllclBh
aW50ZXJDaHJvbWl1bT4gcGFpbnRlcihhZG9wdFB0cihuZXcgVGVzdExheWVyUGFpbnRlckNocm9t
aXVtKGZpbGxQYXJ0aWFsKSkpOwotICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB1cGRh
dGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVs
ZWFzZSgpLCBmYWxzZSk7Ci0KLSAgICBJbnRSZWN0IG9wYXF1ZVJlY3Q7Ci0gICAgSW50UmVjdCBj
b250ZW50UmVjdCg0LCA2LCAzOTYsIDM5NCk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBkYXRl
KGNvbnRlbnRSZWN0LCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgY29udGVudHNTY2FsZSwgb3BhcXVl
UmVjdCk7Ci0KLSAgICAvLyBPcmlnaW5hbCByZWN0OiA5LCAyMCwgNTAsIDc1Ci0gICAgLy8gU2Nh
bGVkIGRvd24gdG8gaGFsZiBzaXplOiA0LjUsIDEwLCAyNSwgMzcuNQotICAgIC8vIEVuY2xvc2Vk
IGludCByZWN0OiA1LCAxMCwgMjQsIDM3Ci0gICAgLy8gU2NhbGVkIGJhY2sgdXAgdG8gY29udGVu
dDogMTAsIDIwLCA0OCwgNzQKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QoMTAsIDIwLCA0OCwgNzQp
OwotICAgIEVYUEVDVF9FUV9SRUNUKHNjYWxlZFJlY3QsIG9wYXF1ZVJlY3QpOwotfQotCi19IC8v
IG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9PcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRl
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE3OGFlOTU1Y2M2MzRjMDJkYzc5ZGMzMWI1OWQ1ZTgzN2MzZmI1
MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL09wYXF1
ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdC5jcHAKQEAgLTAsMCArMSwxOTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIk9wYXF1
ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJDb2xvci5o
IgorI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorCisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisK
K3N0cnVjdCBQYWludENhbGxiYWNrIHsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikgPSAwOworfTsKKworY2xhc3MgVGVzdExheWVy
UGFpbnRlckNocm9taXVtIDogcHVibGljIEdyYXBoaWNzQ29udGV4dFBhaW50ZXIgeworcHVibGlj
OgorICAgIFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShQYWludENhbGxiYWNrJiBjYWxsYmFjaykg
OiBtX2NhbGxiYWNrKGNhbGxiYWNrKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBPVkVSUklE
RQorICAgIHsKKyAgICAgICAgbV9jYWxsYmFjayhjb250ZXh0LCBjb250ZW50UmVjdCk7CisgICAg
fQorCisgIHByaXZhdGU6CisgICAgUGFpbnRDYWxsYmFjayYgbV9jYWxsYmFjazsKK307CisKKy8v
IFBhaW50IGNhbGxiYWNrIGZ1bmN0aW9ucworCitzdHJ1Y3QgUGFpbnRGaWxsT3BhcXVlIDogcHVi
bGljIFBhaW50Q2FsbGJhY2sgeworICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIE9WRVJSSURFCisg
ICAgeworICAgICAgICBDb2xvciBvcGFxdWUoMjU1LCAwLCAwLCAyNTUpOworICAgICAgICBJbnRS
ZWN0IHRvcChjb250ZW50UmVjdC54KCksIGNvbnRlbnRSZWN0LnkoKSwgY29udGVudFJlY3Qud2lk
dGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgSW50UmVjdCBib3R0b20o
Y29udGVudFJlY3QueCgpLCBjb250ZW50UmVjdC55KCkgKyBjb250ZW50UmVjdC5oZWlnaHQoKSAv
IDIsIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpIC8gMik7CisgICAg
ICAgIGNvbnRleHQuZmlsbFJlY3QodG9wLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
ICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGJvdHRvbSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgUGFpbnRGaWxsQWxwaGEgOiBwdWJsaWMgUGFpbnRD
YWxsYmFjayB7CisgICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKKyAgICB7CisgICAgICAgIENvbG9y
IGFscGhhKDAsIDAsIDAsIDApOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGNvbnRlbnRSZWN0
LCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgfQorfTsKKworc3RydWN0IFBhaW50
RmlsbFBhcnRpYWxPcGFxdWUgOiBwdWJsaWMgUGFpbnRDYWxsYmFjayB7CisgICAgUGFpbnRGaWxs
UGFydGlhbE9wYXF1ZShJbnRSZWN0IG9wYXF1ZVJlY3QpCisgICAgICAgIDogbV9vcGFxdWVSZWN0
KG9wYXF1ZVJlY3QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigp
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCisg
ICAgeworICAgICAgICBDb2xvciBhbHBoYSgwLCAwLCAwLCAwKTsKKyAgICAgICAgY29udGV4dC5m
aWxsUmVjdChjb250ZW50UmVjdCwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAg
ICAgIEludFJlY3QgZmlsbE9wYXF1ZSA9IG1fb3BhcXVlUmVjdDsKKyAgICAgICAgZmlsbE9wYXF1
ZS5pbnRlcnNlY3QoY29udGVudFJlY3QpOworCisgICAgICAgIENvbG9yIG9wYXF1ZSgyNTUsIDI1
NSwgMjU1LCAyNTUpOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGZpbGxPcGFxdWUsIG9wYXF1
ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgfQorCisgICAgSW50UmVjdCBtX29wYXF1ZVJl
Y3Q7Cit9OworCisjZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEo
YS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9FUShhLm1heFgoKSwgYi5tYXhYKCkpOyBcCisg
ICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5tYXhZKCksIGIu
bWF4WSgpKTsKKworY2xhc3MgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGVU
ZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIE9wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCgpCisgICAgICAgIDogbV9za0NhbnZhcyhhZG9w
dFB0cihza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMoY2FudmFzUmVjdCgpLndpZHRoKCksIGNhbnZh
c1JlY3QoKS5oZWlnaHQoKSwgZmFsc2UpKSkKKyAgICB7CisgICAgfQorCisgICAgU2tDYW52YXMq
IHNrQ2FudmFzKCkgeyByZXR1cm4gbV9za0NhbnZhcy5nZXQoKTsgfQorICAgIEludFJlY3QgY2Fu
dmFzUmVjdCgpIHsgcmV0dXJuIEludFJlY3QoMCwgMCwgNDAwLCA0MDApOyB9CisKK3ByaXZhdGU6
CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX3NrQ2FudmFzOworfTsKKworVEVTVF9GKE9wYXF1ZVJl
Y3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCwgdGVzdE9wYXF1ZVJlY3RQcmVzZW50
QWZ0ZXJPcGFxdWVQYWludCkKK3sKKyAgICBQYWludEZpbGxPcGFxdWUgZmlsbE9wYXF1ZTsKKyAg
ICBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0gcGFpbnRlcihmaWxsT3BhcXVlKTsKKworICAgIE9w
YXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlIGRlbGVnYXRlKCZwYWludGVyKTsK
KworICAgIEludFJlY3Qgb3BhcXVlUmVjdDsKKyAgICBkZWxlZ2F0ZS5wYWludENvbnRlbnRzKHNr
Q2FudmFzKCksIGNhbnZhc1JlY3QoKSwgb3BhcXVlUmVjdCk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIG9wYXF1ZVJlY3QpOworfQorCitURVNUX0YoT3BhcXVl
UmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGVUZXN0LCB0ZXN0T3BhcXVlUmVjdE5vdFBy
ZXNlbnRBZnRlck5vbk9wYXF1ZVBhaW50KQoreworICAgIFBhaW50RmlsbEFscGhhIGZpbGxBbHBo
YTsKKyAgICBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0gcGFpbnRlcihmaWxsQWxwaGEpOworICAg
IE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlIGRlbGVnYXRlKCZwYWludGVy
KTsKKworICAgIEludFJlY3Qgb3BhcXVlUmVjdDsKKyAgICBkZWxlZ2F0ZS5wYWludENvbnRlbnRz
KHNrQ2FudmFzKCksIGNhbnZhc1JlY3QoKSwgb3BhcXVlUmVjdCk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb3BhcXVlUmVjdCk7Cit9CisKK1RFU1RfRihPcGFxdWVS
ZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QsIHRlc3RPcGFxdWVSZWN0Tm90UHJl
c2VudEZvck9wYXF1ZUxheWVyV2l0aE9wYXF1ZVBhaW50KQoreworICAgIFBhaW50RmlsbE9wYXF1
ZSBmaWxsT3BhcXVlOworICAgIFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bSBwYWludGVyKGZpbGxP
cGFxdWUpOworICAgIE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlIGRlbGVn
YXRlKCZwYWludGVyKTsKKworICAgIGRlbGVnYXRlLnNldE9wYXF1ZSh0cnVlKTsKKworICAgIElu
dFJlY3Qgb3BhcXVlUmVjdDsKKyAgICBkZWxlZ2F0ZS5wYWludENvbnRlbnRzKHNrQ2FudmFzKCks
IGNhbnZhc1JlY3QoKSwgb3BhcXVlUmVjdCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgw
LCAwLCAwLCAwKSwgb3BhcXVlUmVjdCk7Cit9CisKK1RFU1RfRihPcGFxdWVSZWN0VHJhY2tpbmdD
b250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QsIHRlc3RPcGFxdWVSZWN0Tm90UHJlc2VudEZvck9wYXF1
ZUxheWVyV2l0aE5vbk9wYXF1ZVBhaW50KQoreworICAgIFBhaW50RmlsbE9wYXF1ZSBmaWxsQWxw
aGE7CisgICAgVGVzdExheWVyUGFpbnRlckNocm9taXVtIHBhaW50ZXIoZmlsbEFscGhhKTsKKyAg
ICBPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSgmcGFpbnRl
cik7CisKKyAgICBkZWxlZ2F0ZS5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBJbnRSZWN0IG9wYXF1
ZVJlY3Q7CisgICAgZGVsZWdhdGUucGFpbnRDb250ZW50cyhza0NhbnZhcygpLCBjYW52YXNSZWN0
KCksIG9wYXF1ZVJlY3QpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMCwgMCks
IG9wYXF1ZVJlY3QpOworfQorCitURVNUX0YoT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVy
RGVsZWdhdGVUZXN0LCB0ZXN0UGFydGlhbE9wYXF1ZVJlY3ROb1RyYW5zZm9ybSkKK3sKKyAgICBJ
bnRSZWN0IHBhcnRpYWxSZWN0KDEwMCwgMjAwLCA1MCwgNzUpOworICAgIFBhaW50RmlsbFBhcnRp
YWxPcGFxdWUgZmlsbFBhcnRpYWwocGFydGlhbFJlY3QpOworICAgIFRlc3RMYXllclBhaW50ZXJD
aHJvbWl1bSBwYWludGVyKGZpbGxQYXJ0aWFsKTsKKyAgICBPcGFxdWVSZWN0VHJhY2tpbmdDb250
ZW50TGF5ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSgmcGFpbnRlcik7CisKKyAgICBJbnRSZWN0IG9wYXF1
ZVJlY3Q7CisgICAgZGVsZWdhdGUucGFpbnRDb250ZW50cyhza0NhbnZhcygpLCBjYW52YXNSZWN0
KCksIG9wYXF1ZVJlY3QpOworICAgIEVYUEVDVF9FUV9SRUNUKHBhcnRpYWxSZWN0LCBvcGFxdWVS
ZWN0KTsKK30KKworVEVTVF9GKE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRl
VGVzdCwgdGVzdFBhcnRpYWxPcGFxdWVSZWN0VHJhbnNsYXRpb24pCit7CisgICAgSW50UmVjdCBw
YXJ0aWFsUmVjdCgxMDAsIDIwMCwgNTAsIDc1KTsKKyAgICBQYWludEZpbGxQYXJ0aWFsT3BhcXVl
IGZpbGxQYXJ0aWFsKHBhcnRpYWxSZWN0KTsKKyAgICBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0g
cGFpbnRlcihmaWxsUGFydGlhbCk7CisgICAgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVy
RGVsZWdhdGUgZGVsZWdhdGUoJnBhaW50ZXIpOworCisgICAgSW50UmVjdCBvcGFxdWVSZWN0Owor
ICAgIEludFJlY3QgY29udGVudFJlY3QoMTEsIDEyLCAzODksIDM4OCk7CisgICAgZGVsZWdhdGUu
cGFpbnRDb250ZW50cyhza0NhbnZhcygpLCBjb250ZW50UmVjdCwgb3BhcXVlUmVjdCk7CisgICAg
RVhQRUNUX0VRX1JFQ1QocGFydGlhbFJlY3QsIG9wYXF1ZVJlY3QpOworfQorCit9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147445</attachid>
            <date>2012-06-13 16:57:34 -0700</date>
            <delta_ts>2012-06-13 18:28:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89031-20120613165734.patch</filename>
            <type>text/plain</type>
            <size>77861</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjg2ZjFlY2NlZjBhYzVk
YzgwY2VkZDhhNzIwYTdjNzNjYTA5N2QxNy4uYjA0NmRkYWUwYTlmM2UyZjJhNmRlYWI4MjIzMTMy
OWRkZjQ1NjhhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTA2LTEzICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIG9wYXF1ZSByZWN0YW5nbGUgdHJhY2tpbmcgbG9naWMgb3V0IG9mIGNvbXBvc2l0b3IgY29y
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1v
dmVzIHRoZSBvcGFxdWUgcGFpbnQgdHJhY2tpbmcgbG9naWMgZnJvbSB0aGUgY29tcG9zaXRvciAo
c3BlY2lmaWNhbGx5IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpIG91dCB0byBhCisgICAgICAg
IGRlZGljYXRlZCBjbGFzcyB1c2VkIGJ5IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSBmb3IgR3JhcGhp
Y3NDb250ZXh0LXBhaW50ZWQgY29udGVudC4gVGhpcyBjaGFuZ2VzIHRoZSBpbnRlcmZhY2UKKyAg
ICAgICAgZXhwb3NlZCBieSB0aGUgY29tcG9zaXRvciB0byBwYXNzIGEgU2tDYW52YXMgYW5kIGxl
dCB0aGUgdXNlciBmaWxsIGluIGFuIG9wYXF1ZSByZWN0IGlmIG5lZWRlZC4gQ2FsbGVycyB0aGF0
IGFyZQorICAgICAgICB1c2luZyBHcmFwaGljc0NvbnRleHQgdG8gcGFpbnQgY2FuIGluc3RhbnRp
YXRlIGEgUGxhdGZvcm1Db250ZXh0U2tpYSAvIEdyYXBoaWNzQ29udGV4dCBhcm91bmQgdGhpcyBT
a0NhbnZhcyBpZgorICAgICAgICB0aGV5IGNob29zZSB0bywgb3IgdXNlIHNvbWUgb3RoZXIgc3Ry
YXRlZ3ksIG9yIG5vdCBmaWxsIGl0IGluIGF0IGFsbC4gVGhpcyBhdm9pZHMgY3JlYXRpbmcgZXh0
cmEgd3JhcHBlciBjbGFzc2VzCisgICAgICAgIGlmIHRoZSBldmVudHVhbCBjYWxsZXIgaXMgZ29p
bmcgdG8gdXNlIHRoZSB1bmRlcmx5aW5nIFNrQ2FudmFzIGFueXdheSAoc3VjaCBhcyBXZWJDb250
ZW50TGF5ZXIpIGFuZCBicmVha3MgdGhlCisgICAgICAgIGRlcGVuZGVuY3kgZnJvbSB0aGUgY29t
cG9zaXRvciBjb2RlIG9uIEdyYXBoaWNzQ29udGV4dCAvIFBsYXRmb3JtQ29udGV4dFNraWEuCisK
KyAgICAgICAgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUgaXMgYSBoZWxw
ZXIgY2xhc3MgdGhhdCB3cmFwcyBhIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9u
IHdpdGgKKyAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSdzIG9wYXF1ZSByZWdpb24gdHJhY2tp
bmcgbG9naWMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFx
dWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllclBhaW50ZXI6OnBhaW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9taXVtKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoTGF5ZXJQYWludGVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hs
aWdodDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGlua0hpZ2hsaWdodC5oOgorICAgICAgICAoTGlua0hpZ2hsaWdodCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVy
RGVsZWdhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGU6Ok9wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlOjp+T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExh
eWVyRGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVjdFRyYWNraW5nQ29udGVu
dExheWVyRGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHRQYWludGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBhaW50ZXI6On5HcmFwaGljc0Nv
bnRleHRQYWludGVyKToKKyAgICAgICAgKE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRl
bGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXll
ckRlbGVnYXRlOjpzZXRPcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsYXRmb3JtQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpQYWludGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTA2LTEyICBKYW1lcyBSb2JpbnNv
biAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSRUdSRVNTSU9O
KDExOTc2OSk6IENhbnZhczJETGF5ZXJCcmlkZ2UgbWF5IGdvIGF3YXkgYmVmb3JlIGl0cyBUZXh0
dXJlTGF5ZXJDaHJvbWl1bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjYzFkZmViZWJk
ODJlN2EwZjA0MWFkODc5ZDNhZTMyOGZhZjVkZTYwLi5lNTc4YzFjZGU1YTVjZTJmYTlhYjE5ZTMz
NjNhY2QyZjIyM2RkMjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1
IEBACisyMDEyLTA2LTEzICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIG9wYXF1ZSByZWN0YW5nbGUgdHJhY2tpbmcgbG9naWMg
b3V0IG9mIGNvbXBvc2l0b3IgY29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlcyB0aGUgZ3JheXNjYWxlL3N1YnBpeGVsIEFBIHRleHQgZGVjaXNp
b24gaW50byBOb25Db21wb3NpdGVkQ29udGVudEhvc3QgYW5kIHJlbW92ZXMgb25lIGxheWVyIG9m
IGluZGlyZWN0aW9uCisgICAgICAgIGJldHdlbiBOQ0NIIGFuZCBXVkkgdGhhdCBleGlzdGVkIG9u
bHkgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4KKworICAgICAgICBQb3J0cyB0aGUgb3BhcXVlIHJl
Y3QgdHJhY2tpbmcgdGVzdHMgdGhhdCB3ZXJlIGluIExheWVyVGV4dHVyZVVwZGF0ZXJUZXN0IHRv
CisgICAgICAgIE9wYXF1ZXJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCB0byBy
ZWZsZWN0IHRoZSBtb3ZlIGluIHJlc3BvbnNpYmlsaXRpZXMuCisKKyAgICAgICAgKiBXZWJLaXQu
Z3lwaToKKyAgICAgICAgKiBzcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpOb25Db21wb3NpdGVkQ29udGVu
dEhvc3QpOgorICAgICAgICAoV2ViS2l0OjpOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnNldE9w
YXF1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6cGFpbnRD
b250ZW50cyk6CisgICAgICAgICogc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpOb25D
b21wb3NpdGVkQ29udGVudEhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChOb25Db21wb3NpdGVkQ29u
dGVudEhvc3QpOgorICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyk6CisgICAgICAg
ICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvbnRlbnRMYXllcklt
cGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpwYWludFJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorICAgICAgICAqIHRlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpUZXN0T3BhY2l0eUNoYW5nZUxheWVy
RGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV1RGOjpNb2NrQ29udGVudExheWVy
RGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHRlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogdGVzdHMvT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVs
ZWdhdGVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBhaW50
Q2FsbGJhY2spOgorICAgICAgICAoVGVzdExheWVyUGFpbnRlckNocm9taXVtKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RMYXllclBhaW50ZXJDaHJvbWl1bTo6VGVzdExheWVyUGFpbnRlckNocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50RmlsbEFscGhhOjpvcGVyYXRvcigpKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhaW50RmlsbFBhcnRpYWxPcGFxdWU6OlBhaW50RmlsbFBhcnRpYWxP
cGFxdWUpOgorICAgICAgICAoUGFpbnRGaWxsUGFydGlhbE9wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYWludEZpbGxQYXJ0aWFsT3BhcXVlOjpvcGVyYXRvcigpKToKKyAgICAgICAgKE9wYXF1
ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3Q6Ok9wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpPcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3Q6OnNrQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdDo6
Y2FudmFzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorCiAyMDEyLTA2LTEyICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBSRUdSRVNTSU9OKDExOTc2OSk6IENhbnZhczJETGF5ZXJCcmlkZ2UgbWF5IGdvIGF3YXkgYmVm
b3JlIGl0cyBUZXh0dXJlTGF5ZXJDaHJvbWl1bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDdhMjFjYjVi
MjVlM2NlMjIyYjBkNzRkYWM3MjJhY2YwNWZlNjBiMmQuLmFmZGQ2ZjY1Yzc2NTBlMGMzMmFiMTFi
Njg2YTJlMDU1NGNmZDUyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2MjEsNiArMzYyMSw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4
dHVyZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBs
YXllclByaXZhdGVDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGxhdGZvcm1Db2xvci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0
bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggZDIwNWExN2ZmZWQ4NTIyMGI4
MGRhMWViNTBiYTFmZmRhZTQwYjk5ZC4uZjg1Mjg1ZjNiZjI2MmJkMzgyM2ExOTI0N2ZmM2Q5OTAz
NTJhYjYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCisjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTgsNiArNTksNyBAQCBQYXNzUmVmUHRyPEJpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6
OmNyZQogCiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIs
IGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCiAgICAgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KHBhaW50ZXIpCisgICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAsIG1fdGV4U3ViSW1hZ2UodXNl
TWFwVGV4U3ViSW1hZ2UpCiB7CiB9CkBAIC03OCwzNSArODAsMzUgQEAgTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6
OnNhbXBsZWQKICAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZv
cm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOwog
fQogCi12b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGlu
dCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3VsdGluZ09w
YXF1ZVJlY3QpCit2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpCiB7
CiAgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOwogCi0gICAgYm9v
bCBsYXllcklzT3BhcXVlID0gbV9jYW52YXMub3BhcXVlKCk7Ci0KLSAgICBtX2NhbnZhcy5yZXNp
emUoY29udGVudFJlY3Quc2l6ZSgpKTsKLSAgICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlz
IHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKLSAgICAvLyBsYXll
ciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQg
bWlnaHQgYmUKLSAgICAvLyB0cmFuc2Zvcm1lZCwgZHJhdyB0aGUgdGV4dCBpbiBncmF5c2NhbGUg
aW5zdGVhZCBvZiBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgYm9vbCB1c2VHcmF5c2NhbGVU
ZXh0ID0gYm9yZGVyVGV4ZWxzIHx8ICFsYXllcklzT3BhcXVlOwotICAgIFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQotICAgICAgICB1c2VHcmF5c2NhbGVU
ZXh0ID8gUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNh
bnZhczo6UGFpbnRlcjo6U3VicGl4ZWxUZXh0OwotICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVy
IGNhbnZhc1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKLSAgICBjYW52YXNQYWludGVy
LnNraWFDb250ZXh0KCktPnNldFRyYWNrT3BhcXVlUmVnaW9uKCFsYXllcklzT3BhcXVlKTsKLSAg
ICBwYWludENvbnRlbnRzKCpjYW52YXNQYWludGVyLmNvbnRleHQoKSwgKmNhbnZhc1BhaW50ZXIu
c2tpYUNvbnRleHQoKSwgY29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUsIHJlc3VsdGluZ09wYXF1
ZVJlY3QpOworICAgIGlmIChtX2NhbnZhc1NpemUgIT0gY29udGVudFJlY3Quc2l6ZSgpKSB7Cisg
ICAgICAgIG1fY2FudmFzU2l6ZSA9IGNvbnRlbnRSZWN0LnNpemUoKTsKKyAgICAgICAgbV9jYW52
YXMgPSBhZG9wdFB0cihza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMobV9jYW52YXNTaXplLndpZHRo
KCksIG1fY2FudmFzU2l6ZS5oZWlnaHQoKSwgbV9vcGFxdWUpKTsKKyAgICB9CisKKyAgICBwYWlu
dENvbnRlbnRzKG1fY2FudmFzLmdldCgpLCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSwgcmVz
dWx0aW5nT3BhcXVlUmVjdCk7CiB9CiAKIHZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogewotICAgIFBsYXRm
b3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOworICAgIGNvbnN0IFNrQml0
bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7
CisgICAgYml0bWFwLmxvY2tQaXhlbHMoKTsKIAogICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKGNv
bnRleHQsIGFsbG9jYXRvcik7Ci0gICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVs
cygpLCBjb250ZW50UmVjdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0
KCksIGNvbnRleHQpOworICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihiaXRtYXAuZ2V0UGl4ZWxzKCkpLCBjb250ZW50UmVjdCgpLCBzb3VyY2VSZWN0
LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRleHQpOworICAgIGJpdG1hcC51bmxv
Y2tQaXhlbHMoKTsKIH0KIAogdm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpz
ZXRPcGFxdWUoYm9vbCBvcGFxdWUpCiB7Ci0gICAgbV9jYW52YXMuc2V0T3BhcXVlKG9wYXF1ZSk7
CisgICAgaWYgKG9wYXF1ZSAhPSBtX29wYXF1ZSkgeworICAgICAgICBtX2NhbnZhcy5jbGVhcigp
OworICAgICAgICBtX2NhbnZhc1NpemUgPSBJbnRTaXplKCk7CisgICAgfQorICAgIG1fb3BhcXVl
ID0gb3BhcXVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggNmZmN2M2Mzk2YWMwNjhm
ZmVmNGY1OGE3MWY4YTE0OWYxMTk3Y2MwNS4uM2M5NTM4MGNlOTMyYWNmNDhhOWI1ZjIwODFhNGE4
YzI3OGVkNjJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaApAQCAtMzEsMTMgKzMxLDE0IEBACiAKICNpbmNsdWRlICJDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybUNhbnZhcy5oIgorCitjbGFzcyBTa0NhbnZhczsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKIAotLy8gVGhpcyBjbGFzcyBy
YXN0ZXJpemVzIHRoZSBjb250ZW50UmVjdCBpbnRvIGEgUGxhdGZvcm1DYW52YXMuIEl0IHRoZW4g
dXBkYXRlcworLy8gVGhpcyBjbGFzcyByYXN0ZXJpemVzIHRoZSBjb250ZW50UmVjdCBpbnRvIGEg
c2tpYSBiaXRtYXAgY2FudmFzLiBJdCB0aGVuIHVwZGF0ZXMKIC8vIHRleHR1cmVzIGJ5IGNvcHlp
bmcgZnJvbSB0aGUgY2FudmFzIGludG8gdGhlIHRleHR1cmUsIHVzaW5nIE1hcFN1YkltYWdlIGlm
CiAvLyBwb3NzaWJsZS4KIGNsYXNzIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBw
dWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CkBAIC00Nyw3ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgVGV4dHVyZShCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiwgUGFz
c093blB0cjxNYW5hZ2VkVGV4dHVyZT4pOwogICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqLCBUZXh0
dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChDQ0dyYXBoaWNzQ29u
dGV4dCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkgT1ZFUlJJREU7CiAKICAgICBwcml2YXRlOgogICAgICAgICBC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJu
IG1fdGV4dHVyZVVwZGF0ZXI7IH0KQEAgLTYwLDE1ICs2MSwxNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4
dHVyZShUZXh0dXJlTWFuYWdlciopOwogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNh
bXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSwgSW50
UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpIE9WRVJS
SURFOwogICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqLCBUZXh0
dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVl
KGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9vbCkgT1ZFUlJJREU7CiAKIHBy
aXZhdGU6CiAgICAgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CiAKLSAgICBQbGF0
Zm9ybUNhbnZhcyBtX2NhbnZhczsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOworICAg
IEludFNpemUgbV9jYW52YXNTaXplOworICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgTGF5ZXJUZXh0
dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXgg
Yjc1OTI1MmUxZjdhYjJhYmRjNmFhYWFjZDkwOWRhODc5ZjQ3ZWZkZi4uOTcwZjFjMzBlZDUyYWFj
Y2I4MDE2ZmE5YjdkZjhkNjExNDZhNGMyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTg5LDEw
ICs4OSwxMCBAQCBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgQml0bWFw
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcgogICAgICAgICAgICAgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6
OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE7CiB9CiAKLXZvaWQgQml0bWFwU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQg
Y29udGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCkKK3ZvaWQgQml0bWFw
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgZmxvYXQgY29u
dGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCkKIHsKICAgICBtX3RleFN1
YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7Ci0gICAgU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRSZWN0LCB0aWxlU2l6ZSwg
Ym9yZGVyVGV4ZWxzLCBjb250ZW50c1NjYWxlLCByZXN1bHRpbmdPcGFxdWVSZWN0KTsKKyAgICBT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29udGVu
dFJlY3QsIHRpbGVTaXplLCBjb250ZW50c1NjYWxlLCByZXN1bHRpbmdPcGFxdWVSZWN0KTsKIH0K
IAogdm9pZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENv
bnRlbnRzUmVjdChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0
bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oCmluZGV4IDUwOTdjZTBiMmYwMDczZTM3MjM3NTQzMTEzN2E1MGU2NWZmNDZh
ZmYuLjMwYjlhNDkwNzE4Y2Q5MDQ0YTJhYTY5OTYwODZmZDRmNDM0MGE2MmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmgKQEAgLTQzLDggKzQzLDggQEAgcHVibGljOgogICAgIHB1YmxpYzoKICAgICAgICAgVGV4
dHVyZShCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiwgUGFzc093blB0
cjxNYW5hZ2VkVGV4dHVyZT4pOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJl
Y3QoQ0NHcmFwaGljc0NvbnRleHQqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkgT1ZFUlJJREU7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KENDR3JhcGhpY3NDb250ZXh0KiwgVGV4dHVyZUFs
bG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KSBPVkVSUklERTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEJpdG1hcFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0
dXJlVXBkYXRlcjsgfQpAQCAtNTYsOSArNTYsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Qml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRlKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsK
ICAgICB2aXJ0dWFsIH5CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCk7
CiAKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4g
Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciopOwotICAgIHZpcnR1YWwgU2FtcGxlZFRleGVs
Rm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBj
b25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNT
Y2FsZSwgSW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CisgICAgdmlydHVhbCBQYXNzT3du
UHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1h
bmFnZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVk
VGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50U2l6ZSYgdGlsZVNpemUsIGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3VsdGlu
Z09wYXF1ZVJlY3QpIE9WRVJSSURFOwogICAgIHZvaWQgcGFpbnRDb250ZW50c1JlY3QoU2tDYW52
YXMqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKICAgICB2b2lkIHVwZGF0ZVRleHR1cmVS
ZWN0KENDR3JhcGhpY3NDb250ZXh0KiwgR0MzRGVudW0gZm9ybWF0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgdWludDhfdCogcGl4ZWxzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCBjZjhiMjkzYTdiMWRlYzMwMzkzNzFhYmNiMzgz
YjlhNjQwYWQwYWMxLi5iNDY0YTNkNDhlY2RlNjAyM2I2OTdjODg0MzRjY2YxYTY2MjgzN2Y1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyUGFp
bnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1
ZGUgIlNraWFVdGlscy5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDYsMzggKzQ3LDI1IEBAIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5D
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUGxhdGZv
cm1Db250ZXh0U2tpYSYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgZmxvYXQgY29udGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCkKK3Zv
aWQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50cyhTa0NhbnZhcyogY2Fu
dmFzLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgZmxvYXQgY29udGVudHNTY2FsZSwgSW50
UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCkKIHsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZSgtY29u
dGVudFJlY3QueCgpLCAtY29udGVudFJlY3QueSgpKTsKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VW
RU5UKCJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludCIsIHRoaXMsIDApOworICAgIFRS
QUNFX0VWRU5UMCgiY2MiLCAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50
cyIpOworICAgIGNhbnZhcy0+c2F2ZSgpOworICAgIGNhbnZhcy0+dHJhbnNsYXRlKFdlYkNvcmVG
bG9hdFRvU2tTY2FsYXIoLWNvbnRlbnRSZWN0LngoKSksIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIo
LWNvbnRlbnRSZWN0LnkoKSkpOwogCi0gICAgICAgIEludFJlY3Qgc2NhbGVkQ29udGVudFJlY3Qg
PSBjb250ZW50UmVjdDsKKyAgICBJbnRSZWN0IHNjYWxlZENvbnRlbnRSZWN0ID0gY29udGVudFJl
Y3Q7CiAKLSAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4wKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKGNvbnRl
bnRzU2NhbGUsIGNvbnRlbnRzU2NhbGUpKTsKKyAgICBpZiAoY29udGVudHNTY2FsZSAhPSAxLjAp
IHsKKyAgICAgICAgY2FudmFzLT5zY2FsZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKGNvbnRlbnRz
U2NhbGUpLCBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKGNvbnRlbnRzU2NhbGUpKTsKIAotICAgICAg
ICAgICAgRmxvYXRSZWN0IHJlY3QgPSBjb250ZW50UmVjdDsKLSAgICAgICAgICAgIHJlY3Quc2Nh
bGUoMSAvIGNvbnRlbnRzU2NhbGUpOwotICAgICAgICAgICAgc2NhbGVkQ29udGVudFJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVjb3JkIHRy
YW5zZm9ybSBwcmlvciB0byBwYWludGluZywgYXMgYWxsIG9wYXF1ZSB0cmFja2luZyB3aWxsIGJl
Ci0gICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoaXMgY3VycmVudCB2YWx1ZS4KLSAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIGNhbnZhc1RvQ29udGVudFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCku
aW52ZXJzZSgpOwotCi0gICAgICAgIG1fcGFpbnRlci0+cGFpbnQoY29udGV4dCwgc2NhbGVkQ29u
dGVudFJlY3QpOworICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IGNvbnRlbnRSZWN0OworICAgICAg
ICByZWN0LnNjYWxlKDEgLyBjb250ZW50c1NjYWxlKTsKKyAgICAgICAgc2NhbGVkQ29udGVudFJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOworICAgIH0KIAotICAgICAgICAvLyBUcmFuc2Zv
cm0gdHJhY2tlZCBvcGFxdWUgcGFpbnRzIGJhY2sgdG8gb3VyIGxheWVyJ3MgY29udGVudCBzcGFj
ZS4KLSAgICAgICAgQVNTRVJUKGNhbnZhc1RvQ29udGVudFRyYW5zZm9ybS5pc0ludmVydGlibGUo
KSk7Ci0gICAgICAgIEFTU0VSVChjYW52YXNUb0NvbnRlbnRUcmFuc2Zvcm0ucHJlc2VydmVzQXhp
c0FsaWdubWVudCgpKTsKLSAgICAgICAgRmxvYXRSZWN0IG9wYXF1ZUNhbnZhc1JlY3QgPSBwbGF0
Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCk7Ci0gICAgICAgIHJlc3VsdGluZ09w
YXF1ZVJlY3QgPSBlbmNsb3NlZEludFJlY3QoY2FudmFzVG9Db250ZW50VHJhbnNmb3JtLm1hcFJl
Y3Qob3BhcXVlQ2FudmFzUmVjdCkpOworICAgIG1fcGFpbnRlci0+cGFpbnQoY2FudmFzLCBzY2Fs
ZWRDb250ZW50UmVjdCwgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CisgICAgY2FudmFzLT5yZXN0b3Jl
KCk7CiAKLSAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4wKQotICAgICAgICAgICAgY29u
dGV4dC5yZXN0b3JlKCk7Ci0gICAgfQogICAgIG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IGFiYTlj
YTQ3OTlhZjk3OWYxM2RlMWRmN2Q3YjU2YTMzOWNmNTE0NWYuLmM5NTFlOTNmZWQ2Njg0MDAxZmQ3
ZTQ0OTIwYTdjNmEzZGFhNDI5OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmgKQEAgLTMxLDEwICszMSwxMSBAQAogCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBk
YXRlci5oIgogCitjbGFzcyBTa0NhbnZhczsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBMYXllclBhaW50ZXJDaHJvbWl1bTsKLWNsYXNzIFBsYXRmb3JtQ29udGV4dFNraWE7CiAKIC8v
IEJhc2UgY2xhc3MgZm9yIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgYW5kCiAvLyBT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIHRoYXQgcmVkdWNlcyBjb2RlIGR1cGxp
Y2F0aW9uIGJldHdlZW4KQEAgLTQ2LDcgKzQ3LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50
ZXJDaHJvbWl1bT4pOwogCi0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYs
IFBsYXRmb3JtQ29udGV4dFNraWEmLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgZmxvYXQg
Y29udGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CisgICAgdm9pZCBw
YWludENvbnRlbnRzKFNrQ2FudmFzKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGZsb2F0
IGNvbnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpOwogICAgIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQog
CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGFlOGQz
MjA4YmZiYWI4ZDdhZGU5ODJhN2Q4YTkzYTJkODNlZDdkYWYuLmUwNjEzZTc1N2MyNmU1NTIzNDYz
YTBlMzA4ZTQ0ODBiZDliMDk0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTU0LDEyICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ29udGVudExheWVyUGFpbnRlcihkZWxlZ2F0ZSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KQorICAgIHZpcnR1YWwgdm9pZCBwYWludChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgSW50UmVjdCYgb3BhcXVlKQogICAgIHsKICAgICAgICAgZG91
YmxlIHBhaW50U3RhcnQgPSBjdXJyZW50VGltZSgpOwotICAgICAgICBjb250ZXh0LmNsZWFyUmVj
dChjb250ZW50UmVjdCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcChjb250ZW50UmVjdCk7Ci0gICAg
ICAgIG1fZGVsZWdhdGUtPnBhaW50Q29udGVudHMoY29udGV4dCwgY29udGVudFJlY3QpOworICAg
ICAgICBtX2RlbGVnYXRlLT5wYWludENvbnRlbnRzKGNhbnZhcywgY29udGVudFJlY3QsIG9wYXF1
ZSk7CiAgICAgICAgIGRvdWJsZSBwYWludEVuZCA9IGN1cnJlbnRUaW1lKCk7CiAgICAgICAgIGRv
dWJsZSBwaXhlbHNQZXJTZWMgPSAoY29udGVudFJlY3Qud2lkdGgoKSAqIGNvbnRlbnRSZWN0Lmhl
aWdodCgpKSAvIChwYWludEVuZCAtIHBhaW50U3RhcnQpOwogICAgICAgICBXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LkFjY2VsQ29u
dGVudFBhaW50RHVyYXRpb25NUyIsIChwYWludEVuZCAtIHBhaW50U3RhcnQpICogMTAwMCwgMCwg
MTIwLCAzMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBjY2MxZTAwOGMw
ODk2ZjE3ZTFlOTJjNDk3NTY1ZjdjZWVhMDZkYzNiLi5hMzQxZGU1YTJiNjU2MGU5NmE0ZDhjNzNl
NmFhNWY3ZDU0YjNlMjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTM3
LDYgKzM3LDggQEAKICNpbmNsdWRlICJUaWxlZExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJj
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCiAKK2NsYXNzIFNrQ2FudmFzOworCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTQ1LDEzICs0NywxMyBAQCBjbGFz
cyBMYXllclRleHR1cmVVcGRhdGVyOwogCiBjbGFzcyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBw
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYgY2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KFNrQ2FudmFzKiwgY29uc3QgSW50UmVjdCYgY2xpcCwgSW50UmVjdCYgb3BhcXVlKSA9IDA7CiAK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJEZWxlZ2F0ZSgpIHsgfQogfTsK
IAotLy8gQSBMYXllciB0aGF0IHJlcXVpcmVzIGEgR3JhcGhpY3NDb250ZXh0IHRvIHJlbmRlciBp
dHMgY29udGVudHMuCisvLyBBIGxheWVyIHRoYXQgcmVuZGVycyBpdHMgY29udGVudHMgaW50byBh
biBTa0NhbnZhcy4KIGNsYXNzIENvbnRlbnRMYXllckNocm9taXVtIDogcHVibGljIFRpbGVkTGF5
ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGVudExheWVy
Q2hyb21pdW0+IGNyZWF0ZShDb250ZW50TGF5ZXJEZWxlZ2F0ZSopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaAppbmRleCBlYzRkMDg4ZjIzODliNTI2MjQ3Yzg4MjVjMmFmY2Q2NWRiNTY4MTIwLi5h
YmVhZjUyM2QyOGZjNWZiMjlhODNmYzE5ODc4OTdlMDYxMDdiMmIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFRleHR1cmUoRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiwgUGFzc093blB0cjxN
YW5hZ2VkVGV4dHVyZT4pOwogICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqLCBUZXh0dXJlQWxsb2Nh
dG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChDQ0dyYXBoaWNzQ29udGV4dCosIFRl
eHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBkZXN0UmVjdCkgT1ZFUlJJREU7CiAKICAgICBwcml2YXRlOgogICAgICAgICBGcmFtZUJ1ZmZl
clNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyBy
ZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQpAQCAtNTQsOCArNTQsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwogICAgIHZp
cnR1YWwgfkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOwog
Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNy
ZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKLSAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZv
cm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CisgICAgdmly
dHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1
cmUoVGV4dHVyZU1hbmFnZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZv
cm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkgT1ZFUlJJREU7
CiAgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChDQ0dyYXBoaWNzQ29udGV4dCosIFRleHR1cmVB
bGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IGIzNTM5ODRkNGRkYTFjOGIyYzIyMmQ3NGY4MGM2ODMzYzg4
MmU2MjMuLjg2YTFmMzI5OTZjNmI2ZTFlNmU1NGYwYzMzOWU4M2JhMjEyMGE5MWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNTAsMTAgKzUwLDEyIEBACiAjaW5j
bHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24u
aCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMaW5rSGlnaGxpZ2h0LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiU2tNYXRyaXg0NC5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKQEAgLTg3
LDcgKzg5LDggQEAgR3JhcGhpY3NMYXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hyb21pdW0o
R3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogICAgICwgbV9pblNldENoaWxkcmVuKGZhbHNl
KQogICAgICwgbV9wYWdlU2NhbGVDaGFuZ2VkKGZhbHNlKQogewotICAgIG1fbGF5ZXIgPSBXZWJD
b250ZW50TGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzKSk7CisgICAgbV9v
cGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSA9IGFkb3B0UHRyKG5ldyBPcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSh0aGlzKSk7CisgICAgbV9sYXllciA9
IFdlYkNvbnRlbnRMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKG1fb3BhcXVlUmVj
dFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuZ2V0KCkpKTsKIAogICAgIHVwZGF0ZURlYnVn
SW5kaWNhdG9ycygpOwogfQpAQCAtODc0LDggKzg3Nyw5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNo
cm9taXVtOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogICAgIG1fcGFnZVNjYWxl
Q2hhbmdlZCA9IHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGNsaXApCiB7CisgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+
c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIodHJ1ZSk7CiAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoY29udGV4dCwgY2xpcCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmgKaW5kZXggYjk5NDk5MTJjYjczMGVjNTY0ZGEyM2EwN2I0ZjlkODY5ZjYwZmI0Ni4uZGVkZWM2
YTU1ZTZlMWI2ZWRhM2U0NTQxNGRhODYyMmMzYWM5MzY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxl
Z2F0ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS5oIgogCiAjaW5j
bHVkZSA8cHVibGljL1dlYkNvbnRlbnRMYXllci5oPgpAQCAtNDcsNyArNDgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgTGlua0hpZ2hsaWdodDsK
IAotY2xhc3MgR3JhcGhpY3NMYXllckNocm9taXVtIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1
YmxpYyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSwgcHVibGljIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0
ZSB7CitjbGFzcyBHcmFwaGljc0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgR3JhcGhpY3NMYXllciwg
cHVibGljIEdyYXBoaWNzQ29udGV4dFBhaW50ZXIsIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uRGVs
ZWdhdGUgewogcHVibGljOgogICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2xpZW50Kik7CiAgICAgdmlydHVhbCB+R3JhcGhpY3NMYXllckNocm9taXVtKCk7CkBAIC0xMTcs
OCArMTE4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JvcmRlcihjb25z
dCBDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKLSAgICAvLyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSBp
bXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKTsKKyAgICAvLyBHcmFwaGljc0NvbnRleHRQYWlu
dGVyIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKSBPVkVSUklERTsKIAogICAgIC8vIENDTGF5ZXJBbmlt
YXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKQEAgLTE2Miw2ICsxNjMsOCBAQCBwcml2
YXRlOgogICAgIFdlYktpdDo6V2ViTGF5ZXIgbV90cmFuc2Zvcm1MYXllcjsKICAgICBXZWJLaXQ6
OldlYkxheWVyIG1fY29udGVudHNMYXllcjsKIAorICAgIE93blB0cjxPcGFxdWVSZWN0VHJhY2tp
bmdDb250ZW50TGF5ZXJEZWxlZ2F0ZT4gbV9vcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJE
ZWxlZ2F0ZTsKKwogICAgIGVudW0gQ29udGVudHNMYXllclB1cnBvc2UgewogICAgICAgICBOb0Nv
bnRlbnRzTGF5ZXIgPSAwLAogICAgICAgICBDb250ZW50c0xheWVyRm9ySW1hZ2UsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJQYWludGVyQ2hyb21pdW0uaAppbmRleCA5NDI5ZGE1ZmFiOWEzN2ViMzhjMGRlYzU2Njdj
MDIxZWJmNmNhMzYxLi5kYjZhODg0YzFmOTE4NzQ4YjQ4MmY3ZDllNmZmODJlZDcyOWRmZGJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clBhaW50ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgKQEAgLTI5LDE1ICsyOSwxNiBAQAogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCitjbGFzcyBTa0NhbnZhczsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbnRSZWN0
OwogCiBjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
TGF5ZXJQYWludGVyQ2hyb21pdW0oKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoU2tDYW52YXMqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgSW50UmVj
dCYgb3BhcXVlKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVV
cGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmgKaW5kZXggNjFlNDI1OWU2Y2M3OTdkODE2OTJlMDYwOTQ2MmZmM2Vm
MTRmNjZhNC4uZGJhOGFiNzE2NjFhNTc1ZjRkOGIyY2E0OGU3M2IyMGE2Zjk3YjQ5YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNzQsOCArNzQsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRl
eHR1cmVGb3JtYXQpID0gMDsKICAgICAvLyBUaGUgfHJlc3VsdGluZ09wYXF1ZVJlY3R8IGdpdmVz
IGJhY2sgYSByZWdpb24gb2YgdGhlIGxheWVyIHRoYXQgd2FzIHBhaW50ZWQgb3BhcXVlLiBJZiB0
aGUgbGF5ZXIgaXMgbWFya2VkIG9wYXF1ZSBpbiB0aGUgdXBkYXRlciwKICAgICAvLyB0aGVuIHRo
aXMgcmVnaW9uIHNob3VsZCBiZSBpZ25vcmVkIGluIHByZWZlcmVuY2UgZm9yIHRoZSBlbnRpcmUg
bGF5ZXIncyBhcmVhLgotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50
UmVjdCYgLyogY29udGVudFJlY3QgKi8sIGNvbnN0IEludFNpemUmIC8qIHRpbGVTaXplICovLCBp
bnQgLyogYm9yZGVyVGV4ZWxzICovLCBmbG9hdCAvKiBjb250ZW50c1NjYWxlICovLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCYgLyogcmVzdWx0aW5nT3BhcXVlUmVj
dCAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGZsb2F0IGNvbnRlbnRzU2Nh
bGUsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpIHsgfQogCiAgICAgLy8gU2V0IHRydWUg
YnkgdGhlIGxheWVyIHdoZW4gaXQgaXMga25vd24gdGhhdCB0aGUgZW50aXJlIG91dHB1dCBpcyBn
b2luZyB0byBiZSBvcGFxdWUuCiAgICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKSB7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xp
bmtIaWdobGlnaHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGlua0hpZ2hsaWdodC5jcHAKaW5kZXggYmVhMzJjMGEzNTc5YWY1NzFmYzdmMDUyYTc0ZGJk
YzdmYjlkZTY3OC4uM2JjMWU2M2RhMWFkZTA1NDE0MjgwNTk4NjY5MjcyM2VmZmM5YWE2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hp
Z2hsaWdodC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGlua0hpZ2hsaWdodC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJMaW5rSGln
aGxpZ2h0LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KQEAgLTkxLDggKzkyLDEwIEBAIENvbnRlbnRMYXllckNocm9taXVtKiBMaW5rSGln
aGxpZ2h0Ojpjb250ZW50TGF5ZXIoKQogICAgIHJldHVybiBtX2NvbnRlbnRMYXllci5nZXQoKTsK
IH0KIAotdm9pZCBMaW5rSGlnaGxpZ2h0OjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYg
Z2MsIGNvbnN0IEludFJlY3QmKQordm9pZCBMaW5rSGlnaGxpZ2h0OjpwYWludENvbnRlbnRzKFNr
Q2FudmFzKiBjYW52YXMsIGNvbnN0IEludFJlY3QmLCBJbnRSZWN0JikKIHsKKyAgICBQbGF0Zm9y
bUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4
dCBnYygmcGxhdGZvcm1Db250ZXh0KTsKICAgICAvLyBGSVhNRTogbWFrZSBjb2xvdXIgY29uZmln
dXJhYmxlPwogICAgIGdjLnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1NSwgMjU1KSwgQ29s
b3JTcGFjZURldmljZVJHQik7CiAgICAgZ2Muc2V0U3Ryb2tlVGhpY2tuZXNzKDIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hs
aWdodC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hp
Z2hsaWdodC5oCmluZGV4IDhkNzg4OWZjZTcyMDU5Zjk4MWE4OTc2MjE2ZGRhZWVlZTMxOWRiODQu
LjFmYmVmOWJhOTQ2OGE3MWI5ODNmN2IxNWI0Yzg1MWEwNWQ0YmFiMjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxp
Z2h0LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIENvbnRlbnRMYXllckNocm9taXVt
KiBjb250ZW50TGF5ZXIoKTsKIAogICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVu
dGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhTa0NhbnZhcyosIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBJbnRSZWN0JiBv
cGFxdWUpIE9WRVJSSURFOwogCiAgICAgLy8gQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIGltcGxl
bWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJs
ZSB0aW1lKSBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjYxOTY2Yjk1ZGQ5
MTAzYmUzMzJhY2M1NjE5ZTkzZTY5Y2FiNDNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVu
dExheWVyRGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIk9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXll
ckRlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlOjpPcGFxdWVS
ZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZShHcmFwaGljc0NvbnRleHRQYWludGVyKiBw
YWludGVyKQorICAgIDogbV9wYWludGVyKHBhaW50ZXIpCisgICAgLCBtX29wYXF1ZShmYWxzZSkK
K3sKK30KKworT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGU6On5PcGFxdWVS
ZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSgpCit7Cit9CisKK3ZvaWQgT3BhcXVlUmVj
dFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGU6OnBhaW50Q29udGVudHMoU2tDYW52YXMqIGNh
bnZhcywgY29uc3QgSW50UmVjdCYgY2xpcCwgSW50UmVjdCYgb3BhcXVlKQoreworICAgIFBsYXRm
b3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7CisgICAgcGxhdGZvcm1Db250
ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKCFtX29wYXF1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0
IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBjb250ZXh0LmNsZWFyUmVjdChjbGlw
KTsKKyAgICBjb250ZXh0LmNsaXAoY2xpcCk7CisKKyAgICAvLyBSZWNvcmQgdHJhbnNmb3JtIHBy
aW9yIHRvIHBhaW50aW5nLCBhcyBhbGwgb3BhcXVlIHRyYWNraW5nIHdpbGwgYmUKKyAgICAvLyBy
ZWxhdGl2ZSB0byB0aGlzIGN1cnJlbnQgdmFsdWUuCisgICAgQWZmaW5lVHJhbnNmb3JtIGNhbnZh
c1RvQ29udGVudFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCkuaW52ZXJzZSgpOworCisgICAg
bV9wYWludGVyLT5wYWludChjb250ZXh0LCBjbGlwKTsKKworICAgIC8vIFRyYW5zZm9ybSB0cmFj
a2VkIG9wYXF1ZSBwYWludHMgYmFjayB0byBvdXIgbGF5ZXIncyBjb250ZW50IHNwYWNlLgorICAg
IEFTU0VSVChjYW52YXNUb0NvbnRlbnRUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpOworICAgIEFT
U0VSVChjYW52YXNUb0NvbnRlbnRUcmFuc2Zvcm0ucHJlc2VydmVzQXhpc0FsaWdubWVudCgpKTsK
KyAgICBGbG9hdFJlY3Qgb3BhcXVlQ2FudmFzUmVjdCA9IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVS
ZWdpb24oKS5hc1JlY3QoKTsKKyAgICBvcGFxdWUgPSBlbmNsb3NlZEludFJlY3QoY2FudmFzVG9D
b250ZW50VHJhbnNmb3JtLm1hcFJlY3Qob3BhcXVlQ2FudmFzUmVjdCkpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVS
ZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xYzUzZDFkMjlkZWY5MjU3MzI4ZjQxNGFkMmM3NTcwNWRmNGUzYTZj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuaApAQCAtMCwwICsx
LDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRM
YXllckRlbGVnYXRlX2gKKyNkZWZpbmUgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVs
ZWdhdGVfaAorCisjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCitjbGFzcyBTa0NhbnZhczsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRSZWN0OworCitjbGFzcyBHcmFw
aGljc0NvbnRleHRQYWludGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAwOworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0UGFpbnRlcigpIHsgfQorfTsKKworY2xhc3MgT3Bh
cXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ29udGVudExheWVy
RGVsZWdhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlKTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcGFxdWVSZWN0VHJh
Y2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZShHcmFwaGljc0NvbnRleHRQYWludGVyKik7CisgICAg
dmlydHVhbCB+T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUoKTsKKworICAg
IC8vIElmIHdlIGtub3cgdGhhdCBldmVyeXRoaW5nIHRoYXQgd2lsbCBiZSBwYWludGVkIHRocm91
Z2ggdGhpcyBkZWxlZ2F0ZSwgdGhlbiB3ZSBkb24ndCBib3RoZXIKKyAgICAvLyB0cmFja2luZyBv
cGFxdWVuZXNzLgorICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wgb3BhcXVlKSB7IG1fb3BhcXVlID0g
b3BhcXVlOyB9CisKKyAgICAvLyBDb250ZW50TGF5ZXJEZWxlZ2F0ZQorICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKFNrQ2FudmFzKiwgY29uc3QgSW50UmVjdCYgY2xpcCwgSW50UmVjdCYg
b3BhcXVlKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRQYWludGVy
KiBtX3BhaW50ZXI7CisgICAgYm9vbCBtX29wYXF1ZTsKK307CisKK30KKworI2VuZGlmIC8vIE9w
YXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFz
LmNwcAppbmRleCBjNWUzOGQ2YWEzNTNhYjNlNjBlYjZmZTE3MmU4N2RhNGE4OTE1MGMxLi43YTFm
MTE3ZDNhNTQyNzViZTI2OWI5MDRlYjUxNjlmMjBiYjNkZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52
YXMuY3BwCkBAIC05Nyw4ICs5Nyw2IEBAIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpQYWludGVy
KFBsYXRmb3JtQ2FudmFzKiBjYW52YXMsIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyCiB7CiAgICAg
bV9za2lhQ29udGV4dCA9IGFkb3B0UHRyKG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKGNhbnZhcy0+
bV9za2lhQ2FudmFzLmdldCgpKSk7CiAKLSAgICBtX3NraWFDb250ZXh0LT5zZXREcmF3aW5nVG9J
bWFnZUJ1ZmZlcihvcHRpb24gPT0gR3JheXNjYWxlVGV4dCk7Ci0KICAgICBtX2NvbnRleHQgPSBh
ZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqPihtX3NraWFDb250ZXh0LmdldCgpKSkpOwogICAgIGNvbnRleHQoKS0+c2F2
ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcAppbmRleCBiNDk5MDEyZTYxYjUzN2FjOTU0Y2VhMTM4ZjljMTg4MjM2MzFh
NTY2Li5jMTE3N2ZiY2QzMTY3NWQ2YjlmNDYxZDQ3OTQwOTM5NDlmZWVmYjRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApA
QCAtNDgsMjAgKzQ4LDEwIEBAIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5T
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIC8qIHRpbGVTaXplICovLCBpbnQgYm9yZGVy
VGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlLCBJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0
KQordm9pZCBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmLCBmbG9hdCBjb250
ZW50c1NjYWxlLCBJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0KQogewogICAgIFNrQ2FudmFz
KiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgoKSwg
Y29udGVudFJlY3QuaGVpZ2h0KCkpOwotICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1D
b250ZXh0KGNhbnZhcyk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldERlZmVycmVkKHRydWUpOwot
ICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbighbV9sYXllcklzT3BhcXVl
KTsKLSAgICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMs
IHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKLSAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmls
dGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1c2UgaXQgbWlnaHQgYmUKLSAgICAvLyB0cmFuc2Zv
cm1lZCwgc2V0IGltYWdlIGJ1ZmZlciBmbGFnIHRvIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxl
Ci0gICAgLy8gaW5zdGVhZCBvZiB1c2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgYm9v
bCB1c2VHcmF5c2NhbGVUZXh0ID0gYm9yZGVyVGV4ZWxzIHx8ICFtX2xheWVySXNPcGFxdWU7Ci0g
ICAgcGxhdGZvcm1Db250ZXh0LnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHVzZUdyYXlzY2FsZVRl
eHQpOwotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4
dCk7Ci0gICAgcGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIHBsYXRmb3JtQ29udGV4dCwg
Y29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUsIHJlc3VsdGluZ09wYXF1ZVJlY3QpOworICAgIHBh
aW50Q29udGVudHMoY2FudmFzLCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSwgcmVzdWx0aW5n
T3BhcXVlUmVjdCk7CiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXgg
MjU4YTI4YmEzNGZhMTllOTk2ZDFiMjY0YTkwNDA3Y2JmOGE0NzU0YS4uZTI5N2UwNTBlMDZmMzY1
MTIwN2JmNWMwMWQ0ZThkZWJkZmZkMzdlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNDcsMTIgKzQ3LDEyIEBAIGNsYXNz
IFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcigpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlKGJvb2wpIE9WRVJSSURFOwogCiBwcm90ZWN0ZWQ6
CiAgICAgZXhwbGljaXQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3du
UHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRv
VXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0
aW5nT3BhcXVlUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGZsb2F0IGNvbnRl
bnRzU2NhbGUsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpIE9WRVJSSURFOwogICAgIHZv
aWQgZHJhd1BpY3R1cmUoU2tDYW52YXMqKTsKIAogICAgIGJvb2wgbGF5ZXJJc09wYXF1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXJJc09wYXF1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggMTJlMzcxN2NhNmRmZjFjMzhhYzk0ZGJiMTdlZTZjNjdmZDBjZDUxZS4uZTFi
NDE1ODVhNDMyYzFkODc2OGQ5NTZjYjMzMDhhNjkyYzI3ZDRmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwCkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnVwZGF0ZVRpbGVzKGJvb2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwg
aW4KICAgICAvLyBzbyB3ZSBncmFiIGEgbG9jYWwgcmVmZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUg
dXBkYXRlciBhbGl2ZSB1bnRpbCB0aGUgcGFpbnQgY29tcGxldGVzLgogICAgIFJlZlB0cjxMYXll
clRleHR1cmVVcGRhdGVyPiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7CiAgICAgSW50UmVj
dCBwYWludGVkT3BhcXVlUmVjdDsKLSAgICB0ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlVG9VcGRh
dGUocGFpbnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhl
bHMoKSwgY29udGVudHNTY2FsZSgpLCBwYWludGVkT3BhcXVlUmVjdCk7CisgICAgdGV4dHVyZVVw
ZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKHBhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwg
Y29udGVudHNTY2FsZSgpLCBwYWludGVkT3BhcXVlUmVjdCk7CiAgICAgbV9kaWRQYWludCA9IHRy
dWU7CiAKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBmNGY0ODJiZWE2N2M3NmI2YmUxNTA0NWUxN2Zl
MWY5NjE3ODdiZjYxLi42MjVkM2UxMTVkN2Y2MGE1ZDRlOTc3NjljMThiZGY4YjMzZjBjNjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIK
LSNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggM2MzYWUwM2Y2NmM4ZWY0NTdhODMx
Y2U2MmRjMWQ4NGZjZmMzNDFlMi4uYjlkMjQ4MjM3ZWMwN2Y5NTQ4NGU4ZmEwMjc0NTVmNzYwMTYz
ZjE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ3LDcgKzQ3LDYgQEAgY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ7
CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFz
cyBMYXllclBhaW50ZXJDaHJvbWl1bTsKIGNsYXNzIFJlZ2lvbjsKIGNsYXNzIFRleHR1cmVBbGxv
Y2F0b3I7CiBjbGFzcyBUZXh0dXJlTWFuYWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CmluZGV4IGMxODcyOGIwMDkzMGFhYjBhMjM0ZTEyMzg1ZmIxNjU3ZTRkMGUxNGIuLjM4OTU0ZjA0
ZmJmNzIxYmQ0YjY4YmY2YTdkNjM1MGQ1OWFmODZkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQpAQCAtMTIxLDEyICsxMjEsMTIgQEAKICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAnLAotICAgICAgICAg
ICAgJ3Rlc3RzL0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvTGV2ZWxEQlRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaW5rSGlnaGxpZ2h0VGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xpc3RlbmVyTGVha1Rlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvTW9ja0NDUXVhZEN1bGxlci5oJywKKyAgICAgICAgICAgICd0ZXN0cy9PcGFxdWVSZWN0
VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9QYWludEFnZ3JlZ2F0b3JUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUGxhdGZvcm1H
ZXN0dXJlQ3VydmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUGxhdGZvcm1Db250ZXh0
U2tpYVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9O
b25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwCmluZGV4IGM3NjE1ZThjNGJhZTc5MTM4M2UxNjE1
ZDc3MmE5OGJlZTQ5NTg4YTguLjJjMzcyMDljNjA3NzUwZjUxNTgwMTE5YzhkNDkyZjI1ZjBkYmM1
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0LmNwcApAQCAtMzEsMTMgKzMxLDE1IEBACiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKLSNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0OjpOb25Db21wb3NpdGVkQ29udGVudEhvc3QoUGFzc093blB0cjxXZWJDb3Jl
OjpMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KQotICAgIDogbV9jb250ZW50UGFp
bnQoY29udGVudFBhaW50KQorTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpOb25Db21wb3NpdGVk
Q29udGVudEhvc3QoV2ViVmlld0ltcGwqIHdlYlZpZXcpCisgICAgOiBtX3dlYlZpZXcod2ViVmll
dykKKyAgICAsIG1fb3BhcXVlKHRydWUpCiAgICAgLCBtX3Nob3dEZWJ1Z0JvcmRlcnMoZmFsc2Up
CiAgICAgLCBtX2RldmljZVNjYWxlRmFjdG9yKDEuMCkKIHsKQEAgLTY0LDYgKzY2LDcgQEAgdm9p
ZCBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJD
b3JlOjpDb2xvciYgY29sb3IpCiAKIHZvaWQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpzZXRP
cGFxdWUoYm9vbCBvcGFxdWUpCiB7CisgICAgbV9vcGFxdWUgPSBvcGFxdWU7CiAgICAgbV9ncmFw
aGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldE9wYXF1ZShvcGFxdWUpOwogfQogCkBAIC0x
NjUsMTAgKzE2OCwxNiBAQCB2b2lkIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6bm90aWZ5U3lu
Y1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQogCiB2b2lkIE5vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdDo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCiB7
CisgICAgLy8gT24gbm9uLWFuZHJvaWQgcGxhdGZvcm1zLCB3ZSB3YW50IHRvIHJlbmRlciB0ZXh0
IHdpdGggc3VicGl4ZWwgYW50aWFsaWFzaW5nIG9uIHRoZSByb290IGxheWVyCisgICAgLy8gc28g
bG9uZyBhcyB0aGUgcm9vdCBpcyBvcGFxdWUuIE9uIGFuZHJvaWQgYWxsIHRleHQgaXMgZ3JheXNj
YWxlLgorI2lmICFPUyhBTkRST0lEKQorICAgIGlmIChtX29wYXF1ZSkKKyAgICAgICAgY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpOworI2Vu
ZGlmCiAgICAgY29udGV4dC50cmFuc2xhdGUoLW1fbGF5ZXJBZGp1c3QpOwogICAgIFdlYkNvcmU6
OkludFJlY3QgYWRqdXN0ZWRDbGlwUmVjdCA9IGNsaXBSZWN0OwogICAgIGFkanVzdGVkQ2xpcFJl
Y3QubW92ZShtX2xheWVyQWRqdXN0KTsKLSAgICBtX2NvbnRlbnRQYWludC0+cGFpbnQoY29udGV4
dCwgYWRqdXN0ZWRDbGlwUmVjdCk7CisgICAgbV93ZWJWaWV3LT5wYWludFJvb3RMYXllcihjb250
ZXh0LCBhZGp1c3RlZENsaXBSZWN0KTsKIH0KIAogdm9pZCBOb25Db21wb3NpdGVkQ29udGVudEhv
c3Q6OnNldFNob3dEZWJ1Z0JvcmRlcnMoYm9vbCBzaG93RGVidWdCb3JkZXJzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaApp
bmRleCA3Y2FlMjBhMTQzM2Q1NDJhZjM0YWI0ZTk3ZTgxMzhhMjc5MGMzYzhjLi45NzA2ODYwZDdl
ZmQxNmI0Nzg5MzdmZWZmMGY5NzQxN2VjNDY0ZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaApAQCAtNDAsMTcgKzQw
LDE3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50
UmVjdDsKIGNsYXNzIExheWVyQ2hyb21pdW07Ci1jbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsK
IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJWaWV3SW1wbDsKIAogY2xhc3MgTm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGll
bnQgewogV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IGNy
ZWF0ZShQYXNzT3duUHRyPFdlYkNvcmU6OkxheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFp
bnQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBjcmVh
dGUoV2ViVmlld0ltcGwqIHdlYlZpZXcpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChjb250ZW50UGFpbnQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBOb25Db21wb3NpdGVkQ29udGVudEhvc3Qod2ViVmlldykpOwogICAg
IH0KICAgICB2aXJ0dWFsIH5Ob25Db21wb3NpdGVkQ29udGVudEhvc3QoKTsKIApAQCAtNjQsNyAr
NjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaG93RGVidWdCb3JkZXJzKGJvb2wpOwogCiBw
cm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KFBhc3NPd25Q
dHI8V2ViQ29yZTo6TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCk7CisgICAgZXhw
bGljaXQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KFdlYlZpZXdJbXBsKik7CiAKIHByaXZhdGU6
CiAgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudApAQCAtODIsMTAgKzgyLDExIEBAIHByaXZhdGU6
CiAgICAgV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSogc2Nyb2xsTGF5ZXIoKTsKIAogICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX2dyYXBoaWNzTGF5ZXI7Ci0gICAgT3duUHRyPFdl
YkNvcmU6OkxheWVyUGFpbnRlckNocm9taXVtPiBtX2NvbnRlbnRQYWludDsKKyAgICBXZWJWaWV3
SW1wbCogbV93ZWJWaWV3OwogICAgIFdlYkNvcmU6OkludFNpemUgbV92aWV3cG9ydFNpemU7CiAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX2xheWVyQWRqdXN0OwogCisgICAgYm9vbCBtX29wYXF1ZTsK
ICAgICBib29sIG1fc2hvd0RlYnVnQm9yZGVyczsKICAgICBmbG9hdCBtX2RldmljZVNjYWxlRmFj
dG9yOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExh
eWVySW1wbC5jcHAKaW5kZXggMjIyZmEyZmE3NjY1MjAyMjgwOGMxNGFjZTkxMTQxNDFiYTQ3ZWQ1
ZC4uZWM3NTNlN2ZlYzg5NzA4YWQyMmUzZTIyNWM4MzEyZWRhOTVjMTdiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKQEAgLTUz
LDExICs1MywxMCBAQCBXZWJDb250ZW50TGF5ZXJJbXBsOjp+V2ViQ29udGVudExheWVySW1wbCgp
CiAgICAgY2xlYXJEZWxlZ2F0ZSgpOwogfQogCi12b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBh
aW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcCkKK3Zv
aWQgV2ViQ29udGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyhTa0NhbnZhcyogY2FudmFzLCBj
b25zdCBJbnRSZWN0JiBjbGlwLCBJbnRSZWN0JikKIHsKICAgICBpZiAoIW1fY29udGVudENsaWVu
dCkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkNhbnZhcyogY2FudmFzID0gZ2MucGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpOwogICAgIG1fY29udGVudENsaWVudC0+cGFpbnRDb250ZW50cyhj
YW52YXMsIFdlYlJlY3QoY2xpcCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKaW5kZXggYTA2Y2Y5MDgyOTFmYWZlYTYyM2NiYmU3
NTdhY2UyNjhiZjUyZGQwOC4uNTQyYmQ5YjhlZjMzNmJkNGM3Zjc5YmE4YmQ5MzI3MWZhNDkzMTZm
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllcklt
cGwuaApAQCAtNDEsNyArNDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+V2ViQ29udGVu
dExheWVySW1wbCgpOwogCiAgICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50YXRp
b24uCi0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHMoU2tDYW52YXMqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwLCBXZWJD
b3JlOjpJbnRSZWN0JiBvcGFxdWUpOwogCiAgICAgV2ViQ29udGVudExheWVyQ2xpZW50KiBtX2Nv
bnRlbnRDbGllbnQ7CiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA5MzBhMjIzZmNkOGM0ZmZmNTJkNjlhYTZj
YWY5MDVjY2Y1NTJkZDZlLi5iM2MxMDUyMmI2OTUwZWU1YTgwZTJiYjdhYTdmZWE1Y2NlMzliZDU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0zNDA5
LDM4ICszNDA5LDIwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIH0K
ICNlbmRpZgogCi1jbGFzcyBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyIDogcHVibGljIExheWVy
UGFpbnRlckNocm9taXVtIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJWaWV3SW1wbENv
bnRlbnRQYWludGVyKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXZWJWaWV3SW1w
bENvbnRlbnRQYWludGVyKj4gY3JlYXRlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcih3
ZWJWaWV3SW1wbCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotICAgIHsKLSAgICAg
ICAgZG91YmxlIHBhaW50U3RhcnQgPSBjdXJyZW50VGltZSgpOwotICAgICAgICBQYWdlKiBwYWdl
ID0gbV93ZWJWaWV3SW1wbC0+cGFnZSgpOwotICAgICAgICBpZiAoIXBhZ2UpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UtPm1haW5GcmFtZSgpLT52
aWV3KCk7Ci0gICAgICAgIHZpZXctPnBhaW50Q29udGVudHMoJmNvbnRleHQsIGNvbnRlbnRSZWN0
KTsKLSAgICAgICAgZG91YmxlIHBhaW50RW5kID0gY3VycmVudFRpbWUoKTsKLSAgICAgICAgZG91
YmxlIHBpeGVsc1BlclNlYyA9IChjb250ZW50UmVjdC53aWR0aCgpICogY29udGVudFJlY3QuaGVp
Z2h0KCkpIC8gKHBhaW50RW5kIC0gcGFpbnRTdGFydCk7Ci0gICAgICAgIFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQuQWNjZWxSb290
UGFpbnREdXJhdGlvbk1TIiwgKHBhaW50RW5kIC0gcGFpbnRTdGFydCkgKiAxMDAwLCAwLCAxMjAs
IDMwKTsKLSAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0
b21Db3VudHMoIlJlbmRlcmVyNC5BY2NlbFJvb3RQYWludE1lZ2FwaXhQZXJTZWNvbmQiLCBwaXhl
bHNQZXJTZWMgLyAxMDAwMDAwLCAxMCwgMjEwLCAzMCk7Ci0KLSAgICAgICAgbV93ZWJWaWV3SW1w
bC0+c2V0QmFja2dyb3VuZENvbG9yKHZpZXctPmRvY3VtZW50QmFja2dyb3VuZENvbG9yKCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVy
KFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkKLSAgICAgICAgOiBtX3dlYlZpZXdJbXBsKHdlYlZp
ZXdJbXBsKQotICAgIHsKLSAgICB9Cit2b2lkIFdlYlZpZXdJbXBsOjpwYWludFJvb3RMYXllcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQorewor
ICAgIGRvdWJsZSBwYWludFN0YXJ0ID0gY3VycmVudFRpbWUoKTsKKyAgICBpZiAoIXBhZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1l
KCktPnZpZXcoKTsKKyAgICB2aWV3LT5wYWludENvbnRlbnRzKCZjb250ZXh0LCBjb250ZW50UmVj
dCk7CisgICAgZG91YmxlIHBhaW50RW5kID0gY3VycmVudFRpbWUoKTsKKyAgICBkb3VibGUgcGl4
ZWxzUGVyU2VjID0gKGNvbnRlbnRSZWN0LndpZHRoKCkgKiBjb250ZW50UmVjdC5oZWlnaHQoKSkg
LyAocGFpbnRFbmQgLSBwYWludFN0YXJ0KTsKKyAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50
KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LkFjY2VsUm9vdFBhaW50RHVyYXRp
b25NUyIsIChwYWludEVuZCAtIHBhaW50U3RhcnQpICogMTAwMCwgMCwgMTIwLCAzMCk7CisgICAg
V2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRl
cmVyNC5BY2NlbFJvb3RQYWludE1lZ2FwaXhQZXJTZWNvbmQiLCBwaXhlbHNQZXJTZWMgLyAxMDAw
MDAwLCAxMCwgMjEwLCAzMCk7CiAKLSAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKLX07
CisgICAgc2V0QmFja2dyb3VuZENvbG9yKHZpZXctPmRvY3VtZW50QmFja2dyb3VuZENvbG9yKCkp
OworfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUoYm9vbCBhY3RpdmUpCiB7CkBAIC0zNDc4LDcgKzM0NjAsNyBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAg
IGxheWVyVHJlZVZpZXdTZXR0aW5ncy5kZWZhdWx0VGlsZVNpemUgPSBzZXR0aW5nc0ltcGwoKS0+
ZGVmYXVsdFRpbGVTaXplKCk7CiAgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5tYXhVbnRp
bGVkTGF5ZXJTaXplID0gc2V0dGluZ3NJbXBsKCktPm1heFVudGlsZWRMYXllclNpemUoKTsKIAot
ICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdDo6Y3JlYXRlKFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7Cisg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0ID0gTm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0OjpjcmVhdGUodGhpcyk7CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5z
ZXRTaG93RGVidWdCb3JkZXJzKHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVnQm9yZGVycygp
KTsKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnNldE9wYXF1ZSghaXNUcmFu
c3BhcmVudCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5k
ZXggYTA4ODk2NzhhMTQwMDc0MmNjMjZlMGViZmJiZTIzZTE5OGI5MmQyZS4uOGQzMGY0NGVkMGEw
NTRlNzViNjk2ODQ1MzBiYmY5YmQ2N2NlYjM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCkBAIC01MDUsNiArNTA1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2No
ZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwogICAgIHZvaWQgc2Nyb2xsUm9vdExheWVyUmVj
dChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY2xpcFJlY3QpOwogICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgcGFpbnRSb290TGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY29udGVudFJlY3QpOwogICAg
IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCk7CiAg
ICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAKaW5kZXggYWFjZDlhNWQ2OTBmMzIxNzRiMWUyZTlhMmUyMWJiYzk3ZWE2ZDBjNi4u
MzRmNDllOTFkYmVkMWRlNDQzN2FkOGM4NzQ3ZDkxMzY4YTFiYmZkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0x
MTUwLDcgKzExNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQorICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFNrQ2FudmFzKiwgY29uc3QgSW50UmVjdCYsIEludFJl
Y3QmKQogICAgIHsKICAgICAgICAgLy8gU2V0IGxheWVyIG9wYWNpdHkgdG8gMC4KICAgICAgICAg
bV90ZXN0LT5sYXllclRyZWVIb3N0KCktPnJvb3RMYXllcigpLT5zZXRPcGFjaXR5KDApOwpAQCAt
MTI0NCw3ICsxMjQ0LDcgQEAgY2xhc3MgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIDogcHVibGlj
IENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVz
M0QsIGJvb2woKSk7Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmKSB7IH0KKyAgICB2b2lkIHBhaW50Q29udGVudHMoU2tDYW52YXMqLCBjb25z
dCBJbnRSZWN0JiwgSW50UmVjdCYpIHsgfQogICAgIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKCkg
eyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGls
ZWRMYXllclRlc3RDb21tb24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Rp
bGVkTGF5ZXJUZXN0Q29tbW9uLmNwcAppbmRleCA3MDE3YTAxZmY2OWE2MmQzMmZhMzE5YjhkYTc0
N2ExYTQ1NDgzZDY0Li43NDg0YjcwZjNjY2UyODgxZjQ2YjdlNjFjMmNjYmIxYzVlMTA1ZjI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RD
b21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVy
VGVzdENvbW1vbi5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6
On5GYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpCiB7CiB9CiAKLXZvaWQgRmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgSW50U2l6ZSYsIGludCwgZmxvYXQsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpCit2
b2lkIEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgSW50UmVjdCYgcmVzdWx0aW5n
T3BhcXVlUmVjdCkKIHsKICAgICBtX3ByZXBhcmVDb3VudCsrOwogICAgIG1fbGFzdFVwZGF0ZVJl
Y3QgPSBjb250ZW50UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKaW5kZXggZjE1MjAxYTg0ZDFlM2Q2ZGI1YzMzZTkw
MjE1YzM4NzhhMmVlMDZiOS4uNjhmZWY2NDIwOTZmYzQ4MWYxYmEwYWI2ZDk1YTA4MDdmOGEyNGM2
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJU
ZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmgKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgogICAgICAgICBUZXh0dXJl
KEZha2VMYXllclRleHR1cmVVcGRhdGVyKiwgUGFzc093blB0cjxXZWJDb3JlOjpNYW5hZ2VkVGV4
dHVyZT4pOwogICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVJlY3QoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRleHQqLCBXZWJDb3JlOjpUZXh0
dXJlQWxsb2NhdG9yKiAsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KFdlYkNvcmU6OkND
R3JhcGhpY3NDb250ZXh0KiwgV2ViQ29yZTo6VGV4dHVyZUFsbG9jYXRvciogLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJS
SURFOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIqIG1f
bGF5ZXI7CkBAIC01OCwxMCArNTgsMTAgQEAgcHVibGljOgogICAgIEZha2VMYXllclRleHR1cmVV
cGRhdGVyKCk7CiAgICAgdmlydHVhbCB+RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAg
IHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJl
PiBjcmVhdGVUZXh0dXJlKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyKik7Ci0gICAgdmlydHVhbCBT
YW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtKSB7IHJldHVybiBT
YW1wbGVkVGV4ZWxGb3JtYXRSR0JBOyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6
OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoV2ViQ29yZTo6VGV4
dHVyZU1hbmFnZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBz
YW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0pIE9WRVJSSURFIHsgcmV0dXJuIFNhbXBsZWRUZXhl
bEZvcm1hdFJHQkE7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBp
bnQsIGZsb2F0LCBXZWJDb3JlOjpJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxvYXQsIFdlYkNvcmU6OkludFJlY3Qm
IHJlc3VsdGluZ09wYXF1ZVJlY3QpIE9WRVJSSURFOwogICAgIC8vIFNldHMgdGhlIHJlY3QgdG8g
aW52YWxpZGF0ZSBkdXJpbmcgdGhlIG5leHQgY2FsbCB0byBwcmVwYXJlVG9VcGRhdGUoKS4gQWZ0
ZXIgdGhlIG5leHQKICAgICAvLyBjYWxsIHRvIHByZXBhcmVUb1VwZGF0ZSgpIHRoZSByZWN0IGlz
IHJlc2V0LgogICAgIHZvaWQgc2V0UmVjdFRvSW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCA5NTQxNzRhYjc2MzU3YTcx
MzI0MDFhMWQwYTNjYzgzOGM4ZWQ5MWE5Li41ZTVmNzAxMDExODA1YWRkOGZmOGMzMTZjYjFjOWM0
ZWFiZTZlODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVy
Q2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVy
Q2hyb21pdW1UZXN0LmNwcApAQCAtNzAsNyArNzAsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBNb2Nr
TGF5ZXJQYWludGVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewogcHVi
bGljOgotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRS
ZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFNrQ2FudmFzKiwgY29uc3QgSW50UmVj
dCYsIEludFJlY3QmKSB7IH0KIH07CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDFhOTdiYjViNzg0OWM1Y2JlNzk5OTM1MGNhZWFhNTk5MWE2NDkyYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiQml0bWFwU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIkZyYW1lQnVmZmVyU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaCIKLQotI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBQ
YWludENhbGxiYWNrIHsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0JikgPSAwOwotfTsKLQotY2xhc3MgVGVzdExheWVyUGFpbnRlckNo
cm9taXVtIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKLXB1YmxpYzoKLSAgICBUZXN0
TGF5ZXJQYWludGVyQ2hyb21pdW0oUGFpbnRDYWxsYmFjayYgY2FsbGJhY2spIDogbV9jYWxsYmFj
ayhjYWxsYmFjaykgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLSAgICB7Ci0gICAgICAgIG1f
Y2FsbGJhY2soY29udGV4dCwgY29udGVudFJlY3QpOwotICAgIH0KLQotICBwcml2YXRlOgotICAg
IFBhaW50Q2FsbGJhY2smIG1fY2FsbGJhY2s7Ci19OwotCi0vLyBQYWludCBjYWxsYmFjayBmdW5j
dGlvbnMKLQotc3RydWN0IFBhaW50RmlsbE9wYXF1ZSA6IHB1YmxpYyBQYWludENhbGxiYWNrIHsK
LSAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotICAgIHsKLSAgICAgICAgQ29sb3Igb3BhcXVlKDI1
NSwgMCwgMCwgMjU1KTsKLSAgICAgICAgSW50UmVjdCB0b3AoY29udGVudFJlY3QueCgpLCBjb250
ZW50UmVjdC55KCksIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpIC8g
Mik7Ci0gICAgICAgIEludFJlY3QgYm90dG9tKGNvbnRlbnRSZWN0LngoKSwgY29udGVudFJlY3Qu
eSgpICsgY29udGVudFJlY3QuaGVpZ2h0KCkgLyAyLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250
ZW50UmVjdC5oZWlnaHQoKSAvIDIpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHRvcCwgb3Bh
cXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5maWxsUmVjdChib3R0
b20sIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgfQotfTsKLQotc3RydWN0IFBh
aW50RmlsbEFscGhhIDogcHVibGljIFBhaW50Q2FsbGJhY2sgewotICAgIHZpcnR1YWwgdm9pZCBv
cGVyYXRvcigpKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpCi0gICAgewotICAgICAgICBDb2xvciBhbHBoYSgwLCAwLCAwLCAwKTsKLSAgICAgICAg
Y29udGV4dC5maWxsUmVjdChjb250ZW50UmVjdCwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwotICAgIH0KLX07Ci0KLXN0cnVjdCBQYWludEZpbGxQYXJ0aWFsT3BhcXVlIDogcHVibGljIFBh
aW50Q2FsbGJhY2sgewotICAgIFBhaW50RmlsbFBhcnRpYWxPcGFxdWUoSW50UmVjdCBvcGFxdWVS
ZWN0KQotICAgICAgICA6IG1fb3BhcXVlUmVjdChvcGFxdWVSZWN0KQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotICAgIHsKLSAgICAgICAgQ29sb3IgYWxwaGEoMCwg
MCwgMCwgMCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY29udGVudFJlY3QsIGFscGhhLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKLQotICAgICAgICBJbnRSZWN0IGZpbGxPcGFxdWUgPSBtX29w
YXF1ZVJlY3Q7Ci0gICAgICAgIGZpbGxPcGFxdWUuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKLQot
ICAgICAgICBDb2xvciBvcGFxdWUoMjU1LCAyNTUsIDI1NSwgMjU1KTsKLSAgICAgICAgY29udGV4
dC5maWxsUmVjdChmaWxsT3BhcXVlLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAg
IH0KLQotICAgIEludFJlY3QgbV9vcGFxdWVSZWN0OwotfTsKLQotI2RlZmluZSBFWFBFQ1RfRVFf
UkVDVChhLCBiKSBcCi0gICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKLSAgICBFWFBFQ1Rf
RVEoYS5tYXhYKCksIGIubWF4WCgpKTsgXAotICAgIEVYUEVDVF9FUShhLnkoKSwgYi55KCkpOyBc
Ci0gICAgRVhQRUNUX0VRKGEubWF4WSgpLCBiLm1heFkoKSk7Ci0KLVRFU1QoTGF5ZXJUZXh0dXJl
VXBkYXRlclRlc3QsIHRlc3RPcGFxdWVSZWN0UHJlc2VudEFmdGVyT3BhcXVlUGFpbnQpCi17Ci0g
ICAgUGFpbnRGaWxsT3BhcXVlIGZpbGxPcGFxdWU7Ci0gICAgUmVmUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXI+IHVwZGF0ZXI7Ci0gICAgSW50UmVjdCBvcGFxdWVSZWN0OwotICAgIE93blB0cjxUZXN0
TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXI7Ci0KLSAgICBvcGFxdWVSZWN0ID0gSW50UmVj
dCgpOwotICAgIHBhaW50ZXIgPSBhZG9wdFB0cihuZXcgVGVzdExheWVyUGFpbnRlckNocm9taXVt
KGZpbGxPcGFxdWUpKTsKLSAgICB1cGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVsZWFzZSgpLCBmYWxzZSk7Ci0gICAgdXBkYXRlci0+cHJl
cGFyZVRvVXBkYXRlKEludFJlY3QoMCwgMCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwg
MCwgMSwgb3BhcXVlUmVjdCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCA0MDAs
IDQwMCksIG9wYXF1ZVJlY3QpOwotCi0gICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAgICBw
YWludGVyID0gYWRvcHRQdHIobmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxsT3BhcXVl
KSk7Ci0gICAgdXBkYXRlciA9IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVhc2UoKSwgZmFsc2UpOwotICAgIHVwZGF0ZXItPnByZXBh
cmVUb1VwZGF0ZShJbnRSZWN0KDAsIDAsIDQwMCwgNDAwKSwgSW50U2l6ZSg0MDAsIDQwMCksIDAs
IDEsIG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgNDAwLCA0
MDApLCBvcGFxdWVSZWN0KTsKLQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgcGFp
bnRlciA9IGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbE9wYXF1ZSkp
OwotICAgIHVwZGF0ZXIgPSBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVhc2UoKSk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRv
VXBkYXRlKEludFJlY3QoMCwgMCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgMSwg
b3BhcXVlUmVjdCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCks
IG9wYXF1ZVJlY3QpOwotfQotCi1URVNUKExheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LCB0ZXN0T3Bh
cXVlUmVjdE5vdFByZXNlbnRBZnRlck5vbk9wYXF1ZVBhaW50KQotewotICAgIFBhaW50RmlsbEFs
cGhhIGZpbGxBbHBoYTsKLSAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gdXBkYXRlcjsK
LSAgICBJbnRSZWN0IG9wYXF1ZVJlY3Q7Ci0gICAgT3duUHRyPFRlc3RMYXllclBhaW50ZXJDaHJv
bWl1bT4gcGFpbnRlcjsKLQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgcGFpbnRl
ciA9IGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbEFscGhhKSk7Ci0g
ICAgdXBkYXRlciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShwYWlu
dGVyLnJlbGVhc2UoKSwgZmFsc2UpOwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShJbnRS
ZWN0KDAsIDAsIDQwMCwgNDAwKSwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIDEsIG9wYXF1ZVJlY3Qp
OwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJlY3QpOwot
Ci0gICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQdHIobmV3
IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxsQWxwaGEpKTsKLSAgICB1cGRhdGVyID0gQml0
bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVs
ZWFzZSgpLCBmYWxzZSk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKEludFJlY3QoMCwg
MCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgMSwgb3BhcXVlUmVjdCk7Ci0gICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb3BhcXVlUmVjdCk7Ci0KLSAgICBv
cGFxdWVSZWN0ID0gSW50UmVjdCgpOwotICAgIHBhaW50ZXIgPSBhZG9wdFB0cihuZXcgVGVzdExh
eWVyUGFpbnRlckNocm9taXVtKGZpbGxBbHBoYSkpOwotICAgIHVwZGF0ZXIgPSBGcmFtZUJ1ZmZl
clNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVh
c2UoKSk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKEludFJlY3QoMCwgMCwgNDAwLCA0
MDApLCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgMSwgb3BhcXVlUmVjdCk7Ci0gICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb3BhcXVlUmVjdCk7Ci19Ci0KLVRFU1QoTGF5ZXJU
ZXh0dXJlVXBkYXRlclRlc3QsIHRlc3RPcGFxdWVSZWN0Tm90UHJlc2VudEZvck9wYXF1ZUxheWVy
V2l0aE9wYXF1ZVBhaW50KQotewotICAgIFBhaW50RmlsbE9wYXF1ZSBmaWxsT3BhcXVlOwotICAg
IFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB1cGRhdGVyOwotICAgIEludFJlY3Qgb3BhcXVl
UmVjdDsKLSAgICBPd25QdHI8VGVzdExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyOwotCi0g
ICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQdHIobmV3IFRl
c3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxsT3BhcXVlKSk7Ci0gICAgdXBkYXRlciA9IEJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVhc2UoKSwgZmFs
c2UpOwotICAgIHVwZGF0ZXItPnNldE9wYXF1ZSh0cnVlKTsKLSAgICB1cGRhdGVyLT5wcmVwYXJl
VG9VcGRhdGUoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0MDApLCAwLCAx
LCBvcGFxdWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBv
cGFxdWVSZWN0KTsKLQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgcGFpbnRlciA9
IGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbE9wYXF1ZSkpOwotICAg
IHVwZGF0ZXIgPSBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVh
dGUocGFpbnRlci5yZWxlYXNlKCksIGZhbHNlKTsKLSAgICB1cGRhdGVyLT5zZXRPcGFxdWUodHJ1
ZSk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKEludFJlY3QoMCwgMCwgNDAwLCA0MDAp
LCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgMSwgb3BhcXVlUmVjdCk7Ci0gICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb3BhcXVlUmVjdCk7Ci0KLSAgICBvcGFxdWVSZWN0ID0g
SW50UmVjdCgpOwotICAgIHBhaW50ZXIgPSBhZG9wdFB0cihuZXcgVGVzdExheWVyUGFpbnRlckNo
cm9taXVtKGZpbGxPcGFxdWUpKTsKLSAgICB1cGRhdGVyID0gRnJhbWVCdWZmZXJTa1BpY3R1cmVD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCkpOwotICAg
IHVwZGF0ZXItPnNldE9wYXF1ZSh0cnVlKTsKLSAgICB1cGRhdGVyLT5wcmVwYXJlVG9VcGRhdGUo
SW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0MDApLCAwLCAxLCBvcGFxdWVS
ZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvcGFxdWVSZWN0
KTsKLX0KLQotVEVTVChMYXllclRleHR1cmVVcGRhdGVyVGVzdCwgdGVzdE9wYXF1ZVJlY3ROb3RQ
cmVzZW50Rm9yT3BhcXVlTGF5ZXJXaXRoTm9uT3BhcXVlUGFpbnQpCi17Ci0gICAgUGFpbnRGaWxs
QWxwaGEgZmlsbEFscGhhOwotICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB1cGRhdGVy
OwotICAgIEludFJlY3Qgb3BhcXVlUmVjdDsKLSAgICBPd25QdHI8VGVzdExheWVyUGFpbnRlckNo
cm9taXVtPiBwYWludGVyOwotCi0gICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAgICBwYWlu
dGVyID0gYWRvcHRQdHIobmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxsQWxwaGEpKTsK
LSAgICB1cGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBh
aW50ZXIucmVsZWFzZSgpLCBmYWxzZSk7Ci0gICAgdXBkYXRlci0+c2V0T3BhcXVlKHRydWUpOwot
ICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShJbnRSZWN0KDAsIDAsIDQwMCwgNDAwKSwgSW50
U2l6ZSg0MDAsIDQwMCksIDAsIDEsIG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJlY3QpOwotCi0gICAgb3BhcXVlUmVjdCA9IEludFJl
Y3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQdHIobmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1
bShmaWxsQWxwaGEpKTsKLSAgICB1cGRhdGVyID0gQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVsZWFzZSgpLCBmYWxzZSk7Ci0gICAgdXBk
YXRlci0+c2V0T3BhcXVlKHRydWUpOwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShJbnRS
ZWN0KDAsIDAsIDQwMCwgNDAwKSwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIDEsIG9wYXF1ZVJlY3Qp
OwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJlY3QpOwot
Ci0gICAgb3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQdHIobmV3
IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShmaWxsQWxwaGEpKTsKLSAgICB1cGRhdGVyID0gRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUocGFpbnRl
ci5yZWxlYXNlKCkpOwotICAgIHVwZGF0ZXItPnNldE9wYXF1ZSh0cnVlKTsKLSAgICB1cGRhdGVy
LT5wcmVwYXJlVG9VcGRhdGUoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0
MDApLCAwLCAxLCBvcGFxdWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAs
IDAsIDApLCBvcGFxdWVSZWN0KTsKLX0KLQotVEVTVChMYXllclRleHR1cmVVcGRhdGVyVGVzdCwg
dGVzdFBhcnRpYWxPcGFxdWVSZWN0Tm9UcmFuc2Zvcm0pCi17Ci0gICAgSW50UmVjdCBwYXJ0aWFs
UmVjdCgxMDAsIDIwMCwgNTAsIDc1KTsKLSAgICBQYWludEZpbGxQYXJ0aWFsT3BhcXVlIGZpbGxQ
YXJ0aWFsKHBhcnRpYWxSZWN0KTsKLSAgICBPd25QdHI8VGVzdExheWVyUGFpbnRlckNocm9taXVt
PiBwYWludGVyKGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbFBhcnRp
YWwpKSk7Ci0gICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHVwZGF0ZXIgPSBCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCksIGZhbHNl
KTsKLQotICAgIEludFJlY3Qgb3BhcXVlUmVjdDsKLSAgICB1cGRhdGVyLT5wcmVwYXJlVG9VcGRh
dGUoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0MDApLCAwLCAxLCBvcGFx
dWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChwYXJ0aWFsUmVjdCwgb3BhcXVlUmVjdCk7Ci19
Ci0KLVRFU1QoTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QsIHRlc3RQYXJ0aWFsT3BhcXVlUmVjdFRy
YW5zbGF0aW9uKQotewotICAgIEludFJlY3QgcGFydGlhbFJlY3QoMTAwLCAyMDAsIDUwLCA3NSk7
Ci0gICAgUGFpbnRGaWxsUGFydGlhbE9wYXF1ZSBmaWxsUGFydGlhbChwYXJ0aWFsUmVjdCk7Ci0K
LSAgICBPd25QdHI8VGVzdExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKGFkb3B0UHRyKG5l
dyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbFBhcnRpYWwpKSk7Ci0gICAgUmVmUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXI+IHVwZGF0ZXIgPSBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCksIGZhbHNlKTsKLQotICAgIEludFJlY3Qgb3Bh
cXVlUmVjdDsKLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KDExLCAxMiwgMzg5LCAzODgpOwotICAg
IHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50UmVjdCwgSW50U2l6ZSg0MDAsIDQwMCks
IDAsIDEsIG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9SRUNUKHBhcnRpYWxSZWN0LCBvcGFx
dWVSZWN0KTsKLX0KLQotVEVTVChMYXllclRleHR1cmVVcGRhdGVyVGVzdCwgdGVzdFBhcnRpYWxP
cGFxdWVSZWN0U2NhbGUpCi17Ci0gICAgZmxvYXQgY29udGVudHNTY2FsZSA9IDAuNTsKLQotICAg
IEludFJlY3QgcGFydGlhbFJlY3QoOSwgMjAsIDUwLCA3NSk7Ci0gICAgSW50UmVjdCBwYXJ0aWFs
RGV2aWNlUmVjdChwYXJ0aWFsUmVjdCk7Ci0gICAgUGFpbnRGaWxsUGFydGlhbE9wYXF1ZSBmaWxs
UGFydGlhbChwYXJ0aWFsRGV2aWNlUmVjdCk7Ci0gICAgT3duUHRyPFRlc3RMYXllclBhaW50ZXJD
aHJvbWl1bT4gcGFpbnRlcihhZG9wdFB0cihuZXcgVGVzdExheWVyUGFpbnRlckNocm9taXVtKGZp
bGxQYXJ0aWFsKSkpOwotICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB1cGRhdGVyID0g
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVsZWFzZSgp
LCBmYWxzZSk7Ci0KLSAgICBJbnRSZWN0IG9wYXF1ZVJlY3Q7Ci0gICAgSW50UmVjdCBjb250ZW50
UmVjdCg0LCA2LCAzOTYsIDM5NCk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRl
bnRSZWN0LCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgY29udGVudHNTY2FsZSwgb3BhcXVlUmVjdCk7
Ci0KLSAgICAvLyBPcmlnaW5hbCByZWN0OiA5LCAyMCwgNTAsIDc1Ci0gICAgLy8gU2NhbGVkIGRv
d24gdG8gaGFsZiBzaXplOiA0LjUsIDEwLCAyNSwgMzcuNQotICAgIC8vIEVuY2xvc2VkIGludCBy
ZWN0OiA1LCAxMCwgMjQsIDM3Ci0gICAgLy8gU2NhbGVkIGJhY2sgdXAgdG8gY29udGVudDogMTAs
IDIwLCA0OCwgNzQKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QoMTAsIDIwLCA0OCwgNzQpOwotICAg
IEVYUEVDVF9FUV9SRUNUKHNjYWxlZFJlY3QsIG9wYXF1ZVJlY3QpOwotfQotCi19IC8vIG5hbWVz
cGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9PcGFxdWVSZWN0
VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE3OGFlOTU1Y2M2MzRjMDJkYzc5ZGMzMWI1OWQ1ZTgzN2MzZmI1MDYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL09wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdC5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIk9wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2lu
Y2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK3N0cnVj
dCBQYWludENhbGxiYWNrIHsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRSZWN0JikgPSAwOworfTsKKworY2xhc3MgVGVzdExheWVyUGFpbnRl
ckNocm9taXVtIDogcHVibGljIEdyYXBoaWNzQ29udGV4dFBhaW50ZXIgeworcHVibGljOgorICAg
IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShQYWludENhbGxiYWNrJiBjYWxsYmFjaykgOiBtX2Nh
bGxiYWNrKGNhbGxiYWNrKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBPVkVSUklERQorICAg
IHsKKyAgICAgICAgbV9jYWxsYmFjayhjb250ZXh0LCBjb250ZW50UmVjdCk7CisgICAgfQorCisg
IHByaXZhdGU6CisgICAgUGFpbnRDYWxsYmFjayYgbV9jYWxsYmFjazsKK307CisKKy8vIFBhaW50
IGNhbGxiYWNrIGZ1bmN0aW9ucworCitzdHJ1Y3QgUGFpbnRGaWxsT3BhcXVlIDogcHVibGljIFBh
aW50Q2FsbGJhY2sgeworICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIE9WRVJSSURFCisgICAgewor
ICAgICAgICBDb2xvciBvcGFxdWUoMjU1LCAwLCAwLCAyNTUpOworICAgICAgICBJbnRSZWN0IHRv
cChjb250ZW50UmVjdC54KCksIGNvbnRlbnRSZWN0LnkoKSwgY29udGVudFJlY3Qud2lkdGgoKSwg
Y29udGVudFJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgSW50UmVjdCBib3R0b20oY29udGVu
dFJlY3QueCgpLCBjb250ZW50UmVjdC55KCkgKyBjb250ZW50UmVjdC5oZWlnaHQoKSAvIDIsIGNv
bnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpIC8gMik7CisgICAgICAgIGNv
bnRleHQuZmlsbFJlY3QodG9wLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAg
ICBjb250ZXh0LmZpbGxSZWN0KGJvdHRvbSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
KyAgICB9Cit9OworCitzdHJ1Y3QgUGFpbnRGaWxsQWxwaGEgOiBwdWJsaWMgUGFpbnRDYWxsYmFj
ayB7CisgICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKKyAgICB7CisgICAgICAgIENvbG9yIGFscGhh
KDAsIDAsIDAsIDApOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGNvbnRlbnRSZWN0LCBhbHBo
YSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgfQorfTsKKworc3RydWN0IFBhaW50RmlsbFBh
cnRpYWxPcGFxdWUgOiBwdWJsaWMgUGFpbnRDYWxsYmFjayB7CisgICAgUGFpbnRGaWxsUGFydGlh
bE9wYXF1ZShJbnRSZWN0IG9wYXF1ZVJlY3QpCisgICAgICAgIDogbV9vcGFxdWVSZWN0KG9wYXF1
ZVJlY3QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCisgICAgewor
ICAgICAgICBDb2xvciBhbHBoYSgwLCAwLCAwLCAwKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVj
dChjb250ZW50UmVjdCwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgICAgIElu
dFJlY3QgZmlsbE9wYXF1ZSA9IG1fb3BhcXVlUmVjdDsKKyAgICAgICAgZmlsbE9wYXF1ZS5pbnRl
cnNlY3QoY29udGVudFJlY3QpOworCisgICAgICAgIENvbG9yIG9wYXF1ZSgyNTUsIDI1NSwgMjU1
LCAyNTUpOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGZpbGxPcGFxdWUsIG9wYXF1ZSwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgfQorCisgICAgSW50UmVjdCBtX29wYXF1ZVJlY3Q7Cit9
OworCisjZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCks
IGIueCgpKTsgXAorICAgIEVYUEVDVF9FUShhLm1heFgoKSwgYi5tYXhYKCkpOyBcCisgICAgRVhQ
RUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5tYXhZKCksIGIubWF4WSgp
KTsKKworY2xhc3MgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGVUZXN0IDog
cHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIE9wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlVGVzdCgpCisgICAgICAgIDogbV9za0NhbnZhcyhhZG9wdFB0cihz
a2lhOjpDcmVhdGVCaXRtYXBDYW52YXMoY2FudmFzUmVjdCgpLndpZHRoKCksIGNhbnZhc1JlY3Qo
KS5oZWlnaHQoKSwgZmFsc2UpKSkKKyAgICB7CisgICAgfQorCisgICAgU2tDYW52YXMqIHNrQ2Fu
dmFzKCkgeyByZXR1cm4gbV9za0NhbnZhcy5nZXQoKTsgfQorICAgIEludFJlY3QgY2FudmFzUmVj
dCgpIHsgcmV0dXJuIEludFJlY3QoMCwgMCwgNDAwLCA0MDApOyB9CisKK3ByaXZhdGU6CisgICAg
T3duUHRyPFNrQ2FudmFzPiBtX3NrQ2FudmFzOworfTsKKworVEVTVF9GKE9wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCwgdGVzdE9wYXF1ZVJlY3RQcmVzZW50QWZ0ZXJP
cGFxdWVQYWludCkKK3sKKyAgICBQYWludEZpbGxPcGFxdWUgZmlsbE9wYXF1ZTsKKyAgICBUZXN0
TGF5ZXJQYWludGVyQ2hyb21pdW0gcGFpbnRlcihmaWxsT3BhcXVlKTsKKworICAgIE9wYXF1ZVJl
Y3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlIGRlbGVnYXRlKCZwYWludGVyKTsKKworICAg
IEludFJlY3Qgb3BhcXVlUmVjdDsKKyAgICBkZWxlZ2F0ZS5wYWludENvbnRlbnRzKHNrQ2FudmFz
KCksIGNhbnZhc1JlY3QoKSwgb3BhcXVlUmVjdCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgwLCAwLCA0MDAsIDQwMCksIG9wYXF1ZVJlY3QpOworfQorCitURVNUX0YoT3BhcXVlUmVjdFRy
YWNraW5nQ29udGVudExheWVyRGVsZWdhdGVUZXN0LCB0ZXN0T3BhcXVlUmVjdE5vdFByZXNlbnRB
ZnRlck5vbk9wYXF1ZVBhaW50KQoreworICAgIFBhaW50RmlsbEFscGhhIGZpbGxBbHBoYTsKKyAg
ICBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0gcGFpbnRlcihmaWxsQWxwaGEpOworICAgIE9wYXF1
ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlIGRlbGVnYXRlKCZwYWludGVyKTsKKwor
ICAgIEludFJlY3Qgb3BhcXVlUmVjdDsKKyAgICBkZWxlZ2F0ZS5wYWludENvbnRlbnRzKHNrQ2Fu
dmFzKCksIGNhbnZhc1JlY3QoKSwgb3BhcXVlUmVjdCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgwLCAwLCAwLCAwKSwgb3BhcXVlUmVjdCk7Cit9CisKK1RFU1RfRihPcGFxdWVSZWN0VHJh
Y2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QsIHRlc3RPcGFxdWVSZWN0Tm90UHJlc2VudEZv
ck9wYXF1ZUxheWVyV2l0aE9wYXF1ZVBhaW50KQoreworICAgIFBhaW50RmlsbE9wYXF1ZSBmaWxs
T3BhcXVlOworICAgIFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bSBwYWludGVyKGZpbGxPcGFxdWUp
OworICAgIE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlIGRlbGVnYXRlKCZw
YWludGVyKTsKKworICAgIGRlbGVnYXRlLnNldE9wYXF1ZSh0cnVlKTsKKworICAgIEludFJlY3Qg
b3BhcXVlUmVjdDsKKyAgICBkZWxlZ2F0ZS5wYWludENvbnRlbnRzKHNrQ2FudmFzKCksIGNhbnZh
c1JlY3QoKSwgb3BhcXVlUmVjdCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAw
LCAwKSwgb3BhcXVlUmVjdCk7Cit9CisKK1RFU1RfRihPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50
TGF5ZXJEZWxlZ2F0ZVRlc3QsIHRlc3RPcGFxdWVSZWN0Tm90UHJlc2VudEZvck9wYXF1ZUxheWVy
V2l0aE5vbk9wYXF1ZVBhaW50KQoreworICAgIFBhaW50RmlsbE9wYXF1ZSBmaWxsQWxwaGE7Cisg
ICAgVGVzdExheWVyUGFpbnRlckNocm9taXVtIHBhaW50ZXIoZmlsbEFscGhhKTsKKyAgICBPcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSgmcGFpbnRlcik7CisK
KyAgICBkZWxlZ2F0ZS5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBJbnRSZWN0IG9wYXF1ZVJlY3Q7
CisgICAgZGVsZWdhdGUucGFpbnRDb250ZW50cyhza0NhbnZhcygpLCBjYW52YXNSZWN0KCksIG9w
YXF1ZVJlY3QpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1
ZVJlY3QpOworfQorCitURVNUX0YoT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdh
dGVUZXN0LCB0ZXN0UGFydGlhbE9wYXF1ZVJlY3ROb1RyYW5zZm9ybSkKK3sKKyAgICBJbnRSZWN0
IHBhcnRpYWxSZWN0KDEwMCwgMjAwLCA1MCwgNzUpOworICAgIFBhaW50RmlsbFBhcnRpYWxPcGFx
dWUgZmlsbFBhcnRpYWwocGFydGlhbFJlY3QpOworICAgIFRlc3RMYXllclBhaW50ZXJDaHJvbWl1
bSBwYWludGVyKGZpbGxQYXJ0aWFsKTsKKyAgICBPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5
ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSgmcGFpbnRlcik7CisKKyAgICBJbnRSZWN0IG9wYXF1ZVJlY3Q7
CisgICAgZGVsZWdhdGUucGFpbnRDb250ZW50cyhza0NhbnZhcygpLCBjYW52YXNSZWN0KCksIG9w
YXF1ZVJlY3QpOworICAgIEVYUEVDVF9FUV9SRUNUKHBhcnRpYWxSZWN0LCBvcGFxdWVSZWN0KTsK
K30KKworVEVTVF9GKE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCwg
dGVzdFBhcnRpYWxPcGFxdWVSZWN0VHJhbnNsYXRpb24pCit7CisgICAgSW50UmVjdCBwYXJ0aWFs
UmVjdCgxMDAsIDIwMCwgNTAsIDc1KTsKKyAgICBQYWludEZpbGxQYXJ0aWFsT3BhcXVlIGZpbGxQ
YXJ0aWFsKHBhcnRpYWxSZWN0KTsKKyAgICBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0gcGFpbnRl
cihmaWxsUGFydGlhbCk7CisgICAgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdh
dGUgZGVsZWdhdGUoJnBhaW50ZXIpOworCisgICAgSW50UmVjdCBvcGFxdWVSZWN0OworICAgIElu
dFJlY3QgY29udGVudFJlY3QoMTEsIDEyLCAzODksIDM4OCk7CisgICAgZGVsZWdhdGUucGFpbnRD
b250ZW50cyhza0NhbnZhcygpLCBjb250ZW50UmVjdCwgb3BhcXVlUmVjdCk7CisgICAgRVhQRUNU
X0VRX1JFQ1QocGFydGlhbFJlY3QsIG9wYXF1ZVJlY3QpOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147458</attachid>
            <date>2012-06-13 18:28:13 -0700</date>
            <delta_ts>2012-06-14 11:54:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89031-20120613182813.patch</filename>
            <type>text/plain</type>
            <size>80199</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY1MjU3YTE1MWQ4MjEy
NDg3OGNhNDM5NmFhZTEyYmJkNDIzZTU1ZC4uZjUwZDNhYjEwMzdkOTMyMjFjZjE4NGQyYjI5ZDlm
NGE5YmJlNmY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTA2LTEzICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIG9wYXF1ZSByZWN0YW5nbGUgdHJhY2tpbmcgbG9naWMgb3V0IG9mIGNvbXBvc2l0b3IgY29y
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1v
dmVzIHRoZSBvcGFxdWUgcGFpbnQgdHJhY2tpbmcgbG9naWMgZnJvbSB0aGUgY29tcG9zaXRvciAo
c3BlY2lmaWNhbGx5IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpIG91dCB0byBhCisgICAgICAg
IGRlZGljYXRlZCBjbGFzcyB1c2VkIGJ5IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSBmb3IgR3JhcGhp
Y3NDb250ZXh0LXBhaW50ZWQgY29udGVudC4gVGhpcyBjaGFuZ2VzIHRoZSBpbnRlcmZhY2UKKyAg
ICAgICAgZXhwb3NlZCBieSB0aGUgY29tcG9zaXRvciB0byBwYXNzIGEgU2tDYW52YXMgYW5kIGxl
dCB0aGUgdXNlciBmaWxsIGluIGFuIG9wYXF1ZSByZWN0IGlmIG5lZWRlZC4gQ2FsbGVycyB0aGF0
IGFyZQorICAgICAgICB1c2luZyBHcmFwaGljc0NvbnRleHQgdG8gcGFpbnQgY2FuIGluc3RhbnRp
YXRlIGEgUGxhdGZvcm1Db250ZXh0U2tpYSAvIEdyYXBoaWNzQ29udGV4dCBhcm91bmQgdGhpcyBT
a0NhbnZhcyBpZgorICAgICAgICB0aGV5IGNob29zZSB0bywgb3IgdXNlIHNvbWUgb3RoZXIgc3Ry
YXRlZ3ksIG9yIG5vdCBmaWxsIGl0IGluIGF0IGFsbC4gVGhpcyBhdm9pZHMgY3JlYXRpbmcgZXh0
cmEgd3JhcHBlciBjbGFzc2VzCisgICAgICAgIGlmIHRoZSBldmVudHVhbCBjYWxsZXIgaXMgZ29p
bmcgdG8gdXNlIHRoZSB1bmRlcmx5aW5nIFNrQ2FudmFzIGFueXdheSAoc3VjaCBhcyBXZWJDb250
ZW50TGF5ZXIpIGFuZCBicmVha3MgdGhlCisgICAgICAgIGRlcGVuZGVuY3kgZnJvbSB0aGUgY29t
cG9zaXRvciBjb2RlIG9uIEdyYXBoaWNzQ29udGV4dCAvIFBsYXRmb3JtQ29udGV4dFNraWEuCisK
KyAgICAgICAgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUgaXMgYSBoZWxw
ZXIgY2xhc3MgdGhhdCB3cmFwcyBhIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9u
IHdpdGgKKyAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSdzIG9wYXF1ZSByZWdpb24gdHJhY2tp
bmcgbG9naWMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFx
dWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllclBhaW50ZXI6OnBhaW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9taXVtKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoTGF5ZXJQYWludGVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hs
aWdodDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGlua0hpZ2hsaWdodC5oOgorICAgICAgICAoTGlua0hpZ2hsaWdodCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVy
RGVsZWdhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGU6Ok9wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlOjp+T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExh
eWVyRGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVjdFRyYWNraW5nQ29udGVu
dExheWVyRGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHRQYWludGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBhaW50ZXI6On5HcmFwaGljc0Nv
bnRleHRQYWludGVyKToKKyAgICAgICAgKE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRl
bGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXll
ckRlbGVnYXRlOjpzZXRPcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsYXRmb3JtQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpQYWludGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTA2LTEzICBDaGFybGVzIFdlaSAg
PGNoYXJsZXMud2VpQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBOZWVkIGN1c3RvbWl6
ZWQgdG9ET01TdHJpbmdMaXN0IGZvciBJbmRleGVkREIgSlNDIGJpbmRpbmcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IGI2OGQwMDM1YTc1OGJhOWQ0MDc1OWY4ZmQzYTA2YmM1NTBhMmYy
OTkuLmY4NTQ5OTA5ZDQ1MWVmN2RhM2MzOGRmOTE5NTNmZjhlYzcxMzcyMmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTItMDYtMTMgIEphbWVzIFJvYmlu
c29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgb3Bh
cXVlIHJlY3RhbmdsZSB0cmFja2luZyBsb2dpYyBvdXQgb2YgY29tcG9zaXRvciBjb3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzMQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVzIHRoZSBncmF5
c2NhbGUvc3VicGl4ZWwgQUEgdGV4dCBkZWNpc2lvbiBpbnRvIE5vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdCBhbmQgcmVtb3ZlcyBvbmUgbGF5ZXIgb2YgaW5kaXJlY3Rpb24KKyAgICAgICAgYmV0d2Vu
IE5DQ0ggYW5kIFdWSSB0aGF0IGV4aXN0ZWQgb25seSBmb3IgaGlzdG9yaWNhbCByZWFzb25zLgor
CisgICAgICAgIFBvcnRzIHRoZSBvcGFxdWUgcmVjdCB0cmFja2luZyB0ZXN0cyB0aGF0IHdlcmUg
aW4gTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QgdG8KKyAgICAgICAgT3BhcXVlcmVjdFRyYWNraW5n
Q29udGVudExheWVyRGVsZWdhdGVUZXN0IHRvIHJlZmxlY3QgdGhlIG1vdmUgaW4gcmVzcG9uc2li
aWxpdGllcy4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHNyYy9Ob25Db21w
b3NpdGVkQ29udGVudEhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpOb25Db21wb3NpdGVkQ29u
dGVudEhvc3Q6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6c2V0T3BhcXVlKToKKyAgICAgICAgKFdlYktpdDo6Tm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBzcmMvTm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRl
KToKKyAgICAgICAgKE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCk6CisgICAgICAgICogc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXJJ
bXBsOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBzcmMvV2ViQ29udGVudExheWVySW1wbC5o
OgorICAgICAgICAoV2ViQ29udGVudExheWVySW1wbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBhaW50Um9vdExheWVyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJWaWV3
SW1wbCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAg
IChXVEY6OlRlc3RPcGFjaXR5Q2hhbmdlTGF5ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50cyk6Cisg
ICAgICAgIChXVEY6Ok1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50cyk6Cisg
ICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL0xh
eWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB0ZXN0cy9PcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoUGFpbnRDYWxsYmFjayk6CisgICAgICAgIChUZXN0TGF5
ZXJQYWludGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6VGVzdExheWVyUGFpbnRlckNo
cm9taXVtOjpUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UGFp
bnRGaWxsQWxwaGE6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6UGFpbnRGaWxsUGFy
dGlhbE9wYXF1ZTo6UGFpbnRGaWxsUGFydGlhbE9wYXF1ZSk6CisgICAgICAgIChQYWludEZpbGxQ
YXJ0aWFsT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50RmlsbFBhcnRpYWxPcGFxdWU6
Om9wZXJhdG9yKCkpOgorICAgICAgICAoT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVs
ZWdhdGVUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRM
YXllckRlbGVnYXRlVGVzdDo6T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGVU
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRl
bGVnYXRlVGVzdDo6c2tDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVjdFRyYWNr
aW5nQ29udGVudExheWVyRGVsZWdhdGVUZXN0OjpjYW52YXNSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1RfRik6CisKIDIwMTItMDYtMTMgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIENyYXNoIHdoZW4gV2ViVmlld0ltcGw6OnNl
dElzVHJhbnNwYXJlbnQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgV2ViTGF5ZXJUcmVlVmlldyBoYXMg
YmVlbiBpbml0aWFsaXplZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1ZDEwMjM5MTRmNjE5NmU4NTZh
MDI1ZmNkZDY3ODY4MzdjZGRmY2YyLi5hMmM5MGQ2Y2E5NGYxNDNhMTY2MmYxMTIxZjM3NDMwYmEy
ODlmMDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNjI2LDYgKzM2MjYsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRl
Q2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3Bh
cXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJE
ZWxlZ2F0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0
Zm9ybUNhbnZhcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsYXRmb3JtQ2FudmFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsYXRmb3JtQ29sb3IuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IGQyMDVhMTdmZmVkODUyMjBiODBkYTFlYjUwYmEx
ZmZkYWU0MGI5OWQuLmY4NTI4NWYzYmYyNjJiZDM4MjNhMTkyNDdmZjNkOTkwMzUyYWI2MGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5o
IgorI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTU4LDYgKzU5LDcgQEAgUGFzc1JlZlB0cjxCaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyPiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmUKIAogQml0
bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1h
cFRleFN1YkltYWdlKQogICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQor
ICAgICwgbV9vcGFxdWUoZmFsc2UpCiAgICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1Yklt
YWdlKQogewogfQpAQCAtNzgsMzUgKzgwLDM1IEBAIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBs
ZWRUZXhlbEZvcm1hdCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpzYW1wbGVkCiAg
ICAgICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDog
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQTsKIH0KIAotdm9pZCBC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4
ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlLCBJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0KQor
dm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBmbG9hdCBj
b250ZW50c1NjYWxlLCBJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0KQogewogICAgIG1fdGV4
U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKIAotICAgIGJvb2wgbGF5ZXJJc09w
YXF1ZSA9IG1fY2FudmFzLm9wYXF1ZSgpOwotCi0gICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRS
ZWN0LnNpemUoKSk7Ci0gICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3Jk
ZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCi0gICAgLy8gbGF5ZXIgaXMgbGlrZWx5
IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCi0g
ICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Yg
c3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgIGJvb2wgdXNlR3JheXNjYWxlVGV4dCA9IGJvcmRl
clRleGVscyB8fCAhbGF5ZXJJc09wYXF1ZTsKLSAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6
VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0KLSAgICAgICAgdXNlR3JheXNjYWxlVGV4dCA/IFBsYXRm
b3JtQ2FudmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52YXM6OlBhaW50
ZXI6OlN1YnBpeGVsVGV4dDsKLSAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBjYW52YXNQYWlu
dGVyKCZtX2NhbnZhcywgdGV4dE9wdGlvbik7Ci0gICAgY2FudmFzUGFpbnRlci5za2lhQ29udGV4
dCgpLT5zZXRUcmFja09wYXF1ZVJlZ2lvbighbGF5ZXJJc09wYXF1ZSk7Ci0gICAgcGFpbnRDb250
ZW50cygqY2FudmFzUGFpbnRlci5jb250ZXh0KCksICpjYW52YXNQYWludGVyLnNraWFDb250ZXh0
KCksIGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlLCByZXN1bHRpbmdPcGFxdWVSZWN0KTsKKyAg
ICBpZiAobV9jYW52YXNTaXplICE9IGNvbnRlbnRSZWN0LnNpemUoKSkgeworICAgICAgICBtX2Nh
bnZhc1NpemUgPSBjb250ZW50UmVjdC5zaXplKCk7CisgICAgICAgIG1fY2FudmFzID0gYWRvcHRQ
dHIoc2tpYTo6Q3JlYXRlQml0bWFwQ2FudmFzKG1fY2FudmFzU2l6ZS53aWR0aCgpLCBtX2NhbnZh
c1NpemUuaGVpZ2h0KCksIG1fb3BhcXVlKSk7CisgICAgfQorCisgICAgcGFpbnRDb250ZW50cyht
X2NhbnZhcy5nZXQoKSwgY29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUsIHJlc3VsdGluZ09wYXF1
ZVJlY3QpOwogfQogCiB2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0
ZVRleHR1cmVSZWN0KENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9y
KiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBQbGF0Zm9ybUNhbnZhczo6
QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFw
ID0gbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGJpdG1h
cC5sb2NrUGl4ZWxzKCk7CiAKICAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCBhbGxv
Y2F0b3IpOwotICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKGxvY2tlci5waXhlbHMoKSwgY29udGVu
dFJlY3QoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QsIHRleHR1cmUtPmZvcm1hdCgpLCBjb250ZXh0
KTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
Yml0bWFwLmdldFBpeGVscygpKSwgY29udGVudFJlY3QoKSwgc291cmNlUmVjdCwgZGVzdFJlY3Qs
IHRleHR1cmUtPmZvcm1hdCgpLCBjb250ZXh0KTsKKyAgICBiaXRtYXAudW5sb2NrUGl4ZWxzKCk7
CiB9CiAKIHZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2V0T3BhcXVlKGJv
b2wgb3BhcXVlKQogewotICAgIG1fY2FudmFzLnNldE9wYXF1ZShvcGFxdWUpOworICAgIGlmIChv
cGFxdWUgIT0gbV9vcGFxdWUpIHsKKyAgICAgICAgbV9jYW52YXMuY2xlYXIoKTsKKyAgICAgICAg
bV9jYW52YXNTaXplID0gSW50U2l6ZSgpOworICAgIH0KKyAgICBtX29wYXF1ZSA9IG9wYXF1ZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDZmZjdjNjM5NmFjMDY4ZmZlZjRmNThhNzFm
OGExNDlmMTE5N2NjMDUuLjNjOTUzODBjZTkzMmFjZjQ4YTliNWYyMDgxYTRhOGMyNzhlZDYyYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgK
QEAgLTMxLDEzICszMSwxNCBAQAogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1DYW52YXMuaCIKKworY2xhc3MgU2tDYW52YXM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CiAKLS8vIFRoaXMgY2xhc3MgcmFzdGVyaXplcyB0
aGUgY29udGVudFJlY3QgaW50byBhIFBsYXRmb3JtQ2FudmFzLiBJdCB0aGVuIHVwZGF0ZXMKKy8v
IFRoaXMgY2xhc3MgcmFzdGVyaXplcyB0aGUgY29udGVudFJlY3QgaW50byBhIHNraWEgYml0bWFw
IGNhbnZhcy4gSXQgdGhlbiB1cGRhdGVzCiAvLyB0ZXh0dXJlcyBieSBjb3B5aW5nIGZyb20gdGhl
IGNhbnZhcyBpbnRvIHRoZSB0ZXh0dXJlLCB1c2luZyBNYXBTdWJJbWFnZSBpZgogLy8gcG9zc2li
bGUuCiBjbGFzcyBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIgewpAQCAtNDcsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFRleHR1cmUoQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFu
YWdlZFRleHR1cmU+KTsKICAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVSZWN0KENDR3JhcGhpY3NDb250ZXh0KiwgVGV4dHVyZUFsbG9jYXRv
ciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqLCBUZXh0
dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpIE9WRVJSSURFOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVV
cGRhdGVyOyB9CkBAIC02MCwxNSArNjEsMTcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNz
T3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVy
ZU1hbmFnZXIqKTsKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxG
b3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3Vs
dGluZ09wYXF1ZVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBmbG9hdCBjb250
ZW50c1NjYWxlLCBJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0KSBPVkVSUklERTsKICAgICB2
b2lkIHVwZGF0ZVRleHR1cmVSZWN0KENDR3JhcGhpY3NDb250ZXh0KiwgVGV4dHVyZUFsbG9jYXRv
ciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlKGJvb2wpIE9WRVJSSURFOwogCiBwcml2YXRlOgogICAg
IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJD
aHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwogCi0gICAgUGxhdGZvcm1DYW52YXMg
bV9jYW52YXM7CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKKyAgICBJbnRTaXplIG1f
Y2FudmFzU2l6ZTsKKyAgICBib29sIG1fb3BhcXVlOwogICAgIExheWVyVGV4dHVyZVN1YkltYWdl
IG1fdGV4U3ViSW1hZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IGI3NTkyNTJlMWY3
YWIyYWJkYzZhYWFhY2Q5MDlkYTg3OWY0N2VmZGYuLjk3MGYxYzMwZWQ1MmFhY2NiODAxNmZhOWI3
ZGY4ZDYxMTQ2YTRjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC04OSwxMCArODksMTAgQEAg
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEJpdG1hcFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIKICAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6
OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4
ZWxGb3JtYXRCR1JBOwogfQogCi12b2lkIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2Nh
bGUsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpCit2b2lkIEJpdG1hcFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGZsb2F0IGNvbnRlbnRzU2NhbGUs
IEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpCiB7CiAgICAgbV90ZXhTdWJJbWFnZS5zZXRT
dWJJbWFnZVNpemUodGlsZVNpemUpOwotICAgIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb250ZW50UmVjdCwgdGlsZVNpemUsIGJvcmRlclRleGVs
cywgY29udGVudHNTY2FsZSwgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CisgICAgU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRSZWN0LCB0aWxl
U2l6ZSwgY29udGVudHNTY2FsZSwgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CiB9CiAKIHZvaWQgQml0
bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50c1JlY3Qo
U2tDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
aAppbmRleCA1MDk3Y2UwYjJmMDA3M2UzNzIzNzU0MzExMzdhNTBlNjVmZjQ2YWZmLi4zMGI5YTQ5
MDcxOGNkOTA0NGEyYWE2OTk2MDg2ZmQ0ZjQzNDBhNjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC00
Myw4ICs0Myw4IEBAIHB1YmxpYzoKICAgICBwdWJsaWM6CiAgICAgICAgIFRleHR1cmUoQml0bWFw
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRl
eHR1cmU+KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KENDR3JhcGhp
Y3NDb250ZXh0KiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVS
ZWN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlUmVjdChDQ0dyYXBoaWNzQ29udGV4dCosIFRleHR1cmVBbGxvY2F0b3IqLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgT1ZFUlJJ
REU7CiAKICAgICBwcml2YXRlOgogICAgICAgICBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7
IH0KQEAgLTU2LDkgKzU2LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1h
cFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CiAgICAgdmlydHVh
bCB+Qml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOwogCi0gICAgdmly
dHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1
cmUoVGV4dHVyZU1hbmFnZXIqKTsKLSAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1w
bGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdmlydHVhbCB2b2lk
IHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6
ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJl
Y3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpOworICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0
KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwcmVw
YXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRp
bGVTaXplLCBmbG9hdCBjb250ZW50c1NjYWxlLCBJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0
KSBPVkVSUklERTsKICAgICB2b2lkIHBhaW50Q29udGVudHNSZWN0KFNrQ2FudmFzKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCk7CiAgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChDQ0dyYXBo
aWNzQ29udGV4dCosIEdDM0RlbnVtIGZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IHVpbnQ4X3QqIHBpeGVscyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKaW5kZXggY2Y4YjI5M2E3YjFkZWMzMDM5MzcxYWJjYjM4M2I5YTY0MGFkMGFj
MS4uYjQ2NGEzZDQ4ZWNkZTYwMjNiNjk3Yzg4NDM0Y2NmMWE2NjI4MzdmNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJTa2lhVXRp
bHMuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQ2LDM4ICs0NywyNSBAQCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp+Q2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpCiB7CiB9CiAKLXZvaWQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dFNr
aWEmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNv
bnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpCit2b2lkIENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMoU2tDYW52YXMqIGNhbnZhcywgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3Vs
dGluZ09wYXF1ZVJlY3QpCiB7Ci0gICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRSZWN0Lngo
KSwgLWNvbnRlbnRSZWN0LnkoKSk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnQiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVDAo
ImNjIiwgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMiKTsKKyAgICBj
YW52YXMtPnNhdmUoKTsKKyAgICBjYW52YXMtPnRyYW5zbGF0ZShXZWJDb3JlRmxvYXRUb1NrU2Nh
bGFyKC1jb250ZW50UmVjdC54KCkpLCBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKC1jb250ZW50UmVj
dC55KCkpKTsKIAotICAgICAgICBJbnRSZWN0IHNjYWxlZENvbnRlbnRSZWN0ID0gY29udGVudFJl
Y3Q7CisgICAgSW50UmVjdCBzY2FsZWRDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OwogCi0gICAg
ICAgIGlmIChjb250ZW50c1NjYWxlICE9IDEuMCkgewotICAgICAgICAgICAgY29udGV4dC5zYXZl
KCk7Ci0gICAgICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShjb250ZW50c1NjYWxlLCBj
b250ZW50c1NjYWxlKSk7CisgICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4wKSB7CisgICAgICAg
IGNhbnZhcy0+c2NhbGUoV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihjb250ZW50c1NjYWxlKSwgV2Vi
Q29yZUZsb2F0VG9Ta1NjYWxhcihjb250ZW50c1NjYWxlKSk7CiAKLSAgICAgICAgICAgIEZsb2F0
UmVjdCByZWN0ID0gY29udGVudFJlY3Q7Ci0gICAgICAgICAgICByZWN0LnNjYWxlKDEgLyBjb250
ZW50c1NjYWxlKTsKLSAgICAgICAgICAgIHNjYWxlZENvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChyZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlY29yZCB0cmFuc2Zvcm0gcHJp
b3IgdG8gcGFpbnRpbmcsIGFzIGFsbCBvcGFxdWUgdHJhY2tpbmcgd2lsbCBiZQotICAgICAgICAv
LyByZWxhdGl2ZSB0byB0aGlzIGN1cnJlbnQgdmFsdWUuCi0gICAgICAgIEFmZmluZVRyYW5zZm9y
bSBjYW52YXNUb0NvbnRlbnRUcmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTSgpLmludmVyc2UoKTsK
LQotICAgICAgICBtX3BhaW50ZXItPnBhaW50KGNvbnRleHQsIHNjYWxlZENvbnRlbnRSZWN0KTsK
KyAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBjb250ZW50UmVjdDsKKyAgICAgICAgcmVjdC5zY2Fs
ZSgxIC8gY29udGVudHNTY2FsZSk7CisgICAgICAgIHNjYWxlZENvbnRlbnRSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdChyZWN0KTsKKyAgICB9CiAKLSAgICAgICAgLy8gVHJhbnNmb3JtIHRyYWNrZWQg
b3BhcXVlIHBhaW50cyBiYWNrIHRvIG91ciBsYXllcidzIGNvbnRlbnQgc3BhY2UuCi0gICAgICAg
IEFTU0VSVChjYW52YXNUb0NvbnRlbnRUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpOwotICAgICAg
ICBBU1NFUlQoY2FudmFzVG9Db250ZW50VHJhbnNmb3JtLnByZXNlcnZlc0F4aXNBbGlnbm1lbnQo
KSk7Ci0gICAgICAgIEZsb2F0UmVjdCBvcGFxdWVDYW52YXNSZWN0ID0gcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpOwotICAgICAgICByZXN1bHRpbmdPcGFxdWVSZWN0ID0g
ZW5jbG9zZWRJbnRSZWN0KGNhbnZhc1RvQ29udGVudFRyYW5zZm9ybS5tYXBSZWN0KG9wYXF1ZUNh
bnZhc1JlY3QpKTsKKyAgICBtX3BhaW50ZXItPnBhaW50KGNhbnZhcywgc2NhbGVkQ29udGVudFJl
Y3QsIHJlc3VsdGluZ09wYXF1ZVJlY3QpOworICAgIGNhbnZhcy0+cmVzdG9yZSgpOwogCi0gICAg
ICAgIGlmIChjb250ZW50c1NjYWxlICE9IDEuMCkKLSAgICAgICAgICAgIGNvbnRleHQucmVzdG9y
ZSgpOwotICAgIH0KICAgICBtX2NvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCBhYmE5Y2E0Nzk5YWY5Nzlm
MTNkZTFkZjdkN2I1NmEzMzljZjUxNDVmLi5jOTUxZTkzZmVkNjY4NDAwMWZkN2U0NDkyMGE3YzZh
M2RhYTQyOTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBA
IC0zMSwxMCArMzEsMTEgQEAKIAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKIAor
Y2xhc3MgU2tDYW52YXM7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJQYWlu
dGVyQ2hyb21pdW07Ci1jbGFzcyBQbGF0Zm9ybUNvbnRleHRTa2lhOwogCiAvLyBCYXNlIGNsYXNz
IGZvciBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIGFuZAogLy8gU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB0aGF0IHJlZHVjZXMgY29kZSBkdXBsaWNhdGlvbiBiZXR3
ZWVuCkBAIC00Niw3ICs0Nyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+
KTsKIAotICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBQbGF0Zm9ybUNv
bnRleHRTa2lhJiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2Nh
bGUsIEludFJlY3QmIHJlc3VsdGluZ09wYXF1ZVJlY3QpOworICAgIHZvaWQgcGFpbnRDb250ZW50
cyhTa0NhbnZhcyosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBmbG9hdCBjb250ZW50c1Nj
YWxlLCBJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0KTsKICAgICBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KIAogcHJpdmF0ZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCBhZThkMzIwOGJmYmFiOGQ3
YWRlOTgyYTdkOGE5M2EyZDgzZWQ3ZGFmLi5lMDYxM2U3NTdjMjZlNTUyMzQ2M2EwZTMwOGU0NDgw
YmQ5YjA5NDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC01NCwx
MiArNTQsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvbnRlbnRM
YXllclBhaW50ZXIoZGVsZWdhdGUpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoU2tDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIEludFJlY3QmIG9wYXF1ZSkKICAgICB7CiAgICAgICAgIGRvdWJsZSBwYWludFN0
YXJ0ID0gY3VycmVudFRpbWUoKTsKLSAgICAgICAgY29udGV4dC5jbGVhclJlY3QoY29udGVudFJl
Y3QpOwotICAgICAgICBjb250ZXh0LmNsaXAoY29udGVudFJlY3QpOwotICAgICAgICBtX2RlbGVn
YXRlLT5wYWludENvbnRlbnRzKGNvbnRleHQsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgbV9kZWxl
Z2F0ZS0+cGFpbnRDb250ZW50cyhjYW52YXMsIGNvbnRlbnRSZWN0LCBvcGFxdWUpOwogICAgICAg
ICBkb3VibGUgcGFpbnRFbmQgPSBjdXJyZW50VGltZSgpOwogICAgICAgICBkb3VibGUgcGl4ZWxz
UGVyU2VjID0gKGNvbnRlbnRSZWN0LndpZHRoKCkgKiBjb250ZW50UmVjdC5oZWlnaHQoKSkgLyAo
cGFpbnRFbmQgLSBwYWludFN0YXJ0KTsKICAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5BY2NlbENvbnRlbnRQYWludER1
cmF0aW9uTVMiLCAocGFpbnRFbmQgLSBwYWludFN0YXJ0KSAqIDEwMDAsIDAsIDEyMCwgMzApOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggY2NjMWUwMDhjMDg5NmYxN2UxZTky
YzQ5NzU2NWY3Y2VlYTA2ZGMzYi4uYTM0MWRlNWEyYjY1NjBlOTZhNGQ4YzczZTZhYTVmN2Q1NGIz
ZTIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC0zNyw2ICszNyw4IEBA
CiAjaW5jbHVkZSAiVGlsZWRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExh
eWVySW1wbC5oIgogCitjbGFzcyBTa0NhbnZhczsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC00NSwxMyArNDcsMTMgQEAgY2xhc3MgTGF5ZXJUZXh0
dXJlVXBkYXRlcjsKIAogY2xhc3MgQ29udGVudExheWVyRGVsZWdhdGUgewogcHVibGljOgotICAg
IHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmIGNsaXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhTa0NhbnZhcyos
IGNvbnN0IEludFJlY3QmIGNsaXAsIEludFJlY3QmIG9wYXF1ZSkgPSAwOwogCiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB+Q29udGVudExheWVyRGVsZWdhdGUoKSB7IH0KIH07CiAKLS8vIEEgTGF5
ZXIgdGhhdCByZXF1aXJlcyBhIEdyYXBoaWNzQ29udGV4dCB0byByZW5kZXIgaXRzIGNvbnRlbnRz
LgorLy8gQSBsYXllciB0aGF0IHJlbmRlcnMgaXRzIGNvbnRlbnRzIGludG8gYW4gU2tDYW52YXMu
CiBjbGFzcyBDb250ZW50TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBUaWxlZExheWVyQ2hyb21pdW0g
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBj
cmVhdGUoQ29udGVudExheWVyRGVsZWdhdGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKaW5k
ZXggZWM0ZDA4OGYyMzg5YjUyNjI0N2M4ODI1YzJhZmNkNjVkYjU2ODEyMC4uYWJlYWY1MjNkMjhm
YzVmYjI5YTgzZmMxOTg3ODk3ZTA2MTA3YjJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgK
QEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgICAgICBUZXh0dXJlKEZyYW1lQnVmZmVyU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1
cmU+KTsKICAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVSZWN0KENDR3JhcGhpY3NDb250ZXh0KiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqLCBUZXh0dXJlQWxsb2Nh
dG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
IE9WRVJSSURFOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgRnJhbWVCdWZmZXJTa1BpY3R1cmVD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fdGV4
dHVyZVVwZGF0ZXI7IH0KQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3Jl
YXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKICAgICB2aXJ0dWFsIH5GcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZpcnR1
YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJl
KFRleHR1cmVNYW5hZ2VyKik7Ci0gICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxl
ZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOworICAgIHZpcnR1YWwgUGFzc093
blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVN
YW5hZ2VyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxl
ZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpIE9WRVJSSURFOwogICAgIHZvaWQg
dXBkYXRlVGV4dHVyZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqLCBUZXh0dXJlQWxsb2NhdG9yKiwg
TWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBkZXN0UmVjdCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcAppbmRleCBiMzUzOTg0ZDRkZGExYzhiMmMyMjJkNzRmODBjNjgzM2M4ODJlNjIzLi44NmEx
ZjMyOTk2YzZiNmUxZTZlNTRmMGMzMzllODNiYTIxMjBhOTFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTUwLDEwICs1MCwxMiBAQAogI2luY2x1ZGUgIkNvbnRl
bnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZUxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGlua0hpZ2hsaWdodC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlNrTWF0cml4NDQuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCkBAIC04Nyw3ICs4OSw4IEBA
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDbGllbnQqIGNsaWVudCkKICAgICAsIG1faW5TZXRDaGlsZHJlbihmYWxzZSkKICAgICAsIG1f
cGFnZVNjYWxlQ2hhbmdlZChmYWxzZSkKIHsKLSAgICBtX2xheWVyID0gV2ViQ29udGVudExheWVy
KENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUodGhpcykpOworICAgIG1fb3BhcXVlUmVjdFRy
YWNraW5nQ29udGVudExheWVyRGVsZWdhdGUgPSBhZG9wdFB0cihuZXcgT3BhcXVlUmVjdFRyYWNr
aW5nQ29udGVudExheWVyRGVsZWdhdGUodGhpcykpOworICAgIG1fbGF5ZXIgPSBXZWJDb250ZW50
TGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZShtX29wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlLmdldCgpKSk7CiAKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMo
KTsKIH0KQEAgLTg3NCw4ICs4NzcsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6ZGV2
aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKICAgICBtX3BhZ2VTY2FsZUNoYW5nZWQgPSB0
cnVlOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50cyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApCit2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBjbGlwKQogeworICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnNldERyYXdpbmdU
b0ltYWdlQnVmZmVyKHRydWUpOwogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRl
eHQsIGNsaXApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI5
OTQ5OTEyY2I3MzBlYzU2NGRhMjNhMDdiNGY5ZDg2OWY2MGZiNDYuLmRlZGVjNmE1NWU2ZTFiNmVk
YTNlNDU0MTRkYTg2MjJjM2FjOTM2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgi
CisjaW5jbHVkZSAiT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKIAogI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJDb250ZW50TGF5ZXIuaD4KQEAgLTQ3LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExpbmtIaWdobGlnaHQ7CiAKLWNsYXNzIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgQ29udGVu
dExheWVyRGVsZWdhdGUsIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUgeworY2xhc3Mg
R3JhcGhpY3NMYXllckNocm9taXVtIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBHcmFw
aGljc0NvbnRleHRQYWludGVyLCBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIHsKIHB1
YmxpYzoKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNsaWVudCopOwog
ICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSgpOwpAQCAtMTE3LDggKzExOCw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImLCBm
bG9hdCBib3JkZXJXaWR0aCk7CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCgpOwogCi0gICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50YXRp
b24uCi0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYgY2xpcCk7CisgICAgLy8gR3JhcGhpY3NDb250ZXh0UGFpbnRlciBpbXBsZW1l
bnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UmVjdCYgY2xpcCkgT1ZFUlJJREU7CiAKICAgICAvLyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdh
dGUgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQoZG91YmxlIHN0YXJ0VGltZSk7CkBAIC0xNjIsNiArMTYzLDggQEAgcHJpdmF0ZToKICAgICBX
ZWJLaXQ6OldlYkxheWVyIG1fdHJhbnNmb3JtTGF5ZXI7CiAgICAgV2ViS2l0OjpXZWJMYXllciBt
X2NvbnRlbnRzTGF5ZXI7CiAKKyAgICBPd25QdHI8T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExh
eWVyRGVsZWdhdGU+IG1fb3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGU7CisK
ICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAgICAgICAgTm9Db250ZW50c0xheWVy
ID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdlLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJQYWludGVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRl
ckNocm9taXVtLmgKaW5kZXggOTQyOWRhNWZhYjlhMzdlYjM4YzBkZWM1NjY3YzAyMWViZjZjYTM2
MS4uZGI2YTg4NGMxZjkxODc0OGI0ODJmN2Q5ZTZmZjgyZWQ3MjlkZmRiZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJQYWludGVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclBhaW50ZXJDaHJvbWl1bS5oCkBAIC0yOSwxNSArMjksMTYgQEAKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIAorY2xhc3MgU2tDYW52YXM7CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW50UmVjdDsKIAogY2xhc3Mg
TGF5ZXJQYWludGVyQ2hyb21pdW0gewogcHVibGljOgogICAgIHZpcnR1YWwgfkxheWVyUGFpbnRl
ckNocm9taXVtKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
KFNrQ2FudmFzKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIEludFJlY3QmIG9wYXF1ZSkg
PSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCmluZGV4IDYxZTQyNTllNmNjNzk3ZDgxNjkyZTA2MDk0NjJmZjNlZjE0ZjY2YTQuLmRi
YThhYjcxNjYxYTU3NWY0ZDhiMmNhNDhlNzNiMjBhNmY5N2I0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmgKQEAgLTc0LDggKzc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2Ft
cGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0
KSA9IDA7CiAgICAgLy8gVGhlIHxyZXN1bHRpbmdPcGFxdWVSZWN0fCBnaXZlcyBiYWNrIGEgcmVn
aW9uIG9mIHRoZSBsYXllciB0aGF0IHdhcyBwYWludGVkIG9wYXF1ZS4gSWYgdGhlIGxheWVyIGlz
IG1hcmtlZCBvcGFxdWUgaW4gdGhlIHVwZGF0ZXIsCiAgICAgLy8gdGhlbiB0aGlzIHJlZ2lvbiBz
aG91bGQgYmUgaWdub3JlZCBpbiBwcmVmZXJlbmNlIGZvciB0aGUgZW50aXJlIGxheWVyJ3MgYXJl
YS4KLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIC8qIGNv
bnRlbnRSZWN0ICovLCBjb25zdCBJbnRTaXplJiAvKiB0aWxlU2l6ZSAqLywgaW50IC8qIGJvcmRl
clRleGVscyAqLywgZmxvYXQgLyogY29udGVudHNTY2FsZSAqLywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEludFJlY3QmIC8qIHJlc3VsdGluZ09wYXF1ZVJlY3QgKi8pIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBmbG9hdCBjb250ZW50c1NjYWxlLCBJbnRSZWN0
JiByZXN1bHRpbmdPcGFxdWVSZWN0KSB7IH0KIAogICAgIC8vIFNldCB0cnVlIGJ5IHRoZSBsYXll
ciB3aGVuIGl0IGlzIGtub3duIHRoYXQgdGhlIGVudGlyZSBvdXRwdXQgaXMgZ29pbmcgdG8gYmUg
b3BhcXVlLgogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9vbCkgeyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdo
bGlnaHQuY3BwCmluZGV4IGJlYTMyYzBhMzU3OWFmNTcxZmM3ZjA1MmE3NGRiZGM3ZmI5ZGU2Nzgu
LjNiYzFlNjNkYTFhZGUwNTQxNDI4MDU5ODY2OTI3MjNlZmZjOWFhNjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdo
bGlnaHQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTGlua0hpZ2hsaWdodC5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgogI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIK
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBA
IC05MSw4ICs5MiwxMCBAQCBDb250ZW50TGF5ZXJDaHJvbWl1bSogTGlua0hpZ2hsaWdodDo6Y29u
dGVudExheWVyKCkKICAgICByZXR1cm4gbV9jb250ZW50TGF5ZXIuZ2V0KCk7CiB9CiAKLXZvaWQg
TGlua0hpZ2hsaWdodDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJ
bnRSZWN0JikKK3ZvaWQgTGlua0hpZ2hsaWdodDo6cGFpbnRDb250ZW50cyhTa0NhbnZhcyogY2Fu
dmFzLCBjb25zdCBJbnRSZWN0JiwgSW50UmVjdCYpCiB7CisgICAgUGxhdGZvcm1Db250ZXh0U2tp
YSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsKKyAgICBHcmFwaGljc0NvbnRleHQgZ2MoJnBsYXRm
b3JtQ29udGV4dCk7CiAgICAgLy8gRklYTUU6IG1ha2UgY29sb3VyIGNvbmZpZ3VyYWJsZT8KICAg
ICBnYy5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUsIDI1NSksIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogICAgIGdjLnNldFN0cm9rZVRoaWNrbmVzcygyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuaApp
bmRleCA4ZDc4ODlmY2U3MjA1OWY5ODFhODk3NjIxNmRkYWVlZWUzMTlkYjg0Li4xZmJlZjliYTk0
NjhhNzFiOTgzZjdiMTViNGM4NTFhMDVkNGJhYjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5oCkBAIC00
NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBDb250ZW50TGF5ZXJDaHJvbWl1bSogY29udGVudExh
eWVyKCk7CiAKICAgICAvLyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
U2tDYW52YXMqLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgSW50UmVjdCYgb3BhcXVlKSBPVkVS
UklERTsKIAogICAgIC8vIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4K
ICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSkgT1ZF
UlJJREU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250
ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI2MTk2NmI5NWRkOTEwM2JlMzMyYWNj
NTYxOWU5M2U2OWNhYjQzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVn
YXRlLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5o
IgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitP
cGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZTo6T3BhcXVlUmVjdFRyYWNraW5n
Q29udGVudExheWVyRGVsZWdhdGUoR3JhcGhpY3NDb250ZXh0UGFpbnRlciogcGFpbnRlcikKKyAg
ICA6IG1fcGFpbnRlcihwYWludGVyKQorICAgICwgbV9vcGFxdWUoZmFsc2UpCit7Cit9CisKK09w
YXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlOjp+T3BhcXVlUmVjdFRyYWNraW5n
Q29udGVudExheWVyRGVsZWdhdGUoKQoreworfQorCit2b2lkIE9wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlOjpwYWludENvbnRlbnRzKFNrQ2FudmFzKiBjYW52YXMsIGNvbnN0
IEludFJlY3QmIGNsaXAsIEludFJlY3QmIG9wYXF1ZSkKK3sKKyAgICBQbGF0Zm9ybUNvbnRleHRT
a2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFj
a09wYXF1ZVJlZ2lvbighbV9vcGFxdWUpOworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZw
bGF0Zm9ybUNvbnRleHQpOworCisgICAgY29udGV4dC5jbGVhclJlY3QoY2xpcCk7CisgICAgY29u
dGV4dC5jbGlwKGNsaXApOworCisgICAgLy8gUmVjb3JkIHRyYW5zZm9ybSBwcmlvciB0byBwYWlu
dGluZywgYXMgYWxsIG9wYXF1ZSB0cmFja2luZyB3aWxsIGJlCisgICAgLy8gcmVsYXRpdmUgdG8g
dGhpcyBjdXJyZW50IHZhbHVlLgorICAgIEFmZmluZVRyYW5zZm9ybSBjYW52YXNUb0NvbnRlbnRU
cmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTSgpLmludmVyc2UoKTsKKworICAgIG1fcGFpbnRlci0+
cGFpbnQoY29udGV4dCwgY2xpcCk7CisKKyAgICAvLyBUcmFuc2Zvcm0gdHJhY2tlZCBvcGFxdWUg
cGFpbnRzIGJhY2sgdG8gb3VyIGxheWVyJ3MgY29udGVudCBzcGFjZS4KKyAgICBBU1NFUlQoY2Fu
dmFzVG9Db250ZW50VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKTsKKyAgICBBU1NFUlQoY2FudmFz
VG9Db250ZW50VHJhbnNmb3JtLnByZXNlcnZlc0F4aXNBbGlnbm1lbnQoKSk7CisgICAgRmxvYXRS
ZWN0IG9wYXF1ZUNhbnZhc1JlY3QgPSBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCk7CisgICAgb3BhcXVlID0gZW5jbG9zZWRJbnRSZWN0KGNhbnZhc1RvQ29udGVudFRyYW5z
Zm9ybS5tYXBSZWN0KG9wYXF1ZUNhbnZhc1JlY3QpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5n
Q29udGVudExheWVyRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWM1M2QxZDI5ZGVmOTI1NzMyOGY0MTRhZDJjNzU3MDVkZjRlM2E2YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1
ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0
ZV9oCisjZGVmaW5lIE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlX2gKKwor
I2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworY2xhc3MgU2tDYW52YXM7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50UmVjdDsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0
UGFpbnRlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFJlY3QmIGNsaXApID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
fkdyYXBoaWNzQ29udGV4dFBhaW50ZXIoKSB7IH0KK307CisKK2NsYXNzIE9wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlIDogcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJE
ZWxlZ2F0ZSk7CitwdWJsaWM6CisgICAgZXhwbGljaXQgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVu
dExheWVyRGVsZWdhdGUoR3JhcGhpY3NDb250ZXh0UGFpbnRlciopOworICAgIHZpcnR1YWwgfk9w
YXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlKCk7CisKKyAgICAvLyBJZiB3ZSBr
bm93IHRoYXQgZXZlcnl0aGluZyB0aGF0IHdpbGwgYmUgcGFpbnRlZCB0aHJvdWdoIHRoaXMgZGVs
ZWdhdGUsIHRoZW4gd2UgZG9uJ3QgYm90aGVyCisgICAgLy8gdHJhY2tpbmcgb3BhcXVlbmVzcy4K
KyAgICB2b2lkIHNldE9wYXF1ZShib29sIG9wYXF1ZSkgeyBtX29wYXF1ZSA9IG9wYXF1ZTsgfQor
CisgICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50cyhTa0NhbnZhcyosIGNvbnN0IEludFJlY3QmIGNsaXAsIEludFJlY3QmIG9wYXF1ZSkgT1ZF
UlJJREU7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0UGFpbnRlciogbV9wYWludGVy
OworICAgIGJvb2wgbV9vcGFxdWU7Cit9OworCit9CisKKyNlbmRpZiAvLyBPcGFxdWVSZWN0VHJh
Y2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAKaW5kZXgg
YzVlMzhkNmFhMzUzYWIzZTYwZWI2ZmUxNzJlODdkYTRhODkxNTBjMS4uN2ExZjExN2QzYTU0Mjc1
YmUyNjliOTA0ZWI1MTY5ZjIwYmIzZGZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcApAQCAt
OTcsOCArOTcsNiBAQCBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6UGFpbnRlcihQbGF0Zm9ybUNh
bnZhcyogY2FudmFzLCBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcgogewogICAgIG1fc2tpYUNvbnRl
eHQgPSBhZG9wdFB0cihuZXcgUGxhdGZvcm1Db250ZXh0U2tpYShjYW52YXMtPm1fc2tpYUNhbnZh
cy5nZXQoKSkpOwogCi0gICAgbV9za2lhQ29udGV4dC0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIo
b3B0aW9uID09IEdyYXlzY2FsZVRleHQpOwotCiAgICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3
IEdyYXBoaWNzQ29udGV4dChyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
Kj4obV9za2lhQ29udGV4dC5nZXQoKSkpKTsKICAgICBjb250ZXh0KCktPnNhdmUoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9s
bGJhckxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjA2MTU4MDUyNjQxNjY0
YzQ3ZTFlNGU5YjljYzExOTY4YTcxNGU4Mi4uMDA2YzkyZjIwOWJkYTFjOGYzYTg1MDQ0Y2U1NzQ2
NmQxZWFlN2MyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTI5LDcgKzI5LDkgQEAKICNpbmNsdWRlICJTY3JvbGxiYXJMYXllckNocm9taXVtLmgiCiAKICNp
bmNsdWRlICJCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3QuaCIKQEAgLTEwOSw4ICsxMTEsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyKHNjcm9sbGJhciwgdGhlbWUpKTsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoU2tD
YW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIEludFJlY3QmKSBPVkVS
UklERQogICAgIHsKKyAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQo
Y2FudmFzKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldERyYXdpbmdUb0ltYWdlQnVmZmVy
KHRydWUpOworICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0
KTsKKyAgICAgICAgY29udGV4dC5jbGVhclJlY3QoY29udGVudFJlY3QpOworICAgICAgICBjb250
ZXh0LmNsaXAoY29udGVudFJlY3QpOworCiAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYSBz
aW1wbGlmaWNhdGlvbiBvZiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6cGFpbnQuCiAgICAgICAg
IG1fdGhlbWUtPnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZCgmY29udGV4dCwgbV9zY3JvbGxiYXIp
OwogCkBAIC0xNjIsOCArMTcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBTY3JvbGxiYXJUaHVtYlBhaW50ZXIoc2Nyb2xsYmFyLCB0aGVtZSkpOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KQorICAgIHZpcnR1YWwgdm9pZCBwYWludChTa0NhbnZhcyogY2Fu
dmFzLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgSW50UmVjdCYgb3BhcXVlKSBPVkVSUklE
RQogICAgIHsKKyAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2Fu
dmFzKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHRy
dWUpOworICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsK
KwogICAgICAgICBjb250ZXh0LmNsZWFyUmVjdChjb250ZW50UmVjdCk7CiAKICAgICAgICAgLy8g
Q29uc2lkZXIgdGhlIHRodW1iIHRvIGJlIGF0IHRoZSBvcmlnaW4gd2hlbiBwYWludGluZy4KQEAg
LTIyOSw3ICsyNDEsNyBAQCB2b2lkIFNjcm9sbGJhckxheWVyQ2hyb21pdW06OnVwZGF0ZVBhcnQo
TGF5ZXJUZXh0dXJlVXBkYXRlciogcGFpbnRlciwgTGF5ZXJUZXh0dQogCiAgICAgLy8gUGFpbnQg
YW5kIHVwbG9hZCB0aGUgZW50aXJlIHBhcnQuCiAgICAgSW50UmVjdCBwYWludGVkT3BhcXVlUmVj
dDsKLSAgICBwYWludGVyLT5wcmVwYXJlVG9VcGRhdGUocmVjdCwgcmVjdC5zaXplKCksIGZhbHNl
LCAxLCBwYWludGVkT3BhcXVlUmVjdCk7CisgICAgcGFpbnRlci0+cHJlcGFyZVRvVXBkYXRlKHJl
Y3QsIHJlY3Quc2l6ZSgpLCAxLCBwYWludGVkT3BhcXVlUmVjdCk7CiAgICAgdGV4dHVyZS0+cHJl
cGFyZVJlY3QocmVjdCk7CiAKICAgICBJbnRSZWN0IGRlc3RSZWN0KEludFBvaW50KCksIHJlY3Qu
c2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5jcHAKaW5kZXggYjQ5OTAxMmU2MWI1MzdhYzk1NGNlYTEzOGY5YzE4ODIzNjMx
YTU2Ni4uYzExNzdmYmNkMzE2NzVkNmI5ZjQ2MWQ0Nzk0MDkzOTQ5ZmVlZmI0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
QEAgLTQ4LDIwICs0OCwxMCBAQCBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp+
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpCiB7CiB9CiAKLXZvaWQgU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiAvKiB0aWxlU2l6ZSAqLywgaW50IGJvcmRl
clRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVj
dCkKK3ZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiwgZmxvYXQgY29u
dGVudHNTY2FsZSwgSW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCkKIHsKICAgICBTa0NhbnZh
cyogY2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCks
IGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3Jt
Q29udGV4dChjYW52YXMpOwotICAgIHBsYXRmb3JtQ29udGV4dC5zZXREZWZlcnJlZCh0cnVlKTsK
LSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24oIW1fbGF5ZXJJc09wYXF1
ZSk7Ci0gICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxz
LCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCi0gICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZp
bHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIGl0IG1pZ2h0IGJlCi0gICAgLy8gdHJhbnNm
b3JtZWQsIHNldCBpbWFnZSBidWZmZXIgZmxhZyB0byBkcmF3IHRoZSB0ZXh0IGluIGdyYXlzY2Fs
ZQotICAgIC8vIGluc3RlYWQgb2YgdXNpbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgIGJv
b2wgdXNlR3JheXNjYWxlVGV4dCA9IGJvcmRlclRleGVscyB8fCAhbV9sYXllcklzT3BhcXVlOwot
ICAgIHBsYXRmb3JtQ29udGV4dC5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih1c2VHcmF5c2NhbGVU
ZXh0KTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRl
eHQpOwotICAgIHBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQs
IGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlLCByZXN1bHRpbmdPcGFxdWVSZWN0KTsKKyAgICBw
YWludENvbnRlbnRzKGNhbnZhcywgY29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUsIHJlc3VsdGlu
Z09wYXF1ZVJlY3QpOwogICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4
IDI1OGEyOGJhMzRmYTE5ZTk5NmQxYjI2NGE5MDQwN2NiZjhhNDc1NGEuLmUyOTdlMDUwZTA2ZjM2
NTEyMDdiZjVjMDFkNGU4ZGViZGZmZDM3ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTQ3LDEyICs0NywxMiBAQCBjbGFz
cyBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgflNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9vbCk7
CisgICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKSBPVkVSUklERTsKIAogcHJvdGVjdGVk
OgogICAgIGV4cGxpY2l0IFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwogCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJlY3QmIHJlc3Vs
dGluZ09wYXF1ZVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBmbG9hdCBjb250
ZW50c1NjYWxlLCBJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0KSBPVkVSUklERTsKICAgICB2
b2lkIGRyYXdQaWN0dXJlKFNrQ2FudmFzKik7CiAKICAgICBib29sIGxheWVySXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBtX2xheWVySXNPcGFxdWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDEyZTM3MTdjYTZkZmYxYzM4YWM5NGRiYjE3ZWU2YzY3ZmQwY2Q1MWUuLmUx
YjQxNTg1YTQzMmMxZDg3NjhkOTU2Y2IzMzA4YTY5MmMyN2Q0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjp1cGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQs
IGluCiAgICAgLy8gc28gd2UgZ3JhYiBhIGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQgdGhl
IHVwZGF0ZXIgYWxpdmUgdW50aWwgdGhlIHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8TGF5
ZXJUZXh0dXJlVXBkYXRlcj4gcHJvdGVjdG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIEludFJl
Y3QgcGFpbnRlZE9wYXF1ZVJlY3Q7Ci0gICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRvVXBk
YXRlKHBhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxlci0+aGFzQm9yZGVyVGV4
ZWxzKCksIGNvbnRlbnRzU2NhbGUoKSwgcGFpbnRlZE9wYXF1ZVJlY3QpOworICAgIHRleHR1cmVV
cGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZShwYWludFJlY3QsIG1fdGlsZXItPnRpbGVTaXplKCks
IGNvbnRlbnRzU2NhbGUoKSwgcGFpbnRlZE9wYXF1ZVJlY3QpOwogICAgIG1fZGlkUGFpbnQgPSB0
cnVlOwogCiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggYWJhNDU0NDc5NTUxYjdkMTBiZmExYjVkYTZi
MWI0Mjg0MWVmZTIxYS4uMDU0YWM2ODdhZjdlM2VjM2JhYWU5MmMyZTI3ZmUzYjYyYjU0MzNmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDNjM2FlMDNmNjZjOGVmNDU3YTgz
MWNlNjJkYzFkODRmY2ZjMzQxZTIuLmI5ZDI0ODIzN2VjMDdmOTU0ODRlOGZhMDI3NDU1Zjc2MDE2
M2YxNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC00Nyw3ICs0Nyw2IEBAIGNs
YXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
OwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xh
c3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CiBjbGFzcyBSZWdpb247CiBjbGFzcyBUZXh0dXJlQWxs
b2NhdG9yOwogY2xhc3MgVGV4dHVyZU1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQppbmRleCBmOGE0YmM2NWRkOWM0MDcxZDhkY2VlNmJjNjViZWExZGI3MmZhMjY2Li5lODAzZDNh
YTI3MzM4NDQ2OTdlYzhhNjJmOWFlNzkzY2Y5ZWIwNGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKQEAgLTEyMiwxMiArMTIyLDEyIEBACiAgICAgICAgICAgICAndGVzdHMvS1VSTFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwJywKLSAgICAgICAg
ICAgICd0ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlua0hpZ2hsaWdodFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaXN0ZW5lckxlYWtUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL01vY2tDQ1F1YWRDdWxsZXIuaCcsCisgICAgICAgICAgICAndGVzdHMvT3BhcXVlUmVj
dFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvUGFpbnRBZ2dyZWdhdG9yVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BsYXRmb3Jt
R2VzdHVyZUN1cnZlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BsYXRmb3JtQ29udGV4
dFNraWFUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9O
b25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcAppbmRleCBjNzYxNWU4YzRiYWU3OTEzODNlMTYx
NWQ3NzJhOThiZWU0OTU4OGE4Li4yYzM3MjA5YzYwNzc1MGY1MTU4MDExOWM4ZDQ5MmYyNWYwZGJj
NWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVk
Q29udGVudEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5jcHAKQEAgLTMxLDEzICszMSwxNSBAQAogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3QuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLU5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KFBhc3NPd25QdHI8V2ViQ29y
ZTo6TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCkKLSAgICA6IG1fY29udGVudFBh
aW50KGNvbnRlbnRQYWludCkKK05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Tm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQorICAgIDogbV93ZWJWaWV3KHdlYlZp
ZXcpCisgICAgLCBtX29wYXF1ZSh0cnVlKQogICAgICwgbV9zaG93RGVidWdCb3JkZXJzKGZhbHNl
KQogICAgICwgbV9kZXZpY2VTY2FsZUZhY3RvcigxLjApCiB7CkBAIC02NCw2ICs2Niw3IEBAIHZv
aWQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIGNvbG9yKQogCiB2b2lkIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6c2V0
T3BhcXVlKGJvb2wgb3BhcXVlKQogeworICAgIG1fb3BhcXVlID0gb3BhcXVlOwogICAgIG1fZ3Jh
cGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRPcGFxdWUob3BhcXVlKTsKIH0KIApAQCAt
MTY1LDEwICsxNjgsMTYgQEAgdm9pZCBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6Om5vdGlmeVN5
bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKIAogdm9pZCBOb25Db21w
b3NpdGVkQ29udGVudEhvc3Q6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQog
eworICAgIC8vIE9uIG5vbi1hbmRyb2lkIHBsYXRmb3Jtcywgd2Ugd2FudCB0byByZW5kZXIgdGV4
dCB3aXRoIHN1YnBpeGVsIGFudGlhbGlhc2luZyBvbiB0aGUgcm9vdCBsYXllcgorICAgIC8vIHNv
IGxvbmcgYXMgdGhlIHJvb3QgaXMgb3BhcXVlLiBPbiBhbmRyb2lkIGFsbCB0ZXh0IGlzIGdyYXlz
Y2FsZS4KKyNpZiAhT1MoQU5EUk9JRCkKKyAgICBpZiAobV9vcGFxdWUpCisgICAgICAgIGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCktPnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNlKTsKKyNl
bmRpZgogICAgIGNvbnRleHQudHJhbnNsYXRlKC1tX2xheWVyQWRqdXN0KTsKICAgICBXZWJDb3Jl
OjpJbnRSZWN0IGFkanVzdGVkQ2xpcFJlY3QgPSBjbGlwUmVjdDsKICAgICBhZGp1c3RlZENsaXBS
ZWN0Lm1vdmUobV9sYXllckFkanVzdCk7Ci0gICAgbV9jb250ZW50UGFpbnQtPnBhaW50KGNvbnRl
eHQsIGFkanVzdGVkQ2xpcFJlY3QpOworICAgIG1fd2ViVmlldy0+cGFpbnRSb290TGF5ZXIoY29u
dGV4dCwgYWRqdXN0ZWRDbGlwUmVjdCk7CiB9CiAKIHZvaWQgTm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0OjpzZXRTaG93RGVidWdCb3JkZXJzKGJvb2wgc2hvd0RlYnVnQm9yZGVycykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgK
aW5kZXggN2NhZTIwYTE0MzNkNTQyYWYzNGFiNGU5N2U4MTM4YTI3OTBjM2M4Yy4uOTcwNjg2MGQ3
ZWZkMTZiNDc4OTM3ZmVmZjBmOTc0MTdlYzQ2NGZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgKQEAgLTQwLDE3ICs0
MCwxNyBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIElu
dFJlY3Q7CiBjbGFzcyBMYXllckNocm9taXVtOwotY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07
CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViVmlld0ltcGw7CiAKIGNsYXNzIE5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50IHsKIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCk7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBj
cmVhdGUoUGFzc093blB0cjxXZWJDb3JlOjpMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBh
aW50KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gY3Jl
YXRlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBOb25Db21wb3NpdGVkQ29udGVudEhvc3QoY29udGVudFBhaW50KSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KHdlYlZpZXcpKTsKICAg
ICB9CiAgICAgdmlydHVhbCB+Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCk7CiAKQEAgLTY0LDcg
KzY0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2hvd0RlYnVnQm9yZGVycyhib29sKTsKIAog
cHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChQYXNzT3du
UHRyPFdlYkNvcmU6OkxheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpOworICAgIGV4
cGxpY2l0IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChXZWJWaWV3SW1wbCopOwogCiBwcml2YXRl
OgogICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKQEAgLTgyLDEwICs4MiwxMSBAQCBwcml2YXRl
OgogICAgIFdlYkNvcmU6OkxheWVyQ2hyb21pdW0qIHNjcm9sbExheWVyKCk7CiAKICAgICBPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ncmFwaGljc0xheWVyOwotICAgIE93blB0cjxX
ZWJDb3JlOjpMYXllclBhaW50ZXJDaHJvbWl1bT4gbV9jb250ZW50UGFpbnQ7CisgICAgV2ViVmll
d0ltcGwqIG1fd2ViVmlldzsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fdmlld3BvcnRTaXplOwog
ICAgIFdlYkNvcmU6OkludFNpemUgbV9sYXllckFkanVzdDsKIAorICAgIGJvb2wgbV9vcGFxdWU7
CiAgICAgYm9vbCBtX3Nob3dEZWJ1Z0JvcmRlcnM7CiAgICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZh
Y3RvcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRM
YXllckltcGwuY3BwCmluZGV4IDIyMmZhMmZhNzY2NTIwMjI4MDhjMTRhY2U5MTE0MTQxYmE0N2Vk
NWQuLmVjNzUzZTdmZWM4OTcwOGFkMjJlM2UyMjVjODMxMmVkYTk1YzE3YjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC01
MywxMSArNTMsMTAgQEAgV2ViQ29udGVudExheWVySW1wbDo6fldlYkNvbnRlbnRMYXllckltcGwo
KQogICAgIGNsZWFyRGVsZWdhdGUoKTsKIH0KIAotdm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXApCit2
b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50Q29udGVudHMoU2tDYW52YXMqIGNhbnZhcywg
Y29uc3QgSW50UmVjdCYgY2xpcCwgSW50UmVjdCYpCiB7CiAgICAgaWYgKCFtX2NvbnRlbnRDbGll
bnQpCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJDYW52YXMqIGNhbnZhcyA9IGdjLnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKTsKICAgICBtX2NvbnRlbnRDbGllbnQtPnBhaW50Q29udGVudHMo
Y2FudmFzLCBXZWJSZWN0KGNsaXApKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCmluZGV4IGEwNmNmOTA4MjkxZmFmZWE2MjNjYmJl
NzU3YWNlMjY4YmY1MmRkMDguLjU0MmJkOWI4ZWYzMzZiZDRjN2Y3OWJhOGJkOTMyNzFmYTQ5MzE2
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfldlYkNvbnRl
bnRMYXllckltcGwoKTsKIAogICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0
aW9uLgotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKFNrQ2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCwgV2Vi
Q29yZTo6SW50UmVjdCYgb3BhcXVlKTsKIAogICAgIFdlYkNvbnRlbnRMYXllckNsaWVudCogbV9j
b250ZW50Q2xpZW50OwogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggYWI2Nzc1MWU3MzRhNTRhNWE5NDdkYzMx
NTk5ZmE5NmYzY2RiN2VhNS4uZGViZDE5ODIyMDEyZjgzZTY1OWE0MTI2Y2UxNWEzOTIwZTRjN2Fh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzQx
NCwzOCArMzQxNCwyMCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB9
CiAjZW5kaWYKIAotY2xhc3MgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlciA6IHB1YmxpYyBMYXll
clBhaW50ZXJDaHJvbWl1bSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVmlld0ltcGxD
b250ZW50UGFpbnRlcik7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVmlld0lt
cGxDb250ZW50UGFpbnRlcio+IGNyZWF0ZShXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXIo
d2ViVmlld0ltcGwpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLSAgICB7Ci0gICAg
ICAgIGRvdWJsZSBwYWludFN0YXJ0ID0gY3VycmVudFRpbWUoKTsKLSAgICAgICAgUGFnZSogcGFn
ZSA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKTsKLSAgICAgICAgaWYgKCFwYWdlKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlLT5tYWluRnJhbWUoKS0+
dmlldygpOwotICAgICAgICB2aWV3LT5wYWludENvbnRlbnRzKCZjb250ZXh0LCBjb250ZW50UmVj
dCk7Ci0gICAgICAgIGRvdWJsZSBwYWludEVuZCA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgICAgIGRv
dWJsZSBwaXhlbHNQZXJTZWMgPSAoY29udGVudFJlY3Qud2lkdGgoKSAqIGNvbnRlbnRSZWN0Lmhl
aWdodCgpKSAvIChwYWludEVuZCAtIHBhaW50U3RhcnQpOwotICAgICAgICBXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LkFjY2VsUm9v
dFBhaW50RHVyYXRpb25NUyIsIChwYWludEVuZCAtIHBhaW50U3RhcnQpICogMTAwMCwgMCwgMTIw
LCAzMCk7Ci0gICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3Vz
dG9tQ291bnRzKCJSZW5kZXJlcjQuQWNjZWxSb290UGFpbnRNZWdhcGl4UGVyU2Vjb25kIiwgcGl4
ZWxzUGVyU2VjIC8gMTAwMDAwMCwgMTAsIDIxMCwgMzApOwotCi0gICAgICAgIG1fd2ViVmlld0lt
cGwtPnNldEJhY2tncm91bmRDb2xvcih2aWV3LT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViVmlld0ltcGxDb250ZW50UGFpbnRl
cihXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpCi0gICAgICAgIDogbV93ZWJWaWV3SW1wbCh3ZWJW
aWV3SW1wbCkKLSAgICB7Ci0gICAgfQordm9pZCBXZWJWaWV3SW1wbDo6cGFpbnRSb290TGF5ZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sK
KyAgICBkb3VibGUgcGFpbnRTdGFydCA9IGN1cnJlbnRUaW1lKCk7CisgICAgaWYgKCFwYWdlKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCk7CisgICAgdmlldy0+cGFpbnRDb250ZW50cygmY29udGV4dCwgY29udGVudFJl
Y3QpOworICAgIGRvdWJsZSBwYWludEVuZCA9IGN1cnJlbnRUaW1lKCk7CisgICAgZG91YmxlIHBp
eGVsc1BlclNlYyA9IChjb250ZW50UmVjdC53aWR0aCgpICogY29udGVudFJlY3QuaGVpZ2h0KCkp
IC8gKHBhaW50RW5kIC0gcGFpbnRTdGFydCk7CisgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5BY2NlbFJvb3RQYWludER1cmF0
aW9uTVMiLCAocGFpbnRFbmQgLSBwYWludFN0YXJ0KSAqIDEwMDAsIDAsIDEyMCwgMzApOworICAg
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5k
ZXJlcjQuQWNjZWxSb290UGFpbnRNZWdhcGl4UGVyU2Vjb25kIiwgcGl4ZWxzUGVyU2VjIC8gMTAw
MDAwMCwgMTAsIDIxMCwgMzApOwogCi0gICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7Ci19
OworICAgIHNldEJhY2tncm91bmRDb2xvcih2aWV3LT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigp
KTsKK30KIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKGJvb2wgYWN0aXZlKQogewpAQCAtMzQ4Myw3ICszNDY1LDcgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAg
ICBsYXllclRyZWVWaWV3U2V0dGluZ3MuZGVmYXVsdFRpbGVTaXplID0gc2V0dGluZ3NJbXBsKCkt
PmRlZmF1bHRUaWxlU2l6ZSgpOwogICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MubWF4VW50
aWxlZExheWVyU2l6ZSA9IHNldHRpbmdzSW1wbCgpLT5tYXhVbnRpbGVkTGF5ZXJTaXplKCk7CiAK
LSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QgPSBOb25Db21wb3NpdGVkQ29udGVu
dEhvc3Q6OmNyZWF0ZShXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOwor
ICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdDo6Y3JlYXRlKHRoaXMpOwogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+
c2V0U2hvd0RlYnVnQm9yZGVycyhwYWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMo
KSk7CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRPcGFxdWUoIWlzVHJh
bnNwYXJlbnQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmlu
ZGV4IDdiZGRhOTBmNDBkOGU4YWNlNWIxYTZiNjdjNjhlY2NmN2E2ZWVmMDUuLjRmNWMwNDhkOTc3
NDJhZDU5YjE1ZWNiMzQzZDg1YzhkM2EwMzE4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaApAQCAtNTA2LDYgKzUwNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNj
aGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKTsKICAgICB2b2lkIHNjcm9sbFJvb3RMYXllclJl
Y3QoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNsaXBSZWN0KTsKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHBhaW50Um9vdExheWVyKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAg
ICBOb25Db21wb3NpdGVkQ29udGVudEhvc3QqIG5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpOwog
ICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCmluZGV4IGFhY2Q5YTVkNjkwZjMyMTc0YjFlMmU5YTJlMjFiYmM5N2VhNmQwYzYu
LjM0ZjQ5ZTkxZGJlZDFkZTQ0MzdhZDhjODc0N2Q5MTM2OGExYmJmZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAt
MTE1MCw3ICsxMTUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhTa0NhbnZhcyosIGNvbnN0IEludFJlY3QmLCBJbnRS
ZWN0JikKICAgICB7CiAgICAgICAgIC8vIFNldCBsYXllciBvcGFjaXR5IHRvIDAuCiAgICAgICAg
IG1fdGVzdC0+bGF5ZXJUcmVlSG9zdCgpLT5yb290TGF5ZXIoKS0+c2V0T3BhY2l0eSgwKTsKQEAg
LTEyNDQsNyArMTI0NCw3IEBAIGNsYXNzIE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZSA6IHB1Ymxp
YyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBkcmF3c0NvbnRlbnQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgTU9DS19DT05TVF9NRVRIT0QwKHByZXNlcnZl
czNELCBib29sKCkpOwotICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBJbnRSZWN0JikgeyB9CisgICAgdm9pZCBwYWludENvbnRlbnRzKFNrQ2FudmFzKiwgY29u
c3QgSW50UmVjdCYsIEludFJlY3QmKSB7IH0KICAgICB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgp
IHsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Rp
bGVkTGF5ZXJUZXN0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NU
aWxlZExheWVyVGVzdENvbW1vbi5jcHAKaW5kZXggNzAxN2EwMWZmNjlhNjJkMzJmYTMxOWI4ZGE3
NDdhMWE0NTQ4M2Q2NC4uNzQ4NGI3MGYzY2NlMjg4MWY0NmI3ZTYxYzJjY2JiMWM1ZTEwNWYyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0
Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXll
clRlc3RDb21tb24uY3BwCkBAIC02Myw3ICs2Myw3IEBAIEZha2VMYXllclRleHR1cmVVcGRhdGVy
Ojp+RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKQogewogfQogCi12b2lkIEZha2VMYXllclRleHR1
cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IEludFNpemUmLCBpbnQsIGZsb2F0LCBJbnRSZWN0JiByZXN1bHRpbmdPcGFxdWVSZWN0KQor
dm9pZCBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiwgZmxvYXQsIEludFJlY3QmIHJlc3VsdGlu
Z09wYXF1ZVJlY3QpCiB7CiAgICAgbV9wcmVwYXJlQ291bnQrKzsKICAgICBtX2xhc3RVcGRhdGVS
ZWN0ID0gY29udGVudFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCmluZGV4IGYxNTIwMWE4NGQxZTNkNmRiNWMzM2U5
MDIxNWMzODc4YTJlZTA2YjkuLjY4ZmVmNjQyMDk2ZmM0ODFmMWJhMGFiNmQ5NWEwODA3ZjhhMjRj
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVy
VGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExh
eWVyVGVzdENvbW1vbi5oCkBAIC00OCw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICAgICAgVGV4dHVy
ZShGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8V2ViQ29yZTo6TWFuYWdlZFRl
eHR1cmU+KTsKICAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVSZWN0KFdlYkNvcmU6OkNDR3JhcGhpY3NDb250ZXh0KiwgV2ViQ29yZTo6VGV4
dHVyZUFsbG9jYXRvciogLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChXZWJDb3JlOjpD
Q0dyYXBoaWNzQ29udGV4dCosIFdlYkNvcmU6OlRleHR1cmVBbGxvY2F0b3IqICwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVS
UklERTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEZha2VMYXllclRleHR1cmVVcGRhdGVyKiBt
X2xheWVyOwpAQCAtNTgsMTAgKzU4LDEwIEBAIHB1YmxpYzoKICAgICBGYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpOwogICAgIHZpcnR1YWwgfkZha2VMYXllclRleHR1cmVVcGRhdGVyKCk7CiAKLSAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZT4gY3JlYXRlVGV4dHVyZShXZWJDb3JlOjpUZXh0dXJlTWFuYWdlciopOwotICAgIHZpcnR1YWwg
U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSkgeyByZXR1cm4g
U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsgfQorICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFdlYkNvcmU6OlRl
eHR1cmVNYW5hZ2VyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQg
c2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtKSBPVkVSUklERSB7IHJldHVybiBTYW1wbGVkVGV4
ZWxGb3JtYXRSR0JBOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
aW50LCBmbG9hdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CisgICAg
dmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb250
ZW50UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0LCBXZWJDb3JlOjpJbnRSZWN0
JiByZXN1bHRpbmdPcGFxdWVSZWN0KSBPVkVSUklERTsKICAgICAvLyBTZXRzIHRoZSByZWN0IHRv
IGludmFsaWRhdGUgZHVyaW5nIHRoZSBuZXh0IGNhbGwgdG8gcHJlcGFyZVRvVXBkYXRlKCkuIEFm
dGVyIHRoZSBuZXh0CiAgICAgLy8gY2FsbCB0byBwcmVwYXJlVG9VcGRhdGUoKSB0aGUgcmVjdCBp
cyByZXNldC4KICAgICB2b2lkIHNldFJlY3RUb0ludmFsaWRhdGUoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYsIEZha2VUaWxlZExheWVyQ2hyb21pdW0qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggOTU0MTc0YWI3NjM1N2E3
MTMyNDAxYTFkMGEzY2M4MzhjOGVkOTFhOS4uNWU1ZjcwMTAxMTgwNWFkZDhmZjhjMzE2Y2IxYzlj
NGVhYmU2ZTg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXll
ckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXll
ckNocm9taXVtVGVzdC5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgcHJpdmF0ZToKIAogY2xhc3MgTW9j
a0xheWVyUGFpbnRlckNocm9taXVtIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50
UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChTa0NhbnZhcyosIGNvbnN0IEludFJl
Y3QmLCBJbnRSZWN0JikgeyB9CiB9OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQxYTk3YmI1Yjc4NDljNWNiZTc5OTkzNTBjYWVhYTU5OTFhNjQ5MmIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotCi0jaW5jbHVkZSAiQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIkJpdG1hcFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJGcmFtZUJ1ZmZlclNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKLSNpbmNsdWRlICJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmgiCi0KLSNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3Qg
UGFpbnRDYWxsYmFjayB7Ci0gICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYpID0gMDsKLX07Ci0KLWNsYXNzIFRlc3RMYXllclBhaW50ZXJD
aHJvbWl1bSA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgVGVz
dExheWVyUGFpbnRlckNocm9taXVtKFBhaW50Q2FsbGJhY2smIGNhbGxiYWNrKSA6IG1fY2FsbGJh
Y2soY2FsbGJhY2spIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCi0gICAgewotICAgICAgICBt
X2NhbGxiYWNrKGNvbnRleHQsIGNvbnRlbnRSZWN0KTsKLSAgICB9Ci0KLSAgcHJpdmF0ZToKLSAg
ICBQYWludENhbGxiYWNrJiBtX2NhbGxiYWNrOwotfTsKLQotLy8gUGFpbnQgY2FsbGJhY2sgZnVu
Y3Rpb25zCi0KLXN0cnVjdCBQYWludEZpbGxPcGFxdWUgOiBwdWJsaWMgUGFpbnRDYWxsYmFjayB7
Ci0gICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLSAgICB7Ci0gICAgICAgIENvbG9yIG9wYXF1ZSgy
NTUsIDAsIDAsIDI1NSk7Ci0gICAgICAgIEludFJlY3QgdG9wKGNvbnRlbnRSZWN0LngoKSwgY29u
dGVudFJlY3QueSgpLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSAv
IDIpOwotICAgICAgICBJbnRSZWN0IGJvdHRvbShjb250ZW50UmVjdC54KCksIGNvbnRlbnRSZWN0
LnkoKSArIGNvbnRlbnRSZWN0LmhlaWdodCgpIC8gMiwgY29udGVudFJlY3Qud2lkdGgoKSwgY29u
dGVudFJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgY29udGV4dC5maWxsUmVjdCh0b3AsIG9w
YXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoYm90
dG9tLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIH0KLX07Ci0KLXN0cnVjdCBQ
YWludEZpbGxBbHBoYSA6IHB1YmxpYyBQYWludENhbGxiYWNrIHsKLSAgICB2aXJ0dWFsIHZvaWQg
b3BlcmF0b3IoKShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KQotICAgIHsKLSAgICAgICAgQ29sb3IgYWxwaGEoMCwgMCwgMCwgMCk7Ci0gICAgICAg
IGNvbnRleHQuZmlsbFJlY3QoY29udGVudFJlY3QsIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgUGFpbnRGaWxsUGFydGlhbE9wYXF1ZSA6IHB1YmxpYyBQ
YWludENhbGxiYWNrIHsKLSAgICBQYWludEZpbGxQYXJ0aWFsT3BhcXVlKEludFJlY3Qgb3BhcXVl
UmVjdCkKLSAgICAgICAgOiBtX29wYXF1ZVJlY3Qob3BhcXVlUmVjdCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLSAgICB7Ci0gICAgICAgIENvbG9yIGFscGhhKDAs
IDAsIDAsIDApOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGNvbnRlbnRSZWN0LCBhbHBoYSwg
Q29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAgICAgICAgSW50UmVjdCBmaWxsT3BhcXVlID0gbV9v
cGFxdWVSZWN0OwotICAgICAgICBmaWxsT3BhcXVlLmludGVyc2VjdChjb250ZW50UmVjdCk7Ci0K
LSAgICAgICAgQ29sb3Igb3BhcXVlKDI1NSwgMjU1LCAyNTUsIDI1NSk7Ci0gICAgICAgIGNvbnRl
eHQuZmlsbFJlY3QoZmlsbE9wYXF1ZSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAg
ICB9Ci0KLSAgICBJbnRSZWN0IG1fb3BhcXVlUmVjdDsKLX07Ci0KLSNkZWZpbmUgRVhQRUNUX0VR
X1JFQ1QoYSwgYikgXAotICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCi0gICAgRVhQRUNU
X0VRKGEubWF4WCgpLCBiLm1heFgoKSk7IFwKLSAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsg
XAotICAgIEVYUEVDVF9FUShhLm1heFkoKSwgYi5tYXhZKCkpOwotCi1URVNUKExheWVyVGV4dHVy
ZVVwZGF0ZXJUZXN0LCB0ZXN0T3BhcXVlUmVjdFByZXNlbnRBZnRlck9wYXF1ZVBhaW50KQotewot
ICAgIFBhaW50RmlsbE9wYXF1ZSBmaWxsT3BhcXVlOwotICAgIFJlZlB0cjxMYXllclRleHR1cmVV
cGRhdGVyPiB1cGRhdGVyOwotICAgIEludFJlY3Qgb3BhcXVlUmVjdDsKLSAgICBPd25QdHI8VGVz
dExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyOwotCi0gICAgb3BhcXVlUmVjdCA9IEludFJl
Y3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQdHIobmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1
bShmaWxsT3BhcXVlKSk7Ci0gICAgdXBkYXRlciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVhc2UoKSwgZmFsc2UpOwotICAgIHVwZGF0ZXItPnBy
ZXBhcmVUb1VwZGF0ZShJbnRSZWN0KDAsIDAsIDQwMCwgNDAwKSwgSW50U2l6ZSg0MDAsIDQwMCks
IDAsIDEsIG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgNDAw
LCA0MDApLCBvcGFxdWVSZWN0KTsKLQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAg
cGFpbnRlciA9IGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbE9wYXF1
ZSkpOwotICAgIHVwZGF0ZXIgPSBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCksIGZhbHNlKTsKLSAgICB1cGRhdGVyLT5wcmVw
YXJlVG9VcGRhdGUoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0MDApLCAw
LCAxLCBvcGFxdWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDQwMCwg
NDAwKSwgb3BhcXVlUmVjdCk7Ci0KLSAgICBvcGFxdWVSZWN0ID0gSW50UmVjdCgpOwotICAgIHBh
aW50ZXIgPSBhZG9wdFB0cihuZXcgVGVzdExheWVyUGFpbnRlckNocm9taXVtKGZpbGxPcGFxdWUp
KTsKLSAgICB1cGRhdGVyID0gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCkpOwotICAgIHVwZGF0ZXItPnByZXBhcmVU
b1VwZGF0ZShJbnRSZWN0KDAsIDAsIDQwMCwgNDAwKSwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIDEs
IG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgNDAwLCA0MDAp
LCBvcGFxdWVSZWN0KTsKLX0KLQotVEVTVChMYXllclRleHR1cmVVcGRhdGVyVGVzdCwgdGVzdE9w
YXF1ZVJlY3ROb3RQcmVzZW50QWZ0ZXJOb25PcGFxdWVQYWludCkKLXsKLSAgICBQYWludEZpbGxB
bHBoYSBmaWxsQWxwaGE7Ci0gICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHVwZGF0ZXI7
Ci0gICAgSW50UmVjdCBvcGFxdWVSZWN0OwotICAgIE93blB0cjxUZXN0TGF5ZXJQYWludGVyQ2hy
b21pdW0+IHBhaW50ZXI7Ci0KLSAgICBvcGFxdWVSZWN0ID0gSW50UmVjdCgpOwotICAgIHBhaW50
ZXIgPSBhZG9wdFB0cihuZXcgVGVzdExheWVyUGFpbnRlckNocm9taXVtKGZpbGxBbHBoYSkpOwot
ICAgIHVwZGF0ZXIgPSBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUocGFp
bnRlci5yZWxlYXNlKCksIGZhbHNlKTsKLSAgICB1cGRhdGVyLT5wcmVwYXJlVG9VcGRhdGUoSW50
UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0MDApLCAwLCAxLCBvcGFxdWVSZWN0
KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvcGFxdWVSZWN0KTsK
LQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgcGFpbnRlciA9IGFkb3B0UHRyKG5l
dyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbEFscGhhKSk7Ci0gICAgdXBkYXRlciA9IEJp
dG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJl
bGVhc2UoKSwgZmFsc2UpOwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShJbnRSZWN0KDAs
IDAsIDQwMCwgNDAwKSwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIDEsIG9wYXF1ZVJlY3QpOwotICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJlY3QpOwotCi0gICAg
b3BhcXVlUmVjdCA9IEludFJlY3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQdHIobmV3IFRlc3RM
YXllclBhaW50ZXJDaHJvbWl1bShmaWxsQWxwaGEpKTsKLSAgICB1cGRhdGVyID0gRnJhbWVCdWZm
ZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUocGFpbnRlci5yZWxl
YXNlKCkpOwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShJbnRSZWN0KDAsIDAsIDQwMCwg
NDAwKSwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIDEsIG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJlY3QpOwotfQotCi1URVNUKExheWVy
VGV4dHVyZVVwZGF0ZXJUZXN0LCB0ZXN0T3BhcXVlUmVjdE5vdFByZXNlbnRGb3JPcGFxdWVMYXll
cldpdGhPcGFxdWVQYWludCkKLXsKLSAgICBQYWludEZpbGxPcGFxdWUgZmlsbE9wYXF1ZTsKLSAg
ICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gdXBkYXRlcjsKLSAgICBJbnRSZWN0IG9wYXF1
ZVJlY3Q7Ci0gICAgT3duUHRyPFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcjsKLQot
ICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgcGFpbnRlciA9IGFkb3B0UHRyKG5ldyBU
ZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbE9wYXF1ZSkpOwotICAgIHVwZGF0ZXIgPSBCaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUocGFpbnRlci5yZWxlYXNlKCksIGZh
bHNlKTsKLSAgICB1cGRhdGVyLT5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgdXBkYXRlci0+cHJlcGFy
ZVRvVXBkYXRlKEludFJlY3QoMCwgMCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwgMCwg
MSwgb3BhcXVlUmVjdCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwg
b3BhcXVlUmVjdCk7Ci0KLSAgICBvcGFxdWVSZWN0ID0gSW50UmVjdCgpOwotICAgIHBhaW50ZXIg
PSBhZG9wdFB0cihuZXcgVGVzdExheWVyUGFpbnRlckNocm9taXVtKGZpbGxPcGFxdWUpKTsKLSAg
ICB1cGRhdGVyID0gQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3Jl
YXRlKHBhaW50ZXIucmVsZWFzZSgpLCBmYWxzZSk7Ci0gICAgdXBkYXRlci0+c2V0T3BhcXVlKHRy
dWUpOwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShJbnRSZWN0KDAsIDAsIDQwMCwgNDAw
KSwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIDEsIG9wYXF1ZVJlY3QpOwotICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJlY3QpOwotCi0gICAgb3BhcXVlUmVjdCA9
IEludFJlY3QoKTsKLSAgICBwYWludGVyID0gYWRvcHRQdHIobmV3IFRlc3RMYXllclBhaW50ZXJD
aHJvbWl1bShmaWxsT3BhcXVlKSk7Ci0gICAgdXBkYXRlciA9IEZyYW1lQnVmZmVyU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVsZWFzZSgpKTsKLSAg
ICB1cGRhdGVyLT5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBkYXRl
KEludFJlY3QoMCwgMCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgMSwgb3BhcXVl
UmVjdCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb3BhcXVlUmVj
dCk7Ci19Ci0KLVRFU1QoTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QsIHRlc3RPcGFxdWVSZWN0Tm90
UHJlc2VudEZvck9wYXF1ZUxheWVyV2l0aE5vbk9wYXF1ZVBhaW50KQotewotICAgIFBhaW50Rmls
bEFscGhhIGZpbGxBbHBoYTsKLSAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gdXBkYXRl
cjsKLSAgICBJbnRSZWN0IG9wYXF1ZVJlY3Q7Ci0gICAgT3duUHRyPFRlc3RMYXllclBhaW50ZXJD
aHJvbWl1bT4gcGFpbnRlcjsKLQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgcGFp
bnRlciA9IGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbEFscGhhKSk7
Ci0gICAgdXBkYXRlciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShw
YWludGVyLnJlbGVhc2UoKSwgZmFsc2UpOwotICAgIHVwZGF0ZXItPnNldE9wYXF1ZSh0cnVlKTsK
LSAgICB1cGRhdGVyLT5wcmVwYXJlVG9VcGRhdGUoSW50UmVjdCgwLCAwLCA0MDAsIDQwMCksIElu
dFNpemUoNDAwLCA0MDApLCAwLCAxLCBvcGFxdWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDAsIDAsIDAsIDApLCBvcGFxdWVSZWN0KTsKLQotICAgIG9wYXF1ZVJlY3QgPSBJbnRS
ZWN0KCk7Ci0gICAgcGFpbnRlciA9IGFkb3B0UHRyKG5ldyBUZXN0TGF5ZXJQYWludGVyQ2hyb21p
dW0oZmlsbEFscGhhKSk7Ci0gICAgdXBkYXRlciA9IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVhc2UoKSwgZmFsc2UpOwotICAgIHVw
ZGF0ZXItPnNldE9wYXF1ZSh0cnVlKTsKLSAgICB1cGRhdGVyLT5wcmVwYXJlVG9VcGRhdGUoSW50
UmVjdCgwLCAwLCA0MDAsIDQwMCksIEludFNpemUoNDAwLCA0MDApLCAwLCAxLCBvcGFxdWVSZWN0
KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvcGFxdWVSZWN0KTsK
LQotICAgIG9wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgcGFpbnRlciA9IGFkb3B0UHRyKG5l
dyBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oZmlsbEFscGhhKSk7Ci0gICAgdXBkYXRlciA9IEZy
YW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50
ZXIucmVsZWFzZSgpKTsKLSAgICB1cGRhdGVyLT5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgdXBkYXRl
ci0+cHJlcGFyZVRvVXBkYXRlKEludFJlY3QoMCwgMCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwg
NDAwKSwgMCwgMSwgb3BhcXVlUmVjdCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAw
LCAwLCAwKSwgb3BhcXVlUmVjdCk7Ci19Ci0KLVRFU1QoTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3Qs
IHRlc3RQYXJ0aWFsT3BhcXVlUmVjdE5vVHJhbnNmb3JtKQotewotICAgIEludFJlY3QgcGFydGlh
bFJlY3QoMTAwLCAyMDAsIDUwLCA3NSk7Ci0gICAgUGFpbnRGaWxsUGFydGlhbE9wYXF1ZSBmaWxs
UGFydGlhbChwYXJ0aWFsUmVjdCk7Ci0gICAgT3duUHRyPFRlc3RMYXllclBhaW50ZXJDaHJvbWl1
bT4gcGFpbnRlcihhZG9wdFB0cihuZXcgVGVzdExheWVyUGFpbnRlckNocm9taXVtKGZpbGxQYXJ0
aWFsKSkpOwotICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB1cGRhdGVyID0gQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVsZWFzZSgpLCBmYWxz
ZSk7Ci0KLSAgICBJbnRSZWN0IG9wYXF1ZVJlY3Q7Ci0gICAgdXBkYXRlci0+cHJlcGFyZVRvVXBk
YXRlKEludFJlY3QoMCwgMCwgNDAwLCA0MDApLCBJbnRTaXplKDQwMCwgNDAwKSwgMCwgMSwgb3Bh
cXVlUmVjdCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QocGFydGlhbFJlY3QsIG9wYXF1ZVJlY3QpOwot
fQotCi1URVNUKExheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LCB0ZXN0UGFydGlhbE9wYXF1ZVJlY3RU
cmFuc2xhdGlvbikKLXsKLSAgICBJbnRSZWN0IHBhcnRpYWxSZWN0KDEwMCwgMjAwLCA1MCwgNzUp
OwotICAgIFBhaW50RmlsbFBhcnRpYWxPcGFxdWUgZmlsbFBhcnRpYWwocGFydGlhbFJlY3QpOwot
Ci0gICAgT3duUHRyPFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcihhZG9wdFB0cihu
ZXcgVGVzdExheWVyUGFpbnRlckNocm9taXVtKGZpbGxQYXJ0aWFsKSkpOwotICAgIFJlZlB0cjxM
YXllclRleHR1cmVVcGRhdGVyPiB1cGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6Y3JlYXRlKHBhaW50ZXIucmVsZWFzZSgpLCBmYWxzZSk7Ci0KLSAgICBJbnRSZWN0IG9w
YXF1ZVJlY3Q7Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdCgxMSwgMTIsIDM4OSwgMzg4KTsKLSAg
ICB1cGRhdGVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudFJlY3QsIEludFNpemUoNDAwLCA0MDAp
LCAwLCAxLCBvcGFxdWVSZWN0KTsKLSAgICBFWFBFQ1RfRVFfUkVDVChwYXJ0aWFsUmVjdCwgb3Bh
cXVlUmVjdCk7Ci19Ci0KLVRFU1QoTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QsIHRlc3RQYXJ0aWFs
T3BhcXVlUmVjdFNjYWxlKQotewotICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUgPSAwLjU7Ci0KLSAg
ICBJbnRSZWN0IHBhcnRpYWxSZWN0KDksIDIwLCA1MCwgNzUpOwotICAgIEludFJlY3QgcGFydGlh
bERldmljZVJlY3QocGFydGlhbFJlY3QpOwotICAgIFBhaW50RmlsbFBhcnRpYWxPcGFxdWUgZmls
bFBhcnRpYWwocGFydGlhbERldmljZVJlY3QpOwotICAgIE93blB0cjxUZXN0TGF5ZXJQYWludGVy
Q2hyb21pdW0+IHBhaW50ZXIoYWRvcHRQdHIobmV3IFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bShm
aWxsUGFydGlhbCkpKTsKLSAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gdXBkYXRlciA9
IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShwYWludGVyLnJlbGVhc2Uo
KSwgZmFsc2UpOwotCi0gICAgSW50UmVjdCBvcGFxdWVSZWN0OwotICAgIEludFJlY3QgY29udGVu
dFJlY3QoNCwgNiwgMzk2LCAzOTQpOwotICAgIHVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShjb250
ZW50UmVjdCwgSW50U2l6ZSg0MDAsIDQwMCksIDAsIGNvbnRlbnRzU2NhbGUsIG9wYXF1ZVJlY3Qp
OwotCi0gICAgLy8gT3JpZ2luYWwgcmVjdDogOSwgMjAsIDUwLCA3NQotICAgIC8vIFNjYWxlZCBk
b3duIHRvIGhhbGYgc2l6ZTogNC41LCAxMCwgMjUsIDM3LjUKLSAgICAvLyBFbmNsb3NlZCBpbnQg
cmVjdDogNSwgMTAsIDI0LCAzNwotICAgIC8vIFNjYWxlZCBiYWNrIHVwIHRvIGNvbnRlbnQ6IDEw
LCAyMCwgNDgsIDc0Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KDEwLCAyMCwgNDgsIDc0KTsKLSAg
ICBFWFBFQ1RfRVFfUkVDVChzY2FsZWRSZWN0LCBvcGFxdWVSZWN0KTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvT3BhcXVlUmVj
dFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGVUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xNzhhZTk1NWNjNjM0YzAyZGM3OWRjMzFiNTlkNWU4MzdjM2ZiNTA2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9PcGFxdWVSZWN0
VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJPcGFxdWVSZWN0
VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNp
bmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitzdHJ1
Y3QgUGFpbnRDYWxsYmFjayB7CisgICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYpID0gMDsKK307CisKK2NsYXNzIFRlc3RMYXllclBhaW50
ZXJDaHJvbWl1bSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRQYWludGVyIHsKK3B1YmxpYzoKKyAg
ICBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0oUGFpbnRDYWxsYmFjayYgY2FsbGJhY2spIDogbV9j
YWxsYmFjayhjYWxsYmFjaykgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgT1ZFUlJJREUKKyAg
ICB7CisgICAgICAgIG1fY2FsbGJhY2soY29udGV4dCwgY29udGVudFJlY3QpOworICAgIH0KKwor
ICBwcml2YXRlOgorICAgIFBhaW50Q2FsbGJhY2smIG1fY2FsbGJhY2s7Cit9OworCisvLyBQYWlu
dCBjYWxsYmFjayBmdW5jdGlvbnMKKworc3RydWN0IFBhaW50RmlsbE9wYXF1ZSA6IHB1YmxpYyBQ
YWludENhbGxiYWNrIHsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBPVkVSUklERQorICAgIHsK
KyAgICAgICAgQ29sb3Igb3BhcXVlKDI1NSwgMCwgMCwgMjU1KTsKKyAgICAgICAgSW50UmVjdCB0
b3AoY29udGVudFJlY3QueCgpLCBjb250ZW50UmVjdC55KCksIGNvbnRlbnRSZWN0LndpZHRoKCks
IGNvbnRlbnRSZWN0LmhlaWdodCgpIC8gMik7CisgICAgICAgIEludFJlY3QgYm90dG9tKGNvbnRl
bnRSZWN0LngoKSwgY29udGVudFJlY3QueSgpICsgY29udGVudFJlY3QuaGVpZ2h0KCkgLyAyLCBj
b250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSAvIDIpOworICAgICAgICBj
b250ZXh0LmZpbGxSZWN0KHRvcCwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAg
ICAgY29udGV4dC5maWxsUmVjdChib3R0b20sIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgfQorfTsKKworc3RydWN0IFBhaW50RmlsbEFscGhhIDogcHVibGljIFBhaW50Q2FsbGJh
Y2sgeworICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCisgICAgeworICAgICAgICBDb2xvciBhbHBo
YSgwLCAwLCAwLCAwKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChjb250ZW50UmVjdCwgYWxw
aGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIH0KK307CisKK3N0cnVjdCBQYWludEZpbGxQ
YXJ0aWFsT3BhcXVlIDogcHVibGljIFBhaW50Q2FsbGJhY2sgeworICAgIFBhaW50RmlsbFBhcnRp
YWxPcGFxdWUoSW50UmVjdCBvcGFxdWVSZWN0KQorICAgICAgICA6IG1fb3BhcXVlUmVjdChvcGFx
dWVSZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQorICAgIHsK
KyAgICAgICAgQ29sb3IgYWxwaGEoMCwgMCwgMCwgMCk7CisgICAgICAgIGNvbnRleHQuZmlsbFJl
Y3QoY29udGVudFJlY3QsIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgICAgICBJ
bnRSZWN0IGZpbGxPcGFxdWUgPSBtX29wYXF1ZVJlY3Q7CisgICAgICAgIGZpbGxPcGFxdWUuaW50
ZXJzZWN0KGNvbnRlbnRSZWN0KTsKKworICAgICAgICBDb2xvciBvcGFxdWUoMjU1LCAyNTUsIDI1
NSwgMjU1KTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChmaWxsT3BhcXVlLCBvcGFxdWUsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgIH0KKworICAgIEludFJlY3QgbV9vcGFxdWVSZWN0Owor
fTsKKworI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCisgICAgRVhQRUNUX0VRKGEueCgp
LCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5tYXhYKCksIGIubWF4WCgpKTsgXAorICAgIEVY
UEVDVF9FUShhLnkoKSwgYi55KCkpOyBcCisgICAgRVhQRUNUX0VRKGEubWF4WSgpLCBiLm1heFko
KSk7CisKK2NsYXNzIE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCA6
IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBPcGFxdWVSZWN0VHJhY2tpbmdD
b250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QoKQorICAgICAgICA6IG1fc2tDYW52YXMoYWRvcHRQdHIo
c2tpYTo6Q3JlYXRlQml0bWFwQ2FudmFzKGNhbnZhc1JlY3QoKS53aWR0aCgpLCBjYW52YXNSZWN0
KCkuaGVpZ2h0KCksIGZhbHNlKSkpCisgICAgeworICAgIH0KKworICAgIFNrQ2FudmFzKiBza0Nh
bnZhcygpIHsgcmV0dXJuIG1fc2tDYW52YXMuZ2V0KCk7IH0KKyAgICBJbnRSZWN0IGNhbnZhc1Jl
Y3QoKSB7IHJldHVybiBJbnRSZWN0KDAsIDAsIDQwMCwgNDAwKTsgfQorCitwcml2YXRlOgorICAg
IE93blB0cjxTa0NhbnZhcz4gbV9za0NhbnZhczsKK307CisKK1RFU1RfRihPcGFxdWVSZWN0VHJh
Y2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3QsIHRlc3RPcGFxdWVSZWN0UHJlc2VudEFmdGVy
T3BhcXVlUGFpbnQpCit7CisgICAgUGFpbnRGaWxsT3BhcXVlIGZpbGxPcGFxdWU7CisgICAgVGVz
dExheWVyUGFpbnRlckNocm9taXVtIHBhaW50ZXIoZmlsbE9wYXF1ZSk7CisKKyAgICBPcGFxdWVS
ZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSgmcGFpbnRlcik7CisKKyAg
ICBJbnRSZWN0IG9wYXF1ZVJlY3Q7CisgICAgZGVsZWdhdGUucGFpbnRDb250ZW50cyhza0NhbnZh
cygpLCBjYW52YXNSZWN0KCksIG9wYXF1ZVJlY3QpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMCwgMCwgNDAwLCA0MDApLCBvcGFxdWVSZWN0KTsKK30KKworVEVTVF9GKE9wYXF1ZVJlY3RU
cmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdCwgdGVzdE9wYXF1ZVJlY3ROb3RQcmVzZW50
QWZ0ZXJOb25PcGFxdWVQYWludCkKK3sKKyAgICBQYWludEZpbGxBbHBoYSBmaWxsQWxwaGE7Cisg
ICAgVGVzdExheWVyUGFpbnRlckNocm9taXVtIHBhaW50ZXIoZmlsbEFscGhhKTsKKyAgICBPcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSgmcGFpbnRlcik7CisK
KyAgICBJbnRSZWN0IG9wYXF1ZVJlY3Q7CisgICAgZGVsZWdhdGUucGFpbnRDb250ZW50cyhza0Nh
bnZhcygpLCBjYW52YXNSZWN0KCksIG9wYXF1ZVJlY3QpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMCwgMCwgMCwgMCksIG9wYXF1ZVJlY3QpOworfQorCitURVNUX0YoT3BhcXVlUmVjdFRy
YWNraW5nQ29udGVudExheWVyRGVsZWdhdGVUZXN0LCB0ZXN0T3BhcXVlUmVjdE5vdFByZXNlbnRG
b3JPcGFxdWVMYXllcldpdGhPcGFxdWVQYWludCkKK3sKKyAgICBQYWludEZpbGxPcGFxdWUgZmls
bE9wYXF1ZTsKKyAgICBUZXN0TGF5ZXJQYWludGVyQ2hyb21pdW0gcGFpbnRlcihmaWxsT3BhcXVl
KTsKKyAgICBPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSgm
cGFpbnRlcik7CisKKyAgICBkZWxlZ2F0ZS5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBJbnRSZWN0
IG9wYXF1ZVJlY3Q7CisgICAgZGVsZWdhdGUucGFpbnRDb250ZW50cyhza0NhbnZhcygpLCBjYW52
YXNSZWN0KCksIG9wYXF1ZVJlY3QpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwg
MCwgMCksIG9wYXF1ZVJlY3QpOworfQorCitURVNUX0YoT3BhcXVlUmVjdFRyYWNraW5nQ29udGVu
dExheWVyRGVsZWdhdGVUZXN0LCB0ZXN0T3BhcXVlUmVjdE5vdFByZXNlbnRGb3JPcGFxdWVMYXll
cldpdGhOb25PcGFxdWVQYWludCkKK3sKKyAgICBQYWludEZpbGxPcGFxdWUgZmlsbEFscGhhOwor
ICAgIFRlc3RMYXllclBhaW50ZXJDaHJvbWl1bSBwYWludGVyKGZpbGxBbHBoYSk7CisgICAgT3Bh
cXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUgZGVsZWdhdGUoJnBhaW50ZXIpOwor
CisgICAgZGVsZWdhdGUuc2V0T3BhcXVlKHRydWUpOworCisgICAgSW50UmVjdCBvcGFxdWVSZWN0
OworICAgIGRlbGVnYXRlLnBhaW50Q29udGVudHMoc2tDYW52YXMoKSwgY2FudmFzUmVjdCgpLCBv
cGFxdWVSZWN0KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvcGFx
dWVSZWN0KTsKK30KKworVEVTVF9GKE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVn
YXRlVGVzdCwgdGVzdFBhcnRpYWxPcGFxdWVSZWN0Tm9UcmFuc2Zvcm0pCit7CisgICAgSW50UmVj
dCBwYXJ0aWFsUmVjdCgxMDAsIDIwMCwgNTAsIDc1KTsKKyAgICBQYWludEZpbGxQYXJ0aWFsT3Bh
cXVlIGZpbGxQYXJ0aWFsKHBhcnRpYWxSZWN0KTsKKyAgICBUZXN0TGF5ZXJQYWludGVyQ2hyb21p
dW0gcGFpbnRlcihmaWxsUGFydGlhbCk7CisgICAgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExh
eWVyRGVsZWdhdGUgZGVsZWdhdGUoJnBhaW50ZXIpOworCisgICAgSW50UmVjdCBvcGFxdWVSZWN0
OworICAgIGRlbGVnYXRlLnBhaW50Q29udGVudHMoc2tDYW52YXMoKSwgY2FudmFzUmVjdCgpLCBv
cGFxdWVSZWN0KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChwYXJ0aWFsUmVjdCwgb3BhcXVlUmVjdCk7
Cit9CisKK1RFU1RfRihPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZVRlc3Qs
IHRlc3RQYXJ0aWFsT3BhcXVlUmVjdFRyYW5zbGF0aW9uKQoreworICAgIEludFJlY3QgcGFydGlh
bFJlY3QoMTAwLCAyMDAsIDUwLCA3NSk7CisgICAgUGFpbnRGaWxsUGFydGlhbE9wYXF1ZSBmaWxs
UGFydGlhbChwYXJ0aWFsUmVjdCk7CisgICAgVGVzdExheWVyUGFpbnRlckNocm9taXVtIHBhaW50
ZXIoZmlsbFBhcnRpYWwpOworICAgIE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVn
YXRlIGRlbGVnYXRlKCZwYWludGVyKTsKKworICAgIEludFJlY3Qgb3BhcXVlUmVjdDsKKyAgICBJ
bnRSZWN0IGNvbnRlbnRSZWN0KDExLCAxMiwgMzg5LCAzODgpOworICAgIGRlbGVnYXRlLnBhaW50
Q29udGVudHMoc2tDYW52YXMoKSwgY29udGVudFJlY3QsIG9wYXF1ZVJlY3QpOworICAgIEVYUEVD
VF9FUV9SRUNUKHBhcnRpYWxSZWN0LCBvcGFxdWVSZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>