<?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>77148</bug_id>
          
          <creation_ts>2012-01-26 14:58:10 -0800</creation_ts>
          <short_desc>[Qt][Texmap] Refactor TextureMapper API to use ImageBuffers when possible.</short_desc>
          <delta_ts>2012-02-03 09:39:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>75918</dependson>
    
    <dependson>77716</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>543520</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-26 14:58:10 -0800</bug_when>
    <thetext>TextureMapper&apos;s backing-store code (tiling/uploads) is messy and hard to maintain. Time to give it some love.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543534</commentid>
    <comment_count>1</comment_count>
      <attachid>124186</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-26 15:08:03 -0800</bug_when>
    <thetext>Created attachment 124186
Patch 1: Clean up TextureMapper&apos;s content-upload code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543544</commentid>
    <comment_count>2</comment_count>
      <attachid>124186</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-26 15:18:03 -0800</bug_when>
    <thetext>Comment on attachment 124186
Patch 1: Clean up TextureMapper&apos;s content-upload code

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

It is pretty amazing that you are able to remove so much code

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:615
&gt; +        swizzleRgb(reinterpret_cast&lt;uint32_t*&gt;(qtImage.bits()), qtImage.size());

werent you going to rename this method just jocelyn asked you to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543610</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-26 15:57:45 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 124186 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124186&amp;action=review
&gt; 
&gt; It is pretty amazing that you are able to remove so much code
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:615
&gt; &gt; +        swizzleRgb(reinterpret_cast&lt;uint32_t*&gt;(qtImage.bits()), qtImage.size());
&gt; 
&gt; werent you going to rename this method just jocelyn asked you to?

He asked that I add a comment in WebGraphicsLayer what I&apos;m swizzling to/from. Here it should be inferred from the code but I can add a comment as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544057</commentid>
    <comment_count>4</comment_count>
      <attachid>124186</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-01-27 07:20:47 -0800</bug_when>
    <thetext>Comment on attachment 124186
Patch 1: Clean up TextureMapper&apos;s content-upload code

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

Went through it and it looks good, just got two nitpicks.

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:589
&gt; +static void swizzleRgb(uint32_t* data, const IntSize&amp; size)

It&apos;s called swizzleRGB with capitals in ShareableBitmap, maybe it&apos;s worth to keep the names consistent.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:123
&gt; +void swizzleRgb(Image*);

It&apos;s defined static and used only in TextureMapperGL.cpp.
Does this belong in TextureMapper.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544104</commentid>
    <comment_count>5</comment_count>
      <attachid>124325</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-27 08:44:26 -0800</bug_when>
    <thetext>Created attachment 124325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544885</commentid>
    <comment_count>6</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-29 22:06:47 -0800</bug_when>
    <thetext>After some deeper tests with Instruments on Mac, this seems to still create unnecessary image copies on WebKit2.
I&apos;ve decided to combine it with another patch that switches TextureMapperQt to a cross-platform implementation that uses ImageBuffer instead of QPixmap; Originally I thought of spliitting it to two patches, but a lot of the changes from the first patch don&apos;t make sense when the second patch is there...
So I&apos;m working on a patch which moves things around in TextureMapper API and erases a lot of redundant code, but doesn&apos;t change any behavior or creates additional copies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544888</commentid>
    <comment_count>7</comment_count>
      <attachid>124497</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-29 22:39:34 -0800</bug_when>
    <thetext>Created attachment 124497
Patch

Patch might be big but most of it is deletions :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544889</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-29 22:42:01 -0800</bug_when>
    <thetext>Attachment 124497 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/texmap/TextureMapper.h:59:  The parameter name &quot;t&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/texmap/TextureMapper.h:59:  The parameter name &quot;format&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/texmap/TextureMapper.h:60:  The parameter name &quot;format&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/texmap/TextureMapper.h:86:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544890</commentid>
    <comment_count>9</comment_count>
      <attachid>124497</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-29 22:52:47 -0800</bug_when>
    <thetext>Comment on attachment 124497
Patch

Attachment 124497 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11366468</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544894</commentid>
    <comment_count>10</comment_count>
      <attachid>124497</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-29 22:59:26 -0800</bug_when>
    <thetext>Comment on attachment 124497
Patch

Attachment 124497 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11367458</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544895</commentid>
    <comment_count>11</comment_count>
      <attachid>124497</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-29 23:00:04 -0800</bug_when>
    <thetext>Comment on attachment 124497
Patch

Attachment 124497 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11359783</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544897</commentid>
    <comment_count>12</comment_count>
      <attachid>124497</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-29 23:01:36 -0800</bug_when>
    <thetext>Comment on attachment 124497
Patch

Attachment 124497 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11354004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544938</commentid>
    <comment_count>13</comment_count>
      <attachid>124497</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-30 01:34:15 -0800</bug_when>
    <thetext>Comment on attachment 124497
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:420
&gt; +#if PLATFORM(QT)
&gt; +        void concatTransform(const TransformationMatrix&amp;);
&gt; +        void setTransform(const TransformationMatrix&amp;);
&gt; +        TransformationMatrix getTransform() const;
&gt; +#else
&gt; +        void concatTransform(const TransformationMatrix&amp; transform) { concatCTM(transform.toAffine()); }
&gt; +        void setTransform(const TransformationMatrix&amp; transform) { setCTM(transform.toAffine()); }
&gt; +        TransformationMatrix getTransform() const { return TransformationMatrix(getCTM()); }
&gt; +#endif

Maybe a comment here would be nice to know why this is needed for Qt. Isn&apos;t it a bit confusing to have both concatTransform and concatCTM?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.cpp:121
&gt; +
&gt; +void BitmapTextureImageBuffer::updateContents(void* data, const IntRect&amp; targetRect, PixelFormat format)
&gt; +{

Maybe a comment here would be helpful for other ports?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:85
&gt; +    enum AccelerationMode { Accelerated, Unaccelerated };

In the case someone adds native directx support some day, would Software, OpenGL make more sense?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:191
&gt; +    // This suld be a reference copy only.

suld*?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545655</commentid>
    <comment_count>14</comment_count>
      <attachid>124641</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-30 17:45:24 -0800</bug_when>
    <thetext>Created attachment 124641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545660</commentid>
    <comment_count>15</comment_count>
      <attachid>124643</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-30 17:51:32 -0800</bug_when>
    <thetext>Created attachment 124643
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545665</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-30 17:54:22 -0800</bug_when>
    <thetext>Attachment 124643 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/texmap/TextureMapper.h:59:  The parameter name &quot;t&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/texmap/TextureMapper.h:59:  The parameter name &quot;format&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/texmap/TextureMapper.h:86:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545714</commentid>
    <comment_count>17</comment_count>
      <attachid>124643</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-30 18:45:35 -0800</bug_when>
    <thetext>Comment on attachment 124643
Patch

Attachment 124643 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11366793</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545756</commentid>
    <comment_count>18</comment_count>
      <attachid>124664</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-30 20:44:37 -0800</bug_when>
    <thetext>Created attachment 124664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545851</commentid>
    <comment_count>19</comment_count>
      <attachid>124664</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-31 01:31:44 -0800</bug_when>
    <thetext>Comment on attachment 124664
Patch

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

Looks good to me, maybe someone else wants to have a look?

&gt; Source/WebCore/ChangeLog:18
&gt; +        Also, Functions that use TransformationMatrix were added to GraphicsContext, to allow for

functions*

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:781
&gt; +// These fuctions should be implemented to support software-rendering of 3d transforms.

3D

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:590
&gt; -static void swizzleBGRAToRGBA(uint32_t* data, const IntSize&amp; size)
&gt; +static void swizzleRGB(uint32_t* data, const IntSize&amp; size)

wasnt the old name better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545987</commentid>
    <comment_count>20</comment_count>
      <attachid>124715</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-31 06:12:32 -0800</bug_when>
    <thetext>Created attachment 124715
Patch

Addressed Kenneth&apos;s comments, fixed warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545990</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 06:15:47 -0800</bug_when>
    <thetext>Attachment 124715 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
From git://git.webkit.org/WebKit
   3b3325c..baf92d92 master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 106355 = 3b3325cd5a20bf357b8fdad5c0c1dcb448125ec4
r106356 = baf92d9262faea6b0ee0b2ada47f821fc179c331
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546183</commentid>
    <comment_count>22</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-01-31 09:57:32 -0800</bug_when>
    <thetext>(In reply to comment #20)
I know it&apos;s probably is difficult to split, but this patch is very difficult to follow.
I couldn&apos;t find anything to improve after looking at it, though I surely missed something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546189</commentid>
    <comment_count>23</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-31 10:07:32 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #20)
&gt; I know it&apos;s probably is difficult to split, but this patch is very difficult to follow.
It&apos;s impossible to split without breaking something :(
However, it&apos;s a large patch mostly due to deletions. The main thing the patch actually does is move stuff around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547866</commentid>
    <comment_count>24</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-02 07:59:54 -0800</bug_when>
    <thetext>Anything I still need to explain/modify about this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547871</commentid>
    <comment_count>25</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-02-02 08:12:04 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; It&apos;s impossible to split without breaking something :(
&gt; However, it&apos;s a large patch mostly due to deletions. The main thing the patch actually does is move stuff around.

If you say that most of this code was moved, you have my (pretty low value) vote.
I guess that progressively fixing introduced regression, at this stage, would take less efforts than chewing on that patch anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547883</commentid>
    <comment_count>26</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-02 08:29:27 -0800</bug_when>
    <thetext>
&gt; If you say that most of this code was moved, you have my (pretty low value) vote.
Your vote is high-value :)

&gt; I guess that progressively fixing introduced regression, at this stage, would take less efforts than chewing on that patch anyway.

Also, this patch does not at all affect the mainstream code-path that uses GL, only the software fallback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547972</commentid>
    <comment_count>27</comment_count>
      <attachid>124715</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-02 10:38:37 -0800</bug_when>
    <thetext>Comment on attachment 124715
Patch

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

Just a couple questions before I finish the review. Looks nice! I&apos;m glad that we can share the ImageBuffer code with you.

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:413
&gt; +#if ENABLE(3D_RENDERING)

You might want to have this be ENABLE(3D_RENDERING) &amp;&amp; USE(TEXTURE_MAPPER). Then you could move the empty implementation out of Source/WebCore/platform/graphics/GraphicsContext.cpp.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.cpp:193
&gt; +#if ENABLE(3D_RENDERING)
&gt; +    context-&gt;concat3DTransform(matrix);
&gt; +#else
&gt; +    context-&gt;concatCTM(matrix);
&gt; +#endif

This is repeated a bit. Did you consider moving the #ifdefs into concat3DTransform and the other new methods on GraphicsContext.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:189
&gt; +    {
&gt; +        context-&gt;setImageInterpolationQuality(textureMapper-&gt;imageInterpolationQuality());
&gt; +        context-&gt;setTextDrawingMode(textureMapper-&gt;textDrawingMode());
&gt; +        context-&gt;translate(-dirtyRect.x(), -dirtyRect.y());
&gt; +        layer-&gt;paintGraphicsLayerContents(*context, dirtyRect);
&gt; +        if (m_currentContent.contentType == DirectImageContentType)
&gt; +            context-&gt;drawImage(m_currentContent.image.get(), ColorSpaceDeviceRGB, m_state.contentsRect);
&gt; +    }

What is the purpose of this new inner scope?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:191
&gt; +    // This suld be a reference copy only.

suld -&gt; should

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:192
&gt; +    RefPtr&lt;Image&gt; image = imageBuffer-&gt;copyImage();

I believe this is a deep copy on Cairo, at least. You may need to pass a copy behavior here. Looks like Cairo has not implemented the shallow copy behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547974</commentid>
    <comment_count>28</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-02 10:45:22 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 124715 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124715&amp;action=review
&gt; 
&gt; Just a couple questions before I finish the review. Looks nice! I&apos;m glad that we can share the ImageBuffer code with you.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsContext.h:413
&gt; &gt; +#if ENABLE(3D_RENDERING)
&gt; 
&gt; You might want to have this be ENABLE(3D_RENDERING) &amp;&amp; USE(TEXTURE_MAPPER). Then you could move the empty implementation out of Source/WebCore/platform/graphics/GraphicsContext.cpp.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapper.cpp:193
&gt; &gt; +#if ENABLE(3D_RENDERING)
&gt; &gt; +    context-&gt;concat3DTransform(matrix);
&gt; &gt; +#else
&gt; &gt; +    context-&gt;concatCTM(matrix);
&gt; &gt; +#endif
&gt; 
&gt; This is repeated a bit. Did you consider moving the #ifdefs into concat3DTransform and the other new methods on GraphicsContext.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:189
&gt; &gt; +    {
&gt; &gt; +        context-&gt;setImageInterpolationQuality(textureMapper-&gt;imageInterpolationQuality());
&gt; &gt; +        context-&gt;setTextDrawingMode(textureMapper-&gt;textDrawingMode());
&gt; &gt; +        context-&gt;translate(-dirtyRect.x(), -dirtyRect.y());
&gt; &gt; +        layer-&gt;paintGraphicsLayerContents(*context, dirtyRect);
&gt; &gt; +        if (m_currentContent.contentType == DirectImageContentType)
&gt; &gt; +            context-&gt;drawImage(m_currentContent.image.get(), ColorSpaceDeviceRGB, m_state.contentsRect);
&gt; &gt; +    }
&gt; 
&gt; What is the purpose of this new inner scope?
&gt;
Not needed, it was there before because we a GraphicsContext on the stack. I&apos;ll remove that.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:191
&gt; &gt; +    // This suld be a reference copy only.
&gt; 
&gt; suld -&gt; should
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:192
&gt; &gt; +    RefPtr&lt;Image&gt; image = imageBuffer-&gt;copyImage();
&gt; 
&gt; I believe this is a deep copy on Cairo, at least. You may need to pass a copy behavior here. Looks like Cairo has not implemented the shallow copy behavior.

Ah, yes. I need to specify DontCopyBackingStore, which is not really implemented in Qt/GTK. I don&apos;t think it&apos;s in the scope of this patch though, maybe I should add it as a FIXME?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547977</commentid>
    <comment_count>29</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-02 10:46:23 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; (From update of attachment 124715 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124715&amp;action=review
&gt; &gt; 
&gt; &gt; Just a couple questions before I finish the review. Looks nice! I&apos;m glad that we can share the ImageBuffer code with you.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/GraphicsContext.h:413
&gt; &gt; &gt; +#if ENABLE(3D_RENDERING)
&gt; &gt; 
&gt; &gt; You might want to have this be ENABLE(3D_RENDERING) &amp;&amp; USE(TEXTURE_MAPPER). Then you could move the empty implementation out of Source/WebCore/platform/graphics/GraphicsContext.cpp.

OK, I don&apos;t mind - I just thought that concat3DTransform is not inherently specific to TextureMapper, it&apos;s just used by TextureMapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548221</commentid>
    <comment_count>30</comment_count>
      <attachid>125205</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-02 16:07:36 -0800</bug_when>
    <thetext>Created attachment 125205
Revised patch based on Martin Robinson&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548222</commentid>
    <comment_count>31</comment_count>
      <attachid>125206</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-02 16:09:32 -0800</bug_when>
    <thetext>Created attachment 125206
Revised patch based on Martin Robinson&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548249</commentid>
    <comment_count>32</comment_count>
      <attachid>125206</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-02 16:39:34 -0800</bug_when>
    <thetext>Comment on attachment 125206
Revised patch based on Martin Robinson&apos;s comments.

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

Okay. I think I understand enough of this to give an r+ now. Very nice. The only change I request is to move the ImageBuffer implementations to another file (perhaps TextureMapperImageBuffer.cpp/h), to reduce the number of classes per-file. Eventually I think it would be nice to move the BitmapTexture classes to their own files too.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:1338
&gt; +#if ENABLE(3D_RENDERING)

I think you are missing a &amp;&amp; USE(TEXTURE_MAPPER) here.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.cpp:80
&gt; +class BitmapTextureImageBuffer : public BitmapTexture {
&gt; +    friend class TextureMapperImageBuffer;
&gt; +public:

I think it makes sense to split out the ImageBuffer implementation into a new file.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.cpp:194
&gt; +    context-&gt;save();
&gt; +    context-&gt;setAlpha(opacity);
&gt; +#if ENABLE(3D_RENDERING)
&gt; +    context-&gt;concat3DTransform(matrix);
&gt; +#else
&gt; +    context-&gt;concatCTM(matrix);
&gt; +#endif
&gt; +    context-&gt;drawImageBuffer(image, ColorSpaceDeviceRGB, targetRect);

It seems that if alpha == 1 and the transform is just a 2D translation we could avoid a copy? Perhaps not, but if so it might be a good fast path to add for the future!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548269</commentid>
    <comment_count>33</comment_count>
      <attachid>125214</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-02 17:09:42 -0800</bug_when>
    <thetext>Created attachment 125214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548383</commentid>
    <comment_count>34</comment_count>
      <attachid>125214</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 20:00:46 -0800</bug_when>
    <thetext>Comment on attachment 125214
Patch

Clearing flags on attachment: 125214

Committed r106620: &lt;http://trac.webkit.org/changeset/106620&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548384</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 20:00:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548461</commentid>
    <comment_count>36</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-02 22:34:49 -0800</bug_when>
    <thetext>Reopen, because it broke the build:

../../../../Source/WebCore/platform/graphics/texmap/TextureMapperImageBuffer.cpp: In member function &apos;virtual void WebCore::TextureMapperImageBuffer::beginClip(const WebCore::TransformationMatrix&amp;, const WebCore::FloatRect&amp;)&apos;:
../../../../Source/WebCore/platform/graphics/texmap/TextureMapperImageBuffer.cpp:58: error: &apos;const class WebCore::TransformationMatrix&apos; has no member named &apos;toAffine&apos;
../../../../Source/WebCore/platform/graphics/texmap/TextureMapperImageBuffer.cpp: In member function &apos;virtual void WebCore::TextureMapperImageBuffer::drawTexture(const WebCore::BitmapTexture&amp;, const WebCore::FloatRect&amp;, const WebCore::TransformationMatrix&amp;, float, const WebCore::BitmapTexture*)&apos;:
../../../../Source/WebCore/platform/graphics/texmap/TextureMapperImageBuffer.cpp:98: error: no matching function for call to &apos;WebCore::GraphicsContext::concatCTM(const WebCore::TransformationMatrix&amp;)&apos;
../../../../Source/WebCore/platform/graphics/GraphicsContext.h:409: note: candidates are: void WebCore::GraphicsContext::concatCTM(const WebCore::AffineTransform&amp;)
I</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548466</commentid>
    <comment_count>37</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-02 22:40:20 -0800</bug_when>
    <thetext>It seems that the false branch of ENABLE(3D_RENDERING) is broken.
( Qt ARM and Windows build is broken because of this bug. )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548481</commentid>
    <comment_count>38</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-02 23:02:31 -0800</bug_when>
    <thetext>Sorry, but I had to roll it out to make builds work again: http://trac.webkit.org/changeset/106630

Please reland with fixed build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548663</commentid>
    <comment_count>39</comment_count>
      <attachid>125313</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-03 06:08:06 -0800</bug_when>
    <thetext>Created attachment 125313
Fixed the non-3d-rendering path</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548684</commentid>
    <comment_count>40</comment_count>
      <attachid>125313</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 06:59:46 -0800</bug_when>
    <thetext>Comment on attachment 125313
Fixed the non-3d-rendering path

Clearing flags on attachment: 125313

Committed r106659: &lt;http://trac.webkit.org/changeset/106659&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548685</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 06:59:55 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548696</commentid>
    <comment_count>42</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-03 07:19:52 -0800</bug_when>
    <thetext>Reopen, because the build is still broken:

In file included from ../../../../Source/WebCore/platform/graphics/texmap/TextureMapper.cpp:21:0:
../../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h: In static member function &apos;static WTF::PassOwnPtr&lt;WebCore::TextureMapper&gt; WebCore::TextureMapper::platformCreateAccelerated()&apos;:
../../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h:124:16: error: conversion from &apos;int&apos; to non-scalar type &apos;WTF::PassOwnPtr&lt;WebCore::TextureMapper&gt;&apos; requested
../../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h:125:5: warning: control reaches end of non-void function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548707</commentid>
    <comment_count>43</comment_count>
      <attachid>125313</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-03 07:42:42 -0800</bug_when>
    <thetext>Comment on attachment 125313
Fixed the non-3d-rendering path

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:126
&gt; +#if USE(TEXTURE_MAPPER_GL)
&gt; +    static PassOwnPtr&lt;TextureMapper&gt; platformCreateAccelerated();
&gt; +#else
&gt; +    static PassOwnPtr&lt;TextureMapper&gt; platformCreateAccelerated()
&gt; +    {
&gt; +        return 0;
&gt; +    }
&gt; +#endif

It broke the Qt ARM build:

In file included from ../../../../Source/WebCore/platform/graphics/texmap/TextureMapper.cpp:21:
../../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h: In static member function &apos;static WTF::PassOwnPtr&lt;WebCore::TextureMapper&gt; WebCore::TextureMapper::platformCreateAccelerated()&apos;:
../../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h:124: error: conversion from &apos;int&apos; to non-scalar type &apos;WTF::PassOwnPtr&lt;WebCore::TextureMapper&gt;&apos; requested
In file included from ../../../../Source/WebCore/platform/graphics/texmap/TextureMapperImageBuffer.h:24,
                 from ../../../../Source/WebCore/platform/graphics/texmap/TextureMapperImageBuffer.cpp:21:
../../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h: In static member function &apos;static WTF::PassOwnPtr&lt;WebCore::TextureMapper&gt; WebCore::TextureMapper::platformCreateAccelerated()&apos;:
../../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h:124: error: conversion from &apos;int&apos; to non-scalar type &apos;WTF::PassOwnPtr&lt;WebCore::TextureMapper&gt;&apos; requested</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548775</commentid>
    <comment_count>44</comment_count>
      <attachid>125346</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-03 08:59:51 -0800</bug_when>
    <thetext>Created attachment 125346
Attempt at a patch that doesn&apos;t break the ARM bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548776</commentid>
    <comment_count>45</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-03 09:02:14 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; Created an attachment (id=125346) [details]
&gt; Attempt at a patch that doesn&apos;t break the ARM bot

It won&apos;t apply to trunk, because your wrong patch is still in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548777</commentid>
    <comment_count>46</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-03 09:04:48 -0800</bug_when>
    <thetext>Additionally Balázs landed a speculative fix - http://trac.webkit.org/changeset/106668</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124186</attachid>
            <date>2012-01-26 15:08:03 -0800</date>
            <delta_ts>2012-01-27 08:44:26 -0800</delta_ts>
            <desc>Patch 1: Clean up TextureMapper&apos;s content-upload code</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>36452</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YTQ0NGJhLi43Mzc3YTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTUg
QEAKIDIwMTItMDEtMjYgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KIAorICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBiYWNraW5n
IHN0b3Jlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc3MTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UmVtb3ZlIHJlZHVuZGFudCB1cGxvYWQgY29kZSBmcm9tIFRleHR1cmVNYXBwZXIuIEluc3RlYWQs
IG9ubHkgdXBsb2FkIHZpYSBXZWJDb3JlOjpJbWFnZSwKKyAgICAgICAgdXNpbmcgV2ViQ29yZTo6
SW1hZ2VCdWZmZXIgd2hlbiBoYXZpbmcgdG8gcGFpbnQgYSBsYXllci4KKworICAgICAgICBJbiBU
ZXh0dXJlTWFwcGVyTm9kZSAoV2ViS2l0MSBvbmx5KSwgdGhpcyBhbGxvd3MgdXMgdG8gcGFpbnQg
aW50byBhIHNpbmdsZSBidWZmZXIsIHRoZQorICAgICAgICBzaXplIG9mIHRoZSBkaXJ0eSByZWN0
LCBhbmQgdGhlbiB1cGxvYWQgcGFydHMgb2YgaXQgdG8gdGV4dHVyZXMsIGluc3RlYWQgb2YgaGF2
aW5nIHRvCisgICAgICAgIHJlbmRlciBzZXBhcmF0ZWx5IGludG8gZWFjaCB0aWxlIGxpa2Ugd2Ug
ZGlkIGJlZm9yZS4gV2ViS2l0MiBjb2RlIHdvcmtzIGVzc2VudGlhbGx5IHRoZQorICAgICAgICBz
YW1lIGFzIGJlZm9yZSwganVzdCB3aXRoIGRpZmZlcmVudCBBUEkgY2FsbHMuCisKKyAgICAgICAg
Tm8gbmV3IGZ1bmN0aW9uYWxpdHksIHRlc3RzIGluIExheW91dFRlc3RzL2NvbXBvc2l0aW5nIHRl
c3QgdGhpcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuY3BwOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChCaXRt
YXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBU
ZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6c3dpenpsZVJnYik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
R0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvVGV4dHVyZU1hcHBlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVR
dDo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5oOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZVF0OjpCaXRtYXBU
ZXh0dXJlUXQpOgorICAgICAgICAoQml0bWFwVGV4dHVyZVF0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJRdDo6VGV4dHVyZU1hcHBlclF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZTo6Qml0bWFwVGV4dHVyZSk6CisgICAgICAgIChCaXRtYXBUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OmJwcCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlOjppc09wYXF1ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVy
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVu
dHNUaWxlQmFja0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyTm9kZSk6CisKKzIwMTIt
MDEtMjYgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwogICAg
ICAgICBbUXRdW1dLMl0gQ2hpbGQgbGF5ZXJzIGFwcGVhciBpbiB3cm9uZyBwb3NpdGlvbiB3aGVu
IHNjcm9sbGluZwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzcwNjMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCBkZTA0MWJmLi45ZjE5YWVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjYzLDU3ICsyNjMsNiBAQCBzdHJ1Y3QgVGV4dHVy
ZU1hcHBlckdMRGF0YSB7CiAKICAgICB9OwogCi0gICAgc3RydWN0IERpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlUmVwb3NpdG9yeSB7Ci0gICAgICAgIHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgICAgICBH
THVpbnQgdGV4dHVyZTsKLSAgICAgICAgICAgIGludCByZWZDb3VudDsKLSAgICAgICAgfTsKLSAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPEltYWdlVUlELCBFbnRyeT4gSW1hZ2VUZXh0dXJlTWFwOwot
ICAgICAgICBJbWFnZVRleHR1cmVNYXAgaW1hZ2VUb1RleHR1cmU7Ci0KLSAgICAgICAgR0x1aW50
IGZpbmRPckNyZWF0ZShJbWFnZVVJRCBpbWFnZSwgYm9vbCYgZm91bmQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEltYWdlVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5m
aW5kKGltYWdlKTsKLSAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
aXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25k
LnJlZkNvdW50Kys7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIHJldHVybiBpdC0+c2Vjb25kLnRleHR1cmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBFbnRyeSBlbnRyeTsKLSAgICAgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRy
eS50ZXh0dXJlKSk7Ci0gICAgICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7Ci0gICAgICAgICAg
ICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKLSAgICAgICAgICAgIHJldHVybiBl
bnRyeS50ZXh0dXJlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBkZXJlZihJbWFnZVVJRCBp
bWFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgSGFzaE1hcDxJbWFnZVVJRCwgRW50cnk+Ojpp
dGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAgICAgICAgICAgaWYg
KGl0ICE9IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5z
ZWNvbmQucmVmQ291bnQgPCAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJl
LnJlbW92ZShpdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIERpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIH5EaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9z
aXRvcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEltYWdlVGV4dHVyZU1hcDo6aXRl
cmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdpbigpOyBpdCAhPSBpbWFnZVRvVGV4dHVyZS5l
bmQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlID0gaXQtPnNlY29u
ZC50ZXh0dXJlOwotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKQotICAgICAgICAgICAgICAg
ICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSkpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgIH0KLSAgICB9IGRpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKLQogICAgIFNo
YXJlZEdMRGF0YSYgc2hhcmVkR0xEYXRhKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAq
KG1fc2hhcmVkR0xEYXRhLmdldCgpKTsKQEAgLTMyNyw2ICsyNzYsNyBAQCBzdHJ1Y3QgVGV4dHVy
ZU1hcHBlckdMRGF0YSB7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJp
eDsKICAgICBpbnQgY3VycmVudFByb2dyYW07CiAgICAgaW50IHByZXZpb3VzUHJvZ3JhbTsKKyAg
ICBHTGludCB2aWV3cG9ydFs0XTsKICAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdM
RGF0YTsKIH07CiAKQEAgLTMzNyw1NiArMjg3LDI0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXpl
JiwgYm9vbCBvcGFxdWUpOwogICAgIHZvaWQgYmluZCgpOwotICAgIHZpcnR1YWwgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNU
b0ltYWdlKEltYWdlKik7CiAgICAgfkJpdG1hcFRleHR1cmVHTCgpIHsgZGVzdHJveSgpOyB9CiAg
ICAgdmlydHVhbCB1aW50MzJfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBpbmxp
bmUgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAgICAgaW5saW5l
IEZsb2F0U2l6ZSByZWxhdGl2ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0aXZlU2l6ZTsg
fQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBt
X3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KLQotICAgIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4
ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKik7Ci0gICAgdm9pZCB1cGRhdGVSYXdDb250
ZW50cyhjb25zdCBJbnRSZWN0JiwgY29uc3Qgdm9pZCopOwotICAgIHZvaWQgcGFjaygpCi0gICAg
ewotICAgICAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBhIHN0dWIuCi0gICAgICAgIGlmIChpc1Bh
Y2tlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2lzUGFja2VkID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICB2b2lkIHVucGFjaygpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGN1
cnJlbnRseSBhIHN0dWIuCi0gICAgICAgIGlmICghaXNQYWNrZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9pc1BhY2tlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaXNQ
YWNrZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faXNQYWNrZWQ7Ci0gICAgfQor
ICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
UmVjdCYsIFBpeGVsRm9ybWF0KTsKIAogcHJpdmF0ZToKICAgICBHTHVpbnQgbV9pZDsKLSAgICBJ
bWFnZVVJRCBtX2ltYWdlVUlEOwogICAgIEZsb2F0U2l6ZSBtX3JlbGF0aXZlU2l6ZTsKLSAgICBi
b29sIG1fb3BhcXVlOwogICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKLSAgICBPd25QdHI8QkdS
QTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IG1fYnVmZmVyOwogICAgIEludFJlY3QgbV9kaXJ0eVJl
Y3Q7CiAgICAgR0x1aW50IG1fZmJvOwogICAgIEdMdWludCBtX3JibzsKICAgICBJbnRTaXplIG1f
YWN0dWFsU2l6ZTsKICAgICBib29sIG1fc3VyZmFjZU5lZWRzUmVzZXQ7Ci0gICAgYm9vbCBtX2lz
UGFja2VkOwogICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOwogICAgIEJpdG1h
cFRleHR1cmVHTCgpCiAgICAgICAgIDogbV9pZCgwKQotICAgICAgICAsIG1faW1hZ2VVSUQoMCkK
LSAgICAgICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAgICAgLCBtX2ZibygwKQogICAgICAgICAs
IG1fcmJvKDApCiAgICAgICAgICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVlKQpAQCAtNTMyLDYg
KzQ1MCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKCkKICAgICB9CiAg
ICAgZ2xDbGVhclN0ZW5jaWwoMCk7CiAgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
OworICAgIGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCk7CiAgICAg
YmluZFN1cmZhY2UoMCk7CiAjZW5kaWYKIH0KQEAgLTY0NSw3ICs1NjQsNiBAQCBzdGF0aWMgdm9p
ZCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKIHZv
aWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplLCBib29sIG9w
YXF1ZSkKIHsKICAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChuZXdTaXplLCBvcGFxdWUpOwotICAg
IG1faW1hZ2VVSUQgPSAwOwogICAgIEludFNpemUgbmV3VGV4dHVyZVNpemUgPSBuZXh0UG93ZXJP
ZlR3byhuZXdTaXplKTsKICAgICBib29sIGp1c3RDcmVhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFt
X2lkKSB7CkBAIC02NjQsMjkgKzU4MiwxMSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVzZXQo
Y29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgYm9vbCBvcGFxdWUpCiAgICAgfQogICAgIG1fYWN0dWFs
U2l6ZSA9IG5ld1NpemU7CiAgICAgbV9yZWxhdGl2ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3
U2l6ZS53aWR0aCgpKSAvIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWln
aHQoKSkgLyBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKLSAgICBtX29wYXF1ZSA9IG9wYXF1ZTsK
ICAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1ZTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIEJpdG1hcFRleHR1cmVHTDo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCi17Ci0gICAgbV9idWZmZXIgPSBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRl
KCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLT5i
ZWdpblBhaW50KGRpcnR5UmVjdCwgbV9vcGFxdWUpOwotfQogCi12b2lkIEJpdG1hcFRleHR1cmVH
TDo6ZW5kUGFpbnQoKQotewotICAgIGlmICghbV9idWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2J1ZmZlci0+ZW5kUGFpbnQoKTsKLSAgICB1cGRhdGVDb250ZW50cyhCR1JBRm9ybWF0LCBt
X2RpcnR5UmVjdCwgbV9idWZmZXItPmRhdGEoKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgbV9idWZmZXIuY2xlYXIoKTsKLX0KLQotI2lmZGVm
IFRFWE1BUF9PUEVOR0xfRVNfMgotc3RhdGljIHZvaWQgc3dpenpsZUJHUkFUb1JHQkEodWludDMy
X3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCitzdGF0aWMgdm9pZCBzd2l6emxlUmdiKHVp
bnQzMl90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGludCB3aWR0aCA9IHNp
emUud2lkdGgoKTsKICAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKQEAgLTY5Niw3OSAr
NTk2LDI1IEBAIHN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBkYXRhLCBj
b25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgcFt4XSA9ICgocFt4XSA8PCAxNikgJiAw
eGZmMDAwMCkgfCAoKHBbeF0gPj4gMTYpICYgMHhmZikgfCAocFt4XSAmIDB4ZmYwMGZmMDApOwog
ICAgIH0KIH0KLSNlbmRpZgogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHZvaWQqIGJpdHMp
Ci17Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0jaWZk
ZWYgVEVYTUFQX09QRU5HTF9FU18yCi0gICAgYm9vbCBzaG91bGRTd2l6emxlID0gZmFsc2U7Ci0j
ZW5kaWYKLQotICAgIEdMaW50IGdsRm9ybWF0ID0gR0xfUkdCQTsKLSAgICBzd2l0Y2ggKHBpeGVs
Rm9ybWF0KSB7Ci0gICAgY2FzZSBSR0JBRm9ybWF0OgotICAgICAgICBnbEZvcm1hdCA9IEdMX1JH
QkE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUkdCRm9ybWF0OgotICAgICAgICBnbEZvcm1h
dCA9IEdMX1JHQjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCR1JBRm9ybWF0OgotI2lmZGVm
IFRFWE1BUF9PUEVOR0xfRVNfMgotICAgICAgICBzaG91bGRTd2l6emxlID0gdHJ1ZTsKLSAgICAg
ICAgZ2xGb3JtYXQgPSBHTF9SR0JBOwotI2Vsc2UKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9CR1JB
OwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkdSRm9ybWF0OgotI2lmZGVmIFRF
WE1BUF9PUEVOR0xfRVNfMgotICAgICAgICBzaG91bGRTd2l6emxlID0gdHJ1ZTsKLSAgICAgICAg
Z2xGb3JtYXQgPSBHTF9SR0I7Ci0jZWxzZQotICAgICAgICBnbEZvcm1hdCA9IEdMX0JHUjsKLSNl
bmRpZgotICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18y
Ci0gICAgaWYgKHNob3VsZFN3aXp6bGUpCi0gICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHN0YXRp
Y19jYXN0PHVpbnQzMl90Kj4oYml0cyksIHJlY3Quc2l6ZSgpKTsKLSNlbmRpZgotICAgIEdMX0NN
RChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgcmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBi
aXRzKSkKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZVJhd0NvbnRlbnRzKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IHZvaWQqIGJpdHMpCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6
dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3Jt
YXQpCiB7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOwogICAgIEdMX0NNRChnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQogICAgIEdMdWludCBnbEZvcm1hdCA9IGlz
T3BhcXVlKCkgPyBHTF9SR0IgOiBHTF9SR0JBOwotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBiaXRzKSkKLX0KLQotdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0gICAg
SW1hZ2VVSUQgdWlkID0gaW1hZ2UgPyB1aWRGb3JJbWFnZShpbWFnZSkgOiAwOwotICAgIGlmICgh
aW1hZ2UgfHwgIXVpZCkgewotICAgICAgICBpZiAobV9pbWFnZVVJRCkKLSAgICAgICAgICAgIGRl
c3Ryb3koKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFmcmFtZUltYWdlKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgaWYgKHVpZCA9PSBtX2ltYWdlVUlEKQotICAgICAgICByZXR1cm47
Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIEdMdWludCBuZXdUZXh0dXJlSUQgPSBtX3Rl
eHR1cmVNYXBwZXItPmRhdGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZE9yQ3JlYXRl
KHVpZCwgZm91bmQpOwotICAgIGlmIChuZXdUZXh0dXJlSUQgIT0gbV9pZCkgewotICAgICAgICBt
X2ltYWdlVUlEID0gdWlkOwotICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgIG1faWQgPSBuZXdU
ZXh0dXJlSUQ7Ci0gICAgICAgIHJlc2V0KGltYWdlLT5zaXplKCksIGZhbHNlKTsKLSAgICAgICAg
aWYgKCFmb3VuZCkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYmVnaW5Q
YWludChJbnRSZWN0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSkpKTsKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRlQ29weSk7Ci0gICAgICAgICAg
ICBlbmRQYWludCgpOwotICAgICAgICB9Ci0gICAgfQorI2lmIFBMQVRGT1JNKFFUKQorICAgIFFJ
bWFnZSBxdEltYWdlID0gZnJhbWVJbWFnZS0+dG9JbWFnZSgpOworICAgIGlmIChJbnRTaXplKHF0
SW1hZ2Uuc2l6ZSgpKSAhPSBzb3VyY2VSZWN0LnNpemUoKSkKKyAgICAgICAgcXRJbWFnZSA9IHF0
SW1hZ2UuY29weShzb3VyY2VSZWN0KTsKKyAgICBpZiAoZm9ybWF0ID09IEJHUkFGb3JtYXQgfHwg
Zm9ybWF0ID09IEJHUkZvcm1hdCkKKyAgICAgICAgc3dpenpsZVJnYihyZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4ocXRJbWFnZS5iaXRzKCkpLCBxdEltYWdlLnNpemUoKSk7CisgICAgR0xfQ01E
KGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3Jt
YXQsIEdMX1VOU0lHTkVEX0JZVEUsIHF0SW1hZ2UuY29uc3RCaXRzKCkpKQorI2VuZGlmCiB9CiAK
IHN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXggY3JlYXRlUHJvamVjdGlvbk1hdHJp
eChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGZsaXApCkBAIC04MjAsNyArNjY2LDcgQEAgdm9p
ZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGVzdHJv
eSgpCiB7Ci0gICAgaWYgKG1faWQgJiYgKCFtX2ltYWdlVUlEIHx8ICFtX3RleHR1cmVNYXBwZXIt
PmRhdGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZGVyZWYobV9pbWFnZVVJRCkpKQorICAg
IGlmIChtX2lkKQogICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpCiAK
ICAgICBpZiAobV9mYm8pCkBAIC04NTUsMTEgKzcwMSwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCiAgICAgQml0bWFw
VGV4dHVyZUdMKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFj
ZVBvaW50ZXIpOwogCiAgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIEludFNpemUgdmlld3Bv
cnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKTsKICAgICAgICAg
R0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKSkKLSAgICAgICAgZGF0
YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZpZXdwb3J0U2l6
ZSgpLCB0cnVlKS5tdWx0aXBseSh0cmFuc2Zvcm0oKSk7CisgICAgICAgIGRhdGEoKS5wcm9qZWN0
aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUsIHRydWUpOwog
ICAgICAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNp
bEluZGV4ID4gMSA/IEdMX0VRVUFMIDogR0xfQUxXQVlTLCBkYXRhKCkuc2hhcmVkR0xEYXRhKCku
c3RlbmNpbEluZGV4IC0gMSwgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEp
KQogICAgICAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkp
Ci0gICAgICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZSgpLndpZHRoKCks
IHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwg
MCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCBkZDJlMWE3Li41ZjMyNmRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC00MywxNiArNDMsMTYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9v
bCBmbGlwKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3Vy
ZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5n
KCk7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCk7CiAgICAgdmlydHVhbCB2b2lkIGVu
ZENsaXAoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNy
ZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdDsKICAg
ICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgdm9pZCBiZWdpblBhaW50aW5nKCk7
Ci0gICAgdm9pZCBlbmRQYWludGluZygpOwogICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNPcGVuR0xCYWNrZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdm9pZCBwbGF0Zm9ybVVwZGF0ZUNvbnRlbnRzKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKIAogcHJp
dmF0ZToKICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJuICpt
X2RhdGE7IH0KQEAgLTYyLDE2ICs2Miw2IEBAIHByaXZhdGU6CiB9OwogCiAvLyBBbiBvZmZzY3Jl
ZW4gYnVmZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJlLgotY2xhc3MgQkdSQTMyUHJlbXVs
dGltcGxpZWRCdWZmZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIHZpcnR1YWwgfkJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKCkgeyB9Ci0gICAgdmlydHVh
bCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0
eVJlY3QsIGJvb2wgb3BhcXVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCogZGF0YSgpID0gMDsKLSAgICBzdGF0aWMgUGFzc093blB0cjxC
R1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7Ci19OwotCiBzdGF0aWMgaW5saW5l
IGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtKQogewogICAgIGZvciAoaW50IGkgPSAweDEwMDAw
MDAwOyBpID4gMDsgaSA+Pj0gMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKaW5kZXggOThjYzgyNy4uZjFhN2Y0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVy
ZU1hcHBlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9U
ZXh0dXJlTWFwcGVyUXQuY3BwCkBAIC00Nyw2OSArNDcsMTggQEAgdm9pZCBCaXRtYXBUZXh0dXJl
UXQ6OnJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgaXNPcGFxdWUpCiAgICAgICAgIG1f
cGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIEJpdG1hcFRleHR1cmVRdDo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
Cit2b2lkIEJpdG1hcFRleHR1cmVRdDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQaXhlbEZv
cm1hdCkKIHsKLSAgICBtX3BhaW50ZXIuYmVnaW4oJm1fcGl4bWFwKTsKLSAgICBUZXh0dXJlTWFw
cGVyUXQ6OmluaXRpYWxpemUoJm1fcGFpbnRlcik7Ci0gICAgbV9wYWludGVyLnNldENvbXBvc2l0
aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0NsZWFyKTsKLSAgICBtX3BhaW50ZXIu
ZmlsbFJlY3QoUVJlY3QoZGlydHlSZWN0KSwgUXQ6OnRyYW5zcGFyZW50KTsKLSAgICBtX3BhaW50
ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zl
cik7Ci0gICAgcmV0dXJuICZtX3BhaW50ZXI7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0Ojpl
bmRQYWludCgpCi17Ci0gICAgbV9wYWludGVyLmVuZCgpOwotfQotCi12b2lkIEJpdG1hcFRleHR1
cmVRdDo6dXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIHZvaWQqIGJpdHMpCi17Ci0gICAgbV9wYWludGVyLmJlZ2luKCZtX3BpeG1hcCk7
Ci0gICAgUUltYWdlOjpGb3JtYXQgcXRGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJl
bXVsdGlwbGllZDsKLSAgICBpZiAocGl4ZWxGb3JtYXQgPT0gQkdSRm9ybWF0IHx8IHBpeGVsRm9y
bWF0ID09IFJHQkZvcm1hdCkKLSAgICAgICAgcXRGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0Iz
MjsKLSAgICBRSW1hZ2UgaW1hZ2Uoc3RhdGljX2Nhc3Q8dWNoYXIqPihiaXRzKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpLCBxdEZvcm1hdCk7Ci0gICAgaWYgKHBpeGVsRm9ybWF0ID09IEJH
UkZvcm1hdCB8fCBwaXhlbEZvcm1hdCA9PSBCR1JBRm9ybWF0KQotICAgICAgICBpbWFnZSA9IGlt
YWdlLnJnYlN3YXBwZWQoKTsKLSAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICBtX3BhaW50ZXIuZHJhd0ltYWdlKHJl
Y3QsIGltYWdlKTsKLSAgICBtX3BhaW50ZXIuZW5kKCk7Ci19Ci0KLWJvb2wgQml0bWFwVGV4dHVy
ZVF0OjpzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gbV9waXhtYXAuc2F2
ZShwYXRoLCAiUE5HIik7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpzZXRDb250ZW50c1Rv
SW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb25zdCBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKLSAgICBpZiAoIXBpeG1hcCkKLSAgICAgICAgcmV0dXJuOwotICAgIEJpdG1hcFRl
eHR1cmU6OnJlc2V0KHBpeG1hcC0+c2l6ZSgpLCAhcGl4bWFwLT5oYXNBbHBoYUNoYW5uZWwoKSk7
Ci0gICAgbV9waXhtYXAgPSAqcGl4bWFwOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6cGFj
aygpCi17Ci0gICAgaWYgKG1fcGl4bWFwLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2ltYWdlID0gbV9waXhtYXAudG9JbWFnZSgpOwotICAgIG1fcGl4bWFwID0gUVBpeG1hcCgp
OwotICAgIG1faXNQYWNrZWQgPSB0cnVlOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6dW5w
YWNrKCkKLXsKLSAgICBtX2lzUGFja2VkID0gZmFsc2U7Ci0gICAgaWYgKG1faW1hZ2UuaXNOdWxs
KCkpCisgICAgUVBpeG1hcCogbmV3UGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CisgICAgaWYgKHRhcmdldFJlY3QgPT0gSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBjb250ZW50U2l6ZSgpKSkgeworICAgICAgICBtX3BpeG1hcCA9ICpuZXdQaXhtYXA7CiAgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX3BpeG1hcCA9IFFQaXhtYXA6OmZyb21JbWFnZSht
X2ltYWdlKTsKLSAgICBtX2ltYWdlID0gUUltYWdlKCk7CisgICAgUVBhaW50ZXIgcGFpbnRlcigm
bV9waXhtYXApOworICAgIFFJbWFnZSBxdEltYWdlID0gbmV3UGl4bWFwLT50b0ltYWdlKCk7Cisg
ICAgcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9T
b3VyY2UpOworICAgIHBhaW50ZXIuZHJhd0ltYWdlKHRhcmdldFJlY3QsIHF0SW1hZ2UsIHNvdXJj
ZVJlY3QpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTEyNywx
NyArNzYsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZW5kQ2xpcCgpCiAgICAgY3VycmVudFBh
aW50ZXIoKS0+cmVzdG9yZSgpOwogfQogCi1JbnRTaXplIFRleHR1cmVNYXBwZXJRdDo6dmlld3Bv
cnRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX3BhaW50ZXItPmRldmljZSgp
LT53aWR0aCgpLCBtX3BhaW50ZXItPmRldmljZSgpLT5oZWlnaHQoKSk7Ci19Ci0KLQotVGV4dHVy
ZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoKQotICAgIDogbV9jdXJyZW50U3VyZmFjZSgwKQot
ewotfQotCiB2b2lkIFRleHR1cmVNYXBwZXJRdDo6c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCkKIHsKICAgICBtX2NvbnRleHQgPSBjb250ZXh0OwpAQCAtMjExLDUz
ICsxNDksNCBAQCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJRdDo6Y3Jl
YXRlVGV4dHVyZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJlUXQoKSk7
CiB9CiAKLUJpdG1hcFRleHR1cmVRdDo6Qml0bWFwVGV4dHVyZVF0KCkKLSAgICA6IG1faXNQYWNr
ZWQoZmFsc2UpCi17Ci0KLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJlZ2luUGFpbnRpbmco
KQotewotICAgIG1fcGFpbnRlci0+c2F2ZSgpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6
ZW5kUGFpbnRpbmcoKQotewotICAgIG1fcGFpbnRlci0+cmVzdG9yZSgpOwotfQotCi0jaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQotY2xhc3MgQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCA6
IHB1YmxpYyBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiByZWN0
LCBib29sIG9wYXF1ZSkKLSAgICB7Ci0gICAgICAgIC8vIG1faW1hZ2UgaXMgb25seSB1c2luZyBk
dXJpbmcgcGFpbnQsIGl0J3Mgc2FmZSB0byBvdmVycmlkZSBpdC4KLSAgICAgICAgbV9pbWFnZSA9
IFFJbWFnZShyZWN0LnNpemUoKS53aWR0aCgpLCByZWN0LnNpemUoKS5oZWlnaHQoKSwgb3BhcXVl
ID8gUUltYWdlOjpGb3JtYXRfUkdCMzIgOiBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlw
bGllZCk7Ci0gICAgICAgIGlmICghb3BhcXVlKQotICAgICAgICAgICAgbV9pbWFnZS5maWxsKDAp
OwotICAgICAgICBtX3BhaW50ZXIuYmVnaW4oJm1faW1hZ2UpOwotICAgICAgICBUZXh0dXJlTWFw
cGVyUXQ6OmluaXRpYWxpemUoJm1fcGFpbnRlcik7Ci0gICAgICAgIG1fcGFpbnRlci50cmFuc2xh
dGUoLXJlY3QueCgpLCAtcmVjdC55KCkpOwotICAgICAgICByZXR1cm4gJm1fcGFpbnRlcjsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKSB7IG1fcGFpbnRlci5lbmQoKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1faW1hZ2UuYml0cygpOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgUVBhaW50ZXIgbV9wYWludGVyOwotICAgIFFJbWFnZSBtX2ltYWdlOwotfTsK
LQotUGFzc093blB0cjxCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gQkdSQTMyUHJlbXVsdGlt
cGxpZWRCdWZmZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCR1JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlclF0KCkpOwotfQotCi11aW50NjRfdCB1aWRGb3JJbWFnZShJbWFn
ZSogaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpLT5zZXJpYWxOdW1iZXIoKTsKLX0KLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmgKaW5kZXggZGU1NzE5
Ny4uYjZiZDJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvVGV4dHVyZU1hcHBlclF0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvVGV4dHVyZU1hcHBlclF0LmgKQEAgLTI3LDIxICsyNywxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBCaXRtYXBUZXh0dXJlUXQgOiBwdWJsaWMgQml0bWFwVGV4dHVyZSB7CiAg
ICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJRdDsKIHB1YmxpYzoKLSAgICBCaXRtYXBUZXh0
dXJlUXQoKTsKKyAgICBCaXRtYXBUZXh0dXJlUXQoKSB7IH0KICAgICB+Qml0bWFwVGV4dHVyZVF0
KCkgeyBkZXN0cm95KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53aWR0aCgp
LCBtX3BpeG1hcC5oZWlnaHQoKSk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50
U2l6ZSYsIGJvb2wgb3BhcXVlKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lk
IGVuZFBhaW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSop
OwotICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9waXhtYXAuaXNOdWxsKCkgfHwgIW1f
aW1hZ2UuaXNOdWxsKCk7IH0KICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7IHJldHVy
biBJbnRSZWN0KDAsIDAsIGNvbnRlbnRTaXplKCkud2lkdGgoKSwgY29udGVudFNpemUoKS5oZWln
aHQoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFjaygpOwotICAgIHZpcnR1YWwgdm9pZCB1bnBh
Y2soKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQYWNrZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFj
a2VkOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25z
dCBJbnRSZWN0Jiwgdm9pZCogYml0cyk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRz
KEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7CiAK
ICAgICBRUGFpbnRlciogcGFpbnRlcigpIHsgcmV0dXJuICZtX3BhaW50ZXI7IH0KIApAQCAtNDks
MTIgKzQyLDE0IEBAIHByaXZhdGU6CiAgICAgUVBhaW50ZXIgbV9wYWludGVyOwogICAgIFFQaXht
YXAgbV9waXhtYXA7CiAgICAgUUltYWdlIG1faW1hZ2U7Ci0gICAgYm9vbCBtX2lzUGFja2VkOwog
fTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclF0IDogcHVibGljIFRleHR1cmVNYXBwZXIgewogcHVi
bGljOgotICAgIFRleHR1cmVNYXBwZXJRdCgpOworICAgIFRleHR1cmVNYXBwZXJRdCgpCisgICAg
ICAgIDogbV9jdXJyZW50U3VyZmFjZSgwKQorICAgIHsKKyAgICB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJm
YWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwpAQCAtNjQsOSArNTksNiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpOwogICAgIHZpcnR1
YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOwotICAg
IHZpcnR1YWwgSW50U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5QYWludGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpOwogCiAgICAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZShRUGFpbnRlciogcGFpbnRlcikKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXIuaAppbmRleCBkNjZmZTJmLi4zZTIxYTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTQ3LDQ2ICs0
NywzMCBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyOwogY2xhc3MgQml0bWFwVGV4dHVyZSAgOiBwdWJs
aWMgUmVmQ291bnRlZDxCaXRtYXBUZXh0dXJlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBQaXhlbEZv
cm1hdCB7IEJHUkFGb3JtYXQsIFJHQkFGb3JtYXQsIEJHUkZvcm1hdCwgUkdCRm9ybWF0IH07Ci0g
ICAgQml0bWFwVGV4dHVyZSgpIDogbV9sb2NrQ291bnQoMCkge30KKyAgICBCaXRtYXBUZXh0dXJl
KCkKKyAgICAgICAgOiBtX2lzT3BhcXVlKHRydWUpCisgICAgeworICAgIH0KKwogICAgIHZpcnR1
YWwgfkJpdG1hcFRleHR1cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIHsgfQog
Ci0gICAgdmlydHVhbCBib29sIGFsbG93T2ZmbGluZVRleHR1cmVVcGxvYWQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgaW50IGJwcCgpIGNvbnN0IHsgcmV0dXJuIDMyOyB9CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQ
aXhlbEZvcm1hdCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOwor
CisgICAgdmlydHVhbCBpbnQgYnBwKCkgY29uc3QgeyByZXR1cm4gMzI7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUgPSBmYWxzZSkKICAg
ICB7CiAgICAgICAgIG1faXNPcGFxdWUgPSBvcGFxdWU7CiAgICAgICAgIG1fY29udGVudFNpemUg
PSBzaXplOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWNrKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHVucGFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1BhY2tlZCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBi
ZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBlbmRQYWludCgpID0gMDsKLQotICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBCaXRt
YXBUZXh0dXJlIG1pZ2h0IG1vZGlmeSB0aGUgYml0cyBkaXJlY3RseSAoc3dpenpsZSkuCi0gICAg
Ly8gVGh1cywgdGhpcyBtZXRob2QgaXMgb25seSByZWNvbW1lbmRlZCBmb3IgYnVmZmVyIHVwZGF0
ZSwgc3VjaCBhcyB1c2VkIGJ5IFdlYktpdDIuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRl
bnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwgdm9pZCogYml0cykgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVSYXdDb250ZW50cyhjb25zdCBJbnRSZWN0JiwgY29uc3Qgdm9pZCog
Yml0cykgeyB9Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWlu
dE1lZGlhKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiZWdpblBhaW50KEludFJlY3QoMCwgMCwg
c2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzYXZl
KGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBpbmxpbmUgdm9pZCBsb2Nr
KCkgeyArK21fbG9ja0NvdW50OyB9Ci0gICAgaW5saW5lIHZvaWQgdW5sb2NrKCkgeyAtLW1fbG9j
a0NvdW50OyB9Ci0gICAgaW5saW5lIGJvb2wgaXNMb2NrZWQoKSB7IHJldHVybiBtX2xvY2tDb3Vu
dDsgfQogICAgIGlubGluZSBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50U2l6ZTsgfQogICAgIGlubGluZSBpbnQgbnVtYmVyT2ZCeXRlcygpIGNvbnN0IHsgcmV0
dXJuIHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpICogYnBwKCkgPj4gMzsgfQorICAg
IGlubGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9pc09wYXF1ZTsgfQogCiBw
cm90ZWN0ZWQ6Ci0gICAgaW50IG1fbG9ja0NvdW50OwogICAgIEludFNpemUgbV9jb250ZW50U2l6
ZTsKICAgICBib29sIG1faXNPcGFxdWU7CiB9OwpAQCAtMTA4LDIyICs5MiwxNSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29u
c3QgRmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCkgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAgIElu
dFNpemUgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFNpemU7IH0KLSAg
ICB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJiBzKSB7IG1fdmlld3BvcnRTaXpl
ID0gczsgfQogCiAgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9s
YXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7
IH0KICAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2Rl
KSB7IG1fdGV4dERyYXdpbmdNb2RlID0gbW9kZTsgfQogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxp
dHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJwb2xh
dGlvblF1YWxpdHk7IH0KICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUo
KSBjb25zdCB7IHJldHVybiBtX3RleHREcmF3aW5nTW9kZTsgfQotICAgIHZpcnR1YWwgYm9vbCBh
bGxvd1BhcnRpYWxVcGRhdGVzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNPcGVuR0xCYWNrZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9p
ZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgeyBtX3Ry
YW5zZm9ybSA9IG1hdHJpeDsgfQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Q
YWludGluZygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpIHsgfQogCkBAIC0x
NDAsMTIgKzExNywxMSBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIEludGVycG9sYXRpb25R
dWFsaXR5IG1faW50ZXJwb2xhdGlvblF1YWxpdHk7CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3Mg
bV90ZXh0RHJhd2luZ01vZGU7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07
Ci0gICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBWZWN0b3I8UmVmUHRyPEJpdG1hcFRl
eHR1cmU+ID4gbV90ZXh0dXJlUG9vbDsKIH07CiAKLX07Cit2b2lkIHN3aXp6bGVSZ2IoSW1hZ2Uq
KTsKK30KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCmluZGV4IGNjZjQ5YmMu
LmNiMDI0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApAQCAtMjMsNiArMjMsNyBAQAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJN
YXRoRXh0cmFzLmgiCiAKIG5hbWVzcGFjZSB7CkBAIC0xNTYsMTIgKzE1NywxMCBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsIEdyYXBoaWNzTGF5ZQogICAgIGlmICghdGV4dHVyZU1hcHBlcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgLy8gRklYTUU6IEFkZCBkaXJlY3RseSBjb21wb3NpdGVkIGltYWdlcy4KLSAgICBG
bG9hdFJlY3QgZGlydHlSZWN0ID0gbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRp
cmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3Q7CisgICAgSW50UmVj
dCBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNw
bGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsK
IAogICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxl
cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CiAgICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3du
ZWRUaWxlc1t0aWxlSW5kZXhdOwotICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IGRpcnR5UmVjdDsK
ICAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUpCiAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0
ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0
dXJlPiYgdGV4dHVyZSA9IHRpbGUudGV4dHVyZTsKQEAgLTE2OSwzMSArMTY4LDQ0IEBAIHZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlciwgR3JhcGhpY3NMYXllCiAKICAgICAgICAgaWYgKHRpbGUubmVlZHNSZXNldCB8fCB0ZXh0
dXJlLT5jb250ZW50U2l6ZSgpICE9IHRpbGVTaXplIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpIHsK
ICAgICAgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IGZhbHNlOwotICAgICAgICAgICAgdGV4dHVy
ZS0+cmVzZXQodGlsZVNpemUsIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0
SW1hZ2VDb250ZW50VHlwZSA/IGZhbHNlIDogbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7Ci0gICAg
ICAgICAgICByZWN0ID0gdGlsZS5yZWN0OworICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQodGls
ZVNpemUsIG1fc3RhdGUuY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgZGlydHlSZWN0LnVu
aXRlKGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KSk7CiAgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUGFp
bnQgdGhlIGVudGlyZSBkaXJ0eSByZWN0IGludG8gYW4gaW1hZ2UgYnVmZmVyLiBUaGlzIGVuc3Vy
ZXMgd2Ugb25seSBwYWludCBvbmNlLgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGRpcnR5UmVjdC5zaXplKCkpOworICAgIEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgeworICAgICAg
ICBjb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1cmVNYXBwZXItPmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3
aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworICAgICAgICBs
YXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIGRpcnR5UmVjdCk7Cisg
ICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29u
dGVudFR5cGUpCisgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9jdXJyZW50Q29udGVu
dC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgbV9zdGF0ZS5jb250ZW50c1JlY3Qp
OworICAgIH0KIAotICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dCh0aWxlLnJlY3QpOwotICAgICAgICBjb250ZW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50
UmVjdChyZWN0KSk7Ci0gICAgICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgLy8g
U2hhbGxvdyBjb3B5LgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBpbWFnZUJ1ZmZlci0+Y29w
eUltYWdlKCk7CisKKyAgICAvLyBEaXZpZGUgdGhlIGltYWdlIHRvIHRpbGVzLgorICAgIGZvciAo
c2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsr
dGlsZUluZGV4KSB7CisgICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxl
SW5kZXhdOworICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRp
bGUucmVjdCk7CisgICAgICAgIHRhcmdldFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3Qo
ZGlydHlSZWN0KSk7CisgICAgICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0Owog
Ci0gICAgICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzID0gY29udGVu
dFJlY3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0KC10aWxlLnJlY3QueCgpLCAtdGlsZS5y
ZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMubW92ZShvZmZz
ZXQueCgpLCBvZmZzZXQueSgpKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCh0ZXh0dXJlLT5iZWdpblBhaW50KGVuY2xvc2luZ0ludFJlY3QoY29udGVu
dFJlY3RJblRpbGVDb29yZGluYXRlcykpKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1h
cHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOwotICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
b2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkQ29u
dGVudFJlY3QoY29udGVudFJlY3QpOwotICAgICAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQu
Y29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKLSAgICAgICAgICAgICAgICBj
b250ZXh0LmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xvc2lu
Z0ludFJlY3Qoc2NhbGVkQ29udGVudFJlY3QpKTsKLSAgICAgICAgICAgIHRleHR1cmUtPmVuZFBh
aW50KCk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gTm9ybWFsaXplIHNvdXJjZVJlY3QgdG8gdGhl
IGJ1ZmZlcidzIGNvb3JkaW5hdGVzLgorICAgICAgICBzb3VyY2VSZWN0Lm1vdmUoLWRpcnR5UmVj
dC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKworICAgICAgICAvLyBOb3JtYWxpemUgdGFyZ2V0UmVj
dCB0byB0aGUgdGV4dHVyZSdzIGNvb3JkaW5xYXRlcy4KKyAgICAgICAgdGFyZ2V0UmVjdC5tb3Zl
KC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7CisgICAgICAgIHRpbGUudGV4dHVyZS0+
dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIEJpdG1h
cFRleHR1cmU6OlJHQkFGb3JtYXQpOwogICAgIH0KIAogICAgIG1fY3VycmVudENvbnRlbnQubmVl
ZHNEaXNwbGF5ID0gZmFsc2U7CkBAIC00ODEsNyArNDkzLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCkKICAgICB9CiB9CiAK
LXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlk
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCB2b2lkKiBiaXRzKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxl
QmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIEltYWdlKiBpbWFnZSwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQg
Zm9ybWF0KQogewogICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwogCkBAIC00OTgsNyArNTEw
LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihp
bnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVIKICAgICBpZiAoIXRpbGUuYmFja0J1ZmZlci50
ZXh0dXJlKQogICAgICAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBl
ci0+Y3JlYXRlVGV4dHVyZSgpOwogICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT5yZXNldChz
b3VyY2VSZWN0LnNpemUoKSwgZmFsc2UpOwotICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51
cGRhdGVSYXdDb250ZW50cyhzb3VyY2VSZWN0LCBiaXRzKTsKKyAgICB0aWxlLmJhY2tCdWZmZXIu
dGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UsIHNvdXJjZVJlY3QsIEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgaW1hZ2UtPnNpemUoKSksIGZvcm1hdCk7CiAgICAgdGlsZS5pc0JhY2tCdWZm
ZXJVcGRhdGVkID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAppbmRleCBmZTRiMTRj
Li5jZDc1NTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApAQCAtMTQ4LDcgKzE0OCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFRpbGVPd25lcnNoaXAoVGlsZU93bmVyc2hpcCBvd25lcnNoaXAp
IHsgbV9zdGF0ZS50aWxlT3duZXJzaGlwID0gb3duZXJzaGlwOyB9CiAgICAgaW50IGNyZWF0ZUNv
bnRlbnRzVGlsZShmbG9hdCBzY2FsZSk7CiAgICAgdm9pZCByZW1vdmVDb250ZW50c1RpbGUoaW50
IGlkKTsKLSAgICB2b2lkIHNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCB2b2lk
KiBiaXRzKTsKKyAgICB2b2lkIHNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBJbWFnZSos
IEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKICAgICB2b2lkIHNldFRpbGVCYWNrQnVmZmVy
VGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJlKik7
CiAgICAgdm9pZCBjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKTsKICAgICB2
b2lkIHB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
LmNwcAppbmRleCBjOGU4ZGFkLi43NDE4ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5j
cHAKQEAgLTMzNiw3ICszMzYsNiBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBv
c2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbgogICAgIHRleHR1
cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICB0ZXh0dXJlTWFwcGVy
LT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSk7CiAgICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRl
eHQtPnRleHREcmF3aW5nTW9kZSgpKTsKLSAgICB0ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNp
emUoZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAgICBRUGFpbnRlciogcGFp
bnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IFFUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gcGFpbnRlci0+d29ybGRUcmFuc2Zvcm0oKTsKICAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtYXRyaXgoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGU0ODJhZTAuLjY3YzhlYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDEtMjYgIE5vJ2FtIFJvc2Vu
dGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1hcF0g
UmVmYWN0b3IgVGV4dHVyZU1hcHBlciBiYWNraW5nIHN0b3Jlcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MTQ4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCByZWR1bmRhbnQgY2FsbHMgdG8g
dW51c2VkIFRleHR1cmVNYXBwZXIgZnVuY3Rpb24gc2V0Vmlld3BvcnRTaXplLgorCisgICAgICAg
ICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJD
b21wb3NpdGVkTGF5ZXJzKToKKwogMjAxMi0wMS0yNSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbUXRdIHB1YmxpYy5wcmkgaXMgbWlzc2luZyBkZXBlbmRlbmN5
IHRvIHF1aWNrIG1vZHVsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyYmI3MzA1Li4yOGYwN2U4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMDEtMjYgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0u
cm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4
dHVyZU1hcHBlciBiYWNraW5nIHN0b3Jlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc3MTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCByZWR1bmRhbnQgY2FsbHMgdG8gVGV4dHVyZU1hcHBl
ciwgYW5kIHVzZSB0aGUgbmV3IHVwbG9hZCBBUEkgdGhhdCB1c2VzIGltYWdlcworICAgICAgICBp
bnN0ZWFkIG9mIGEgc2VwYXJhdGlvbiBiZXR3ZWVuIHJhdyBjb250ZW50IGFuZCBsYXllciBjb250
ZW50IGxpa2UgYmVmb3JlLgorCisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQ
cm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRv
Q3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6
dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
SW1hZ2UpOgorCiAyMDEyLTAxLTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXSzJdIFByaW1hcnkgY2xpcGJvYXJkIHNob3VsZCBi
ZSB1cGRhdGVkIHdpdGggdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluIFgxMSBwbGF0Zm9ybXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQu
Y3BwCmluZGV4IDQ1ZGM4Y2UuLjQ2MzY4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMTgyLDkgKzE4Miw2IEBA
IHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JU
LCB2aWV3cG9ydCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6
ZSh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pKTsKICAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVy
KG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50
aW5nKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKQEAgLTM2MiwyOSAr
MzU5LDI2IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVjCiAgICAgICAgIHJldHVybjsKIAogICAg
IG5vZGUtPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAgICBRSW1h
Z2UgaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpOwotICAgIG5vZGUtPnNldENvbnRlbnRz
VGlsZUJhY2tCdWZmZXIobm9kZVRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgaW1hZ2Uu
Y29uc3RCaXRzKCkpOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZUlt
YWdlKCk7CisgICAgbm9kZS0+c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihub2RlVGlsZUlELCBz
b3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBpbWFnZS5nZXQoKSwgQml0bWFwVGV4dHVyZTo6UkdCQUZv
cm1hdCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZShpbnQ2NF90
IGltYWdlSUQsIFNoYXJlYWJsZUJpdG1hcCogYml0bWFwKQogewogICAgIFRpbGVkSW1hZ2UgdGls
ZWRJbWFnZTsKICAgICBzdGF0aWMgY29uc3QgaW50IFRpbGVEaW1lbnNpb24gPSAxMDI0OwotICAg
IFFJbWFnZSBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0gICAgYm9vbCBpbWFnZUhh
c0FscGhhID0gaW1hZ2UuaGFzQWxwaGFDaGFubmVsKCk7Ci0gICAgSW50UmVjdCBpbWFnZVJlY3Qo
MCwgMCwgaW1hZ2Uud2lkdGgoKSwgaW1hZ2UuaGVpZ2h0KCkpOwotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaW1hZ2UuaGVpZ2h0KCk7IHkgKz0gVGlsZURpbWVuc2lvbikgewotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IGltYWdlLndpZHRoKCk7IHggKz0gVGlsZURpbWVuc2lvbikgeworICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7CisgICAgYm9vbCBp
bWFnZUhhc0FscGhhID0gaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CisgICAgSW50UmVj
dCBpbWFnZVJlY3QoMCwgMCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CisgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZS0+aGVpZ2h0KCk7IHkgKz0gVGlsZURpbWVuc2lvbikg
eworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlLT53aWR0aCgpOyB4ICs9IFRpbGVE
aW1lbnNpb24pIHsKICAgICAgICAgICAgIFFJbWFnZSBzdWJJbWFnZTsKICAgICAgICAgICAgIElu
dFJlY3QgcmVjdCh4LCB5LCBUaWxlRGltZW5zaW9uLCBUaWxlRGltZW5zaW9uKTsKICAgICAgICAg
ICAgIHJlY3QuaW50ZXJzZWN0KGltYWdlUmVjdCk7Ci0gICAgICAgICAgICBpZiAoUVNpemUocmVj
dC5zaXplKCkpID09IGltYWdlLnNpemUoKSkKLSAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGlt
YWdlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2Uu
Y29weShyZWN0KTsKICAgICAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0g
bV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgICAgICAgICB0ZXh0dXJlLT5y
ZXNldChyZWN0LnNpemUoKSwgIWltYWdlSGFzQWxwaGEpOwotICAgICAgICAgICAgdGV4dHVyZS0+
dXBkYXRlUmF3Q29udGVudHMoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSks
IHN1YkltYWdlLmNvbnN0Qml0cygpKTsKKyAgICAgICAgICAgIEludFJlY3Qgbm9ybWFsUmVjdChJ
bnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSk7CisgICAgICAgICAgICB0ZXh0dXJlLT51cGRh
dGVDb250ZW50cyhpbWFnZS5nZXQoKSwgbm9ybWFsUmVjdCwgcmVjdCwgQml0bWFwVGV4dHVyZTo6
UkdCQUZvcm1hdCk7CiAgICAgICAgICAgICB0aWxlZEltYWdlLmFkZChyZWN0LmxvY2F0aW9uKCks
IHRleHR1cmUpOwogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124325</attachid>
            <date>2012-01-27 08:44:26 -0800</date>
            <delta_ts>2012-01-29 22:39:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>37329</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNzNjODljLi5kODY3Njk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTUg
QEAKIDIwMTItMDEtMjcgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KIAorICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBiYWNraW5n
IHN0b3Jlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc3MTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UmVtb3ZlIHJlZHVuZGFudCB1cGxvYWQgY29kZSBmcm9tIFRleHR1cmVNYXBwZXIuIEluc3RlYWQs
IG9ubHkgdXBsb2FkIHZpYSBXZWJDb3JlOjpJbWFnZSwKKyAgICAgICAgdXNpbmcgV2ViQ29yZTo6
SW1hZ2VCdWZmZXIgd2hlbiBoYXZpbmcgdG8gcGFpbnQgYSBsYXllci4KKworICAgICAgICBJbiBU
ZXh0dXJlTWFwcGVyTm9kZSAoV2ViS2l0MSBvbmx5KSwgdGhpcyBhbGxvd3MgdXMgdG8gcGFpbnQg
aW50byBhIHNpbmdsZSBidWZmZXIsIHRoZQorICAgICAgICBzaXplIG9mIHRoZSBkaXJ0eSByZWN0
LCBhbmQgdGhlbiB1cGxvYWQgcGFydHMgb2YgaXQgdG8gdGV4dHVyZXMsIGluc3RlYWQgb2YgaGF2
aW5nIHRvCisgICAgICAgIHJlbmRlciBzZXBhcmF0ZWx5IGludG8gZWFjaCB0aWxlIGxpa2Ugd2Ug
ZGlkIGJlZm9yZS4gV2ViS2l0MiBjb2RlIHdvcmtzIGVzc2VudGlhbGx5IHRoZQorICAgICAgICBz
YW1lIGFzIGJlZm9yZSwganVzdCB3aXRoIGRpZmZlcmVudCBBUEkgY2FsbHMuCisKKyAgICAgICAg
Tm8gbmV3IGZ1bmN0aW9uYWxpdHksIHRlc3RzIGluIExheW91dFRlc3RzL2NvbXBvc2l0aW5nIHRl
c3QgdGhpcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuY3BwOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChCaXRt
YXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBU
ZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6c3dpenpsZVJnYik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
R0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvVGV4dHVyZU1hcHBlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVR
dDo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5oOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZVF0OjpCaXRtYXBU
ZXh0dXJlUXQpOgorICAgICAgICAoQml0bWFwVGV4dHVyZVF0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJRdDo6VGV4dHVyZU1hcHBlclF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZTo6Qml0bWFwVGV4dHVyZSk6CisgICAgICAgIChCaXRtYXBUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OmJwcCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlOjppc09wYXF1ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVy
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVu
dHNUaWxlQmFja0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyTm9kZSk6CisKKzIwMTIt
MDEtMjYgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwogICAg
ICAgICBbUXRdW1dLMl0gQ2hpbGQgbGF5ZXJzIGFwcGVhciBpbiB3cm9uZyBwb3NpdGlvbiB3aGVu
IHNjcm9sbGluZwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzcwNjMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCBkZTA0MWJmLi5kOTliNzM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjYzLDU3ICsyNjMsNiBAQCBzdHJ1Y3QgVGV4dHVy
ZU1hcHBlckdMRGF0YSB7CiAKICAgICB9OwogCi0gICAgc3RydWN0IERpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlUmVwb3NpdG9yeSB7Ci0gICAgICAgIHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgICAgICBH
THVpbnQgdGV4dHVyZTsKLSAgICAgICAgICAgIGludCByZWZDb3VudDsKLSAgICAgICAgfTsKLSAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPEltYWdlVUlELCBFbnRyeT4gSW1hZ2VUZXh0dXJlTWFwOwot
ICAgICAgICBJbWFnZVRleHR1cmVNYXAgaW1hZ2VUb1RleHR1cmU7Ci0KLSAgICAgICAgR0x1aW50
IGZpbmRPckNyZWF0ZShJbWFnZVVJRCBpbWFnZSwgYm9vbCYgZm91bmQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEltYWdlVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5m
aW5kKGltYWdlKTsKLSAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
aXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25k
LnJlZkNvdW50Kys7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIHJldHVybiBpdC0+c2Vjb25kLnRleHR1cmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBFbnRyeSBlbnRyeTsKLSAgICAgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRy
eS50ZXh0dXJlKSk7Ci0gICAgICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7Ci0gICAgICAgICAg
ICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKLSAgICAgICAgICAgIHJldHVybiBl
bnRyeS50ZXh0dXJlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBkZXJlZihJbWFnZVVJRCBp
bWFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgSGFzaE1hcDxJbWFnZVVJRCwgRW50cnk+Ojpp
dGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAgICAgICAgICAgaWYg
KGl0ICE9IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5z
ZWNvbmQucmVmQ291bnQgPCAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJl
LnJlbW92ZShpdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIERpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIH5EaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9z
aXRvcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEltYWdlVGV4dHVyZU1hcDo6aXRl
cmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdpbigpOyBpdCAhPSBpbWFnZVRvVGV4dHVyZS5l
bmQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlID0gaXQtPnNlY29u
ZC50ZXh0dXJlOwotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKQotICAgICAgICAgICAgICAg
ICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSkpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgIH0KLSAgICB9IGRpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKLQogICAgIFNo
YXJlZEdMRGF0YSYgc2hhcmVkR0xEYXRhKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAq
KG1fc2hhcmVkR0xEYXRhLmdldCgpKTsKQEAgLTMyNyw2ICsyNzYsNyBAQCBzdHJ1Y3QgVGV4dHVy
ZU1hcHBlckdMRGF0YSB7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJp
eDsKICAgICBpbnQgY3VycmVudFByb2dyYW07CiAgICAgaW50IHByZXZpb3VzUHJvZ3JhbTsKKyAg
ICBHTGludCB2aWV3cG9ydFs0XTsKICAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdM
RGF0YTsKIH07CiAKQEAgLTMzNyw1NiArMjg3LDI0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXpl
JiwgYm9vbCBvcGFxdWUpOwogICAgIHZvaWQgYmluZCgpOwotICAgIHZpcnR1YWwgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNU
b0ltYWdlKEltYWdlKik7CiAgICAgfkJpdG1hcFRleHR1cmVHTCgpIHsgZGVzdHJveSgpOyB9CiAg
ICAgdmlydHVhbCB1aW50MzJfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBpbmxp
bmUgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAgICAgaW5saW5l
IEZsb2F0U2l6ZSByZWxhdGl2ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0aXZlU2l6ZTsg
fQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBt
X3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KLQotICAgIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4
ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKik7Ci0gICAgdm9pZCB1cGRhdGVSYXdDb250
ZW50cyhjb25zdCBJbnRSZWN0JiwgY29uc3Qgdm9pZCopOwotICAgIHZvaWQgcGFjaygpCi0gICAg
ewotICAgICAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBhIHN0dWIuCi0gICAgICAgIGlmIChpc1Bh
Y2tlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2lzUGFja2VkID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICB2b2lkIHVucGFjaygpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGN1
cnJlbnRseSBhIHN0dWIuCi0gICAgICAgIGlmICghaXNQYWNrZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9pc1BhY2tlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaXNQ
YWNrZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faXNQYWNrZWQ7Ci0gICAgfQor
ICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
UmVjdCYsIFBpeGVsRm9ybWF0KTsKIAogcHJpdmF0ZToKICAgICBHTHVpbnQgbV9pZDsKLSAgICBJ
bWFnZVVJRCBtX2ltYWdlVUlEOwogICAgIEZsb2F0U2l6ZSBtX3JlbGF0aXZlU2l6ZTsKLSAgICBi
b29sIG1fb3BhcXVlOwogICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKLSAgICBPd25QdHI8QkdS
QTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IG1fYnVmZmVyOwogICAgIEludFJlY3QgbV9kaXJ0eVJl
Y3Q7CiAgICAgR0x1aW50IG1fZmJvOwogICAgIEdMdWludCBtX3JibzsKICAgICBJbnRTaXplIG1f
YWN0dWFsU2l6ZTsKICAgICBib29sIG1fc3VyZmFjZU5lZWRzUmVzZXQ7Ci0gICAgYm9vbCBtX2lz
UGFja2VkOwogICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOwogICAgIEJpdG1h
cFRleHR1cmVHTCgpCiAgICAgICAgIDogbV9pZCgwKQotICAgICAgICAsIG1faW1hZ2VVSUQoMCkK
LSAgICAgICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAgICAgLCBtX2ZibygwKQogICAgICAgICAs
IG1fcmJvKDApCiAgICAgICAgICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVlKQpAQCAtNTMyLDYg
KzQ1MCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKCkKICAgICB9CiAg
ICAgZ2xDbGVhclN0ZW5jaWwoMCk7CiAgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
OworICAgIGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCk7CiAgICAg
YmluZFN1cmZhY2UoMCk7CiAjZW5kaWYKIH0KQEAgLTY0NSw3ICs1NjQsNiBAQCBzdGF0aWMgdm9p
ZCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKIHZv
aWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplLCBib29sIG9w
YXF1ZSkKIHsKICAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChuZXdTaXplLCBvcGFxdWUpOwotICAg
IG1faW1hZ2VVSUQgPSAwOwogICAgIEludFNpemUgbmV3VGV4dHVyZVNpemUgPSBuZXh0UG93ZXJP
ZlR3byhuZXdTaXplKTsKICAgICBib29sIGp1c3RDcmVhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFt
X2lkKSB7CkBAIC02NjQsMjkgKzU4MiwxMSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVzZXQo
Y29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgYm9vbCBvcGFxdWUpCiAgICAgfQogICAgIG1fYWN0dWFs
U2l6ZSA9IG5ld1NpemU7CiAgICAgbV9yZWxhdGl2ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3
U2l6ZS53aWR0aCgpKSAvIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWln
aHQoKSkgLyBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKLSAgICBtX29wYXF1ZSA9IG9wYXF1ZTsK
ICAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1ZTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIEJpdG1hcFRleHR1cmVHTDo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCi17Ci0gICAgbV9idWZmZXIgPSBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRl
KCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLT5i
ZWdpblBhaW50KGRpcnR5UmVjdCwgbV9vcGFxdWUpOwotfQogCi12b2lkIEJpdG1hcFRleHR1cmVH
TDo6ZW5kUGFpbnQoKQotewotICAgIGlmICghbV9idWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2J1ZmZlci0+ZW5kUGFpbnQoKTsKLSAgICB1cGRhdGVDb250ZW50cyhCR1JBRm9ybWF0LCBt
X2RpcnR5UmVjdCwgbV9idWZmZXItPmRhdGEoKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgbV9idWZmZXIuY2xlYXIoKTsKLX0KLQotI2lmZGVm
IFRFWE1BUF9PUEVOR0xfRVNfMgotc3RhdGljIHZvaWQgc3dpenpsZUJHUkFUb1JHQkEodWludDMy
X3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCitzdGF0aWMgdm9pZCBzd2l6emxlUkdCKHVp
bnQzMl90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGludCB3aWR0aCA9IHNp
emUud2lkdGgoKTsKICAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKQEAgLTY5Niw3OSAr
NTk2LDI1IEBAIHN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBkYXRhLCBj
b25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgcFt4XSA9ICgocFt4XSA8PCAxNikgJiAw
eGZmMDAwMCkgfCAoKHBbeF0gPj4gMTYpICYgMHhmZikgfCAocFt4XSAmIDB4ZmYwMGZmMDApOwog
ICAgIH0KIH0KLSNlbmRpZgotCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHZvaWQqIGJpdHMp
Ci17Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0jaWZk
ZWYgVEVYTUFQX09QRU5HTF9FU18yCi0gICAgYm9vbCBzaG91bGRTd2l6emxlID0gZmFsc2U7Ci0j
ZW5kaWYKLQotICAgIEdMaW50IGdsRm9ybWF0ID0gR0xfUkdCQTsKLSAgICBzd2l0Y2ggKHBpeGVs
Rm9ybWF0KSB7Ci0gICAgY2FzZSBSR0JBRm9ybWF0OgotICAgICAgICBnbEZvcm1hdCA9IEdMX1JH
QkE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUkdCRm9ybWF0OgotICAgICAgICBnbEZvcm1h
dCA9IEdMX1JHQjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCR1JBRm9ybWF0OgotI2lmZGVm
IFRFWE1BUF9PUEVOR0xfRVNfMgotICAgICAgICBzaG91bGRTd2l6emxlID0gdHJ1ZTsKLSAgICAg
ICAgZ2xGb3JtYXQgPSBHTF9SR0JBOwotI2Vsc2UKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9CR1JB
OwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkdSRm9ybWF0OgotI2lmZGVmIFRF
WE1BUF9PUEVOR0xfRVNfMgotICAgICAgICBzaG91bGRTd2l6emxlID0gdHJ1ZTsKLSAgICAgICAg
Z2xGb3JtYXQgPSBHTF9SR0I7Ci0jZWxzZQotICAgICAgICBnbEZvcm1hdCA9IEdMX0JHUjsKLSNl
bmRpZgotICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18y
Ci0gICAgaWYgKHNob3VsZFN3aXp6bGUpCi0gICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHN0YXRp
Y19jYXN0PHVpbnQzMl90Kj4oYml0cyksIHJlY3Quc2l6ZSgpKTsKLSNlbmRpZgotICAgIEdMX0NN
RChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgcmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBi
aXRzKSkKLX0KIAotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZVJhd0NvbnRlbnRzKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IHZvaWQqIGJpdHMpCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6
dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3Jt
YXQpCiB7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOwogICAgIEdMX0NNRChnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQotICAgIEdMdWludCBnbEZvcm1hdCA9IGlz
T3BhcXVlKCkgPyBHTF9SR0IgOiBHTF9SR0JBOwotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBiaXRzKSkKLX0KLQotdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0gICAg
SW1hZ2VVSUQgdWlkID0gaW1hZ2UgPyB1aWRGb3JJbWFnZShpbWFnZSkgOiAwOwotICAgIGlmICgh
aW1hZ2UgfHwgIXVpZCkgewotICAgICAgICBpZiAobV9pbWFnZVVJRCkKLSAgICAgICAgICAgIGRl
c3Ryb3koKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFmcmFtZUltYWdlKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgaWYgKHVpZCA9PSBtX2ltYWdlVUlEKQotICAgICAgICByZXR1cm47
Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIEdMdWludCBuZXdUZXh0dXJlSUQgPSBtX3Rl
eHR1cmVNYXBwZXItPmRhdGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZE9yQ3JlYXRl
KHVpZCwgZm91bmQpOwotICAgIGlmIChuZXdUZXh0dXJlSUQgIT0gbV9pZCkgewotICAgICAgICBt
X2ltYWdlVUlEID0gdWlkOwotICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgIG1faWQgPSBuZXdU
ZXh0dXJlSUQ7Ci0gICAgICAgIHJlc2V0KGltYWdlLT5zaXplKCksIGZhbHNlKTsKLSAgICAgICAg
aWYgKCFmb3VuZCkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYmVnaW5Q
YWludChJbnRSZWN0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSkpKTsKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRlQ29weSk7Ci0gICAgICAgICAg
ICBlbmRQYWludCgpOwotICAgICAgICB9Ci0gICAgfQorI2lmIFBMQVRGT1JNKFFUKQorICAgIEdM
dWludCBnbEZvcm1hdCA9IGlzT3BhcXVlKCkgPyBHTF9SR0IgOiBHTF9SR0JBOworICAgIFFJbWFn
ZSBxdEltYWdlID0gZnJhbWVJbWFnZS0+dG9JbWFnZSgpOworICAgIGlmIChJbnRTaXplKHF0SW1h
Z2Uuc2l6ZSgpKSAhPSBzb3VyY2VSZWN0LnNpemUoKSkKKyAgICAgICAgcXRJbWFnZSA9IHF0SW1h
Z2UuY29weShzb3VyY2VSZWN0KTsKKyAgICBpZiAoZm9ybWF0ID09IEJHUkFGb3JtYXQgfHwgZm9y
bWF0ID09IEJHUkZvcm1hdCkKKyAgICAgICAgc3dpenpsZVJHQihyZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4ocXRJbWFnZS5iaXRzKCkpLCBxdEltYWdlLnNpemUoKSk7CisgICAgR0xfQ01EKGds
VGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVj
dC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIHF0SW1hZ2UuY29uc3RCaXRzKCkpKQorI2VuZGlmCiB9CiAKIHN0
YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXggY3JlYXRlUHJvamVjdGlvbk1hdHJpeChj
b25zdCBJbnRTaXplJiBzaXplLCBib29sIGZsaXApCkBAIC04MjAsNyArNjY2LDcgQEAgdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OmJpbmQoKQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSgp
CiB7Ci0gICAgaWYgKG1faWQgJiYgKCFtX2ltYWdlVUlEIHx8ICFtX3RleHR1cmVNYXBwZXItPmRh
dGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZGVyZWYobV9pbWFnZVVJRCkpKQorICAgIGlm
IChtX2lkKQogICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpCiAKICAg
ICBpZiAobV9mYm8pCkBAIC04NTUsMTEgKzcwMSwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCiAgICAgQml0bWFwVGV4
dHVyZUdMKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFjZVBv
aW50ZXIpOwogCiAgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIEludFNpemUgdmlld3BvcnRT
aXplKGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKTsKICAgICAgICAgR0xf
Q01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKSkKLSAgICAgICAgZGF0YSgp
LnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZpZXdwb3J0U2l6ZSgp
LCB0cnVlKS5tdWx0aXBseSh0cmFuc2Zvcm0oKSk7CisgICAgICAgIGRhdGEoKS5wcm9qZWN0aW9u
TWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUsIHRydWUpOwogICAg
ICAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbElu
ZGV4ID4gMSA/IEdMX0VRVUFMIDogR0xfQUxXQVlTLCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3Rl
bmNpbEluZGV4IC0gMSwgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEpKQog
ICAgICAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpCi0g
ICAgICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZSgpLndpZHRoKCksIHZp
ZXdwb3J0U2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwg
dmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCBkZDJlMWE3Li41ZjMyNmRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5oCkBAIC00MywxNiArNDMsMTYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9vbCBm
bGlwKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFj
ZSk7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCk7
CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCk7CiAgICAgdmlydHVhbCB2b2lkIGVuZENs
aXAoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0
ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdDsKICAgICBz
dGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgdm9pZCBiZWdpblBhaW50aW5nKCk7Ci0g
ICAgdm9pZCBlbmRQYWludGluZygpOwogICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNPcGVuR0xCYWNrZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAg
dm9pZCBwbGF0Zm9ybVVwZGF0ZUNvbnRlbnRzKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKIAogcHJpdmF0
ZToKICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJuICptX2Rh
dGE7IH0KQEAgLTYyLDE2ICs2Miw2IEBAIHByaXZhdGU6CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4g
YnVmZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJlLgotY2xhc3MgQkdSQTMyUHJlbXVsdGlt
cGxpZWRCdWZmZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IHZpcnR1YWwgfkJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKCkgeyB9Ci0gICAgdmlydHVhbCBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QsIGJvb2wgb3BhcXVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCogZGF0YSgpID0gMDsKLSAgICBzdGF0aWMgUGFzc093blB0cjxCR1JB
MzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7Ci19OwotCiBzdGF0aWMgaW5saW5lIGlu
dCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtKQogewogICAgIGZvciAoaW50IGkgPSAweDEwMDAwMDAw
OyBpID4gMDsgaSA+Pj0gMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKaW5kZXggNDQ2NDFjZS4uZjg4OTY1MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1h
cHBlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0
dXJlTWFwcGVyUXQuY3BwCkBAIC00Nyw2OSArNDcsMTggQEAgdm9pZCBCaXRtYXBUZXh0dXJlUXQ6
OnJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgaXNPcGFxdWUpCiAgICAgICAgIG1fcGl4
bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
IEJpdG1hcFRleHR1cmVRdDo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit2
b2lkIEJpdG1hcFRleHR1cmVRdDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQaXhlbEZvcm1h
dCkKIHsKLSAgICBtX3BhaW50ZXIuYmVnaW4oJm1fcGl4bWFwKTsKLSAgICBUZXh0dXJlTWFwcGVy
UXQ6OmluaXRpYWxpemUoJm1fcGFpbnRlcik7Ci0gICAgbV9wYWludGVyLnNldENvbXBvc2l0aW9u
TW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0NsZWFyKTsKLSAgICBtX3BhaW50ZXIuZmls
bFJlY3QoUVJlY3QoZGlydHlSZWN0KSwgUXQ6OnRyYW5zcGFyZW50KTsKLSAgICBtX3BhaW50ZXIu
c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zlcik7
Ci0gICAgcmV0dXJuICZtX3BhaW50ZXI7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjplbmRQ
YWludCgpCi17Ci0gICAgbV9wYWludGVyLmVuZCgpOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVR
dDo6dXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIHZvaWQqIGJpdHMpCi17Ci0gICAgbV9wYWludGVyLmJlZ2luKCZtX3BpeG1hcCk7Ci0g
ICAgUUltYWdlOjpGb3JtYXQgcXRGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVs
dGlwbGllZDsKLSAgICBpZiAocGl4ZWxGb3JtYXQgPT0gQkdSRm9ybWF0IHx8IHBpeGVsRm9ybWF0
ID09IFJHQkZvcm1hdCkKLSAgICAgICAgcXRGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0IzMjsK
LSAgICBRSW1hZ2UgaW1hZ2Uoc3RhdGljX2Nhc3Q8dWNoYXIqPihiaXRzKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpLCBxdEZvcm1hdCk7Ci0gICAgaWYgKHBpeGVsRm9ybWF0ID09IEJHUkZv
cm1hdCB8fCBwaXhlbEZvcm1hdCA9PSBCR1JBRm9ybWF0KQotICAgICAgICBpbWFnZSA9IGltYWdl
LnJnYlN3YXBwZWQoKTsKLSAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICBtX3BhaW50ZXIuZHJhd0ltYWdlKHJlY3Qs
IGltYWdlKTsKLSAgICBtX3BhaW50ZXIuZW5kKCk7Ci19Ci0KLWJvb2wgQml0bWFwVGV4dHVyZVF0
OjpzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gbV9waXhtYXAuc2F2ZShw
YXRoLCAiUE5HIik7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqIGltYWdlKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAg
ICBjb25zdCBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKLSAgICBpZiAoIXBpeG1hcCkKLSAgICAgICAgcmV0dXJuOwotICAgIEJpdG1hcFRleHR1
cmU6OnJlc2V0KHBpeG1hcC0+c2l6ZSgpLCAhcGl4bWFwLT5oYXNBbHBoYUNoYW5uZWwoKSk7Ci0g
ICAgbV9waXhtYXAgPSAqcGl4bWFwOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6cGFjaygp
Ci17Ci0gICAgaWYgKG1fcGl4bWFwLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2ltYWdlID0gbV9waXhtYXAudG9JbWFnZSgpOwotICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOwot
ICAgIG1faXNQYWNrZWQgPSB0cnVlOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6dW5wYWNr
KCkKLXsKLSAgICBtX2lzUGFja2VkID0gZmFsc2U7Ci0gICAgaWYgKG1faW1hZ2UuaXNOdWxsKCkp
CisgICAgUVBpeG1hcCogbmV3UGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgaWYgKHRhcmdldFJlY3QgPT0gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBj
b250ZW50U2l6ZSgpKSkgeworICAgICAgICBtX3BpeG1hcCA9ICpuZXdQaXhtYXA7CiAgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBtX3BpeG1hcCA9IFFQaXhtYXA6OmZyb21JbWFnZShtX2lt
YWdlKTsKLSAgICBtX2ltYWdlID0gUUltYWdlKCk7CisgICAgUVBhaW50ZXIgcGFpbnRlcigmbV9w
aXhtYXApOworICAgIFFJbWFnZSBxdEltYWdlID0gbmV3UGl4bWFwLT50b0ltYWdlKCk7CisgICAg
cGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2UpOworICAgIHBhaW50ZXIuZHJhd0ltYWdlKHRhcmdldFJlY3QsIHF0SW1hZ2UsIHNvdXJjZVJl
Y3QpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTEyNywxNyAr
NzYsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZW5kQ2xpcCgpCiAgICAgY3VycmVudFBhaW50
ZXIoKS0+cmVzdG9yZSgpOwogfQogCi1JbnRTaXplIFRleHR1cmVNYXBwZXJRdDo6dmlld3BvcnRT
aXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX3BhaW50ZXItPmRldmljZSgpLT53
aWR0aCgpLCBtX3BhaW50ZXItPmRldmljZSgpLT5oZWlnaHQoKSk7Ci19Ci0KLQotVGV4dHVyZU1h
cHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoKQotICAgIDogbV9jdXJyZW50U3VyZmFjZSgwKQotewot
fQotCiB2b2lkIFRleHR1cmVNYXBwZXJRdDo6c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBtX2NvbnRleHQgPSBjb250ZXh0OwpAQCAtMTk3LDY3ICsx
MzUsOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4
dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JgogICAgIHBhaW50ZXItPnNldE9wYWNpdHko
cHJldk9wYWNpdHkpOwogfQogCi1QYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBw
ZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0jaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQotICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5wYWludEVuZ2luZSgpLT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpPcGVuR0wyKQotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7Ci0jZW5kaWYKLSAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJRdCk7Ci19Ci0KIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gVGV4dHVyZU1hcHBlclF0OjpjcmVhdGVUZXh0dXJlKCkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVRdCgpKTsKIH0KIAotQml0bWFwVGV4dHVyZVF0OjpC
aXRtYXBUZXh0dXJlUXQoKQotICAgIDogbV9pc1BhY2tlZChmYWxzZSkKLXsKLQotfQotCi12b2lk
IFRleHR1cmVNYXBwZXJRdDo6YmVnaW5QYWludGluZygpCi17Ci0gICAgbV9wYWludGVyLT5zYXZl
KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjplbmRQYWludGluZygpCi17Ci0gICAgbV9w
YWludGVyLT5yZXN0b3JlKCk7Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi1jbGFz
cyBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlclF0IDogcHVibGljIEJHUkEzMlByZW11bHRpbXBs
aWVkQnVmZmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgb3BhcXVlKQotICAgIHsKLSAg
ICAgICAgLy8gbV9pbWFnZSBpcyBvbmx5IHVzaW5nIGR1cmluZyBwYWludCwgaXQncyBzYWZlIHRv
IG92ZXJyaWRlIGl0LgotICAgICAgICBtX2ltYWdlID0gUUltYWdlKHJlY3Quc2l6ZSgpLndpZHRo
KCksIHJlY3Quc2l6ZSgpLmhlaWdodCgpLCBvcGFxdWUgPyBRSW1hZ2U6OkZvcm1hdF9SR0IzMiA6
IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAgICAgICAgaWYgKCFvcGFx
dWUpCi0gICAgICAgICAgICBtX2ltYWdlLmZpbGwoMCk7Ci0gICAgICAgIG1fcGFpbnRlci5iZWdp
bigmbV9pbWFnZSk7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9wYWlu
dGVyKTsKLSAgICAgICAgbV9wYWludGVyLnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7
Ci0gICAgICAgIHJldHVybiAmbV9wYWludGVyOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBl
bmRQYWludCgpIHsgbV9wYWludGVyLmVuZCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkKiBkYXRhKCkg
eyByZXR1cm4gbV9pbWFnZS5iaXRzKCk7IH0KLQotcHJpdmF0ZToKLSAgICBRUGFpbnRlciBtX3Bh
aW50ZXI7Ci0gICAgUUltYWdlIG1faW1hZ2U7Ci19OwotCi1QYXNzT3duUHRyPEJHUkEzMlByZW11
bHRpbXBsaWVkQnVmZmVyPiBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCkKLXsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQoKSk7
Ci19Ci0KLXVpbnQ2NF90IHVpZEZvckltYWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICByZXR1cm4g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPnNlcmlhbE51bWJlcigpOwotfQot
I2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvVGV4dHVyZU1hcHBlclF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9UZXh0dXJlTWFwcGVyUXQuaAppbmRleCAwOGZlZTAzLi5kMWE3NTlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaApA
QCAtMjcsMjEgKzI3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJpdG1hcFRleHR1
cmVRdCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKICAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1h
cHBlclF0OwogcHVibGljOgotICAgIEJpdG1hcFRleHR1cmVRdCgpOworICAgIEJpdG1hcFRleHR1
cmVRdCgpIHsgfQogICAgIH5CaXRtYXBUZXh0dXJlUXQoKSB7IGRlc3Ryb3koKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95KCk7CiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7
IHJldHVybiBJbnRTaXplKG1fcGl4bWFwLndpZHRoKCksIG1fcGl4bWFwLmhlaWdodCgpKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiwgYm9vbCBvcGFxdWUpOwotICAg
IHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7Ci0gICAgdmlydHVhbCBib29sIHNhdmUo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuICFtX3BpeG1hcC5pc051bGwoKSB8fCAhbV9pbWFnZS5pc051bGwoKTsgfQogICAgIElu
dFJlY3Qgc291cmNlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgMCwgY29udGVudFNp
emUoKS53aWR0aCgpLCBjb250ZW50U2l6ZSgpLmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBwYWNrKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVucGFjaygpOwotICAgIHZpcnR1YWwgYm9vbCBp
c1BhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYWNrZWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgSW50UmVjdCYsIFBpeGVsRm9ybWF0KTsKIAogICAgIFFQYWludGVyKiBwYWludGVyKCkg
eyByZXR1cm4gJm1fcGFpbnRlcjsgfQogCkBAIC00OSwxMiArNDIsMTQgQEAgcHJpdmF0ZToKICAg
ICBRUGFpbnRlciBtX3BhaW50ZXI7CiAgICAgUVBpeG1hcCBtX3BpeG1hcDsKICAgICBRSW1hZ2Ug
bV9pbWFnZTsKLSAgICBib29sIG1faXNQYWNrZWQ7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVy
UXQgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlclF0
KCk7CisgICAgVGV4dHVyZU1hcHBlclF0KCkKKyAgICAgICAgOiBtX2N1cnJlbnRTdXJmYWNlKDAp
CisgICAgeworICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRt
YXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0
dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFj
ZSk7CkBAIC02NCw5ICs1OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0KCk7CiAgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJv
b3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCBJbnRTaXplIHZpZXdwb3J0
U2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGVuZFBhaW50aW5nKCk7CiAKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFFQ
YWludGVyKiBwYWludGVyKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmluZGV4IGQ2NmZlMmYuLjI0ZDJk
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtNDcsNDYgKzQ3LDMwIEBAIGNsYXNzIFRleHR1cmVNYXBw
ZXI7CiBjbGFzcyBCaXRtYXBUZXh0dXJlICA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1hcFRleHR1
cmU+IHsKIHB1YmxpYzoKICAgICBlbnVtIFBpeGVsRm9ybWF0IHsgQkdSQUZvcm1hdCwgUkdCQUZv
cm1hdCwgQkdSRm9ybWF0LCBSR0JGb3JtYXQgfTsKLSAgICBCaXRtYXBUZXh0dXJlKCkgOiBtX2xv
Y2tDb3VudCgwKSB7fQorICAgIEJpdG1hcFRleHR1cmUoKQorICAgICAgICA6IG1faXNPcGFxdWUo
dHJ1ZSkKKyAgICB7CisgICAgfQorCiAgICAgdmlydHVhbCB+Qml0bWFwVGV4dHVyZSgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dP
ZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBJbnRTaXplIHNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgYnBwKCkgY29uc3Qg
eyByZXR1cm4gMzI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIFBpeGVsRm9ybWF0KSA9IDA7CiAgICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBicHAoKSBj
b25zdCB7IHJldHVybiAzMjsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIG9wYXF1ZSA9IGZhbHNlKQogICAgIHsKICAgICAgICAgbV9pc09wYXF1ZSA9
IG9wYXF1ZTsKICAgICAgICAgbV9jb250ZW50U2l6ZSA9IHNpemU7CiAgICAgfQogCi0gICAgdmly
dHVhbCB2b2lkIHBhY2soKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCkgeyB9Ci0gICAg
dmlydHVhbCBib29sIGlzUGFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZp
cnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwotCi0gICAg
Ly8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIEJpdG1hcFRleHR1cmUgbWlnaHQgbW9kaWZ5IHRo
ZSBiaXRzIGRpcmVjdGx5IChzd2l6emxlKS4KLSAgICAvLyBUaHVzLCB0aGlzIG1ldGhvZCBpcyBv
bmx5IHJlY29tbWVuZGVkIGZvciBidWZmZXIgdXBkYXRlLCBzdWNoIGFzIHVzZWQgYnkgV2ViS2l0
Mi4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQsIGNvbnN0IElu
dFJlY3QmLCB2b2lkKiBiaXRzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJhd0NvbnRl
bnRzKGNvbnN0IEludFJlY3QmLCBjb25zdCB2b2lkKiBiaXRzKSB7IH0KLSAgICB2aXJ0dWFsIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50TWVkaWEoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGJlZ2luUGFpbnQoSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhl
aWdodCgpKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1h
Z2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJikgeyByZXR1cm4g
ZmFsc2U7IH0KLQotICAgIGlubGluZSB2b2lkIGxvY2soKSB7ICsrbV9sb2NrQ291bnQ7IH0KLSAg
ICBpbmxpbmUgdm9pZCB1bmxvY2soKSB7IC0tbV9sb2NrQ291bnQ7IH0KLSAgICBpbmxpbmUgYm9v
bCBpc0xvY2tlZCgpIHsgcmV0dXJuIG1fbG9ja0NvdW50OyB9CiAgICAgaW5saW5lIEludFNpemUg
Y29udGVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CiAgICAgaW5saW5l
IGludCBudW1iZXJPZkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRoKCkgKiBzaXpl
KCkuaGVpZ2h0KCkgKiBicHAoKSA+PiAzOyB9CisgICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBtX2lzT3BhcXVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBpbnQgbV9sb2Nr
Q291bnQ7CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOwogICAgIGJvb2wgbV9pc09wYXF1ZTsK
IH07CkBAIC05Nyw3ICs4MSw2IEBAIGNsYXNzIFRleHR1cmVNYXBwZXIgewogICAgIGZyaWVuZCBj
bGFzcyBCaXRtYXBUZXh0dXJlOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VGV4
dHVyZU1hcHBlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gMCk7
CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlcigpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRy
YXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4KCksIGZsb2F0IG9wYWNpdHkgPSAxLjBmLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSA9IDApID0gMDsKQEAgLTEwOCwyMiArOTEsMTUgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0gMDsKLSAgICBJbnRTaXplIHZp
ZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9Ci0gICAgdm9pZCBz
ZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBtX3ZpZXdwb3J0U2l6ZSA9IHM7IH0K
IAogICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVh
bGl0eSBxdWFsaXR5KSB7IG1faW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB9CiAgICAg
dm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3Rl
eHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KIAogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2ludGVycG9sYXRpb25RdWFs
aXR5OyB9CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dQYXJ0
aWFsVXBkYXRlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
T3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV90cmFuc2Zvcm0g
PSBtYXRyaXg7IH0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmco
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRpbmcoKSB7IH0KIApAQCAtMTQwLDEyICsx
MTYsMTAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBt
X2ludGVycG9sYXRpb25RdWFsaXR5OwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERy
YXdpbmdNb2RlOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIElu
dFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgVmVjdG9yPFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+
IG1fdGV4dHVyZVBvb2w7CiB9OwogCi19OworfQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5jcHAKaW5kZXggY2NmNDliYy4uY2IwMjRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUu
Y3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKIAogbmFtZXNwYWNlIHsKQEAgLTE1
NiwxMiArMTU3LDEwIEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllCiAgICAgaWYgKCF0ZXh0dXJl
TWFwcGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogQWRkIGRpcmVjdGx5IGNv
bXBvc2l0ZWQgaW1hZ2VzLgotICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBtX2N1cnJlbnRDb250
ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6IG1fY3VycmVudENvbnRlbnQubmVlZHNE
aXNwbGF5UmVjdDsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250
ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwogCiAgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsg
dGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKICAgICAgICAg
T3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRleF07Ci0gICAgICAgIEZsb2F0
UmVjdCByZWN0ID0gZGlydHlSZWN0OwogICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSkKICAgICAg
ICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKICAg
ICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+JiB0ZXh0dXJlID0gdGlsZS50ZXh0dXJlOwpAQCAt
MTY5LDMxICsxNjgsNDQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWUKIAogICAgICAgICBpZiAo
dGlsZS5uZWVkc1Jlc2V0IHx8IHRleHR1cmUtPmNvbnRlbnRTaXplKCkgIT0gdGlsZVNpemUgfHwg
IXRleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9jdXJyZW50Q29udGVu
dC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlID8gZmFsc2UgOiBtX3N0YXRl
LmNvbnRlbnRzT3BhcXVlKTsKLSAgICAgICAgICAgIHJlY3QgPSB0aWxlLnJlY3Q7CisgICAgICAg
ICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7Cisg
ICAgICAgICAgICBkaXJ0eVJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJlY3QpKTsK
ICAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBQYWludCB0aGUgZW50aXJlIGRpcnR5IHJlY3QgaW50byBhbiBp
bWFnZSBidWZmZXIuIFRoaXMgZW5zdXJlcyB3ZSBvbmx5IHBhaW50IG9uY2UuCisgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZGlydHlSZWN0
LnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNv
bnRleHQoKTsKKyAgICB7CisgICAgICAgIGNvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAg
ICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5n
TW9kZSgpKTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1kaXJ0eVJlY3QueCgpLCAtZGly
dHlSZWN0LnkoKSk7CisgICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygq
Y29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVu
dFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKKyAgICAgICAgICAgIGNvbnRleHQtPmRy
YXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBtX3N0YXRlLmNvbnRlbnRzUmVjdCk7CisgICAgfQogCi0gICAgICAgIEludFJlY3QgY29udGVu
dFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCk7Ci0gICAgICAgIGNvbnRlbnRSZWN0
LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKLSAgICAgICAgaWYgKGNvbnRlbnRS
ZWN0LmlzRW1wdHkoKSkKKyAgICAvLyBTaGFsbG93IGNvcHkuCisgICAgUmVmUHRyPEltYWdlPiBp
bWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKTsKKworICAgIC8vIERpdmlkZSB0aGUgaW1h
Z2UgdG8gdGlsZXMuCisgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwg
bV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKKyAgICAgICAgT3duZWRUaWxlJiB0
aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRleF07CisgICAgICAgIEludFJlY3QgdGFyZ2V0UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KTsKKyAgICAgICAgdGFyZ2V0UmVjdC5pbnRl
cnNlY3QoZW5jbG9zaW5nSW50UmVjdChkaXJ0eVJlY3QpKTsKKyAgICAgICAgaWYgKHRhcmdldFJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEludFJlY3Qgc291
cmNlUmVjdCA9IHRhcmdldFJlY3Q7CiAKLSAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0SW5U
aWxlQ29vcmRpbmF0ZXMgPSBjb250ZW50UmVjdDsKLSAgICAgICAgRmxvYXRQb2ludCBvZmZzZXQo
LXRpbGUucmVjdC54KCksIC10aWxlLnJlY3QueSgpKTsKLSAgICAgICAgY29udGVudFJlY3RJblRp
bGVDb29yZGluYXRlcy5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOwotCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHRleHR1cmUtPmJlZ2luUGFpbnQo
ZW5jbG9zaW5nSW50UmVjdChjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzKSkpOwotICAgICAg
ICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1cmVNYXBwZXIt
PmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnNldFRl
eHREcmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LnRyYW5zbGF0ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKLSAgICAgICAg
ICAgIEZsb2F0UmVjdCBzY2FsZWRDb250ZW50UmVjdChjb250ZW50UmVjdCk7Ci0gICAgICAgICAg
ICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRU
eXBlKQotICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1fY3VycmVudENvbnRlbnQu
aW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChzY2FsZWRDb250ZW50UmVjdCkpOwotICAg
ICAgICAgICAgdGV4dHVyZS0+ZW5kUGFpbnQoKTsKLSAgICAgICAgfQorICAgICAgICAvLyBOb3Jt
YWxpemUgc291cmNlUmVjdCB0byB0aGUgYnVmZmVyJ3MgY29vcmRpbmF0ZXMuCisgICAgICAgIHNv
dXJjZVJlY3QubW92ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworCisgICAgICAg
IC8vIE5vcm1hbGl6ZSB0YXJnZXRSZWN0IHRvIHRoZSB0ZXh0dXJlJ3MgY29vcmRpbnFhdGVzLgor
ICAgICAgICB0YXJnZXRSZWN0Lm1vdmUoLXRpbGUucmVjdC54KCksIC10aWxlLnJlY3QueSgpKTsK
KyAgICAgICAgdGlsZS50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5nZXQoKSwgdGFyZ2V0
UmVjdCwgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UkdCQUZvcm1hdCk7CiAgICAgfQogCiAg
ICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKQEAgLTQ4MSw3ICs0OTMs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRlZElt
YWdlVGlsZXMoKQogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVu
dHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGJpdHMpCit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgSW1hZ2UqIGltYWdlLCBCaXRt
YXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3JtYXQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1h
cHBlcik7CiAKQEAgLTQ5OCw3ICs1MTAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRD
b250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUgogICAg
IGlmICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCiAgICAgICAgIHRpbGUuYmFja0J1ZmZlci50
ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgdGlsZS5iYWNr
QnVmZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Quc2l6ZSgpLCBmYWxzZSk7Ci0gICAgdGls
ZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKHNvdXJjZVJlY3QsIGJpdHMp
OworICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZSwgc291
cmNlUmVjdCwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCBpbWFnZS0+c2l6ZSgpKSwgZm9ybWF0
KTsKICAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTm9kZS5oCmluZGV4IGZlNGIxNGMuLmNkNzU1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5o
CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGlsZU93bmVyc2hpcChU
aWxlT3duZXJzaGlwIG93bmVyc2hpcCkgeyBtX3N0YXRlLnRpbGVPd25lcnNoaXAgPSBvd25lcnNo
aXA7IH0KICAgICBpbnQgY3JlYXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxlKTsKICAgICB2b2lk
IHJlbW92ZUNvbnRlbnRzVGlsZShpbnQgaWQpOwotICAgIHZvaWQgc2V0Q29udGVudHNUaWxlQmFj
a0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGJpdHMpOworICAgIHZvaWQgc2V0Q29udGVudHNUaWxl
QmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIEltYWdlKiwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpOwogICAg
IHZvaWQgc2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uo
aW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIEJpdG1hcFRleHR1cmUqKTsKICAgICB2b2lkIGNsZWFyQWxsRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VUaWxlcygpOwogICAgIHZvaWQgcHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmluZGV4IGM4ZThkYWQuLjc0MTg4MjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcApAQCAtMzM2LDcgKzMzNiw2IEBAIHZvaWQgUVdlYkZy
YW1lUHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVycyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEluCiAgICAgdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQpOwogICAgIHRleHR1cmVNYXBwZXItPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29u
dGV4dC0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICB0ZXh0dXJlTWFwcGVyLT5z
ZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkpOwotICAgIHRleHR1
cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShmcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXpl
KCkpOwogICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgY29uc3QgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBwYWludGVyLT53b3JsZFRyYW5zZm9y
bSgpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
aW5kZXggZTQ4MmFlMC4uNjdjOGViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxMi0wMS0yNiAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgor
CisgICAgICAgIFtRdF1bVGV4bWFwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyIGJhY2tpbmcgc3Rv
cmVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzcx
NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1v
dmVkIHJlZHVuZGFudCBjYWxscyB0byB1bnVzZWQgVGV4dHVyZU1hcHBlciBmdW5jdGlvbiBzZXRW
aWV3cG9ydFNpemUuCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFX
ZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMpOgorCiAyMDEyLTAxLTI1ICBa
ZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gcHVibGljLnBy
aSBpcyBtaXNzaW5nIGRlcGVuZGVuY3kgdG8gcXVpY2sgbW9kdWxlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDJi
YjczMDUuLjI4ZjA3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wMS0yNiAg
Tm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtR
dF1bVGV4bWFwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyIGJhY2tpbmcgc3RvcmVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIHJlZHVuZGFu
dCBjYWxscyB0byBUZXh0dXJlTWFwcGVyLCBhbmQgdXNlIHRoZSBuZXcgdXBsb2FkIEFQSSB0aGF0
IHVzZXMgaW1hZ2VzCisgICAgICAgIGluc3RlYWQgb2YgYSBzZXBhcmF0aW9uIGJldHdlZW4gcmF3
IGNvbnRlbnQgYW5kIGxheWVyIGNvbnRlbnQgbGlrZSBiZWZvcmUuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZSk6CisKIDIwMTItMDEtMjYgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgoKICAgICAgICAgW0dUS11bV0syXSBQcmlt
YXJ5IGNsaXBib2FyZCBzaG91bGQgYmUgdXBkYXRlZCB3aXRoIHRoZSBjdXJyZW50IHNlbGVjdGlv
biBpbiBYMTEgcGxhdGZvcm1zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAppbmRleCAxZjYwNjVlLi5iZDYxMDQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5j
cHAKQEAgLTE4NCw5ICsxODQsNiBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAgZ2xH
ZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+
c2V0Vmlld3BvcnRTaXplKEludFNpemUodmlld3BvcnRbMl0sIHZpZXdwb3J0WzNdKSk7CiAgICAg
bm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogICAgIG1fdGV4
dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1
cmZhY2UoMCk7CkBAIC0zODYsMjkgKzM4MywyNiBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlYwog
ICAgICAgICByZXR1cm47CiAKICAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1h
cHBlci5nZXQoKSk7Ci0gICAgUUltYWdlIGltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKTsK
LSAgICBub2RlLT5zZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKG5vZGVUaWxlSUQsIHNvdXJjZVJl
Y3QsIHRhcmdldFJlY3QsIGltYWdlLmNvbnN0Qml0cygpKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlID0gYml0bWFwLT5jcmVhdGVJbWFnZSgpOworICAgIG5vZGUtPnNldENvbnRlbnRzVGlsZUJh
Y2tCdWZmZXIobm9kZVRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgaW1hZ2UuZ2V0KCks
IEJpdG1hcFRleHR1cmU6OlJHQkFGb3JtYXQpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCkK
IHsKICAgICBUaWxlZEltYWdlIHRpbGVkSW1hZ2U7CiAgICAgc3RhdGljIGNvbnN0IGludCBUaWxl
RGltZW5zaW9uID0gMTAyNDsKLSAgICBRSW1hZ2UgaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZVFJbWFn
ZSgpOwotICAgIGJvb2wgaW1hZ2VIYXNBbHBoYSA9IGltYWdlLmhhc0FscGhhQ2hhbm5lbCgpOwot
ICAgIEludFJlY3QgaW1hZ2VSZWN0KDAsIDAsIGltYWdlLndpZHRoKCksIGltYWdlLmhlaWdodCgp
KTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlLmhlaWdodCgpOyB5ICs9IFRpbGVEaW1l
bnNpb24pIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZS53aWR0aCgpOyB4ICs9
IFRpbGVEaW1lbnNpb24pIHsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYml0bWFwLT5jcmVh
dGVJbWFnZSgpOworICAgIGJvb2wgaW1hZ2VIYXNBbHBoYSA9IGltYWdlLT5jdXJyZW50RnJhbWVI
YXNBbHBoYSgpOworICAgIEludFJlY3QgaW1hZ2VSZWN0KDAsIDAsIGltYWdlLT53aWR0aCgpLCBp
bWFnZS0+aGVpZ2h0KCkpOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2UtPmhlaWdodCgp
OyB5ICs9IFRpbGVEaW1lbnNpb24pIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbWFn
ZS0+d2lkdGgoKTsgeCArPSBUaWxlRGltZW5zaW9uKSB7CiAgICAgICAgICAgICBRSW1hZ2Ugc3Vi
SW1hZ2U7CiAgICAgICAgICAgICBJbnRSZWN0IHJlY3QoeCwgeSwgVGlsZURpbWVuc2lvbiwgVGls
ZURpbWVuc2lvbik7CiAgICAgICAgICAgICByZWN0LmludGVyc2VjdChpbWFnZVJlY3QpOwotICAg
ICAgICAgICAgaWYgKFFTaXplKHJlY3Quc2l6ZSgpKSA9PSBpbWFnZS5zaXplKCkpCi0gICAgICAg
ICAgICAgICAgc3ViSW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7CiAgICAgICAgICAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwog
ICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhhKTsK
LSAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgcmVjdC5zaXplKCkpLCBzdWJJbWFnZS5jb25zdEJpdHMoKSk7CisgICAgICAgICAg
ICBJbnRSZWN0IG5vcm1hbFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpOworICAg
ICAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIG5vcm1hbFJlY3Qs
IHJlY3QsIEJpdG1hcFRleHR1cmU6OlJHQkFGb3JtYXQpOwogICAgICAgICAgICAgdGlsZWRJbWFn
ZS5hZGQocmVjdC5sb2NhdGlvbigpLCB0ZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124497</attachid>
            <date>2012-01-29 22:39:34 -0800</date>
            <delta_ts>2012-01-30 17:45:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>57224</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMmUzNzk0Li5hMjMxYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTItMDEtMjkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8g
dXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIFRleHR1cmVNYXBwZXJRdCwgYW5kIGluc3Rl
YWQgY3JlYXRlZCBhIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBjbGFzcywKKyAgICAgICAgd2hp
Y2ggcmVzcG9uZHMgdG8gYW4gIlVuYWNjZWxlcmF0ZWQiIG1vZGUgb2YgVGV4dHVyZU1hcHBlciwg
aW5zdGVhZCBvZiBjcmVhdGluZyBzdWJjbGFzc2VzCisgICAgICAgIG9mIFRleHR1cmVNYXBwZXIg
ZGlyZWN0bHkuIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBzb2Z0d2FyZSBmYWxsYmFjayBvZiBUZXh0
dXJlTWFwcGVyIGJ5IGFueQorICAgICAgICBwb3J0LgorCisgICAgICAgIFRvIG1ha2UgdGhlIElt
YWdlQnVmZmVyIGJhY2tlbmQgZWFzaWVyLCBjb250ZW50IHVwZGF0ZXMgdG8gQml0bWFwVGV4dHVy
ZSBjYW4gbm93IHVzZSBlaXRoZXIKKyAgICAgICAgYW4gaW1hZ2UsIG9yIGEgcmF3IGRhdGEgcG9p
bnRlci4gVGhlIHJhdyBkYXRhIHBvaW50ZXIgaXMgcHJvdmlkZWQgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMsCisgICAgICAgIGFzIGNvbnZlcnRpbmcgZGF0YSB0by9mcm9tIEltYWdlIHJlZmVyZW5j
ZXMgaW4gUXQgZ2VuZXJhdGVzIHVubmVjZXNzYXJ5IGRlZXAgY29waWVzIG9mIHRoZQorICAgICAg
ICBpbWFnZSBkYXRhLgorCisgICAgICAgIEFsc28sIEZ1bmN0aW9ucyB0aGF0IHVzZSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB3ZXJlIGFkZGVkIHRvIEdyYXBoaWNzQ29udGV4dCwgdG8gYWxsb3cgZm9y
CisgICAgICAgIDNEIHRyYW5zZm9ybXMgaW4gY3Jvc3MgcGxhdGZvcm0gY29kZS4gVGhlIGZhbGxi
YWNrIGNvZGUgc3RpbGwgdXNlcyB0aGUgMkQgQ1RNcy4KKworICAgICAgICBBZnRlciB0aGlzIHBh
dGNoIGV2ZXJ5dGhpbmcgcmVuZGVycyB0aGUgc2FtZSwgYW5kIHRoZXJlIGFyZSBubyBuZXcgaW1h
Z2UgZGVlcCBjb3BpZXMuCisKKyAgICAgICAgTm8gYmVoYXZpb3JhbCBjaGFuZ2VzLgorCisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldFRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTERhdGEpOgor
ICAgICAgICAoQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJl
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnN3aXp6bGVSR0IpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9y
bUNyZWF0ZUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmFjY2VsZXJhdGlv
bk1vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmdldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFRyYW5zZm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpCaXRtYXBUZXh0dXJlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YnBwKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmU6OmlzT3BhcXVlKToKKyAgICAgICAgKCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlcjo6Z3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oOgorICAgICAgICAoVGV4dHVyZU1hcHBlck5vZGUpOgorCiAyMDEyLTAxLTI5ICBEYWxl
IEN1cnRpcyAgPGRhbGVjdXJ0aXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFByZXBhcmUgV2Vi
Q29yZS5neXAgZm9yIGZmbXBlZyBzb3VyY2UgdHJhbnNpdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGIz
NGM1NDIuLjcwYjhjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysr
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzk0MSw3ICszOTQxLDYgQEAgd2luMzI6
IXdpbjMyLWcrKyo6Y29udGFpbnMoUU1BS0VfSE9TVC5hcmNoLCB4ODZfNjQpOnsKIAogY29udGFp
bnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICBIRUFERVJTICs9IFwKLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBcCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCkBAIC0zOTUwLDcgKzM5NDksNiBAQCBjb250
YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAogCiAgICAgU09VUkNFUyArPSBcCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgXAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKQEAgLTM5NjEsNiAr
Mzk1OSw3IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgICAgIEhFQURFUlMgKz0g
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCiAgICAgICAgIFNPVVJD
RVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICAg
ICAgQ09ORklHICs9IG9wZW5nbC1zaGltcworICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVY
VFVSRV9NQVBQRVJfR0wKICAgICB9CiB9IGVsc2UgewogICAgIEhFQURFUlMgKz0gcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZGVhOTUwYi4uYTFlZWMyYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKQEAgLTQwOSw2ICs0MDksMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIGdldENUTSgpIGNvbnN0OwogCisjaWYgUExBVEZPUk0oUVQpCisgICAgICAgIHZvaWQgY29u
Y2F0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgICAgIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGdldFRyYW5zZm9ybSgpIGNvbnN0OworI2Vsc2UKKyAgICAgICAgdm9p
ZCBjb25jYXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkg
eyBjb25jYXRDVE0odHJhbnNmb3JtLnRvQWZmaW5lKCkpOyB9CisgICAgICAgIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgc2V0Q1RNKHRy
YW5zZm9ybS50b0FmZmluZSgpKTsgfQorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeChnZXRDVE0oKSk7
IH0KKyNlbmRpZgorCiAgICAgICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJs
ZSB3aXRoIHRoaXMgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uCiAgICAgICAgIC8v
IGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4K
ICAgICAgICAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihj
b25zdCBJbnRTaXplJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcAppbmRleCA2MWQ4
YjIwLi5lNzI5NTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAKQEAgLTExNSwxMSArMTE1
LDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRl
eHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmUKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Ci1QYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFw
cGVyQ2Fpcm8pOwotfQotCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJD
YWlybzo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBU
ZXh0dXJlQ2Fpcm8oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGRlMDQxYmYuLmEyNDY4
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yNjMsNTcgKzI2Myw2IEBAIHN0cnVjdCBU
ZXh0dXJlTWFwcGVyR0xEYXRhIHsKIAogICAgIH07CiAKLSAgICBzdHJ1Y3QgRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZXBvc2l0b3J5IHsKLSAgICAgICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAg
ICAgIEdMdWludCB0ZXh0dXJlOwotICAgICAgICAgICAgaW50IHJlZkNvdW50OwotICAgICAgICB9
OwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8SW1hZ2VVSUQsIEVudHJ5PiBJbWFnZVRleHR1cmVN
YXA7Ci0gICAgICAgIEltYWdlVGV4dHVyZU1hcCBpbWFnZVRvVGV4dHVyZTsKLQotICAgICAgICBH
THVpbnQgZmluZE9yQ3JlYXRlKEltYWdlVUlEIGltYWdlLCBib29sJiBmb3VuZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgSW1hZ2VUZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0
dXJlLmZpbmQoaW1hZ2UpOwotICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGl0LT5z
ZWNvbmQucmVmQ291bnQrKzsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQudGV4dHVyZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEVudHJ5IGVudHJ5OwotICAgICAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwg
JmVudHJ5LnRleHR1cmUpKTsKLSAgICAgICAgICAgIGVudHJ5LnJlZkNvdW50ID0gMTsKLSAgICAg
ICAgICAgIGltYWdlVG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOwotICAgICAgICAgICAgcmV0
dXJuIGVudHJ5LnRleHR1cmU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGRlcmVmKEltYWdl
VUlEIGltYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBIYXNoTWFwPEltYWdlVUlELCBFbnRy
eT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0gICAgICAgICAg
ICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
aXQtPnNlY29uZC5yZWZDb3VudCA8IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VUb1Rl
eHR1cmUucmVtb3ZlKGl0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5KCkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgfkRpcmVjdGx5Q29tcG9zaXRlZEltYWdl
UmVwb3NpdG9yeSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoSW1hZ2VUZXh0dXJlTWFw
OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmJlZ2luKCk7IGl0ICE9IGltYWdlVG9UZXh0
dXJlLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgR0x1aW50IHRleHR1cmUgPSBpdC0+
c2Vjb25kLnRleHR1cmU7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgICAg
ICAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0gZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOwotCiAg
ICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOwpAQCAtMzI3LDYgKzI3Niw3IEBAIHN0cnVjdCBU
ZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9u
TWF0cml4OwogICAgIGludCBjdXJyZW50UHJvZ3JhbTsKICAgICBpbnQgcHJldmlvdXNQcm9ncmFt
OworICAgIEdMaW50IHZpZXdwb3J0WzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERhdGE+IG1fc2hh
cmVkR0xEYXRhOwogfTsKIApAQCAtMzM3LDU2ICsyODcsMjUgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IElu
dFNpemUmLCBib29sIG9wYXF1ZSk7CiAgICAgdm9pZCBiaW5kKCk7Ci0gICAgdmlydHVhbCBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
OwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB+Qml0bWFwVGV4dHVyZUdMKCkgeyBkZXN0cm95KCk7
IH0KICAgICB2aXJ0dWFsIHVpbnQzMl90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAg
IGlubGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KICAgICBp
bmxpbmUgRmxvYXRTaXplIHJlbGF0aXZlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVT
aXplOyB9CiAgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFw
KSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1hcDsgfQotCi0gICAgdm9pZCB1cGRhdGVDb250ZW50
cyhQaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIHZvaWQqKTsKLSAgICB2b2lkIHVwZGF0ZVJh
d0NvbnRlbnRzKGNvbnN0IEludFJlY3QmLCBjb25zdCB2b2lkKik7Ci0gICAgdm9pZCBwYWNrKCkK
LSAgICB7Ci0gICAgICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGEgc3R1Yi4KLSAgICAgICAgaWYg
KGlzUGFja2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNQYWNrZWQgPSB0
cnVlOwotICAgIH0KLQotICAgIHZvaWQgdW5wYWNrKCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
aXMgY3VycmVudGx5IGEgc3R1Yi4KLSAgICAgICAgaWYgKCFpc1BhY2tlZCgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtX2lzUGFja2VkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9v
bCBpc1BhY2tlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pc1BhY2tlZDsKLSAg
ICB9CisgICAgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRSZWN0JiwgUGl4ZWxGb3JtYXQpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHModm9pZCos
IGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7CiAKIHByaXZhdGU6CiAgICAgR0x1aW50IG1f
aWQ7Ci0gICAgSW1hZ2VVSUQgbV9pbWFnZVVJRDsKICAgICBGbG9hdFNpemUgbV9yZWxhdGl2ZVNp
emU7Ci0gICAgYm9vbCBtX29wYXF1ZTsKICAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7Ci0gICAg
T3duUHRyPEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBtX2J1ZmZlcjsKICAgICBJbnRSZWN0
IG1fZGlydHlSZWN0OwogICAgIEdMdWludCBtX2ZibzsKICAgICBHTHVpbnQgbV9yYm87CiAgICAg
SW50U2l6ZSBtX2FjdHVhbFNpemU7CiAgICAgYm9vbCBtX3N1cmZhY2VOZWVkc1Jlc2V0OwotICAg
IGJvb2wgbV9pc1BhY2tlZDsKICAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsK
ICAgICBCaXRtYXBUZXh0dXJlR0woKQogICAgICAgICA6IG1faWQoMCkKLSAgICAgICAgLCBtX2lt
YWdlVUlEKDApCi0gICAgICAgICwgbV9vcGFxdWUoZmFsc2UpCiAgICAgICAgICwgbV9mYm8oMCkK
ICAgICAgICAgLCBtX3JibygwKQogICAgICAgICAsIG1fc3VyZmFjZU5lZWRzUmVzZXQodHJ1ZSkK
QEAgLTUzMiw2ICs0NTEsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZygp
CiAgICAgfQogICAgIGdsQ2xlYXJTdGVuY2lsKDApOwogICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9C
VUZGRVJfQklUKTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3Bv
cnQpOwogICAgIGJpbmRTdXJmYWNlKDApOwogI2VuZGlmCiB9CkBAIC02NDUsNyArNTY1LDYgQEAg
c3RhdGljIHZvaWQgdGV4SW1hZ2UyRFJlc291cmNlU2FmZShzaXplX3Qgd2lkdGgsIHNpemVfdCBo
ZWlnaHQpCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6
ZSwgYm9vbCBvcGFxdWUpCiB7CiAgICAgQml0bWFwVGV4dHVyZTo6cmVzZXQobmV3U2l6ZSwgb3Bh
cXVlKTsKLSAgICBtX2ltYWdlVUlEID0gMDsKICAgICBJbnRTaXplIG5ld1RleHR1cmVTaXplID0g
bmV4dFBvd2VyT2ZUd28obmV3U2l6ZSk7CiAgICAgYm9vbCBqdXN0Q3JlYXRlZCA9IGZhbHNlOwog
ICAgIGlmICghbV9pZCkgewpAQCAtNjY0LDI5ICs1ODMsMTEgQEAgdm9pZCBCaXRtYXBUZXh0dXJl
R0w6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUsIGJvb2wgb3BhcXVlKQogICAgIH0KICAg
ICBtX2FjdHVhbFNpemUgPSBuZXdTaXplOwogICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRTaXpl
KGZsb2F0KG5ld1NpemUud2lkdGgoKSkgLyBtX3RleHR1cmVTaXplLndpZHRoKCksIGZsb2F0KG5l
d1NpemUuaGVpZ2h0KCkpIC8gbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9vcGFxdWUg
PSBvcGFxdWU7CiAgICAgbV9zdXJmYWNlTmVlZHNSZXNldCA9IHRydWU7CiB9CiAKLVBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJlR0w6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQotewotICAgIG1fYnVmZmVyID0gQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZm
ZXI6OmNyZWF0ZSgpOwotICAgIG1fZGlydHlSZWN0ID0gZGlydHlSZWN0OwotICAgIHJldHVybiBt
X2J1ZmZlci0+YmVnaW5QYWludChkaXJ0eVJlY3QsIG1fb3BhcXVlKTsKLX0KLQotdm9pZCBCaXRt
YXBUZXh0dXJlR0w6OmVuZFBhaW50KCkKLXsKLSAgICBpZiAoIW1fYnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9idWZmZXItPmVuZFBhaW50KCk7Ci0gICAgdXBkYXRlQ29udGVudHMoQkdS
QUZvcm1hdCwgbV9kaXJ0eVJlY3QsIG1fYnVmZmVyLT5kYXRhKCkpOwotICAgIEdMX0NNRChnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQotICAgIG1fYnVmZmVyLmNsZWFyKCk7Ci19
CiAKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLXN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9S
R0JBKHVpbnQzMl90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQorc3RhdGljIHZvaWQgc3dp
enpsZVJHQih1aW50MzJfdCogZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBpbnQg
d2lkdGggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CkBA
IC02OTYsNzkgKzU5NywzMSBAQCBzdGF0aWMgdm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50MzJf
dCogZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgICAgIHBbeF0gPSAoKHBbeF0g
PDwgMTYpICYgMHhmZjAwMDApIHwgKChwW3hdID4+IDE2KSAmIDB4ZmYpIHwgKHBbeF0gJiAweGZm
MDBmZjAwKTsKICAgICB9CiB9Ci0jZW5kaWYKIAotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0
ZUNvbnRlbnRzKFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCB2
b2lkKiBiaXRzKQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKHZvaWQqIGRh
dGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBpeGVsRm9ybWF0KQogewogICAgIEdMX0NN
RChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQotI2lmZGVmIFRFWE1BUF9PUEVO
R0xfRVNfMgotICAgIGJvb2wgc2hvdWxkU3dpenpsZSA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBH
TGludCBnbEZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgewotICAg
IGNhc2UgUkdCQUZvcm1hdDoKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFJHQkZvcm1hdDoKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9SR0I7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkdSQUZvcm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdM
X0VTXzIKLSAgICAgICAgc2hvdWxkU3dpenpsZSA9IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0g
R0xfUkdCQTsKLSNlbHNlCi0gICAgICAgIGdsRm9ybWF0ID0gR0xfQkdSQTsKLSNlbmRpZgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEJHUkZvcm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VT
XzIKLSAgICAgICAgc2hvdWxkU3dpenpsZSA9IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xf
UkdCOwotI2Vsc2UKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9CR1I7Ci0jZW5kaWYKLSAgICAgICAg
IGJyZWFrOwotICAgIH0KLQotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIGlmIChzaG91
bGRTd2l6emxlKQotICAgICAgICBzd2l6emxlQkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50MzJf
dCo+KGJpdHMpLCByZWN0LnNpemUoKSk7Ci0jZW5kaWYKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgYml0cykpCisgICAgR0xf
Q01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFy
Z2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgZGF0YSkpCiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUdM
Ojp1cGRhdGVSYXdDb250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCB2b2lkKiBiaXRz
KQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgQml0bWFw
VGV4dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0KQogeworICAgIGlmICghaW1hZ2UpCisgICAgICAg
IHJldHVybjsKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkK
ICAgICBHTHVpbnQgZ2xGb3JtYXQgPSBpc09wYXF1ZSgpID8gR0xfUkdCIDogR0xfUkdCQTsKLSAg
ICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURf
QllURSwgYml0cykpCi19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqIGltYWdlKQotewotICAgIEltYWdlVUlEIHVpZCA9IGltYWdlID8gdWlkRm9ySW1h
Z2UoaW1hZ2UpIDogMDsKLSAgICBpZiAoIWltYWdlIHx8ICF1aWQpIHsKLSAgICAgICAgaWYgKG1f
aW1hZ2VVSUQpCi0gICAgICAgICAgICBkZXN0cm95KCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgZnJh
bWVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICgh
ZnJhbWVJbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICh1aWQgPT0gbV9p
bWFnZVVJRCkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBH
THVpbnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkuZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZSh1aWQsIGZvdW5kKTsKLSAgICBpZiAobmV3VGV4dHVy
ZUlEICE9IG1faWQpIHsKLSAgICAgICAgbV9pbWFnZVVJRCA9IHVpZDsKLSAgICAgICAgZGVzdHJv
eSgpOwotICAgICAgICBtX2lkID0gbmV3VGV4dHVyZUlEOwotICAgICAgICByZXNldChpbWFnZS0+
c2l6ZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KGJlZ2luUGFpbnQoSW50UmVjdCgwLCAwLCBtX3RleHR1cmVTaXpl
LndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCksIENv
bXBvc2l0ZUNvcHkpOwotICAgICAgICAgICAgZW5kUGFpbnQoKTsKLSAgICAgICAgfQotICAgIH0K
KyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1hZ2UgcXRJbWFnZSA9IGZyYW1lSW1hZ2UtPnRvSW1h
Z2UoKTsKKyAgICBpZiAoSW50U2l6ZShxdEltYWdlLnNpemUoKSkgIT0gc291cmNlUmVjdC5zaXpl
KCkpCisgICAgICAgIHF0SW1hZ2UgPSBxdEltYWdlLmNvcHkoc291cmNlUmVjdCk7CisgICAgaWYg
KGZvcm1hdCA9PSBCR1JBRm9ybWF0IHx8IGZvcm1hdCA9PSBCR1JGb3JtYXQpCisgICAgICAgIHN3
aXp6bGVSR0IocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHF0SW1hZ2UuYml0cygpKSwgcXRJ
bWFnZS5zaXplKCkpOworICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBxdEltYWdlLmNv
bnN0Qml0cygpKSkKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlw
KQpAQCAtODIwLDcgKzY3Myw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKIAogdm9p
ZCBCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3koKQogewotICAgIGlmIChtX2lkICYmICghbV9pbWFn
ZVVJRCB8fCAhbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkuZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Vz
LmRlcmVmKG1faW1hZ2VVSUQpKSkKKyAgICBpZiAobV9pZCkKICAgICAgICAgR0xfQ01EKGdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1faWQpKQogCiAgICAgaWYgKG1fZmJvKQpAQCAtODU1LDExICs3MDgs
MTIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1
cmZhY2VQb2ludGVyKQogICAgIEJpdG1hcFRleHR1cmVHTCogc3VyZmFjZSA9IHN0YXRpY19jYXN0
PEJpdG1hcFRleHR1cmVHTCo+KHN1cmZhY2VQb2ludGVyKTsKIAogICAgIGlmICghc3VyZmFjZSkg
eworICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZShkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEo
KS52aWV3cG9ydFszXSk7CiAgICAgICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgMCkpCi0gICAgICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJv
amVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUoKSwgdHJ1ZSkubXVsdGlwbHkodHJhbnNmb3JtKCkp
OworICAgICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRy
aXgodmlld3BvcnRTaXplLCB0cnVlKTsKICAgICAgICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoZGF0
YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6IEdMX0FMV0FZ
UywgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEsIGRhdGEoKS5zaGFyZWRH
TERhdGEoKS5zdGVuY2lsSW5kZXggLSAxKSkKICAgICAgICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdM
X0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApKQotICAgICAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAw
LCB2aWV3cG9ydFNpemUoKS53aWR0aCgpLCB2aWV3cG9ydFNpemUoKS5oZWlnaHQoKSkpCisgICAg
ICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9y
dFNpemUuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05MTYsNCArNzcw
LDkgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRl
eHR1cmUoKQogICAgIHJldHVybiBhZG9wdFJlZih0ZXh0dXJlKTsKIH0KIAorUGFzc093blB0cjxU
ZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCkK
K3sKKyAgICByZXR1cm4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKK30KKwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuaAppbmRleCBkZDJlMWE3Li41NmUyYWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBA
IC00MywxNiArNDMsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1
aW50MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9vbCBmbGlwKTsKICAgICB2aXJ0dWFsIHZv
aWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGVu
ZFBhaW50aW5nKCk7CiAgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdDsKICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0
dXJlTWFwcGVyR0w+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVy
R0wpOyB9Ci0gICAgdm9pZCBiZWdpblBhaW50aW5nKCk7Ci0gICAgdm9pZCBlbmRQYWludGluZygp
OwogICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkg
eyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CiAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNPcGVuR0xC
YWNrZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBwbGF0Zm9ybVVwZGF0ZUNv
bnRlbnRzKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIEJp
dG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKKyAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUg
YWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIEFjY2VsZXJhdGVkOyB9CiAKIHByaXZh
dGU6CiAgICAgaW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVybiAqbV9k
YXRhOyB9CkBAIC02MiwxNiArNjMsNiBAQCBwcml2YXRlOgogfTsKIAogLy8gQW4gb2Zmc2NyZWVu
IGJ1ZmZlciB0byBiZSByZW5kZXJlZCBieSBzb2Z0d2FyZS4KLWNsYXNzIEJHUkEzMlByZW11bHRp
bXBsaWVkQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5CR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcigpIHsgfQotICAgIHZpcnR1YWwg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0LCBib29sIG9wYXF1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQqIGRhdGEoKSA9IDA7Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8QkdS
QTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IGNyZWF0ZSgpOwotfTsKLQogc3RhdGljIGlubGluZSBp
bnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bSkKIHsKICAgICBmb3IgKGludCBpID0gMHgxMDAwMDAw
MDsgaSA+IDA7IGkgPj49IDEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCBlYzczYzNmZS4uZmIz
MWY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtMjgyLDEyICsyODIsMTUgQEAgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
IAogQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKIHsKKyAg
ICByZXR1cm4gZ2V0VHJhbnNmb3JtKCkudG9BZmZpbmVUcmFuc2Zvcm0oKTsKK30KKworVHJhbnNm
b3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXRUcmFuc2Zvcm0oKSBjb25zdAorewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oKTsKKyAgICAgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CiAKLSAgICBjb25z
dCBRVHJhbnNmb3JtJiBtYXRyaXggPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y29tYmluZWRUcmFuc2Zv
cm0oKTsKLSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0x
MigpLCBtYXRyaXgubTIxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTIy
KCksIG1hdHJpeC5keCgpLCBtYXRyaXguZHkoKSk7CisgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4
dCgpLT5jb21iaW5lZFRyYW5zZm9ybSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2
ZVBsYXRmb3JtU3RhdGUoKQpAQCAtMTMyMSwyMCArMTMyNCwzMiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKIHsKKyAgICBjb25jYXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgodHJhbnNm
b3JtKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgc2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0
cml4KHRyYW5zZm9ybSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhLT5wKCktPnNl
dFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJ1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9kYXRhLT5wKCktPnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CisKIH0KIAor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiwgY29uc3Qg
SW50UmVjdCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGNjODI3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyNjMgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKLQot
I2luY2x1ZGUgPFF0Q29yZS9xZGVidWcuaD4KLSNpbmNsdWRlIDxRdEd1aS9xcGFpbnRlbmdpbmUu
aD4KLSNpbmNsdWRlIDxRdEd1aS9xcGl4bWFwLmg+Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCi0jIGluY2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpkZXN0cm95KCkKLXsKLSAg
ICBpZiAobV9waXhtYXAucGFpbnRpbmdBY3RpdmUoKSkKLSAgICAgICAgcUZhdGFsKCJEZXN0cm95
aW5nIGFuIGFjdGl2ZSBwaXhtYXAiKTsKLSAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKLX0KLQot
dm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgaXNP
cGFxdWUpCi17Ci0gICAgQml0bWFwVGV4dHVyZTo6cmVzZXQoc2l6ZSwgaXNPcGFxdWUpOwotCi0g
ICAgaWYgKHNpemUud2lkdGgoKSA+IG1fcGl4bWFwLnNpemUoKS53aWR0aCgpIHx8IHNpemUuaGVp
Z2h0KCkgPiBtX3BpeG1hcC5zaXplKCkuaGVpZ2h0KCkgfHwgbV9waXhtYXAuaXNOdWxsKCkpCi0g
ICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwot
ICAgIGlmICghaXNPcGFxdWUpCi0gICAgICAgIG1fcGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50
KTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVRdDo6YmVnaW5Q
YWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9wYWludGVyLmJlZ2luKCZt
X3BpeG1hcCk7Ci0gICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKCZtX3BhaW50ZXIpOwot
ICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9k
ZV9DbGVhcik7Ci0gICAgbV9wYWludGVyLmZpbGxSZWN0KFFSZWN0KGRpcnR5UmVjdCksIFF0Ojp0
cmFuc3BhcmVudCk7Ci0gICAgbV9wYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6
Q29tcG9zaXRpb25Nb2RlX1NvdXJjZU92ZXIpOwotICAgIHJldHVybiAmbV9wYWludGVyOwotfQot
Ci12b2lkIEJpdG1hcFRleHR1cmVRdDo6ZW5kUGFpbnQoKQotewotICAgIG1fcGFpbnRlci5lbmQo
KTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0
IHBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCB2b2lkKiBiaXRzKQotewotICAgIG1f
cGFpbnRlci5iZWdpbigmbV9waXhtYXApOwotICAgIFFJbWFnZTo6Rm9ybWF0IHF0Rm9ybWF0ID0g
UUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQ7Ci0gICAgaWYgKHBpeGVsRm9ybWF0
ID09IEJHUkZvcm1hdCB8fCBwaXhlbEZvcm1hdCA9PSBSR0JGb3JtYXQpCi0gICAgICAgIHF0Rm9y
bWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7Ci0gICAgUUltYWdlIGltYWdlKHN0YXRpY19jYXN0
PHVjaGFyKj4oYml0cyksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgcXRGb3JtYXQpOwot
ICAgIGlmIChwaXhlbEZvcm1hdCA9PSBCR1JGb3JtYXQgfHwgcGl4ZWxGb3JtYXQgPT0gQkdSQUZv
cm1hdCkKLSAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZ2JTd2FwcGVkKCk7Ci0gICAgbV9wYWludGVy
LnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0g
ICAgbV9wYWludGVyLmRyYXdJbWFnZShyZWN0LCBpbWFnZSk7Ci0gICAgbV9wYWludGVyLmVuZCgp
OwotfQotCi1ib29sIEJpdG1hcFRleHR1cmVRdDo6c2F2ZShjb25zdCBTdHJpbmcmIHBhdGgpCi17
Ci0gICAgcmV0dXJuIG1fcGl4bWFwLnNhdmUocGF0aCwgIlBORyIpOwotfQotCi12b2lkIEJpdG1h
cFRleHR1cmVRdDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgUVBpeG1hcCogcGl4bWFwID0gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFwaXhtYXApCi0gICAg
ICAgIHJldHVybjsKLSAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChwaXhtYXAtPnNpemUoKSwgIXBp
eG1hcC0+aGFzQWxwaGFDaGFubmVsKCkpOwotICAgIG1fcGl4bWFwID0gKnBpeG1hcDsKLX0KLQot
dm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnBhY2soKQotewotICAgIGlmIChtX3BpeG1hcC5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbWFnZSA9IG1fcGl4bWFwLnRvSW1hZ2UoKTsK
LSAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKLSAgICBtX2lzUGFja2VkID0gdHJ1ZTsKLX0KLQot
dm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnVucGFjaygpCi17Ci0gICAgbV9pc1BhY2tlZCA9IGZhbHNl
OwotICAgIGlmIChtX2ltYWdlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bp
eG1hcCA9IFFQaXhtYXA6OmZyb21JbWFnZShtX2ltYWdlKTsKLSAgICBtX2ltYWdlID0gUUltYWdl
KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgICBRUGFp
bnRlciogcGFpbnRlciA9IGN1cnJlbnRQYWludGVyKCk7Ci0gICAgIHBhaW50ZXItPnNhdmUoKTsK
LSAgICAgUVRyYW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNmb3JtKCk7Ci0g
ICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShtYXRyaXgsIGZhbHNlKTsKLSAgICAgcGFpbnRlci0+
c2V0Q2xpcFJlY3QocmVjdCk7Ci0gICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShwcmV2VHJhbnNm
b3JtLCBmYWxzZSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjplbmRDbGlwKCkKLXsKLSAg
ICBjdXJyZW50UGFpbnRlcigpLT5yZXN0b3JlKCk7Ci19Ci0KLUludFNpemUgVGV4dHVyZU1hcHBl
clF0Ojp2aWV3cG9ydFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fcGFpbnRl
ci0+ZGV2aWNlKCktPndpZHRoKCksIG1fcGFpbnRlci0+ZGV2aWNlKCktPmhlaWdodCgpKTsKLX0K
LQotCi1UZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgpCi0gICAgOiBtX2N1cnJlbnRT
dXJmYWNlKDApCi17Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7
Ci0gICAgbV9wYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaW5pdGlh
bGl6ZShtX3BhaW50ZXIpOwotfQotCi1HcmFwaGljc0NvbnRleHQqIFRleHR1cmVNYXBwZXJRdDo6
Z3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0OwotfQotCi12b2lkIFRl
eHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkKLXsKLSAg
ICBpZiAobV9jdXJyZW50U3VyZmFjZSA9PSBzdXJmYWNlKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKG1fY3VycmVudFN1cmZhY2UpCi0gICAgICAgIG1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRl
ci5lbmQoKTsKLSAgICBpZiAoIXN1cmZhY2UpIHsKLSAgICAgICAgbV9jdXJyZW50U3VyZmFjZSA9
IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQml0bWFwVGV4dHVyZVF0KiBzdXJmYWNl
UXQgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlUXQqPihzdXJmYWNlKTsKLSAgICBpZiAoIXN1
cmZhY2VRdC0+bV9wYWludGVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHN1cmZhY2VRdC0+bV9wYWlu
dGVyLmJlZ2luKCZzdXJmYWNlUXQtPm1fcGl4bWFwKTsKLSAgICBtX2N1cnJlbnRTdXJmYWNlID0g
c3VyZmFjZVF0OwotfQotCi0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJp
dG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQotewotICAgIGNvbnN0IEJpdG1hcFRleHR1cmVRdCYg
dGV4dHVyZVF0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZVF0Jj4odGV4dHVyZSk7
Ci0gICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX3BhaW50ZXI7Ci0gICAgUVBpeG1hcCBwaXhtYXAg
PSB0ZXh0dXJlUXQubV9waXhtYXA7Ci0gICAgaWYgKG1fY3VycmVudFN1cmZhY2UpCi0gICAgICAg
IHBhaW50ZXIgPSAmbV9jdXJyZW50U3VyZmFjZS0+bV9wYWludGVyOwotCi0gICAgaWYgKG1hc2tU
ZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgY29uc3QgQml0bWFw
VGV4dHVyZVF0KiBtYXNrID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZVF0Kj4obWFz
a1RleHR1cmUpOwotICAgICAgICBRUGl4bWFwIGludGVybWVkaWF0ZVBpeG1hcChwaXhtYXAuc2l6
ZSgpKTsKLSAgICAgICAgaW50ZXJtZWRpYXRlUGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsK
LSAgICAgICAgUVBhaW50ZXIgbWFza1BhaW50ZXIoJmludGVybWVkaWF0ZVBpeG1hcCk7Ci0gICAg
ICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25N
b2RlX1NvdXJjZSk7Ci0gICAgICAgIG1hc2tQYWludGVyLmRyYXdQaXhtYXAoMCwgMCwgcGl4bWFw
KTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21w
b3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7Ci0gICAgICAgIG1hc2tQYWludGVyLmRyYXdQaXht
YXAoUVJlY3QoMCwgMCwgcGl4bWFwLndpZHRoKCksIHBpeG1hcC5oZWlnaHQoKSksIG1hc2stPm1f
cGl4bWFwLCBtYXNrLT5zb3VyY2VSZWN0KCkpOwotICAgICAgICBtYXNrUGFpbnRlci5lbmQoKTsK
LSAgICAgICAgcGl4bWFwID0gaW50ZXJtZWRpYXRlUGl4bWFwOwotICAgIH0KLQotICAgIGNvbnN0
IHFyZWFsIHByZXZPcGFjaXR5ID0gcGFpbnRlci0+b3BhY2l0eSgpOwotICAgIGNvbnN0IFFUcmFu
c2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50ZXItPnRyYW5zZm9ybSgpOwotICAgIHBhaW50ZXIt
PnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1hdHJpeCwg
dHJ1ZSk7Ci0gICAgcGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LCBwaXhtYXAsIEZsb2F0
UmVjdCh0ZXh0dXJlUXQuc291cmNlUmVjdCgpKSk7Ci0gICAgcGFpbnRlci0+c2V0VHJhbnNmb3Jt
KHByZXZUcmFuc2Zvcm0pOwotICAgIHBhaW50ZXItPnNldE9wYWNpdHkocHJldk9wYWNpdHkpOwot
fQotCi1QYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAg
IGlmIChjb250ZXh0ICYmIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wYWludEVuZ2luZSgp
LT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpPcGVuR0wyKQotICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFRleHR1cmVNYXBwZXJHTCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFRleHR1cmVNYXBwZXJRdCk7Ci19Ci0KLVBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVy
ZU1hcHBlclF0OjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJp
dG1hcFRleHR1cmVRdCgpKTsKLX0KLQotQml0bWFwVGV4dHVyZVF0OjpCaXRtYXBUZXh0dXJlUXQo
KQotICAgIDogbV9pc1BhY2tlZChmYWxzZSkKLXsKLQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJR
dDo6YmVnaW5QYWludGluZygpCi17Ci0gICAgbV9wYWludGVyLT5zYXZlKCk7Ci19Ci0KLXZvaWQg
VGV4dHVyZU1hcHBlclF0OjplbmRQYWludGluZygpCi17Ci0gICAgbV9wYWludGVyLT5yZXN0b3Jl
KCk7Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi1jbGFzcyBCR1JBMzJQcmVtdWx0
aW1wbGllZEJ1ZmZlclF0IDogcHVibGljIEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNv
bnN0IEludFJlY3QmIHJlY3QsIGJvb2wgb3BhcXVlKQotICAgIHsKLSAgICAgICAgLy8gbV9pbWFn
ZSBpcyBvbmx5IHVzaW5nIGR1cmluZyBwYWludCwgaXQncyBzYWZlIHRvIG92ZXJyaWRlIGl0Lgot
ICAgICAgICBtX2ltYWdlID0gUUltYWdlKHJlY3Quc2l6ZSgpLndpZHRoKCksIHJlY3Quc2l6ZSgp
LmhlaWdodCgpLCBvcGFxdWUgPyBRSW1hZ2U6OkZvcm1hdF9SR0IzMiA6IFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAgICAgICAgaWYgKCFvcGFxdWUpCi0gICAgICAgICAg
ICBtX2ltYWdlLmZpbGwoMCk7Ci0gICAgICAgIG1fcGFpbnRlci5iZWdpbigmbV9pbWFnZSk7Ci0g
ICAgICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9wYWludGVyKTsKLSAgICAgICAg
bV9wYWludGVyLnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7Ci0gICAgICAgIHJldHVy
biAmbV9wYWludGVyOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpIHsgbV9w
YWludGVyLmVuZCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9pbWFn
ZS5iaXRzKCk7IH0KLQotcHJpdmF0ZToKLSAgICBRUGFpbnRlciBtX3BhaW50ZXI7Ci0gICAgUUlt
YWdlIG1faW1hZ2U7Ci19OwotCi1QYXNzT3duUHRyPEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVy
PiBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQoKSk7Ci19Ci0KLXVpbnQ2NF90
IHVpZEZvckltYWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICByZXR1cm4gaW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCktPnNlcmlhbE51bWJlcigpOwotfQotI2VuZGlmCi19OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBl
clF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVy
UXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU1NzE5Ny4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKLQotI2lmbmRl
ZiBUZXh0dXJlTWFwcGVyUXRfaAotI2RlZmluZSBUZXh0dXJlTWFwcGVyUXRfaAotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcFRleHR1cmVRdCA6IHB1YmxpYyBCaXRtYXBUZXh0
dXJlIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlclF0OwotcHVibGljOgotICAgIEJp
dG1hcFRleHR1cmVRdCgpOwotICAgIH5CaXRtYXBUZXh0dXJlUXQoKSB7IGRlc3Ryb3koKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBj
b25zdCB7IHJldHVybiBJbnRTaXplKG1fcGl4bWFwLndpZHRoKCksIG1fcGl4bWFwLmhlaWdodCgp
KTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiwgYm9vbCBvcGFxdWUp
OwotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7Ci0gICAgdmlydHVhbCBib29s
IHNhdmUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuICFtX3BpeG1hcC5pc051bGwoKSB8fCAhbV9pbWFnZS5pc051bGwoKTsgfQot
ICAgIEludFJlY3Qgc291cmNlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgMCwgY29u
dGVudFNpemUoKS53aWR0aCgpLCBjb250ZW50U2l6ZSgpLmhlaWdodCgpKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBwYWNrKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVucGFjaygpOwotICAgIHZpcnR1YWwg
Ym9vbCBpc1BhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYWNrZWQ7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKiBi
aXRzKTsKLQotICAgIFFQYWludGVyKiBwYWludGVyKCkgeyByZXR1cm4gJm1fcGFpbnRlcjsgfQot
Ci1wcml2YXRlOgotICAgIFFQYWludGVyIG1fcGFpbnRlcjsKLSAgICBRUGl4bWFwIG1fcGl4bWFw
OwotICAgIFFJbWFnZSBtX2ltYWdlOwotICAgIGJvb2wgbV9pc1BhY2tlZDsKLX07Ci0KLWNsYXNz
IFRleHR1cmVNYXBwZXJRdCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKLXB1YmxpYzoKLSAgICBU
ZXh0dXJlTWFwcGVyUXQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBC
aXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3Vy
ZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqKTsKLSAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgdmlydHVh
bCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7Ci0gICAg
dmlydHVhbCBJbnRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblBhaW50aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCk7Ci0KLSAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplKFFQYWludGVyKiBwYWludGVyKQotICAgIHsKLSAgICAgICAg
cGFpbnRlci0+c2V0UmVuZGVySGludHMoUVBhaW50ZXI6OkFudGlhbGlhc2luZyB8IFFQYWludGVy
OjpTbW9vdGhQaXhtYXBUcmFuc2Zvcm0sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4
dHVyZU1hcHBlclF0KTsgfQotcHJpdmF0ZToKLSAgICBpbmxpbmUgUVBhaW50ZXIqIGN1cnJlbnRQ
YWludGVyKCkgeyByZXR1cm4gbV9jdXJyZW50U3VyZmFjZSA/IG1fY3VycmVudFN1cmZhY2UtPnBh
aW50ZXIoKSA6IG1fcGFpbnRlcjsgfQotCi0gICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKLSAgICBH
cmFwaGljc0NvbnRleHQqIG1fY29udGV4dDsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZVF0PiBt
X2N1cnJlbnRTdXJmYWNlOwotfTsKLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKaW5kZXgg
ZGQzM2YwZC4uMGVlZjBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcApAQCAtMjAsNiArMjAsOSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKIAorI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKwogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC03MSw1ICs3NCwxMTEgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PiBUZXh0dXJlTWFwcGVyOjphY3F1aXJlVGV4dHVyZUZyb21Qb29sKGNvbnN0IEludFNpemUmIHMK
ICAgICByZXR1cm4gc2VsZWN0ZWRUZXh0dXJlOwogfQogCisKK2NsYXNzIEJpdG1hcFRleHR1cmVJ
bWFnZUJ1ZmZlciA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKKyAgICBmcmllbmQgY2xhc3MgVGV4
dHVyZU1hcHBlckltYWdlQnVmZmVyOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJl
SW1hZ2VCdWZmZXIpOyB9CisgICAgfkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcigpIHsgZGVzdHJv
eSgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSB7IG1faW1hZ2UuY2xlYXIoKTsgfQor
ICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS0+c2l6ZSgp
OyB9CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgb3Bh
cXVlKQorICAgIHsKKyAgICAgICAgQml0bWFwVGV4dHVyZTo6cmVzZXQoc2l6ZSwgb3BhcXVlKTsK
KyAgICAgICAgbV9pbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7CisgICAgfQorCisg
ICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAg
aW5saW5lIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9pbWFn
ZSA/IG1faW1hZ2UtPmNvbnRleHQoKSA6IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29u
dGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIFBpeGVsRm9ybWF0
KTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIFBpeGVsRm9ybWF0KTsKK3ByaXZhdGU6CisgICAgQml0bWFwVGV4dHVyZUltYWdl
QnVmZmVyKCkgeyB9CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlOworfTsKKworCitj
bGFzcyBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUm
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOworICAg
IHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVy
ZSogc3VyZmFjZSkgeyBtX2N1cnJlbnRTdXJmYWNlID0gc3VyZmFjZTt9CisgICAgdmlydHVhbCB2
b2lkIGVuZENsaXAoKSB7IGdyYXBoaWNzQ29udGV4dCgpLT5yZXN0b3JlKCk7IH0KKyAgICBzdGF0
aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihu
ZXcgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyKTsgfQorICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gY3JlYXRlVGV4dHVyZSgpIHsgcmV0dXJuIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKCk7IH0KKyAgICBpbmxpbmUgR3JhcGhpY3NDb250ZXh0KiBjdXJyZW50Q29udGV4dCgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50U3VyZmFjZSA/IHN0YXRpY19jYXN0PEJp
dG1hcFRleHR1cmVJbWFnZUJ1ZmZlcio+KG1fY3VycmVudFN1cmZhY2UuZ2V0KCkpLT5ncmFwaGlj
c0NvbnRleHQoKSA6IGdyYXBoaWNzQ29udGV4dCgpOworICAgIH0KKworICAgIHZpcnR1YWwgQWNj
ZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gVW5hY2NlbGVy
YXRlZDsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX2N1cnJlbnRT
dXJmYWNlOworfTsKKwordm9pZCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRl
bnRzKHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBpeGVsRm9ybWF0IGZv
cm1hdCkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1hZ2UgaW1hZ2UocmVpbnRlcnByZXRf
Y2FzdDx1Y2hhcio+KGRhdGEpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0
KCksIHRhcmdldFJlY3Qud2lkdGgoKSAqIDQsIChmb3JtYXQgPT0gUkdCQUZvcm1hdCB8fCBmb3Jt
YXQgPT0gQkdSQUZvcm1hdCkgPyBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCA6
IFFJbWFnZTo6Rm9ybWF0X1JHQjMyKTsKKyAgICBpZiAoZm9ybWF0ID09IEJHUkFGb3JtYXQgfHwg
Zm9ybWF0ID09IEJHUkZvcm1hdCkKKyAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZ2JTd2FwcGVkKCk7
CisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX2ltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIHBhaW50ZXItPnNhdmUoKTsKKyAgICBwYWludGVyLT5zZXRDb21wb3NpdGlv
bk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworICAgIHBhaW50ZXItPmRy
YXdJbWFnZSh0YXJnZXRSZWN0LCBpbWFnZSk7CisgICAgcGFpbnRlci0+cmVzdG9yZSgpOworI2Vu
ZGlmCit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhJ
bWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIFBpeGVsRm9ybWF0KQoreworICAgIG1faW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0lt
YWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCB0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBD
b21wb3NpdGVDb3B5KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmJlZ2lu
Q2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gY3VycmVudENvbnRleHQo
KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcmV2aW91c1RyYW5zZm9ybSA9IGNvbnRleHQt
PmdldFRyYW5zZm9ybSgpOworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5jb25j
YXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICBjb250ZXh0LT5jbGlwKHJlY3QpOworICAgIGNvbnRl
eHQtPnNldFRyYW5zZm9ybShwcmV2aW91c1RyYW5zZm9ybSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJl
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJl
KQoreworICAgIGNvbnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciYgdGV4dHVyZUltYWdlQnVm
ZmVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyJj4odGV4dHVy
ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gY3VycmVudENvbnRleHQoKTsKKyAg
ICBJbWFnZUJ1ZmZlciogaW1hZ2UgPSB0ZXh0dXJlSW1hZ2VCdWZmZXIubV9pbWFnZS5nZXQoKTsK
KyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tlZEltYWdlOworCisgICAgaWYgKG1hc2tUZXh0
dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY29uc3QgQml0bWFwVGV4
dHVyZUltYWdlQnVmZmVyKiBtYXNrID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUlt
YWdlQnVmZmVyKj4obWFza1RleHR1cmUpOworICAgICAgICBtYXNrZWRJbWFnZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUobWFza1RleHR1cmUtPmNvbnRlbnRTaXplKCkpOworICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIG1hc2tDb250ZXh0ID0gbWFza2VkSW1hZ2UtPmNvbnRleHQoKTsKKyAgICAgICAg
bWFza0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQ6Onplcm8oKSwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGlmIChvcGFjaXR5IDwg
MSkgeworICAgICAgICAgICAgbWFza0NvbnRleHQtPnNldEFscGhhKG9wYWNpdHkpOworICAgICAg
ICAgICAgb3BhY2l0eSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgbWFza0NvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcihtYXNrLT5tX2ltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQ
b2ludDo6emVybygpLCBDb21wb3NpdGVEZXN0aW5hdGlvbkluKTsKKyAgICAgICAgaW1hZ2UgPSBt
YXNrZWRJbWFnZS5nZXQoKTsKKyAgICB9CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgY29u
dGV4dC0+c2V0QWxwaGEob3BhY2l0eSk7CisgICAgY29udGV4dC0+Y29uY2F0VHJhbnNmb3JtKG1h
dHJpeCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCB0YXJnZXRSZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK1Bhc3NP
d25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEFjY2VsZXJhdGlvbk1v
ZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBVbmFjY2VsZXJhdGVkKQorICAgICAgICByZXR1
cm4gVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gcGxhdGZv
cm1DcmVhdGVBY2NlbGVyYXRlZCgpOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmluZGV4
IGQ2NmZlMmYuLmVhNDg3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtNDcsNDYgKzQ3LDMxIEBAIGNs
YXNzIFRleHR1cmVNYXBwZXI7CiBjbGFzcyBCaXRtYXBUZXh0dXJlICA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEJpdG1hcFRleHR1cmU+IHsKIHB1YmxpYzoKICAgICBlbnVtIFBpeGVsRm9ybWF0IHsgQkdS
QUZvcm1hdCwgUkdCQUZvcm1hdCwgQkdSRm9ybWF0LCBSR0JGb3JtYXQgfTsKLSAgICBCaXRtYXBU
ZXh0dXJlKCkgOiBtX2xvY2tDb3VudCgwKSB7fQorICAgIEJpdG1hcFRleHR1cmUoKQorICAgICAg
ICA6IG1faXNPcGFxdWUodHJ1ZSkKKyAgICB7CisgICAgfQorCiAgICAgdmlydHVhbCB+Qml0bWFw
VGV4dHVyZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgeyB9CiAKLSAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBp
bnQgYnBwKCkgY29uc3QgeyByZXR1cm4gMzI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29u
dGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCZ0LCBCaXRtYXBUZXh0
dXJlOjpQaXhlbEZvcm1hdCBmb3JtYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29u
dGVudHModm9pZCosIGNvbnN0IEludFJlY3QmLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBm
b3JtYXQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgaW50IGJwcCgpIGNvbnN0IHsgcmV0dXJuIDMyOyB9CiAgICAgdmlydHVhbCB2b2lk
IHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgb3BhcXVlID0gZmFsc2UpCiAgICAgewog
ICAgICAgICBtX2lzT3BhcXVlID0gb3BhcXVlOwogICAgICAgICBtX2NvbnRlbnRTaXplID0gc2l6
ZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFjaygpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCB1bnBhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQYWNrZWQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5Q
YWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5k
UGFpbnQoKSA9IDA7Ci0KLSAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgQml0bWFwVGV4
dHVyZSBtaWdodCBtb2RpZnkgdGhlIGJpdHMgZGlyZWN0bHkgKHN3aXp6bGUpLgotICAgIC8vIFRo
dXMsIHRoaXMgbWV0aG9kIGlzIG9ubHkgcmVjb21tZW5kZWQgZm9yIGJ1ZmZlciB1cGRhdGUsIHN1
Y2ggYXMgdXNlZCBieSBXZWJLaXQyLgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhQ
aXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIHZvaWQqIGJpdHMpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlUmF3Q29udGVudHMoY29uc3QgSW50UmVjdCYsIGNvbnN0IHZvaWQqIGJpdHMp
IHsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnRNZWRp
YSgpCi0gICAgewotICAgICAgICByZXR1cm4gYmVnaW5QYWludChJbnRSZWN0KDAsIDAsIHNpemUo
KS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzVG9JbWFnZShJbWFnZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2F2ZShjb25z
dCBTdHJpbmcmKSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgaW5saW5lIHZvaWQgbG9jaygpIHsg
KyttX2xvY2tDb3VudDsgfQotICAgIGlubGluZSB2b2lkIHVubG9jaygpIHsgLS1tX2xvY2tDb3Vu
dDsgfQotICAgIGlubGluZSBib29sIGlzTG9ja2VkKCkgeyByZXR1cm4gbV9sb2NrQ291bnQ7IH0K
ICAgICBpbmxpbmUgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dFNpemU7IH0KICAgICBpbmxpbmUgaW50IG51bWJlck9mQnl0ZXMoKSBjb25zdCB7IHJldHVybiBz
aXplKCkud2lkdGgoKSAqIHNpemUoKS5oZWlnaHQoKSAqIGJwcCgpID4+IDM7IH0KKyAgICBpbmxp
bmUgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNPcGFxdWU7IH0KIAogcHJvdGVj
dGVkOgotICAgIGludCBtX2xvY2tDb3VudDsKICAgICBJbnRTaXplIG1fY29udGVudFNpemU7CiAg
ICAgYm9vbCBtX2lzT3BhcXVlOwogfTsKQEAgLTk3LDMyICs4MiwyNiBAQCBjbGFzcyBUZXh0dXJl
TWFwcGVyIHsKICAgICBmcmllbmQgY2xhc3MgQml0bWFwVGV4dHVyZTsKIAogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCA9IDApOworICAgIGVudW0gQWNjZWxlcmF0aW9uTW9kZSB7IEFjY2Vs
ZXJhdGVkLCBVbmFjY2VsZXJhdGVkIH07CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1h
cHBlcj4gY3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbW9kZSA9IFVuYWNjZWxlcmF0ZWQpOwogICAg
IHZpcnR1YWwgflRleHR1cmVNYXBwZXIoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4
dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wZiwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1Rl
eHR1cmUgPSAwKSA9IDA7CiAKICAgICAvLyBtYWtlcyBhIHN1cmZhY2UgdGhlIHRhcmdldCBmb3Ig
dGhlIGZvbGxvd2luZyBkcmF3VGV4dHVyZSBjYWxscy4KICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1
cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRH
cmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KikgPSAwOwotICAgIHZpcnR1YWwgR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEdy
YXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIHsgbV9jb250ZXh0ID0gY29u
dGV4dDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7
IHJldHVybiBtX2NvbnRleHQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBlbmRDbGlwKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVh
dGVUZXh0dXJlKCkgPSAwOwotICAgIEludFNpemUgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1
cm4gbV92aWV3cG9ydFNpemU7IH0KLSAgICB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBJbnRT
aXplJiBzKSB7IG1fdmlld3BvcnRTaXplID0gczsgfQogCiAgICAgdm9pZCBzZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IH0KICAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShU
ZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKSB7IG1fdGV4dERyYXdpbmdNb2RlID0gbW9kZTsgfQog
CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNv
bnN0IHsgcmV0dXJuIG1faW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KICAgICBUZXh0RHJhd2luZ01v
ZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3RleHREcmF3aW5nTW9k
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBhbGxvd1BhcnRpYWxVcGRhdGVzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNPcGVuR0xCYWNrZWQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCkgeyBtX3RyYW5zZm9ybSA9IG1hdHJpeDsgfQotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Cisg
ICAgdmlydHVhbCBBY2NlbGVyYXRpb25Nb2RlIGFjY2VsZXJhdGlvbk1vZGUoKSBjb25zdCA9IDA7
CiAKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZygpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBlbmRQYWludGluZygpIHsgfQpAQCAtMTMwLDIyICsxMDksMjkgQEAgcHVibGljOgogICAgIC8v
IEEgc3VyZmFjZSBpcyByZWxlYXNlZCBpbXBsaWNpdGx5IHdoZW4gZGVyZWZlcmVuY2VkLgogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhY3F1aXJlVGV4dHVyZUZyb21Qb29s
KGNvbnN0IEludFNpemUmKTsKIAotCiBwcm90ZWN0ZWQ6CiAgICAgVGV4dHVyZU1hcHBlcigpCiAg
ICAgICAgIDogbV9pbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uRGVmYXVsdCkKICAg
ICAgICAgLCBtX3RleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwpCi0gICAge30KKyAgICB7Cisg
ICAgfQogCiBwcml2YXRlOgorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBzdGF0aWMg
UGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCk7Cisj
ZWxzZQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IHBsYXRmb3JtQ3JlYXRl
QWNjZWxlcmF0ZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCiAg
ICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eTsKICAgICBUZXh0
RHJhd2luZ01vZGVGbGFncyBtX3RleHREcmF3aW5nTW9kZTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtX3RyYW5zZm9ybTsKLSAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwogICAgIFZlY3Rv
cjxSZWZQdHI8Qml0bWFwVGV4dHVyZT4gPiBtX3RleHR1cmVQb29sOworICAgIEdyYXBoaWNzQ29u
dGV4dCogbV9jb250ZXh0OwogfTsKIAotfTsKK30KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuY3BwCmluZGV4IGNjZjQ5YmMuLjQ4YmMyMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
IAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKICNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCiAKIG5hbWVzcGFjZSB7CkBAIC0x
NTYsMTIgKzE1NywxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZQogICAgIGlmICghdGV4dHVy
ZU1hcHBlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IEFkZCBkaXJlY3RseSBj
b21wb3NpdGVkIGltYWdlcy4KLSAgICBGbG9hdFJlY3QgZGlydHlSZWN0ID0gbV9jdXJyZW50Q29u
dGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRz
RGlzcGxheVJlY3Q7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29u
dGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKIAogICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7
IHRpbGVJbmRleCA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CiAgICAgICAg
IE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxlSW5kZXhdOwotICAgICAgICBGbG9h
dFJlY3QgcmVjdCA9IGRpcnR5UmVjdDsKICAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUpCiAgICAg
ICAgICAgICB0aWxlLnRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAg
ICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiYgdGV4dHVyZSA9IHRpbGUudGV4dHVyZTsKQEAg
LTE2OSwzMSArMTY4LDQ0IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQo
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllCiAKICAgICAgICAgaWYg
KHRpbGUubmVlZHNSZXNldCB8fCB0ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IHRpbGVTaXplIHx8
ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IGZh
bHNlOwotICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQodGlsZVNpemUsIG1fY3VycmVudENvbnRl
bnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSA/IGZhbHNlIDogbV9zdGF0
ZS5jb250ZW50c09wYXF1ZSk7Ci0gICAgICAgICAgICByZWN0ID0gdGlsZS5yZWN0OworICAgICAg
ICAgICAgdGV4dHVyZS0+cmVzZXQodGlsZVNpemUsIG1fc3RhdGUuY29udGVudHNPcGFxdWUpOwor
ICAgICAgICAgICAgZGlydHlSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KSk7
CiAgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gUGFpbnQgdGhlIGVudGlyZSBkaXJ0eSByZWN0IGludG8gYW4g
aW1hZ2UgYnVmZmVyLiBUaGlzIGVuc3VyZXMgd2Ugb25seSBwYWludCBvbmNlLgorICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGRpcnR5UmVj
dC5zaXplKCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGltYWdlQnVmZmVyLT5j
b250ZXh0KCk7CisgICAgeworICAgICAgICBjb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KHRleHR1cmVNYXBwZXItPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAg
ICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2lu
Z01vZGUoKSk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRp
cnR5UmVjdC55KCkpOworICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMo
KmNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRl
bnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpCisgICAgICAgICAgICBjb250ZXh0LT5k
cmF3SW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJH
QiwgbV9zdGF0ZS5jb250ZW50c1JlY3QpOworICAgIH0KIAotICAgICAgICBJbnRSZWN0IGNvbnRl
bnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJlY3QpOwotICAgICAgICBjb250ZW50UmVj
dC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Ci0gICAgICAgIGlmIChjb250ZW50
UmVjdC5pc0VtcHR5KCkpCisgICAgLy8gVGhpcyBzdWxkIGJlIGEgcmVmZXJlbmNlIGNvcHkgb25s
eS4KKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgpOwor
CisgICAgLy8gRGl2aWRlIHRoZSBpbWFnZSB0byB0aWxlcy4KKyAgICBmb3IgKHNpemVfdCB0aWxl
SW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX293bmVkVGlsZXMuc2l6ZSgpOyArK3RpbGVJbmRleCkg
eworICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZUluZGV4XTsKKyAg
ICAgICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJlY3QpOwor
ICAgICAgICB0YXJnZXRSZWN0LmludGVyc2VjdChkaXJ0eVJlY3QpOworICAgICAgICBpZiAodGFy
Z2V0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgSW50UmVj
dCBzb3VyY2VSZWN0ID0gdGFyZ2V0UmVjdDsKIAotICAgICAgICBGbG9hdFJlY3QgY29udGVudFJl
Y3RJblRpbGVDb29yZGluYXRlcyA9IGNvbnRlbnRSZWN0OwotICAgICAgICBGbG9hdFBvaW50IG9m
ZnNldCgtdGlsZS5yZWN0LngoKSwgLXRpbGUucmVjdC55KCkpOwotICAgICAgICBjb250ZW50UmVj
dEluVGlsZUNvb3JkaW5hdGVzLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0KLSAgICAg
ICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQodGV4dHVyZS0+YmVnaW5Q
YWludChlbmNsb3NpbmdJbnRSZWN0KGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMpKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1h
cHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICAgICAgICAgIGNvbnRleHQu
c2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKLSAg
ICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9mZnNldC54KCksIG9mZnNldC55KCkpOwotICAg
ICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAg
ICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29u
dGVudFR5cGUpCi0gICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobV9jdXJyZW50Q29u
dGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5
ZXJDb250ZW50cyhjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZENvbnRlbnRSZWN0KSk7
Ci0gICAgICAgICAgICB0ZXh0dXJlLT5lbmRQYWludCgpOwotICAgICAgICB9CisgICAgICAgIC8v
IE5vcm1hbGl6ZSBzb3VyY2VSZWN0IHRvIHRoZSBidWZmZXIncyBjb29yZGluYXRlcy4KKyAgICAg
ICAgc291cmNlUmVjdC5tb3ZlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7CisKKyAg
ICAgICAgLy8gTm9ybWFsaXplIHRhcmdldFJlY3QgdG8gdGhlIHRleHR1cmUncyBjb29yZGlucWF0
ZXMuCisgICAgICAgIHRhcmdldFJlY3QubW92ZSgtdGlsZS5yZWN0LngoKSwgLXRpbGUucmVjdC55
KCkpOworICAgICAgICB0aWxlLnRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlLmdldCgpLCB0
YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBCaXRtYXBUZXh0dXJlOjpSR0JBRm9ybWF0KTsKICAgICB9
CiAKICAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOwpAQCAtNDgxLDcg
KzQ5Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNsZWFyQWxsRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VUaWxlcygpCiAgICAgfQogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRD
b250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qgdm9pZCogYml0cykKK3ZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCB2b2lkKiBkYXRhLCBC
aXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3JtYXQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVy
ZU1hcHBlcik7CiAKQEAgLTQ5OCw3ICs1MTAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpz
ZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUgog
ICAgIGlmICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCiAgICAgICAgIHRpbGUuYmFja0J1ZmZl
ci50ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgdGlsZS5i
YWNrQnVmZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Quc2l6ZSgpLCBmYWxzZSk7Ci0gICAg
dGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKHNvdXJjZVJlY3QsIGJp
dHMpOworICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhkYXRhLCBz
b3VyY2VSZWN0LCBmb3JtYXQpOwogICAgIHRpbGUuaXNCYWNrQnVmZmVyVXBkYXRlZCA9IHRydWU7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKaW5kZXggZmU0YjE0Yy4uMzA1MzU3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmgKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRUaWxlT3duZXJzaGlwKFRpbGVPd25lcnNoaXAgb3duZXJzaGlwKSB7IG1fc3RhdGUudGlsZU93
bmVyc2hpcCA9IG93bmVyc2hpcDsgfQogICAgIGludCBjcmVhdGVDb250ZW50c1RpbGUoZmxvYXQg
c2NhbGUpOwogICAgIHZvaWQgcmVtb3ZlQ29udGVudHNUaWxlKGludCBpZCk7Ci0gICAgdm9pZCBz
ZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qgdm9pZCogYml0cyk7CisgICAgdm9p
ZCBzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgdm9pZCosIEJpdG1hcFRleHR1cmU6OlBp
eGVsRm9ybWF0KTsKICAgICB2b2lkIHNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZvckRpcmVjdGx5
Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJlKik7CiAgICAgdm9pZCBjbGVhckFs
bERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKTsKICAgICB2b2lkIHB1cmdlTm9kZVRleHR1
cmVzUmVjdXJzaXZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJh
bWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAppbmRleCBjOGU4ZGFk
Li43NDE4ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTMzNiw3ICszMzYs
NiBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbgogICAgIHRleHR1cmVNYXBwZXItPnNldEdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAg
dGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQtPnRleHREcmF3aW5nTW9k
ZSgpKTsKLSAgICB0ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoZnJhbWUtPnZpZXcoKS0+
ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAgICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0gcGFpbnRl
ci0+d29ybGRUcmFuc2Zvcm0oKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRy
aXgoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCmluZGV4IGU0ODJhZTAuLjdkYjkzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTItMDEtMjkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50
aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1h
cHBlciBBUEkgdG8gdXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdW51c2VkIFRleHR1cmVN
YXBwZXIgQVBJIGNhbGxzLCBsaWtlIHNldFZpZXdwb3J0U2l6ZS4KKyAgICAgICAgVXNlIFRleHR1
cmVNYXBwZXI6OkFjY2VsZXJhdGlvbk1vZGUgaW5zdGVhZCBvZiBjcmVhdGluZyBUZXh0dXJlTWFw
cGVyR0wvVGV4dHVyZU1hcHBlclF0CisgICAgICAgIGRpcmVjdGx5LgorCisgICAgICAgICogQXBp
L3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJDb21wb3Np
dGVkTGF5ZXJzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RH
cmFwaGljc0xheWVyKToKKwogMjAxMi0wMS0yNSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBbUXRdIHB1YmxpYy5wcmkgaXMgbWlzc2luZyBkZXBlbmRlbmN5IHRv
IHF1aWNrIG1vZHVsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUGFnZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0LmNwcAppbmRleCA0MGU2YjE0Li4zZjcxMzQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCkBAIC0yOCwxMiArMjgsOCBA
QAogI2VuZGlmCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhU
VVJFX01BUFBFUikKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCi0KLSNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0jaW5jbHVkZSAib3BlbmdsL1RleHR1cmVNYXBwZXJH
TC5oIgotI2VuZGlmCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzYsNyArNzIs
NyBAQCB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyKiBsYXllcikKIHsKICAgICBpZiAobGF5ZXIpIHsKICAgICAgICAgdGV4dHVyZU1hcHBl
ck5vZGVDbGllbnQgPSBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdChwYWdl
LT5tYWluRnJhbWUoKSwgbGF5ZXIpKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQt
PnNldFRleHR1cmVNYXBwZXIoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJRdCkpOworICAgICAg
ICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoKSk7CiAgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExh
eWVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNjcsMTEgKzI2MywxMSBAQCB2b2lk
IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyKQogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICAgICAgUUdyYXBo
aWNzVmlldyogZ3JhcGhpY3NWaWV3ID0gdmlldy0+c2NlbmUoKS0+dmlld3MoKVswXTsKICAgICAg
ICAgaWYgKGdyYXBoaWNzVmlldyAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCkgJiYgZ3JhcGhp
Y3NWaWV3LT52aWV3cG9ydCgpLT5pbmhlcml0cygiUUdMV2lkZ2V0IikpIHsKLSAgICAgICAgICAg
IHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJH
TDo6Y3JlYXRlKCkpOworICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRl
eHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6OkFjY2VsZXJh
dGVkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICB0
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyUXQ6
OmNyZWF0ZSgpKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODc4NjRj
Zi4uNTA1MThlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTI5ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtU
ZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXIgQVBJIHRvIHVzZSBJbWFnZUJ1ZmZlcnMgd2hl
biBwb3NzaWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc3MTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXNlIFRleHR1cmVNYXBwZXI6OkFjY2VsZXJhdGlvbk1vZGUgaW5zdGVhZCBvZiBjcmVhdGlu
ZyBUZXh0dXJlTWFwcGVyR0wgZGlyZWN0bHkuCisgICAgICAgIFVzZSB0aGUgbmV3IEFQSSBjYWxs
cyBmb3IgdXBkYXRpbmcgQml0bWFwVGV4dHVyZSBjb250ZW50LgorCisgICAgICAgICogVUlQcm9j
ZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcik6CisKIDIwMTItMDEtMjkgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMDYwMjIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
TGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xh
eWVyVHJlZUhvc3RQcm94eVF0LmNwcAppbmRleCA0NWRjOGNlLi5iODg5NTk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAK
QEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZUlELmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckdMLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlVwZGF0
ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJX
ZWJMYXllclRyZWVJbmZvLmgiCkBAIC0xNzAsNyArMTcwLDcgQEAgTGF5ZXJUcmVlSG9zdFByb3h5
Ojp+TGF5ZXJUcmVlSG9zdFByb3h5KCkKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRv
Q3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9h
dCBvcGFjaXR5KQogewogICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1
cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgICAgICBtX3RleHR1cmVN
YXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6QWNjZWxlcmF0ZWQp
OwogCiAgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKICAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50
Um9vdExheWVyID0gcm9vdExheWVyKCk7CkBAIC0xODIsOSArMTgyLDYgQEAgdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXQKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdMaW50
IHZpZXdwb3J0WzRdOwotICAgIGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KTsK
LSAgICBtX3RleHR1cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKHZpZXdwb3J0WzJd
LCB2aWV3cG9ydFszXSkpOwogICAgIG5vZGUtPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFw
cGVyLmdldCgpKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKICAgICBt
X3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOwpAQCAtMzYzLDcgKzM2MCw3IEBAIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgSW50UmVjCiAKICAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVy
ZU1hcHBlci5nZXQoKSk7CiAgICAgUUltYWdlIGltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2Uo
KTsKLSAgICBub2RlLT5zZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKG5vZGVUaWxlSUQsIHNvdXJj
ZVJlY3QsIHRhcmdldFJlY3QsIGltYWdlLmNvbnN0Qml0cygpKTsKKyAgICBub2RlLT5zZXRDb250
ZW50c1RpbGVCYWNrQnVmZmVyKG5vZGVUaWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGNv
bnN0X2Nhc3Q8dWNoYXIqPihpbWFnZS5jb25zdEJpdHMoKSksIEJpdG1hcFRleHR1cmU6OlJHQkFG
b3JtYXQpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRf
dCBpbWFnZUlELCBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCkKQEAgLTM4NCw3ICszODEsNyBAQCB2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBTaGFy
ZWFibGVCaXRtYXAqIGJpdG1hcCkKICAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlLmNv
cHkocmVjdCk7CiAgICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1f
dGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwogICAgICAgICAgICAgdGV4dHVyZS0+cmVz
ZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhhKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnVw
ZGF0ZVJhd0NvbnRlbnRzKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBz
dWJJbWFnZS5jb25zdEJpdHMoKSk7CisgICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50
cyhjb25zdF9jYXN0PHVjaGFyKj4oaW1hZ2UuY29uc3RCaXRzKCkpLCBJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSwgQml0bWFwVGV4dHVyZTo6UkdCQUZvcm1hdCk7CiAgICAg
ICAgICAgICB0aWxlZEltYWdlLmFkZChyZWN0LmxvY2F0aW9uKCksIHRleHR1cmUpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNDQ3LDcgKzQ0NCw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpl
bnN1cmVSb290TGF5ZXIoKQogICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6
ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCiAgICAgbV9yb290TGF5ZXIt
PnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIp
Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Cisg
ICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFw
cGVyOjpBY2NlbGVyYXRlZCk7CiAgICAgdG9UZXh0dXJlTWFwcGVyTm9kZShtX3Jvb3RMYXllci5n
ZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="125759"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124641</attachid>
            <date>2012-01-30 17:45:24 -0800</date>
            <delta_ts>2012-01-30 17:51:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>238352</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiYTczM2E3Li42MzM0NjZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDczICsxLDMgQEAKLTIwMTItMDEt
MzAgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFVucmV2
aWV3ZWQgZ2FyZGVuaW5nLiBNYXJraW5nIGZhc3QvanMvZGZnLWludDMyYXJyYXktb3ZlcmZsb3ct
dmFsdWVzLmh0bWwgYXMgc2xvdwotICAgICAgICBmb3IgQ2hyb21pdW0gRGVidWcgYm90cy4KLQot
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKLQotMjAx
Mi0wMS0zMCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAg
ZmFzdC9jc3MvZm9udHNpemUtdW5pdC1yZW1zLWNyYXNoLmh0bWwgc2hvdWxkIHVzZSBkdW1wQXNU
ZXh0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM1
MQotCi0gICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KLQotICAgICAgICBTd2l0Y2hp
bmcgdGhlIGFib3ZlIHRlc3QgdG8gb25seSB1c2UgdGV4dCByZXN1bHRzIGFzIHRoZSBodG1sIGVs
ZW1lbnQgaXMgZGlzcGxheTpub25lLgotCi0gICAgICAgICogZmFzdC9jc3MvZm9udHNpemUtdW5p
dC1yZW1zLWNyYXNoLWV4cGVjdGVkLnR4dDoKLSAgICAgICAgKiBmYXN0L2Nzcy9mb250c2l6ZS11
bml0LXJlbXMtY3Jhc2guaHRtbDoKLQotMjAxMi0wMS0zMCAgTWlobmVhIE92aWRlbmllICA8bWlo
bmVhQGFkb2JlLmNvbT4KLQotICAgICAgICBbQ1NTUmVnaW9uc11BZGQgc3VwcG9ydCBmb3IgYmFj
a2dyb3VuZC1jb2xvciBpbiByZWdpb24gc3R5bGluZwotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0ODgKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXZp
ZCBIeWF0dC4KLQotICAgICAgICBFbmFibGUgdGhlIHJlZ2lvbiBzdHlsaW5nIHRlc3RzIGFnYWlu
LgotCi0gICAgICAgICogcGxhdGZvcm0vbWFjLXNub3dsZW9wYXJkL1NraXBwZWQ6Ci0KLTIwMTIt
MDEtMzAgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KLQotICAgICAgICBJbmRl
eGVkREI6IEFkZCB0ZXN0cyBmb3Igc3RydWN0dXJlZCBjbG9uZSBkYXRhCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg5NwotCi0gICAgICAgIFZhbGlk
YXRlIHRoYXQgdGhlIHR5cGVzIGxpc3RlZCBpbiB0aGUgSFRNTDUgInN0cnVjdHVyZWQgY2xvbmUg
YWxnb3JpdGhtIgotICAgICAgICByb3VuZCB0cmlwIHByb3Blcmx5IHRocm91Z2ggSW5kZXhlZCBE
QiBzdG9yYWdlLiBUeXBlcyB3aXRoIGluY29tcGxldGUKLSAgICAgICAgc3VwcG9ydCBpbiB0aGUg
Q2hyb21pdW0gcG9ydCBhcmUgZXhjbHVkZWQgKGh0dHA6Ly9jcmJ1Zy5jb20vMTA4MDEyKS4KLSAg
ICAgICAgTGFuZGluZyBkaXNhYmxlZCBzaW5jZSBjci1saW51eCBpcyBmYWlsaW5nIHRlc3QgZm9y
IHVua25vd24gcmVhc29ucy4KLQotICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgotCi0g
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgotICAgICAg
ICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy90ZXN0LWRhdGEuaHRtbDogQWRkZWQuCi0g
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3Rlc3QtZGF0YS50eHQ6IEFkZGVk
LgotICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KLSAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25l
Lmh0bWw6IEFkZGVkLgotCi0yMDEyLTAxLTMwICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bn
b29nbGUuY29tPgotCi0gICAgICAgIE1lbW9yeSBsZWFrIGNhdXNlZCBieSBQZWVyQ29ubmVjdGlv
biBhZGQgYSBOVUxMIG1lZGlhIHN0cmVhbQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNTAKLQotICAgICAgICBBZGRlZCBhIGJhc2ljIExheW91dFRl
c3QgZm9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50cyB0byBQZWVyQ29ubmVjdGlvbjo6YWRkU3Ry
ZWFtKCkuCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICAqIGZh
c3QvbWVkaWFzdHJlYW0vcGVlcmNvbm5lY3Rpb24tYWRkc3RyZWFtLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCi0gICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9wZWVyY29ubmVjdGlvbi1hZGRzdHJlYW0u
aHRtbDogQWRkZWQuCi0gICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9zY3JpcHQtdGVzdHMvcGVl
cmNvbm5lY3Rpb24tYWRkc3RyZWFtLmpzOiBBZGRlZC4KLQotMjAxMi0wMS0zMCAgR3JlZyBCaWxs
b2NrICA8Z2JpbGxvY2tAZ29vZ2xlLmNvbT4KLQotICAgICAgICBFbmFibGUgd2ViIGludGVudHMg
bGF5b3V0IHRlc3RzIGZvciBDaHJvbWl1bSBidWlsZC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzQ3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlv
c3VrZSBOaXdhLgotCi0gICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0OgotCiAyMDEyLTAxLTMwICBQYXJhZyBSYWRrZSAgPG5ycXY2M0Btb3Rvcm9sYS5jb20+
CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjgyNTgwKTogUmVwcm9kdWNpYmxlIGNyYXNoIGluIENT
U1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9mb250c2l6ZS11bml0LXJlbXMtY3Jhc2gtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9jc3MvZm9udHNpemUtdW5pdC1yZW1zLWNyYXNoLWV4cGVjdGVkLnR4dApp
bmRleCBlYmQzNWJmLi5lNTAwNjFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9m
b250c2l6ZS11bml0LXJlbXMtY3Jhc2gtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL2ZvbnRzaXplLXVuaXQtcmVtcy1jcmFzaC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwy
IEBACi0KLWlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotCi1UZXN0IGNhc2UgZm9yIDYxOTg5Ci1UaGlzIGlzIHRl
c3QgZm9yIEJ1ZyA2MTk4OSBObyBjcmFzaCBtZWFucyB0ZXN0IFBBU1MuCi0KK2xheWVyIGF0ICgw
LDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MvZm9udHNpemUtdW5pdC1yZW1zLWNyYXNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9mb250c2l6ZS11bml0LXJlbXMtY3Jhc2guaHRtbApp
bmRleCA0ZDNkMTZmLi5kZTRjYzkzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9m
b250c2l6ZS11bml0LXJlbXMtY3Jhc2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9m
b250c2l6ZS11bml0LXJlbXMtY3Jhc2guaHRtbApAQCAtMSw3ICsxLDIgQEAKLTxodG1sIHN0eWxl
PSJkaXNwbGF5Om5vbmU7Ij4KLTxzY3JpcHQ+Ci1pZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQotICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLTwvc2NyaXB0Pgot
PHRpdGxlIHN0eWxlPSJsaW5lLWhlaWdodDogMXJlbTsiPlRlc3QgY2FzZSBmb3IgNjE5ODk8L3Rp
dGxlPgorPGh0bWwgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjx0aXRsZSBzdHlsZT0ibGluZS1oZWln
aHQ6IDFyZW07Ij5UZXN0IGNhc2UgZm9yIDYxOTg5PC90aXRsZT4KIDxwPlRoaXMgaXMgdGVzdCBm
b3IgQnVnIDYxOTg5IE5vIGNyYXNoIG1lYW5zIHRlc3QgUEFTUy48L3A+PC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9wZWVyY29ubmVjdGlvbi1hZGRzdHJl
YW0tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9wZWVyY29ubmVj
dGlvbi1hZGRzdHJlYW0tZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5OTU4MGNmLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vcGVl
cmNvbm5lY3Rpb24tYWRkc3RyZWFtLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEz
ICswLDAgQEAKLVRlc3RzIFBlZXJDb25uZWN0aW9uOjphZGRTdHJlYW0oKS4KLQotT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgotCi0KLVBBU1MgcGMuYWRkU3RyZWFtKCkgdGhyZXcgVHlwZUVycm9y
OiBOb3QgZW5vdWdoIGFyZ3VtZW50cwotUEFTUyBwYy5hZGRTdHJlYW0odW5kZWZpbmVkKSB0aHJl
dyBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKLVBBU1MgcGMuYWRk
U3RyZWFtKG51bGwpIHRocmV3IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlv
biAxNwotUEFTUyBwYy5hZGRTdHJlYW0obmV3IEFycmF5KCkpIHRocmV3IFR5cGVFcnJvcjogVHlw
ZSBlcnJvcgotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRF
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vcGVlcmNvbm5lY3Rp
b24tYWRkc3RyZWFtLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL3BlZXJjb25u
ZWN0aW9uLWFkZHN0cmVhbS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2Jl
OTBmLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vcGVlcmNvbm5l
Y3Rpb24tYWRkc3RyZWFtLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Ci08aHRtbD4KLTxoZWFk
PgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgotPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgotPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Ci08c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3BlZXJjb25u
ZWN0aW9uLWFkZHN0cmVhbS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL3NjcmlwdC10ZXN0cy9wZWVyY29ubmVj
dGlvbi1hZGRzdHJlYW0uanMgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL3NjcmlwdC10
ZXN0cy9wZWVyY29ubmVjdGlvbi1hZGRzdHJlYW0uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDllODQxZDUuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVh
bS9zY3JpcHQtdGVzdHMvcGVlcmNvbm5lY3Rpb24tYWRkc3RyZWFtLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMzIgKzAsMCBAQAotZGVzY3JpcHRpb24oIlRlc3RzIFBlZXJDb25uZWN0aW9uOjphZGRT
dHJlYW0oKS4iKTsKLQotdmFyIHBjID0gbmV3IHdlYmtpdFBlZXJDb25uZWN0aW9uKCJTVFVOIHNv
bWUuc2VydmVyLmNvbSIsIGZ1bmN0aW9uKCkge30pOwotCi10cnkgewotICAgIHBjLmFkZFN0cmVh
bSgpOwotfSBjYXRjaChlKSB7Ci0gICAgdGVzdFBhc3NlZCgncGMuYWRkU3RyZWFtKCkgdGhyZXcg
JyArIGUpOwotfQotCi10cnkgewotICAgIHBjLmFkZFN0cmVhbSh1bmRlZmluZWQpOwotfSBjYXRj
aChlKSB7Ci0gICAgdGVzdFBhc3NlZCgncGMuYWRkU3RyZWFtKHVuZGVmaW5lZCkgdGhyZXcgJyAr
IGUpOwotfQotCi10cnkgewotICAgIHBjLmFkZFN0cmVhbShudWxsKTsKLX0gY2F0Y2goZSkgewot
ICAgIHRlc3RQYXNzZWQoJ3BjLmFkZFN0cmVhbShudWxsKSB0aHJldyAnICsgZSk7Ci19Ci0KLXRy
eSB7Ci0gICAgcGMuYWRkU3RyZWFtKG5ldyBBcnJheSgpKTsKLX0gY2F0Y2goZSkgewotICAgIHRl
c3RQYXNzZWQoJ3BjLmFkZFN0cmVhbShuZXcgQXJyYXkoKSkgdGhyZXcgJyArIGUpOwotfQotCi1m
aW5pc2hKU1Rlc3QoKTsKLQotd2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Ci0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dAppbmRleCA1MTliZDM0Li5iOTNiYzY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC00NSw3ICs0NSw2IEBAIEJVR0NS
MjQxODIgU0xPVyBTTk9XTEVPUEFSRCBERUJVRyA6IGZhc3QvZnJhbWVzL2NhbGN1bGF0ZS1wZXJj
ZW50YWdlLmh0bWwgPSBQQVNTCiBCVUdXSzc3MTg0IERFQlVHIFNMT1cgOiBmYXN0L2pzL2RmZy1k
b3VibGUtdm90ZS1mdXp6Lmh0bWwgPSBQQVNTCiBCVUdXSzc3MDY5IERFQlVHIFNMT1cgOiBmYXN0
L2pzL2RmZy11aW50MzJhcnJheS1vdmVyZmxvdy12YWx1ZXMuaHRtbCA9IFBBU1MKIEJVR1dLNzQ3
ODcgREVCVUcgU0xPVyA6IGZhc3QvanMvZGZnLXBvaXNvbi1mdXp6Lmh0bWwgPSBQQVNTCi1CVUdX
Szc3MzY1IERFQlVHIFNMT1cgOiBmYXN0L2pzL2RmZy1pbnQzMmFycmF5LW92ZXJmbG93LXZhbHVl
cy5odG1sID0gUEFTUwogQlVHV0s3NjI3MCBTS0lQIDogaHR0cC90ZXN0cy9hcHBjYWNoZS9hYm9y
dC1jYWNoZS1vbmNoZWNraW5nLmh0bWwgPSBGQUlMCiBCVUdXSzc2MjcwIFNLSVAgOiBodHRwL3Rl
c3RzL2FwcGNhY2hlL2Fib3J0LWNhY2hlLW9uY2hlY2tpbmctbWFuaWZlc3QtNDA0Lmh0bWwgPSBG
QUlMCiBCVUdXSzc2MjcwIFNLSVAgOiBodHRwL3Rlc3RzL2FwcGNhY2hlL2Fib3J0LWNhY2hlLW9u
Y2hlY2tpbmctcmVzb3VyY2UtNDA0Lmh0bWwgPSBGQUlMCkBAIC0xMDEsNiArMTAwLDEwIEBAIEJV
R1dLNjg2MTAgU0tJUCA6IGZhc3QvZG9tL01pY3JvRGF0YSA9IFBBU1MKIC8vIFVuc2tpcCBhZnRl
ciBjaGFuZ2VzIG9uIGJvdGggc2lkZXMgaGF2ZSBsYW5kZWQgYW5kIHJvbGxlZCB0b2dldGhlci4K
IEJVR0NSMTAzOTM5IFNLSVAgOiBodHRwL3Rlc3RzL2FwcGNhY2hlL3dyb25nLWNvbnRlbnQtdHlw
ZS5odG1sID0gVEVYVAogCisvLyBDdXJyZW50bHkgV2ViIEludGVudHMgaXMgZGlzYWJsZWQuIFRl
c3RzIHBhc3Mgd2l0aCB0aGUgcHJvcGVyCisvLyBidWlsZCBmbGFnIHR1cm5lZCBvbi4KK0JVR0dC
SUxMT0NLIFNLSVAgOiB3ZWJpbnRlbnRzID0gRkFJTAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gV09OVEZJ
WCBURVNUUwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQwMzYsNSArNDAzOSwzIEBAIEJVR1dLNzczMTAgOiBm
YXN0L2pzL25hdmlnYXRvci1sYW5ndWFnZS5odG1sID0gUEFTUyBURVhUCiBCVUdXSzc3MzE0IFdJ
TiBNQUMgOiBmYXN0L2V2ZW50cy90b3VjaC9zZW5kLW9uY2FuY2VsLWV2ZW50Lmh0bWwgPSBQQVNT
IFRFWFQKIEJVR1dLNzczMTUgV0lOIE1BQyA6IGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1
cmUtc2Nyb2xsLmh0bWwgPSBQQVNTIFRFWFQKIEJVR1dLNzczMjQgV0lOIE1BQyBERUJVRyBTTE9X
IDogZmFzdC9qcy9kZmctaW50MzJhcnJheS5odG1sID0gUEFTUwotCi1CVUdXSzc3MjM5IDogc3Rv
cmFnZS9pbmRleGVkZGIvc3RydWN0dXJlZC1jbG9uZS5odG1sID0gUEFTUyBURVhUCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtc25vd2xlb3BhcmQvU2tpcHBlZCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy1zbm93bGVvcGFyZC9Ta2lwcGVkCmluZGV4IDIwOTIwODdhMS4u
OWVlNzdlMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXNub3dsZW9wYXJk
L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXNub3dsZW9wYXJkL1NraXBw
ZWQKQEAgLTE4NSwxMCArMTg1LDEwIEBAIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tbG9hZC10d2lj
ZS5odG1sCiAKICMgUmVncmVzc2lvbiBpbiBwZXJmb3JtYW5jZQogIyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNDEKLSNmYXN0L3JlZ2lvbnMvcmVnaW9uLXN0eWxl
LWJsb2NrLWJhY2tncm91bmQtY29sb3IuaHRtbAotI2Zhc3QvcmVnaW9ucy9yZWdpb24tc3R5bGUt
YmxvY2stYmFja2dyb3VuZC1jb2xvcjIuaHRtbAotI2Zhc3QvcmVnaW9ucy9yZWdpb24tc3R5bGUt
aW1hZ2UtYmFja2dyb3VuZC1jb2xvci5odG1sCi0jZmFzdC9yZWdpb25zL3JlZ2lvbi1zdHlsZS1p
bmxpbmUtYmFja2dyb3VuZC1jb2xvci5odG1sCitmYXN0L3JlZ2lvbnMvcmVnaW9uLXN0eWxlLWJs
b2NrLWJhY2tncm91bmQtY29sb3IuaHRtbAorZmFzdC9yZWdpb25zL3JlZ2lvbi1zdHlsZS1ibG9j
ay1iYWNrZ3JvdW5kLWNvbG9yMi5odG1sCitmYXN0L3JlZ2lvbnMvcmVnaW9uLXN0eWxlLWltYWdl
LWJhY2tncm91bmQtY29sb3IuaHRtbAorZmFzdC9yZWdpb25zL3JlZ2lvbi1zdHlsZS1pbmxpbmUt
YmFja2dyb3VuZC1jb2xvci5odG1sCiAKICMgSGlEUEkgdGVzdHMgaGF2ZSBsb3dlci1sZXZlbCBw
bGF0Zm9ybSBkZXBlbmRlbmNpZXMgb24gTWFjCiBmYXN0L2hpZHBpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvdGVzdC1kYXRhLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvdGVzdC1kYXRhLmh0bWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1YmRiMjguLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3Rlc3QtZGF0YS5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTx0aXRsZT5UaGlzIGlzIHNvbWUg
dGVzdCBkYXRhPC90aXRsZT4KLTxoMT5UZXN0IGRhdGEhPC9oMT4KLTxwPkdldCB5b3VyIHRlc3Qg
ZGF0YSBoZXJlIQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVz
b3VyY2VzL3Rlc3QtZGF0YS50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNv
dXJjZXMvdGVzdC1kYXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVlM2Ey
ZC4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMv
dGVzdC1kYXRhLnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUxvcmVtIGlwc3VtIGRv
bG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIEFlbmVhbiBsYW9yZWV0
IGRvbG9yIGlkIHVybmEgZWxlaWZlbmQgYWxpcXVldC4gTnVsbGEgdmVsIGRvbG9yIGlwc3VtLiBB
bGlxdWFtIHV0IHR1cnBpcyBuaXNsLCBpbiB2dWxwdXRhdGUgc2FwaWVuLiBDdW0gc29jaWlzIG5h
dG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMgcGFydHVyaWVudCBtb250ZXMsIG5hc2NldHVy
IHJpZGljdWx1cyBtdXMuIFNlZCBjb25ndWUgbWFnbmEgdml0YWUgZG9sb3IgZmV1Z2lhdCB2ZWhp
Y3VsYS4gU2VkIHZvbHV0cGF0LCB0ZWxsdXMgdmVsIHZhcml1cyB2ZXN0aWJ1bHVtLCBwdXJ1cyBx
dWFtIG1vbGxpcyBzYXBpZW4sIGluIGNvbmRpbWVudHVtIGxlbyBuZXF1ZSBzZWQgbnVsbGEuIE51
bmMgcXVpcyBwb3J0YSBlbGl0LiBQZWxsZW50ZXNxdWUgZXJhdCBsZWN0dXMsIHVsdHJpY2llcyBh
IGxvYm9ydGlzIGlkLCBmYXVjaWJ1cyBpZCBxdWFtLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJlZC1jbG9uZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLWV4cGVjdGVkLnR4dApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIwMzc0YS4uMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLWV4cGVjdGVkLnR4dAorKysg
L2Rldi9udWxsCkBAIC0xLDY5MiArMCwwIEBACi0KLVRlc3Qgc3RydWN0dXJlZCBjbG9uZSBwZXJt
dXRhdGlvbnMgaW4gSW5kZXhlZERCLiBGaWxlL0ZpbGVMaXN0IHRlc3RzIHJlcXVpcmUgRHVtcFJl
bmRlclRyZWUuCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1pbmRleGVkREIgPSB3
aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIKLVBBU1MgaW5kZXhlZERC
ICE9IG51bGwgaXMgdHJ1ZQotSURCVHJhbnNhY3Rpb24gPSB3aW5kb3cuSURCVHJhbnNhY3Rpb24g
fHwgd2luZG93LndlYmtpdElEQlRyYW5zYWN0aW9uCi1QQVNTIElEQlRyYW5zYWN0aW9uICE9IG51
bGwgaXMgdHJ1ZQotCi1QcmVwYXJlIERhdGFiYXNlCi1pbmRleGVkREIuZGVsZXRlRGF0YWJhc2Uo
J3N0cnVjdHVyZWQtY2xvbmUnKQotaW5kZXhlZERCLm9wZW4oJ3N0cnVjdHVyZWQtY2xvbmUnKQot
ZGIgPSByZXF1ZXN0LnJlc3VsdAotUEFTUyBkYi52ZXJzaW9uIGlzICIiCi1kYi5zZXRWZXJzaW9u
KCcxJykKLWRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotCi1SdW5uaW5nIHRlc3Rz
Li4uCi0KLVRlc3Rpbmc6IHVuZGVmaW5lZAotdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbign
c3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rp
b24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1ZSBpczogdW5kZWZpbmVkICh0eXBlOiB1
bmRlZmluZWQpCi1zdG9yZS5wdXQodmFsdWUsICdrZXknKQotc3RvcmUuZ2V0KCdrZXknKQotUEFT
UyBpcyh0ZXN0X2RhdGEsIHJlc3VsdCkgaXMgdHJ1ZQotCi0KLVRlc3Rpbmc6IG51bGwKLXRyYW5z
YWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURf
V1JJVEUpCi1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotdmFs
dWUgaXM6IG51bGwgKHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9y
ZS5nZXQoJ2tleScpCi1QQVNTIGlzKHRlc3RfZGF0YSwgcmVzdWx0KSBpcyB0cnVlCi0KLQotVGVz
dGluZyBib29sZWFuIHByaW1pdGl2ZXMKLQotVGVzdGluZzogdHJ1ZQotdHJhbnNhY3Rpb24gPSBk
Yi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKLXN0
b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1ZSBpczogdHJ1
ZSAodHlwZTogYm9vbGVhbikKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tl
eScpCi1QQVNTIGlzKHRlc3RfZGF0YSwgcmVzdWx0KSBpcyB0cnVlCi0KLVRlc3Rpbmc6IGZhbHNl
Ci10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlv
bi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1l
JykKLXZhbHVlIGlzOiBmYWxzZSAodHlwZTogYm9vbGVhbikKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tl
eScpCi1zdG9yZS5nZXQoJ2tleScpCi1QQVNTIGlzKHRlc3RfZGF0YSwgcmVzdWx0KSBpcyB0cnVl
Ci0KLQotVGVzdGluZyBudW1iZXIgcHJpbWl0aXZlcwotCi1UZXN0aW5nOiBOYU4KLXRyYW5zYWN0
aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJ
VEUpCi1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUg
aXM6IE5hTiAodHlwZTogbnVtYmVyKQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdl
dCgna2V5JykKLVBBU1MgaXModGVzdF9kYXRhLCByZXN1bHQpIGlzIHRydWUKLQotVGVzdGluZzog
LUluZmluaXR5Ci10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJU
cmFuc2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
c3RvcmVOYW1lJykKLXZhbHVlIGlzOiAtSW5maW5pdHkgKHR5cGU6IG51bWJlcikKLXN0b3JlLnB1
dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1QQVNTIGlzKHRlc3RfZGF0YSwgcmVz
dWx0KSBpcyB0cnVlCi0KLVRlc3Rpbmc6IC1OdW1iZXIuTUFYX1ZBTFVFCi10cmFuc2FjdGlvbiA9
IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKQot
c3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykKLXZhbHVlIGlzOiAt
MS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggKHR5cGU6IG51bWJlcikKLXN0b3JlLnB1dCh2YWx1ZSwg
J2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1QQVNTIGlzKHRlc3RfZGF0YSwgcmVzdWx0KSBpcyB0
cnVlCi0KLVRlc3Rpbmc6IC1OdW1iZXIuTUlOX1ZBTFVFCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0
cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykKLXZhbHVlIGlzOiAtNWUtMzI0ICh0
eXBlOiBudW1iZXIpCi1zdG9yZS5wdXQodmFsdWUsICdrZXknKQotc3RvcmUuZ2V0KCdrZXknKQot
UEFTUyBpcyh0ZXN0X2RhdGEsIHJlc3VsdCkgaXMgdHJ1ZQotCi1UZXN0aW5nOiAtMAotdHJhbnNh
Y3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9X
UklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1
ZSBpczogMCAodHlwZTogbnVtYmVyKQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdl
dCgna2V5JykKLVBBU1MgaXModGVzdF9kYXRhLCByZXN1bHQpIGlzIHRydWUKLQotVGVzdGluZzog
MAotdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rp
b24uUkVBRF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFt
ZScpCi12YWx1ZSBpczogMCAodHlwZTogbnVtYmVyKQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykK
LXN0b3JlLmdldCgna2V5JykKLVBBU1MgaXModGVzdF9kYXRhLCByZXN1bHQpIGlzIHRydWUKLQot
VGVzdGluZzogTnVtYmVyLk1JTl9WQUxVRQotdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbign
c3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rp
b24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1ZSBpczogNWUtMzI0ICh0eXBlOiBudW1i
ZXIpCi1zdG9yZS5wdXQodmFsdWUsICdrZXknKQotc3RvcmUuZ2V0KCdrZXknKQotUEFTUyBpcyh0
ZXN0X2RhdGEsIHJlc3VsdCkgaXMgdHJ1ZQotCi1UZXN0aW5nOiBOdW1iZXIuTUFYX1ZBTFVFCi10
cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlvbi5S
RUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykK
LXZhbHVlIGlzOiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCAodHlwZTogbnVtYmVyKQotc3RvcmUu
cHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgna2V5JykKLVBBU1MgaXModGVzdF9kYXRhLCBy
ZXN1bHQpIGlzIHRydWUKLQotVGVzdGluZzogSW5maW5pdHkKLXRyYW5zYWN0aW9uID0gZGIudHJh
bnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCi1zdG9yZSA9
IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6IEluZmluaXR5
ICh0eXBlOiBudW1iZXIpCi1zdG9yZS5wdXQodmFsdWUsICdrZXknKQotc3RvcmUuZ2V0KCdrZXkn
KQotUEFTUyBpcyh0ZXN0X2RhdGEsIHJlc3VsdCkgaXMgdHJ1ZQotCi0KLVRlc3Rpbmcgc3RyaW5n
IHByaW1pdGl2ZXMKLQotVGVzdGluZzogJycKLXRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24o
J3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCi1zdG9yZSA9IHRyYW5zYWN0
aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6ICAodHlwZTogc3RyaW5nKQot
c3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgna2V5JykKLVBBU1MgaXModGVzdF9k
YXRhLCByZXN1bHQpIGlzIHRydWUKLQotVGVzdGluZzogJ3RoaXMgaXMgYSBzYW1wbGUgc3RyaW5n
JwotdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rp
b24uUkVBRF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFt
ZScpCi12YWx1ZSBpczogdGhpcyBpcyBhIHNhbXBsZSBzdHJpbmcgKHR5cGU6IHN0cmluZykKLXN0
b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1QQVNTIGlzKHRlc3RfZGF0
YSwgcmVzdWx0KSBpcyB0cnVlCi0KLVRlc3Rpbmc6ICdudWxsKFwwKScKLXRyYW5zYWN0aW9uID0g
ZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCi1z
dG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6IG51
bGwoKSAodHlwZTogc3RyaW5nKQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgn
a2V5JykKLVBBU1MgaXModGVzdF9kYXRhLCByZXN1bHQpIGlzIHRydWUKLQotCi1UZXN0aW5nIEJv
b2xlYW4gb2JqZWN0cwotCi1UZXN0aW5nOiBuZXcgQm9vbGVhbih0cnVlKQotdHJhbnNhY3Rpb24g
PSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkK
LXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1ZSBpczog
dHJ1ZSAodHlwZTogb2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgn
a2V5JykKLVN0cmluZyhyZXN1bHQpOiB0cnVlCi1QQVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVj
dCIKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRlc3RfZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSBy
ZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJp
bmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEudmFsdWVPZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0
cnVlCi0KLVRlc3Rpbmc6IG5ldyBCb29sZWFuKGZhbHNlKQotdHJhbnNhY3Rpb24gPSBkYi50cmFu
c2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKLXN0b3JlID0g
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1ZSBpczogZmFsc2UgKHR5
cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1T
dHJpbmcocmVzdWx0KTogZmFsc2UKLVBBU1MgdHlwZW9mIHJlc3VsdCBpcyAib2JqZWN0IgotUEFT
UyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0KSBpcyBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nLmNhbGwodGVzdF9kYXRhKQotUEFTUyB0ZXN0X2RhdGEgIT09IHJlc3VsdCBp
cyB0cnVlCi1QQVNTIHJlc3VsdC50b1N0cmluZygpIGlzIHRlc3RfZGF0YS50b1N0cmluZygpCi1Q
QVNTIGlzKHRlc3RfZGF0YS52YWx1ZU9mKCksIHJlc3VsdC52YWx1ZU9mKCkpIGlzIHRydWUKLQot
Ci1UZXN0aW5nIE51bWJlciBvYmplY3RzCi0KLVRlc3Rpbmc6IG5ldyBOdW1iZXIoTmFOKQotdHJh
bnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVB
RF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12
YWx1ZSBpczogTmFOICh0eXBlOiBvYmplY3QpCi1zdG9yZS5wdXQodmFsdWUsICdrZXknKQotc3Rv
cmUuZ2V0KCdrZXknKQotU3RyaW5nKHJlc3VsdCk6IE5hTgotUEFTUyB0eXBlb2YgcmVzdWx0IGlz
ICJvYmplY3QiCi1QQVNTIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXN1bHQpIGlz
IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0ZXN0X2RhdGEpCi1QQVNTIHRlc3RfZGF0
YSAhPT0gcmVzdWx0IGlzIHRydWUKLVBBU1MgcmVzdWx0LnRvU3RyaW5nKCkgaXMgdGVzdF9kYXRh
LnRvU3RyaW5nKCkKLVBBU1MgaXModGVzdF9kYXRhLnZhbHVlT2YoKSwgcmVzdWx0LnZhbHVlT2Yo
KSkgaXMgdHJ1ZQotCi1UZXN0aW5nOiBuZXcgTnVtYmVyKC1JbmZpbml0eSkKLXRyYW5zYWN0aW9u
ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUp
Ci1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6
IC1JbmZpbml0eSAodHlwZTogb2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3Jl
LmdldCgna2V5JykKLVN0cmluZyhyZXN1bHQpOiAtSW5maW5pdHkKLVBBU1MgdHlwZW9mIHJlc3Vs
dCBpcyAib2JqZWN0IgotUEFTUyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0
KSBpcyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGVzdF9kYXRhKQotUEFTUyB0ZXN0
X2RhdGEgIT09IHJlc3VsdCBpcyB0cnVlCi1QQVNTIHJlc3VsdC50b1N0cmluZygpIGlzIHRlc3Rf
ZGF0YS50b1N0cmluZygpCi1QQVNTIGlzKHRlc3RfZGF0YS52YWx1ZU9mKCksIHJlc3VsdC52YWx1
ZU9mKCkpIGlzIHRydWUKLQotVGVzdGluZzogbmV3IE51bWJlcigtTnVtYmVyLk1BWF9WQUxVRSkK
LXRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9u
LlJFQURfV1JJVEUpCi1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUn
KQotdmFsdWUgaXM6IC0xLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCAodHlwZTogb2JqZWN0KQotc3Rv
cmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgna2V5JykKLVN0cmluZyhyZXN1bHQpOiAt
MS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgKLVBBU1MgdHlwZW9mIHJlc3VsdCBpcyAib2JqZWN0Igot
UEFTUyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0KSBpcyBPYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nLmNhbGwodGVzdF9kYXRhKQotUEFTUyB0ZXN0X2RhdGEgIT09IHJlc3Vs
dCBpcyB0cnVlCi1QQVNTIHJlc3VsdC50b1N0cmluZygpIGlzIHRlc3RfZGF0YS50b1N0cmluZygp
Ci1QQVNTIGlzKHRlc3RfZGF0YS52YWx1ZU9mKCksIHJlc3VsdC52YWx1ZU9mKCkpIGlzIHRydWUK
LQotVGVzdGluZzogbmV3IE51bWJlcigtTnVtYmVyLk1JTl9WQUxVRSkKLXRyYW5zYWN0aW9uID0g
ZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCi1z
dG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6IC01
ZS0zMjQgKHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQo
J2tleScpCi1TdHJpbmcocmVzdWx0KTogLTVlLTMyNAotUEFTUyB0eXBlb2YgcmVzdWx0IGlzICJv
YmplY3QiCi1QQVNTIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXN1bHQpIGlzIE9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0ZXN0X2RhdGEpCi1QQVNTIHRlc3RfZGF0YSAh
PT0gcmVzdWx0IGlzIHRydWUKLVBBU1MgcmVzdWx0LnRvU3RyaW5nKCkgaXMgdGVzdF9kYXRhLnRv
U3RyaW5nKCkKLVBBU1MgaXModGVzdF9kYXRhLnZhbHVlT2YoKSwgcmVzdWx0LnZhbHVlT2YoKSkg
aXMgdHJ1ZQotCi1UZXN0aW5nOiBuZXcgTnVtYmVyKC0wKQotdHJhbnNhY3Rpb24gPSBkYi50cmFu
c2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKLXN0b3JlID0g
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1ZSBpczogMCAodHlwZTog
b2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgna2V5JykKLVN0cmlu
ZyhyZXN1bHQpOiAwCi1QQVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZy5jYWxsKHRlc3RfZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQot
UEFTUyByZXN1bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0
ZXN0X2RhdGEudmFsdWVPZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6
IG5ldyBOdW1iZXIoMCkKLXRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScs
IElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCi1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0
b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6IDAgKHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2
YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1TdHJpbmcocmVzdWx0KTogMAotUEFTUyB0
eXBlb2YgcmVzdWx0IGlzICJvYmplY3QiCi1QQVNTIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu
Y2FsbChyZXN1bHQpIGlzIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0ZXN0X2RhdGEp
Ci1QQVNTIHRlc3RfZGF0YSAhPT0gcmVzdWx0IGlzIHRydWUKLVBBU1MgcmVzdWx0LnRvU3RyaW5n
KCkgaXMgdGVzdF9kYXRhLnRvU3RyaW5nKCkKLVBBU1MgaXModGVzdF9kYXRhLnZhbHVlT2YoKSwg
cmVzdWx0LnZhbHVlT2YoKSkgaXMgdHJ1ZQotCi1UZXN0aW5nOiBuZXcgTnVtYmVyKE51bWJlci5N
SU5fVkFMVUUpCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJU
cmFuc2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
c3RvcmVOYW1lJykKLXZhbHVlIGlzOiA1ZS0zMjQgKHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2
YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1TdHJpbmcocmVzdWx0KTogNWUtMzI0Ci1Q
QVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRlc3Rf
ZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1bHQudG9T
dHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEudmFsdWVP
ZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBOdW1iZXIoTnVt
YmVyLk1BWF9WQUxVRSkKLXRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScs
IElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCi1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0
b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ICh0eXBl
OiBvYmplY3QpCi1zdG9yZS5wdXQodmFsdWUsICdrZXknKQotc3RvcmUuZ2V0KCdrZXknKQotU3Ry
aW5nKHJlc3VsdCk6IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4Ci1QQVNTIHR5cGVvZiByZXN1bHQg
aXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlc3VsdCkg
aXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRlc3RfZGF0YSkKLVBBU1MgdGVzdF9k
YXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2Rh
dGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEudmFsdWVPZigpLCByZXN1bHQudmFsdWVP
ZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBOdW1iZXIoSW5maW5pdHkpCi10cmFuc2FjdGlv
biA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRF
KQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykKLXZhbHVlIGlz
OiBJbmZpbml0eSAodHlwZTogb2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3Jl
LmdldCgna2V5JykKLVN0cmluZyhyZXN1bHQpOiBJbmZpbml0eQotUEFTUyB0eXBlb2YgcmVzdWx0
IGlzICJvYmplY3QiCi1QQVNTIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXN1bHQp
IGlzIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0ZXN0X2RhdGEpCi1QQVNTIHRlc3Rf
ZGF0YSAhPT0gcmVzdWx0IGlzIHRydWUKLVBBU1MgcmVzdWx0LnRvU3RyaW5nKCkgaXMgdGVzdF9k
YXRhLnRvU3RyaW5nKCkKLVBBU1MgaXModGVzdF9kYXRhLnZhbHVlT2YoKSwgcmVzdWx0LnZhbHVl
T2YoKSkgaXMgdHJ1ZQotCi0KLVRlc3RpbmcgU3RyaW5nIG9iamVjdHMKLQotVGVzdGluZzogbmV3
IFN0cmluZygpCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJU
cmFuc2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
c3RvcmVOYW1lJykKLXZhbHVlIGlzOiAgKHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwg
J2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1TdHJpbmcocmVzdWx0KTogCi1QQVNTIHR5cGVvZiBy
ZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJl
c3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRlc3RfZGF0YSkKLVBBU1Mg
dGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1bHQudG9TdHJpbmcoKSBpcyB0
ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEudmFsdWVPZigpLCByZXN1bHQu
dmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBTdHJpbmcoJ3RoaXMgaXMgYSBzYW1w
bGUgc3RyaW5nJykKLXRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElE
QlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCi1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3Jl
KCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6IHRoaXMgaXMgYSBzYW1wbGUgc3RyaW5nICh0eXBlOiBv
YmplY3QpCi1zdG9yZS5wdXQodmFsdWUsICdrZXknKQotc3RvcmUuZ2V0KCdrZXknKQotU3RyaW5n
KHJlc3VsdCk6IHRoaXMgaXMgYSBzYW1wbGUgc3RyaW5nCi1QQVNTIHR5cGVvZiByZXN1bHQgaXMg
Im9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlc3VsdCkgaXMg
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRlc3RfZGF0YSkKLVBBU1MgdGVzdF9kYXRh
ICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEu
dG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEudmFsdWVPZigpLCByZXN1bHQudmFsdWVPZigp
KSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBTdHJpbmcoJ251bGwoXDApJykKLXRyYW5zYWN0aW9u
ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUp
Ci1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6
IG51bGwoKSAodHlwZTogb2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdl
dCgna2V5JykKLVN0cmluZyhyZXN1bHQpOiBudWxsKCkKLVBBU1MgdHlwZW9mIHJlc3VsdCBpcyAi
b2JqZWN0IgotUEFTUyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0KSBpcyBP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGVzdF9kYXRhKQotUEFTUyB0ZXN0X2RhdGEg
IT09IHJlc3VsdCBpcyB0cnVlCi1QQVNTIHJlc3VsdC50b1N0cmluZygpIGlzIHRlc3RfZGF0YS50
b1N0cmluZygpCi1QQVNTIGlzKHRlc3RfZGF0YS52YWx1ZU9mKCksIHJlc3VsdC52YWx1ZU9mKCkp
IGlzIHRydWUKLQotCi1UZXN0aW5nIERhdGUgb2JqZWN0cwotCi1UZXN0aW5nOiBuZXcgRGF0ZSgt
MWUxMykKLXRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5z
YWN0aW9uLlJFQURfV1JJVEUpCi1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9y
ZU5hbWUnKQotdmFsdWUgaXM6IFN1biBGZWIgMDkgMTY1MyAyMjoxMzoyMCBHTVQtMDgwMCAoUFNU
KSAodHlwZTogb2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgna2V5
JykKLVN0cmluZyhyZXN1bHQpOiBTdW4gRmViIDA5IDE2NTMgMjI6MTM6MjAgR01ULTA4MDAgKFBT
VCkKLVBBU1MgdHlwZW9mIHJlc3VsdCBpcyAib2JqZWN0IgotUEFTUyBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nLmNhbGwocmVzdWx0KSBpcyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo
dGVzdF9kYXRhKQotUEFTUyB0ZXN0X2RhdGEgIT09IHJlc3VsdCBpcyB0cnVlCi1QQVNTIHJlc3Vs
dC50b1N0cmluZygpIGlzIHRlc3RfZGF0YS50b1N0cmluZygpCi1QQVNTIGlzKHRlc3RfZGF0YS52
YWx1ZU9mKCksIHJlc3VsdC52YWx1ZU9mKCkpIGlzIHRydWUKLQotVGVzdGluZzogbmV3IERhdGUo
LTFlMTIpCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFu
c2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3Rv
cmVOYW1lJykKLXZhbHVlIGlzOiBTdW4gQXByIDI0IDE5MzggMTU6MTM6MjAgR01ULTA3MDAgKFBE
VCkgKHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tl
eScpCi1TdHJpbmcocmVzdWx0KTogU3VuIEFwciAyNCAxOTM4IDE1OjEzOjIwIEdNVC0wNzAwIChQ
RFQpCi1QQVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlw
ZS50b1N0cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KHRlc3RfZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1
bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEu
dmFsdWVPZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBEYXRl
KC0xZTkpCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFu
c2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3Rv
cmVOYW1lJykKLXZhbHVlIGlzOiBTYXQgRGVjIDIwIDE5NjkgMDI6MTM6MjAgR01ULTA4MDAgKFBT
VCkgKHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tl
eScpCi1TdHJpbmcocmVzdWx0KTogU2F0IERlYyAyMCAxOTY5IDAyOjEzOjIwIEdNVC0wODAwIChQ
U1QpCi1QQVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlw
ZS50b1N0cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KHRlc3RfZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1
bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEu
dmFsdWVPZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBEYXRl
KC0xZTYpCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFu
c2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3Rv
cmVOYW1lJykKLXZhbHVlIGlzOiBXZWQgRGVjIDMxIDE5NjkgMTU6NDM6MjAgR01ULTA4MDAgKFBT
VCkgKHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tl
eScpCi1TdHJpbmcocmVzdWx0KTogV2VkIERlYyAzMSAxOTY5IDE1OjQzOjIwIEdNVC0wODAwIChQ
U1QpCi1QQVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlw
ZS50b1N0cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KHRlc3RfZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1
bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEu
dmFsdWVPZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBEYXRl
KC0xZTMpCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFu
c2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3Rv
cmVOYW1lJykKLXZhbHVlIGlzOiBXZWQgRGVjIDMxIDE5NjkgMTU6NTk6NTkgR01ULTA4MDAgKFBT
VCkgKHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tl
eScpCi1TdHJpbmcocmVzdWx0KTogV2VkIERlYyAzMSAxOTY5IDE1OjU5OjU5IEdNVC0wODAwIChQ
U1QpCi1QQVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlw
ZS50b1N0cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KHRlc3RfZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1
bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEu
dmFsdWVPZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBEYXRl
KDApCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2Fj
dGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVO
YW1lJykKLXZhbHVlIGlzOiBXZWQgRGVjIDMxIDE5NjkgMTY6MDA6MDAgR01ULTA4MDAgKFBTVCkg
KHR5cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScp
Ci1TdHJpbmcocmVzdWx0KTogV2VkIERlYyAzMSAxOTY5IDE2OjAwOjAwIEdNVC0wODAwIChQU1Qp
Ci1QQVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50
b1N0cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRl
c3RfZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1bHQu
dG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEudmFs
dWVPZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBEYXRlKDFl
MykKLXRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0
aW9uLlJFQURfV1JJVEUpCi1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5h
bWUnKQotdmFsdWUgaXM6IFdlZCBEZWMgMzEgMTk2OSAxNjowMDowMSBHTVQtMDgwMCAoUFNUKSAo
dHlwZTogb2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgna2V5JykK
LVN0cmluZyhyZXN1bHQpOiBXZWQgRGVjIDMxIDE5NjkgMTY6MDA6MDEgR01ULTA4MDAgKFBTVCkK
LVBBU1MgdHlwZW9mIHJlc3VsdCBpcyAib2JqZWN0IgotUEFTUyBPYmplY3QucHJvdG90eXBlLnRv
U3RyaW5nLmNhbGwocmVzdWx0KSBpcyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGVz
dF9kYXRhKQotUEFTUyB0ZXN0X2RhdGEgIT09IHJlc3VsdCBpcyB0cnVlCi1QQVNTIHJlc3VsdC50
b1N0cmluZygpIGlzIHRlc3RfZGF0YS50b1N0cmluZygpCi1QQVNTIGlzKHRlc3RfZGF0YS52YWx1
ZU9mKCksIHJlc3VsdC52YWx1ZU9mKCkpIGlzIHRydWUKLQotVGVzdGluZzogbmV3IERhdGUoMWU2
KQotdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rp
b24uUkVBRF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFt
ZScpCi12YWx1ZSBpczogV2VkIERlYyAzMSAxOTY5IDE2OjE2OjQwIEdNVC0wODAwIChQU1QpICh0
eXBlOiBvYmplY3QpCi1zdG9yZS5wdXQodmFsdWUsICdrZXknKQotc3RvcmUuZ2V0KCdrZXknKQot
U3RyaW5nKHJlc3VsdCk6IFdlZCBEZWMgMzEgMTk2OSAxNjoxNjo0MCBHTVQtMDgwMCAoUFNUKQot
UEFTUyB0eXBlb2YgcmVzdWx0IGlzICJvYmplY3QiCi1QQVNTIE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmcuY2FsbChyZXN1bHQpIGlzIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0ZXN0
X2RhdGEpCi1QQVNTIHRlc3RfZGF0YSAhPT0gcmVzdWx0IGlzIHRydWUKLVBBU1MgcmVzdWx0LnRv
U3RyaW5nKCkgaXMgdGVzdF9kYXRhLnRvU3RyaW5nKCkKLVBBU1MgaXModGVzdF9kYXRhLnZhbHVl
T2YoKSwgcmVzdWx0LnZhbHVlT2YoKSkgaXMgdHJ1ZQotCi1UZXN0aW5nOiBuZXcgRGF0ZSgxZTkp
Ci10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlv
bi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1l
JykKLXZhbHVlIGlzOiBNb24gSmFuIDEyIDE5NzAgMDU6NDY6NDAgR01ULTA4MDAgKFBTVCkgKHR5
cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1T
dHJpbmcocmVzdWx0KTogTW9uIEphbiAxMiAxOTcwIDA1OjQ2OjQwIEdNVC0wODAwIChQU1QpCi1Q
QVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRlc3Rf
ZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1bHQudG9T
dHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEudmFsdWVP
ZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBEYXRlKDFlMTIp
Ci10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlv
bi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1l
JykKLXZhbHVlIGlzOiBTYXQgU2VwIDA4IDIwMDEgMTg6NDY6NDAgR01ULTA3MDAgKFBEVCkgKHR5
cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1T
dHJpbmcocmVzdWx0KTogU2F0IFNlcCAwOCAyMDAxIDE4OjQ2OjQwIEdNVC0wNzAwIChQRFQpCi1Q
QVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRlc3Rf
ZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1bHQudG9T
dHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEudmFsdWVP
ZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLVRlc3Rpbmc6IG5ldyBEYXRlKDFlMTMp
Ci10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlv
bi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1l
JykKLXZhbHVlIGlzOiBTYXQgTm92IDIwIDIyODYgMDk6NDY6NDAgR01ULTA4MDAgKFBTVCkgKHR5
cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1T
dHJpbmcocmVzdWx0KTogU2F0IE5vdiAyMCAyMjg2IDA5OjQ2OjQwIEdNVC0wODAwIChQU1QpCi1Q
QVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZy5jYWxsKHJlc3VsdCkgaXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRlc3Rf
ZGF0YSkKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyByZXN1bHQudG9T
dHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotUEFTUyBpcyh0ZXN0X2RhdGEudmFsdWVP
ZigpLCByZXN1bHQudmFsdWVPZigpKSBpcyB0cnVlCi0KLQotVGVzdGluZyBSZWdFeHAgb2JqZWN0
cwotCi1UZXN0aW5nIFJlZ0V4cDogbmV3IFJlZ0V4cCgpCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0
cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykKLXZhbHVlIGlzOiAvKD86KS8gKHR5
cGU6IG9iamVjdCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1Q
QVNTIHRlc3RfZGF0YSAhPT0gcmVzdWx0IGlzIHRydWUKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50
b1N0cmluZy5jYWxsKHJlc3VsdCkgaXMgIltvYmplY3QgUmVnRXhwXSIKLVBBU1MgcmVzdWx0LnRv
U3RyaW5nKCkgaXMgdGVzdF9kYXRhLnRvU3RyaW5nKCkKLQotVGVzdGluZyBSZWdFeHA6IC9hYmMv
Ci10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlv
bi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1l
JykKLXZhbHVlIGlzOiAvYWJjLyAodHlwZTogb2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5
JykKLXN0b3JlLmdldCgna2V5JykKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQot
UEFTUyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0KSBpcyAiW29iamVjdCBS
ZWdFeHBdIgotUEFTUyByZXN1bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQot
Ci1UZXN0aW5nIFJlZ0V4cDogL2FiYy9nCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdz
dG9yZU5hbWUnLCBJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlv
bi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykKLXZhbHVlIGlzOiAvYWJjL2cgKHR5cGU6IG9iamVj
dCkKLXN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1QQVNTIHRlc3Rf
ZGF0YSAhPT0gcmVzdWx0IGlzIHRydWUKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5j
YWxsKHJlc3VsdCkgaXMgIltvYmplY3QgUmVnRXhwXSIKLVBBU1MgcmVzdWx0LnRvU3RyaW5nKCkg
aXMgdGVzdF9kYXRhLnRvU3RyaW5nKCkKLQotVGVzdGluZyBSZWdFeHA6IC9hYmMvaQotdHJhbnNh
Y3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9X
UklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1
ZSBpczogL2FiYy9pICh0eXBlOiBvYmplY3QpCi1zdG9yZS5wdXQodmFsdWUsICdrZXknKQotc3Rv
cmUuZ2V0KCdrZXknKQotUEFTUyB0ZXN0X2RhdGEgIT09IHJlc3VsdCBpcyB0cnVlCi1QQVNTIE9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXN1bHQpIGlzICJbb2JqZWN0IFJlZ0V4cF0i
Ci1QQVNTIHJlc3VsdC50b1N0cmluZygpIGlzIHRlc3RfZGF0YS50b1N0cmluZygpCi0KLVRlc3Rp
bmcgUmVnRXhwOiAvYWJjL2dpCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5h
bWUnLCBJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmpl
Y3RTdG9yZSgnc3RvcmVOYW1lJykKLXZhbHVlIGlzOiAvYWJjL2dpICh0eXBlOiBvYmplY3QpCi1z
dG9yZS5wdXQodmFsdWUsICdrZXknKQotc3RvcmUuZ2V0KCdrZXknKQotUEFTUyB0ZXN0X2RhdGEg
IT09IHJlc3VsdCBpcyB0cnVlCi1QQVNTIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChy
ZXN1bHQpIGlzICJbb2JqZWN0IFJlZ0V4cF0iCi1QQVNTIHJlc3VsdC50b1N0cmluZygpIGlzIHRl
c3RfZGF0YS50b1N0cmluZygpCi0KLVRlc3RpbmcgUmVnRXhwOiAvYWJjL20KLXRyYW5zYWN0aW9u
ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUp
Ci1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6
IC9hYmMvbSAodHlwZTogb2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdl
dCgna2V5JykKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyBPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0KSBpcyAiW29iamVjdCBSZWdFeHBdIgotUEFT
UyByZXN1bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotCi1UZXN0aW5nIFJl
Z0V4cDogL2FiYy9tZwotdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywg
SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3Rv
cmUoJ3N0b3JlTmFtZScpCi12YWx1ZSBpczogL2FiYy9nbSAodHlwZTogb2JqZWN0KQotc3RvcmUu
cHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgna2V5JykKLVBBU1MgdGVzdF9kYXRhICE9PSBy
ZXN1bHQgaXMgdHJ1ZQotUEFTUyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0
KSBpcyAiW29iamVjdCBSZWdFeHBdIgotUEFTUyByZXN1bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2Rh
dGEudG9TdHJpbmcoKQotCi1UZXN0aW5nIFJlZ0V4cDogL2FiYy9taQotdHJhbnNhY3Rpb24gPSBk
Yi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKLXN0
b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1ZSBpczogL2Fi
Yy9pbSAodHlwZTogb2JqZWN0KQotc3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgn
a2V5JykKLVBBU1MgdGVzdF9kYXRhICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyBPYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0KSBpcyAiW29iamVjdCBSZWdFeHBdIgotUEFTUyBy
ZXN1bHQudG9TdHJpbmcoKSBpcyB0ZXN0X2RhdGEudG9TdHJpbmcoKQotCi1UZXN0aW5nIFJlZ0V4
cDogL2FiYy9tZ2kKLXRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElE
QlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCi1zdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3Jl
KCdzdG9yZU5hbWUnKQotdmFsdWUgaXM6IC9hYmMvZ2ltICh0eXBlOiBvYmplY3QpCi1zdG9yZS5w
dXQodmFsdWUsICdrZXknKQotc3RvcmUuZ2V0KCdrZXknKQotUEFTUyB0ZXN0X2RhdGEgIT09IHJl
c3VsdCBpcyB0cnVlCi1QQVNTIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXN1bHQp
IGlzICJbb2JqZWN0IFJlZ0V4cF0iCi1QQVNTIHJlc3VsdC50b1N0cmluZygpIGlzIHRlc3RfZGF0
YS50b1N0cmluZygpCi0KLQotVGVzdGluZyBJbWFnZURhdGEKLWNhbnZhcyA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2NhbnZhcycpCi1jYW52YXMud2lkdGggPSA4Ci1jYW52YXMuaGVpZ2h0ID0g
OAotdGVzdF9kYXRhID0gY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAs
IDgsIDgpCi10cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFu
c2FjdGlvbi5SRUFEX1dSSVRFKQotc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3Rv
cmVOYW1lJykKLXZhbHVlIGlzOiBbb2JqZWN0IEltYWdlRGF0YV0gKHR5cGU6IG9iamVjdCkKLXN0
b3JlLnB1dCh2YWx1ZSwgJ2tleScpCi1zdG9yZS5nZXQoJ2tleScpCi1QQVNTIHRlc3RfZGF0YSAh
PT0gcmVzdWx0IGlzIHRydWUKLVBBU1MgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJl
c3VsdCkgaXMgIltvYmplY3QgSW1hZ2VEYXRhXSIKLVBBU1MgcmVzdWx0LndpZHRoIGlzIHRlc3Rf
ZGF0YS53aWR0aAotUEFTUyByZXN1bHQuaGVpZ2h0IGlzIHRlc3RfZGF0YS5oZWlnaHQKLVBBU1Mg
cmVzdWx0LmRhdGEubGVuZ3RoIGlzIHRlc3RfZGF0YS5kYXRhLmxlbmd0aAotUEFTUyByZXN1bHQg
ZGF0YSBtYXRjaGVzCi0KLVRlc3RpbmcgQmxvYgotU2tpcHBpbmcgdGVzdAotCi1UZXN0aW5nIEZp
bGUKLVNraXBwaW5nIHRlc3QKLQotVGVzdGluZyBGaWxlTGlzdAotU2tpcHBpbmcgdGVzdAotCi1U
ZXN0aW5nIEFycmF5Ci10ZXN0X2RhdGEgPSBbXQotdGVzdF9kYXRhWzBdID0gJ2ZvbycKLXRlc3Rf
ZGF0YVsxXSA9ICdiYXInCi10ZXN0X2RhdGFbMTBdID0gdHJ1ZQotdGVzdF9kYXRhWzExXSA9IGZh
bHNlCi10ZXN0X2RhdGFbMjBdID0gMTIzCi10ZXN0X2RhdGFbMjFdID0gNDU2Ci10ZXN0X2RhdGFb
MzBdID0gbnVsbAotdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURC
VHJhbnNhY3Rpb24uUkVBRF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUo
J3N0b3JlTmFtZScpCi12YWx1ZSBpczogZm9vLGJhciwsLCwsLCwsLHRydWUsZmFsc2UsLCwsLCws
LCwxMjMsNDU2LCwsLCwsLCwsICh0eXBlOiBvYmplY3QpCi1zdG9yZS5wdXQodmFsdWUsICdrZXkn
KQotc3RvcmUuZ2V0KCdrZXknKQotUEFTUyB0ZXN0X2RhdGEgIT09IHJlc3VsdCBpcyB0cnVlCi1Q
QVNTIHRlc3RfZGF0YS5sZW5ndGggPT09IHJlc3VsdC5sZW5ndGggaXMgdHJ1ZQotUEFTUyB0ZXN0
X2RhdGFbMF0gaXMgcmVzdWx0WzBdCi1QQVNTIHRlc3RfZGF0YVsxXSBpcyByZXN1bHRbMV0KLVBB
U1MgdGVzdF9kYXRhWzEwXSBpcyByZXN1bHRbMTBdCi1QQVNTIHRlc3RfZGF0YVsxMV0gaXMgcmVz
dWx0WzExXQotUEFTUyB0ZXN0X2RhdGFbMjBdIGlzIHJlc3VsdFsyMF0KLVBBU1MgdGVzdF9kYXRh
WzIxXSBpcyByZXN1bHRbMjFdCi1QQVNTIHRlc3RfZGF0YVszMF0gaXMgcmVzdWx0WzMwXQotCi1U
ZXN0aW5nIE9iamVjdAotdGVzdF9kYXRhID0gW10KLXRlc3RfZGF0YVswXSA9ICdmb28nCi10ZXN0
X2RhdGFbMV0gPSAnYmFyJwotdGVzdF9kYXRhWydhJ10gPSB0cnVlCi10ZXN0X2RhdGFbJ2InXSA9
IGZhbHNlCi10ZXN0X2RhdGFbJ2ZvbyddID0gMTIzCi10ZXN0X2RhdGFbJ2JhciddID0gNDU2Ci10
ZXN0X2RhdGFbJyddID0gbnVsbAotdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVO
YW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2Jq
ZWN0U3RvcmUoJ3N0b3JlTmFtZScpCi12YWx1ZSBpczogZm9vLGJhciAodHlwZTogb2JqZWN0KQot
c3RvcmUucHV0KHZhbHVlLCAna2V5JykKLXN0b3JlLmdldCgna2V5JykKLVBBU1MgdGVzdF9kYXRh
ICE9PSByZXN1bHQgaXMgdHJ1ZQotUEFTUyBhcnJheUNvbXBhcmUoT2JqZWN0LmtleXMocmVzdWx0
KS5zb3J0KCksIE9iamVjdC5rZXlzKHRlc3RfZGF0YSkuc29ydCgpKSBpcyB0cnVlCi1QQVNTIHRl
c3RfZGF0YVsiMCJdIGlzIHJlc3VsdFsiMCJdCi1QQVNTIHRlc3RfZGF0YVsiMSJdIGlzIHJlc3Vs
dFsiMSJdCi1QQVNTIHRlc3RfZGF0YVsiYSJdIGlzIHJlc3VsdFsiYSJdCi1QQVNTIHRlc3RfZGF0
YVsiYiJdIGlzIHJlc3VsdFsiYiJdCi1QQVNTIHRlc3RfZGF0YVsiZm9vIl0gaXMgcmVzdWx0WyJm
b28iXQotUEFTUyB0ZXN0X2RhdGFbImJhciJdIGlzIHJlc3VsdFsiYmFyIl0KLVBBU1MgdGVzdF9k
YXRhWyIiXSBpcyByZXN1bHRbIiJdCi0KLQotVGVzdCB0eXBlcyB0aGF0IGNhbid0IGJlIGNsb25l
ZDoKLQotdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNh
Y3Rpb24uUkVBRF9XUklURSkKLXN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3Jl
TmFtZScpCi0KLU90aGVyIEphdmFTY3JpcHQgb2JqZWN0IHR5cGVzOgotRXhwZWN0aW5nIGV4Y2Vw
dGlvbiBmcm9tIHN0b3JlLnB1dChuZXcgRXJyb3IsICdrZXknKQotUEFTUyBFeGNlcHRpb24gd2Fz
IHRocm93bi4KLVBBU1MgY29kZSBpcyBET01FeGNlcHRpb24uREFUQV9DTE9ORV9FUlIKLUV4cGVj
dGluZyBleGNlcHRpb24gZnJvbSBzdG9yZS5wdXQobmV3IEZ1bmN0aW9uLCAna2V5JykKLVBBU1Mg
RXhjZXB0aW9uIHdhcyB0aHJvd24uCi1QQVNTIGNvZGUgaXMgRE9NRXhjZXB0aW9uLkRBVEFfQ0xP
TkVfRVJSCi0KLU90aGVyIGhvc3Qgb2JqZWN0IHR5cGVzOgotRXhwZWN0aW5nIGV4Y2VwdGlvbiBm
cm9tIHN0b3JlLnB1dCh3aW5kb3csICdrZXknKQotUEFTUyBFeGNlcHRpb24gd2FzIHRocm93bi4K
LVBBU1MgY29kZSBpcyBET01FeGNlcHRpb24uREFUQV9DTE9ORV9FUlIKLUV4cGVjdGluZyBleGNl
cHRpb24gZnJvbSBzdG9yZS5wdXQoZG9jdW1lbnQsICdrZXknKQotUEFTUyBFeGNlcHRpb24gd2Fz
IHRocm93bi4KLVBBU1MgY29kZSBpcyBET01FeGNlcHRpb24uREFUQV9DTE9ORV9FUlIKLUV4cGVj
dGluZyBleGNlcHRpb24gZnJvbSBzdG9yZS5wdXQoZG9jdW1lbnQuYm9keSwgJ2tleScpCi1QQVNT
IEV4Y2VwdGlvbiB3YXMgdGhyb3duLgotUEFTUyBjb2RlIGlzIERPTUV4Y2VwdGlvbi5EQVRBX0NM
T05FX0VSUgotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRF
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQt
Y2xvbmUuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xv
bmUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM0OGZhYi4uMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSw1NTAgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQg
c3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eT4KLTxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iZmlsZUlucHV0IiBtdWx0aXBsZT48L2lucHV0Pgot
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Ci08ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTxzY3Jp
cHQ+Ci0KLWRlc2NyaXB0aW9uKCJUZXN0IHN0cnVjdHVyZWQgY2xvbmUgcGVybXV0YXRpb25zIGlu
IEluZGV4ZWREQi4gRmlsZS9GaWxlTGlzdCB0ZXN0cyByZXF1aXJlIER1bXBSZW5kZXJUcmVlLiIp
OwotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7Ci0KLWlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKLSAgICB2
YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGVJbnB1dCIpOwotICAg
IHZhciBmaWxlUmVjdCA9IGZpbGVJbnB1dC5nZXRDbGllbnRSZWN0cygpWzBdOwotICAgIHZhciB0
YXJnZXRYID0gZmlsZVJlY3QubGVmdCArIGZpbGVSZWN0LndpZHRoIC8gMjsKLSAgICB2YXIgdGFy
Z2V0WSA9IGZpbGVSZWN0LnRvcCArIGZpbGVSZWN0LmhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5k
ZXIuYmVnaW5EcmFnV2l0aEZpbGVzKFsncmVzb3VyY2VzL3Rlc3QtZGF0YS5odG1sJywgJ3Jlc291
cmNlcy90ZXN0LWRhdGEudHh0J10pOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdl
dFgsIHRhcmdldFkpOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKLX0KLQotZnVuY3Rpb24g
dGVzdCgpCi17Ci0gICAgZXZhbEFuZExvZygiaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8
fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIik7Ci0gICAgc2hvdWxkQmVUcnVlKCJpbmRleGVkREIg
IT0gbnVsbCIpOwotICAgIGV2YWxBbmRMb2coIklEQlRyYW5zYWN0aW9uID0gd2luZG93LklEQlRy
YW5zYWN0aW9uIHx8IHdpbmRvdy53ZWJraXRJREJUcmFuc2FjdGlvbiIpOwotICAgIHNob3VsZEJl
VHJ1ZSgiSURCVHJhbnNhY3Rpb24gIT0gbnVsbCIpOwotICAgIHByZXBhcmVEYXRhYmFzZSgpOwot
fQotCi1mdW5jdGlvbiBwcmVwYXJlRGF0YWJhc2UoKQotewotICAgIGRlYnVnKCIiKTsKLSAgICBk
ZWJ1ZygiUHJlcGFyZSBEYXRhYmFzZSIpOwotICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRl
eGVkREIuZGVsZXRlRGF0YWJhc2UoJ3N0cnVjdHVyZWQtY2xvbmUnKSIpOwotICAgIHJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwotICAgIHJlcXVlc3Qub25zdWNjZXNz
ID0gZnVuY3Rpb24oZSkgewotICAgICAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERC
Lm9wZW4oJ3N0cnVjdHVyZWQtY2xvbmUnKSIpOwotICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1
bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKLSAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5j
dGlvbihlKSB7Ci0gICAgICAgICAgICBldmFsQW5kTG9nKCJkYiA9IHJlcXVlc3QucmVzdWx0Iik7
Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRiLnZlcnNpb24iLCAiIik7Ci0g
ICAgICAgICAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignMScpIik7Ci0g
ICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKLSAg
ICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAg
ICAgIGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKSIpOwotICAg
ICAgICAgICAgICAgIHZhciB0cmFucyA9IHJlcXVlc3QucmVzdWx0OwotICAgICAgICAgICAgICAg
IHRyYW5zLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKLSAgICAgICAgICAgICAg
ICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7Ci0gICAgICAgICAgICAg
ICAgdHJhbnMub25jb21wbGV0ZSA9IHN0YXJ0VGVzdHM7Ci0gICAgICAgICAgICB9OwotICAgICAg
ICB9OwotICAgIH07Ci19Ci0KLWZ1bmN0aW9uIHN0YXJ0VGVzdHMoKQotewotICAgIGRlYnVnKCIi
KTsKLSAgICBkZWJ1ZygiUnVubmluZyB0ZXN0cy4uLiIpOwotICAgIHZhciB0ZXN0c190b19ydW4g
PSBbCi0gICAgICAgIHRlc3RVbmRlZmluZWQsCi0gICAgICAgIHRlc3ROdWxsLAotICAgICAgICB0
ZXN0Qm9vbGVhbiwKLSAgICAgICAgdGVzdE51bWJlciwKLSAgICAgICAgdGVzdFN0cmluZywKLSAg
ICAgICAgdGVzdEJvb2xlYW5PYmplY3QsCi0gICAgICAgIHRlc3ROdW1iZXJPYmplY3QsCi0gICAg
ICAgIHRlc3RTdHJpbmdPYmplY3QsCi0gICAgICAgIHRlc3REYXRlT2JqZWN0LAotICAgICAgICB0
ZXN0UmVnRXhwT2JqZWN0LAotICAgICAgICB0ZXN0SW1hZ2VEYXRhLAotICAgICAgICB0ZXN0Qmxv
YiwKLSAgICAgICAgdGVzdEZpbGUsCi0gICAgICAgIHRlc3RGaWxlTGlzdCwKLSAgICAgICAgdGVz
dEFycmF5LAotICAgICAgICB0ZXN0T2JqZWN0Ci0gICAgXTsKLQotICAgIGZ1bmN0aW9uIG5leHRU
ZXN0KCkgewotICAgICAgICBkZWJ1ZygiIik7Ci0gICAgICAgIGlmICh0ZXN0c190b19ydW4ubGVu
Z3RoKSB7Ci0gICAgICAgICAgICB2YXIgdGVzdCA9IHRlc3RzX3RvX3J1bi5zaGlmdCgpOwotICAg
ICAgICAgICAgdGVzdChuZXh0VGVzdCk7IC8vIFdoZW4gZG9uZSwgY2FsbCB0aGlzIGFnYWluLgot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGVzdEJhZFR5cGVzKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgbmV4dFRlc3QoKTsKLX0KLQotZnVuY3Rpb24gZm9yRWFjaFdpdGhDYWxsYmFj
ayh0ZXN0RnVuY3Rpb24sIHZhbHVlcywgY2FsbGJhY2spCi17Ci0gICAgZnVuY3Rpb24gbmV4dFZh
bHVlKCkgewotICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCkgewotICAgICAgICAgICAgdGVzdEZ1
bmN0aW9uKHZhbHVlcy5zaGlmdCgpLCBuZXh0VmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG5leHRWYWx1ZSgp
OwotfQotCi1mdW5jdGlvbiB0ZXN0VmFsdWUodmFsdWUsIGNhbGxiYWNrKQotewotICAgIC8vIE9u
ZSB0cmFuc2FjdGlvbiBwZXIgdGVzdCwgc2luY2Ugc29tZSB0ZXN0cyByZXF1aXJlIGFzeW5jaHJv
bm91cwotICAgIC8vIG9wZXJhdGlvbnMgdG8gdmVyaWZ5IHRoZSByZXN1bHQgKGUuZy4gdmlhIEZp
bGVSZWFkZXIpCi0gICAgZXZhbEFuZExvZygidHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbign
c3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkiKTsKLSAgICB0cmFuc2FjdGlv
bi5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Ci0gICAgdHJhbnNhY3Rpb24ub25h
Ym9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOwotICAgIGV2YWxBbmRMb2coInN0b3JlID0g
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpIik7Ci0KLSAgICBkZWJ1ZygidmFs
dWUgaXM6ICIgKyBTdHJpbmcodmFsdWUpICsgIiAodHlwZTogIiArIHR5cGVvZiB2YWx1ZSArICIp
Iik7Ci0gICAgd2luZG93LnZhbHVlID0gdmFsdWU7Ci0gICAgcmVxdWVzdCA9IGV2YWxBbmRMb2co
InN0b3JlLnB1dCh2YWx1ZSwgJ2tleScpIik7Ci0gICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2s7Ci0gICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihlKSB7
Ci0gICAgICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJzdG9yZS5nZXQoJ2tleScpIik7Ci0gICAg
ICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwotICAgICAgICBy
ZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIC8vZGVidWcoImdv
dCBiYWNrOiAiICsgU3RyaW5nKHJlcXVlc3QucmVzdWx0KSArICIgKHR5cGU6ICIgKyB0eXBlb2Yg
cmVxdWVzdC5yZXN1bHQgKyAiKSIpOwotICAgICAgICAgICAgY2FsbGJhY2socmVxdWVzdC5yZXN1
bHQpOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLS8vIElkZW50aXR5IHRlc3RpbmcsIHNlbnNp
dGl2ZSB0byBOYU4gYW5kIC0wCi1mdW5jdGlvbiBpcyh4LCB5KSB7Ci0gICAgaWYgKHggPT09IHkp
IHsKLSAgICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5OwotICAgIH0KLSAg
ICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5OwotfQotCi1mdW5jdGlvbiBhcnJheUNvbXBhcmUo
YSwgYikgewotICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgaWYgKCFpcyhhW2ldLCBiW2ldKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1mdW5jdGlvbiB0ZXN0
UHJpbWl0aXZlVmFsdWUoc3RyaW5nLCBjYWxsYmFjaykKLXsKLSAgICBkZWJ1ZygiVGVzdGluZzog
IiArIHN0cmluZyk7Ci0gICAgdmFyIHZhbHVlID0gZXZhbCgidmFsdWUgPSAoIiArIHN0cmluZyAr
ICIpIik7Ci0gICAgdGVzdF9kYXRhID0gdmFsdWU7Ci0gICAgdGVzdFZhbHVlKHRlc3RfZGF0YSwg
ZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHdpbmRvdy5yZXN1bHQgPSByZXN1bHQ7Ci0gICAg
ICAgIHNob3VsZEJlVHJ1ZSgiaXModGVzdF9kYXRhLCByZXN1bHQpIik7Ci0gICAgICAgIGRlYnVn
KCIiKTsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gdGVzdE9i
amVjdFdpdGhWYWx1ZShzdHJpbmcsIGNhbGxiYWNrKQotewotICAgIGRlYnVnKCJUZXN0aW5nOiAi
ICsgc3RyaW5nKTsKLSAgICB2YXIgdmFsdWUgPSBldmFsKCJ2YWx1ZSA9ICgiICsgc3RyaW5nICsg
IikiKTsKLSAgICB0ZXN0X2RhdGEgPSB2YWx1ZTsKLSAgICB0ZXN0VmFsdWUodGVzdF9kYXRhLCBm
dW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgd2luZG93LnJlc3VsdCA9IHJlc3VsdDsKLSAgICAg
ICAgZGVidWcoIlN0cmluZyhyZXN1bHQpOiAiICsgU3RyaW5nKHJlc3VsdCkpOwotICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoInR5cGVvZiByZXN1bHQiLCAib2JqZWN0Iik7Ci0gICAgICAg
IHNob3VsZEJlKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0KSIsICJPYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGVzdF9kYXRhKSIpOwotICAgICAgICBzaG91bGRC
ZVRydWUoInRlc3RfZGF0YSAhPT0gcmVzdWx0Iik7Ci0gICAgICAgIHNob3VsZEJlKCJyZXN1bHQu
dG9TdHJpbmcoKSIsICJ0ZXN0X2RhdGEudG9TdHJpbmcoKSIpOwotICAgICAgICBzaG91bGRCZVRy
dWUoImlzKHRlc3RfZGF0YS52YWx1ZU9mKCksIHJlc3VsdC52YWx1ZU9mKCkpIik7Ci0gICAgICAg
IGRlYnVnKCIiKTsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24g
dGVzdFVuZGVmaW5lZChjYWxsYmFjaykKLXsKLSAgICB0ZXN0UHJpbWl0aXZlVmFsdWUoInVuZGVm
aW5lZCIsIGNhbGxiYWNrKTsKLX0KLQotZnVuY3Rpb24gdGVzdE51bGwoY2FsbGJhY2spCi17Ci0g
ICAgdGVzdFByaW1pdGl2ZVZhbHVlKCJudWxsIiwgY2FsbGJhY2spOwotfQotCi1mdW5jdGlvbiB0
ZXN0Qm9vbGVhbihjYWxsYmFjaykKLXsKLSAgICBkZWJ1ZygiVGVzdGluZyBib29sZWFuIHByaW1p
dGl2ZXMiKTsKLSAgICBkZWJ1ZygiIik7Ci0gICAgZm9yRWFjaFdpdGhDYWxsYmFjayh0ZXN0UHJp
bWl0aXZlVmFsdWUsIFsidHJ1ZSIsICJmYWxzZSJdLCBjYWxsYmFjayk7Ci19Ci0KLWZ1bmN0aW9u
IHRlc3RCb29sZWFuT2JqZWN0KGNhbGxiYWNrKQotewotICAgIGRlYnVnKCJUZXN0aW5nIEJvb2xl
YW4gb2JqZWN0cyIpOwotICAgIGRlYnVnKCIiKTsKLSAgICBmb3JFYWNoV2l0aENhbGxiYWNrKHRl
c3RPYmplY3RXaXRoVmFsdWUsIFsKLSAgICAgICAgIm5ldyBCb29sZWFuKHRydWUpIiwKLSAgICAg
ICAgIm5ldyBCb29sZWFuKGZhbHNlKSIKLSAgICBdLCBjYWxsYmFjayk7Ci19Ci0KLWZ1bmN0aW9u
IHRlc3RTdHJpbmcoY2FsbGJhY2spCi17Ci0gICAgZGVidWcoIlRlc3Rpbmcgc3RyaW5nIHByaW1p
dGl2ZXMiKTsKLSAgICBkZWJ1ZygiIik7Ci0gICAgZm9yRWFjaFdpdGhDYWxsYmFjayh0ZXN0UHJp
bWl0aXZlVmFsdWUsIFsKLSAgICAgICAgIicnIiwKLSAgICAgICAgIid0aGlzIGlzIGEgc2FtcGxl
IHN0cmluZyciLAotICAgICAgICAiJ251bGwoXFwwKSciCi0gICAgXSwgY2FsbGJhY2spOwotfQot
Ci1mdW5jdGlvbiB0ZXN0U3RyaW5nT2JqZWN0KGNhbGxiYWNrKQotewotICAgIGRlYnVnKCJUZXN0
aW5nIFN0cmluZyBvYmplY3RzIik7Ci0gICAgZGVidWcoIiIpOwotICAgIGZvckVhY2hXaXRoQ2Fs
bGJhY2sodGVzdE9iamVjdFdpdGhWYWx1ZSwgWwotICAgICAgICAibmV3IFN0cmluZygpIiwKLSAg
ICAgICAgIm5ldyBTdHJpbmcoJ3RoaXMgaXMgYSBzYW1wbGUgc3RyaW5nJykiLAotICAgICAgICAi
bmV3IFN0cmluZygnbnVsbChcXDApJykiCi0gICAgXSwgY2FsbGJhY2spOwotfQotCi1mdW5jdGlv
biB0ZXN0TnVtYmVyKGNhbGxiYWNrKQotewotICAgIGRlYnVnKCJUZXN0aW5nIG51bWJlciBwcmlt
aXRpdmVzIik7Ci0gICAgZGVidWcoIiIpOwotICAgIGZvckVhY2hXaXRoQ2FsbGJhY2sodGVzdFBy
aW1pdGl2ZVZhbHVlLCBbCi0gICAgICAgICJOYU4iLAotICAgICAgICAiLUluZmluaXR5IiwKLSAg
ICAgICAgIi1OdW1iZXIuTUFYX1ZBTFVFIiwKLSAgICAgICAgIi1OdW1iZXIuTUlOX1ZBTFVFIiwK
LSAgICAgICAgIi0wIiwKLSAgICAgICAgIjAiLAotICAgICAgICAiTnVtYmVyLk1JTl9WQUxVRSIs
Ci0gICAgICAgICJOdW1iZXIuTUFYX1ZBTFVFIiwKLSAgICAgICAgIkluZmluaXR5IgotICAgIF0s
IGNhbGxiYWNrKTsKLX0KLQotZnVuY3Rpb24gdGVzdE51bWJlck9iamVjdChjYWxsYmFjaykKLXsK
LSAgICBkZWJ1ZygiVGVzdGluZyBOdW1iZXIgb2JqZWN0cyIpOwotICAgIGRlYnVnKCIiKTsKLSAg
ICBmb3JFYWNoV2l0aENhbGxiYWNrKHRlc3RPYmplY3RXaXRoVmFsdWUsIFsKLSAgICAgICAgIm5l
dyBOdW1iZXIoTmFOKSIsCi0gICAgICAgICJuZXcgTnVtYmVyKC1JbmZpbml0eSkiLAotICAgICAg
ICAibmV3IE51bWJlcigtTnVtYmVyLk1BWF9WQUxVRSkiLAotICAgICAgICAibmV3IE51bWJlcigt
TnVtYmVyLk1JTl9WQUxVRSkiLAotICAgICAgICAibmV3IE51bWJlcigtMCkiLAotICAgICAgICAi
bmV3IE51bWJlcigwKSIsCi0gICAgICAgICJuZXcgTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpIiwK
LSAgICAgICAgIm5ldyBOdW1iZXIoTnVtYmVyLk1BWF9WQUxVRSkiLAotICAgICAgICAibmV3IE51
bWJlcihJbmZpbml0eSkiCi0gICAgXSwgY2FsbGJhY2spOwotfQotCi1mdW5jdGlvbiB0ZXN0RGF0
ZU9iamVjdChjYWxsYmFjaykKLXsKLSAgICBkZWJ1ZygiVGVzdGluZyBEYXRlIG9iamVjdHMiKTsK
LSAgICBkZWJ1ZygiIik7Ci0gICAgZm9yRWFjaFdpdGhDYWxsYmFjayh0ZXN0T2JqZWN0V2l0aFZh
bHVlLCBbCi0gICAgICAgICJuZXcgRGF0ZSgtMWUxMykiLAotICAgICAgICAibmV3IERhdGUoLTFl
MTIpIiwKLSAgICAgICAgIm5ldyBEYXRlKC0xZTkpIiwKLSAgICAgICAgIm5ldyBEYXRlKC0xZTYp
IiwKLSAgICAgICAgIm5ldyBEYXRlKC0xZTMpIiwKLSAgICAgICAgIm5ldyBEYXRlKDApIiwKLSAg
ICAgICAgIm5ldyBEYXRlKDFlMykiLAotICAgICAgICAibmV3IERhdGUoMWU2KSIsCi0gICAgICAg
ICJuZXcgRGF0ZSgxZTkpIiwKLSAgICAgICAgIm5ldyBEYXRlKDFlMTIpIiwKLSAgICAgICAgIm5l
dyBEYXRlKDFlMTMpIgotICAgIF0sIGNhbGxiYWNrKTsKLX0KLQotZnVuY3Rpb24gdGVzdFJlZ0V4
cE9iamVjdChjYWxsYmFjaykKLXsKLSAgICBkZWJ1ZygiVGVzdGluZyBSZWdFeHAgb2JqZWN0cyIp
OwotICAgIGRlYnVnKCIiKTsKLSAgICBmdW5jdGlvbiB0ZXN0UmVnRXhwKHN0cmluZywgY2FsbGJh
Y2spIHsKLSAgICAgICAgZGVidWcoIlRlc3RpbmcgUmVnRXhwOiAiICsgc3RyaW5nKTsKLSAgICAg
ICAgdmFyIHZhbHVlID0gZXZhbCgidmFsdWUgPSAoIiArIHN0cmluZyArICIpIik7Ci0gICAgICAg
IHRlc3RfZGF0YSA9IHZhbHVlOwotICAgICAgICB0ZXN0VmFsdWUodGVzdF9kYXRhLCBmdW5jdGlv
bihyZXN1bHQpIHsKLSAgICAgICAgICAgIHdpbmRvdy5yZXN1bHQgPSByZXN1bHQ7Ci0gICAgICAg
ICAgICBzaG91bGRCZVRydWUoInRlc3RfZGF0YSAhPT0gcmVzdWx0Iik7Ci0gICAgICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXN1
bHQpIiwgIltvYmplY3QgUmVnRXhwXSIpOwotICAgICAgICAgICAgc2hvdWxkQmUoInJlc3VsdC50
b1N0cmluZygpIiwgInRlc3RfZGF0YS50b1N0cmluZygpIik7Ci0gICAgICAgICAgICBkZWJ1Zygi
Iik7Ci0gICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBm
b3JFYWNoV2l0aENhbGxiYWNrKHRlc3RSZWdFeHAsIFsKLSAgICAgICAgIm5ldyBSZWdFeHAoKSIs
Ci0gICAgICAgICIvYWJjLyIsCi0gICAgICAgICIvYWJjL2ciLAotICAgICAgICAiL2FiYy9pIiwK
LSAgICAgICAgIi9hYmMvZ2kiLAotICAgICAgICAiL2FiYy9tIiwKLSAgICAgICAgIi9hYmMvbWci
LAotICAgICAgICAiL2FiYy9taSIsCi0gICAgICAgICIvYWJjL21naSIKLSAgICBdLCBjYWxsYmFj
ayk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3RJbWFnZURhdGEoY2FsbGJhY2spCi17Ci0gICAgZGVidWco
IlRlc3RpbmcgSW1hZ2VEYXRhIik7Ci0gICAgZXZhbEFuZExvZygiY2FudmFzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnY2FudmFzJykiKTsKLSAgICBldmFsQW5kTG9nKCJjYW52YXMud2lkdGgg
PSA4Iik7Ci0gICAgZXZhbEFuZExvZygiY2FudmFzLmhlaWdodCA9IDgiKTsKLSAgICBldmFsQW5k
TG9nKCJ0ZXN0X2RhdGEgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5nZXRJbWFnZURhdGEoMCwg
MCwgOCwgOCkiKTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHsKLSAgICAg
ICAgdGVzdF9kYXRhLmRhdGFbaV0gPSBpOwotICAgIH0KLQotICAgIHRlc3RWYWx1ZSh0ZXN0X2Rh
dGEsIGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICB3aW5kb3cucmVzdWx0ID0gcmVzdWx0Owot
ICAgICAgICBzaG91bGRCZVRydWUoInRlc3RfZGF0YSAhPT0gcmVzdWx0Iik7Ci0gICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlc3Vs
dCkiLCAiW29iamVjdCBJbWFnZURhdGFdIik7Ci0gICAgICAgIHNob3VsZEJlKCJyZXN1bHQud2lk
dGgiLCAidGVzdF9kYXRhLndpZHRoIik7Ci0gICAgICAgIHNob3VsZEJlKCJyZXN1bHQuaGVpZ2h0
IiwgInRlc3RfZGF0YS5oZWlnaHQiKTsKLSAgICAgICAgc2hvdWxkQmUoInJlc3VsdC5kYXRhLmxl
bmd0aCIsICJ0ZXN0X2RhdGEuZGF0YS5sZW5ndGgiKTsKLSAgICAgICAgaWYgKGFycmF5Q29tcGFy
ZSh0ZXN0X2RhdGEuZGF0YSwgcmVzdWx0LmRhdGEpKSB7Ci0gICAgICAgICAgICB0ZXN0UGFzc2Vk
KCJyZXN1bHQgZGF0YSBtYXRjaGVzIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0
ZXN0RmFpbGVkKCJyZXN1bHQgZGF0YSBkb2Vzbid0IG1hdGNoIik7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FsbGJhY2soKTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxv
YiwgY2FsbGJhY2spCi17Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7Ci0gICAg
cmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgaWYgKGUudGFyZ2V0LnJlYWR5
U3RhdGUgPT09IEZpbGVSZWFkZXIuRE9ORSkgewotICAgICAgICAgICAgY2FsbGJhY2soZS50YXJn
ZXQucmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5j
dGlvbihlKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIkVycm9yIHJlYWRpbmcgYmxvYiBhcyB0ZXh0
OiAiICsgZSk7Ci0gICAgICAgIGRvbmUoKTsKLSAgICB9OwotICAgIHJlYWRlci5yZWFkQXNUZXh0
KGJsb2IpOwotfQotCi1mdW5jdGlvbiBjaGVja0Jsb2JDb250ZW50cyhibG9iLCBleHBlY3RlZCwg
Y2FsbGJhY2spCi17Ci0gICAgcmVhZEJsb2JBc1RleHQoYmxvYiwgZnVuY3Rpb24odGV4dCkgewot
ICAgICAgICB3aW5kb3cudGV4dCA9IHRleHQ7Ci0gICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygidGV4dCIsIGV4cGVjdGVkKTsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9KTsKLX0KLQot
ZnVuY3Rpb24gY29tcGFyZUJsb2JzKGJsb2IxLCBibG9iMiwgY2FsbGJhY2spCi17Ci0gICAgcmVh
ZEJsb2JBc1RleHQoYmxvYjEsIGZ1bmN0aW9uKHRleHQxKSB7Ci0gICAgICAgIHJlYWRCbG9iQXNU
ZXh0KGJsb2IyLCBmdW5jdGlvbih0ZXh0MikgewotICAgICAgICAgICAgd2luZG93LnRleHQxID0g
dGV4dDE7Ci0gICAgICAgICAgICB3aW5kb3cudGV4dDIgPSB0ZXh0MjsKLSAgICAgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygidGV4dDIiLCB0ZXh0MSk7Ci0gICAgICAgICAgICBjYWxsYmFj
aygpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gdGVzdEJsb2IoY2FsbGJh
Y2spCi17Ci0gICAgZGVidWcoIlRlc3RpbmcgQmxvYiIpOwotCi0gICAgLy8gRklYTUU6IEJsb2Is
IEZpbGUsIGFuZCBGaWxlTGlzdCBzdXBwb3J0IGlzIGluY29tcGxldGUuCi0gICAgLy8gaHR0cDov
L2NyYnVnLmNvbS8xMDgwMTIKLSAgICBkZWJ1ZygiU2tpcHBpbmcgdGVzdCIpOwotICAgIGNhbGxi
YWNrKCk7Ci0gICAgcmV0dXJuOwotCi0gICAgZXZhbEFuZExvZygiQmxvYkJ1aWxkZXIgPSB3aW5k
b3cuQmxvYkJ1aWxkZXIgfHwgd2luZG93LldlYktpdEJsb2JCdWlsZGVyIik7Ci0gICAgc2hvdWxk
QmVUcnVlKCJCbG9iQnVpbGRlciAhPSBudWxsIik7Ci0gICAgc2hvdWxkQmVUcnVlKCJGaWxlUmVh
ZGVyICE9IG51bGwiKTsKLSAgICBldmFsQW5kTG9nKCJidWlsZGVyID0gbmV3IEJsb2JCdWlsZGVy
KCkiKTsKLSAgICBldmFsQW5kTG9nKCJ0ZXN0X2NvbnRlbnQgPSAnVGhpcyBpcyBhIHRlc3QuIFRo
aXMgaXMgb25seSBhIHRlc3QuJyIpOwotICAgIGV2YWxBbmRMb2coImJ1aWxkZXIuYXBwZW5kKHRl
c3RfY29udGVudCkiKTsKLSAgICBldmFsQW5kTG9nKCJ0ZXN0X2RhdGEgPSBidWlsZGVyLmdldEJs
b2IoKSIpOwotICAgIHRlc3RWYWx1ZSh0ZXN0X2RhdGEsIGZ1bmN0aW9uKHJlc3VsdCkgewotICAg
ICAgICB3aW5kb3cucmVzdWx0ID0gcmVzdWx0OwotICAgICAgICBzaG91bGRCZVRydWUoInRlc3Rf
ZGF0YSAhPT0gcmVzdWx0Iik7Ci0gICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlc3VsdCkiLCAiW29iamVjdCBCbG9iXSIpOwotICAg
ICAgICBzaG91bGRCZSgicmVzdWx0LnNpemUiLCAidGVzdF9kYXRhLnNpemUiKTsKLSAgICAgICAg
c2hvdWxkQmUoInJlc3VsdC50eXBlIiwgInRlc3RfZGF0YS50eXBlIik7Ci0gICAgICAgIGNoZWNr
QmxvYkNvbnRlbnRzKHJlc3VsdCwgdGVzdF9jb250ZW50LCBjYWxsYmFjayk7Ci0gICAgfSk7Ci19
Ci0KLWZ1bmN0aW9uIGNvbXBhcmVGaWxlcyhmaWxlMSwgZmlsZTIsIGNhbGxiYWNrKQotewotICAg
IHdpbmRvdy5maWxlMSA9IGZpbGUxOwotICAgIHdpbmRvdy5maWxlMiA9IGZpbGUyOwotICAgIHNo
b3VsZEJlVHJ1ZSgiZmlsZTEgIT09IGZpbGUyIik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmlsZTEpIiwgIltvYmplY3QgRmlsZV0i
KTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu
Y2FsbChmaWxlMikiLCAiW29iamVjdCBGaWxlXSIpOwotICAgIGRlYnVnKCJmaWxlMS5zaXplOiAi
ICsgZmlsZTEuc2l6ZSk7Ci0gICAgc2hvdWxkQmUoImZpbGUxLnNpemUiLCAiZmlsZTIuc2l6ZSIp
OwotICAgIGRlYnVnKCJmaWxlMS50eXBlOiAiICsgZmlsZTEudHlwZSk7Ci0gICAgc2hvdWxkQmUo
ImZpbGUxLnR5cGUiLCAiZmlsZTIudHlwZSIpOwotICAgIGRlYnVnKCJmaWxlMS5uYW1lOiAiICsg
ZmlsZTEubmFtZSk7Ci0gICAgc2hvdWxkQmUoImZpbGUxLm5hbWUiLCAiZmlsZTIubmFtZSIpOwot
ICAgIHNob3VsZEJlKCJTdHJpbmcoZmlsZTEubGFzdE1vZGlmaWVkRGF0ZSkiLCAiU3RyaW5nKGZp
bGUyLmxhc3RNb2RpZmllZERhdGUpIik7Ci0gICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIGNv
bXBhcmVCbG9icyhmaWxlMSwgZmlsZTIsIGNhbGxiYWNrKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9u
IHRlc3RGaWxlKGNhbGxiYWNrKQotewotICAgIGRlYnVnKCJUZXN0aW5nIEZpbGUiKTsKLQotICAg
IC8vIEZJWE1FOiBCbG9iLCBGaWxlLCBhbmQgRmlsZUxpc3Qgc3VwcG9ydCBpcyBpbmNvbXBsZXRl
LgotICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTA4MDEyCi0gICAgZGVidWcoIlNraXBwaW5nIHRl
c3QiKTsKLSAgICBjYWxsYmFjaygpOwotICAgIHJldHVybjsKLQotICAgIGV2YWxBbmRMb2coInRl
c3RfY29udGVudCA9IGZpbGVJbnB1dC5maWxlc1swXSIpOwotCi0gICAgd2luZG93LnRlc3RfZGF0
YSA9IHRlc3RfY29udGVudDsKLSAgICB0ZXN0VmFsdWUodGVzdF9kYXRhLCBmdW5jdGlvbihyZXN1
bHQpIHsKLSAgICAgICAgd2luZG93LnJlc3VsdCA9IHJlc3VsdDsKLSAgICAgICAgY29tcGFyZUZp
bGVzKHJlc3VsdCwgdGVzdF9kYXRhLCBjYWxsYmFjayk7Ci0gICAgfSk7Ci19Ci0KLQotZnVuY3Rp
b24gdGVzdEZpbGVMaXN0KGNhbGxiYWNrKQotewotICAgIGRlYnVnKCJUZXN0aW5nIEZpbGVMaXN0
Iik7Ci0KLSAgICAvLyBGSVhNRTogQmxvYiwgRmlsZSwgYW5kIEZpbGVMaXN0IHN1cHBvcnQgaXMg
aW5jb21wbGV0ZS4KLSAgICAvLyBodHRwOi8vY3JidWcuY29tLzEwODAxMgotICAgIGRlYnVnKCJT
a2lwcGluZyB0ZXN0Iik7Ci0gICAgY2FsbGJhY2soKTsKLSAgICByZXR1cm47Ci0KLSAgICBldmFs
QW5kTG9nKCJ0ZXN0X2NvbnRlbnQgPSBmaWxlSW5wdXQuZmlsZXMiKTsKLQotICAgIHdpbmRvdy50
ZXN0X2RhdGEgPSB0ZXN0X2NvbnRlbnQ7Ci0gICAgdGVzdFZhbHVlKHRlc3RfZGF0YSwgZnVuY3Rp
b24ocmVzdWx0KSB7Ci0gICAgICAgIHdpbmRvdy5yZXN1bHQgPSByZXN1bHQ7Ci0gICAgICAgIHNo
b3VsZEJlVHJ1ZSgidGVzdF9kYXRhICE9PSByZXN1bHQiKTsKLSAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVzdWx0KSIsICJbb2Jq
ZWN0IEZpbGVMaXN0XSIpOwotICAgICAgICBzaG91bGRCZSgicmVzdWx0Lmxlbmd0aCIsICJ0ZXN0
X2RhdGEubGVuZ3RoIik7Ci0gICAgICAgIGkgPSAwOwotICAgICAgICBmdW5jdGlvbiBkb05leHQo
KSB7Ci0gICAgICAgICAgICBpZiAoaSA+PSB0ZXN0X2RhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZGVidWcoImNvbXBhcmluZyBmaWxlWyIgKyBpICsgIl0iKTsKLSAgICAgICAgICAgICAgICBjb21w
YXJlRmlsZXMocmVzdWx0W2ldLCB0ZXN0X2RhdGFbaSsrXSwgZG9OZXh0KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBkb05leHQoKTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24g
dGVzdEFycmF5KGNhbGxiYWNrKSB7Ci0gICAgZGVidWcoIlRlc3RpbmcgQXJyYXkiKTsKLSAgICBl
dmFsQW5kTG9nKCJ0ZXN0X2RhdGEgPSBbXSIpOwotICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YVsw
XSA9ICdmb28nIik7Ci0gICAgZXZhbEFuZExvZygidGVzdF9kYXRhWzFdID0gJ2JhciciKTsKLSAg
ICBldmFsQW5kTG9nKCJ0ZXN0X2RhdGFbMTBdID0gdHJ1ZSIpOwotICAgIGV2YWxBbmRMb2coInRl
c3RfZGF0YVsxMV0gPSBmYWxzZSIpOwotICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YVsyMF0gPSAx
MjMiKTsKLSAgICBldmFsQW5kTG9nKCJ0ZXN0X2RhdGFbMjFdID0gNDU2Iik7Ci0gICAgZXZhbEFu
ZExvZygidGVzdF9kYXRhWzMwXSA9IG51bGwiKTsKLQotICAgIHRlc3RWYWx1ZSh0ZXN0X2RhdGEs
IGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICB3aW5kb3cucmVzdWx0ID0gcmVzdWx0OwotICAg
ICAgICBzaG91bGRCZVRydWUoInRlc3RfZGF0YSAhPT0gcmVzdWx0Iik7Ci0gICAgICAgIHNob3Vs
ZEJlVHJ1ZSgidGVzdF9kYXRhLmxlbmd0aCA9PT0gcmVzdWx0Lmxlbmd0aCIpOwotICAgICAgICBP
YmplY3Qua2V5cyh0ZXN0X2RhdGEpLmZvckVhY2goCi0gICAgICAgICAgICBmdW5jdGlvbihrZXkp
IHsKLSAgICAgICAgICAgICAgICBzaG91bGRCZSgidGVzdF9kYXRhWyIgKyBrZXkgKyAiXSIsICJy
ZXN1bHRbIiArIGtleSArICJdIik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgY2FsbGJhY2so
KTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gdGVzdE9iamVjdChjYWxsYmFjaykgewotICAgIGRl
YnVnKCJUZXN0aW5nIE9iamVjdCIpOwotICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YSA9IFtdIik7
Ci0gICAgZXZhbEFuZExvZygidGVzdF9kYXRhWzBdID0gJ2ZvbyciKTsKLSAgICBldmFsQW5kTG9n
KCJ0ZXN0X2RhdGFbMV0gPSAnYmFyJyIpOwotICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YVsnYSdd
ID0gdHJ1ZSIpOwotICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YVsnYiddID0gZmFsc2UiKTsKLSAg
ICBldmFsQW5kTG9nKCJ0ZXN0X2RhdGFbJ2ZvbyddID0gMTIzIik7Ci0gICAgZXZhbEFuZExvZygi
dGVzdF9kYXRhWydiYXInXSA9IDQ1NiIpOwotICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YVsnJ10g
PSBudWxsIik7Ci0KLSAgICB0ZXN0VmFsdWUodGVzdF9kYXRhLCBmdW5jdGlvbihyZXN1bHQpIHsK
LSAgICAgICAgd2luZG93LnJlc3VsdCA9IHJlc3VsdDsKLSAgICAgICAgc2hvdWxkQmVUcnVlKCJ0
ZXN0X2RhdGEgIT09IHJlc3VsdCIpOwotICAgICAgICBzaG91bGRCZVRydWUoImFycmF5Q29tcGFy
ZShPYmplY3Qua2V5cyhyZXN1bHQpLnNvcnQoKSwgT2JqZWN0LmtleXModGVzdF9kYXRhKS5zb3J0
KCkpIik7Ci0gICAgICAgIE9iamVjdC5rZXlzKHRlc3RfZGF0YSkuZm9yRWFjaCgKLSAgICAgICAg
ICAgIGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgIHNob3VsZEJlKCJ0ZXN0X2RhdGFb
IiArIEpTT04uc3RyaW5naWZ5KGtleSkgKyAiXSIsICJyZXN1bHRbIiArIEpTT04uc3RyaW5naWZ5
KGtleSkgKyAiXSIpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAg
fSk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3RCYWRUeXBlcygpCi17Ci0gICAgZGVidWcoIiIpOwotICAg
IGRlYnVnKCJUZXN0IHR5cGVzIHRoYXQgY2FuJ3QgYmUgY2xvbmVkOiIpOwotICAgIGRlYnVnKCIi
KTsKLQotICAgIGV2YWxBbmRMb2coInRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3Jl
TmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpIik7Ci0gICAgZXZhbEFuZExvZygic3Rv
cmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykiKTsKLSAgICB0cmFuc2Fj
dGlvbi5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Ci0gICAgdHJhbnNhY3Rpb24u
b25jb21wbGV0ZSA9IHVuZXhwZWN0ZWRDb21wbGV0ZUNhbGxiYWNrOwotICAgIHRyYW5zYWN0aW9u
Lm9uYWJvcnQgPSBkb25lOwotCi0gICAgZGVidWcoIiIpOwotICAgIGRlYnVnKCJPdGhlciBKYXZh
U2NyaXB0IG9iamVjdCB0eXBlczoiKTsKLSAgICBldmFsQW5kRXhwZWN0RXhjZXB0aW9uKCJzdG9y
ZS5wdXQobmV3IEVycm9yLCAna2V5JykiLCAiRE9NRXhjZXB0aW9uLkRBVEFfQ0xPTkVfRVJSIik7
Ci0gICAgZXZhbEFuZEV4cGVjdEV4Y2VwdGlvbigic3RvcmUucHV0KG5ldyBGdW5jdGlvbiwgJ2tl
eScpIiwgIkRPTUV4Y2VwdGlvbi5EQVRBX0NMT05FX0VSUiIpOwotCi0gICAgZGVidWcoIiIpOwot
ICAgIGRlYnVnKCJPdGhlciBob3N0IG9iamVjdCB0eXBlczoiKTsKLSAgICBldmFsQW5kRXhwZWN0
RXhjZXB0aW9uKCJzdG9yZS5wdXQod2luZG93LCAna2V5JykiLCAiRE9NRXhjZXB0aW9uLkRBVEFf
Q0xPTkVfRVJSIik7Ci0gICAgZXZhbEFuZEV4cGVjdEV4Y2VwdGlvbigic3RvcmUucHV0KGRvY3Vt
ZW50LCAna2V5JykiLCAiRE9NRXhjZXB0aW9uLkRBVEFfQ0xPTkVfRVJSIik7Ci0gICAgZXZhbEFu
ZEV4cGVjdEV4Y2VwdGlvbigic3RvcmUucHV0KGRvY3VtZW50LmJvZHksICdrZXknKSIsICJET01F
eGNlcHRpb24uREFUQV9DTE9ORV9FUlIiKTsKLX0KLQotdGVzdCgpOwotCi08L3NjcmlwdD4KLTwv
Ym9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDkzZTk1ODguLmEyNDkz
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSw0MSArMSwzIEBACi0yMDEyLTAxLTMw
ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KLQotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNjMKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmggdXNlcyBPUyhXSU4pIGluc3RlYWQgb2YgT1MoV0lORE9XUykK
LQotICAgICAgICBSdWJiZXIgc3RhbXBlZCBieSBHZW9mZiBHYXJlbgotCi0gICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgotCi0yMDEyLTAxLTMwICBHYXZpbiBCYXJy
YWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KLQotICAgICAgICBVbnJldmlld2VkIGJ1
aWxkIGZpeCBmb3IgaW50ZXJwcmV0ZXIgYnVpbGRzLgotCi0gICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKLSAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgotICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgotICAgICAgICAoQ29kZUJsb2NrKToKLSAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6Ci0gICAgICAgIChKU0M6OkludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZSk6Ci0gICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOgotICAg
ICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6c2FtcGxlKToKLQotMjAxMi0wMS0zMCAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBi
dWlsZCBmaXggZm9sbG93aW5nIGJ1ZyM3Njg1NQotCi0gICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOgotCi0yMDEyLTAxLTMwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgot
Ci0gICAgICAgIENhc2VGb2xkaW5nSGFzaDo6aGFzaCgpIGRvZXNuJ3QgaGFuZGxlIDggYml0IHN0
cmluZ3MgZGlyZWN0bHkKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc2NjUyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KLQotICAg
ICAgICAqIHd0Zi90ZXh0L1N0cmluZ0hhc2guaDoKLSAgICAgICAgKFdURjo6Q2FzZUZvbGRpbmdI
YXNoOjpoYXNoKTogQWRkZWQgOCBiaXQgc3RyaW5nIGNvZGUgcGF0aC4KLQogMjAxMi0wMS0zMCAg
TWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBzdHJpbmdQcm90
b0Z1bmNSZXBsYWNlIGNvbnZlcnRzIDggYml0IHN0cmluZ3MgdG8gMTYgYml0IGR1cmluZyByZXBs
YWNlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggMmY3
YjMxNS4uYjQ0NWEzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CkBAIC00MTUsNyArNDE1LDYgQEAgX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCiBfX1pOM1dURjEzTWV0YUFsbG9j
YXRvcjE3ZnJlZUZyZWVTcGFjZU5vZGVFUE5TMF8xM0ZyZWVTcGFjZU5vZGVFCiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKLV9fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yOGFsbG9jYXRlRW1QdgogX19aTjNXVEYxM01ldGFBbGxvY2F0b3JDMkVtCiBfX1pOM1dURjEz
U3RyaW5nQnVpbGRlcjExc2hyaW5rVG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJl
c2VydmVDYXBhY2l0eUVqCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA5NTZmYjY3Li44MmU4YzQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgKQEAgLTUyLDcgKzUyLDcgQEAKICNkZWZpbmUgQVNTRVJUX1ZBTElEX0NPREVf
T0ZGU0VUKG9mZnNldCkgLy8gQW55dGhpbmcgZ29lcyEKICNlbmRpZgogCi0jaWYgQ1BVKFg4Nikg
JiYgT1MoV0lORE9XUykKKyNpZiBDUFUoWDg2KSAmJiBPUyhXSU4pCiAjZGVmaW5lIENBTExJTkdf
Q09OVkVOVElPTl9JU19TVERDQUxMIDEKICNpZm5kZWYgQ0RFQ0wKICNpZiBDT01QSUxFUihNU1ZD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBi
NjI0ODJkLi45MjdjMjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcApAQCAtMTQ1MCw5ICsxNDUwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29w
eVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyLCBTeW1ib2xUYWJsZSogc3ltVGFiKQog
ICAgICwgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXphdGlvbkRl
bGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQotI2lm
IEVOQUJMRShKSVQpCiAgICAgLCBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGUoQ29tcGlsZVdpdGhE
RkdVbnNldCkKLSNlbmRpZgogewogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1l
dGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggMDJmNTE4OC4uYjIyMmJmMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtMTIwMiw5ICsxMjAyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCB2b2lkIFdURjo6ZGVsZXRlT3duZWRQ
dHI8UmFyZURhdGE+KFJhcmVEYXRhKik7CiAjZW5kaWYKICAgICAgICAgT3duUHRyPFJhcmVEYXRh
PiBtX3JhcmVEYXRhOwotI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIENvbXBpbGVXaXRoREZHU3Rh
dGUgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlOwotI2VuZGlmCiAgICAgfTsKIAogICAgIC8vIFBy
b2dyYW0gY29kZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUg
Z2xvYmFsIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKaW5kZXggNDQ1ZTI4Ni4uMmQ4NzkwZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zMzA4LDEyICsz
MzA4LDEzIEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIGludCBkaXJlY3QgPSB2UENb
OF0udS5vcGVyYW5kOwogCiAgICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5y
KGJhc2UpLmpzVmFsdWUoKTsKKyAgICAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsK
KyAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogICAg
ICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7
CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkp
OwotICAgICAgICBpZiAoZGlyZWN0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpOwotICAgICAgICAgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KCpn
bG9iYWxEYXRhLCBpZGVudCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCksIHNsb3QpOwot
ICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgIGJhc2VPYmpl
Y3QtPnB1dERpcmVjdCgqZ2xvYmFsRGF0YSwgaWRlbnQsIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNW
YWx1ZSgpLCBzbG90KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChj
YWxsRnJhbWUsIGlkZW50LCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7CiAg
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIApAQCAtMzQyNywxMiArMzQyOCwxMyBAQCBz
a2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBpbnQgZGlyZWN0ID0gdlBDWzhdLnUub3BlcmFu
ZDsKIAogICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cihiYXNlKS5qc1Zh
bHVlKCk7CisgICAgICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgICAgIEpT
T2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwogICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAg
aWYgKGRpcmVjdCkgewotICAgICAgICAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsK
LSAgICAgICAgICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdCgqZ2xvYmFsRGF0YSwg
aWRlbnQsIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsKLSAgICAgICAgfSBl
bHNlCisgICAgICAgIGlmIChkaXJlY3QpCisgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJl
Y3QoKmdsb2JhbERhdGEsIGlkZW50LCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwgc2xv
dCk7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBp
ZGVudCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCksIHNsb3QpOwogICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9Db2RlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGUuY3BwCmluZGV4IDc3OTRmNTguLjE3MjE5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcApAQCAtOTIsMTEgKzkyLDkgQEAgdm9pZCBDb2RlUHJv
ZmlsZTo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKQogCiAgICAgd2hpbGUg
KGZyYW1lUG9pbnRlcikgewogICAgICAgICBDb2RlVHlwZSB0eXBlOwotCi0jaWYgRU5BQkxFKEpJ
VCkKLSAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgc2FtcGxlIGZlbGwgaW4gSklUIGNvZGUs
IGFuZCBpZiBzbywgZnJvbSB3aGljaCBKSVQgJiB3aHkuCiAgICAgICAgIHZvaWQqIG93bmVyVUlE
ID0gQ29kZVByb2ZpbGluZzo6Z2V0T3duZXJVSURGb3JQQyhwYyk7CiAKKyAgICAgICAgLy8gRGV0
ZXJtaW5lIGlmIHRoaXMgc2FtcGxlIGZlbGwgaW4gSklUIGNvZGUsIGFuZCBpZiBzbywgZnJvbSB3
aGljaCBKSVQgJiB3aHkuCiAgICAgICAgIGlmICghb3duZXJVSUQpCiAgICAgICAgICAgICB0eXBl
ID0gRW5naW5lRnJhbWU7CiAgICAgICAgIGVsc2UgaWYgKG93bmVyVUlEID09IEdMT0JBTF9USFVO
S19JRCkKQEAgLTExNCw5ICsxMTIsNiBAQCB2b2lkIENvZGVQcm9maWxlOjpzYW1wbGUodm9pZCog
cGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgdHlwZSA9IEJhc2VsaW5lUHJvZmlsZTsKICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgdHlw
ZSA9IEVuZ2luZUZyYW1lOwotI2VuZGlmCiAKICAgICAgICAgLy8gQSBzYW1wbGUgaW4gSklUIGNv
ZGUgdGVybWluYXRlcyB0aGUgdHJhY2UuCiAgICAgICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJl
Y29yZChwYywgdHlwZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1N0cmluZ0hhc2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdI
YXNoLmgKaW5kZXggMWI3YTJlZS4uY2RlNTkxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0hhc2guaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL3RleHQvU3RyaW5nSGFzaC5oCkBAIC0xMDAsOSArMTAwLDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goU3RyaW5nSW1wbCogc3RyKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoc3RyLT5pczhCaXQoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gaGFzaChzdHItPmNoYXJhY3RlcnM4KCksIHN0ci0+bGVuZ3RoKCkpOwotICAgICAgICAgICAg
cmV0dXJuIGhhc2goc3RyLT5jaGFyYWN0ZXJzMTYoKSwgc3RyLT5sZW5ndGgoKSk7CisgICAgICAg
ICAgICByZXR1cm4gaGFzaChzdHItPmNoYXJhY3RlcnMoKSwgc3RyLT5sZW5ndGgoKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBMQ2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQwNzdjZTUuLjU0YjBiMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMTc4ICsxLDgwIEBACi0yMDEyLTAxLTMwICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhu
ZWFAYWRvYmUuY29tPgorMjAxMi0wMS0zMCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRo
YWxAbm9raWEuY29tPgogCi0gICAgICAgIFtDU1NSZWdpb25zXUFkZCBzdXBwb3J0IGZvciBiYWNr
Z3JvdW5kLWNvbG9yIGluIHJlZ2lvbiBzdHlsaW5nCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQ4OAotCi0gICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IEh5YXR0LgotCi0gICAgICAgIEJhc2VkIG9uIHdvcmsgYnkgQWxleGFuZHJ1IENoaWN1bGl0YSAo
YWNoaWN1QGFkb2JlLmNvbSkuCi0gICAgICAgIFByZXZpb3VzIHBhdGNoZXMgZm9yIHJlZ2lvbiBz
dHlsaW5nIHdlcmUgdG91Y2hpbmcgUmVuZGVyT2JqZWN0OjpzdHlsZSgpIG1ldGhvZC4gQWZ0ZXIg
c2V2ZXJhbCBhdHRlbXB0cyB0byBhdm9pZCByZWdyZXNzaW9ucwotICAgICAgICAoaW5jbHVkaW5n
IGNhY2hpbmcgb2YgUmVuZGVyT2JqZWN0OjpzdHlsZSgpIHBvaW50ZXIgaW4gbW9zdCB1c2VkIG1l
dGhvZHMpLCB3ZSBkZWNpZGVkIHRvIGF0dGVtcHQgYSBkaWZmZXJlbnQgYXBwcm9hY2g6Ci0gICAg
ICAgIFN0ZXAxOiBiZWZvcmUgZWFjaCByZWdpb24gaXMgcmVwYWludGVkLCB3ZSBjb21wdXRlIHRo
ZSBzdHlsZSBmb3IgZWFjaCBib3ggdGhhdCBmYWxscyBpbnRvIHRoZSByZWdpb24KLSAgICAgICAg
U3RlcDI6IGJlZm9yZSBwYWludCwgd2Ugc3RvcmUgdGhlIGJveCBvcmlnaW5hbCBzdHlsZQotICAg
ICAgICBTdGVwMzogcGFpbnQgdGhlIHJlZ2lvbiBjb250ZW50cyB1c2luZyB0aGUgc3R5bGUgaW4g
cmVnaW9uCi0gICAgICAgIFN0ZXA0OiBhZnRlciBwYWludCBpcyBmaW5pc2hlZCwgd2UgcmVzdG9y
ZSB0aGUgYm94IG9yaWdpbmFsIHN0eWxlIChhbmQgc3RvcmUgdGhlIGJveCBzdHlsZSBpbiByZWdp
b24gZm9yIGZ1dHVyZSByZWdpb24gcGFpbnQpCi0KLSAgICAgICAgVGVzdHMgZm9yIHJlZ2lvbiBz
dHlsaW5nIGFyZSBhbHNvIGVuYWJsZWQgd2l0aCB0aGlzIHBhdGNoLgotCi0gICAgICAgICogV2Vi
Q29yZS5leHAuaW46Ci0gICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgot
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hDdXN0b21T
dHlsZSk6Ci0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpzZXRSZWdpb25SYW5n
ZUZvckJveCk6Ci0gICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaDoKLSAgICAg
ICAgKCk6Ci0gICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKLSAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwYWludCk6Ci0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGl0VGVzdCk6Ci0gICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6Ci0gICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgotICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpzdHlsZSk6Ci0gICAgICAgIChSZW5kZXJPYmplY3QpOgotICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwOgotICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUpOgotICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSZWdpb24uY3BwOgotICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpSZW5kZXJS
ZWdpb24pOgotICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZWdpb25Cb3hlc1Jl
Z2lvblN0eWxlKToKLSAgICAgICAgKFdlYkNvcmUpOgotICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UmVnaW9uOjpyZXN0b3JlUmVnaW9uQm94ZXNPcmlnaW5hbFN0eWxlKToKLSAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclJlZ2lvbjo6cGFpbnRSZXBsYWNlZCk6Ci0gICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZWdpb246OnNldFJlbmRlckJveFJlZ2lvbkluZm8pOgotICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUmVnaW9uOjp0YWtlUmVuZGVyQm94UmVnaW9uSW5mbyk6Ci0gICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZWdpb246OnJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8pOgotICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVnaW9uOjpyZW5kZXJCb3hSZWdpb25TdHlsZSk6Ci0gICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSZWdpb246OmNvbXB1dGVTdHlsZUluUmVnaW9uKToKLSAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJlZ2lvbjo6Y2xlYXJCb3hTdHlsZUluUmVnaW9uKToKLSAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUmVnaW9uLmg6Ci0gICAgICAgIChSZW5kZXJSZWdpb24pOgotICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OlJl
bmRlclZpZXcpOgotICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6Ci0gICAgICAgIChX
ZWJDb3JlKToKLSAgICAgICAgKFJlbmRlclZpZXcpOgotCi0yMDEyLTAxLTMwICBKZXNzaWUgQmVy
bGluICA8amJlcmxpbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgV2ViQ29yZSBidWlsZCBleGNlZWRz
IGFkZHJlc3Mgc3BhY2Ugb24gMzItYml0IFdpbmRvd3MgYnVpbGRlcnMgKGFnYWluKS4KLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzU3Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBBZGQgYW4gSW5zcGVjdG9yIEFs
bC1Jbi1PbmUgZmlsZSwgYnV0IG9ubHkgdXNlIGl0IGluIFJlbGVhc2UgYW5kIFByb2R1Y3Rpb24g
YnVpbGRzLgotICAgICAgICBUaGlzIGRpZmZlcnMgZnJvbSBvdXIgb3RoZXIgQWxsLUluLU9uZSBm
aWxlcywgYnV0IGl0IGlzIGEgYmV0dGVyIGFwcHJvYWNoIGJlY2F1c2UgaXQgbWFrZXMKLSAgICAg
ICAgZGVidWdnaW5nIHBvc3NpYmxlIGluIHRoZSBEZWJ1ZyBjb25maWd1cmF0aW9uICh0aGUgc3lt
Ym9scyB3aWxsIGJlIGluIHRoZSBjb3JyZWN0IC5vYmogZmlsZQotICAgICAgICBmb3IgdGhlIG9y
aWdpbmFsIC5jcHAgZmlsZXMpLgotCi0gICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6Ci0gICAgICAgIEFsc28sIGxldCBWUyBoYXZlIGl0cyB3YXkgd2l0aCB0aGUgdmNwcm9q
IGZpbGUuCi0gICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcDogQWRkZWQu
Ci0KLTIwMTItMDEtMjggIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KLQot
ICAgICAgICBMaW1pdCBwZXJpb2RpYyBmbHVzaGluZyBpbnNpZGUgSW1hZ2VCdWZmZXJDRyB0byBq
dXN0IExpb24KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc3MzUzCi0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDMyODMwOT4KLQotICAgICAgICBSZXZp
ZXdlZCBieSBDaHJpcyBNYXJyaW4uCi0KLSAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHLmNwcDoKLSAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGFDRy5oOgotCi0yMDEyLTAxLTMwICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bn
b29nbGUuY29tPgotCi0gICAgICAgIE1lbW9yeSBsZWFrIGNhdXNlZCBieSBQZWVyQ29ubmVjdGlv
biBhZGQgYSBOVUxMIG1lZGlhIHN0cmVhbQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNTAKLQotICAgICAgICBJdCB3YXMgbXkgbWlzc3VuZGVyc3Rh
bmRpbmcgdGhhdCB0aGUgSURMIGtleXdvcmQgW1N0cmljdFR5cGVDaGVja2luZ10gYWxzbyBwcm90
ZWN0cyBhZ2FpbnN0Ci0gICAgICAgIG51bGwgb3IgdW5kZWZpbmVkIGFyZ3VtZW50cywgaXQgZG9l
c24ndC4gQWRkZWQgY2hlY2tzIGZvciBudWxsIHBvaW50ZXJzLgotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgVGVzdDogZmFzdC9tZWRpYXN0cmVhbS9wZWVyY29u
bmVjdGlvbi1hZGRzdHJlYW0uaHRtbAotCi0gICAgICAgICogbWVkaWFzdHJlYW0vUGVlckNvbm5l
Y3Rpb24uY3BwOgotICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmFkZFN0cmVhbSk6
Ci0gICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVtb3ZlU3RyZWFtKToKLQotMjAx
Mi0wMS0yNiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+Ci0KLSAgICAgICAgW1dpbmRv
d3NdIE9wdGlvbmFsbHkgaW52ZXJ0IGNvbG9ycyB3aGVuIGRyYXdpbmcgdG8gYSBXZWJWaWV3J3Mg
YmFja2luZyBzdG9yZS4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc3MTY4Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKyAgICAgICAg
W1F0XVtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXIgQVBJIHRvIHVzZSBJbWFnZUJ1ZmZl
cnMgd2hlbiBwb3NzaWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc3MTQ4CiAKLSAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oOiBBc3NlcnQgdGhhdCBDb21wb3NpdGVEaWZmZXJlbmNlIGlzCi0gICAgICAgIG5vdCBjb252
ZXJ0ZWQgdG8gYSBDU1MgdmFsdWUuIEV4cG9zaW5nIGEgbmV3IGNvbXBvc2l0aW5nIG9wZXJhdGlv
biB0bwotICAgICAgICBDU1MgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4KLSAg
ICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZSk6Ci0g
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOiBBZGQgQ29tcG9zaXRl
RGlmZmVyZW5jZSBhcyBhCi0gICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yLiBBbHNvLCByZW1vdmUg
YW4gb3V0ZGF0ZWQgY29tbWVudC4KLSAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKTogTWFwCi0gICAgICAgIENvbXBvc2l0ZURpZmZl
cmVuY2UgdG8ga0NHQmxlbmRNb2RlRGlmZmVyZW5jZS4KKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCiAKLTIwMTItMDEtMjggIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKyAgICAgICAgUmVtb3ZlZCBUZXh0dXJlTWFwcGVyUXQsIGFuZCBpbnN0ZWFkIGNy
ZWF0ZWQgYSBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgY2xhc3MsCisgICAgICAgIHdoaWNoIHJl
c3BvbmRzIHRvIGFuICJVbmFjY2VsZXJhdGVkIiBtb2RlIG9mIFRleHR1cmVNYXBwZXIsIGluc3Rl
YWQgb2YgY3JlYXRpbmcgc3ViY2xhc3NlcworICAgICAgICBvZiBUZXh0dXJlTWFwcGVyIGRpcmVj
dGx5LiBUaGlzIGFsbG93cyB1c2luZyB0aGUgc29mdHdhcmUgZmFsbGJhY2sgb2YgVGV4dHVyZU1h
cHBlciBieSBhbnkKKyAgICAgICAgcG9ydC4KIAotICAgICAgICBMaW1pdCB0aGUgc2hhZG93IG9m
ZnNldCBDRyBoYWNrIHRvIGp1c3QgU0wgYW5kIExpb24KLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzQ4Ci0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
MDE1ODAxNj4KKyAgICAgICAgVG8gbWFrZSB0aGUgSW1hZ2VCdWZmZXIgYmFja2VuZCBlYXNpZXIs
IGNvbnRlbnQgdXBkYXRlcyB0byBCaXRtYXBUZXh0dXJlIGNhbiBub3cgdXNlIGVpdGhlcgorICAg
ICAgICBhbiBpbWFnZSwgb3IgYSByYXcgZGF0YSBwb2ludGVyLiBUaGUgcmF3IGRhdGEgcG9pbnRl
ciBpcyBwcm92aWRlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywKKyAgICAgICAgYXMgY29udmVy
dGluZyBkYXRhIHRvL2Zyb20gSW1hZ2UgcmVmZXJlbmNlcyBpbiBRdCBnZW5lcmF0ZXMgdW5uZWNl
c3NhcnkgZGVlcCBjb3BpZXMgb2YgdGhlCisgICAgICAgIGltYWdlIGRhdGEuCiAKLSAgICAgICAg
UmV2aWV3ZWQgYnkgQ2hyaXMgTWFycmluLgotCi0gICAgICAgIE5vIG5ldyB0ZXN0cywgY3VycmVu
dCB0ZXN0cyBjb3ZlciB0aGlzLgotCi0gICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwOgotICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIEFsc28sIEZ1bmN0aW9ucyB0aGF0IHVzZSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB3ZXJlIGFkZGVkIHRvIEdyYXBoaWNzQ29udGV4dCwgdG8gYWxsb3cg
Zm9yCisgICAgICAgIDNEIHRyYW5zZm9ybXMgaW4gY3Jvc3MgcGxhdGZvcm0gY29kZS4gVGhlIGZh
bGxiYWNrIGNvZGUgc3RpbGwgdXNlcyB0aGUgMkQgQ1RNcy4KIAotMjAxMi0wMS0zMCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisgICAgICAgIEFmdGVyIHRoaXMgcGF0Y2ggZXZlcnl0
aGluZyByZW5kZXJzIHRoZSBzYW1lLCBhbmQgdGhlcmUgYXJlIG5vIG5ldyBpbWFnZSBkZWVwIGNv
cGllcy4KIAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzcyNjMKLSAgICAgICAgUGxhdGZvcm1TY3JlZW5NYWMgc2hvdWxkIG5vdCByZWx5IG9uIE5TV2lu
ZG93IGZvciBpbXBvcnRhbnQgYml0cyBvZiBkYXRhCisgICAgICAgIE5vIGJlaGF2aW9yYWwgY2hh
bmdlcy4KIAotICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KLQotICAgICAgICBUaGUg
bWFpbiBwcm9ibGVtIGlzIHRoYXQgd2UgY2Fubm90IHJlbHkgb24gdGhlIE5TV2luZG93IGZvciBp
bmZvcm1hdGlvbiBhYm91dCAKLSAgICAgICAgdGhlIGRldmljZVNjYWxlRmFjdG9yIGJlY2F1c2Ug
d2UgY2Fubm90IGFjY2VzcyBhbiBOU1dpbmRvdyBmcm9tIHdpdGhpbiAKLSAgICAgICAgV2ViQ29y
ZSBmb3IgV2ViS2l0MiB3aW5kb3dzLiBJbnN0ZWFkLCB3ZSBjYW4gZmV0Y2ggaXQgZnJvbSAKLSAg
ICAgICAgV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IoKSwgYnV0IHdlIG5lZWQgYSBGcmFtZSB0
byBjYWxsIHRoYXQuIFNvIAotICAgICAgICBzY3JlZW5BdmFpbGFibGVSZWN0IGFuZCBzY3JlZW5S
ZWN0IGJvdGggbm93IHRha2UgYSBGcmFtZVZpZXcqIGluc3RlYWQgb2YgYSAKLSAgICAgICAgV2lk
Z2V0Ki4gQWxsIGV4aXN0aW5nIGNhbGwgc2l0ZXMgYWN0dWFsbHkgc2VudCBhIEZyYW1lVmlldyBp
biBhbnl3YXksIHNvIHRoaXMgCi0gICAgICAgIGlzIG5vdCBhIGJpZyBjaGFuZ2UsIGJ1dCBpdCBk
b2VzIHJlcXVpcmUgdG91Y2hpbmcgYSBsb3Qgb2YgcGxhdGZvcm1zLgotICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgotICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmg6CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNvbmNhdFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmdldFRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4
dHVyZU1hcHBlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTERhdGEpOgorICAg
ICAgICAoQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVH
TDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
YmVnaW5QYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OnN3aXp6bGVSR0IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBU
ZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpi
aW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNy
ZWF0ZUFjY2VsZXJhdGVkKToKICAgICAgICAgKFdlYkNvcmUpOgotICAgICAgICAqIHBsYXRmb3Jt
L2JsYWNrYmVycnkvUGxhdGZvcm1TY3JlZW5CbGFja0JlcnJ5LmNwcDoKLSAgICAgICAgKFdlYkNv
cmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOgotICAgICAgICAoV2ViQ29yZTo6c2NyZWVuUmVjdCk6
Ci0gICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHA6
Ci0gICAgICAgIChXZWJDb3JlOjpzY3JlZW5SZWN0KToKLSAgICAgICAgKFdlYkNvcmU6OnNjcmVl
bkF2YWlsYWJsZVJlY3QpOgotICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3Vw
cG9ydC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmFjY2VsZXJhdGlvbk1vZGUpOgogICAgICAgICAoV2ViQ29yZSk6Ci0gICAg
ICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpnZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUcmFuc2Zvcm0pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZTo6Qml0bWFwVGV4dHVyZSk6CisgICAgICAgIChCaXRtYXBUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OmJwcCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlOjppc09wYXF1ZSk6CiAgICAgICAgICgpOgotICAgICAgICAqIHBsYXRmb3JtL2Vm
bC9QbGF0Zm9ybVNjcmVlbkVmbC5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpzY3JlZW5SZWN0KToK
LSAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOgotICAgICAgICAqIHBsYXRm
b3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpzY3JlZW5S
ZWN0KToKLSAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOgotICAgICAgICAq
IHBsYXRmb3JtL3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwOgotICAgICAgICAoV2ViQ29yZTo6c2Ny
ZWVuUmVjdCk6Ci0gICAgICAgIChXZWJDb3JlOjpzY3JlZW5BdmFpbGFibGVSZWN0KToKLSAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwOgotICAgICAgICAoV2ViQ29y
ZTo6c2NyZWVuUmVjdCk6Ci0gICAgICAgIChXZWJDb3JlOjpzY3JlZW5BdmFpbGFibGVSZWN0KToK
LSAgICAgICAgKiBwbGF0Zm9ybS93eC9TY3JlZW5XeC5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpz
Y3JlZW5SZWN0KToKLSAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOgotCi0g
ICAgICAgIFRoZSBNYWMtb25seSBmdW5jdGlvbnMgdG9Vc2VyU3BhY2UoKSBhbmQgdG9EZXZpY2VT
cGFjZSgpIHdlcmUgYWxzbyB1cGRhdGVkIHRvIAotICAgICAgICB0YWtlIGEgcGFyYW1ldGVyIGZv
ciB0aGUgZGV2aWNlU2NhbGVGYWN0b3IuCi0gICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRmb3Jt
U2NyZWVuTWFjLm1tOgotICAgICAgICAoV2ViQ29yZTo6c2NyZWVuUmVjdCk6Ci0gICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5BdmFpbGFibGVSZWN0KToKLSAgICAgICAgKFdlYkNvcmU6OnRvVXNlclNw
YWNlKToKLSAgICAgICAgKFdlYkNvcmU6OnRvRGV2aWNlU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlcjo6c2V0R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6OmdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChUZXh0dXJlTWFwcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OlRleHR1cmVNYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNr
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJOb2RlKToKIAogMjAxMi0wMS0zMCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGIzNGM1NDIu
LjcwYjhjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzk0MSw3ICszOTQxLDYgQEAgd2luMzI6IXdpbjMy
LWcrKyo6Y29udGFpbnMoUU1BS0VfSE9TVC5hcmNoLCB4ODZfNjQpOnsKIAogY29udGFpbnMoQ09O
RklHLCB0ZXhtYXApIHsKICAgICBIRUFERVJTICs9IFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvVGV4dHVyZU1hcHBlclF0LmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCkBAIC0zOTUwLDcgKzM5NDksNiBAQCBjb250YWlucyhD
T05GSUcsIHRleG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAogCiAgICAgU09VUkNFUyArPSBcCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKQEAgLTM5NjEsNiArMzk1OSw3
IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgICAgIEhFQURFUlMgKz0gcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCiAgICAgICAgIFNPVVJDRVMgKz0g
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICAgICAgQ09O
RklHICs9IG9wZW5nbC1zaGltcworICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9N
QVBQRVJfR0wKICAgICB9CiB9IGVsc2UgewogICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NMYXllclF0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMmVjZjA0ZC4u
NzhiMjllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTIyMCw3ICsyMjAsNyBAQCBfX1pON1dl
YkNvcmUxMVJlbmRlckxheWVyMTlzY3JvbGxSZWN0VG9WaXNpYmxlRVJLTlNfN0ludFJlY3RFUktO
U18xNVNjcm9sbEFsaWdubQogX19aTjdXZWJDb3JlMTFnbG9iYWxQb2ludEVSSzhfTlNQb2ludFA4
TlNXaW5kb3cKIF9fWk43V2ViQ29yZTExbWVtb3J5Q2FjaGVFdgogX19aTjdXZWJDb3JlMTFzdGFy
dE9mV29yZEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzlFV29yZFNpZGVFCi1fX1pON1dlYkNv
cmUxMXRvVXNlclNwYWNlRVJLNkNHUmVjdFA4TlNXaW5kb3dmCitfX1pON1dlYkNvcmUxMXRvVXNl
clNwYWNlRVJLN19OU1JlY3RQOE5TV2luZG93CiBfX1pON1dlYkNvcmUxMXdyaXRlVG9GaWxlRWlQ
S2NpCiBfX1pON1dlYkNvcmUxMkNocm9tZUNsaWVudDIzcGFpbnRDdXN0b21PdmVyaGFuZ0FyZWFF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0ludFJlY3RFUzVfUzVfCiBfX1pON1dlYkNvcmUx
MkVkaXRpbmdTdHlsZUQxRXYKQEAgLTMyNiw3ICszMjYsNyBAQCBfX1pON1dlYkNvcmUxM1Jlc291
cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgogX19aTjdXZWJDb3JlMTNUeXBpbmdDb21tYW5kMzlpbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRFUE5TXzhEb2N1bWVudEUKIF9fWk43
V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFs
T2JqZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTEzZGlyZWN0b3J5TmFtZUVSS04zV1RGNlN0
cmluZ0UKLV9fWk43V2ViQ29yZTEzdG9EZXZpY2VTcGFjZUVSS05TXzlGbG9hdFJlY3RFUDhOU1dp
bmRvd2YKK19fWk43V2ViQ29yZTEzdG9EZXZpY2VTcGFjZUVSS05TXzlGbG9hdFJlY3RFUDhOU1dp
bmRvdwogX19aTjdXZWJDb3JlMTN0b0hUTUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxl
bWVudEUKIF9fWk43V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQogX19aTjdX
ZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTEycmVtb3ZlQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNl
Q2xpZW50RQpAQCAtMTE5Miw2ICsxMTkyLDcgQEAgX19aTks3V2ViQ29yZTExU2NyaXB0VmFsdWU5
Z2V0U3RyaW5nRVBOM0pTQzlFeGVjU3RhdGVFUk4zV1RGNlN0cmluZ0UKIF9fWk5LN1dlYkNvcmUx
Mkljb25EYXRhYmFzZTEyZGF0YWJhc2VQYXRoRXYKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFz
ZTI0c2hvdWxkU3RvcFRocmVhZEFjdGl2aXR5RXYKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFz
ZTlpc0VuYWJsZWRFdgorX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTNzdHlsZUluUmVnaW9u
RXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDE0ZW5jbG9zaW5nTGF5ZXJFdgogX19aTks3
V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTVsb2NhbFRvQWJzb2x1dGVFUktOU18xMEZsb2F0UG9pbnRF
YmIKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDIzYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RF
YgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA4
NGJiYWQ0Li5mMThmNDcwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtMjU4MzQsMTkgKzI1ODM0LDE5IEBACiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxEb2N1bWVudExvYWRlci5jcHAi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcRG9jdW1lbnRMb2FkVGltaW5nLmNwcCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXERv
Y3VtZW50TG9hZGVyLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcRG9jdW1lbnRMb2Fk
VGltaW5nLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGxvYWRlclxEb2N1bWVudExvYWRUaW1pbmcuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
bG9hZGVyXERvY3VtZW50TG9hZGVyLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXERvY3VtZW50TG9hZFRpbWluZy5oIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cbG9hZGVyXERvY3VtZW50TG9hZGVyLmgiCiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKQEAgLTI2NjIxLDE0ICsyNjYyMSwxNCBAQAogCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cR2VvbG9jYXRpb25TZXJ2aWNlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEhpc3RvZ3JhbVN1cHBvcnQuY3Bw
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxIaXN0b2dyYW1TdXBwb3J0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgorICAgICAgICAgICAg
PEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEhpc3RvZ3Jh
bVN1cHBvcnQuY3BwIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgIDwvRmlsZT4KKyAg
ICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxIaXN0b2dyYW1TdXBwb3J0LmgiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgPC9G
aWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEhvc3RXaW5kb3cu
aCIKIAkJCQk+CkBAIC0zMjcwMiw3ICszMjcwMiw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xDU1NCb3JkZXJJbWFnZS5jcHAiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxjc3NcQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCIKIAkJCQk+
CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzI3
NTQsMTEgKzMyNzU0LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcQ1NTQm9yZGVySW1hZ2UuaCIKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXENTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZS5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcQ1NTQm9yZGVy
SW1hZ2UuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVi
dWd8V2luMzIiCkBAIC0zMjgxMCw3ICszMjgxMCw3IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcQ1NTQm9yZGVy
SW1hZ2UuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtNDA3NTQsNyArNDA3NTQs
NyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxy
ZW5kZXJpbmdcUmVuZGVyVGFibGVDYXB0aW9uLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xSZW5kZXJUYWJsZUNlbGwuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00MDgwNiwxMSArNDA4MDYsMTEgQEAKIAkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJUYWJsZUNhcHRpb24uaCIKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJUYWJsZUNlbGwuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclRhYmxlQ2VsbC5j
cHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGFibGVDYXB0aW9uLmNw
cCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMy
IgpAQCAtNDA4NjIsNyArNDA4NjIsNyBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclRh
YmxlQ2VsbC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclRhYmxlQ2Fw
dGlvbi5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBAIC00NDk5MSw3ICs0NDk5MSw3
IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRNZXRyaWNzLmNwcCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAiCiAJCQkJCT4KIAkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ1MDQzLDEx
ICs0NTA0MywxMSBAQAogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dE1ldHJp
Y3MuaCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRNZXRyaWNz
QnVpbGRlci5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwIgorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dE1ldHJpY3MuY3BwIgogCQkJCQk+
CiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00
NTA5OSw3ICs0NTA5OSw3IEBACiAJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJPC9GaWxl
PgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdUZXh0
TWV0cmljc0J1aWxkZXIuaCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNW
R1RleHRNZXRyaWNzLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKQEAgLTQ5NTUz
LDYyICs0OTU1Myw2MiBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE11dGF0aW9uT2JzZXJ2
ZXJJbnRlcmVzdEdyb3VwLmgiCiAJCQkJPgogCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGRvbVxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcCIKLQkJCQk+
Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0J
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRl
fFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9v
bAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8
V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29s
Ci0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258
V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29s
Ci0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9t
XE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+CisgICAg
ICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cZG9tXE11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAg
ICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgTmFtZT0iRGVi
dWd8V2luMzIiCisgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
ICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAgICAgICAg
ICAgICAvPgorICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAg
ICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIE5hbWU9IlJlbGVh
c2V8V2luMzIiCisgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
ICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAgICAgICAg
ICAgICAvPgorICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAg
ICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIE5hbWU9IkRlYnVn
X0NhaXJvX0NGTGl0ZXxXaW4zMiIKKyAgICAgICAgICAgICAgICAgICAgRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgPFRv
b2wKKyAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAg
ICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4K
KyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAg
TmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisgICAgICAgICAgICAgICAgICAgIEV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAg
ICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgIDwvRmlsZUNv
bmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAg
ICAgICAgICAgICAgIE5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKyAgICAgICAgICAgICAgICAgICAg
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAg
ICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgPC9GaWxl
Q29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAgICAg
ICAgICAgICAgICAgICAgTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKyAgICAgICAgICAgICAgICAg
ICAgRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisgICAgICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgPC9G
aWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxl
CisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxkb21cTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbi5oIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgIDwvRmlsZT4KIAkJ
CTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTXV0YXRpb25SZWNvcmQuY3BwIgogCQkJ
CT4KQEAgLTU3MzE3LDggKzU3MzE3LDY0IEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxcSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5jcHAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmFtZT0iRGVidWd8V2luMzIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNv
bmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlQ29uZmln
dXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlJl
bGVhc2V8V2luMzIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0
ZXxXaW4zMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2wKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8
V2luMzIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxIVE1MRm9ybUVsZW1lbnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
IAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC01NzM3MCwxMSArNTc0MjYsMTEgQEAKIAkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGh0bWxcSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5caHRtbFxIVE1MRm9ybUVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MRm9ybUVsZW1lbnQuY3BwIgor
CQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MRnJhbWVFbGVtZW50LmNwcCIKIAkJCQk+CiAJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTc0MjYs
MTEgKzU3NDgyLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxGb3JtRWxlbWVudC5oIgorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MRnJhbWVFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTEZyYW1lRWxlbWVu
dC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxGcmFtZUVsZW1lbnRCYXNlLmNw
cCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMy
IgpAQCAtNTc0ODIsMTEgKzU3NTM4LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxGcmFtZUVs
ZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTEZyYW1lRWxlbWVudEJhc2Uu
aCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRt
bFxIVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhU
TUxGcmFtZU93bmVyRWxlbWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgog
CQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU3NTM4LDExICs1NzU5NCwxMSBAQAogCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwIgor
CQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MRnJhbWVTZXRFbGVtZW50LmNwcCIKIAkJCQk+
CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTc1
OTQsMTEgKzU3NjUwLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxGcmFtZU93bmVyRWxlbWVu
dC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MRnJhbWVTZXRFbGVtZW50LmgiCiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRN
TEZyYW1lU2V0RWxlbWVudC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxIZWFk
RWxlbWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiIKQEAgLTU3NjUwLDExICs1NzcwNiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxI
VE1MRnJhbWVTZXRFbGVtZW50LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxIZWFk
RWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxodG1sXEhUTUxIZWFkRWxlbWVudC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XEhUTUxIZWFkaW5nRWxlbWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgog
CQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU3NzA2LDExICs1Nzc2MiwxMSBAQAogCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxIVE1MSGVhZEVsZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxc
SFRNTEhlYWRpbmdFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTEhlYWRpbmdFbGVtZW50LmNwcCIKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxcSFRNTEhSRWxlbWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU3NzYyLDExICs1NzgxOCwxMSBA
QAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MSGVhZGluZ0VsZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGh0bWxcSFRNTEhSRWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxIUkVsZW1lbnQuY3BwIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5caHRtbFxIVE1MSHRtbEVsZW1lbnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC01NzgxOCwxMSArNTc4NzQs
MTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTEhSRWxlbWVudC5oIgorCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxIVE1MSHRtbEVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MSHRtbEVsZW1lbnQuY3BwIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MSUZyYW1lRWxlbWVudC5jcHAiCiAJCQkJPgogCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU3ODc0LDExICs1
NzkzMCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MSHRtbEVsZW1lbnQuaCIKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTElGcmFtZUVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MSUZyYW1lRWxlbWVudC5j
cHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxJbWFnZUVsZW1lbnQuY3BwIgogCQkJ
CT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC01
NzkzMCwxMSArNTc5ODYsMTkgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTElGcmFtZUVsZW1lbnQu
aCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTEltYWdlRWxlbWVudC5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxJbWFn
ZUVsZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MSW1hZ2VMb2FkZXIu
Y3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxo
dG1sXEhUTUxJbWFnZUxvYWRlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxJbnB1dEVsZW1lbnQuY3BwIgogCQkJCT4KIAkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC01Nzk4NiwxOSAr
NTgwNTAsNjcgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTEltYWdlRWxlbWVudC5oIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MSW5wdXRFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTEltYWdlTG9hZGVyLmNw
cCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTElzSW5kZXhFbGVtZW50LmNwcCIKIAkJ
CQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8
VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19B
bGx8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxU
b29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rp
b258V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxU
b29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxIVE1MSW1hZ2VMb2FkZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTElz
SW5kZXhFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxcSFRNTElucHV0RWxlbWVudC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxodG1sXEhUTUxLZXlnZW5FbGVtZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0
aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTgwNTAsMTEgKzU4MTYyLDExIEBACiAJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxodG1sXEhUTUxJbnB1dEVsZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcSFRNTEtleWdlbkVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MSXNJbmRleEVsZW1lbnQuY3BwIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTGFiZWxFbGVtZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZp
bGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTgxMDYsMTEgKzU4
MjE4LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxJc0luZGV4RWxlbWVudC5oIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTGFiZWxFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTEtleWdlbkVsZW1lbnQu
Y3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTGVnZW5kRWxlbWVudC5jcHAiCiAJ
CQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAg
LTU4MTYyLDExICs1ODI3NCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MS2V5Z2VuRWxlbWVu
dC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTGVnZW5kRWxlbWVudC5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxM
YWJlbEVsZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTElFbGVtZW50
LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdp
bjMyIgpAQCAtNTgyMTgsMTEgKzU4MzMwLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxMYWJl
bEVsZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTExJRWxlbWVudC5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhU
TUxMZWdlbmRFbGVtZW50LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTExpbmtF
bGVtZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRl
YnVnfFdpbjMyIgpAQCAtNTgyNzQsMTEgKzU4Mzg2LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhU
TUxMZWdlbmRFbGVtZW50LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxMaW5rRWxl
bWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxodG1sXEhUTUxMSUVsZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1M
TWFwRWxlbWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1l
PSJEZWJ1Z3xXaW4zMiIKQEAgLTU4MzMwLDExICs1ODQ0MiwxMSBAQAogCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRt
bFxIVE1MTElFbGVtZW50LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxNYXBFbGVt
ZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcSFRNTExpbmtFbGVtZW50LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRN
TE1hcnF1ZWVFbGVtZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTgzODYsMTEgKzU4NDk4LDExIEBACiAJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxodG1sXEhUTUxMaW5rRWxlbWVudC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1M
TWFycXVlZUVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5caHRtbFxIVE1MTWFwRWxlbWVudC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxodG1sXEhUTUxNZWRpYUVsZW1lbnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC01ODQ0MiwxMSArNTg1NTQsMTEgQEAKIAkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxcSFRNTE1hcEVsZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0
bWxcSFRNTE1lZGlhRWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxNYXJxdWVlRWxlbWVudC5jcHAiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxodG1sXEhUTUxNZW51RWxlbWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU4NDk4LDExICs1ODYxMCwx
MSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTWFycXVlZUVsZW1lbnQuaCIKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxcSFRNTE1lbnVFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE1lZGlhRWxlbWVudC5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxNZXRhRWxlbWVudC5jcHAiCiAJCQkJPgogCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU4NTU0LDEx
ICs1ODY2NiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTWVkaWFFbGVtZW50LmgiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxNZXRhRWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxNZW51RWxlbWVudC5j
cHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxNZXRlckVsZW1lbnQuY3BwIgogCQkJ
CT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC01
ODYxMCwxMSArNTg3MjIsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE1lbnVFbGVtZW50Lmgi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxNZXRlckVsZW1lbnQuaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTWV0YUVs
ZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTW9kRWxlbWVudC5jcHAi
CiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIK
QEAgLTU4NjY2LDExICs1ODc3OCwxOSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTWV0YUVsZW1l
bnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE1vZEVsZW1lbnQuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTWV0
ZXJFbGVtZW50LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE5hbWVDb2xsZWN0
aW9uLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxIVE1MTmFtZUNvbGxlY3Rpb24uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MT2JqZWN0RWxlbWVudC5jcHAiCiAJCQkJ
PgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU4
NzIyLDExICs1ODg0MiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTWV0ZXJFbGVtZW50Lmgi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxPYmplY3RFbGVtZW50LmgiCiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE1vZEVs
ZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MT0xpc3RFbGVtZW50LmNw
cCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMy
IgpAQCAtNTg3NzgsMTkgKzU4ODk4LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxNb2RFbGVt
ZW50LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcSFRNTE5hbWVDb2xsZWN0aW9uLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MTmFtZUNvbGxlY3Rpb24uaCIKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE9MaXN0RWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxPYmplY3RFbGVtZW50
LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAi
CiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIK
QEAgLTU4ODQyLDExICs1ODk1NCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MT2JqZWN0RWxl
bWVudC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MT3B0R3JvdXBFbGVtZW50Lmgi
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxc
SFRNTE9MaXN0RWxlbWVudC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxPcHRp
b25FbGVtZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9
IkRlYnVnfFdpbjMyIgpAQCAtNTg4OTgsMTEgKzU5MDEwLDI3IEBACiAJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XEhUTUxPTGlzdEVsZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE9wdGlv
bkVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxIVE1MT3B0R3JvdXBFbGVtZW50LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxI
VE1MT3V0cHV0RWxlbWVudC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE91dHB1dEVsZW1lbnQuaCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MUGFyYWdyYXBoRWxl
bWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiIKQEAgLTU4OTU0LDExICs1OTA4MiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1M
T3B0R3JvdXBFbGVtZW50LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxQYXJhZ3Jh
cGhFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGh0bWxcSFRNTE9wdGlvbkVsZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxIVE1MUGFyYW1FbGVtZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9u
CiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTkwMTAsMjcgKzU5MTM4LDc1IEBACiAJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxodG1sXEhUTUxPcHRpb25FbGVtZW50LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxo
dG1sXEhUTUxQYXJhbUVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MUGFyc2VyRXJyb3JDb2Rlcy5jcHAiCiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxQYXJzZXJFcnJvckNv
ZGVzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcSFRNTE91dHB1dEVsZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxI
VE1MUGx1Z0luRWxlbWVudC5jcHAiCiAJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
RGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
Lz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTE91dHB1dEVsZW1lbnQuaCIKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFBsdWdJbkVsZW1lbnQuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MUGFyYWdyYXBoRWxl
bWVudC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8
V2luMzIiCkBAIC01OTA4MiwxMSArNTkyNTgsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFBh
cmFncmFwaEVsZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxodG1sXEhUTUxQYXJhbUVsZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxIVE1MUHJlRWxlbWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgog
CQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU5MTM4LDE5ICs1OTMxNCw3NSBAQAogCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxIVE1MUGFyYW1FbGVtZW50LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XEhUTUxQcmVFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxIVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCIKKwkJCQk+CisJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MUHJvZ3Jl
c3NFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGh0bWxcSFRNTFBhcnNlckVycm9yQ29kZXMuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MUGx1Z0luRWxlbWVudC5jcHAi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5oIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhU
TUxRdW90ZUVsZW1lbnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJ
TmFtZT0iRGVidWd8V2luMzIiCkBAIC01OTIwMiwxMSArNTk0MzQsMTEgQEAKIAkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcSFRNTFBsdWdJbkVsZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRN
TFF1b3RlRWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxodG1sXEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxIVE1MU2NyaXB0RWxlbWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU5MjU4LDExICs1OTQ5MCwx
MSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgiCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTY3JpcHRFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFByZUVsZW1lbnQuY3Bw
IgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MU2VsZWN0RWxlbWVudC5jcHAiCiAJCQkJ
PgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTU5
MzE0LDExICs1OTU0NiwxNSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MUHJlRWxlbWVudC5oIgor
CQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MU2VsZWN0RWxlbWVudC5oIgogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MU2VsZWN0RWxlbWVu
dFdpbi5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGh0bWxcSFRNTFNvdXJjZUVsZW1lbnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC01OTM3MCwxOSArNTk2MDYsNjcgQEAK
IAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFByb2dyZXNzRWxlbWVudC5oIgorCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxIVE1MU291cmNlRWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5j
cHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTcGFuRWxlbWVudC5jcHAiCiAJCQkJ
PgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgor
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0
ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRv
b2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxs
fFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9v
bAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9u
fFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9v
bAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0
bWxcSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XEhUTUxTcGFuRWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXEhUTUxRdW90ZUVsZW1lbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxIVE1MU3R5bGVFbGVtZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1
cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTk0MzQsMTEgKzU5NzE4LDExIEBA
CiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXEhUTUxRdW90ZUVsZW1lbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGh0bWxcSFRNTFN0eWxlRWxlbWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTY3JpcHRFbGVtZW50LmNwcCIKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFN1bW1hcnlFbGVtZW50LmNwcCIKIAkJCQk+CiAJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTk0OTAsMTEg
KzU5Nzc0LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTY3JpcHRFbGVtZW50LmgiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTdW1tYXJ5RWxlbWVudC5oIgogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTZWxlY3RFbGVt
ZW50LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8
V2luMzIiCkBAIC01OTU0NiwxNSArNTk4MzAsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFNl
bGVjdEVsZW1lbnQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxIVE1MU2VsZWN0RWxlbWVudFdpbi5jcHAiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxodG1sXEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFNvdXJjZUVsZW1lbnQuY3Bw
IgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MVGFibGVDZWxsRWxlbWVudC5jcHAiCiAJ
CQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAg
LTU5NjA2LDI5MSArNTk4ODYsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFNvdXJjZUVsZW1l
bnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxI
VE1MU3BhbkVsZW1lbnQuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJ
TmFtZT0iRGVidWd8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0J
CQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRl
YnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0J
CQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJ
TmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KLQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTcGFuRWxlbWVudC5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTdHlsZUVs
ZW1lbnQuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVi
dWd8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8
V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29s
Ci0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJv
X0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJ
CQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVs
ZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgot
CQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkv
PgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJ
CU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0J
CQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJ
TmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0J
CQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTdHlsZUVsZW1lbnQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MU3VtbWFyeUVsZW1lbnQu
Y3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWd8V2lu
MzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0J
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIi
Ci0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0
ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRv
b2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZV9D
YWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4K
LQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0i
UHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4K
LQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxodG1sXEhUTUxTdW1tYXJ5RWxlbWVudC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxUYWJsZUNhcHRpb25FbGVtZW50
LmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdp
bjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAot
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
IgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2Vf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJ
PgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1l
PSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxUYWJsZUNlbGxFbGVt
ZW50LmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVn
fFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9v
bAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdp
bjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAot
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19D
RkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJ
CTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVh
c2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJ
CQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4K
LQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlO
YW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJ
CQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJ
CQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5caHRtbFxIVE1MVGFibGVDZWxsRWxlbWVudC5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxUYWJsZUNvbEVsZW1l
bnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MVGFibGVDb2xFbGVtZW50LmNw
cCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMy
IgpAQCAtNjA5MzMsMTkgKzYwOTMzLDE5IEBACiAJCQkJTmFtZT0ic2hhZG93IgogCQkJCT4KIAkJ
CQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcc2hhZG93XENvbnRlbnRJbmNsdXNp
b25TZWxlY3Rvci5jcHAiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxzaGFkb3dcQ29udGVu
dFNlbGVjdG9yUXVlcnkuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxzaGFkb3dcQ29udGVudEluY2x1c2lvblNlbGVjdG9yLmgi
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxzaGFkb3dcQ29udGVudFNlbGVjdG9yUXVlcnku
aCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcc2hhZG93XENvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcCIKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxodG1sXHNoYWRvd1xDb250ZW50SW5jbHVzaW9uU2VsZWN0b3IuY3BwIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxzaGFkb3dc
Q29udGVudFNlbGVjdG9yUXVlcnkuaCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHNoYWRv
d1xDb250ZW50SW5jbHVzaW9uU2VsZWN0b3IuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8
RmlsZQpAQCAtNzA1OTgsNiArNzA1OTgsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcRE9NV2luZG93U1FMRGF0YWJhc2UuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxEYXRhYmFzZS5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpAQCAtNzA2NTAsMTQgKzcwNjU4LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcRE9NV2luZG93U1FMRGF0YWJhc2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJBbnkuY3BwIgogCQkJCT4KIAkJCTwvRmls
ZT4KQEAgLTcxMjY0LDgyICs3MTI2NCwxNCBAQAogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBZ2VudC5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBZ2VudC5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yQWxsSW5PbmUuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJ
CQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0J
CQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
LQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25m
aWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50LmNwcCIKIAkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIgpAQCAt
NzEzNDgsMjIgKzcxMjgwLDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yQmFzZUFnZW50LmNwcCIKIAkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgot
CQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9u
Ci0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgot
CQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckJhc2VBZ2VudC5oIgpAQCAt
NzEzNzIsMjIgKzcxMjg4LDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yQ2xpZW50LmNwcCIKIAkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9u
Ci0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0J
CQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckNsaWVudC5oIgpAQCAtNzEzOTYs
MjIgKzcxMjk2LDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCIKIAkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9u
Ci0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0J
CQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckNvbnNvbGVBZ2VudC5oIgpAQCAt
NzE0MjQsMjIgKzcxMzA4LDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yQ29udHJvbGxlci5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
LQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
LQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDb250cm9sbGVyLmgiCkBA
IC03MTQ0OCwyMiArNzEzMTYsNiBAQAogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGlu
c3BlY3RvclxJbnNwZWN0b3JDU1NBZ2VudC5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
LQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
LQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDU1NBZ2VudC5oIgpAQCAt
NzE0NzIsMjIgKzcxMzI0LDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmgiCkBAIC03MTUwMCwyMiArNzEzMzYsNiBAQAogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCIKIAkJCQk+Ci0JCQkJ
PEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZp
bGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2UuaCIKQEAgLTcxNTI0LDIyICs3MTM0NCw2IEBACiAJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIgog
CQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIK
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIK
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgpAQCAtNzE1NDgsMjIgKzcxMzUyLDYgQEAKIAkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
IgogCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4z
MiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4z
MiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcSW5zcGVjdG9yRE9NQWdlbnQuaCIKQEAgLTcxNTcyLDIyICs3MTM2MCw2IEBACiAJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQuY3BwIgogCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFz
ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRv
b2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJvZHVjdGlv
bnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRv
b2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxp
bnNwZWN0b3JcSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIgpAQCAtNzE1OTYsMjIgKzcxMzY4
LDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmNwcCIKIAkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJ
CU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJ
CQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJ
CQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIgpAQCAtNzE2
MjAsMjIgKzcxMzc2LDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCIKIAkJCQk+Ci0JCQkJPEZpbGVDb25m
aWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1
cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckRPTVN0b3JhZ2VS
ZXNvdXJjZS5oIgpAQCAtNzE2NDQsMjIgKzcxMzg0LDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNwcCIKIAkJCQk+
Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0J
CQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3Bl
Y3RvckZpbGVTeXN0ZW1BZ2VudC5oIgpAQCAtNzE2ODAsMjIgKzcxNDA0LDYgQEAKIAkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxl
YXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8
VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0
aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8
VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgiCkBAIC03MTcwNCwyMiAr
NzE0MTIsNiBAQAogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwIgogCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJ
CQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0J
CQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJ
TmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0J
CQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCkBAIC03MTcy
OCwyMiArNzE0MjAsNiBAQAogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
LQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
LQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5o
IgpAQCAtNzE3NTIsMjIgKzcxNDI4LDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlxpbnNwZWN0b3JcSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCIKIAkJCQk+Ci0JCQkJPEZp
bGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgpAQCAtNzE3NzYsMjIgKzcxNDM2LDYgQEAKIAkJCTxGaWxlCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIgogCQkJCT4K
LQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVj
dG9yTWVtb3J5QWdlbnQuaCIKQEAgLTcxODAwLDIyICs3MTQ0NCw2IEBACiAJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclBhZ2VBZ2VudC5jcHAiCiAJCQkJ
PgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgot
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNw
ZWN0b3JQYWdlQWdlbnQuaCIKQEAgLTcxODI0LDIyICs3MTQ1Miw2IEBACiAJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIgog
CQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIK
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIK
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgpAQCAtNzE4NDgsMjIgKzcxNDYwLDYgQEAKIAkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNl
fFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9v
bAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9u
fFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9v
bAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGlu
c3BlY3RvclxJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgiCkBAIC03MTg3MiwyMiArNzE0NjgsNiBA
QAogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwIgogCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0i
UmVsZWFzZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJ
CQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJv
ZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJ
CQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUnVudGltZUFnZW50LmgiCkBAIC03MTg5NiwyMiArNzE0
NzYsNiBAQAogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0
b3JTdGF0ZS5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJS
ZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJ
CQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9k
dWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJ
CQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JTdGF0ZS5oIgpAQCAtNzE5MjQsMjIgKzcxNDg4LDYgQEAK
IAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxl
YXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8
VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0
aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8
VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JTdHlsZVNoZWV0LmgiCkBAIC03MTk0OCwyMiArNzE0OTYsNiBA
QAogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JTdHls
ZVRleHRFZGl0b3IuY3BwIgogCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4K
LQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0i
UHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4K
LQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmgiCkBAIC03MTk3Miwy
MiArNzE1MDQsNiBAQAogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJ
bnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCIKIAkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9u
Ci0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0J
CQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKQEAg
LTcxOTk2LDIyICs3MTUxMiw2IEBACiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXEluc3BlY3RvclZhbHVlcy5jcHAiCiAJCQkJPgotCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJ
CQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgot
CQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJ
CQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JWYWx1ZXMuaCIKQEAgLTcyMDIw
LDIyICs3MTUyMCw2IEBACiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XEluc3BlY3RvcldvcmtlckFnZW50LmNwcCIKIAkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9u
Ci0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0J
CQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvcldvcmtlckFnZW50LmgiCkBAIC03
MjM5NywxMSArNzE4ODEsMTEgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcZmlsdGVyZWRJdGVtU2VsZWN0
aW9uRGlhbG9nLmNzcyIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XEZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRmlsdGVy
ZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmpzIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcZmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmNzcyIKIAkJCQkJPgogCQkJ
CTwvRmlsZT4KIAkJCQk8RmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmgKaW5kZXggYzU5MTY0Ni4uNjA5NmQ5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCkBAIC0yODUsOSArMjg1LDYgQEAg
dGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKENv
bXBvc2l0ZU9wZXJhdG9yIGUpCiAgICAgICAgIGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6CiAg
ICAgICAgICAgICBtX3ZhbHVlLmlkZW50ID0gQ1NTVmFsdWVQbHVzTGlnaHRlcjsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZURpZmZlcmVuY2U6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OWEyNzEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgYWxsLWluLW9uZSBjcHAgZmlsZSBjdXRzIGRv
d24gb24gdGVtcGxhdGUgYmxvYXQgdG8gYWxsb3cgdXMgdG8gYnVpbGQgb3VyIFdpbmRvd3MgcmVs
ZWFzZSBidWlsZC4KLQotI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmNwcCIKLSNpbmNsdWRlICJJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIgotI2luY2x1ZGUgIkluc3BlY3RvckJh
c2VBZ2VudC5jcHAiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIgotI2luY2x1ZGUg
Ikluc3BlY3RvckNsaWVudC5jcHAiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmNw
cCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmNwcCIKLSNpbmNsdWRlICJJbnNwZWN0
b3JET01BZ2VudC5jcHAiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAi
Ci0jaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIgotI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwIgotI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIgotI2lu
Y2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIgotI2luY2x1ZGUgIkluc3BlY3RvckZp
bGVTeXN0ZW1BZ2VudC5jcHAiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5jcHAiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCIKLSNpbmNsdWRlICJJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAiCi0jaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmNwcCIKLSNpbmNsdWRlICJJbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAiCi0jaW5jbHVk
ZSAiSW5zcGVjdG9yUGFnZUFnZW50LmNwcCIKLSNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcCIKLSNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCIKLSNpbmNsdWRl
ICJJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIgotI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmNw
cCIKLSNpbmNsdWRlICJJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCIKLSNpbmNsdWRlICJJbnNwZWN0
b3JTdHlsZVRleHRFZGl0b3IuY3BwIgotI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQu
Y3BwIgotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5jcHAiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
V29ya2VyQWdlbnQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0v
UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5l
Y3Rpb24uY3BwCmluZGV4IGJiNDkzZDcuLmU1NDQ0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9t
ZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTExNSwxNyArMTE1LDE1IEBAIHZvaWQg
UGVlckNvbm5lY3Rpb246OnNlbmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykKIAogdm9pZCBQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW0+IHBycFN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtPiBzdHJlYW0gPSBwcnBTdHJlYW07Ci0gICAgaWYgKCFzdHJlYW0pIHsKLSAgICAgICAgZWMg
PSAgVFlQRV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAo
bV9yZWFkeVN0YXRlID09IENMT1NFRCkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gVGhlIE1lZGlhU3RyZWFtIG9iamVj
dCBpcyBndWFyYW50ZWVkIHRvIGV4aXN0IHNpbmNlIFN0cmljdFR5cGVDaGVja2luZyBpcyBzZXQg
aW4gdGhlIGlkbC4KKworICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gcHJwU3RyZWFt
OworCiAgICAgaWYgKG1fbG9jYWxTdHJlYW1zLT5jb250YWlucyhzdHJlYW0uZ2V0KCkpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTE1MCwxMCArMTQ4LDcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6
cmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtKiBzdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFzdHJlYW0pIHsKLSAgICAgICAgZWMgPSBU
WVBFX01JU01BVENIX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBUaGUgTWVk
aWFTdHJlYW0gb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNo
ZWNraW5nIGlzIHNldCBpbiB0aGUgaWRsLgogCiAgICAgaWYgKCFtX2xvY2FsU3RyZWFtcy0+Y29u
dGFpbnMoc3RyZWFtKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtU2NyZWVuLmgKaW5kZXggODI3ODAxYi4uOTY5MTkzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCkBAIC00MCw3ICs0MCw2IEBAIHR5cGVkZWYgdWludDMy
X3QgUGxhdGZvcm1EaXNwbGF5SUQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBG
bG9hdFJlY3Q7Ci0gICAgY2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIFdpZGdldDsKIAogICAg
IGludCBzY3JlZW5Ib3Jpem9udGFsRFBJKFdpZGdldCopOwpAQCAtNDksMTQgKzQ4LDE0IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0
Kik7CiAgICAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0Kik7CiAKLSAgICBGbG9hdFJl
Y3Qgc2NyZWVuUmVjdChGcmFtZVZpZXcqKTsKLSAgICBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxl
UmVjdChGcmFtZVZpZXcqKTsKKyAgICBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqKTsKKyAg
ICBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsKIAogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBOU1NjcmVlbiAqc2NyZWVuRm9yV2luZG93KE5TV2luZG93ICopOwogCi0gICAg
RmxvYXRSZWN0IHRvVXNlclNwYWNlKGNvbnN0IE5TUmVjdCYsIE5TV2luZG93ICpkZXN0aW5hdGlv
biwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgIE5TUmVjdCB0b0RldmljZVNwYWNlKGNv
bnN0IEZsb2F0UmVjdCYsIE5TV2luZG93ICpzb3VyY2UsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KTsKKyAgICBGbG9hdFJlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRl
c3RpbmF0aW9uKTsKKyAgICBOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmLCBO
U1dpbmRvdyAqc291cmNlKTsKIAogICAgIE5TUG9pbnQgZmxpcFNjcmVlblBvaW50KGNvbnN0IE5T
UG9pbnQmLCBOU1NjcmVlbiAqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybVNjcmVlbkJsYWNrQmVycnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybVNjcmVlbkJsYWNrQmVycnkuY3Bw
CmluZGV4IGIyODI5YzQuLmQyNmU1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JsYWNrYmVycnkvUGxhdGZvcm1TY3JlZW5CbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRmb3JtU2NyZWVuQmxhY2tCZXJyeS5jcHAK
QEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiV2lkZ2V0
LmgiCiAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TY3JlZW4uaD4KQEAgLTQyLDEyICs0
MSwxMiBAQCBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KikKICAgICByZXR1cm4gMjQ7CiB9CiAKLUZs
b2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KEZyYW1lVmlldyogZnJhbWVWaWV3KQorRmxvYXRS
ZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgcmV0dXJuIEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIEZsb2F0U2l6ZShJbnRTaXplKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6U2NyZWVuOjpzaXplKCkpKSk7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5S
ZWN0KEZyYW1lVmlldyogZnJhbWVWaWV3KQorRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3
aWRnZXQpCiB7CiAgICAgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIEZsb2F0U2l6ZShJ
bnRTaXplKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U2NyZWVuOjpzaXplKCkpKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9y
bVNjcmVlbkNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bs
YXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwCmluZGV4IGUwNTUzYjkuLjc5YjlkY2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU2Ny
ZWVuQ2hyb21pdW0uY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKIAotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKIApAQCAtNjIs
MTQgKzYxLDE0IEBAIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQogICAg
IHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnNjcmVlbklzTW9ub2Nocm9tZSh3aWRnZXQpOwogfQog
Ci1GbG9hdFJlY3Qgc2NyZWVuUmVjdChGcmFtZVZpZXcqIGZyYW1lVmlldykKK0Zsb2F0UmVjdCBz
Y3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OnNjcmVlblJlY3QoZnJhbWVWaWV3KTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpzY3Jl
ZW5SZWN0KHdpZGdldCk7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KEZyYW1l
VmlldyogZnJhbWVWaWV3KQorRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3
aWRnZXQpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6c2NyZWVuQXZhaWxhYmxlUmVj
dChmcmFtZVZpZXcpOworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnNjcmVlbkF2YWlsYWJs
ZVJlY3Qod2lkZ2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAppbmRleCAxZjM5
NmM1Li4xNzAxNzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QbGF0Zm9ybVN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QbGF0Zm9ybVN1cHBvcnQuaApAQCAtNzEsNyArNzEsNiBAQCBjbGFzcyBDb2xvcjsKIGNsYXNz
IEN1cnNvcjsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBGcmFtZVZpZXc7
CiBjbGFzcyBHYW1lcGFkTGlzdDsKIGNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKIGNs
YXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwpAQCAtMjQ2LDggKzI0NSw4IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgaW50IHNjcmVlbkRlcHRoKFdpZGdldCopOwogICAgIHN0YXRpYyBpbnQg
c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0Kik7CiAgICAgc3RhdGljIGJvb2wgc2NyZWVu
SXNNb25vY2hyb21lKFdpZGdldCopOwotICAgIHN0YXRpYyBJbnRSZWN0IHNjcmVlblJlY3QoRnJh
bWVWaWV3Kik7Ci0gICAgc3RhdGljIEludFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChGcmFtZVZp
ZXcqKTsKKyAgICBzdGF0aWMgSW50UmVjdCBzY3JlZW5SZWN0KFdpZGdldCopOworICAgIHN0YXRp
YyBJbnRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7CiAKICAgICAvLyBTaGFyZWRU
aW1lcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogICAgIHN0YXRpYyB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgq
ZnVuYykoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZv
cm1TY3JlZW5FZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtU2Ny
ZWVuRWZsLmNwcAppbmRleCBmMzBkMjNkLi5mYWM5NTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1TY3JlZW5FZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybVNjcmVlbkVmbC5jcHAKQEAgLTM0LDcgKzM0LDYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogCi0jaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpAQCAtNzQsMjMgKzczLDIz
IEBAIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1GbG9hdFJlY3Qgc2NyZWVuUmVjdChGcmFtZVZpZXcqIGZyYW1lVmlldykKK0Zsb2F0UmVj
dCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQogewotICAgIGlmICghZnJhbWVWaWV3KQorICAg
IGlmICghd2lkZ2V0KQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBpbnQgeCwg
eSwgdywgaDsKLSAgICBFdmFzKiBlID0gZnJhbWVWaWV3LT5ldmFzKCk7CisgICAgRXZhcyogZSA9
IHdpZGdldC0+ZXZhcygpOwogCiAgICAgZWNvcmVfZXZhc19zY3JlZW5fZ2VvbWV0cnlfZ2V0KGVj
b3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZSksICZ4LCAmeSwgJncsICZoKTsKIAogICAgIHJldHVy
biBGbG9hdFJlY3QoeCwgeSwgdywgaCk7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVS
ZWN0KEZyYW1lVmlldyogZnJhbWVWaWV3KQorRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3Qo
V2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gc2Ny
ZWVuUmVjdChmcmFtZVZpZXcpOworICAgIHJldHVybiBzY3JlZW5SZWN0KHdpZGdldCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCmluZGV4IDQ3NWZkYjMuLjJkODEzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNzc2LDQgKzc3
NiwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvcikKICAgICBwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
KTsKIH0KIAorI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisvLyBUaGVzZSBmdWN0aW9ucyBzaG91
bGQgYmUgaW1wbGVtZW50ZWQgdG8gc3VwcG9ydCBzb2Z0d2FyZS1yZW5kZXJpbmcgb2YgM2QgdHJh
bnNmb3Jtcy4KKyNpZiAhUExBVEZPUk0oUVQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0
M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0M0RUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6
OmdldDNEVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworfQorI2VuZGlmCisjZW5kaWYKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5k
ZXggZGVhOTUwYi4uNTQ5ODVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEyNCw2ICsxMjQsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
ICAgICBjbGFzcyBUZXh0UnVuOworICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCiAg
ICAgZW51bSBUZXh0RHJhd2luZ01vZGUgewogICAgICAgICBUZXh0TW9kZUludmlzaWJsZSA9IDAs
CkBAIC00MDksNiArNDEwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oKSBjb25zdDsKIAorI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAgICAgIC8vIFRo
aXMgaXMgbmVlZGVkIHdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQtY29tcG9zaXRpbmcgaW4gc29mdHdh
cmUgbW9kZSwgbGlrZSBpbiBUZXh0dXJlTWFwcGVyLgorICAgICAgICB2b2lkIGNvbmNhdDNEVHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgICAgIHZvaWQgc2V0M0RU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggZ2V0M0RUcmFuc2Zvcm0oKSBjb25zdDsKKyNlbmRpZgogICAgICAgICAvLyBD
cmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGlzIGNvbnRleHQsIHdpdGgg
c3VpdGFibGUgcmVzb2x1dGlvbgogICAgICAgICAvLyBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZm
ZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgICAgIFBhc3NPd25QdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgSW50U2l6ZSYpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4
IGU2NTk2ZDkuLjFhMDdmMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTMwLDYgKzMwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisgICAgLy8gTm90ZTogVGhlc2UgY29uc3RhbnRzIGV4YWN0bHkgbWF0Y2ggdGhlIE5T
Q29tcG9zaXRlT3BlcmF0b3IgY29uc3RhbnRzIG9mCisgICAgLy8gQXBwS2l0IG9uIE1hYyBPUyBY
IFRpZ2VyLiBJZiB0aGVzZSBldmVyIGNoYW5nZSwgd2UnbGwgbmVlZCB0byBjaGFuZ2UgdGhlCisg
ICAgLy8gTWFjIE9TIFggVGlnZXIgcGxhdGZvcm0gY29kZSB0byBtYXAgb25lIHRvIHRoZSBvdGhl
ci4KICAgICBlbnVtIENvbXBvc2l0ZU9wZXJhdG9yIHsKICAgICAgICAgQ29tcG9zaXRlQ2xlYXIs
CiAgICAgICAgIENvbXBvc2l0ZUNvcHksCkBAIC00Myw4ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgQ29tcG9zaXRlRGVzdGluYXRpb25BdG9wLAogICAgICAgICBDb21wb3Np
dGVYT1IsCiAgICAgICAgIENvbXBvc2l0ZVBsdXNEYXJrZXIsCi0gICAgICAgIENvbXBvc2l0ZVBs
dXNMaWdodGVyLAotICAgICAgICBDb21wb3NpdGVEaWZmZXJlbmNlCisgICAgICAgIENvbXBvc2l0
ZVBsdXNMaWdodGVyCiAgICAgfTsKIAogICAgIGVudW0gR3JhZGllbnRTcHJlYWRNZXRob2Qgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVy
ZU1hcHBlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1RleHR1cmVNYXBwZXJDYWlyby5jcHAKaW5kZXggNjFkOGIyMC4uZTcyOTUxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0
dXJlTWFwcGVyQ2Fpcm8uY3BwCkBAIC0xMTUsMTEgKzExNSw2IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckNhaXJvOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBG
bG9hdFJlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFzc093blB0cjxUZXh0dXJlTWFw
cGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewot
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckNhaXJvKTsKLX0KLQogUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyQ2Fpcm86OmNyZWF0ZVRleHR1cmUoKQog
ewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZUNhaXJvKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCmluZGV4IDRiNjE5MmYuLjFmYTkxNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAg
LTEwMzYsNyArMTAzNiw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRv
dyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgYmx1clJhZGl1
cyA9IG1pbihibHVyUmFkaXVzLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAK
IAotI2lmIGRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSB8fCBkZWZpbmVkKEJVSUxE
SU5HX09OX0xJT04pCiAgICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CiAgICAgICAg
IC8vIFdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4PiBieSBlbnN1cmluZyB0aGF0
IHRoZSBvZmZzZXRzIHdpbGwgZ2V0IHRydW5jYXRlZAogICAgICAgICAvLyB0byB0aGUgZGVzaXJl
ZCBpbnRlZ2VyLiBBbHNvIHNlZTogPHJkYXI6Ly9wcm9ibGVtLzEwMDU2Mjc3PgpAQCAtMTA1MSw3
ICsxMDUwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb24KICAgICAgICAgZWxzZSBpZiAoeU9m
ZnNldCA8IDApCiAgICAgICAgICAgICB5T2Zmc2V0IC09IGV4dHJhU2hhZG93T2Zmc2V0OwogICAg
IH0KLSNlbmRpZgogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMg
bWVhbnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBh
bmQgd2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3Iu
CkBAIC0xNjAzLDkgKzE2MDEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1D
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgbW9kZSkKICAgICBjYXNlIENvbXBv
c2l0ZVBsdXNMaWdodGVyOgogICAgICAgICB0YXJnZXQgPSBrQ0dCbGVuZE1vZGVQbHVzTGlnaHRl
cjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVEaWZmZXJlbmNlOgotICAgICAg
ICB0YXJnZXQgPSBrQ0dCbGVuZE1vZGVEaWZmZXJlbmNlOwotICAgICAgICBicmVhazsKICAgICB9
CiAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKHBsYXRmb3JtQ29udGV4dCgpLCB0YXJnZXQpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAppbmRleCBkODk2NDE5Li4yNTQ5M2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL093bkFy
cmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNTIsMTAgKzUzLDYgQEAK
ICNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQo
QlVJTERJTkdfT05fTElPTikKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNlbmRpZgot
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzIsOSAr
MTY5LDcgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENv
bG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXIKICAgICBtX2NvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOwogICAgIG1fY29udGV4dC0+dHJhbnNsYXRlKDAsIC1oZWlnaHQudW5z
YWZlR2V0KCkpOwogICAgIG1fY29udGV4dC0+c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYWNjZWxl
cmF0ZVJlbmRlcmluZyk7Ci0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQogICAgIG1fZGF0
YS5tX2xhc3RGbHVzaFRpbWUgPSBjdXJyZW50VGltZU1TKCk7Ci0jZW5kaWYKICAgICBzdWNjZXNz
ID0gdHJ1ZTsKIH0KIApAQCAtMTg5LDcgKzE4NCw2IEBAIHNpemVfdCBJbWFnZUJ1ZmZlcjo6ZGF0
YVNpemUoKSBjb25zdAogCiBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkg
Y29uc3QKIHsKLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCiAgICAgLy8gRm9yY2UgYSBm
bHVzaCBpZiBsYXN0IGZsdXNoIHdhcyBtb3JlIHRoYW4gMjBtcyBhZ28KICAgICBpZiAobV9jb250
ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CiAgICAgICAgIGRvdWJsZSBlbGFwc2VkVGlt
ZSA9IGN1cnJlbnRUaW1lTVMoKSAtIG1fZGF0YS5tX2xhc3RGbHVzaFRpbWU7CkBAIC0yMDEsNyAr
MTk1LDYgQEAgR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiAg
ICAgICAgICAgICBtX2RhdGEubV9sYXN0Rmx1c2hUaW1lID0gY3VycmVudFRpbWVNUygpOwogICAg
ICAgICB9CiAgICAgfQotI2VuZGlmCiAKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQpA
QCAtMjM1LDkgKzIyOCw3IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0CiAjaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKICAgICBlbHNlIHsKICAgICAgICAgaW1hZ2UgPSB3
a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgp
KTsKLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCiAgICAgICAgIG1fZGF0YS5tX2xhc3RG
bHVzaFRpbWUgPSBjdXJyZW50VGltZU1TKCk7Ci0jZW5kaWYKICAgICB9CiAjZW5kaWYKIApAQCAt
Mjg5LDkgKzI4MCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKG1fY29u
dGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewogICAgICAgICBDR0NvbnRleHRGbHVzaChj
b250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xJ
T04pCiAgICAgICAgIG1fZGF0YS5tX2xhc3RGbHVzaFRpbWUgPSBjdXJyZW50VGltZU1TKCk7Ci0j
ZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKHJlY3QsIG1fc2l6ZSwgbV9j
b250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCB0cnVlKTsKIH0KQEAgLTMwMCw5ICsyODks
NyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdAogewogICAgIGlmIChtX2NvbnRleHQtPmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpIHsKICAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKSk7Ci0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQogICAgICAg
ICBtX2RhdGEubV9sYXN0Rmx1c2hUaW1lID0gY3VycmVudFRpbWVNUygpOwotI2VuZGlmCiAgICAg
fQogICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShyZWN0LCBtX3NpemUsIG1fY29udGV4dC0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSwgZmFsc2UpOwogfQpAQCAtMzExLDkgKzI5OCw3IEBAIHZvaWQg
SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwg
Y29uc3QgSW50U2l6ZSYgc291CiB7CiAgICAgaWYgKG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENv
bnRleHQoKSkgewogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpKTsKLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCiAgICAgICAgIG1fZGF0YS5t
X2xhc3RGbHVzaFRpbWUgPSBjdXJyZW50VGltZU1TKCk7Ci0jZW5kaWYKICAgICB9CiAgICAgbV9k
YXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1f
c2l6ZSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCB0cnVlKTsKIH0KQEAgLTMy
Miw5ICszMDcsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzbwogewogICAgIGlmIChtX2NvbnRl
eHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKICAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29u
dGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9MSU9O
KQogICAgICAgICBtX2RhdGEubV9sYXN0Rmx1c2hUaW1lID0gY3VycmVudFRpbWVNUygpOwotI2Vu
ZGlmCiAgICAgfQogICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNl
UmVjdCwgZGVzdFBvaW50LCBtX3NpemUsIG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQo
KSwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKaW5kZXggYTE0OGRlNi4uNjFkOTJhZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5oCkBAIC01NCw5ICs1NCw3IEBAIHB1YmxpYzoKICAgICBDaGVja2VkPHVuc2lnbmVk
LCBSZWNvcmRPdmVyZmxvdz4gbV9ieXRlc1BlclJvdzsKICAgICBDR0NvbG9yU3BhY2VSZWYgbV9j
b2xvclNwYWNlOwogICAgIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IG1fc3VyZmFjZTsKLSNpZiBk
ZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCiAgICAgbXV0YWJsZSBkb3VibGUgbV9sYXN0Rmx1c2hU
aW1lOwotI2VuZGlmCiAKICAgICBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0RGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcsIGJvb2wgdW5tdWx0aXBsaWVkKSBjb25zdDsKICAgICB2b2lkIHB1dERhdGEoQnl0ZUFycmF5
KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGJvb2wgdW5tdWx0aXBsaWVkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJHTC5jcHAKaW5kZXggZGUwNDFiZi4uY2MxZDA2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAK
QEAgLTI2Myw1NyArMjYzLDYgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogCiAgICAg
fTsKIAotICAgIHN0cnVjdCBEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkgewotICAg
ICAgICBzdHJ1Y3QgRW50cnkgewotICAgICAgICAgICAgR0x1aW50IHRleHR1cmU7Ci0gICAgICAg
ICAgICBpbnQgcmVmQ291bnQ7Ci0gICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxJ
bWFnZVVJRCwgRW50cnk+IEltYWdlVGV4dHVyZU1hcDsKLSAgICAgICAgSW1hZ2VUZXh0dXJlTWFw
IGltYWdlVG9UZXh0dXJlOwotCi0gICAgICAgIEdMdWludCBmaW5kT3JDcmVhdGUoSW1hZ2VVSUQg
aW1hZ2UsIGJvb2wmIGZvdW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbWFnZVRleHR1cmVN
YXA6Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0gICAgICAgICAg
ICBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0dXJlLmVu
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOwotICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC50
ZXh0dXJlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRW50cnkgZW50cnk7Ci0gICAgICAg
ICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOwotICAgICAgICAg
ICAgZW50cnkucmVmQ291bnQgPSAxOwotICAgICAgICAgICAgaW1hZ2VUb1RleHR1cmUuYWRkKGlt
YWdlLCBlbnRyeSk7Ci0gICAgICAgICAgICByZXR1cm4gZW50cnkudGV4dHVyZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGJvb2wgZGVyZWYoSW1hZ2VVSUQgaW1hZ2UpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEhhc2hNYXA8SW1hZ2VVSUQsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4
dHVyZS5maW5kKGltYWdlKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5l
bmQoKSkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnJlZkNvdW50IDwgMikgewot
ICAgICAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBEaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkoKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICB+RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZm9yIChJbWFnZVRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1
cmUuYmVnaW4oKTsgaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
ICAgICAgICBHTHVpbnQgdGV4dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVyZTsKLSAgICAgICAgICAg
ICAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgICAgICAgICAgICAgR0xfQ01EKGdsRGVsZXRlVGV4
dHVyZXMoMSwgJnRleHR1cmUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfSBk
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0KICAgICBTaGFyZWRHTERhdGEmIHNoYXJlZEdMRGF0
YSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdMRGF0YS5nZXQoKSk7
CkBAIC0zMjcsNiArMjc2LDcgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CiAgICAgaW50IGN1cnJlbnRQcm9n
cmFtOwogICAgIGludCBwcmV2aW91c1Byb2dyYW07CisgICAgR0xpbnQgdmlld3BvcnRbNF07CiAg
ICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4gbV9zaGFyZWRHTERhdGE7CiB9OwogCkBAIC0zMzcsNTYg
KzI4NywyNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKICAgICB2
b2lkIGJpbmQoKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBh
aW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIH5C
aXRtYXBUZXh0dXJlR0woKSB7IGRlc3Ryb3koKTsgfQogICAgIHZpcnR1YWwgdWludDMyX3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBtX29wYXF1ZTsgfQogICAgIGlubGluZSBGbG9hdFNpemUgcmVsYXRpdmVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVNpemU7IH0KICAgICB2b2lkIHNldFRleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4bWFw
OyB9Ci0KLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0
Jiwgdm9pZCopOwotICAgIHZvaWQgdXBkYXRlUmF3Q29udGVudHMoY29uc3QgSW50UmVjdCYsIGNv
bnN0IHZvaWQqKTsKLSAgICB2b2lkIHBhY2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBj
dXJyZW50bHkgYSBzdHViLgotICAgICAgICBpZiAoaXNQYWNrZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9pc1BhY2tlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCB1bnBh
Y2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYSBzdHViLgotICAgICAg
ICBpZiAoIWlzUGFja2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNQYWNr
ZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGlzUGFja2VkKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2lzUGFja2VkOwotICAgIH0KKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRz
KEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7Cisg
ICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYpOwogCiBw
cml2YXRlOgogICAgIEdMdWludCBtX2lkOwotICAgIEltYWdlVUlEIG1faW1hZ2VVSUQ7CiAgICAg
RmxvYXRTaXplIG1fcmVsYXRpdmVTaXplOwotICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgSW50U2l6
ZSBtX3RleHR1cmVTaXplOwotICAgIE93blB0cjxCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4g
bV9idWZmZXI7CiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKICAgICBHTHVpbnQgbV9mYm87CiAg
ICAgR0x1aW50IG1fcmJvOwogICAgIEludFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9z
dXJmYWNlTmVlZHNSZXNldDsKLSAgICBib29sIG1faXNQYWNrZWQ7CiAgICAgVGV4dHVyZU1hcHBl
ckdMKiBtX3RleHR1cmVNYXBwZXI7CiAgICAgQml0bWFwVGV4dHVyZUdMKCkKICAgICAgICAgOiBt
X2lkKDApCi0gICAgICAgICwgbV9pbWFnZVVJRCgwKQotICAgICAgICAsIG1fb3BhcXVlKGZhbHNl
KQogICAgICAgICAsIG1fZmJvKDApCiAgICAgICAgICwgbV9yYm8oMCkKICAgICAgICAgLCBtX3N1
cmZhY2VOZWVkc1Jlc2V0KHRydWUpCkBAIC01MzIsNiArNDUxLDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luUGFpbnRpbmcoKQogICAgIH0KICAgICBnbENsZWFyU3RlbmNpbCgwKTsKICAg
ICBnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCk7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9W
SUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0KTsKICAgICBiaW5kU3VyZmFjZSgwKTsKICNlbmRpZgog
fQpAQCAtNjQ1LDcgKzU2NSw2IEBAIHN0YXRpYyB2b2lkIHRleEltYWdlMkRSZXNvdXJjZVNhZmUo
c2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0KQogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0
KGNvbnN0IEludFNpemUmIG5ld1NpemUsIGJvb2wgb3BhcXVlKQogewogICAgIEJpdG1hcFRleHR1
cmU6OnJlc2V0KG5ld1NpemUsIG9wYXF1ZSk7Ci0gICAgbV9pbWFnZVVJRCA9IDA7CiAgICAgSW50
U2l6ZSBuZXdUZXh0dXJlU2l6ZSA9IG5leHRQb3dlck9mVHdvKG5ld1NpemUpOwogICAgIGJvb2wg
anVzdENyZWF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIW1faWQpIHsKQEAgLTY2NCwyOSArNTgzLDEx
IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplLCBi
b29sIG9wYXF1ZSkKICAgICB9CiAgICAgbV9hY3R1YWxTaXplID0gbmV3U2l6ZTsKICAgICBtX3Jl
bGF0aXZlU2l6ZSA9IEZsb2F0U2l6ZShmbG9hdChuZXdTaXplLndpZHRoKCkpIC8gbV90ZXh0dXJl
U2l6ZS53aWR0aCgpLCBmbG9hdChuZXdTaXplLmhlaWdodCgpKSAvIG1fdGV4dHVyZVNpemUuaGVp
Z2h0KCkpOwotICAgIG1fb3BhcXVlID0gb3BhcXVlOwogICAgIG1fc3VyZmFjZU5lZWRzUmVzZXQg
PSB0cnVlOwogfQogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogQml0bWFwVGV4dHVyZUdMOjpi
ZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBtX2J1ZmZlciA9IEJH
UkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKTsKLSAgICBtX2RpcnR5UmVjdCA9IGRp
cnR5UmVjdDsKLSAgICByZXR1cm4gbV9idWZmZXItPmJlZ2luUGFpbnQoZGlydHlSZWN0LCBtX29w
YXF1ZSk7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUdMOjplbmRQYWludCgpCi17Ci0gICAgaWYg
KCFtX2J1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fYnVmZmVyLT5lbmRQYWludCgpOwot
ICAgIHVwZGF0ZUNvbnRlbnRzKEJHUkFGb3JtYXQsIG1fZGlydHlSZWN0LCBtX2J1ZmZlci0+ZGF0
YSgpKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKLSAg
ICBtX2J1ZmZlci5jbGVhcigpOwotfQogCi0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18yCi1zdGF0
aWMgdm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50MzJfdCogZGF0YSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3N0YXRpYyB2b2lkIHN3aXp6bGVSR0IodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNp
emUmIHNpemUpCiB7CiAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBoZWln
aHQgPSBzaXplLmhlaWdodCgpOwpAQCAtNjk2LDc5ICs1OTcsMzEgQEAgc3RhdGljIHZvaWQgc3dp
enpsZUJHUkFUb1JHQkEodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiAgICAg
ICAgICAgICBwW3hdID0gKChwW3hdIDw8IDE2KSAmIDB4ZmYwMDAwKSB8ICgocFt4XSA+PiAxNikg
JiAweGZmKSB8IChwW3hdICYgMHhmZjAwZmYwMCk7CiAgICAgfQogfQotI2VuZGlmCiAKLXZvaWQg
Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgdm9pZCogYml0cykKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjp1
cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
KQogewogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQotI2lm
ZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIGJvb2wgc2hvdWxkU3dpenpsZSA9IGZhbHNlOwot
I2VuZGlmCi0KLSAgICBHTGludCBnbEZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgc3dpdGNoIChwaXhl
bEZvcm1hdCkgewotICAgIGNhc2UgUkdCQUZvcm1hdDoKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9S
R0JBOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJHQkZvcm1hdDoKLSAgICAgICAgZ2xGb3Jt
YXQgPSBHTF9SR0I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkdSQUZvcm1hdDoKLSNpZmRl
ZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICAgICAgc2hvdWxkU3dpenpsZSA9IHRydWU7Ci0gICAg
ICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKLSNlbHNlCi0gICAgICAgIGdsRm9ybWF0ID0gR0xfQkdS
QTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJHUkZvcm1hdDoKLSNpZmRlZiBU
RVhNQVBfT1BFTkdMX0VTXzIKLSAgICAgICAgc2hvdWxkU3dpenpsZSA9IHRydWU7Ci0gICAgICAg
IGdsRm9ybWF0ID0gR0xfUkdCOwotI2Vsc2UKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9CR1I7Ci0j
ZW5kaWYKLSAgICAgICAgIGJyZWFrOwotICAgIH0KLQotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNf
MgotICAgIGlmIChzaG91bGRTd2l6emxlKQotICAgICAgICBzd2l6emxlQkdSQVRvUkdCQShzdGF0
aWNfY2FzdDx1aW50MzJfdCo+KGJpdHMpLCByZWN0LnNpemUoKSk7Ci0jZW5kaWYKLSAgICBHTF9D
TUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwg
Yml0cykpCisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJn
ZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVj
dC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgZGF0YSkpCiB9CiAKLXZvaWQg
Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVSYXdDb250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCB2b2lkKiBiaXRzKQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKElt
YWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0KQogeworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIHJldHVybjsKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX2lkKSkKICAgICBHTHVpbnQgZ2xGb3JtYXQgPSBpc09wYXF1ZSgpID8gR0xfUkdC
IDogR0xfUkdCQTsKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBnbEZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwgYml0cykpCi19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUdMOjpz
ZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIEltYWdlVUlEIHVpZCA9IGlt
YWdlID8gdWlkRm9ySW1hZ2UoaW1hZ2UpIDogMDsKLSAgICBpZiAoIWltYWdlIHx8ICF1aWQpIHsK
LSAgICAgICAgaWYgKG1faW1hZ2VVSUQpCi0gICAgICAgICAgICBkZXN0cm95KCk7CisgICAgTmF0
aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgIGlmICghZnJhbWVJbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAg
IGlmICh1aWQgPT0gbV9pbWFnZVVJRCkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKLSAgICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0dXJlTWFwcGVyLT5kYXRh
KCkuZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZSh1aWQsIGZvdW5kKTsKLSAg
ICBpZiAobmV3VGV4dHVyZUlEICE9IG1faWQpIHsKLSAgICAgICAgbV9pbWFnZVVJRCA9IHVpZDsK
LSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICBtX2lkID0gbmV3VGV4dHVyZUlEOwotICAgICAg
ICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghZm91bmQpIHsKLSAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGJlZ2luUGFpbnQoSW50UmVjdCgwLCAw
LCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50
UG9pbnQoMCwgMCksIENvbXBvc2l0ZUNvcHkpOwotICAgICAgICAgICAgZW5kUGFpbnQoKTsKLSAg
ICAgICAgfQotICAgIH0KKyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1hZ2UgcXRJbWFnZSA9IGZy
YW1lSW1hZ2UtPnRvSW1hZ2UoKTsKKyAgICBpZiAoSW50U2l6ZShxdEltYWdlLnNpemUoKSkgIT0g
c291cmNlUmVjdC5zaXplKCkpCisgICAgICAgIHF0SW1hZ2UgPSBxdEltYWdlLmNvcHkoc291cmNl
UmVjdCk7CisgICAgaWYgKGZvcm1hdCA9PSBCR1JBRm9ybWF0IHx8IGZvcm1hdCA9PSBCR1JGb3Jt
YXQpCisgICAgICAgIHN3aXp6bGVSR0IocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHF0SW1h
Z2UuYml0cygpKSwgcXRJbWFnZS5zaXplKCkpOworICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRS
ZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9C
WVRFLCBxdEltYWdlLmNvbnN0Qml0cygpKSkKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCBmbGlwKQpAQCAtODIwLDcgKzY3Myw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdM
OjpiaW5kKCkKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3koKQogewotICAgIGlmICht
X2lkICYmICghbV9pbWFnZVVJRCB8fCAhbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkuZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VzLmRlcmVmKG1faW1hZ2VVSUQpKSkKKyAgICBpZiAobV9pZCkKICAgICAg
ICAgR0xfQ01EKGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faWQpKQogCiAgICAgaWYgKG1fZmJvKQpA
QCAtODU1LDExICs3MDgsMTIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJp
dG1hcFRleHR1cmUgKnN1cmZhY2VQb2ludGVyKQogICAgIEJpdG1hcFRleHR1cmVHTCogc3VyZmFj
ZSA9IHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVHTCo+KHN1cmZhY2VQb2ludGVyKTsKIAogICAg
IGlmICghc3VyZmFjZSkgeworICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZShkYXRhKCkudmll
d3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7CiAgICAgICAgIEdMX0NNRChnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCkpCi0gICAgICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0
cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUoKSwgdHJ1ZSkubXVsdGlw
bHkodHJhbnNmb3JtKCkpOworICAgICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0
ZVByb2plY3Rpb25NYXRyaXgodmlld3BvcnRTaXplLCB0cnVlKTsKICAgICAgICAgR0xfQ01EKGds
U3RlbmNpbEZ1bmMoZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9F
UVVBTCA6IEdMX0FMV0FZUywgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEs
IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAxKSkKICAgICAgICAgR0xfQ01E
KGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApKQotICAgICAgICBHTF9DTUQo
Z2xWaWV3cG9ydCgwLCAwLCB2aWV3cG9ydFNpemUoKS53aWR0aCgpLCB2aWV3cG9ydFNpemUoKS5o
ZWlnaHQoKSkpCisgICAgICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53
aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC05MTYsNCArNzcwLDkgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFw
cGVyR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVybiBhZG9wdFJlZih0ZXh0dXJlKTsKIH0K
IAorUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0
ZUFjY2VsZXJhdGVkKCkKK3sKKyAgICByZXR1cm4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsK
K30KKwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCBkZDJlMWE3Li5lNDZiOGE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5oCkBAIC00MywxNiArNDMsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9vbCBmbGlwKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CiAg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNv
bnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCk7CisgICAg
dmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCk7CiAgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1
cmUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdDsKICAgICBzdGF0aWMg
UGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgdm9pZCBiZWdpblBhaW50aW5nKCk7Ci0gICAgdm9p
ZCBlbmRQYWludGluZygpOwogICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CiAgICAgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNPcGVuR0xCYWNrZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBw
bGF0Zm9ybVVwZGF0ZUNvbnRlbnRzKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKKyAgICB2aXJ0dWFsIEFj
Y2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIE9wZW5HTE1v
ZGU7IH0KIAogcHJpdmF0ZToKICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgp
IHsgcmV0dXJuICptX2RhdGE7IH0KQEAgLTYyLDE2ICs2Myw2IEBAIHByaXZhdGU6CiB9OwogCiAv
LyBBbiBvZmZzY3JlZW4gYnVmZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJlLgotY2xhc3Mg
QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIHZpcnR1YWwgfkJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKCkgeyB9
Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgb3BhcXVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVu
ZFBhaW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCogZGF0YSgpID0gMDsKLSAgICBzdGF0aWMg
UGFzc093blB0cjxCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7Ci19OwotCiBz
dGF0aWMgaW5saW5lIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtKQogewogICAgIGZvciAoaW50
IGkgPSAweDEwMDAwMDAwOyBpID4gMDsgaSA+Pj0gMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApp
bmRleCA5MTczYTVkLi5jMTkwYThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtMTQ2LDcg
KzE0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyCiB7CiAgICAgYmxpdE11bHRpc2FtcGxl
RnJhbWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCgpOwogCi0gICAgaWYgKHRleHR1cmVNYXBwZXIt
PmlzT3BlbkdMQmFja2VkKCkpIHsKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9u
TW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpIHsKICAgICAgICAgVGV4dHVyZU1h
cHBlckdMKiB0ZXhtYXBHTCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVN
YXBwZXIpOwogICAgICAgICB0ZXhtYXBHTC0+ZHJhd1RleHR1cmUobV9jb250ZXh0LT5tX3RleHR1
cmUsICFtX2NvbnRleHQtPm1fYXR0cnMuYWxwaGEsIEZsb2F0U2l6ZSgxLCAxKSwgdGFyZ2V0UmVj
dCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrLCB0cnVlIC8qIGZsaXAgKi8pOwogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggZWM3M2MzZmUuLjI2MWJiZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHAKQEAgLTEzMzUsNiArMTMzNSwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIG1fZGF0YS0+cCgpLT5z
ZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogfQogCisjaWYgRU5BQkxFKDNEX1JFTkRFUklO
RykKK1RyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0M0RUcmFuc2Zvcm0o
KSBjb25zdAoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworCisgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5j
b21iaW5lZFRyYW5zZm9ybSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0M0RU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAo
KS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cnVlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9kYXRhLT5wKCktPnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSwgZmFsc2UpOwor
fQorI2VuZGlmCisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtV
UkwmLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NjQxY2UuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJRdC5oIgotCi0jaW5jbHVkZSA8UXRDb3JlL3FkZWJ1Zy5oPgotI2luY2x1ZGUgPFF0R3VpL3Fw
YWludGVuZ2luZS5oPgotI2luY2x1ZGUgPFF0R3VpL3FwaXhtYXAuaD4KLQotI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKLSMgaW5jbHVkZSAib3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmRlc3Ry
b3koKQotewotICAgIGlmIChtX3BpeG1hcC5wYWludGluZ0FjdGl2ZSgpKQotICAgICAgICBxRmF0
YWwoIkRlc3Ryb3lpbmcgYW4gYWN0aXZlIHBpeG1hcCIpOwotICAgIG1fcGl4bWFwID0gUVBpeG1h
cCgpOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCBpc09wYXF1ZSkKLXsKLSAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChzaXplLCBpc09w
YXF1ZSk7Ci0KLSAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV9waXhtYXAuc2l6ZSgpLndpZHRoKCkg
fHwgc2l6ZS5oZWlnaHQoKSA+IG1fcGl4bWFwLnNpemUoKS5oZWlnaHQoKSB8fCBtX3BpeG1hcC5p
c051bGwoKSkKLSAgICAgICAgbV9waXhtYXAgPSBRUGl4bWFwKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgaWYgKCFpc09wYXF1ZSkKLSAgICAgICAgbV9waXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOwotfQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogQml0bWFwVGV4dHVy
ZVF0OjpiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBtX3BhaW50
ZXIuYmVnaW4oJm1fcGl4bWFwKTsKLSAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxpemUoJm1f
cGFpbnRlcik7Ci0gICAgbV9wYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29t
cG9zaXRpb25Nb2RlX0NsZWFyKTsKLSAgICBtX3BhaW50ZXIuZmlsbFJlY3QoUVJlY3QoZGlydHlS
ZWN0KSwgUXQ6OnRyYW5zcGFyZW50KTsKLSAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2Rl
KFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zlcik7Ci0gICAgcmV0dXJuICZtX3Bh
aW50ZXI7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjplbmRQYWludCgpCi17Ci0gICAgbV9w
YWludGVyLmVuZCgpOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6dXBkYXRlQ29udGVudHMo
UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHZvaWQqIGJpdHMp
Ci17Ci0gICAgbV9wYWludGVyLmJlZ2luKCZtX3BpeG1hcCk7Ci0gICAgUUltYWdlOjpGb3JtYXQg
cXRGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDsKLSAgICBpZiAo
cGl4ZWxGb3JtYXQgPT0gQkdSRm9ybWF0IHx8IHBpeGVsRm9ybWF0ID09IFJHQkZvcm1hdCkKLSAg
ICAgICAgcXRGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0IzMjsKLSAgICBRSW1hZ2UgaW1hZ2Uo
c3RhdGljX2Nhc3Q8dWNoYXIqPihiaXRzKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBx
dEZvcm1hdCk7Ci0gICAgaWYgKHBpeGVsRm9ybWF0ID09IEJHUkZvcm1hdCB8fCBwaXhlbEZvcm1h
dCA9PSBCR1JBRm9ybWF0KQotICAgICAgICBpbWFnZSA9IGltYWdlLnJnYlN3YXBwZWQoKTsKLSAg
ICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVf
U291cmNlKTsKLSAgICBtX3BhaW50ZXIuZHJhd0ltYWdlKHJlY3QsIGltYWdlKTsKLSAgICBtX3Bh
aW50ZXIuZW5kKCk7Ci19Ci0KLWJvb2wgQml0bWFwVGV4dHVyZVF0OjpzYXZlKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gbV9waXhtYXAuc2F2ZShwYXRoLCAiUE5HIik7Ci19Ci0K
LXZvaWQgQml0bWFwVGV4dHVyZVF0OjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQot
ewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBjb25zdCBRUGl4bWFwKiBw
aXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXBp
eG1hcCkKLSAgICAgICAgcmV0dXJuOwotICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHBpeG1hcC0+
c2l6ZSgpLCAhcGl4bWFwLT5oYXNBbHBoYUNoYW5uZWwoKSk7Ci0gICAgbV9waXhtYXAgPSAqcGl4
bWFwOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6cGFjaygpCi17Ci0gICAgaWYgKG1fcGl4
bWFwLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ltYWdlID0gbV9waXhtYXAu
dG9JbWFnZSgpOwotICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOwotICAgIG1faXNQYWNrZWQgPSB0
cnVlOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6dW5wYWNrKCkKLXsKLSAgICBtX2lzUGFj
a2VkID0gZmFsc2U7Ci0gICAgaWYgKG1faW1hZ2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcGl4bWFwID0gUVBpeG1hcDo6ZnJvbUltYWdlKG1faW1hZ2UpOwotICAgIG1faW1h
Z2UgPSBRSW1hZ2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJlZ2luQ2xpcChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgIFFQYWludGVyKiBwYWludGVyID0gY3VycmVudFBhaW50ZXIoKTsKLSAgICAgcGFpbnRl
ci0+c2F2ZSgpOwotICAgICBRVHJhbnNmb3JtIHByZXZUcmFuc2Zvcm0gPSBwYWludGVyLT50cmFu
c2Zvcm0oKTsKLSAgICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1hdHJpeCwgZmFsc2UpOwotICAg
ICBwYWludGVyLT5zZXRDbGlwUmVjdChyZWN0KTsKLSAgICAgcGFpbnRlci0+c2V0VHJhbnNmb3Jt
KHByZXZUcmFuc2Zvcm0sIGZhbHNlKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmVuZENs
aXAoKQotewotICAgIGN1cnJlbnRQYWludGVyKCktPnJlc3RvcmUoKTsKLX0KLQotSW50U2l6ZSBU
ZXh0dXJlTWFwcGVyUXQ6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNp
emUobV9wYWludGVyLT5kZXZpY2UoKS0+d2lkdGgoKSwgbV9wYWludGVyLT5kZXZpY2UoKS0+aGVp
Z2h0KCkpOwotfQotCi0KLVRleHR1cmVNYXBwZXJRdDo6VGV4dHVyZU1hcHBlclF0KCkKLSAgICA6
IG1fY3VycmVudFN1cmZhY2UoMCkKLXsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldEdy
YXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9jb250ZXh0
ID0gY29udGV4dDsKLSAgICBtX3BhaW50ZXIgPSBjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCkgOiAwOwotICAgIGluaXRpYWxpemUobV9wYWludGVyKTsKLX0KLQotR3JhcGhpY3ND
b250ZXh0KiBUZXh0dXJlTWFwcGVyUXQ6OmdyYXBoaWNzQ29udGV4dCgpCi17Ci0gICAgcmV0dXJu
IG1fY29udGV4dDsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1h
cFRleHR1cmUqIHN1cmZhY2UpCi17Ci0gICAgaWYgKG1fY3VycmVudFN1cmZhY2UgPT0gc3VyZmFj
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2N1cnJlbnRTdXJmYWNlKQotICAgICAgICBt
X2N1cnJlbnRTdXJmYWNlLT5tX3BhaW50ZXIuZW5kKCk7Ci0gICAgaWYgKCFzdXJmYWNlKSB7Ci0g
ICAgICAgIG1fY3VycmVudFN1cmZhY2UgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IEJpdG1hcFRleHR1cmVRdCogc3VyZmFjZVF0ID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZVF0
Kj4oc3VyZmFjZSk7Ci0gICAgaWYgKCFzdXJmYWNlUXQtPm1fcGFpbnRlci5pc0FjdGl2ZSgpKQot
ICAgICAgICBzdXJmYWNlUXQtPm1fcGFpbnRlci5iZWdpbigmc3VyZmFjZVF0LT5tX3BpeG1hcCk7
Ci0gICAgbV9jdXJyZW50U3VyZmFjZSA9IHN1cmZhY2VRdDsKLX0KLQotCi12b2lkIFRleHR1cmVN
YXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKLXsKLSAg
ICBjb25zdCBCaXRtYXBUZXh0dXJlUXQmIHRleHR1cmVRdCA9IHN0YXRpY19jYXN0PGNvbnN0IEJp
dG1hcFRleHR1cmVRdCY+KHRleHR1cmUpOwotICAgIFFQYWludGVyKiBwYWludGVyID0gbV9wYWlu
dGVyOwotICAgIFFQaXhtYXAgcGl4bWFwID0gdGV4dHVyZVF0Lm1fcGl4bWFwOwotICAgIGlmICht
X2N1cnJlbnRTdXJmYWNlKQotICAgICAgICBwYWludGVyID0gJm1fY3VycmVudFN1cmZhY2UtPm1f
cGFpbnRlcjsKLQotICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgp
KSB7Ci0gICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVRdCogbWFzayA9IHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVRdCo+KG1hc2tUZXh0dXJlKTsKLSAgICAgICAgUVBpeG1hcCBpbnRl
cm1lZGlhdGVQaXhtYXAocGl4bWFwLnNpemUoKSk7Ci0gICAgICAgIGludGVybWVkaWF0ZVBpeG1h
cC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIG1hc2tQYWludGVyKCZp
bnRlcm1lZGlhdGVQaXhtYXApOwotICAgICAgICBtYXNrUGFpbnRlci5zZXRDb21wb3NpdGlvbk1v
ZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOwotICAgICAgICBtYXNrUGFpbnRl
ci5kcmF3UGl4bWFwKDAsIDAsIHBpeG1hcCk7Ci0gICAgICAgIG1hc2tQYWludGVyLnNldENvbXBv
c2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOwotICAg
ICAgICBtYXNrUGFpbnRlci5kcmF3UGl4bWFwKFFSZWN0KDAsIDAsIHBpeG1hcC53aWR0aCgpLCBw
aXhtYXAuaGVpZ2h0KCkpLCBtYXNrLT5tX3BpeG1hcCwgbWFzay0+c291cmNlUmVjdCgpKTsKLSAg
ICAgICAgbWFza1BhaW50ZXIuZW5kKCk7Ci0gICAgICAgIHBpeG1hcCA9IGludGVybWVkaWF0ZVBp
eG1hcDsKLSAgICB9Ci0KLSAgICBjb25zdCBxcmVhbCBwcmV2T3BhY2l0eSA9IHBhaW50ZXItPm9w
YWNpdHkoKTsKLSAgICBjb25zdCBRVHJhbnNmb3JtIHByZXZUcmFuc2Zvcm0gPSBwYWludGVyLT50
cmFuc2Zvcm0oKTsKLSAgICBwYWludGVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgIHBhaW50
ZXItPnNldFRyYW5zZm9ybShtYXRyaXgsIHRydWUpOwotICAgIHBhaW50ZXItPmRyYXdQaXhtYXAo
dGFyZ2V0UmVjdCwgcGl4bWFwLCBGbG9hdFJlY3QodGV4dHVyZVF0LnNvdXJjZVJlY3QoKSkpOwot
ICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShwcmV2VHJhbnNmb3JtKTsKLSAgICBwYWludGVyLT5z
ZXRPcGFjaXR5KHByZXZPcGFjaXR5KTsKLX0KLQotUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKLSAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdM
MikKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOwotI2VuZGlm
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyUXQpOwotfQotCi1QYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJlUXQoKSk7Ci19Ci0KLUJpdG1hcFRl
eHR1cmVRdDo6Qml0bWFwVGV4dHVyZVF0KCkKLSAgICA6IG1faXNQYWNrZWQoZmFsc2UpCi17Ci0K
LX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJlZ2luUGFpbnRpbmcoKQotewotICAgIG1fcGFp
bnRlci0+c2F2ZSgpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6ZW5kUGFpbnRpbmcoKQot
ewotICAgIG1fcGFpbnRlci0+cmVzdG9yZSgpOwotfQotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQotY2xhc3MgQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCA6IHB1YmxpYyBCR1JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIG9wYXF1ZSkK
LSAgICB7Ci0gICAgICAgIC8vIG1faW1hZ2UgaXMgb25seSB1c2luZyBkdXJpbmcgcGFpbnQsIGl0
J3Mgc2FmZSB0byBvdmVycmlkZSBpdC4KLSAgICAgICAgbV9pbWFnZSA9IFFJbWFnZShyZWN0LnNp
emUoKS53aWR0aCgpLCByZWN0LnNpemUoKS5oZWlnaHQoKSwgb3BhcXVlID8gUUltYWdlOjpGb3Jt
YXRfUkdCMzIgOiBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7Ci0gICAgICAg
IGlmICghb3BhcXVlKQotICAgICAgICAgICAgbV9pbWFnZS5maWxsKDApOwotICAgICAgICBtX3Bh
aW50ZXIuYmVnaW4oJm1faW1hZ2UpOwotICAgICAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxp
emUoJm1fcGFpbnRlcik7Ci0gICAgICAgIG1fcGFpbnRlci50cmFuc2xhdGUoLXJlY3QueCgpLCAt
cmVjdC55KCkpOwotICAgICAgICByZXR1cm4gJm1fcGFpbnRlcjsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZW5kUGFpbnQoKSB7IG1fcGFpbnRlci5lbmQoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCogZGF0YSgpIHsgcmV0dXJuIG1faW1hZ2UuYml0cygpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUVBh
aW50ZXIgbV9wYWludGVyOwotICAgIFFJbWFnZSBtX2ltYWdlOwotfTsKLQotUGFzc093blB0cjxC
R1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNy
ZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1
ZmZlclF0KCkpOwotfQotCi11aW50NjRfdCB1aWRGb3JJbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0g
ICAgcmV0dXJuIGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLT5zZXJpYWxOdW1i
ZXIoKTsKLX0KLSNlbmRpZgotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDA4ZmVlMDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvVGV4dHVyZU1hcHBlclF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0v
KgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgInRleG1hcC9U
ZXh0dXJlTWFwcGVyLmgiCi0KLSNpZm5kZWYgVGV4dHVyZU1hcHBlclF0X2gKLSNkZWZpbmUgVGV4
dHVyZU1hcHBlclF0X2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBCaXRtYXBUZXh0
dXJlUXQgOiBwdWJsaWMgQml0bWFwVGV4dHVyZSB7Ci0gICAgZnJpZW5kIGNsYXNzIFRleHR1cmVN
YXBwZXJRdDsKLXB1YmxpYzoKLSAgICBCaXRtYXBUZXh0dXJlUXQoKTsKLSAgICB+Qml0bWFwVGV4
dHVyZVF0KCkgeyBkZXN0cm95KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotICAg
IHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53
aWR0aCgpLCBtX3BpeG1hcC5oZWlnaHQoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29u
c3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVh
bCB2b2lkIGVuZFBhaW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJ
bWFnZSopOwotICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9waXhtYXAuaXNOdWxsKCkg
fHwgIW1faW1hZ2UuaXNOdWxsKCk7IH0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7
IHJldHVybiBJbnRSZWN0KDAsIDAsIGNvbnRlbnRTaXplKCkud2lkdGgoKSwgY29udGVudFNpemUo
KS5oZWlnaHQoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFjaygpOwotICAgIHZpcnR1YWwgdm9p
ZCB1bnBhY2soKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQYWNrZWQoKSBjb25zdCB7IHJldHVybiBt
X2lzUGFja2VkOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0
LCBjb25zdCBJbnRSZWN0Jiwgdm9pZCogYml0cyk7Ci0KLSAgICBRUGFpbnRlciogcGFpbnRlcigp
IHsgcmV0dXJuICZtX3BhaW50ZXI7IH0KLQotcHJpdmF0ZToKLSAgICBRUGFpbnRlciBtX3BhaW50
ZXI7Ci0gICAgUVBpeG1hcCBtX3BpeG1hcDsKLSAgICBRSW1hZ2UgbV9pbWFnZTsKLSAgICBib29s
IG1faXNQYWNrZWQ7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyUXQgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlciB7Ci1wdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlclF0KCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRT
dXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNs
aXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCgpOwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgSW50U2l6ZSB2aWV3cG9ydFNpemUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZygpOwotICAgIHZpcnR1YWwgdm9p
ZCBlbmRQYWludGluZygpOwotCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShRUGFpbnRlciog
cGFpbnRlcikKLSAgICB7Ci0gICAgICAgIGlmIChwYWludGVyKQotICAgICAgICAgICAgcGFpbnRl
ci0+c2V0UmVuZGVySGludHMoUVBhaW50ZXI6OkFudGlhbGlhc2luZyB8IFFQYWludGVyOjpTbW9v
dGhQaXhtYXBUcmFuc2Zvcm0sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc093blB0
cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1h
cHBlclF0KTsgfQotcHJpdmF0ZToKLSAgICBpbmxpbmUgUVBhaW50ZXIqIGN1cnJlbnRQYWludGVy
KCkgeyByZXR1cm4gbV9jdXJyZW50U3VyZmFjZSA/IG1fY3VycmVudFN1cmZhY2UtPnBhaW50ZXIo
KSA6IG1fcGFpbnRlcjsgfQotCi0gICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKLSAgICBHcmFwaGlj
c0NvbnRleHQqIG1fY29udGV4dDsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZVF0PiBtX2N1cnJl
bnRTdXJmYWNlOwotfTsKLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggZGQzM2Yw
ZC4uNjg2YTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcApAQCAtMjAsNiArMjAsOSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKIAorI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC03MSw1ICs3NCwxMzMgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0
dXJlTWFwcGVyOjphY3F1aXJlVGV4dHVyZUZyb21Qb29sKGNvbnN0IEludFNpemUmIHMKICAgICBy
ZXR1cm4gc2VsZWN0ZWRUZXh0dXJlOwogfQogCisKK2NsYXNzIEJpdG1hcFRleHR1cmVJbWFnZUJ1
ZmZlciA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJlSW1hZ2VC
dWZmZXIpOyB9CisgICAgfkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcigpIHsgZGVzdHJveSgpOyB9
CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSB7IG1faW1hZ2UuY2xlYXIoKTsgfQorICAgIHZp
cnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS0+c2l6ZSgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgb3BhcXVlKQor
ICAgIHsKKyAgICAgICAgQml0bWFwVGV4dHVyZTo6cmVzZXQoc2l6ZSwgb3BhcXVlKTsKKyAgICAg
ICAgbV9pbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7CisgICAgfQorCisgICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgaW5saW5l
IEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9pbWFnZSA/IG1f
aW1hZ2UtPmNvbnRleHQoKSA6IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMo
SW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIFBpeGVsRm9ybWF0KTsKKyAg
ICB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QpOworcHJpdmF0ZToKKyAgICBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIoKSB7IH0K
KyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2U7Cit9OworCisKK2NsYXNzIFRleHR1cmVN
YXBwZXJJbWFnZUJ1ZmZlciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFj
aXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lk
IGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSB7
IG1fY3VycmVudFN1cmZhY2UgPSBzdXJmYWNlO30KKyAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgp
IHsgZ3JhcGhpY3NDb250ZXh0KCktPnJlc3RvcmUoKTsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRy
PFRleHR1cmVNYXBwZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXIpOyB9CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVU
ZXh0dXJlKCkgeyByZXR1cm4gQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjpjcmVhdGUoKTsgfQor
ICAgIGlubGluZSBHcmFwaGljc0NvbnRleHQqIGN1cnJlbnRDb250ZXh0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdXJmYWNlID8gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUlt
YWdlQnVmZmVyKj4obV9jdXJyZW50U3VyZmFjZS5nZXQoKSktPmdyYXBoaWNzQ29udGV4dCgpIDog
Z3JhcGhpY3NDb250ZXh0KCk7CisgICAgfQorCisgICAgdmlydHVhbCBBY2NlbGVyYXRpb25Nb2Rl
IGFjY2VsZXJhdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBTb2Z0d2FyZU1vZGU7IH0KKworcHJp
dmF0ZToKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV9jdXJyZW50U3VyZmFjZTsKK307CisK
K3ZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lk
KiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworI2lmIFBMQVRGT1JNKFFUKQor
ICAgIFFJbWFnZSBpbWFnZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oZGF0YSksIHRh
cmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgdGFyZ2V0UmVjdC53aWR0aCgp
ICogNCwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIFFQYWludGVy
KiBwYWludGVyID0gbV9pbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBw
YWludGVyLT5zYXZlKCk7CisgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICBwYWludGVyLT5kcmF3SW1hZ2UodGFyZ2V0
UmVjdCwgaW1hZ2UpOworICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKKyNlbmRpZgorfQorCit2b2lk
IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQaXhl
bEZvcm1hdCkKK3sKKyAgICBtX2ltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29s
b3JTcGFjZURldmljZVJHQiwgdGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgQ29tcG9zaXRlQ29weSk7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpiZWdpbkNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAg
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBwcmV2aW91c1RyYW5zZm9ybSA9IGNvbnRleHQtPmdldDNEVHJh
bnNmb3JtKCk7CisjZWxzZQorICAgIEFmZmluZVRyYW5zZm9ybSBwcmV2aW91c1RyYW5zZm9ybSA9
IGNvbnRleHQtPmdldENUTSgpOworI2VuZGlmCisgICAgY29udGV4dC0+c2F2ZSgpOworCisjaWYg
RU5BQkxFKDNEX1JFTkRFUklORykKKyAgICBjb250ZXh0LT5jb25jYXQzRFRyYW5zZm9ybShtYXRy
aXgpOworI2Vsc2UKKyAgICBjb250ZXh0LT5jb25jYXRDVE0obWF0cml4LnRvQWZmaW5lKCkpOwor
I2VuZGlmCisKKyAgICBjb250ZXh0LT5jbGlwKHJlY3QpOworCisjaWYgRU5BQkxFKDNEX1JFTkRF
UklORykKKyAgICBjb250ZXh0LT5zZXQzRFRyYW5zZm9ybShwcmV2aW91c1RyYW5zZm9ybSk7Cisj
ZWxzZQorICAgIGNvbnRleHQtPnNldENUTShwcmV2aW91c1RyYW5zZm9ybSk7CisjZW5kaWYKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1h
cFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gY3Vy
cmVudENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciYgdGV4dHVyZUltYWdlQnVmZmVyID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyJj4odGV4dHVyZSk7CisgICAg
SW1hZ2VCdWZmZXIqIGltYWdlID0gdGV4dHVyZUltYWdlQnVmZmVyLm1faW1hZ2UuZ2V0KCk7Cisg
ICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrZWRJbWFnZTsKKworICAgIGlmIChtYXNrVGV4dHVy
ZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1
cmVJbWFnZUJ1ZmZlciogbWFzayA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVJbWFn
ZUJ1ZmZlcio+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgbWFza2VkSW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKG1hc2tUZXh0dXJlLT5jb250ZW50U2l6ZSgpKTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0KiBtYXNrQ29udGV4dCA9IG1hc2tlZEltYWdlLT5jb250ZXh0KCk7CisgICAgICAgIG1h
c2tDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIElu
dFBvaW50Ojp6ZXJvKCksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBpZiAob3BhY2l0eSA8IDEp
IHsKKyAgICAgICAgICAgIG1hc2tDb250ZXh0LT5zZXRBbHBoYShvcGFjaXR5KTsKKyAgICAgICAg
ICAgIG9wYWNpdHkgPSAxOworICAgICAgICB9CisgICAgICAgIG1hc2tDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIobWFzay0+bV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9p
bnQ6Onplcm8oKSwgQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7CisgICAgICAgIGltYWdlID0gbWFz
a2VkSW1hZ2UuZ2V0KCk7CisgICAgfQorCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRl
eHQtPnNldEFscGhhKG9wYWNpdHkpOworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAgY29u
dGV4dC0+Y29uY2F0M0RUcmFuc2Zvcm0obWF0cml4KTsKKyNlbHNlCisgICAgY29udGV4dC0+Y29u
Y2F0Q1RNKG1hdHJpeCk7CisjZW5kaWYKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1h
Z2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHRhcmdldFJlY3QpOworICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKK30KKworUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVh
dGUoQWNjZWxlcmF0aW9uTW9kZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IFNvZnR3YXJlTW9k
ZSkKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCk7Cisg
ICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQoKTsKK30KKwogfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXIuaAppbmRleCBkNjZmZTJmLi5kYjMzMDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTQ3
LDQ2ICs0NywzMSBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyOwogY2xhc3MgQml0bWFwVGV4dHVyZSAg
OiBwdWJsaWMgUmVmQ291bnRlZDxCaXRtYXBUZXh0dXJlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBQ
aXhlbEZvcm1hdCB7IEJHUkFGb3JtYXQsIFJHQkFGb3JtYXQsIEJHUkZvcm1hdCwgUkdCRm9ybWF0
IH07Ci0gICAgQml0bWFwVGV4dHVyZSgpIDogbV9sb2NrQ291bnQoMCkge30KKyAgICBCaXRtYXBU
ZXh0dXJlKCkKKyAgICAgICAgOiBtX2lzT3BhcXVlKHRydWUpCisgICAgeworICAgIH0KKwogICAg
IHZpcnR1YWwgfkJpdG1hcFRleHR1cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgp
IHsgfQogCi0gICAgdmlydHVhbCBib29sIGFsbG93T2ZmbGluZVRleHR1cmVVcGxvYWQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgaW50IGJwcCgpIGNvbnN0IHsgcmV0dXJuIDMyOyB9CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmdCwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JikgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBpbnQg
YnBwKCkgY29uc3QgeyByZXR1cm4gMzI7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIG1faXNP
cGFxdWUgPSBvcGFxdWU7CiAgICAgICAgIG1fY29udGVudFNpemUgPSBzaXplOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBwYWNrKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVucGFjaygpIHsg
fQotICAgIHZpcnR1YWwgYm9vbCBpc1BhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpID0gMDsK
LQotICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBCaXRtYXBUZXh0dXJlIG1pZ2h0IG1v
ZGlmeSB0aGUgYml0cyBkaXJlY3RseSAoc3dpenpsZSkuCi0gICAgLy8gVGh1cywgdGhpcyBtZXRo
b2QgaXMgb25seSByZWNvbW1lbmRlZCBmb3IgYnVmZmVyIHVwZGF0ZSwgc3VjaCBhcyB1c2VkIGJ5
IFdlYktpdDIuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBj
b25zdCBJbnRSZWN0Jiwgdm9pZCogYml0cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVS
YXdDb250ZW50cyhjb25zdCBJbnRSZWN0JiwgY29uc3Qgdm9pZCogYml0cykgeyB9Ci0gICAgdmly
dHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludE1lZGlhKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBiZWdpblBhaW50KEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNp
emUoKS5oZWlnaHQoKSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBpbmxpbmUgdm9pZCBsb2NrKCkgeyArK21fbG9ja0NvdW50
OyB9Ci0gICAgaW5saW5lIHZvaWQgdW5sb2NrKCkgeyAtLW1fbG9ja0NvdW50OyB9Ci0gICAgaW5s
aW5lIGJvb2wgaXNMb2NrZWQoKSB7IHJldHVybiBtX2xvY2tDb3VudDsgfQogICAgIGlubGluZSBJ
bnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50U2l6ZTsgfQogICAg
IGlubGluZSBpbnQgbnVtYmVyT2ZCeXRlcygpIGNvbnN0IHsgcmV0dXJuIHNpemUoKS53aWR0aCgp
ICogc2l6ZSgpLmhlaWdodCgpICogYnBwKCkgPj4gMzsgfQorICAgIGlubGluZSBib29sIGlzT3Bh
cXVlKCkgY29uc3QgeyByZXR1cm4gbV9pc09wYXF1ZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgaW50
IG1fbG9ja0NvdW50OwogICAgIEludFNpemUgbV9jb250ZW50U2l6ZTsKICAgICBib29sIG1faXNP
cGFxdWU7CiB9OwpAQCAtOTcsMzIgKzgyLDI2IEBAIGNsYXNzIFRleHR1cmVNYXBwZXIgewogICAg
IGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJlOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0ID0gMCk7CisgICAgZW51bSBBY2NlbGVyYXRpb25Nb2RlIHsgU29mdHdhcmVNb2RlLCBPcGVu
R0xNb2RlIH07CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKEFj
Y2VsZXJhdGlvbk1vZGUgbW9kZSA9IFNvZnR3YXJlTW9kZSk7CiAgICAgdmlydHVhbCB+VGV4dHVy
ZU1hcHBlcigpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1h
cFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGZsb2F0IG9w
YWNpdHkgPSAxLjBmLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSA9IDApID0gMDsK
IAogICAgIC8vIG1ha2VzIGEgc3VyZmFjZSB0aGUgdGFyZ2V0IGZvciB0aGUgZm9sbG93aW5nIGRy
YXdUZXh0dXJlIGNhbGxzLgogICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0
dXJlKiBzdXJmYWNlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChH
cmFwaGljc0NvbnRleHQqKSA9IDA7Ci0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CisgICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4
dDsgfQogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSA9IDA7
Ci0gICAgSW50U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6
ZTsgfQotICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmIHMpIHsgbV92aWV3
cG9ydFNpemUgPSBzOyB9CiAKICAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
SW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX2ludGVycG9sYXRpb25RdWFsaXR5ID0g
cXVhbGl0eTsgfQogICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzIG1vZGUpIHsgbV90ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyB9CiAKICAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9p
bnRlcnBvbGF0aW9uUXVhbGl0eTsgfQogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3
aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9Ci0gICAgdmlydHVh
bCBib29sIGFsbG93UGFydGlhbFVwZGF0ZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc09wZW5HTEJhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
KSB7IG1fdHJhbnNmb3JtID0gbWF0cml4OyB9Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIEFjY2Vs
ZXJhdGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwg
dm9pZCBiZWdpblBhaW50aW5nKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCkg
eyB9CkBAIC0xMzAsMjIgKzEwOSwyOSBAQCBwdWJsaWM6CiAgICAgLy8gQSBzdXJmYWNlIGlzIHJl
bGVhc2VkIGltcGxpY2l0bHkgd2hlbiBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IGFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYp
OwogCi0KIHByb3RlY3RlZDoKICAgICBUZXh0dXJlTWFwcGVyKCkKICAgICAgICAgOiBtX2ludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25EZWZhdWx0KQogICAgICAgICAsIG1fdGV4dERy
YXdpbmdNb2RlKFRleHRNb2RlRmlsbCkKLSAgICB7fQorICAgIHsKKyAgICB9CiAKIHByaXZhdGU6
CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1
cmVNYXBwZXI+IHBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQoKTsKKyNlbHNlCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gcGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpCisg
ICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKICAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eSBtX2ludGVycG9sYXRpb25RdWFsaXR5OwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdz
IG1fdGV4dERyYXdpbmdNb2RlOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3Jt
OwotICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgVmVjdG9yPFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiA+IG1fdGV4dHVyZVBvb2w7CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7
CiB9OwogCi19OworfQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXgg
Y2NmNDliYy4uNGZlMjI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC0yMyw2ICsy
Myw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIk1hdGhFeHRyYXMuaCIKIAogbmFtZXNwYWNlIHsKQEAgLTE1NiwxMiArMTU3LDEwIEBA
IHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllCiAgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQogICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogQWRkIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2Vz
LgotICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxh
eSA/IGVudGlyZVJlY3QoKSA6IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdDsKKyAg
ICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9jdXJyZW50Q29udGVudC5u
ZWVkc0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxh
eVJlY3QpOwogCiAgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9v
d25lZFRpbGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKICAgICAgICAgT3duZWRUaWxlJiB0aWxl
ID0gbV9vd25lZFRpbGVzW3RpbGVJbmRleF07Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gZGly
dHlSZWN0OwogICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSkKICAgICAgICAgICAgIHRpbGUudGV4
dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKICAgICAgICAgUmVmUHRyPEJp
dG1hcFRleHR1cmU+JiB0ZXh0dXJlID0gdGlsZS50ZXh0dXJlOwpAQCAtMTY5LDMxICsxNjgsNDQg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0
ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWUKIAogICAgICAgICBpZiAodGlsZS5uZWVkc1Jlc2V0
IHx8IHRleHR1cmUtPmNvbnRlbnRTaXplKCkgIT0gdGlsZVNpemUgfHwgIXRleHR1cmUtPmlzVmFs
aWQoKSkgewogICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gZmFsc2U7Ci0gICAgICAgICAg
ICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9
PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlID8gZmFsc2UgOiBtX3N0YXRlLmNvbnRlbnRzT3BhcXVl
KTsKLSAgICAgICAgICAgIHJlY3QgPSB0aWxlLnJlY3Q7CisgICAgICAgICAgICB0ZXh0dXJlLT5y
ZXNldCh0aWxlU2l6ZSwgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7CisgICAgICAgICAgICBkaXJ0
eVJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJlY3QpKTsKICAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBQYWludCB0aGUgZW50aXJlIGRpcnR5IHJlY3QgaW50byBhbiBpbWFnZSBidWZmZXIuIFRo
aXMgZW5zdXJlcyB3ZSBvbmx5IHBhaW50IG9uY2UuCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZGlydHlSZWN0LnNpemUoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICB7
CisgICAgICAgIGNvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1h
cHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgY29udGV4dC0+c2V0
VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICAg
ICAgY29udGV4dC0+dHJhbnNsYXRlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7Cisg
ICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgZGlydHlS
ZWN0KTsKKyAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0
SW1hZ2VDb250ZW50VHlwZSkKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2N1cnJl
bnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBtX3N0YXRlLmNvbnRl
bnRzUmVjdCk7CisgICAgfQogCi0gICAgICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KHRpbGUucmVjdCk7Ci0gICAgICAgIGNvbnRlbnRSZWN0LmludGVyc2VjdChlbmNs
b3NpbmdJbnRSZWN0KHJlY3QpKTsKLSAgICAgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkK
KyAgICAvLyBUaGlzIHN1bGQgYmUgYSByZWZlcmVuY2UgY29weSBvbmx5LgorICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UgPSBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKCk7CisKKyAgICAvLyBEaXZpZGUg
dGhlIGltYWdlIHRvIHRpbGVzLgorICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJ
bmRleCA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CisgICAgICAgIE93bmVk
VGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxlSW5kZXhdOworICAgICAgICBJbnRSZWN0IHRh
cmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCk7CisgICAgICAgIHRhcmdldFJl
Y3QuaW50ZXJzZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0
YXJnZXRSZWN0OwogCi0gICAgICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdEluVGlsZUNvb3JkaW5h
dGVzID0gY29udGVudFJlY3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0KC10aWxlLnJlY3Qu
eCgpLCAtdGlsZS5yZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0
ZXMubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKLQotICAgICAgICB7Ci0gICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQgY29udGV4dCh0ZXh0dXJlLT5iZWdpblBhaW50KGVuY2xvc2luZ0lu
dFJlY3QoY29udGVudFJlY3RJblRpbGVDb29yZGluYXRlcykpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01v
ZGUodGV4dHVyZU1hcHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOwotICAgICAgICAgICAgY29udGV4
dC50cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICBGbG9hdFJl
Y3Qgc2NhbGVkQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRl
eHQsIGVuY2xvc2luZ0ludFJlY3Qoc2NhbGVkQ29udGVudFJlY3QpKTsKLSAgICAgICAgICAgIHRl
eHR1cmUtPmVuZFBhaW50KCk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gTm9ybWFsaXplIHNvdXJj
ZVJlY3QgdG8gdGhlIGJ1ZmZlcidzIGNvb3JkaW5hdGVzLgorICAgICAgICBzb3VyY2VSZWN0Lm1v
dmUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKworICAgICAgICAvLyBOb3JtYWxp
emUgdGFyZ2V0UmVjdCB0byB0aGUgdGV4dHVyZSdzIGNvb3JkaW5xYXRlcy4KKyAgICAgICAgdGFy
Z2V0UmVjdC5tb3ZlKC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7CisgICAgICAgIHRp
bGUudGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldFJlY3QsIHNvdXJj
ZVJlY3QsIEJpdG1hcFRleHR1cmU6OlJHQkFGb3JtYXQpOwogICAgIH0KIAogICAgIG1fY3VycmVu
dENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CkBAIC00ODEsNyArNDkzLDcgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCkK
ICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tC
dWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCB2b2lkKiBiaXRzKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0
Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgQVNT
RVJUKG1fdGV4dHVyZU1hcHBlcik7CiAKQEAgLTQ5OCw3ICs1MTAsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVj
dCYgc291cmNlUgogICAgIGlmICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCiAgICAgICAgIHRp
bGUuYmFja0J1ZmZlci50ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7
CiAgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Quc2l6ZSgpLCBm
YWxzZSk7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKHNv
dXJjZVJlY3QsIGJpdHMpOworICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51cGRhdGVDb250
ZW50cyhkYXRhLCBzb3VyY2VSZWN0KTsKICAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IGZlNGIxNGMuLjIzMGM5ZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0VGlsZU93bmVyc2hpcChUaWxlT3duZXJzaGlwIG93bmVyc2hpcCkgeyBtX3N0YXRlLnRp
bGVPd25lcnNoaXAgPSBvd25lcnNoaXA7IH0KICAgICBpbnQgY3JlYXRlQ29udGVudHNUaWxlKGZs
b2F0IHNjYWxlKTsKICAgICB2b2lkIHJlbW92ZUNvbnRlbnRzVGlsZShpbnQgaWQpOwotICAgIHZv
aWQgc2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGJpdHMpOworICAg
IHZvaWQgc2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqKTsKICAgICB2
b2lkIHNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGlu
dCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBCaXRtYXBUZXh0dXJlKik7CiAgICAgdm9pZCBjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlVGlsZXMoKTsKICAgICB2b2lkIHB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcApp
bmRleCA3NGU0ZjE4Li4wYTNiNDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogCi0jaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMTAxLDkgKzEwMCw5IEBAIHN0YXRp
YyBHZGtTY3JlZW4qIGdldFNjcmVlbihHdGtXaWRnZXQqIHdpZGdldCkKICAgICByZXR1cm4gZ3Rr
X3dpZGdldF9oYXNfc2NyZWVuKHdpZGdldCkgPyBndGtfd2lkZ2V0X2dldF9zY3JlZW4od2lkZ2V0
KSA6IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlblJlY3Qo
RnJhbWVWaWV3KiBmcmFtZVZpZXcpCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdl
dCkKIHsKLSAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IGZyYW1lVmlldyA/IEdUS19XSURHRVQo
ZnJhbWVWaWV3LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDog
MDsKKyAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0
LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKICAgICBp
ZiAoY29udGFpbmVyKQogICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIp
OwogCkBAIC0xMTksMTEgKzExOCwxMSBAQCBGbG9hdFJlY3Qgc2NyZWVuUmVjdChGcmFtZVZpZXcq
IGZyYW1lVmlldykKICAgICByZXR1cm4gRmxvYXRSZWN0KGdlb21ldHJ5LngsIGdlb21ldHJ5Lnks
IGdlb21ldHJ5LndpZHRoLCBnZW9tZXRyeS5oZWlnaHQpOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVu
QXZhaWxhYmxlUmVjdChGcmFtZVZpZXcqIGZyYW1lVmlldykKK0Zsb2F0UmVjdCBzY3JlZW5BdmFp
bGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQogewotICAgIEd0a1dpZGdldCogY29udGFpbmVyID0g
ZnJhbWVWaWV3ID8gR1RLX1dJREdFVChmcmFtZVZpZXctPnJvb3QoKS0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKSkgOiAwOworICAgIEd0a1dpZGdldCogY29udGFpbmVyID0gd2lk
Z2V0ID8gR1RLX1dJREdFVCh3aWRnZXQtPnJvb3QoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKSkgOiAwOwogICAgIGlmIChjb250YWluZXIgJiYgIWd0a193aWRnZXRfZ2V0X3Jl
YWxpemVkKGNvbnRhaW5lcikpCi0gICAgICAgIHJldHVybiBzY3JlZW5SZWN0KGZyYW1lVmlldyk7
CisgICAgICAgIHJldHVybiBzY3JlZW5SZWN0KHdpZGdldCk7CiAKICAgICBHZGtTY3JlZW4qIHNj
cmVlbiA9IGNvbnRhaW5lciA/IGdldFNjcmVlbihjb250YWluZXIpIDogZ2RrX3NjcmVlbl9nZXRf
ZGVmYXVsdCgpOwogICAgIGlmICghc2NyZWVuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVuTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1BsYXRmb3JtU2NyZWVuTWFjLm1tCmluZGV4IGYxNGYxZTIuLjkwNjU4NTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5NYWMubW0KQEAg
LTY0LDE2ICs2NCwxNiBAQCBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKQogLy8gVGhl
c2UgZnVuY3Rpb25zIHNjYWxlIGJldHdlZW4gc2NyZWVuIGFuZCBwYWdlIGNvb3JkaW5hdGVzIGJl
Y2F1c2UgSmF2YVNjcmlwdC9ET00gb3BlcmF0aW9ucyAKIC8vIGFzc3VtZSB0aGF0IHRoZSBzY3Jl
ZW4gYW5kIHRoZSBwYWdlIHNoYXJlIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3lzdGVtLgogCi1GbG9h
dFJlY3Qgc2NyZWVuUmVjdChGcmFtZVZpZXcqIGZyYW1lVmlldykKK0Zsb2F0UmVjdCBzY3JlZW5S
ZWN0KFdpZGdldCogd2lkZ2V0KQogewotICAgIE5TV2luZG93ICp3aW5kb3cgPSBmcmFtZVZpZXcg
PyBbZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10gOiBuaWw7Ci0gICAgcmV0dXJu
IHRvVXNlclNwYWNlKFtzY3JlZW5Gb3JXaW5kb3cod2luZG93KSBmcmFtZV0sIHdpbmRvdywgV2Vi
Q29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IoZnJhbWVWaWV3LT5mcmFtZSgpKSk7CisgICAgTlNXaW5k
b3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XSA6
IG5pbDsKKyAgICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVlbkZvcldpbmRvdyh3aW5kb3cpIGZy
YW1lXSwgd2luZG93KTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoRnJhbWVW
aWV3KiBmcmFtZVZpZXcpCitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdp
ZGdldCkKIHsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gZnJhbWVWaWV3ID8gW2ZyYW1lVmlldy0+
cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddIDogbmlsOwotICAgIHJldHVybiB0b1VzZXJTcGFjZShb
c2NyZWVuRm9yV2luZG93KHdpbmRvdykgdmlzaWJsZUZyYW1lXSwgd2luZG93LCBXZWJDb3JlOjpk
ZXZpY2VTY2FsZUZhY3RvcihmcmFtZVZpZXctPmZyYW1lKCkpKTsKKyAgICBOU1dpbmRvdyAqd2lu
ZG93ID0gd2lkZ2V0ID8gW3dpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddIDogbmlsOwor
ICAgIHJldHVybiB0b1VzZXJTcGFjZShbc2NyZWVuRm9yV2luZG93KHdpbmRvdykgdmlzaWJsZUZy
YW1lXSwgd2luZG93KTsKIH0KIAogTlNTY3JlZW4gKnNjcmVlbkZvcldpbmRvdyhOU1dpbmRvdyAq
d2luZG93KQpAQCAtODksMTggKzg5LDI5IEBAIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNX
aW5kb3cgKndpbmRvdykKICAgICByZXR1cm4gbmlsOwogfQogCi1GbG9hdFJlY3QgdG9Vc2VyU3Bh
Y2UoY29uc3QgTlNSZWN0JiByZWN0LCBOU1dpbmRvdyAqZGVzdGluYXRpb24sIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKQorc3RhdGljIENHRmxvYXQgd2luZG93U2NhbGVGYWN0b3IoTlNXaW5kb3cg
KndpbmRvdykKK3sKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgcmV0dXJuIFt3aW5kb3cgYmFja2luZ1Nj
YWxlRmFjdG9yXTsKKyNlbHNlCisgICAgcmV0dXJuIFt3aW5kb3cgdXNlclNwYWNlU2NhbGVGYWN0
b3JdOworI2VuZGlmCit9CisKK0Zsb2F0UmVjdCB0b1VzZXJTcGFjZShjb25zdCBOU1JlY3QmIHJl
Y3QsIE5TV2luZG93ICpkZXN0aW5hdGlvbikKIHsKICAgICBGbG9hdFJlY3QgdXNlclJlY3QgPSBy
ZWN0OwogICAgIHVzZXJSZWN0LnNldFkoTlNNYXhZKFtzY3JlZW5Gb3JXaW5kb3coZGVzdGluYXRp
b24pIGZyYW1lXSkgLSAodXNlclJlY3QueSgpICsgdXNlclJlY3QuaGVpZ2h0KCkpKTsgLy8gZmxp
cAotICAgIHVzZXJSZWN0LnNjYWxlKDEgLyBkZXZpY2VTY2FsZUZhY3Rvcik7IC8vIHNjYWxlIGRv
d24KKyAgICBpZiAoZGVzdGluYXRpb24pCisgICAgICAgIHVzZXJSZWN0LnNjYWxlKDEgLyB3aW5k
b3dTY2FsZUZhY3RvcihkZXN0aW5hdGlvbikpOyAvLyBzY2FsZSBkb3duCiAgICAgcmV0dXJuIHVz
ZXJSZWN0OwogfQogCi1OU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IE5TV2luZG93ICpzb3VyY2UsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQorTlNSZWN0IHRvRGV2
aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBOU1dpbmRvdyAqc291cmNlKQogewogICAg
IEZsb2F0UmVjdCBkZXZpY2VSZWN0ID0gcmVjdDsKLSAgICBkZXZpY2VSZWN0LnNjYWxlKGRldmlj
ZVNjYWxlRmFjdG9yKTsgLy8gc2NhbGUgdXAKKyAgICBpZiAoc291cmNlKQorICAgICAgICBkZXZp
Y2VSZWN0LnNjYWxlKHdpbmRvd1NjYWxlRmFjdG9yKHNvdXJjZSkpOyAvLyBzY2FsZSB1cAogICAg
IGRldmljZVJlY3Quc2V0WShOU01heFkoW3NjcmVlbkZvcldpbmRvdyhzb3VyY2UpIGZyYW1lXSkg
LSAoZGV2aWNlUmVjdC55KCkgKyBkZXZpY2VSZWN0LmhlaWdodCgpKSk7IC8vIGZsaXAKICAgICBy
ZXR1cm4gZGV2aWNlUmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxh
dGZvcm1TY3JlZW5RdC5jcHAKaW5kZXggODQ2ZjBiOC4uN2EyNjdmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAKQEAgLTEwMiwxNSArMTAy
LDE1IEBAIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogdykKICAgICByZXR1cm4gUUFw
cGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbihzY3JlZW5OdW1iZXIodykpLT5jb2xvckNvdW50
KCkgPT0gMjsKIH0KIAotRmxvYXRSZWN0IHNjcmVlblJlY3QoRnJhbWVWaWV3KiBmcmFtZVZpZXcp
CitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHcpCiB7Ci0gICAgUVJlY3QgciA9IFFBcHBs
aWNhdGlvbjo6ZGVza3RvcCgpLT5zY3JlZW5HZW9tZXRyeShzY3JlZW5OdW1iZXIoZnJhbWVWaWV3
KSk7CisgICAgUVJlY3QgciA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zY3JlZW5HZW9tZXRy
eShzY3JlZW5OdW1iZXIodykpOwogICAgIHJldHVybiBGbG9hdFJlY3Qoci54KCksIHIueSgpLCBy
LndpZHRoKCksIHIuaGVpZ2h0KCkpOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVj
dChGcmFtZVZpZXcqIGZyYW1lVmlldykKK0Zsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdp
ZGdldCogdykKIHsKLSAgICBRUmVjdCByID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPmF2YWls
YWJsZUdlb21ldHJ5KHNjcmVlbk51bWJlcihmcmFtZVZpZXcpKTsKKyAgICBRUmVjdCByID0gUUFw
cGxpY2F0aW9uOjpkZXNrdG9wKCktPmF2YWlsYWJsZUdlb21ldHJ5KHNjcmVlbk51bWJlcih3KSk7
CiAgICAgcmV0dXJuIEZsb2F0UmVjdChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQo
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9y
bVNjcmVlbldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3Jl
ZW5XaW4uY3BwCmluZGV4IDkzNmY4YTcuLmNhYWRkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcmVlbldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcApAQCAtMTA2LDE1ICsxMDYsMTUg
QEAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiAjZW5kaWYKIH0KIAot
RmxvYXRSZWN0IHNjcmVlblJlY3QoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCitGbG9hdFJlY3Qgc2Ny
ZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBNT05JVE9SSU5GT0VYIG1vbml0b3JJbmZv
ID0gbW9uaXRvckluZm9Gb3JXaWRnZXQoZnJhbWVWaWV3KTsKKyAgICBNT05JVE9SSU5GT0VYIG1v
bml0b3JJbmZvID0gbW9uaXRvckluZm9Gb3JXaWRnZXQod2lkZ2V0KTsKICAgICByZXR1cm4gbW9u
aXRvckluZm8ucmNNb25pdG9yOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChG
cmFtZVZpZXcqIGZyYW1lVmlldykKK0Zsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdl
dCogd2lkZ2V0KQogewotICAgIE1PTklUT1JJTkZPRVggbW9uaXRvckluZm8gPSBtb25pdG9ySW5m
b0ZvcldpZGdldChmcmFtZVZpZXcpOworICAgIE1PTklUT1JJTkZPRVggbW9uaXRvckluZm8gPSBt
b25pdG9ySW5mb0ZvcldpZGdldCh3aWRnZXQpOwogICAgIHJldHVybiBtb25pdG9ySW5mby5yY1dv
cms7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1NjcmVlbld4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1NjcmVlbld4LmNwcAppbmRleCA3Nzlk
NGZkLi40MWVkZjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3Jl
ZW5XeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvU2NyZWVuV3guY3BwCkBA
IC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiU2NyZWVuLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKQEAgLTQ5LDcgKzQ4
LDcgQEAgaW50IHNjcmVlblZlcnRpY2FsRFBJKFdpZGdldCopCiAgICAgcmV0dXJuIDA7CiB9CiAg
ICAgCi1GbG9hdFJlY3Qgc2NyZWVuUmVjdChGcmFtZVZpZXcqIGZyYW1lVmlldykKK0Zsb2F0UmVj
dCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQogewogLyoKICAgICBpbnQgZGlzcGxheU51bTsK
QEAgLTc4LDcgKzc3LDcgQEAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQp
CiAgICAgcmV0dXJuIHd4Q29sb3VyRGlzcGxheSgpOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuQXZh
aWxhYmxlUmVjdChGcmFtZVZpZXcqIGZyYW1lVmlldykKK0Zsb2F0UmVjdCBzY3JlZW5BdmFpbGFi
bGVSZWN0KFdpZGdldCogd2lkZ2V0KQogewogLyoKICAgICBXaWRnZXQqIHdpZGdldCA9IHdpZGdl
dC0+d2lkZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5jcHAKaW5kZXggZDE4ZjllYi4uODNiNGQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtNzQyLDcgKzc0Miw3IEBAIFJlbmRlclJlZ2lv
biogUmVuZGVyRmxvd1RocmVhZDo6bGFzdFJlZ2lvbigpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9
CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hDdXN0b21TdHlsZShjb25z
dCBSZW5kZXJCb3gqIGJveCwKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJPYmpl
Y3RDdXN0b21TdHlsZShjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwKICAgICBjb25zdCBSZW5k
ZXJSZWdpb24qIG9sZFN0YXJ0UmVnaW9uLCBjb25zdCBSZW5kZXJSZWdpb24qIG9sZEVuZFJlZ2lv
biwKICAgICBjb25zdCBSZW5kZXJSZWdpb24qIG5ld1N0YXJ0UmVnaW9uLCBjb25zdCBSZW5kZXJS
ZWdpb24qIG5ld0VuZFJlZ2lvbikKIHsKQEAgLTc1OSw3ICs3NTksNyBAQCB2b2lkIFJlbmRlckZs
b3dUaHJlYWQ6OmNsZWFyUmVuZGVyQm94Q3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyQm94KiBib3gs
CiAgICAgICAgICAgICBpbnNpZGVOZXdSZWdpb25SYW5nZSA9IHRydWU7CiAKICAgICAgICAgaWYg
KCEoaW5zaWRlT2xkUmVnaW9uUmFuZ2UgJiYgaW5zaWRlTmV3UmVnaW9uUmFuZ2UpKQotICAgICAg
ICAgICAgcmVnaW9uLT5jbGVhckJveFN0eWxlSW5SZWdpb24oYm94KTsKKyAgICAgICAgICAgIHJl
Z2lvbi0+Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKG9iamVjdCk7CiAKICAgICAgICAgaWYgKG9s
ZEVuZFJlZ2lvbiA9PSByZWdpb24pCiAgICAgICAgICAgICBpbnNpZGVPbGRSZWdpb25SYW5nZSA9
IGZhbHNlOwpAQCAtNzk4LDcgKzc5OCw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6c2V0UmVn
aW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2ZmCiAgICAg
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjbGVhclJlbmRlckJveEN1c3RvbVN0eWxlKGJv
eCwgcmFuZ2Uuc3RhcnRSZWdpb24oKSwgcmFuZ2UuZW5kUmVnaW9uKCksIHN0YXJ0UmVnaW9uLCBl
bmRSZWdpb24pOworICAgIGNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5bGUoYm94LCByYW5nZS5z
dGFydFJlZ2lvbigpLCByYW5nZS5lbmRSZWdpb24oKSwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7
CiAgICAgcmFuZ2Uuc2V0UmFuZ2Uoc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCmluZGV4IDRiMWIzNjYuLmY1
OTY0ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaApA
QCAtMTI0LDcgKzEyNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlZ2lvblJhbmdlRm9yQm94
KGNvbnN0IFJlbmRlckJveCosIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSk7CiAgICAgdm9pZCBnZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqLCBS
ZW5kZXJSZWdpb24qJiBzdGFydFJlZ2lvbiwgUmVuZGVyUmVnaW9uKiYgZW5kUmVnaW9uKSBjb25z
dDsKIAotICAgIHZvaWQgY2xlYXJSZW5kZXJCb3hDdXN0b21TdHlsZShjb25zdCBSZW5kZXJCb3gq
LAorICAgIHZvaWQgY2xlYXJSZW5kZXJPYmplY3RDdXN0b21TdHlsZShjb25zdCBSZW5kZXJPYmpl
Y3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJS
ZWdpb24qIG9sZFN0YXJ0UmVnaW9uID0gMCwgY29uc3QgUmVuZGVyUmVnaW9uKiBvbGRFbmRSZWdp
b24gPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5k
ZXJSZWdpb24qIG5ld1N0YXJ0UmVnaW9uID0gMCwgY29uc3QgUmVuZGVyUmVnaW9uKiBuZXdFbmRS
ZWdpb24gPSAwKTsKICAgICBXZWJLaXROYW1lZEZsb3cqIGVuc3VyZU5hbWVkRmxvdygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMjFhYTNkMy4uNDU1ZWY5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yNTkwLDgg
KzI1OTAsMjcgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXQKICAgICByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKIH0KIAor
Y2xhc3MgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKTsKK3B1YmxpYzoKKyAgICBDdXJy
ZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcihSZW5kZXJWaWV3KiB2aWV3LCBSZW5kZXJSZWdpb24q
IHJlbmRlclJlZ2lvbikKKyAgICA6IG1fdmlldyh2aWV3KQorICAgICwgbV9yZW5kZXJSZWdpb24o
dmlldy0+Y3VycmVudFJlbmRlclJlZ2lvbigpKQorICAgIHsKKyAgICAgICAgbV92aWV3LT5zZXRD
dXJyZW50UmVuZGVyUmVnaW9uKHJlbmRlclJlZ2lvbik7CisgICAgfQorICAgIH5DdXJyZW50UmVu
ZGVyUmVnaW9uTWFpbnRhaW5lcigpCisgICAgeworICAgICAgICBtX3ZpZXctPnNldEN1cnJlbnRS
ZW5kZXJSZWdpb24obV9yZW5kZXJSZWdpb24pOworICAgIH0KK3ByaXZhdGU6CisgICAgUmVuZGVy
VmlldyogbV92aWV3OworICAgIFJlbmRlclJlZ2lvbiogbV9yZW5kZXJSZWdpb247Cit9OworCiB2
b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVy
T2JqZWN0KiBwYWludGluZ1Jvb3QsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBQYWludExheWVyRmxh
Z3MgcGFpbnRGbGFncykKIHsKKyAgICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciByZW5k
ZXJSZWdpb25NYWludGFpbmVyKHJlbmRlcmVyKCktPnZpZXcoKSwgcmVnaW9uKTsKICAgICBPdmVy
bGFwVGVzdFJlcXVlc3RNYXAgb3ZlcmxhcFRlc3RSZXF1ZXN0czsKICAgICBwYWludExheWVyKHRo
aXMsIGNvbnRleHQsIGRhbWFnZVJlY3QsIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdCwgcmVn
aW9uLCAmb3ZlcmxhcFRlc3RSZXF1ZXN0cywgcGFpbnRGbGFncyk7CiAgICAgT3ZlcmxhcFRlc3RS
ZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwpAQCAt
MzA5Myw2ICszMTEyLDcgQEAgc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGZyYW1lVmlzaWJsZVJl
Y3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIAogYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogewor
ICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyIHJlbmRlclJlZ2lvbk1haW50YWluZXIo
cmVuZGVyZXIoKS0+dmlldygpLCByZXN1bHQucmVnaW9uKCkpOwogICAgIHJlbmRlcmVyKCktPmRv
Y3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgIAogICAgIExheW91dFJlY3QgaGl0VGVzdEFy
ZWEgPSByZW5kZXJlcigpLT52aWV3KCktPmRvY3VtZW50UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA3M2Q4NzQ0Li5mNGJkMmExIDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTcxMyw2ICsxNzEzLDIw
IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJPYmplY3Q6OmFkanVzdFN0eWxlRGlmZmVyZW5jZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgdW5zaWduCiAgICAgcmV0dXJuIGRpZmY7CiB9CiAKK1JlbmRl
clN0eWxlKiBSZW5kZXJPYmplY3Q6OnN0eWxlSW5SZWdpb24oKSBjb25zdAoreworICAgIEFTU0VS
VChpblJlbmRlckZsb3dUaHJlYWQoKSk7CisKKyAgICBpZiAoIWNhbkhhdmVSZWdpb25TdHlsZSgp
CisgICAgICAgIHx8ICEoKHZpZXcoKSAmJiB2aWV3KCktPmN1cnJlbnRSZW5kZXJSZWdpb24oKSAm
JiB2aWV3KCktPmN1cnJlbnRSZW5kZXJSZWdpb24oKS0+aGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSkp
KQorICAgICAgICByZXR1cm4gbV9zdHlsZS5nZXQoKTsKKworICAgIFJlbmRlclN0eWxlKiByZWdp
b25TdHlsZSA9IHZpZXcoKS0+Y3VycmVudFJlbmRlclJlZ2lvbigpLT5yZW5kZXJPYmplY3RSZWdp
b25TdHlsZSh0aGlzKTsKKyAgICBpZiAoIXJlZ2lvblN0eWxlKQorICAgICAgICB2aWV3KCktPmN1
cnJlbnRSZW5kZXJSZWdpb24oKS0+Y29tcHV0ZVN0eWxlSW5SZWdpb24odGhpcyk7CisgICAgcmV0
dXJuIHZpZXcoKS0+Y3VycmVudFJlbmRlclJlZ2lvbigpLT5yZW5kZXJPYmplY3RSZWdpb25TdHls
ZSh0aGlzKTsKK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlKQogewogICAgIGlmIChtX3N0eWxlID09IHN0eWxlKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggMWJjZGE0Ni4uMGIyNmVhMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNjc0LDcgKzY3NCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWluUHJlZmVycmVkTG9naWNhbFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlKCkgY29uc3Q7CiAgICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVzKCkgPyBmaXJzdExpbmVTdHls
ZVNsb3dDYXNlKCkgOiBzdHlsZSgpOyB9CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKGJvb2wgZmly
c3RMaW5lKSBjb25zdCB7IHJldHVybiBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5
bGUoKTsgfQogCkBAIC04NzksNiArODc5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypy
ZXBhaW50Q29udGFpbmVyKi8sIExheW91dFBvaW50KiAvKmNhY2hlZE9mZnNldFRvUmVwYWludENv
bnRhaW5lciovID0gMCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdCgpOyB9CiAKIHByaXZhdGU6
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlSW5SZWdpb24oKSBjb25zdDsKICAgICBSZW5kZXJTdHls
ZSogZmlyc3RMaW5lU3R5bGVTbG93Q2FzZSgpIGNvbnN0OwogICAgIFN0eWxlRGlmZmVyZW5jZSBh
ZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlLCB1bnNpZ25lZCBjb250ZXh0U2Vu
c2l0aXZlUHJvcGVydGllcykgY29uc3Q7CiAKQEAgLTExMDcsNiArMTEwOCwxMSBAQCBpbmxpbmUg
Ym9vbCBSZW5kZXJPYmplY3Q6OnByZXNlcnZlc05ld2xpbmUoKSBjb25zdAogICAgIHJldHVybiBz
dHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKTsKIH0KIAoraW5saW5lIFJlbmRlclN0eWxlKiBSZW5k
ZXJPYmplY3Q6OnN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZS5nZXQoKTsKK30K
KwogaW5saW5lIHZvaWQgbWFrZU1hdHJpeFJlbmRlcmFibGUoVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgYm9vbCBoYXMzRFJlbmRlcmluZykKIHsKICNpZiAhRU5BQkxFKDNEX1JFTkRFUklO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGls
ZExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlz
dC5jcHAKaW5kZXggMjQwNTViYi4uMWYxNzZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCBS
ZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2RlKFJlbmRl
ck9iamVjdCogb3duZXIsIFJlbmRlcgogICAgICAgICBpZiAob2xkQ2hpbGQtPmluUmVuZGVyRmxv
d1RocmVhZCgpICYmIG9sZENoaWxkLT5pc0JveCgpKSB7CiAgICAgICAgICAgICBvbGRDaGlsZC0+
ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5yZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKHRv
UmVuZGVyQm94KG9sZENoaWxkKSk7CiAgICAgICAgICAgICBpZiAob2xkQ2hpbGQtPmNhbkhhdmVS
ZWdpb25TdHlsZSgpKQotICAgICAgICAgICAgICAgIG9sZENoaWxkLT5lbmNsb3NpbmdSZW5kZXJG
bG93VGhyZWFkKCktPmNsZWFyUmVuZGVyQm94Q3VzdG9tU3R5bGUodG9SZW5kZXJCb3gob2xkQ2hp
bGQpKTsKKyAgICAgICAgICAgICAgICBvbGRDaGlsZC0+ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVh
ZCgpLT5jbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKG9sZENoaWxkKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBjb250YWluZXJGbG93VGhyZWFkID0gcmVu
ZGVyRmxvd1RocmVhZENvbnRhaW5lcihvd25lcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZWdpb24uY3BwCmluZGV4IDRhZjg4NTAuLjYzZmVjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCkBAIC00Nyw5ICs0Nyw2IEBAIFJlbmRlclJlZ2lv
bjo6UmVuZGVyUmVnaW9uKE5vZGUqIG5vZGUsIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQp
CiAgICAgLCBtX3BhcmVudEZsb3dUaHJlYWQoMCkKICAgICAsIG1faXNWYWxpZChmYWxzZSkKICAg
ICAsIG1faGFzQ3VzdG9tUmVnaW9uU3R5bGUoZmFsc2UpCi0jaWZuZGVmIE5ERUJVRwotICAgICwg
bV9pbnNpZGVSZWdpb25QYWludChmYWxzZSkKLSNlbmRpZgogewogfQogCkBAIC05Niw1NSArOTMs
MTIgQEAgYm9vbCBSZW5kZXJSZWdpb246OmlzTGFzdFJlZ2lvbigpIGNvbnN0CiAgICAgcmV0dXJu
IG1fZmxvd1RocmVhZC0+bGFzdFJlZ2lvbigpID09IHRoaXM7CiB9CiAKLXZvaWQgUmVuZGVyUmVn
aW9uOjpzZXRSZWdpb25Cb3hlc1JlZ2lvblN0eWxlKCkKLXsKLSAgICBmb3IgKFJlbmRlckJveFJl
Z2lvbkluZm9NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYmVnaW4o
KSwgZW5kID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gaXRlci0+Zmlyc3Q7Ci0gICAgICAg
IGlmICghYm94LT5jYW5IYXZlUmVnaW9uU3R5bGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIC8vIFNhdmUgb3JpZ2luYWwgYm94IHN0eWxlIHRvIGJlIHJlc3RvcmVkIGxhdGVy
LCBhZnRlciBwYWludC4KLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBib3hPcmlnaW5hbFN0
eWxlID0gYm94LT5zdHlsZSgpOwotCi0gICAgICAgIC8vIFNldCB0aGUgc3R5bGUgdG8gYmUgdXNl
ZCBmb3IgYm94IGFzIHRoZSBzdHlsZSBjb21wdXRlZCBpbiByZWdpb24uCi0gICAgICAgIChjb25z
dF9jYXN0PFJlbmRlckJveCo+KGJveCkpLT5zZXRTdHlsZUludGVybmFsKHJlbmRlckJveFJlZ2lv
blN0eWxlKGJveCkpOwotCi0gICAgICAgIG1fcmVuZGVyQm94UmVnaW9uU3R5bGUuc2V0KGJveCwg
Ym94T3JpZ2luYWxTdHlsZSk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclJlZ2lvbjo6cmVzdG9y
ZVJlZ2lvbkJveGVzT3JpZ2luYWxTdHlsZSgpCi17Ci0gICAgZm9yIChSZW5kZXJCb3hSZWdpb25J
bmZvTWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmJlZ2luKCksIGVu
ZCA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmZpcnN0OwotICAgICAgICBSZW5k
ZXJCb3hSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlbmRlckJveFJlZ2lvblN0eWxl
LmZpbmQoYm94KTsKLSAgICAgICAgaWYgKGl0ID09IG1fcmVuZGVyQm94UmVnaW9uU3R5bGUuZW5k
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBSZXN0b3JlIHRoZSBib3gg
c3R5bGUgdG8gdGhlIG9yaWdpbmFsIHN0eWxlIGFuZCBzdG9yZSB0aGUgYm94IHN0eWxlIGluIHJl
Z2lvbiBmb3IgbGF0ZXIgdXNlLgotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGJveFJlZ2lv
blN0eWxlID0gYm94LT5zdHlsZSgpOwotICAgICAgICAoY29uc3RfY2FzdDxSZW5kZXJCb3gqPihi
b3gpKS0+c2V0U3R5bGVJbnRlcm5hbChpdC0+c2Vjb25kKTsKLSAgICAgICAgbV9yZW5kZXJCb3hS
ZWdpb25TdHlsZS5zZXQoYm94LCBib3hSZWdpb25TdHlsZSk7Ci0gICAgfQotfQotCiB2b2lkIFJl
bmRlclJlZ2lvbjo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIC8vIERlbGVnYXRlIHBhaW50aW5nIG9mIGNv
bnRlbnQgaW4gcmVnaW9uIHRvIFJlbmRlckZsb3dUaHJlYWQuCiAgICAgaWYgKCFtX2Zsb3dUaHJl
YWQgfHwgIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwotCi0jaWZuZGVmIE5ERUJVRwotICAg
IG1faW5zaWRlUmVnaW9uUGFpbnQgPSB0cnVlOwotI2VuZGlmCi0KLSAgICBzZXRSZWdpb25Cb3hl
c1JlZ2lvblN0eWxlKCk7CiAgICAgbV9mbG93VGhyZWFkLT5wYWludEludG9SZWdpb24ocGFpbnRJ
bmZvLCB0aGlzLCBMYXlvdXRQb2ludChwYWludE9mZnNldC54KCkgKyBib3JkZXJMZWZ0KCkgKyBw
YWRkaW5nTGVmdCgpLCBwYWludE9mZnNldC55KCkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3Ao
KSkpOwotICAgIHJlc3RvcmVSZWdpb25Cb3hlc09yaWdpbmFsU3R5bGUoKTsKLQotI2lmbmRlZiBO
REVCVUcKLSAgICBtX2luc2lkZVJlZ2lvblBhaW50ID0gZmFsc2U7Ci0jZW5kaWYKIH0KIAogLy8g
SGl0IFRlc3RpbmcKQEAgLTI0NywxMCArMjAxLDYgQEAgUmVuZGVyQm94UmVnaW9uSW5mbyogUmVu
ZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCogYm94LAog
ICAgIGlmICghbV9pc1ZhbGlkIHx8ICFtX2Zsb3dUaHJlYWQpCiAgICAgICAgIHJldHVybiAwOwog
Ci0jaWZuZGVmIE5ERUJVRwotICAgIEFTU0VSVCghbV9pbnNpZGVSZWdpb25QYWludCAmJiAiUmVu
ZGVyQm94UmVnaW9uSW5mbyBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGluc2lkZSByZWdpb24gcGFp
bnQuIik7Ci0jZW5kaWYKLQogICAgIE93blB0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiYgYm94SW5m
byA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5hZGQoYm94LCBudWxscHRyKS5maXJzdC0+c2Vjb25k
OwogICAgIGlmIChib3hJbmZvKQogICAgICAgICAqYm94SW5mbyA9IFJlbmRlckJveFJlZ2lvbklu
Zm8obG9naWNhbExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNvbnRhaW5pbmdCbG9ja0No
YWluSXNJbnNldCk7CkBAIC0yNjIsMTkgKzIxMiwxMSBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBS
ZW5kZXJSZWdpb246OnNldFJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gs
CiAKIFBhc3NPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4gUmVuZGVyUmVnaW9uOjp0YWtlUmVu
ZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCkKIHsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgQVNTRVJUKCFtX2luc2lkZVJlZ2lvblBhaW50ICYmICJSZW5kZXJCb3hSZWdpb25JbmZv
IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgaW5zaWRlIHJlZ2lvbiBwYWludC4iKTsKLSNlbmRpZgot
CiAgICAgcmV0dXJuIG1fcmVuZGVyQm94UmVnaW9uSW5mby50YWtlKGJveCk7CiB9CiAKIHZvaWQg
UmVuZGVyUmVnaW9uOjpyZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCog
Ym94KQogewotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQoIW1faW5zaWRlUmVnaW9uUGFpbnQg
JiYgIlJlbmRlckJveFJlZ2lvbkluZm8gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBpbnNpZGUgcmVn
aW9uIHBhaW50LiIpOwotI2VuZGlmCi0KICAgICBtX3JlbmRlckJveFJlZ2lvbkluZm8ucmVtb3Zl
KGJveCk7CiB9CiAKQEAgLTI5Miw0MiArMjM0LDM4IEBAIExheW91dFVuaXQgUmVuZGVyUmVnaW9u
OjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgY29uc3QKICAgICByZXR1cm4gcmVn
aW9uUmVjdCgpLngoKTsKIH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyUmVnaW9u
OjpyZW5kZXJCb3hSZWdpb25TdHlsZShjb25zdCBSZW5kZXJCb3gqIHJlbmRlckJveCkKK1JlbmRl
clN0eWxlKiBSZW5kZXJSZWdpb246OnJlbmRlck9iamVjdFJlZ2lvblN0eWxlKGNvbnN0IFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0KSBjb25zdAogewotICAgIC8vIFRoZSBib3ggZm9yIHdoaWNo
IHdlIGFyZSBhc2tpbmcgZm9yIHN0eWxlIGluIHJlZ2lvbiBzaG91bGQgaGF2ZSBpdHMgaW5mbyBw
cmVzZW50Ci0gICAgLy8gaW4gdGhlIHJlZ2lvbiBib3ggaW5mbyBtYXAuCi0gICAgQVNTRVJUKG1f
cmVuZGVyQm94UmVnaW9uSW5mby5maW5kKHJlbmRlckJveCkgIT0gbV9yZW5kZXJCb3hSZWdpb25J
bmZvLmVuZCgpKTsKLQotICAgIFJlbmRlckJveFJlZ2lvblN0eWxlTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVuZGVyQm94UmVnaW9uU3R5bGUuZmluZChyZW5kZXJCb3gpOwotICAgIGlmIChpdCAhPSBt
X3JlbmRlckJveFJlZ2lvblN0eWxlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
LSAgICByZXR1cm4gY29tcHV0ZVN0eWxlSW5SZWdpb24ocmVuZGVyQm94KTsKKyAgICBSZW5kZXJP
YmplY3RSZWdpb25TdHlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlbmRlck9iamVjdFJl
Z2lvblN0eWxlLmZpbmQocmVuZGVyT2JqZWN0KTsKKyAgICByZXR1cm4gKGl0ICE9IG1fcmVuZGVy
T2JqZWN0UmVnaW9uU3R5bGUuZW5kKCkpID8gaXQtPnNlY29uZC5nZXQoKSA6IDA7CiB9CiAKLVBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclJlZ2lvbjo6Y29tcHV0ZVN0eWxlSW5SZWdpb24o
Y29uc3QgUmVuZGVyQm94KiBib3gpCit2b2lkIFJlbmRlclJlZ2lvbjo6Y29tcHV0ZVN0eWxlSW5S
ZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKGJveCk7Ci0g
ICAgQVNTRVJUKGJveC0+dmlldygpKTsKLSAgICBBU1NFUlQoYm94LT52aWV3KCktPmRvY3VtZW50
KCkpOwotICAgIEFTU0VSVCghYm94LT5pc0Fub255bW91cygpKTsKLSAgICBBU1NFUlQoYm94LT5u
b2RlKCkgJiYgYm94LT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSk7Ci0KLSAgICBFbGVtZW50KiBl
bGVtZW50ID0gdG9FbGVtZW50KGJveC0+bm9kZSgpKTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHJlbmRlckJveFJlZ2lvblN0eWxlID0gYm94LT52aWV3KCktPmRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KGVsZW1lbnQsIDAsIGZhbHNlLCBmYWxzZSwgdGhpcyk7
Ci0gICAgbV9yZW5kZXJCb3hSZWdpb25TdHlsZS5hZGQoYm94LCByZW5kZXJCb3hSZWdpb25TdHls
ZSk7Ci0KLSAgICBpZiAoIWJveC0+aGFzQm94RGVjb3JhdGlvbnMoKSkgewotICAgICAgICBib29s
IGhhc0JveERlY29yYXRpb25zID0gYm94LT5pc1RhYmxlQ2VsbCgpIHx8IHJlbmRlckJveFJlZ2lv
blN0eWxlLT5oYXNCYWNrZ3JvdW5kKCkgfHwgcmVuZGVyQm94UmVnaW9uU3R5bGUtPmhhc0JvcmRl
cigpIHx8IHJlbmRlckJveFJlZ2lvblN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgfHwgcmVuZGVyQm94
UmVnaW9uU3R5bGUtPmJveFNoYWRvdygpOwotICAgICAgICAoY29uc3RfY2FzdDxSZW5kZXJCb3gq
Pihib3gpKS0+c2V0SGFzQm94RGVjb3JhdGlvbnMoaGFzQm94RGVjb3JhdGlvbnMpOworICAgIEFT
U0VSVChvYmplY3QpOworICAgIEFTU0VSVChvYmplY3QtPnZpZXcoKSk7CisgICAgQVNTRVJUKG9i
amVjdC0+dmlldygpLT5kb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoIW9iamVjdC0+aXNBbm9ueW1v
dXMoKSk7CisgICAgQVNTRVJUKG9iamVjdC0+bm9kZSgpICYmIG9iamVjdC0+bm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkpOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChvYmplY3Qt
Pm5vZGUoKSk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZW5kZXJPYmplY3RTdHlsZSA9IG9i
amVjdC0+dmlldygpLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVu
dChlbGVtZW50LCAwLCBmYWxzZSwgZmFsc2UsIHRoaXMpOworICAgIG1fcmVuZGVyT2JqZWN0UmVn
aW9uU3R5bGUuc2V0KG9iamVjdCwgcmVuZGVyT2JqZWN0U3R5bGUpOworCisgICAgaWYgKCFvYmpl
Y3QtPmhhc0JveERlY29yYXRpb25zKCkpIHsKKyAgICAgICAgUmVuZGVyQm94KiBib3ggPSBjb25z
dF9jYXN0PFJlbmRlckJveCo+KHRvUmVuZGVyQm94KG9iamVjdCkpOworICAgICAgICBSZW5kZXJT
dHlsZSogc3R5bGVJblJlZ2lvbiA9IHJlbmRlck9iamVjdFJlZ2lvblN0eWxlKG9iamVjdCk7Cisg
ICAgICAgIEFTU0VSVChzdHlsZUluUmVnaW9uKTsKKworICAgICAgICBib29sIGhhc0JveERlY29y
YXRpb25zID0gb2JqZWN0LT5pc1RhYmxlQ2VsbCgpIHx8IHN0eWxlSW5SZWdpb24tPmhhc0JhY2tn
cm91bmQoKSB8fCBzdHlsZUluUmVnaW9uLT5oYXNCb3JkZXIoKSB8fCBzdHlsZUluUmVnaW9uLT5o
YXNBcHBlYXJhbmNlKCkgfHwgc3R5bGVJblJlZ2lvbi0+Ym94U2hhZG93KCk7CisgICAgICAgIGJv
eC0+c2V0SGFzQm94RGVjb3JhdGlvbnMoaGFzQm94RGVjb3JhdGlvbnMpOwogICAgIH0KLQotICAg
IHJldHVybiByZW5kZXJCb3hSZWdpb25TdHlsZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgUmVuZGVy
UmVnaW9uOjpjbGVhckJveFN0eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyQm94KiBib3gpCit2b2lk
IFJlbmRlclJlZ2lvbjo6Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0KQogewotICAgIEFTU0VSVChib3gpOwotICAgIG1fcmVuZGVyQm94UmVnaW9uU3R5
bGUucmVtb3ZlKGJveCk7CisgICAgQVNTRVJUKG9iamVjdCk7CisgICAgbV9yZW5kZXJPYmplY3RS
ZWdpb25TdHlsZS5yZW1vdmUob2JqZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCmluZGV4IDkxM2M0MmUuLmI2NDgz
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKQEAgLTgwLDE1ICs4
MCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZpcnN0UmVnaW9uKCkgY29uc3Q7CiAgICAgYm9v
bCBpc0xhc3RSZWdpb24oKSBjb25zdDsKIAotICAgIHZvaWQgY2xlYXJCb3hTdHlsZUluUmVnaW9u
KGNvbnN0IFJlbmRlckJveCopOworICAgIFJlbmRlclN0eWxlKiByZW5kZXJPYmplY3RSZWdpb25T
dHlsZShjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVTdHlsZUlu
UmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCopOworICAgIHZvaWQgY2xlYXJPYmplY3RTdHlsZUlu
UmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCopOwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUmVnaW9uIjsgfQogCi0g
ICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcmVuZGVyQm94UmVnaW9uU3R5bGUoY29uc3QgUmVu
ZGVyQm94Kik7Ci0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5SZWdp
b24oY29uc3QgUmVuZGVyQm94Kik7Ci0gICAgdm9pZCBzZXRSZWdpb25Cb3hlc1JlZ2lvblN0eWxl
KCk7Ci0gICAgdm9pZCByZXN0b3JlUmVnaW9uQm94ZXNPcmlnaW5hbFN0eWxlKCk7Ci0KICAgICBS
ZW5kZXJGbG93VGhyZWFkKiBtX2Zsb3dUaHJlYWQ7CiAKICAgICAvLyBJZiB0aGlzIFJlbmRlclJl
Z2lvbiBpcyBkaXNwbGF5ZWQgYXMgcGFydCBvZiBhbm90aGVyIGZsb3csCkBAIC0xMDEsMTggKzk4
LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gQSBSZW5kZXJCb3hSZWdpb25JbmZvKiB0ZWxscyB1cyBh
Ym91dCBhbnkgbGF5b3V0IGluZm9ybWF0aW9uIGZvciBhIFJlbmRlckJveCB0aGF0CiAgICAgLy8g
aXMgdW5pcXVlIHRvIHRoZSByZWdpb24uIEZvciBub3cgaXQganVzdCBob2xkcyBsb2dpY2FsIHdp
ZHRoIGluZm9ybWF0aW9uIGZvciBSZW5kZXJCbG9ja3MsIGJ1dCBldmVudHVhbGx5CiAgICAgLy8g
aXQgd2lsbCBhbHNvIGhvbGQgYSBjdXN0b20gc3R5bGUgZm9yIGFueSBib3ggKGZvciByZWdpb24g
c3R5bGluZykuCi0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIE93blB0cjxS
ZW5kZXJCb3hSZWdpb25JbmZvPiA+IFJlbmRlckJveFJlZ2lvbkluZm9NYXA7Ci0gICAgUmVuZGVy
Qm94UmVnaW9uSW5mb01hcCBtX3JlbmRlckJveFJlZ2lvbkluZm87CisgICAgSGFzaE1hcDxjb25z
dCBSZW5kZXJCb3gqLCBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4gPiBtX3JlbmRlckJveFJl
Z2lvbkluZm87CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyQm94KiwgUmVmUHRy
PFJlbmRlclN0eWxlPiA+IFJlbmRlckJveFJlZ2lvblN0eWxlTWFwOwotICAgIFJlbmRlckJveFJl
Z2lvblN0eWxlTWFwIG1fcmVuZGVyQm94UmVnaW9uU3R5bGU7CisgICAgLy8gVGhpcyBtYXAgaG9s
ZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlZ2lvbiBzdHlsZSBhc3NvY2lhdGVkIHdpdGggdGhl
IHJlbmRlciBvYmplY3RzIHRoYXQKKyAgICAvLyBhcmUgZGlzcGxheWVkIGludG8gdGhpcyByZWdp
b24uCisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlck9iamVjdCosIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gPiBSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcDsKKyAgICBSZW5kZXJPYmplY3RS
ZWdpb25TdHlsZU1hcCBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlOwogCiAgICAgYm9vbCBtX2lz
VmFsaWQ7CiAgICAgYm9vbCBtX2hhc0N1c3RvbVJlZ2lvblN0eWxlOwotCi0jaWZuZGVmIE5ERUJV
RwotICAgIGJvb2wgbV9pbnNpZGVSZWdpb25QYWludDsKLSNlbmRpZgogfTsKIAogaW5saW5lIFJl
bmRlclJlZ2lvbiogdG9SZW5kZXJSZWdpb24oUmVuZGVyT2JqZWN0KiBvYmplY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggZTYxOTBmZi4uYzg4NThjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtNTgsNiArNTgsNyBAQCBS
ZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1lVmlldyogdmlldykKICAgICAs
IG1fbGF5b3V0U3RhdGUoMCkKICAgICAsIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQoMCkKICAg
ICAsIG1fY3VycmVudFJlbmRlckZsb3dUaHJlYWQoMCkKKyAgICAsIG1fY3VycmVudFJlbmRlclJl
Z2lvbigwKQogewogICAgIC8vIENsZWFyIG91ciBhbm9ueW1vdXMgYml0LCBzZXQgYmVjYXVzZSBS
ZW5kZXJPYmplY3QgYXNzdW1lcwogICAgIC8vIGFueSByZW5kZXJlciB3aXRoIGRvY3VtZW50IGFz
IHRoZSBub2RlIGlzIGFub255bW91cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
CmluZGV4IDFlYjkxZWMuLjg4MDc0MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaApAQCAtMzIsNiArMzIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5k
ZXJGbG93VGhyZWFkOworY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgUmVuZGVyV2lkZ2V0Owog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTg3LDYgKzE4OCw5IEBAIHB1
YmxpYzoKICAgICBSZW5kZXJGbG93VGhyZWFkKiBjdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpIGNv
bnN0IHsgcmV0dXJuIG1fY3VycmVudFJlbmRlckZsb3dUaHJlYWQ7IH0KICAgICB2b2lkIHNldEN1
cnJlbnRSZW5kZXJGbG93VGhyZWFkKFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpIHsgbV9j
dXJyZW50UmVuZGVyRmxvd1RocmVhZCA9IGZsb3dUaHJlYWQ7IH0KIAorICAgIFJlbmRlclJlZ2lv
biogY3VycmVudFJlbmRlclJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFJlbmRlclJl
Z2lvbjsgfQorICAgIHZvaWQgc2V0Q3VycmVudFJlbmRlclJlZ2lvbihSZW5kZXJSZWdpb24qIHJl
Z2lvbikgeyBtX2N1cnJlbnRSZW5kZXJSZWdpb24gPSByZWdpb247IH0KKwogICAgIHZvaWQgc3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
OwogCiAgICAgSW50ZXJ2YWxBcmVuYSogaW50ZXJ2YWxBcmVuYSgpOwpAQCAtMjc3LDYgKzI4MSw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBPd25QdHI8UmVuZGVyRmxvd1RocmVhZExpc3Q+IG1f
cmVuZGVyRmxvd1RocmVhZExpc3Q7CiAgICAgUmVuZGVyRmxvd1RocmVhZCogbV9jdXJyZW50UmVu
ZGVyRmxvd1RocmVhZDsKKyAgICBSZW5kZXJSZWdpb24qIG1fY3VycmVudFJlbmRlclJlZ2lvbjsK
ICAgICBSZWZQdHI8SW50ZXJ2YWxBcmVuYT4gbV9pbnRlcnZhbEFyZW5hOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA3MDEwNzhlLi4zYTk2M2Y4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzMCArMSwzIEBACi0yMDEyLTAxLTMwICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJvbGwgQ2hyb21pdW0gREVQUyBmcm9tIDExOTYy
MyB0byAxMTk3MDAuCi0KLSAgICAgICAgKiBERVBTOgotCi0yMDEyLTAxLTMwICBCZXRoIERha2lu
ICA8YmRha2luQGFwcGxlLmNvbT4KLQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzcyNjMKLSAgICAgICAgUGxhdGZvcm1TY3JlZW5NYWMgc2hvdWxkIG5v
dCByZWx5IG9uIE5TV2luZG93IGZvciBpbXBvcnRhbnQgYml0cyBvZiBkYXRhCi0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCi0KLSAgICAgICAgVGhlc2UgdHdvIGZ1bmN0aW9ucyBu
b3cgdGFrZSBhIEZyYW1lVmlldyBpbnN0ZWFkIG9mIGEgV2lkZ2V0LgotICAgICAgICAqIHNyYy9Q
bGF0Zm9ybVN1cHBvcnQuY3BwOgotICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TdXBwb3J0Ojpz
Y3JlZW5SZWN0KToKLSAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3VwcG9ydDo6c2NyZWVuQXZh
aWxhYmxlUmVjdCk6Ci0KLTIwMTItMDEtMzAgIEFtaSBGaXNjaG1hbiAgPGZpc2NobWFuQGNocm9t
aXVtLm9yZz4KLQotICAgICAgICBbY2hyb21pdW1dIGVuYWJsZSAtV2V4aXQtdGltZS1kZXN0cnVj
dG9ycyBmb3Igd2Via2l0IHVuaXQgdGVzdHMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc3MzAwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFu
Zy4KLQotICAgICAgICAqIFdlYktpdFVuaXRUZXN0cy5neXA6IEVuYWJsZSBjbGFuZyBjaGVjayBm
b3IgZXhpdCB0aW1lIGRlc3RydWN0b3JzLgotCiAyMDEyLTAxLTMwICBUb21teSBXaWRlbmZseWNo
dCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTWVkaWFTdHJlYW0g
QVBJOiBGaXggYSBmZXcgbWVtb3J5IGxlYWtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0RFUFMgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0RFUFMKaW5kZXggMzQwM2UyMS4u
ZTY1ZDQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9ERVBTCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vREVQUwpAQCAtMzIsNyArMzIsNyBAQAogCiB2YXJzID0gewog
ICAnY2hyb21pdW1fc3ZuJzogJ2h0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3N2bi90cnVuay9zcmMn
LAotICAnY2hyb21pdW1fcmV2JzogJzExOTcwMCcKKyAgJ2Nocm9taXVtX3Jldic6ICcxMTk2MjMn
CiB9CiAKIGRlcHMgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dFVuaXRUZXN0cy5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdFVuaXRUZXN0cy5n
eXAKaW5kZXggNWE5OGE4NC4uNTAxZDBlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXRVbml0VGVzdHMuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0VW5pdFRlc3RzLmd5cApAQCAtNTEsNyArNTEsNiBAQAogICAgICAgICB7CiAgICAgICAgICAg
ICAndGFyZ2V0X25hbWUnOiAnd2Via2l0X3VuaXRfdGVzdHMnLAogICAgICAgICAgICAgJ3R5cGUn
OiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgICAndmFyaWFibGVzJzogeyAnZW5hYmxlX3dleGl0
X3RpbWVfZGVzdHJ1Y3RvcnMnOiAxLCB9LAogICAgICAgICAgICAgJ21zdnNfZ3VpZCc6ICc3Q0VG
RTgwMC04NDAzLTQxOEEtQUQ2QS0yRDUyQzZGQzNFQUQnLAogICAgICAgICAgICAgJ2RlcGVuZGVu
Y2llcyc6IFsKICAgICAgICAgICAgICAgICAnV2ViS2l0Lmd5cDp3ZWJraXQnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKaW5kZXggN2VkODBiYi4u
YjRkNDc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1T
dXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBv
cnQuY3BwCkBAIC0xMDkyLDE3ICsxMDkyLDE3IEBAIGJvb2wgUGxhdGZvcm1TdXBwb3J0OjpzY3Jl
ZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiAgICAgcmV0dXJuIGNsaWVudC0+c2NyZWVu
SW5mbygpLmlzTW9ub2Nocm9tZTsKIH0KIAotSW50UmVjdCBQbGF0Zm9ybVN1cHBvcnQ6OnNjcmVl
blJlY3QoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCitJbnRSZWN0IFBsYXRmb3JtU3VwcG9ydDo6c2Ny
ZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9
IHRvV2ViV2lkZ2V0Q2xpZW50KGZyYW1lVmlldyk7CisgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGll
bnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwogICAgIGlmICghY2xpZW50KQogICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwogICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5yZWN0
OwogfQogCi1JbnRSZWN0IFBsYXRmb3JtU3VwcG9ydDo6c2NyZWVuQXZhaWxhYmxlUmVjdChGcmFt
ZVZpZXcqIGZyYW1lVmlldykKK0ludFJlY3QgUGxhdGZvcm1TdXBwb3J0OjpzY3JlZW5BdmFpbGFi
bGVSZWN0KFdpZGdldCogd2lkZ2V0KQogewotICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0g
dG9XZWJXaWRnZXRDbGllbnQoZnJhbWVWaWV3KTsKKyAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVu
dCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CiAgICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLmF2YWls
YWJsZVJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYzhiMTM5MS4uYWNmNTBmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwpAQCAtMSwxNyArMSwzIEBACi0yMDEyLTAxLTMwICBCZXRoIERha2luICA8YmRha2lu
QGFwcGxlLmNvbT4KLQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzcyNjMKLSAgICAgICAgUGxhdGZvcm1TY3JlZW5NYWMgc2hvdWxkIG5vdCByZWx5IG9u
IE5TV2luZG93IGZvciBpbXBvcnRhbnQgYml0cyBvZiBkYXRhCi0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgR2VvZmYgR2FyZW4uCi0KLSAgICAgICAgdG9Vc2VyU3BhY2UoKSBhbmQgdG9EZXZpY2VTcGFj
ZSgpIG5vdyB0YWtlIGEgcGFyYW1ldGVyIGZvciB0aGUgCi0gICAgICAgIGRldmljZVNjYWxlRmFj
dG9yLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKLSAgICAg
ICAgKHdpbmRvd1NjYWxlRmFjdG9yKToKLSAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c2V0V2lu
ZG93UmVjdCk6Ci0gICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QpOgotCiAyMDEy
LTAxLTI1ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgaW4g
dG8gYW4gYWx0ZXJuYXRlIGxvY2F0aW9uIHdoZW4gVVNFX1NUQUdJTkdfSU5TVEFMTF9QQVRIIGlz
IHNldC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5tbQppbmRleCBjZTJmMzdjLi4zYmFjODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCkBAIC0xNTAsMTYgKzE1
MCwxOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJveWVkKCkKICAgICBkZWxl
dGUgdGhpczsKIH0KIAorLy8gVGhlc2UgZnVuY3Rpb25zIHNjYWxlIGJldHdlZW4gd2luZG93IGFu
ZCBXZWJWaWV3IGNvb3JkaW5hdGVzIGJlY2F1c2UgSmF2YVNjcmlwdC9ET00gb3BlcmF0aW9ucyAK
Ky8vIGFzc3VtZSB0aGF0IHRoZSBXZWJWaWV3IGFuZCB0aGUgd2luZG93IHNoYXJlIHRoZSBzYW1l
IGNvb3JkaW5hdGUgc3lzdGVtLgorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgTlNSZWN0IHdpbmRvd1JlY3QgPSB0b0Rl
dmljZVNwYWNlKHJlY3QsIFttX3dlYlZpZXcgd2luZG93XSwgW21fd2ViVmlldyBfYmFja2luZ1Nj
YWxlRmFjdG9yXSk7CisgICAgTlNSZWN0IHdpbmRvd1JlY3QgPSB0b0RldmljZVNwYWNlKHJlY3Qs
IFttX3dlYlZpZXcgd2luZG93XSk7CiAgICAgW1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNldEZyYW1lOndpbmRvd1JlY3RdOwogfQogCiBGbG9hdFJl
Y3QgV2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KCkKIHsKICAgICBOU1JlY3Qgd2luZG93UmVj
dCA9IFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3RnJhbWU6bV93ZWJW
aWV3XTsKLSAgICByZXR1cm4gdG9Vc2VyU3BhY2Uod2luZG93UmVjdCwgW21fd2ViVmlldyB3aW5k
b3ddLCBbbV93ZWJWaWV3IF9iYWNraW5nU2NhbGVGYWN0b3JdKTsKKyAgICByZXR1cm4gdG9Vc2Vy
U3BhY2Uod2luZG93UmVjdCwgW21fd2ViVmlldyB3aW5kb3ddKTsKIH0KIAogLy8gRklYTUU6IFdl
IG5lZWQgdG8gYWRkIEFQSSBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGlzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJmcmFtZS5jcHAKaW5kZXggYzhlOGRhZC4uNzQxODgyOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuY3BwCkBAIC0zMzYsNyArMzM2LDYgQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRl
OjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW4KICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAg
dGV4dHVyZU1hcHBlci0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LT5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgIHRleHR1cmVNYXBwZXItPnNldFRleHREcmF3
aW5nTW9kZShjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7Ci0gICAgdGV4dHVyZU1hcHBlci0+
c2V0Vmlld3BvcnRTaXplKGZyYW1lLT52aWV3KCktPmZyYW1lUmVjdCgpLnNpemUoKSk7CiAgICAg
UVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25z
dCBRVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHBhaW50ZXItPndvcmxkVHJhbnNmb3JtKCk7CiAgICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA2YWVm
ZDcwLi5lMDFlNzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAxLTMw
ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAg
W1F0XVtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXIgQVBJIHRvIHVzZSBJbWFnZUJ1ZmZl
cnMgd2hlbiBwb3NzaWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc3MTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVtb3ZlIHVudXNlZCBUZXh0dXJlTWFwcGVyIEFQSSBjYWxscywgbGlrZSBzZXRW
aWV3cG9ydFNpemUuCisgICAgICAgIFVzZSBUZXh0dXJlTWFwcGVyOjpBY2NlbGVyYXRpb25Nb2Rl
IGluc3RlYWQgb2YgY3JlYXRpbmcgVGV4dHVyZU1hcHBlckdML1RleHR1cmVNYXBwZXJRdAorICAg
ICAgICBkaXJlY3RseS4KKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAo
UVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVycyk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGll
bnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6CisKIDIwMTItMDEt
MzAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBu
b24tQ1NTT00gQVBJIG9mIENTU1N0eWxlRGVjbGFyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCA0MGU2YjE0Li40NWRjZmJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQu
Y3BwCkBAIC0yOCwxMiArMjgsOCBAQAogI2VuZGlmCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UXQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAidGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmgiCi0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0jaW5jbHVkZSAi
b3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIgotI2VuZGlmCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNzYsNyArNzIsNyBAQCB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290
R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBpZiAobGF5ZXIpIHsK
ICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQgPSBhZG9wdFB0cihuZXcgVGV4dHVyZU1h
cHBlck5vZGVDbGllbnRRdChwYWdlLT5tYWluRnJhbWUoKSwgbGF5ZXIpKTsKLSAgICAgICAgdGV4
dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoYWRvcHRQdHIobmV3IFRleHR1
cmVNYXBwZXJRdCkpOworICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKSk7CiAgICAgICAgIHRleHR1cmVNYXBwZXJO
b2RlQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
NjcsMTEgKzI2MywxMSBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKICAgICAgICAgUUdyYXBoaWNzVmlldyogZ3JhcGhpY3NWaWV3ID0gdmlldy0+c2NlbmUo
KS0+dmlld3MoKVswXTsKICAgICAgICAgaWYgKGdyYXBoaWNzVmlldyAmJiBncmFwaGljc1ZpZXct
PnZpZXdwb3J0KCkgJiYgZ3JhcGhpY3NWaWV3LT52aWV3cG9ydCgpLT5pbmhlcml0cygiUUdMV2lk
Z2V0IikpIHsKLSAgICAgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCkpOworICAgICAgICAgICAgdGV4dHVyZU1h
cHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRl
eHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogI2VuZGlmCi0gICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFw
cGVyKFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlKCkpOworICAgICAgICB0ZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQuY2xlYXIoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwppbmRleCAyZDRiMWY1Li5jYzU1NzI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBA
IC0xLDE5ICsxLDMgQEAKLTIwMTItMDEtMjYgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29t
PgotCi0gICAgICAgIFtXaW5kb3dzXSBPcHRpb25hbGx5IGludmVydCBjb2xvcnMgd2hlbiBkcmF3
aW5nIHRvIGEgV2ViVmlldydzIGJhY2tpbmcgc3RvcmUuCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzE2OAotCi0gICAgICAgIFJldmlld2VkIGJ5IFNh
bSBXZWluaWcuCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6Oldl
YlZpZXcpOiBJbml0aWFsaXplIG1fc2hvdWxkSW52ZXJ0Q29sb3JzIHRvIGZhbHNlLgotICAgICAg
ICAoV2ViVmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKTogSWYgbV9zaG91bGRJbnZlcnRDb2xv
cnMgaXMgdHJ1ZSwgZHJhdwotICAgICAgICBhbiBvcGFxdWUgd2hpdGUgcXVhZCB1c2luZyB0aGUg
Q29tcG9zaXRlRGlmZmVyZW5jZSBibGVuZCBtb2RlLiBUaGlzCi0gICAgICAgIGJsZW5kIG9wZXJh
dGlvbiBpbnN0cnVjdHMgQ29yZUdyYXBoaWNzIHRvIHRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl
bgotICAgICAgICB0aGUgc291cmNlIHBpeGVsICh3aGl0ZSkgYW5kIHRoZSBiYWNrZ3JvdW5kIHBp
eGVsLCByZXN1bHRpbmcgaW4gYW4KLSAgICAgICAgaW52ZXJ0ZWQgcGl4ZWwuCi0gICAgICAgICog
V2ViVmlldy5oOiBEZWZpbmUgbV9zaG91bGRJbnZlcnRDb2xvcnMuCi0KIDIwMTItMDEtMjMgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgU2hvdyBsYXll
ciBib3JkZXJzIGZvciBzY3JvbGxiYXIgbGF5ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCmluZGV4IDU3
YWNjMTMuLjkyNmRjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCkBAIC0zMzIsNyArMzMyLDYgQEAg
Ym9vbCBXZWJWaWV3OjpzX2FsbG93U2l0ZVNwZWNpZmljSGFja3MgPSBmYWxzZTsKIAogV2ViVmll
dzo6V2ViVmlldygpCiAgICAgOiBtX3JlZkNvdW50KDApCi0gICAgLCBtX3Nob3VsZEludmVydENv
bG9ycyhmYWxzZSkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLCBtX2RlbGV0aW9uSGFzQmVn
dW4oZmFsc2UpCiAjZW5kaWYKQEAgLTExNTUsOCArMTE1NCw2IEBAIHZvaWQgV2ViVmlldzo6cGFp
bnRJbnRvQmFja2luZ1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBIREMgYml0bWFwREMsIGNv
bnN0IEluCiAgICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmZyYW1lKCkgJiYgZnJhbWVW
aWV3LT5mcmFtZSgpLT5jb250ZW50UmVuZGVyZXIoKSkgewogICAgICAgICBnYy5jbGlwKGRpcnR5
UmVjdCk7CiAgICAgICAgIGZyYW1lVmlldy0+cGFpbnQoJmdjLCBkaXJ0eVJlY3QpOwotICAgICAg
ICBpZiAobV9zaG91bGRJbnZlcnRDb2xvcnMpCi0gICAgICAgICAgICBnYy5maWxsUmVjdChkaXJ0
eVJlY3QsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlRGlmZmVy
ZW5jZSk7CiAgICAgfQogICAgIGdjLnJlc3RvcmUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAppbmRleCA3
ZDJhNmUyLi4zODIzMGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCkBAIC0xMDAxLDggKzEwMDEsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBmbHVzaFBlbmRpbmdHcmFwaGljc0xheWVyQ2hhbmdl
cygpOwogI2VuZGlmCiAKLSAgICBib29sIG1fc2hvdWxkSW52ZXJ0Q29sb3JzOwotCiBwcm90ZWN0
ZWQ6CiAgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xhc3MoKTsKICAgICBz
dGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJWaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzc5NDU5
ZC4uYTQ4ODhhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwxNSArMSwxOCBAQAotMjAxMi0wMS0zMCAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisyMDEyLTAxLTI5ICBObydhbSBSb3NlbnRoYWwg
IDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjYzCi0gICAgICAgIFBsYXRmb3JtU2NyZWVuTWFjIHNo
b3VsZCBub3QgcmVseSBvbiBOU1dpbmRvdyBmb3IgaW1wb3J0YW50IGJpdHMgb2YgZGF0YQorICAg
ICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8gdXNlIEltYWdl
QnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzcxNDgKIAotICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4K
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKLSAgICAgICAgdG9Vc2VyU3Bh
Y2UoKSBhbmQgdG9EZXZpY2VTcGFjZSgpIG5vdyB0YWtlIGEgcGFyYW1ldGVyIGZvciB0aGUgCi0g
ICAgICAgIGRldmljZVNjYWxlRmFjdG9yLgotICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlldy5tbToKLSAgICAgICAgKC1bV0tWaWV3IF9jb252ZXJ0VG9EZXZpY2VTcGFjZTpdKToKLSAg
ICAgICAgKC1bV0tWaWV3IF9jb252ZXJ0VG9Vc2VyU3BhY2U6XSk6CisgICAgICAgIFVzZSBUZXh0
dXJlTWFwcGVyOjpBY2NlbGVyYXRpb25Nb2RlIGluc3RlYWQgb2YgY3JlYXRpbmcgVGV4dHVyZU1h
cHBlckdMIGRpcmVjdGx5LgorICAgICAgICBVc2UgdGhlIG5ldyBBUEkgY2FsbHMgZm9yIHVwZGF0
aW5nIEJpdG1hcFRleHR1cmUgY29udGVudC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXll
clRyZWVIb3N0UHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94
eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJv
eHk6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpl
bnN1cmVSb290TGF5ZXIpOgogCiAyMDEyLTAxLTI2ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJv
c2VudGhhbEBub2tpYS5jb20+IGFuZCBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0
ZUBub2tpYS5jb20+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQppbmRleCBkOGYwODU0Li4zZWMzZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3Lm1tCkBAIC0yMjcyLDEyICsyMjcyLDEyIEBAIHN0YXRpYyB2b2lkIGRyYXdQ
YWdlQmFja2dyb3VuZChDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViUGFnZVByb3h5KiBwYWdlLCBj
b25zdCBJCiAKIC0gKE5TUmVjdClfY29udmVydFRvRGV2aWNlU3BhY2U6KE5TUmVjdClyZWN0CiB7
Ci0gICAgcmV0dXJuIHRvRGV2aWNlU3BhY2UocmVjdCwgW3NlbGYgd2luZG93XSwgX2RhdGEtPl9w
YWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gdG9EZXZpY2VTcGFjZShyZWN0
LCBbc2VsZiB3aW5kb3ddKTsKIH0KIAogLSAoTlNSZWN0KV9jb252ZXJ0VG9Vc2VyU3BhY2U6KE5T
UmVjdClyZWN0CiB7Ci0gICAgcmV0dXJuIHRvVXNlclNwYWNlKHJlY3QsIFtzZWxmIHdpbmRvd10s
IF9kYXRhLT5fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIHRvVXNlclNw
YWNlKHJlY3QsIFtzZWxmIHdpbmRvd10pOwogfQogCiAvLyBBbnkgbm9uLXplcm8gdmFsdWUgd2ls
bCBkbywgYnV0IHVzaW5nIHNvbWV0aGluZyByZWNvZ25pemFibGUgbWlnaHQgaGVscCB1cyBkZWJ1
ZyBzb21lIGRheS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXll
clRyZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJU
cmVlSG9zdFByb3h5UXQuY3BwCmluZGV4IDFmNjA2NWUuLjg4N2I4M2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAt
MjYsOCArMjYsNyBAQAogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNsdWRlICJNZXNzYWdl
SUQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyR0wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKQEAgLTE3MSw4ICsx
NzAsOCBAQCBMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkoKQogdm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgaWYgKCFtX3RleHR1
cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3Jl
YXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPihtX3RleHR1
cmVNYXBwZXIuZ2V0KCkpKTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAgIEFTU0VSVChtX3RleHR1
cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2Rl
KTsKIAogICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CiAgICAgR3JhcGhpY3NMYXllciogY3VycmVu
dFJvb3RMYXllciA9IHJvb3RMYXllcigpOwpAQCAtMTg0LDkgKzE4Myw2IEBAIHZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTGlu
dCB2aWV3cG9ydFs0XTsKLSAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCk7
Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSh2aWV3cG9ydFsy
XSwgdmlld3BvcnRbM10pKTsKICAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1h
cHBlci5nZXQoKSk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CiAgICAg
bV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKQEAgLTIwOSw5ICsyMDUsOCBAQCB2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9HcmFw
aGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCiB7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBw
ZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlKCk7
Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dXJlTWFwcGVyUXQqPihtX3RleHR1cmVNYXBw
ZXIuZ2V0KCkpKTsKLQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpj
cmVhdGUoKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkg
PT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKICAgICBzeW5jUmVtb3RlQ29udGVudCgp
OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShyb290
TGF5ZXIoKSk7CiAKQEAgLTQwOCw3ICs0MDMsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCkKICAg
ICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7CiAgICAgICAgICAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4
dHVyZSgpOwogICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFpbWFnZUhh
c0FscGhhKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBzdWJJbWFnZS5jb25zdEJpdHMoKSk7Cisg
ICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5jb25zdEJpdHMoKSwgSW50
UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgdGlsZWRJ
bWFnZS5hZGQocmVjdC5sb2NhdGlvbigpLCB0ZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTQ3MSw3ICs0NjYsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVy
KCkKICAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBp
dCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgogICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0
U2l6ZSgxLjAsIDEuMCkpOwogICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3Rl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgICAgICBtX3RleHR1
cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9k
ZSk7CiAgICAgdG9UZXh0dXJlTWFwcGVyTm9kZShtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1
cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDJkMTg2NzYuLmI2YzhkM2UgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMTcgKzEs
MyBAQAotMjAxMi0wMS0zMCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3Nh
Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkLiBBZGQgbXlzZWxmIHRvIENTUywgR1N0cmVhbWVy
LCBRdCByZWxhdGVkIHdhdGNobGlzdHMuCi0gICAgICAgIAotICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NvbmZpZy93YXRjaGxpc3Q6Ci0KLTIwMTItMDEtMzAgIEdhdmluIEJhcnJh
Y2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQgYnVp
bGQgZml4IGZvbGxvd2luZyBidWcjNzY4NTUKLQotICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwOgotICAgICAgICAoKToKLSAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1RfRik6Ci0KIDIwMTItMDEtMjYgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9z
ZW50aGFsQG5va2lhLmNvbT4gYW5kIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRl
QG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFdLVFI6IFVzZSBhIHNvZnR3YXJlIHJlbmRlcmlu
ZyBwaXBpbGluZSB3aGVuIHJ1bm5pbmcgdGVzdHMuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY29uZmlnL3dhdGNobGlzdAppbmRleCBiZjkyZjA1Li41NGU3MzJmIDEwMDc1NQot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy93YXRjaGxpc3QKQEAgLTE0Myw3
ICsxNDMsNyBAQAogICAgICAgICAiQ2hyb21pdW1QdWJsaWNBcGkiOiBbICJmaXNoZEBjaHJvbWl1
bS5vcmciLCBdLAogICAgICAgICAiQXBwbGVNYWNQdWJsaWNBcGkiOiBbICJ0aW1vdGh5QGFwcGxl
LmNvbSIgXSwKICAgICAgICAgIkZvcm1zIjogWyAidGtlbnRAY2hyb21pdW0ub3JnIiwgXSwKLSAg
ICAgICAgIkdTdHJlYW1lckdyYXBoaWNzIjogWyAiYWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3Jn
IiwgInBub3JtYW5kQGlnYWxpYS5jb20iLCAiZ25zQGdub21lLm9yZyIgXSwKKyAgICAgICAgIkdT
dHJlYW1lckdyYXBoaWNzIjogWyAicG5vcm1hbmRAaWdhbGlhLmNvbSIsICJnbnNAZ25vbWUub3Jn
IiBdLAogICAgICAgICAiV2ViSURMIjogWyAiYWJhcnRoQHdlYmtpdC5vcmciLCAib2phbkBjaHJv
bWl1bS5vcmciIF0sCiAgICAgICAgICJTdHlsZUNoZWNrZXIiOiBbICJsZXZpbkBjaHJvbWl1bS5v
cmciLCBdLAogICAgICAgICAiVGhyZWFkaW5nRmlsZXN8VGhyZWFkaW5nVXNhZ2UiOiBbICJsZXZp
bit0aHJlYWRpbmdAY2hyb21pdW0ub3JnIiwgXSwKQEAgLTE1Niw5ICsxNTYsOSBAQAogICAgICAg
ICAiVGVzdEZhaWx1cmVzIjogWyAiYWJhcnRoQHdlYmtpdC5vcmciLCAiZGdsYXprb3ZAY2hyb21p
dW0ub3JnIiBdLAogICAgICAgICAiR3RrV2ViS2l0MlB1YmxpY0FQSSI6IFsgImNnYXJjaWFAaWdh
bGlhLmNvbSIsICJnbnNAZ25vbWUub3JnIiBdLAogICAgICAgICAiUXRCdWlsZFN5c3RlbSIgOiBb
ICJ2ZXN0Ym9Ad2Via2l0Lm9yZyIsIF0sCi0gICAgICAgICJRdFdlYktpdDJQdWJsaWNBUEkiOiBb
ICJhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmciLCAiem9sdGFuQHdlYmtpdC5vcmciLCBdLAot
ICAgICAgICAiUXRXZWJLaXQyUGxhdGZvcm1TcGVjaWZpYyI6IFsgImFsZXhpcy5tZW5hcmRAb3Bl
bmJvc3NhLm9yZyIsICJ6b2x0YW5Ad2Via2l0Lm9yZyIsIF0sCi0gICAgICAgICJDU1MiOiBbICJh
bGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmciLCAibWFjcGhlcnNvbkBjaHJvbWl1bS5vcmciLCBd
LAorICAgICAgICAiUXRXZWJLaXQyUHVibGljQVBJIjogWyAiem9sdGFuQHdlYmtpdC5vcmciLCBd
LAorICAgICAgICAiUXRXZWJLaXQyUGxhdGZvcm1TcGVjaWZpYyI6IFsgInpvbHRhbkB3ZWJraXQu
b3JnIiwgXSwKKyAgICAgICAgIkNTUyI6IFsgIm1hY3BoZXJzb25AY2hyb21pdW0ub3JnIiwgXSwK
ICAgICAgICAgIkVGTCI6IFsgImt1Ym9AcHJvZnVzaW9uLm1vYmkiLCBdLAogICAgICAgICAiQ01h
a2UiOiBbICJrdWJvQHByb2Z1c2lvbi5tb2JpIiwgXSwKICAgICAgICAgIlNvdXBOZXR3b3JrIjog
WyAia3Vib0Bwcm9mdXNpb24ubW9iaSIsIF0sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IDYxYzE2ZDEuLjRkZTUyM2EgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCkBAIC0xODIs
NyArMTgyLDcgQEAgcHVibGljOgogICAgIAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcywgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9kZSA9
IFJ1blNhbml0eUNoZWNrKQogICAgIHsKLSAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFu
ZGxlID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgMCkubGVha1JlZigpOworICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNp
emVJbkJ5dGVzKS5sZWFrUmVmKCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGhhbmRsZSk7CiAgICAg
ICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKICAgICAg
ICAgCkBAIC00NjQsNyArNDY0LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgc2FuaXR5
Q2hlY2soKTsKICAgICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9j
YXRlKHNpemVJbkJ5dGVzLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFs
bG9jYXRlKHNpemVJbkJ5dGVzKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgbnVtQWxsb2NhdGlvbnM7ICsraW5kZXgpCiAgICAgICAgICAgICBmcmVl
KGhhbmRsZXMuYXQoaW5kZXgpLCBEb250UnVuU2FuaXR5Q2hlY2spOwpAQCAtNTcxLDcgKzU3MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgc2FuaXR5Q2hlY2soKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEFzc2VydCB0aGF0IHRoZSBoZWFwIGlzIG5vdCBlbXB0eS4KLSAgICAgICAgRVhQRUNUX1RSVUUo
IWFsbG9jYXRvci0+YWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSwgMCkp
OworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZhdWx0UGFnZXNJ
bkhlYXAgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBBbGxvY2F0ZSB0aGUg
cmVtYWluZGVyIG9mIHRoZSBoZWFwLgogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiByZW1h
aW5kZXIgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpIC0gc2Vjb25k
U2l6ZSk7CkBAIC01ODksMTIgKzU4OSwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCB0ZXN0
RGVtYW5kQWxsb2NDb2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3QgbnVtUGFnZXMsIHNp
emVfdCBzZWNvbmRTaXplKQogICAgIHsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+
YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDAp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdl
c0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKICAg
ICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29uZFNp
emUsIDApKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1
bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBFWFBF
Q1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFn
ZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAgICAgICAgY3VycmVudEhlYXBHcm93dGhN
b2RlID0gRm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2U7CiAgICAgICAgIGFsbG93QWxsb2NhdGVQ
YWdlcyA9IG51bVBhZ2VzOwpAQCAtNjE4LDEyICs2MTgsMTIgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgZnJlZShhbGxvY2F0ZShmaXJzdFNpemUpKTsKICAgICAgICAgZnJlZShhbGxvY2F0ZShk
ZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFh
bGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdl
U2l6ZSgpLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChk
ZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAog
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0
U2l6ZSk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0
ZShzZWNvbmRTaXplLCAwKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9j
YXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpLCAwKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29uZFNpemUpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVh
cCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIGN1cnJlbnRI
ZWFwR3Jvd3RoTW9kZSA9IEZvclRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNjZTsKICAgICAgICAg
YWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7CkBAIC02MzcsMTIgKzYzNywxMiBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9IDA7CiAgICAgICAgIAot
ICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5I
ZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRSgh
YWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFn
ZVNpemUoKSkpOwogCiAgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOwogICAgICAgICBmcmVlKHNl
Y29uZEhhbmRsZSk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5h
bGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwgMCkp
OworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2Vz
SW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAgICAgICAgZmly
c3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwogICAgICAgICBzZWNvbmRIYW5kbGUgPSBh
bGxvY2F0ZShzZWNvbmRTaXplKTsKQEAgLTY2Myw3ICs2NjMsNyBAQCBURVNUX0YoTWV0YUFsbG9j
YXRvclRlc3QsIEFsbG9jWmVybykKICAgICAvLyBUZXN0cyB0aGF0IGFsbG9jYXRpbmcgYSB6ZXJv
LWxlbmd0aCBibG9jayByZXR1cm5zIDAgYW5kCiAgICAgLy8gZG9lcyBub3QgY2hhbmdlIGFueXRo
aW5nIGluIG1lbW9yeS4KICAgICAKLSAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCwg
MCkpOworICAgIEFTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgwKSk7CiAgICAgCiAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBw
YWdlU2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124643</attachid>
            <date>2012-01-30 17:51:32 -0800</date>
            <delta_ts>2012-01-30 20:44:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>58592</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MDc3Y2U1Li45ODI3YzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTItMDEtMzAgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8g
dXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIFRleHR1cmVNYXBwZXJRdCwgYW5kIGluc3Rl
YWQgY3JlYXRlZCBhIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBjbGFzcywKKyAgICAgICAgd2hp
Y2ggcmVzcG9uZHMgdG8gYW4gIlVuYWNjZWxlcmF0ZWQiIG1vZGUgb2YgVGV4dHVyZU1hcHBlciwg
aW5zdGVhZCBvZiBjcmVhdGluZyBzdWJjbGFzc2VzCisgICAgICAgIG9mIFRleHR1cmVNYXBwZXIg
ZGlyZWN0bHkuIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBzb2Z0d2FyZSBmYWxsYmFjayBvZiBUZXh0
dXJlTWFwcGVyIGJ5IGFueQorICAgICAgICBwb3J0LgorCisgICAgICAgIFRvIG1ha2UgdGhlIElt
YWdlQnVmZmVyIGJhY2tlbmQgZWFzaWVyLCBjb250ZW50IHVwZGF0ZXMgdG8gQml0bWFwVGV4dHVy
ZSBjYW4gbm93IHVzZSBlaXRoZXIKKyAgICAgICAgYW4gaW1hZ2UsIG9yIGEgcmF3IGRhdGEgcG9p
bnRlci4gVGhlIHJhdyBkYXRhIHBvaW50ZXIgaXMgcHJvdmlkZWQgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMsCisgICAgICAgIGFzIGNvbnZlcnRpbmcgZGF0YSB0by9mcm9tIEltYWdlIHJlZmVyZW5j
ZXMgaW4gUXQgZ2VuZXJhdGVzIHVubmVjZXNzYXJ5IGRlZXAgY29waWVzIG9mIHRoZQorICAgICAg
ICBpbWFnZSBkYXRhLgorCisgICAgICAgIEFsc28sIEZ1bmN0aW9ucyB0aGF0IHVzZSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB3ZXJlIGFkZGVkIHRvIEdyYXBoaWNzQ29udGV4dCwgdG8gYWxsb3cgZm9y
CisgICAgICAgIDNEIHRyYW5zZm9ybXMgaW4gY3Jvc3MgcGxhdGZvcm0gY29kZS4gVGhlIGZhbGxi
YWNrIGNvZGUgc3RpbGwgdXNlcyB0aGUgMkQgQ1RNcy4KKworICAgICAgICBBZnRlciB0aGlzIHBh
dGNoIGV2ZXJ5dGhpbmcgcmVuZGVycyB0aGUgc2FtZSwgYW5kIHRoZXJlIGFyZSBubyBuZXcgaW1h
Z2UgZGVlcCBjb3BpZXMuCisKKyAgICAgICAgTm8gYmVoYXZpb3JhbCBjaGFuZ2VzLgorCisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldFRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTERhdGEpOgor
ICAgICAgICAoQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJl
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnN3aXp6bGVSR0IpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9y
bUNyZWF0ZUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmFjY2VsZXJhdGlv
bk1vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmdldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFRyYW5zZm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpCaXRtYXBUZXh0dXJlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YnBwKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmU6OmlzT3BhcXVlKToKKyAgICAgICAgKCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlcjo6Z3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oOgorICAgICAgICAoVGV4dHVyZU1hcHBlck5vZGUpOgorCiAyMDEyLTAxLTMwICBNaWhu
ZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1NSZWdpb25zXUFk
ZCBzdXBwb3J0IGZvciBiYWNrZ3JvdW5kLWNvbG9yIGluIHJlZ2lvbiBzdHlsaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQppbmRleCBiMzRjNTQyLi43MGI4Y2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NDEsNyArMzk0MSw2
IEBAIHdpbjMyOiF3aW4zMi1nKysqOmNvbnRhaW5zKFFNQUtFX0hPU1QuYXJjaCwgeDg2XzY0KTp7
CiAKIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgSEVBREVSUyArPSBcCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXApAQCAtMzk1MCw3ICszOTQ5
LDYgQEAgY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIAogICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCkBA
IC0zOTYxLDYgKzM5NTksNyBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBI
RUFERVJTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAogICAg
ICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCiAgICAgICAgIENPTkZJRyArPSBvcGVuZ2wtc2hpbXMKKyAgICAgICAgREVGSU5FUyArPSBX
VEZfVVNFX1RFWFRVUkVfTUFQUEVSX0dMCiAgICAgfQogfSBlbHNlIHsKICAgICBIRUFERVJTICs9
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA0NzVm
ZGIzLi4yZDgxMzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTc3Niw0ICs3NzYsMjQgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Ip
CiAgICAgcGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKCk7CiB9CiAKKyNpZiBFTkFCTEUo
M0RfUkVOREVSSU5HKQorLy8gVGhlc2UgZnVjdGlvbnMgc2hvdWxkIGJlIGltcGxlbWVudGVkIHRv
IHN1cHBvcnQgc29mdHdhcmUtcmVuZGVyaW5nIG9mIDNkIHRyYW5zZm9ybXMuCisjaWYgIVBMQVRG
T1JNKFFUKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdDNEVHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
VHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXQzRFRyYW5zZm9ybSgpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25N
YXRyaXgoKTsKK30KKyNlbmRpZgorI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGRlYTk1MGIuLjU0OTg1YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCkBAIC0xMjQsNiArMTI0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEtVUkw7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4dFJ1bjsK
KyAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogICAgIGVudW0gVGV4dERyYXdpbmdN
b2RlIHsKICAgICAgICAgVGV4dE1vZGVJbnZpc2libGUgPSAwLApAQCAtNDA5LDYgKzQxMCwxMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3Q7CiAKKyNp
ZiBFTkFCTEUoM0RfUkVOREVSSU5HKQorICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCB3aGVuIHVz
aW5nIGFjY2VsZXJhdGVkLWNvbXBvc2l0aW5nIGluIHNvZnR3YXJlIG1vZGUsIGxpa2UgaW4gVGV4
dHVyZU1hcHBlci4KKyAgICAgICAgdm9pZCBjb25jYXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOworICAgICAgICB2b2lkIHNldDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4Jik7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldDNEVHJh
bnNmb3JtKCkgY29uc3Q7CisjZW5kaWYKICAgICAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZl
ciBjb21wYXRpYmxlIHdpdGggdGhpcyBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24K
ICAgICAgICAgLy8gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhp
cyBjb250ZXh0LgogICAgICAgICBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEludFNpemUmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3Bw
CmluZGV4IDYxZDhiMjAuLmU3Mjk1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcApAQCAt
MTE1LDExICsxMTUsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6ZHJhd1RleHR1cmUoY29u
c3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZQogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLVBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3Jl
YXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFRleHR1cmVNYXBwZXJDYWlybyk7Ci19Ci0KIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4
dHVyZU1hcHBlckNhaXJvOjpjcmVhdGVUZXh0dXJlKCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEJpdG1hcFRleHR1cmVDYWlybygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZGUw
NDFiZi4uY2MxZDA2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTI2Myw1NyArMjYzLDYg
QEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogCiAgICAgfTsKIAotICAgIHN0cnVjdCBE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkgewotICAgICAgICBzdHJ1Y3QgRW50cnkg
ewotICAgICAgICAgICAgR0x1aW50IHRleHR1cmU7Ci0gICAgICAgICAgICBpbnQgcmVmQ291bnQ7
Ci0gICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxJbWFnZVVJRCwgRW50cnk+IElt
YWdlVGV4dHVyZU1hcDsKLSAgICAgICAgSW1hZ2VUZXh0dXJlTWFwIGltYWdlVG9UZXh0dXJlOwot
Ci0gICAgICAgIEdMdWludCBmaW5kT3JDcmVhdGUoSW1hZ2VVSUQgaW1hZ2UsIGJvb2wmIGZvdW5k
KQotICAgICAgICB7Ci0gICAgICAgICAgICBJbWFnZVRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0g
aW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0gICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwot
ICAgICAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOwotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC50ZXh0dXJlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgRW50cnkgZW50cnk7Ci0gICAgICAgICAgICBHTF9DTUQoZ2xHZW5U
ZXh0dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOwotICAgICAgICAgICAgZW50cnkucmVmQ291bnQg
PSAxOwotICAgICAgICAgICAgaW1hZ2VUb1RleHR1cmUuYWRkKGltYWdlLCBlbnRyeSk7Ci0gICAg
ICAgICAgICByZXR1cm4gZW50cnkudGV4dHVyZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
ZGVyZWYoSW1hZ2VVSUQgaW1hZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEhhc2hNYXA8SW1h
Z2VVSUQsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsK
LSAgICAgICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgewotICAgICAgICAg
ICAgICAgIGlmIChpdC0+c2Vjb25kLnJlZkNvdW50IDwgMikgewotICAgICAgICAgICAgICAgICAg
ICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJl
cG9zaXRvcnkoKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB+RGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZXBvc2l0b3J5KCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChJbWFn
ZVRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuYmVnaW4oKTsgaXQgIT0g
aW1hZ2VUb1RleHR1cmUuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBHTHVpbnQgdGV4
dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVyZTsKLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZSkK
LSAgICAgICAgICAgICAgICAgICAgR0xfQ01EKGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUp
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfSBkaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZXM7Ci0KICAgICBTaGFyZWRHTERhdGEmIHNoYXJlZEdMRGF0YSgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdMRGF0YS5nZXQoKSk7CkBAIC0zMjcsNiArMjc2LDcg
QEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHByb2plY3Rpb25NYXRyaXg7CiAgICAgaW50IGN1cnJlbnRQcm9ncmFtOwogICAgIGludCBwcmV2
aW91c1Byb2dyYW07CisgICAgR0xpbnQgdmlld3BvcnRbNF07CiAgICAgUmVmUHRyPFNoYXJlZEdM
RGF0YT4gbV9zaGFyZWRHTERhdGE7CiB9OwogCkBAIC0zMzcsNTYgKzI4NywyNSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKICAgICB2b2lkIGJpbmQoKTsKLSAgICB2
aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7Ci0gICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIH5CaXRtYXBUZXh0dXJlR0woKSB7
IGRlc3Ryb3koKTsgfQogICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9Ci0gICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1
ZTsgfQogICAgIGlubGluZSBGbG9hdFNpemUgcmVsYXRpdmVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9yZWxhdGl2ZVNpemU7IH0KICAgICB2b2lkIHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4bWFwOyB9Ci0KLSAgICB2b2lkIHVw
ZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwgdm9pZCopOwotICAgIHZv
aWQgdXBkYXRlUmF3Q29udGVudHMoY29uc3QgSW50UmVjdCYsIGNvbnN0IHZvaWQqKTsKLSAgICB2
b2lkIHBhY2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYSBzdHViLgot
ICAgICAgICBpZiAoaXNQYWNrZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9p
c1BhY2tlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCB1bnBhY2soKQotICAgIHsKLSAgICAg
ICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYSBzdHViLgotICAgICAgICBpZiAoIWlzUGFja2VkKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNQYWNrZWQgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBib29sIGlzUGFja2VkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lz
UGFja2VkOwotICAgIH0KKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7CisgICAgdm9pZCB1cGRhdGVDb250
ZW50cyhjb25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYpOwogCiBwcml2YXRlOgogICAgIEdMdWlu
dCBtX2lkOwotICAgIEltYWdlVUlEIG1faW1hZ2VVSUQ7CiAgICAgRmxvYXRTaXplIG1fcmVsYXRp
dmVTaXplOwotICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOwot
ICAgIE93blB0cjxCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gbV9idWZmZXI7CiAgICAgSW50
UmVjdCBtX2RpcnR5UmVjdDsKICAgICBHTHVpbnQgbV9mYm87CiAgICAgR0x1aW50IG1fcmJvOwog
ICAgIEludFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9zdXJmYWNlTmVlZHNSZXNldDsK
LSAgICBib29sIG1faXNQYWNrZWQ7CiAgICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBw
ZXI7CiAgICAgQml0bWFwVGV4dHVyZUdMKCkKICAgICAgICAgOiBtX2lkKDApCi0gICAgICAgICwg
bV9pbWFnZVVJRCgwKQotICAgICAgICAsIG1fb3BhcXVlKGZhbHNlKQogICAgICAgICAsIG1fZmJv
KDApCiAgICAgICAgICwgbV9yYm8oMCkKICAgICAgICAgLCBtX3N1cmZhY2VOZWVkc1Jlc2V0KHRy
dWUpCkBAIC01MzIsNiArNDUxLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRp
bmcoKQogICAgIH0KICAgICBnbENsZWFyU3RlbmNpbCgwKTsKICAgICBnbENsZWFyKEdMX1NURU5D
SUxfQlVGRkVSX0JJVCk7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgZGF0YSgpLnZp
ZXdwb3J0KTsKICAgICBiaW5kU3VyZmFjZSgwKTsKICNlbmRpZgogfQpAQCAtNjQ1LDcgKzU2NSw2
IEBAIHN0YXRpYyB2b2lkIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoc2l6ZV90IHdpZHRoLCBzaXpl
X3QgaGVpZ2h0KQogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0IEludFNpemUmIG5l
d1NpemUsIGJvb2wgb3BhcXVlKQogewogICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KG5ld1NpemUs
IG9wYXF1ZSk7Ci0gICAgbV9pbWFnZVVJRCA9IDA7CiAgICAgSW50U2l6ZSBuZXdUZXh0dXJlU2l6
ZSA9IG5leHRQb3dlck9mVHdvKG5ld1NpemUpOwogICAgIGJvb2wganVzdENyZWF0ZWQgPSBmYWxz
ZTsKICAgICBpZiAoIW1faWQpIHsKQEAgLTY2NCwyOSArNTgzLDExIEBAIHZvaWQgQml0bWFwVGV4
dHVyZUdMOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplLCBib29sIG9wYXF1ZSkKICAgICB9
CiAgICAgbV9hY3R1YWxTaXplID0gbmV3U2l6ZTsKICAgICBtX3JlbGF0aXZlU2l6ZSA9IEZsb2F0
U2l6ZShmbG9hdChuZXdTaXplLndpZHRoKCkpIC8gbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBmbG9h
dChuZXdTaXplLmhlaWdodCgpKSAvIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwotICAgIG1fb3Bh
cXVlID0gb3BhcXVlOwogICAgIG1fc3VyZmFjZU5lZWRzUmVzZXQgPSB0cnVlOwogfQogCi1QbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogQml0bWFwVGV4dHVyZUdMOjpiZWdpblBhaW50KGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBtX2J1ZmZlciA9IEJHUkEzMlByZW11bHRpbXBsaWVk
QnVmZmVyOjpjcmVhdGUoKTsKLSAgICBtX2RpcnR5UmVjdCA9IGRpcnR5UmVjdDsKLSAgICByZXR1
cm4gbV9idWZmZXItPmJlZ2luUGFpbnQoZGlydHlSZWN0LCBtX29wYXF1ZSk7Ci19Ci0KLXZvaWQg
Qml0bWFwVGV4dHVyZUdMOjplbmRQYWludCgpCi17Ci0gICAgaWYgKCFtX2J1ZmZlcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fYnVmZmVyLT5lbmRQYWludCgpOwotICAgIHVwZGF0ZUNvbnRlbnRz
KEJHUkFGb3JtYXQsIG1fZGlydHlSZWN0LCBtX2J1ZmZlci0+ZGF0YSgpKTsKLSAgICBHTF9DTUQo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKLSAgICBtX2J1ZmZlci5jbGVhcigp
OwotfQogCi0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18yCi1zdGF0aWMgdm9pZCBzd2l6emxlQkdS
QVRvUkdCQSh1aW50MzJfdCogZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3N0YXRpYyB2b2lk
IHN3aXp6bGVSR0IodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAg
aW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgp
OwpAQCAtNjk2LDc5ICs1OTcsMzEgQEAgc3RhdGljIHZvaWQgc3dpenpsZUJHUkFUb1JHQkEodWlu
dDMyX3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAgICAgICBwW3hdID0gKChw
W3hdIDw8IDE2KSAmIDB4ZmYwMDAwKSB8ICgocFt4XSA+PiAxNikgJiAweGZmKSB8IChwW3hdICYg
MHhmZjAwZmYwMCk7CiAgICAgfQogfQotI2VuZGlmCiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1
cGRhdGVDb250ZW50cyhQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVj
dCwgdm9pZCogYml0cykKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25z
dCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQogewogICAgIEdMX0NNRChn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQotI2lmZGVmIFRFWE1BUF9PUEVOR0xf
RVNfMgotICAgIGJvb2wgc2hvdWxkU3dpenpsZSA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBHTGlu
dCBnbEZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgewotICAgIGNh
c2UgUkdCQUZvcm1hdDoKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFJHQkZvcm1hdDoKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9SR0I7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQkdSQUZvcm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VT
XzIKLSAgICAgICAgc2hvdWxkU3dpenpsZSA9IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xf
UkdCQTsKLSNlbHNlCi0gICAgICAgIGdsRm9ybWF0ID0gR0xfQkdSQTsKLSNlbmRpZgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEJHUkZvcm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIK
LSAgICAgICAgc2hvdWxkU3dpenpsZSA9IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdC
OwotI2Vsc2UKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9CR1I7Ci0jZW5kaWYKLSAgICAgICAgIGJy
ZWFrOwotICAgIH0KLQotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIGlmIChzaG91bGRT
d2l6emxlKQotICAgICAgICBzd2l6emxlQkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50MzJfdCo+
KGJpdHMpLCByZWN0LnNpemUoKSk7Ci0jZW5kaWYKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgYml0cykpCisgICAgR0xfQ01E
KGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgZGF0YSkpCiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1
cGRhdGVSYXdDb250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCB2b2lkKiBiaXRzKQor
dm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3Qg
SW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgQml0bWFwVGV4
dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0KQogeworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJl
dHVybjsKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKICAg
ICBHTHVpbnQgZ2xGb3JtYXQgPSBpc09wYXF1ZSgpID8gR0xfUkdCIDogR0xfUkdCQTsKLSAgICBH
TF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllU
RSwgYml0cykpCi19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1hZ2Uo
SW1hZ2UqIGltYWdlKQotewotICAgIEltYWdlVUlEIHVpZCA9IGltYWdlID8gdWlkRm9ySW1hZ2Uo
aW1hZ2UpIDogMDsKLSAgICBpZiAoIWltYWdlIHx8ICF1aWQpIHsKLSAgICAgICAgaWYgKG1faW1h
Z2VVSUQpCi0gICAgICAgICAgICBkZXN0cm95KCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJ
bWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghZnJh
bWVJbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICh1aWQgPT0gbV9pbWFn
ZVVJRCkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBHTHVp
bnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkuZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLmZpbmRPckNyZWF0ZSh1aWQsIGZvdW5kKTsKLSAgICBpZiAobmV3VGV4dHVyZUlE
ICE9IG1faWQpIHsKLSAgICAgICAgbV9pbWFnZVVJRCA9IHVpZDsKLSAgICAgICAgZGVzdHJveSgp
OwotICAgICAgICBtX2lkID0gbmV3VGV4dHVyZUlEOwotICAgICAgICByZXNldChpbWFnZS0+c2l6
ZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KGJlZ2luUGFpbnQoSW50UmVjdCgwLCAwLCBtX3RleHR1cmVTaXplLndp
ZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKSk7Ci0gICAgICAgICAgICBjb250ZXh0LmRy
YXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCksIENvbXBv
c2l0ZUNvcHkpOwotICAgICAgICAgICAgZW5kUGFpbnQoKTsKLSAgICAgICAgfQotICAgIH0KKyNp
ZiBQTEFURk9STShRVCkKKyAgICBRSW1hZ2UgcXRJbWFnZSA9IGZyYW1lSW1hZ2UtPnRvSW1hZ2Uo
KTsKKyAgICBpZiAoSW50U2l6ZShxdEltYWdlLnNpemUoKSkgIT0gc291cmNlUmVjdC5zaXplKCkp
CisgICAgICAgIHF0SW1hZ2UgPSBxdEltYWdlLmNvcHkoc291cmNlUmVjdCk7CisgICAgaWYgKGZv
cm1hdCA9PSBCR1JBRm9ybWF0IHx8IGZvcm1hdCA9PSBCR1JGb3JtYXQpCisgICAgICAgIHN3aXp6
bGVSR0IocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHF0SW1hZ2UuYml0cygpKSwgcXRJbWFn
ZS5zaXplKCkpOworICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwg
dGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdl
dFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBxdEltYWdlLmNvbnN0
Qml0cygpKSkKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlwKQpA
QCAtODIwLDcgKzY3Myw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKIAogdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3koKQogewotICAgIGlmIChtX2lkICYmICghbV9pbWFnZVVJ
RCB8fCAhbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkuZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmRl
cmVmKG1faW1hZ2VVSUQpKSkKKyAgICBpZiAobV9pZCkKICAgICAgICAgR0xfQ01EKGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1faWQpKQogCiAgICAgaWYgKG1fZmJvKQpAQCAtODU1LDExICs3MDgsMTIg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1cmZh
Y2VQb2ludGVyKQogICAgIEJpdG1hcFRleHR1cmVHTCogc3VyZmFjZSA9IHN0YXRpY19jYXN0PEJp
dG1hcFRleHR1cmVHTCo+KHN1cmZhY2VQb2ludGVyKTsKIAogICAgIGlmICghc3VyZmFjZSkgewor
ICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZShkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52
aWV3cG9ydFszXSk7CiAgICAgICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgMCkpCi0gICAgICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVj
dGlvbk1hdHJpeCh2aWV3cG9ydFNpemUoKSwgdHJ1ZSkubXVsdGlwbHkodHJhbnNmb3JtKCkpOwor
ICAgICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgo
dmlld3BvcnRTaXplLCB0cnVlKTsKICAgICAgICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoZGF0YSgp
LnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6IEdMX0FMV0FZUywg
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEsIGRhdGEoKS5zaGFyZWRHTERh
dGEoKS5zdGVuY2lsSW5kZXggLSAxKSkKICAgICAgICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX0tF
RVAsIEdMX0tFRVAsIEdMX0tFRVApKQotICAgICAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCB2
aWV3cG9ydFNpemUoKS53aWR0aCgpLCB2aWV3cG9ydFNpemUoKS5oZWlnaHQoKSkpCisgICAgICAg
IEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNp
emUuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05MTYsNCArNzcwLDkg
QEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1
cmUoKQogICAgIHJldHVybiBhZG9wdFJlZih0ZXh0dXJlKTsKIH0KIAorUGFzc093blB0cjxUZXh0
dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCkKK3sK
KyAgICByZXR1cm4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKK30KKwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuaAppbmRleCBkZDJlMWE3Li5lNDZiOGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC00
MywxNiArNDMsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50
MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9vbCBmbGlwKTsKICAgICB2aXJ0dWFsIHZvaWQg
YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIGJl
Z2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGVuZFBh
aW50aW5nKCk7CiAgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdDsKICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJl
TWFwcGVyR0w+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wp
OyB9Ci0gICAgdm9pZCBiZWdpblBhaW50aW5nKCk7Ci0gICAgdm9pZCBlbmRQYWludGluZygpOwog
ICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgeyBt
X2NvbnRleHQgPSBjb250ZXh0OyB9CiAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNPcGVuR0xCYWNr
ZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBwbGF0Zm9ybVVwZGF0ZUNvbnRl
bnRzKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIEJpdG1h
cFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKKyAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNj
ZWxlcmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIE9wZW5HTE1vZGU7IH0KIAogcHJpdmF0ZToK
ICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJuICptX2RhdGE7
IH0KQEAgLTYyLDE2ICs2Myw2IEBAIHByaXZhdGU6CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4gYnVm
ZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJlLgotY2xhc3MgQkdSQTMyUHJlbXVsdGltcGxp
ZWRCdWZmZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZp
cnR1YWwgfkJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKCkgeyB9Ci0gICAgdmlydHVhbCBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qs
IGJvb2wgb3BhcXVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCogZGF0YSgpID0gMDsKLSAgICBzdGF0aWMgUGFzc093blB0cjxCR1JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7Ci19OwotCiBzdGF0aWMgaW5saW5lIGludCBu
ZXh0UG93ZXJPZlR3byhpbnQgbnVtKQogewogICAgIGZvciAoaW50IGkgPSAweDEwMDAwMDAwOyBp
ID4gMDsgaSA+Pj0gMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA5MTczYTVkLi5jMTkw
YThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyCiB7CiAgICAgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0
b3JlQ29udGV4dCgpOwogCi0gICAgaWYgKHRleHR1cmVNYXBwZXItPmlzT3BlbkdMQmFja2VkKCkp
IHsKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVN
YXBwZXI6Ok9wZW5HTE1vZGUpIHsKICAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9
IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpOwogICAgICAgICB0
ZXhtYXBHTC0+ZHJhd1RleHR1cmUobV9jb250ZXh0LT5tX3RleHR1cmUsICFtX2NvbnRleHQtPm1f
YXR0cnMuYWxwaGEsIEZsb2F0U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5
LCBtYXNrLCB0cnVlIC8qIGZsaXAgKi8pOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5j
cHAKaW5kZXggZWM3M2MzZmUuLjI2MWJiZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTEzMzUs
NiArMTMzNSwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIG1fZGF0YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0
cmFuc2Zvcm0pOwogfQogCisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKK1RyYW5zZm9ybWF0aW9u
TWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0M0RUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpOworCisgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5jb21iaW5lZFRyYW5zZm9ybSgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0M0RUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zv
cm0odHJhbnNmb3JtLCB0cnVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldDNEVHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5wKCkt
PnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSwgZmFsc2UpOworfQorI2VuZGlmCisKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRSZWN0
JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQ0NjQxY2UuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDI2MyArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgotCi0jaW5jbHVk
ZSA8UXRDb3JlL3FkZWJ1Zy5oPgotI2luY2x1ZGUgPFF0R3VpL3FwYWludGVuZ2luZS5oPgotI2lu
Y2x1ZGUgPFF0R3VpL3FwaXhtYXAuaD4KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSMg
aW5jbHVkZSAib3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmRlc3Ryb3koKQotewotICAgIGlmICht
X3BpeG1hcC5wYWludGluZ0FjdGl2ZSgpKQotICAgICAgICBxRmF0YWwoIkRlc3Ryb3lpbmcgYW4g
YWN0aXZlIHBpeG1hcCIpOwotICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOwotfQotCi12b2lkIEJp
dG1hcFRleHR1cmVRdDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBpc09wYXF1ZSkK
LXsKLSAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChzaXplLCBpc09wYXF1ZSk7Ci0KLSAgICBpZiAo
c2l6ZS53aWR0aCgpID4gbV9waXhtYXAuc2l6ZSgpLndpZHRoKCkgfHwgc2l6ZS5oZWlnaHQoKSA+
IG1fcGl4bWFwLnNpemUoKS5oZWlnaHQoKSB8fCBtX3BpeG1hcC5pc051bGwoKSkKLSAgICAgICAg
bV9waXhtYXAgPSBRUGl4bWFwKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgaWYg
KCFpc09wYXF1ZSkKLSAgICAgICAgbV9waXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotfQot
Ci1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogQml0bWFwVGV4dHVyZVF0OjpiZWdpblBhaW50KGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBtX3BhaW50ZXIuYmVnaW4oJm1fcGl4bWFw
KTsKLSAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxpemUoJm1fcGFpbnRlcik7Ci0gICAgbV9w
YWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0NsZWFy
KTsKLSAgICBtX3BhaW50ZXIuZmlsbFJlY3QoUVJlY3QoZGlydHlSZWN0KSwgUXQ6OnRyYW5zcGFy
ZW50KTsKLSAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3Np
dGlvbk1vZGVfU291cmNlT3Zlcik7Ci0gICAgcmV0dXJuICZtX3BhaW50ZXI7Ci19Ci0KLXZvaWQg
Qml0bWFwVGV4dHVyZVF0OjplbmRQYWludCgpCi17Ci0gICAgbV9wYWludGVyLmVuZCgpOwotfQot
Ci12b2lkIEJpdG1hcFRleHR1cmVRdDo6dXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQgcGl4ZWxG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHZvaWQqIGJpdHMpCi17Ci0gICAgbV9wYWludGVy
LmJlZ2luKCZtX3BpeG1hcCk7Ci0gICAgUUltYWdlOjpGb3JtYXQgcXRGb3JtYXQgPSBRSW1hZ2U6
OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDsKLSAgICBpZiAocGl4ZWxGb3JtYXQgPT0gQkdS
Rm9ybWF0IHx8IHBpeGVsRm9ybWF0ID09IFJHQkZvcm1hdCkKLSAgICAgICAgcXRGb3JtYXQgPSBR
SW1hZ2U6OkZvcm1hdF9SR0IzMjsKLSAgICBRSW1hZ2UgaW1hZ2Uoc3RhdGljX2Nhc3Q8dWNoYXIq
PihiaXRzKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBxdEZvcm1hdCk7Ci0gICAgaWYg
KHBpeGVsRm9ybWF0ID09IEJHUkZvcm1hdCB8fCBwaXhlbEZvcm1hdCA9PSBCR1JBRm9ybWF0KQot
ICAgICAgICBpbWFnZSA9IGltYWdlLnJnYlN3YXBwZWQoKTsKLSAgICBtX3BhaW50ZXIuc2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICBtX3Bh
aW50ZXIuZHJhd0ltYWdlKHJlY3QsIGltYWdlKTsKLSAgICBtX3BhaW50ZXIuZW5kKCk7Ci19Ci0K
LWJvb2wgQml0bWFwVGV4dHVyZVF0OjpzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBy
ZXR1cm4gbV9waXhtYXAuc2F2ZShwYXRoLCAiUE5HIik7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVy
ZVF0OjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIGlmICghaW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICBjb25zdCBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXBpeG1hcCkKLSAgICAgICAgcmV0
dXJuOwotICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHBpeG1hcC0+c2l6ZSgpLCAhcGl4bWFwLT5o
YXNBbHBoYUNoYW5uZWwoKSk7Ci0gICAgbV9waXhtYXAgPSAqcGl4bWFwOwotfQotCi12b2lkIEJp
dG1hcFRleHR1cmVRdDo6cGFjaygpCi17Ci0gICAgaWYgKG1fcGl4bWFwLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2ltYWdlID0gbV9waXhtYXAudG9JbWFnZSgpOwotICAgIG1f
cGl4bWFwID0gUVBpeG1hcCgpOwotICAgIG1faXNQYWNrZWQgPSB0cnVlOwotfQotCi12b2lkIEJp
dG1hcFRleHR1cmVRdDo6dW5wYWNrKCkKLXsKLSAgICBtX2lzUGFja2VkID0gZmFsc2U7Ci0gICAg
aWYgKG1faW1hZ2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGl4bWFwID0g
UVBpeG1hcDo6ZnJvbUltYWdlKG1faW1hZ2UpOwotICAgIG1faW1hZ2UgPSBRSW1hZ2UoKTsKLX0K
LQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgIFFQYWludGVyKiBw
YWludGVyID0gY3VycmVudFBhaW50ZXIoKTsKLSAgICAgcGFpbnRlci0+c2F2ZSgpOwotICAgICBR
VHJhbnNmb3JtIHByZXZUcmFuc2Zvcm0gPSBwYWludGVyLT50cmFuc2Zvcm0oKTsKLSAgICAgcGFp
bnRlci0+c2V0VHJhbnNmb3JtKG1hdHJpeCwgZmFsc2UpOwotICAgICBwYWludGVyLT5zZXRDbGlw
UmVjdChyZWN0KTsKLSAgICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0sIGZh
bHNlKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmVuZENsaXAoKQotewotICAgIGN1cnJl
bnRQYWludGVyKCktPnJlc3RvcmUoKTsKLX0KLQotSW50U2l6ZSBUZXh0dXJlTWFwcGVyUXQ6OnZp
ZXdwb3J0U2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUobV9wYWludGVyLT5kZXZp
Y2UoKS0+d2lkdGgoKSwgbV9wYWludGVyLT5kZXZpY2UoKS0+aGVpZ2h0KCkpOwotfQotCi0KLVRl
eHR1cmVNYXBwZXJRdDo6VGV4dHVyZU1hcHBlclF0KCkKLSAgICA6IG1fY3VycmVudFN1cmZhY2Uo
MCkKLXsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldEdyYXBoaWNzQ29udGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9jb250ZXh0ID0gY29udGV4dDsKLSAgICBt
X3BhaW50ZXIgPSBjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwOwotICAg
IGluaXRpYWxpemUobV9wYWludGVyKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0KiBUZXh0dXJlTWFw
cGVyUXQ6OmdyYXBoaWNzQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dDsKLX0KLQot
dm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2Up
Ci17Ci0gICAgaWYgKG1fY3VycmVudFN1cmZhY2UgPT0gc3VyZmFjZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChtX2N1cnJlbnRTdXJmYWNlKQotICAgICAgICBtX2N1cnJlbnRTdXJmYWNlLT5t
X3BhaW50ZXIuZW5kKCk7Ci0gICAgaWYgKCFzdXJmYWNlKSB7Ci0gICAgICAgIG1fY3VycmVudFN1
cmZhY2UgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEJpdG1hcFRleHR1cmVRdCog
c3VyZmFjZVF0ID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZVF0Kj4oc3VyZmFjZSk7Ci0gICAg
aWYgKCFzdXJmYWNlUXQtPm1fcGFpbnRlci5pc0FjdGl2ZSgpKQotICAgICAgICBzdXJmYWNlUXQt
Pm1fcGFpbnRlci5iZWdpbigmc3VyZmFjZVF0LT5tX3BpeG1hcCk7Ci0gICAgbV9jdXJyZW50U3Vy
ZmFjZSA9IHN1cmZhY2VRdDsKLX0KLQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKLXsKLSAgICBjb25zdCBCaXRtYXBUZXh0
dXJlUXQmIHRleHR1cmVRdCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVRdCY+KHRl
eHR1cmUpOwotICAgIFFQYWludGVyKiBwYWludGVyID0gbV9wYWludGVyOwotICAgIFFQaXhtYXAg
cGl4bWFwID0gdGV4dHVyZVF0Lm1fcGl4bWFwOwotICAgIGlmIChtX2N1cnJlbnRTdXJmYWNlKQot
ICAgICAgICBwYWludGVyID0gJm1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlcjsKLQotICAgIGlm
IChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIGNvbnN0
IEJpdG1hcFRleHR1cmVRdCogbWFzayA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVR
dCo+KG1hc2tUZXh0dXJlKTsKLSAgICAgICAgUVBpeG1hcCBpbnRlcm1lZGlhdGVQaXhtYXAocGl4
bWFwLnNpemUoKSk7Ci0gICAgICAgIGludGVybWVkaWF0ZVBpeG1hcC5maWxsKFF0Ojp0cmFuc3Bh
cmVudCk7Ci0gICAgICAgIFFQYWludGVyIG1hc2tQYWludGVyKCZpbnRlcm1lZGlhdGVQaXhtYXAp
OwotICAgICAgICBtYXNrUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBv
c2l0aW9uTW9kZV9Tb3VyY2UpOwotICAgICAgICBtYXNrUGFpbnRlci5kcmF3UGl4bWFwKDAsIDAs
IHBpeG1hcCk7Ci0gICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRl
cjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOwotICAgICAgICBtYXNrUGFpbnRlci5k
cmF3UGl4bWFwKFFSZWN0KDAsIDAsIHBpeG1hcC53aWR0aCgpLCBwaXhtYXAuaGVpZ2h0KCkpLCBt
YXNrLT5tX3BpeG1hcCwgbWFzay0+c291cmNlUmVjdCgpKTsKLSAgICAgICAgbWFza1BhaW50ZXIu
ZW5kKCk7Ci0gICAgICAgIHBpeG1hcCA9IGludGVybWVkaWF0ZVBpeG1hcDsKLSAgICB9Ci0KLSAg
ICBjb25zdCBxcmVhbCBwcmV2T3BhY2l0eSA9IHBhaW50ZXItPm9wYWNpdHkoKTsKLSAgICBjb25z
dCBRVHJhbnNmb3JtIHByZXZUcmFuc2Zvcm0gPSBwYWludGVyLT50cmFuc2Zvcm0oKTsKLSAgICBw
YWludGVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybSht
YXRyaXgsIHRydWUpOwotICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdCwgcGl4bWFw
LCBGbG9hdFJlY3QodGV4dHVyZVF0LnNvdXJjZVJlY3QoKSkpOwotICAgIHBhaW50ZXItPnNldFRy
YW5zZm9ybShwcmV2VHJhbnNmb3JtKTsKLSAgICBwYWludGVyLT5zZXRPcGFjaXR5KHByZXZPcGFj
aXR5KTsKLX0KLQotUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVh
dGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotI2lmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKLSAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRF
bmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdMMikKLSAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOwotI2VuZGlmCi0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlTWFwcGVyUXQpOwotfQotCi1QYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBCaXRtYXBUZXh0dXJlUXQoKSk7Ci19Ci0KLUJpdG1hcFRleHR1cmVRdDo6Qml0bWFwVGV4
dHVyZVF0KCkKLSAgICA6IG1faXNQYWNrZWQoZmFsc2UpCi17Ci0KLX0KLQotdm9pZCBUZXh0dXJl
TWFwcGVyUXQ6OmJlZ2luUGFpbnRpbmcoKQotewotICAgIG1fcGFpbnRlci0+c2F2ZSgpOwotfQot
Ci12b2lkIFRleHR1cmVNYXBwZXJRdDo6ZW5kUGFpbnRpbmcoKQotewotICAgIG1fcGFpbnRlci0+
cmVzdG9yZSgpOwotfQotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotY2xhc3MgQkdSQTMy
UHJlbXVsdGltcGxpZWRCdWZmZXJRdCA6IHB1YmxpYyBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZl
ciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5Q
YWludChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIG9wYXF1ZSkKLSAgICB7Ci0gICAgICAgIC8v
IG1faW1hZ2UgaXMgb25seSB1c2luZyBkdXJpbmcgcGFpbnQsIGl0J3Mgc2FmZSB0byBvdmVycmlk
ZSBpdC4KLSAgICAgICAgbV9pbWFnZSA9IFFJbWFnZShyZWN0LnNpemUoKS53aWR0aCgpLCByZWN0
LnNpemUoKS5oZWlnaHQoKSwgb3BhcXVlID8gUUltYWdlOjpGb3JtYXRfUkdCMzIgOiBRSW1hZ2U6
OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7Ci0gICAgICAgIGlmICghb3BhcXVlKQotICAg
ICAgICAgICAgbV9pbWFnZS5maWxsKDApOwotICAgICAgICBtX3BhaW50ZXIuYmVnaW4oJm1faW1h
Z2UpOwotICAgICAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxpemUoJm1fcGFpbnRlcik7Ci0g
ICAgICAgIG1fcGFpbnRlci50cmFuc2xhdGUoLXJlY3QueCgpLCAtcmVjdC55KCkpOwotICAgICAg
ICByZXR1cm4gJm1fcGFpbnRlcjsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQo
KSB7IG1fcGFpbnRlci5lbmQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCogZGF0YSgpIHsgcmV0dXJu
IG1faW1hZ2UuYml0cygpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUVBhaW50ZXIgbV9wYWludGVyOwot
ICAgIFFJbWFnZSBtX2ltYWdlOwotfTsKLQotUGFzc093blB0cjxCR1JBMzJQcmVtdWx0aW1wbGll
ZEJ1ZmZlcj4gQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlclF0KCkpOwotfQotCi11
aW50NjRfdCB1aWRGb3JJbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLT5zZXJpYWxOdW1iZXIoKTsKLX0KLSNlbmRpZgot
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVy
ZU1hcHBlclF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZmVlMDMuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBl
clF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCi0K
LSNpZm5kZWYgVGV4dHVyZU1hcHBlclF0X2gKLSNkZWZpbmUgVGV4dHVyZU1hcHBlclF0X2gKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBCaXRtYXBUZXh0dXJlUXQgOiBwdWJsaWMgQml0
bWFwVGV4dHVyZSB7Ci0gICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJRdDsKLXB1YmxpYzoK
LSAgICBCaXRtYXBUZXh0dXJlUXQoKTsKLSAgICB+Qml0bWFwVGV4dHVyZVF0KCkgeyBkZXN0cm95
KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIHZpcnR1YWwgSW50U2l6ZSBz
aXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53aWR0aCgpLCBtX3BpeG1hcC5o
ZWlnaHQoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wg
b3BhcXVlKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50
KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7
Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwotICAgIHZpcnR1
YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiAhbV9waXhtYXAuaXNOdWxsKCkgfHwgIW1faW1hZ2UuaXNOdWxs
KCk7IH0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KDAs
IDAsIGNvbnRlbnRTaXplKCkud2lkdGgoKSwgY29udGVudFNpemUoKS5oZWlnaHQoKSk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGFjaygpOwotICAgIHZpcnR1YWwgdm9pZCB1bnBhY2soKTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNQYWNrZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFja2VkOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwg
dm9pZCogYml0cyk7Ci0KLSAgICBRUGFpbnRlciogcGFpbnRlcigpIHsgcmV0dXJuICZtX3BhaW50
ZXI7IH0KLQotcHJpdmF0ZToKLSAgICBRUGFpbnRlciBtX3BhaW50ZXI7Ci0gICAgUVBpeG1hcCBt
X3BpeG1hcDsKLSAgICBRSW1hZ2UgbV9pbWFnZTsKLSAgICBib29sIG1faXNQYWNrZWQ7Ci19Owot
Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUXQgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7Ci1wdWJsaWM6
Ci0gICAgVGV4dHVyZU1hcHBlclF0KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUo
Y29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1
cmUqIHN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xp
cCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0
Kik7Ci0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpOwotICAg
IHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgp
OwotICAgIHZpcnR1YWwgSW50U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5QYWludGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpOwot
Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShRUGFpbnRlciogcGFpbnRlcikKLSAgICB7Ci0g
ICAgICAgIGlmIChwYWludGVyKQotICAgICAgICAgICAgcGFpbnRlci0+c2V0UmVuZGVySGludHMo
UVBhaW50ZXI6OkFudGlhbGlhc2luZyB8IFFQYWludGVyOjpTbW9vdGhQaXhtYXBUcmFuc2Zvcm0s
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlclF0KTsgfQotcHJpdmF0
ZToKLSAgICBpbmxpbmUgUVBhaW50ZXIqIGN1cnJlbnRQYWludGVyKCkgeyByZXR1cm4gbV9jdXJy
ZW50U3VyZmFjZSA/IG1fY3VycmVudFN1cmZhY2UtPnBhaW50ZXIoKSA6IG1fcGFpbnRlcjsgfQot
Ci0gICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKLSAgICBHcmFwaGljc0NvbnRleHQqIG1fY29udGV4
dDsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZVF0PiBtX2N1cnJlbnRTdXJmYWNlOwotfTsKLQot
fQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggZGQzM2YwZC4uNjg2YTU3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmNwcApAQCAtMjAsNiArMjAsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKIAorI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MSw1ICs3
NCwxMzMgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyOjphY3F1aXJl
VGV4dHVyZUZyb21Qb29sKGNvbnN0IEludFNpemUmIHMKICAgICByZXR1cm4gc2VsZWN0ZWRUZXh0
dXJlOwogfQogCisKK2NsYXNzIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBCaXRt
YXBUZXh0dXJlIHsKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOwor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIpOyB9CisgICAgfkJp
dG1hcFRleHR1cmVJbWFnZUJ1ZmZlcigpIHsgZGVzdHJveSgpOyB9CisgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKSB7IG1faW1hZ2UuY2xlYXIoKTsgfQorICAgIHZpcnR1YWwgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS0+c2l6ZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHJl
c2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgb3BhcXVlKQorICAgIHsKKyAgICAgICAgQml0
bWFwVGV4dHVyZTo6cmVzZXQoc2l6ZSwgb3BhcXVlKTsKKyAgICAgICAgbV9pbWFnZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgaW5saW5lIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9pbWFnZSA/IG1faW1hZ2UtPmNvbnRleHQoKSA6
IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYsIFBpeGVsRm9ybWF0KTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpOworcHJpdmF0
ZToKKyAgICBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIoKSB7IH0KKyAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2U7Cit9OworCisKK2NsYXNzIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciA6
IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1Rl
eHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSB7IG1fY3VycmVudFN1cmZhY2Ug
PSBzdXJmYWNlO30KKyAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpIHsgZ3JhcGhpY3NDb250ZXh0
KCktPnJlc3RvcmUoKTsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIpOyB9
CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgeyByZXR1cm4g
Qml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjpjcmVhdGUoKTsgfQorICAgIGlubGluZSBHcmFwaGlj
c0NvbnRleHQqIGN1cnJlbnRDb250ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRTdXJmYWNlID8gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUltYWdlQnVmZmVyKj4obV9jdXJy
ZW50U3VyZmFjZS5nZXQoKSktPmdyYXBoaWNzQ29udGV4dCgpIDogZ3JhcGhpY3NDb250ZXh0KCk7
CisgICAgfQorCisgICAgdmlydHVhbCBBY2NlbGVyYXRpb25Nb2RlIGFjY2VsZXJhdGlvbk1vZGUo
KSBjb25zdCB7IHJldHVybiBTb2Z0d2FyZU1vZGU7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gbV9jdXJyZW50U3VyZmFjZTsKK307CisKK3ZvaWQgQml0bWFwVGV4dHVy
ZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0KQoreworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFJbWFnZSBpbWFnZShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oZGF0YSksIHRhcmdldFJlY3Qud2lkdGgoKSwg
dGFyZ2V0UmVjdC5oZWlnaHQoKSwgdGFyZ2V0UmVjdC53aWR0aCgpICogNCwgUUltYWdlOjpGb3Jt
YXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIFFQYWludGVyKiBwYWludGVyID0gbV9pbWFn
ZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBwYWludGVyLT5zYXZlKCk7Cisg
ICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVf
U291cmNlKTsKKyAgICBwYWludGVyLT5kcmF3SW1hZ2UodGFyZ2V0UmVjdCwgaW1hZ2UpOworICAg
IHBhaW50ZXItPnJlc3RvcmUoKTsKKyNlbmRpZgorfQorCit2b2lkIEJpdG1hcFRleHR1cmVJbWFn
ZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQaXhlbEZvcm1hdCkKK3sKKyAgICBt
X2ltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
dGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgQ29tcG9zaXRlQ29weSk7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlckltYWdlQnVmZmVyOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm47CisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwcmV2aW91c1RyYW5zZm9ybSA9IGNvbnRleHQtPmdldDNEVHJhbnNmb3JtKCk7CisjZWxzZQor
ICAgIEFmZmluZVRyYW5zZm9ybSBwcmV2aW91c1RyYW5zZm9ybSA9IGNvbnRleHQtPmdldENUTSgp
OworI2VuZGlmCisgICAgY29udGV4dC0+c2F2ZSgpOworCisjaWYgRU5BQkxFKDNEX1JFTkRFUklO
RykKKyAgICBjb250ZXh0LT5jb25jYXQzRFRyYW5zZm9ybShtYXRyaXgpOworI2Vsc2UKKyAgICBj
b250ZXh0LT5jb25jYXRDVE0obWF0cml4LnRvQWZmaW5lKCkpOworI2VuZGlmCisKKyAgICBjb250
ZXh0LT5jbGlwKHJlY3QpOworCisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAgICBjb250ZXh0
LT5zZXQzRFRyYW5zZm9ybShwcmV2aW91c1RyYW5zZm9ybSk7CisjZWxzZQorICAgIGNvbnRleHQt
PnNldENUTShwcmV2aW91c1RyYW5zZm9ybSk7CisjZW5kaWYKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXI6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUp
Cit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gY3VycmVudENvbnRleHQoKTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEJpdG1hcFRleHR1
cmVJbWFnZUJ1ZmZlciYgdGV4dHVyZUltYWdlQnVmZmVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0
bWFwVGV4dHVyZUltYWdlQnVmZmVyJj4odGV4dHVyZSk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdl
ID0gdGV4dHVyZUltYWdlQnVmZmVyLm1faW1hZ2UuZ2V0KCk7CisgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBtYXNrZWRJbWFnZTsKKworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+
aXNWYWxpZCgpKSB7CisgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciogbWFz
ayA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcio+KG1hc2tUZXh0
dXJlKTsKKyAgICAgICAgbWFza2VkSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tUZXh0
dXJlLT5jb250ZW50U2l6ZSgpKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrQ29udGV4
dCA9IG1hc2tlZEltYWdlLT5jb250ZXh0KCk7CisgICAgICAgIG1hc2tDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCksIENv
bXBvc2l0ZUNvcHkpOworICAgICAgICBpZiAob3BhY2l0eSA8IDEpIHsKKyAgICAgICAgICAgIG1h
c2tDb250ZXh0LT5zZXRBbHBoYShvcGFjaXR5KTsKKyAgICAgICAgICAgIG9wYWNpdHkgPSAxOwor
ICAgICAgICB9CisgICAgICAgIG1hc2tDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobWFzay0+bV9p
bWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQ6Onplcm8oKSwgQ29tcG9z
aXRlRGVzdGluYXRpb25Jbik7CisgICAgICAgIGltYWdlID0gbWFza2VkSW1hZ2UuZ2V0KCk7Cisg
ICAgfQorCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQtPnNldEFscGhhKG9wYWNp
dHkpOworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAgY29udGV4dC0+Y29uY2F0M0RUcmFu
c2Zvcm0obWF0cml4KTsKKyNlbHNlCisgICAgY29udGV4dC0+Y29uY2F0Q1RNKG1hdHJpeCk7Cisj
ZW5kaWYKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIHRhcmdldFJlY3QpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKworUGFzc093
blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoQWNjZWxlcmF0aW9uTW9k
ZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IFNvZnR3YXJlTW9kZSkKKyAgICAgICAgcmV0dXJu
IFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIHBsYXRmb3Jt
Q3JlYXRlQWNjZWxlcmF0ZWQoKTsKK30KKwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCBk
NjZmZTJmLi5kYjMzMDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTQ3LDQ2ICs0NywzMSBAQCBjbGFz
cyBUZXh0dXJlTWFwcGVyOwogY2xhc3MgQml0bWFwVGV4dHVyZSAgOiBwdWJsaWMgUmVmQ291bnRl
ZDxCaXRtYXBUZXh0dXJlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBQaXhlbEZvcm1hdCB7IEJHUkFG
b3JtYXQsIFJHQkFGb3JtYXQsIEJHUkZvcm1hdCwgUkdCRm9ybWF0IH07Ci0gICAgQml0bWFwVGV4
dHVyZSgpIDogbV9sb2NrQ291bnQoMCkge30KKyAgICBCaXRtYXBUZXh0dXJlKCkKKyAgICAgICAg
OiBtX2lzT3BhcXVlKHRydWUpCisgICAgeworICAgIH0KKwogICAgIHZpcnR1YWwgfkJpdG1hcFRl
eHR1cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIHsgfQogCi0gICAgdmlydHVh
bCBib29sIGFsbG93T2ZmbGluZVRleHR1cmVVcGxvYWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50
IGJwcCgpIGNvbnN0IHsgcmV0dXJuIDMyOyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRl
bnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmdCwgQml0bWFwVGV4dHVy
ZTo6UGl4ZWxGb3JtYXQgZm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRl
bnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBpbnQgYnBwKCkgY29uc3QgeyByZXR1
cm4gMzI7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9v
bCBvcGFxdWUgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIG1faXNPcGFxdWUgPSBvcGFxdWU7CiAg
ICAgICAgIG1fY29udGVudFNpemUgPSBzaXplOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBw
YWNrKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVucGFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBpc1BhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpID0gMDsKLQotICAgIC8vIEZvciBwZXJm
b3JtYW5jZSByZWFzb25zLCBCaXRtYXBUZXh0dXJlIG1pZ2h0IG1vZGlmeSB0aGUgYml0cyBkaXJl
Y3RseSAoc3dpenpsZSkuCi0gICAgLy8gVGh1cywgdGhpcyBtZXRob2QgaXMgb25seSByZWNvbW1l
bmRlZCBmb3IgYnVmZmVyIHVwZGF0ZSwgc3VjaCBhcyB1c2VkIGJ5IFdlYktpdDIuCi0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwgdm9p
ZCogYml0cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSYXdDb250ZW50cyhjb25zdCBJ
bnRSZWN0JiwgY29uc3Qgdm9pZCogYml0cykgeyB9Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCogYmVnaW5QYWludE1lZGlhKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiZWdp
blBhaW50KEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKikgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICBpbmxpbmUgdm9pZCBsb2NrKCkgeyArK21fbG9ja0NvdW50OyB9Ci0gICAgaW5saW5lIHZv
aWQgdW5sb2NrKCkgeyAtLW1fbG9ja0NvdW50OyB9Ci0gICAgaW5saW5lIGJvb2wgaXNMb2NrZWQo
KSB7IHJldHVybiBtX2xvY2tDb3VudDsgfQogICAgIGlubGluZSBJbnRTaXplIGNvbnRlbnRTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50U2l6ZTsgfQogICAgIGlubGluZSBpbnQgbnVtYmVy
T2ZCeXRlcygpIGNvbnN0IHsgcmV0dXJuIHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgp
ICogYnBwKCkgPj4gMzsgfQorICAgIGlubGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1
cm4gbV9pc09wYXF1ZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgaW50IG1fbG9ja0NvdW50OwogICAg
IEludFNpemUgbV9jb250ZW50U2l6ZTsKICAgICBib29sIG1faXNPcGFxdWU7CiB9OwpAQCAtOTcs
MzIgKzgyLDI2IEBAIGNsYXNzIFRleHR1cmVNYXBwZXIgewogICAgIGZyaWVuZCBjbGFzcyBCaXRt
YXBUZXh0dXJlOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBl
cj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gMCk7CisgICAgZW51
bSBBY2NlbGVyYXRpb25Nb2RlIHsgU29mdHdhcmVNb2RlLCBPcGVuR0xNb2RlIH07CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbW9k
ZSA9IFNvZnR3YXJlTW9kZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlcigpIHsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01h
dHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGZsb2F0IG9wYWNpdHkgPSAxLjBmLCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSA9IDApID0gMDsKIAogICAgIC8vIG1ha2VzIGEg
c3VyZmFjZSB0aGUgdGFyZ2V0IGZvciB0aGUgZm9sbG93aW5nIGRyYXdUZXh0dXJlIGNhbGxzLgog
ICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqKSA9
IDA7Ci0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogICAgIHZpcnR1YWwg
dm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJl
Y3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSA9IDA7Ci0gICAgSW50U2l6ZSB2aWV3
cG9ydFNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQotICAgIHZvaWQgc2V0
Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmIHMpIHsgbV92aWV3cG9ydFNpemUgPSBzOyB9CiAK
ICAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxp
dHkgcXVhbGl0eSkgeyBtX2ludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgfQogICAgIHZv
aWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV90ZXh0
RHJhd2luZ01vZGUgPSBtb2RlOyB9CiAKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcnBvbGF0aW9uUXVhbGl0
eTsgfQogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9Ci0gICAgdmlydHVhbCBib29sIGFsbG93UGFydGlh
bFVwZGF0ZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc09w
ZW5HTEJhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fdHJhbnNmb3JtID0g
bWF0cml4OyB9Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxl
cmF0aW9uTW9kZSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5n
KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCkgeyB9CkBAIC0xMzAsMjIgKzEw
OSwyOSBAQCBwdWJsaWM6CiAgICAgLy8gQSBzdXJmYWNlIGlzIHJlbGVhc2VkIGltcGxpY2l0bHkg
d2hlbiBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IGFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYpOwogCi0KIHByb3RlY3RlZDoK
ICAgICBUZXh0dXJlTWFwcGVyKCkKICAgICAgICAgOiBtX2ludGVycG9sYXRpb25RdWFsaXR5KElu
dGVycG9sYXRpb25EZWZhdWx0KQogICAgICAgICAsIG1fdGV4dERyYXdpbmdNb2RlKFRleHRNb2Rl
RmlsbCkKLSAgICB7fQorICAgIHsKKyAgICB9CiAKIHByaXZhdGU6CisjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IHBsYXRmb3Jt
Q3JlYXRlQWNjZWxlcmF0ZWQoKTsKKyNlbHNlCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4gcGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpCisgICAgeworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisjZW5kaWYKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9s
YXRpb25RdWFsaXR5OwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2Rl
OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIEludFNpemUgbV92
aWV3cG9ydFNpemU7CiAgICAgVmVjdG9yPFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IG1fdGV4dHVy
ZVBvb2w7CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7CiB9OwogCi19OworfQogCiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXggY2NmNDliYy4uNGZlMjI2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMu
aCIKIAogbmFtZXNwYWNlIHsKQEAgLTE1NiwxMiArMTU3LDEwIEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhp
Y3NMYXllCiAgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBGSVhNRTogQWRkIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzLgotICAgIEZsb2F0UmVjdCBk
aXJ0eVJlY3QgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6
IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdDsKKyAgICBJbnRSZWN0IGRpcnR5UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRp
cmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwogCiAgICAgZm9y
IChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsg
Kyt0aWxlSW5kZXgpIHsKICAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3Rp
bGVJbmRleF07Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gZGlydHlSZWN0OwogICAgICAgICBp
ZiAoIXRpbGUudGV4dHVyZSkKICAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1cmVNYXBw
ZXItPmNyZWF0ZVRleHR1cmUoKTsKICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+JiB0ZXh0
dXJlID0gdGlsZS50ZXh0dXJlOwpAQCAtMTY5LDMxICsxNjgsNDQgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFw
aGljc0xheWUKIAogICAgICAgICBpZiAodGlsZS5uZWVkc1Jlc2V0IHx8IHRleHR1cmUtPmNvbnRl
bnRTaXplKCkgIT0gdGlsZVNpemUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICAg
ICAgdGlsZS5uZWVkc1Jlc2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0
aWxlU2l6ZSwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRl
bnRUeXBlID8gZmFsc2UgOiBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsKLSAgICAgICAgICAgIHJl
Y3QgPSB0aWxlLnJlY3Q7CisgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9z
dGF0ZS5jb250ZW50c09wYXF1ZSk7CisgICAgICAgICAgICBkaXJ0eVJlY3QudW5pdGUoZW5jbG9z
aW5nSW50UmVjdCh0aWxlLnJlY3QpKTsKICAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkaXJ0
eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQYWludCB0aGUgZW50
aXJlIGRpcnR5IHJlY3QgaW50byBhbiBpbWFnZSBidWZmZXIuIFRoaXMgZW5zdXJlcyB3ZSBvbmx5
IHBhaW50IG9uY2UuCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoZGlydHlSZWN0LnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICB7CisgICAgICAgIGNvbnRleHQt
PnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKHRl
eHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNs
YXRlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7CisgICAgICAgIGxheWVyLT5wYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgaWYg
KG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkK
KyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdl
dCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCk7CisgICAgfQog
Ci0gICAgICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVj
dCk7Ci0gICAgICAgIGNvbnRlbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KHJlY3Qp
KTsKLSAgICAgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAvLyBUaGlzIHN1bGQg
YmUgYSByZWZlcmVuY2UgY29weSBvbmx5LgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBpbWFn
ZUJ1ZmZlci0+Y29weUltYWdlKCk7CisKKyAgICAvLyBEaXZpZGUgdGhlIGltYWdlIHRvIHRpbGVz
LgorICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxl
cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CisgICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3du
ZWRUaWxlc1t0aWxlSW5kZXhdOworICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KHRpbGUucmVjdCk7CisgICAgICAgIHRhcmdldFJlY3QuaW50ZXJzZWN0KGRpcnR5
UmVjdCk7CisgICAgICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0OwogCi0gICAg
ICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzID0gY29udGVudFJlY3Q7
Ci0gICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0KC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0Lnko
KSk7Ci0gICAgICAgIGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMubW92ZShvZmZzZXQueCgp
LCBvZmZzZXQueSgpKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dCh0ZXh0dXJlLT5iZWdpblBhaW50KGVuY2xvc2luZ0ludFJlY3QoY29udGVudFJlY3RJ
blRpbGVDb29yZGluYXRlcykpKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkp
OwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+
dGV4dERyYXdpbmdNb2RlKCkpOwotICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0
LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkQ29udGVudFJl
Y3QoY29udGVudFJlY3QpOwotICAgICAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVu
dFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBJbnRQb2ludCgwLCAwKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xvc2luZ0ludFJl
Y3Qoc2NhbGVkQ29udGVudFJlY3QpKTsKLSAgICAgICAgICAgIHRleHR1cmUtPmVuZFBhaW50KCk7
Ci0gICAgICAgIH0KKyAgICAgICAgLy8gTm9ybWFsaXplIHNvdXJjZVJlY3QgdG8gdGhlIGJ1ZmZl
cidzIGNvb3JkaW5hdGVzLgorICAgICAgICBzb3VyY2VSZWN0Lm1vdmUoLWRpcnR5UmVjdC54KCks
IC1kaXJ0eVJlY3QueSgpKTsKKworICAgICAgICAvLyBOb3JtYWxpemUgdGFyZ2V0UmVjdCB0byB0
aGUgdGV4dHVyZSdzIGNvb3JkaW5xYXRlcy4KKyAgICAgICAgdGFyZ2V0UmVjdC5tb3ZlKC10aWxl
LnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7CisgICAgICAgIHRpbGUudGV4dHVyZS0+dXBkYXRl
Q29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1
cmU6OlJHQkFGb3JtYXQpOwogICAgIH0KIAogICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNw
bGF5ID0gZmFsc2U7CkBAIC00ODEsNyArNDkzLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCkKICAgICB9CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCB2
b2lkKiBiaXRzKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1
ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBl
cik7CiAKQEAgLTQ5OCw3ICs1MTAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250
ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUgogICAgIGlm
ICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCiAgICAgICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0
dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgdGlsZS5iYWNrQnVm
ZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Quc2l6ZSgpLCBmYWxzZSk7Ci0gICAgdGlsZS5i
YWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKHNvdXJjZVJlY3QsIGJpdHMpOwor
ICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhkYXRhLCBzb3VyY2VS
ZWN0KTsKICAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTm9kZS5oCmluZGV4IGZlNGIxNGMuLjIzMGM5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGlsZU93bmVyc2hp
cChUaWxlT3duZXJzaGlwIG93bmVyc2hpcCkgeyBtX3N0YXRlLnRpbGVPd25lcnNoaXAgPSBvd25l
cnNoaXA7IH0KICAgICBpbnQgY3JlYXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxlKTsKICAgICB2
b2lkIHJlbW92ZUNvbnRlbnRzVGlsZShpbnQgaWQpOwotICAgIHZvaWQgc2V0Q29udGVudHNUaWxl
QmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGJpdHMpOworICAgIHZvaWQgc2V0Q29udGVudHNU
aWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqKTsKICAgICB2b2lkIHNldFRpbGVCYWNrQnVm
ZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJl
Kik7CiAgICAgdm9pZCBjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKTsKICAg
ICB2b2lkIHB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcAppbmRleCBjOGU4ZGFkLi43NDE4ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKQEAgLTMzNiw3ICszMzYsNiBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNv
bXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbgogICAgIHRl
eHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICB0ZXh0dXJlTWFw
cGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSk7CiAgICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNv
bnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKLSAgICB0ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9y
dFNpemUoZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAgICBRUGFpbnRlciog
cGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IFFUcmFuc2Zv
cm0gdHJhbnNmb3JtID0gcGFpbnRlci0+d29ybGRUcmFuc2Zvcm0oKTsKICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDZhZWZkNzAuLmUwMWU3
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMDEtMzAgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1h
cF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8gdXNlIEltYWdlQnVmZmVycyB3aGVuIHBv
c3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzcxNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW1vdmUgdW51c2VkIFRleHR1cmVNYXBwZXIgQVBJIGNhbGxzLCBsaWtlIHNldFZpZXdwb3J0U2l6
ZS4KKyAgICAgICAgVXNlIFRleHR1cmVNYXBwZXI6OkFjY2VsZXJhdGlvbk1vZGUgaW5zdGVhZCBv
ZiBjcmVhdGluZyBUZXh0dXJlTWFwcGVyR0wvVGV4dHVyZU1hcHBlclF0CisgICAgICAgIGRpcmVj
dGx5LgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQ
cml2YXRlOjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9QYWdlQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6
OnNldFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3Jh
cGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKwogMjAxMi0wMS0zMCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVkdWNlIG5vbi1DU1NPTSBB
UEkgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDQwZTZiMTQuLjQ1ZGNmYmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTI4
LDEyICsyOCw4IEBACiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgorI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuaCIKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSNpbmNsdWRlICJvcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmgiCi0jZW5kaWYKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03Niw3ICs3Miw3IEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikgewogICAgICAgICB0
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZUNs
aWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcikpOwotICAgICAgICB0ZXh0dXJlTWFwcGVy
Tm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlclF0
KSk7CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsKICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQt
PnN5bmNSb290TGF5ZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI2NywxMSArMjYz
LDExIEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogICAg
ICAgICBRR3JhcGhpY3NWaWV3KiBncmFwaGljc1ZpZXcgPSB2aWV3LT5zY2VuZSgpLT52aWV3cygp
WzBdOwogICAgICAgICBpZiAoZ3JhcGhpY3NWaWV3ICYmIGdyYXBoaWNzVmlldy0+dmlld3BvcnQo
KSAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCktPmluaGVyaXRzKCJRR0xXaWRnZXQiKSkgewot
ICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7CisgICAgICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBl
cjo6T3BlbkdMTW9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjZW5kaWYK
LSAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlclF0OjpjcmVhdGUoKSk7CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5z
ZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC5jbGVhcigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDc3OTQ1OWQuLjE2NDViN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0w
MS0zMCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAg
ICAgIFtRdF1bVGV4bWFwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyIEFQSSB0byB1c2UgSW1hZ2VC
dWZmZXJzIHdoZW4gcG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NzE0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVzZSBUZXh0dXJlTWFwcGVyOjpBY2NlbGVyYXRpb25Nb2RlIGluc3RlYWQg
b2YgY3JlYXRpbmcgVGV4dHVyZU1hcHBlckdMIGRpcmVjdGx5LgorICAgICAgICBVc2UgdGhlIG5l
dyBBUEkgY2FsbHMgZm9yIHVwZGF0aW5nIEJpdG1hcFRleHR1cmUgY29udGVudC4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVSb290TGF5ZXIpOgorCiAyMDEyLTAxLTMwICBCZXRo
IERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyNjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCmluZGV4IDFmNjA2NWUuLjg4N2I4M2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJv
eHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQ
cm94eVF0LmNwcApAQCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNp
bmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8u
aCIKQEAgLTE3MSw4ICsxNzAsOCBAQCBMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0
UHJveHkoKQogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCiB7CiAg
ICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1
cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dXJlTWFw
cGVyR0wqPihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpKTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVy
ID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAg
IEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFw
cGVyOjpPcGVuR0xNb2RlKTsKIAogICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CiAgICAgR3JhcGhp
Y3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwpAQCAtMTg0LDkgKzE4Myw2
IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQ
T1JULCB2aWV3cG9ydCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoSW50
U2l6ZSh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pKTsKICAgICBub2RlLT5zZXRUZXh0dXJlTWFw
cGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBh
aW50aW5nKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKQEAgLTIwOSw5
ICsyMDUsOCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCiB7CiAgICAgaWYg
KCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBw
ZXJRdDo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dXJlTWFwcGVyUXQq
PihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpKTsKLQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2Nl
bGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKICAgICBzeW5j
UmVtb3RlQ29udGVudCgpOwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJl
TWFwcGVyTm9kZShyb290TGF5ZXIoKSk7CiAKQEAgLTQwOCw3ICs0MDMsNyBAQCB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBTaGFyZWFibGVCaXRt
YXAqIGJpdG1hcCkKICAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7
CiAgICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1h
cHBlci0+Y3JlYXRlVGV4dHVyZSgpOwogICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5z
aXplKCksICFpbWFnZUhhc0FscGhhKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZVJhd0Nv
bnRlbnRzKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBzdWJJbWFnZS5j
b25zdEJpdHMoKSk7CisgICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5j
b25zdEJpdHMoKSwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSkpOwogICAg
ICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlvbigpLCB0ZXh0dXJlKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTQ3MSw3ICs0NjYsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
ZW5zdXJlUm9vdExheWVyKCkKICAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUg
emVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgogICAgIG1fcm9vdExheWVy
LT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOwogICAgIGlmICghbV90ZXh0dXJlTWFwcGVy
KQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOwor
ICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1h
cHBlcjo6T3BlbkdMTW9kZSk7CiAgICAgdG9UZXh0dXJlTWFwcGVyTm9kZShtX3Jvb3RMYXllci5n
ZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="125971"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124664</attachid>
            <date>2012-01-30 20:44:37 -0800</date>
            <delta_ts>2012-01-31 06:12:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>58756</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MDc3Y2U1Li45ODI3YzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTItMDEtMzAgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8g
dXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIFRleHR1cmVNYXBwZXJRdCwgYW5kIGluc3Rl
YWQgY3JlYXRlZCBhIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBjbGFzcywKKyAgICAgICAgd2hp
Y2ggcmVzcG9uZHMgdG8gYW4gIlVuYWNjZWxlcmF0ZWQiIG1vZGUgb2YgVGV4dHVyZU1hcHBlciwg
aW5zdGVhZCBvZiBjcmVhdGluZyBzdWJjbGFzc2VzCisgICAgICAgIG9mIFRleHR1cmVNYXBwZXIg
ZGlyZWN0bHkuIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBzb2Z0d2FyZSBmYWxsYmFjayBvZiBUZXh0
dXJlTWFwcGVyIGJ5IGFueQorICAgICAgICBwb3J0LgorCisgICAgICAgIFRvIG1ha2UgdGhlIElt
YWdlQnVmZmVyIGJhY2tlbmQgZWFzaWVyLCBjb250ZW50IHVwZGF0ZXMgdG8gQml0bWFwVGV4dHVy
ZSBjYW4gbm93IHVzZSBlaXRoZXIKKyAgICAgICAgYW4gaW1hZ2UsIG9yIGEgcmF3IGRhdGEgcG9p
bnRlci4gVGhlIHJhdyBkYXRhIHBvaW50ZXIgaXMgcHJvdmlkZWQgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMsCisgICAgICAgIGFzIGNvbnZlcnRpbmcgZGF0YSB0by9mcm9tIEltYWdlIHJlZmVyZW5j
ZXMgaW4gUXQgZ2VuZXJhdGVzIHVubmVjZXNzYXJ5IGRlZXAgY29waWVzIG9mIHRoZQorICAgICAg
ICBpbWFnZSBkYXRhLgorCisgICAgICAgIEFsc28sIEZ1bmN0aW9ucyB0aGF0IHVzZSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB3ZXJlIGFkZGVkIHRvIEdyYXBoaWNzQ29udGV4dCwgdG8gYWxsb3cgZm9y
CisgICAgICAgIDNEIHRyYW5zZm9ybXMgaW4gY3Jvc3MgcGxhdGZvcm0gY29kZS4gVGhlIGZhbGxi
YWNrIGNvZGUgc3RpbGwgdXNlcyB0aGUgMkQgQ1RNcy4KKworICAgICAgICBBZnRlciB0aGlzIHBh
dGNoIGV2ZXJ5dGhpbmcgcmVuZGVycyB0aGUgc2FtZSwgYW5kIHRoZXJlIGFyZSBubyBuZXcgaW1h
Z2UgZGVlcCBjb3BpZXMuCisKKyAgICAgICAgTm8gYmVoYXZpb3JhbCBjaGFuZ2VzLgorCisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldFRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTERhdGEpOgor
ICAgICAgICAoQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJl
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnN3aXp6bGVSR0IpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9y
bUNyZWF0ZUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmFjY2VsZXJhdGlv
bk1vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmdldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFRyYW5zZm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpCaXRtYXBUZXh0dXJlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YnBwKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmU6OmlzT3BhcXVlKToKKyAgICAgICAgKCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlcjo6Z3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oOgorICAgICAgICAoVGV4dHVyZU1hcHBlck5vZGUpOgorCiAyMDEyLTAxLTMwICBNaWhu
ZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1NSZWdpb25zXUFk
ZCBzdXBwb3J0IGZvciBiYWNrZ3JvdW5kLWNvbG9yIGluIHJlZ2lvbiBzdHlsaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQppbmRleCBiMzRjNTQyLi43MGI4Y2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NDEsNyArMzk0MSw2
IEBAIHdpbjMyOiF3aW4zMi1nKysqOmNvbnRhaW5zKFFNQUtFX0hPU1QuYXJjaCwgeDg2XzY0KTp7
CiAKIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgSEVBREVSUyArPSBcCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXApAQCAtMzk1MCw3ICszOTQ5
LDYgQEAgY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIAogICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCkBA
IC0zOTYxLDYgKzM5NTksNyBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBI
RUFERVJTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAogICAg
ICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCiAgICAgICAgIENPTkZJRyArPSBvcGVuZ2wtc2hpbXMKKyAgICAgICAgREVGSU5FUyArPSBX
VEZfVVNFX1RFWFRVUkVfTUFQUEVSX0dMCiAgICAgfQogfSBlbHNlIHsKICAgICBIRUFERVJTICs9
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA0NzVm
ZGIzLi5iY2JhYjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAj
aW5jbHVkZSAiVGV4dFJ1bi5oIgogCkBAIC03NzYsNCArNzc3LDI0IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQog
ICAgIHBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCisjaWYgRU5BQkxFKDNE
X1JFTkRFUklORykKKy8vIFRoZXNlIGZ1Y3Rpb25zIHNob3VsZCBiZSBpbXBsZW1lbnRlZCB0byBz
dXBwb3J0IHNvZnR3YXJlLXJlbmRlcmluZyBvZiAzZCB0cmFuc2Zvcm1zLgorI2lmICFQTEFURk9S
TShRVCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXQzRFRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Ry
YW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0M0RUcmFuc2Zvcm0oKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCk7Cit9CisjZW5kaWYKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkZWE5NTBiLi41NDk4NWEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaApAQCAtMTI0LDYgKzEyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBL
VVJMOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRSdW47Cisg
ICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKICAgICBlbnVtIFRleHREcmF3aW5nTW9k
ZSB7CiAgICAgICAgIFRleHRNb2RlSW52aXNpYmxlID0gMCwKQEAgLTQwOSw2ICs0MTAsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0OwogCisjaWYg
RU5BQkxFKDNEX1JFTkRFUklORykKKyAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgd2hlbiB1c2lu
ZyBhY2NlbGVyYXRlZC1jb21wb3NpdGluZyBpbiBzb2Z0d2FyZSBtb2RlLCBsaWtlIGluIFRleHR1
cmVNYXBwZXIuCisgICAgICAgIHZvaWQgY29uY2F0M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKKyAgICAgICAgdm9pZCBzZXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXQzRFRyYW5z
Zm9ybSgpIGNvbnN0OworI2VuZGlmCiAgICAgICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIg
Y29tcGF0aWJsZSB3aXRoIHRoaXMgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uCiAg
ICAgICAgIC8vIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMg
Y29udGV4dC4KICAgICAgICAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcApp
bmRleCA2MWQ4YjIwLi5lNzI5NTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAKQEAgLTEx
NSwxMSArMTE1LDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmRyYXdUZXh0dXJlKGNvbnN0
IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmUKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCi1QYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBU
ZXh0dXJlTWFwcGVyQ2Fpcm8pOwotfQotCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1
cmVNYXBwZXJDYWlybzo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCaXRtYXBUZXh0dXJlQ2Fpcm8oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGRlMDQx
YmYuLmNjMWQwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yNjMsNTcgKzI2Myw2IEBA
IHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKIAogICAgIH07CiAKLSAgICBzdHJ1Y3QgRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5IHsKLSAgICAgICAgc3RydWN0IEVudHJ5IHsK
LSAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlOwotICAgICAgICAgICAgaW50IHJlZkNvdW50Owot
ICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8SW1hZ2VVSUQsIEVudHJ5PiBJbWFn
ZVRleHR1cmVNYXA7Ci0gICAgICAgIEltYWdlVGV4dHVyZU1hcCBpbWFnZVRvVGV4dHVyZTsKLQot
ICAgICAgICBHTHVpbnQgZmluZE9yQ3JlYXRlKEltYWdlVUlEIGltYWdlLCBib29sJiBmb3VuZCkK
LSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2VUZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IGlt
YWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIGl0LT5zZWNvbmQucmVmQ291bnQrKzsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQudGV4dHVyZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIEVudHJ5IGVudHJ5OwotICAgICAgICAgICAgR0xfQ01EKGdsR2VuVGV4
dHVyZXMoMSwgJmVudHJ5LnRleHR1cmUpKTsKLSAgICAgICAgICAgIGVudHJ5LnJlZkNvdW50ID0g
MTsKLSAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOwotICAgICAg
ICAgICAgcmV0dXJuIGVudHJ5LnRleHR1cmU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGRl
cmVmKEltYWdlVUlEIGltYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBIYXNoTWFwPEltYWdl
VUlELCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0g
ICAgICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoaXQtPnNlY29uZC5yZWZDb3VudCA8IDIpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW1hZ2VUb1RleHR1cmUucmVtb3ZlKGl0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBv
c2l0b3J5KCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgfkRpcmVjdGx5Q29tcG9z
aXRlZEltYWdlUmVwb3NpdG9yeSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoSW1hZ2VU
ZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmJlZ2luKCk7IGl0ICE9IGlt
YWdlVG9UZXh0dXJlLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgR0x1aW50IHRleHR1
cmUgPSBpdC0+c2Vjb25kLnRleHR1cmU7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpCi0g
ICAgICAgICAgICAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0gZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VzOwotCiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOwpAQCAtMzI3LDYgKzI3Niw3IEBA
IHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBw
cm9qZWN0aW9uTWF0cml4OwogICAgIGludCBjdXJyZW50UHJvZ3JhbTsKICAgICBpbnQgcHJldmlv
dXNQcm9ncmFtOworICAgIEdMaW50IHZpZXdwb3J0WzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERh
dGE+IG1fc2hhcmVkR0xEYXRhOwogfTsKIApAQCAtMzM3LDU2ICsyODcsMjUgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0
KGNvbnN0IEludFNpemUmLCBib29sIG9wYXF1ZSk7CiAgICAgdm9pZCBiaW5kKCk7Ci0gICAgdmly
dHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB+Qml0bWFwVGV4dHVyZUdMKCkgeyBk
ZXN0cm95KCk7IH0KICAgICB2aXJ0dWFsIHVpbnQzMl90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
ZDsgfQotICAgIGlubGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7
IH0KICAgICBpbmxpbmUgRmxvYXRTaXplIHJlbGF0aXZlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVsYXRpdmVTaXplOyB9CiAgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJH
TCogdGV4bWFwKSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1hcDsgfQotCi0gICAgdm9pZCB1cGRh
dGVDb250ZW50cyhQaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIHZvaWQqKTsKLSAgICB2b2lk
IHVwZGF0ZVJhd0NvbnRlbnRzKGNvbnN0IEludFJlY3QmLCBjb25zdCB2b2lkKik7Ci0gICAgdm9p
ZCBwYWNrKCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGEgc3R1Yi4KLSAg
ICAgICAgaWYgKGlzUGFja2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNQ
YWNrZWQgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgdW5wYWNrKCkKLSAgICB7Ci0gICAgICAg
IC8vIFRoaXMgaXMgY3VycmVudGx5IGEgc3R1Yi4KLSAgICAgICAgaWYgKCFpc1BhY2tlZCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2lzUGFja2VkID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc1BhY2tlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pc1Bh
Y2tlZDsKLSAgICB9CisgICAgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJl
Y3QmLCBjb25zdCBJbnRSZWN0JiwgUGl4ZWxGb3JtYXQpOworICAgIHZvaWQgdXBkYXRlQ29udGVu
dHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0ZToKICAgICBHTHVpbnQg
bV9pZDsKLSAgICBJbWFnZVVJRCBtX2ltYWdlVUlEOwogICAgIEZsb2F0U2l6ZSBtX3JlbGF0aXZl
U2l6ZTsKLSAgICBib29sIG1fb3BhcXVlOwogICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKLSAg
ICBPd25QdHI8QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IG1fYnVmZmVyOwogICAgIEludFJl
Y3QgbV9kaXJ0eVJlY3Q7CiAgICAgR0x1aW50IG1fZmJvOwogICAgIEdMdWludCBtX3JibzsKICAg
ICBJbnRTaXplIG1fYWN0dWFsU2l6ZTsKICAgICBib29sIG1fc3VyZmFjZU5lZWRzUmVzZXQ7Ci0g
ICAgYm9vbCBtX2lzUGFja2VkOwogICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVy
OwogICAgIEJpdG1hcFRleHR1cmVHTCgpCiAgICAgICAgIDogbV9pZCgwKQotICAgICAgICAsIG1f
aW1hZ2VVSUQoMCkKLSAgICAgICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAgICAgLCBtX2Zibygw
KQogICAgICAgICAsIG1fcmJvKDApCiAgICAgICAgICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVl
KQpAQCAtNTMyLDYgKzQ1MSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5n
KCkKICAgICB9CiAgICAgZ2xDbGVhclN0ZW5jaWwoMCk7CiAgICAgZ2xDbGVhcihHTF9TVEVOQ0lM
X0JVRkZFUl9CSVQpOworICAgIGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEoKS52aWV3
cG9ydCk7CiAgICAgYmluZFN1cmZhY2UoMCk7CiAjZW5kaWYKIH0KQEAgLTY0NSw3ICs1NjUsNiBA
QCBzdGF0aWMgdm9pZCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHNpemVfdCB3aWR0aCwgc2l6ZV90
IGhlaWdodCkKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdT
aXplLCBib29sIG9wYXF1ZSkKIHsKICAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChuZXdTaXplLCBv
cGFxdWUpOwotICAgIG1faW1hZ2VVSUQgPSAwOwogICAgIEludFNpemUgbmV3VGV4dHVyZVNpemUg
PSBuZXh0UG93ZXJPZlR3byhuZXdTaXplKTsKICAgICBib29sIGp1c3RDcmVhdGVkID0gZmFsc2U7
CiAgICAgaWYgKCFtX2lkKSB7CkBAIC02NjQsMjkgKzU4MywxMSBAQCB2b2lkIEJpdG1hcFRleHR1
cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgYm9vbCBvcGFxdWUpCiAgICAgfQog
ICAgIG1fYWN0dWFsU2l6ZSA9IG5ld1NpemU7CiAgICAgbV9yZWxhdGl2ZVNpemUgPSBGbG9hdFNp
emUoZmxvYXQobmV3U2l6ZS53aWR0aCgpKSAvIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgZmxvYXQo
bmV3U2l6ZS5oZWlnaHQoKSkgLyBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKLSAgICBtX29wYXF1
ZSA9IG9wYXF1ZTsKICAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1ZTsKIH0KIAotUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVHTDo6YmVnaW5QYWludChjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9idWZmZXIgPSBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1
ZmZlcjo6Y3JlYXRlKCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgcmV0dXJu
IG1fYnVmZmVyLT5iZWdpblBhaW50KGRpcnR5UmVjdCwgbV9vcGFxdWUpOwotfQotCi12b2lkIEJp
dG1hcFRleHR1cmVHTDo6ZW5kUGFpbnQoKQotewotICAgIGlmICghbV9idWZmZXIpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2J1ZmZlci0+ZW5kUGFpbnQoKTsKLSAgICB1cGRhdGVDb250ZW50cyhC
R1JBRm9ybWF0LCBtX2RpcnR5UmVjdCwgbV9idWZmZXItPmRhdGEoKSk7Ci0gICAgR0xfQ01EKGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgbV9idWZmZXIuY2xlYXIoKTsK
LX0KIAotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotc3RhdGljIHZvaWQgc3dpenpsZUJHUkFU
b1JHQkEodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCitzdGF0aWMgdm9pZCBz
d2l6emxlUkdCKHVpbnQzMl90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlu
dCB3aWR0aCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsK
QEAgLTY5Niw3OSArNTk3LDMxIEBAIHN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQz
Ml90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgcFt4XSA9ICgocFt4
XSA8PCAxNikgJiAweGZmMDAwMCkgfCAoKHBbeF0gPj4gMTYpICYgMHhmZikgfCAocFt4XSAmIDB4
ZmYwMGZmMDApOwogICAgIH0KIH0KLSNlbmRpZgogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBk
YXRlQ29udGVudHMoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IHZvaWQqIGJpdHMpCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qg
dm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKICAgICBHTF9DTUQoZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VT
XzIKLSAgICBib29sIHNob3VsZFN3aXp6bGUgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgR0xpbnQg
Z2xGb3JtYXQgPSBHTF9SR0JBOwotICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKLSAgICBjYXNl
IFJHQkFGb3JtYXQ6Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSR0JGb3JtYXQ6Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEJHUkFGb3JtYXQ6Ci0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18y
Ci0gICAgICAgIHNob3VsZFN3aXp6bGUgPSB0cnVlOwotICAgICAgICBnbEZvcm1hdCA9IEdMX1JH
QkE7Ci0jZWxzZQotICAgICAgICBnbEZvcm1hdCA9IEdMX0JHUkE7Ci0jZW5kaWYKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBCR1JGb3JtYXQ6Ci0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18yCi0g
ICAgICAgIHNob3VsZFN3aXp6bGUgPSB0cnVlOwotICAgICAgICBnbEZvcm1hdCA9IEdMX1JHQjsK
LSNlbHNlCi0gICAgICAgIGdsRm9ybWF0ID0gR0xfQkdSOwotI2VuZGlmCi0gICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBpZiAoc2hvdWxkU3dp
enpsZSkKLSAgICAgICAgc3dpenpsZUJHUkFUb1JHQkEoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihi
aXRzKSwgcmVjdC5zaXplKCkpOwotI2VuZGlmCi0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGJpdHMpKQorICAgIEdMX0NNRChn
bFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJl
Y3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIGRhdGEpKQogfQogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBk
YXRlUmF3Q29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qgdm9pZCogYml0cykKK3Zv
aWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1
cmU6OlBpeGVsRm9ybWF0IGZvcm1hdCkKIHsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1
cm47CiAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCiAgICAg
R0x1aW50IGdsRm9ybWF0ID0gaXNPcGFxdWUoKSA/IEdMX1JHQiA6IEdMX1JHQkE7Ci0gICAgR0xf
Q01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IGJpdHMpKQotfQotCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKElt
YWdlKiBpbWFnZSkKLXsKLSAgICBJbWFnZVVJRCB1aWQgPSBpbWFnZSA/IHVpZEZvckltYWdlKGlt
YWdlKSA6IDA7Ci0gICAgaWYgKCFpbWFnZSB8fCAhdWlkKSB7Ci0gICAgICAgIGlmIChtX2ltYWdl
VUlEKQotICAgICAgICAgICAgZGVzdHJveSgpOworICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1h
Z2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAodWlkID09IG1faW1hZ2VV
SUQpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgR0x1aW50
IG5ld1RleHR1cmVJRCA9IG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5maW5kT3JDcmVhdGUodWlkLCBmb3VuZCk7Ci0gICAgaWYgKG5ld1RleHR1cmVJRCAh
PSBtX2lkKSB7Ci0gICAgICAgIG1faW1hZ2VVSUQgPSB1aWQ7Ci0gICAgICAgIGRlc3Ryb3koKTsK
LSAgICAgICAgbV9pZCA9IG5ld1RleHR1cmVJRDsKLSAgICAgICAgcmVzZXQoaW1hZ2UtPnNpemUo
KSwgZmFsc2UpOwotICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dChiZWdpblBhaW50KEludFJlY3QoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0
aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSkpOwotICAgICAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApLCBDb21wb3Np
dGVDb3B5KTsKLSAgICAgICAgICAgIGVuZFBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9CisjaWYg
UExBVEZPUk0oUVQpCisgICAgUUltYWdlIHF0SW1hZ2UgPSBmcmFtZUltYWdlLT50b0ltYWdlKCk7
CisgICAgaWYgKEludFNpemUocXRJbWFnZS5zaXplKCkpICE9IHNvdXJjZVJlY3Quc2l6ZSgpKQor
ICAgICAgICBxdEltYWdlID0gcXRJbWFnZS5jb3B5KHNvdXJjZVJlY3QpOworICAgIGlmIChmb3Jt
YXQgPT0gQkdSQUZvcm1hdCB8fCBmb3JtYXQgPT0gQkdSRm9ybWF0KQorICAgICAgICBzd2l6emxl
UkdCKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihxdEltYWdlLmJpdHMoKSksIHF0SW1hZ2Uu
c2l6ZSgpKTsKKyAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRh
cmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRS
ZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgcXRJbWFnZS5jb25zdEJp
dHMoKSkpCisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
cmVhdGVQcm9qZWN0aW9uTWF0cml4KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkKQEAg
LTgyMCw3ICs2NzMsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6YmluZCgpCiAKIHZvaWQgQml0
bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKIHsKLSAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2VVSUQg
fHwgIW1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5kZXJl
ZihtX2ltYWdlVUlEKSkpCisgICAgaWYgKG1faWQpCiAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX2lkKSkKIAogICAgIGlmIChtX2ZibykKQEAgLTg1NSwxMSArNzA4LDEyIEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNl
UG9pbnRlcikKICAgICBCaXRtYXBUZXh0dXJlR0wqIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxCaXRt
YXBUZXh0dXJlR0wqPihzdXJmYWNlUG9pbnRlcik7CiAKICAgICBpZiAoIXN1cmZhY2UpIHsKKyAg
ICAgICAgSW50U2l6ZSB2aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmll
d3BvcnRbM10pOwogICAgICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIDApKQotICAgICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rp
b25NYXRyaXgodmlld3BvcnRTaXplKCksIHRydWUpLm11bHRpcGx5KHRyYW5zZm9ybSgpKTsKKyAg
ICAgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZp
ZXdwb3J0U2l6ZSwgdHJ1ZSk7CiAgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKGRhdGEoKS5z
aGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIGRh
dGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkuc3RlbmNpbEluZGV4IC0gMSkpCiAgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQ
LCBHTF9LRUVQLCBHTF9LRUVQKSkKLSAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmll
d3BvcnRTaXplKCkud2lkdGgoKSwgdmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBH
TF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXpl
LmhlaWdodCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTE2LDQgKzc3MCw5IEBA
IFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJl
KCkKICAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKK1Bhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpCit7Cisg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Cit9CisKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdM
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmgKaW5kZXggZGQyZTFhNy4uZTQ2YjhhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtNDMs
MTYgKzQzLDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUodWludDMy
X3QgdGV4dHVyZSwgYm9vbCBvcGFxdWUsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0
bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJvb2wgZmxpcCk7CiAgICAgdmlydHVhbCB2b2lkIGJp
bmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwogICAgIHZpcnR1YWwgdm9pZCBiZWdp
bkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZygpOworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWlu
dGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7Ci0gICAgdmlydHVhbCBib29sIGFs
bG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBj
b25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1h
cHBlckdMPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsg
fQotICAgIHZvaWQgYmVnaW5QYWludGluZygpOwotICAgIHZvaWQgZW5kUGFpbnRpbmcoKTsKICAg
ICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIHsgbV9j
b250ZXh0ID0gY29udGV4dDsgfQogICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFja2Vk
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgcGxhdGZvcm1VcGRhdGVDb250ZW50
cyhOYXRpdmVJbWFnZVB0ciwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBCaXRtYXBU
ZXh0dXJlOjpQaXhlbEZvcm1hdCk7CisgICAgdmlydHVhbCBBY2NlbGVyYXRpb25Nb2RlIGFjY2Vs
ZXJhdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBPcGVuR0xNb2RlOyB9CiAKIHByaXZhdGU6CiAg
ICAgaW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVybiAqbV9kYXRhOyB9
CkBAIC02MiwxNiArNjMsNiBAQCBwcml2YXRlOgogfTsKIAogLy8gQW4gb2Zmc2NyZWVuIGJ1ZmZl
ciB0byBiZSByZW5kZXJlZCBieSBzb2Z0d2FyZS4KLWNsYXNzIEJHUkEzMlByZW11bHRpbXBsaWVk
QnVmZmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIH5CR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcigpIHsgfQotICAgIHZpcnR1YWwgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBi
b29sIG9wYXF1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQqIGRhdGEoKSA9IDA7Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8QkdSQTMyUHJl
bXVsdGltcGxpZWRCdWZmZXI+IGNyZWF0ZSgpOwotfTsKLQogc3RhdGljIGlubGluZSBpbnQgbmV4
dFBvd2VyT2ZUd28oaW50IG51bSkKIHsKICAgICBmb3IgKGludCBpID0gMHgxMDAwMDAwMDsgaSA+
IDA7IGkgPj49IDEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggOTE3M2E1ZC4uYzE5MGE4
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlcgogewogICAgIGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVzdG9y
ZUNvbnRleHQoKTsKIAotICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5pc09wZW5HTEJhY2tlZCgpKSB7
CisgICAgaWYgKHRleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFw
cGVyOjpPcGVuR0xNb2RlKSB7CiAgICAgICAgIFRleHR1cmVNYXBwZXJHTCogdGV4bWFwR0wgPSBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKTsKICAgICAgICAgdGV4
bWFwR0wtPmRyYXdUZXh0dXJlKG1fY29udGV4dC0+bV90ZXh0dXJlLCAhbV9jb250ZXh0LT5tX2F0
dHJzLmFscGhhLCBGbG9hdFNpemUoMSwgMSksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwg
bWFzaywgdHJ1ZSAvKiBmbGlwICovKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
CmluZGV4IGVjNzNjM2ZlLi4yNjFiYmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC0xMzM1LDYg
KzEzMzUsMzIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKICAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJh
bnNmb3JtKTsKIH0KIAorI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCitUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgo
KTsKKworICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+Y29tYmluZWRUcmFuc2Zvcm0oKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5wKCktPnNldFdvcmxkVHJhbnNmb3Jt
KHRyYW5zZm9ybSwgdHJ1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXQzRFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+cCgpLT5z
ZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0sIGZhbHNlKTsKK30KKyNlbmRpZgorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiwgY29uc3QgSW50UmVjdCYp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0NDY0MWNlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
NjMgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKLQotI2luY2x1ZGUg
PFF0Q29yZS9xZGVidWcuaD4KLSNpbmNsdWRlIDxRdEd1aS9xcGFpbnRlbmdpbmUuaD4KLSNpbmNs
dWRlIDxRdEd1aS9xcGl4bWFwLmg+Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0jIGlu
Y2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpkZXN0cm95KCkKLXsKLSAgICBpZiAobV9w
aXhtYXAucGFpbnRpbmdBY3RpdmUoKSkKLSAgICAgICAgcUZhdGFsKCJEZXN0cm95aW5nIGFuIGFj
dGl2ZSBwaXhtYXAiKTsKLSAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKLX0KLQotdm9pZCBCaXRt
YXBUZXh0dXJlUXQ6OnJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgaXNPcGFxdWUpCi17
Ci0gICAgQml0bWFwVGV4dHVyZTo6cmVzZXQoc2l6ZSwgaXNPcGFxdWUpOwotCi0gICAgaWYgKHNp
emUud2lkdGgoKSA+IG1fcGl4bWFwLnNpemUoKS53aWR0aCgpIHx8IHNpemUuaGVpZ2h0KCkgPiBt
X3BpeG1hcC5zaXplKCkuaGVpZ2h0KCkgfHwgbV9waXhtYXAuaXNOdWxsKCkpCi0gICAgICAgIG1f
cGl4bWFwID0gUVBpeG1hcChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIGlmICgh
aXNPcGFxdWUpCi0gICAgICAgIG1fcGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLX0KLQot
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVRdDo6YmVnaW5QYWludChjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9wYWludGVyLmJlZ2luKCZtX3BpeG1hcCk7
Ci0gICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKCZtX3BhaW50ZXIpOwotICAgIG1fcGFp
bnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9DbGVhcik7
Ci0gICAgbV9wYWludGVyLmZpbGxSZWN0KFFSZWN0KGRpcnR5UmVjdCksIFF0Ojp0cmFuc3BhcmVu
dCk7Ci0gICAgbV9wYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX1NvdXJjZU92ZXIpOwotICAgIHJldHVybiAmbV9wYWludGVyOwotfQotCi12b2lkIEJp
dG1hcFRleHR1cmVRdDo6ZW5kUGFpbnQoKQotewotICAgIG1fcGFpbnRlci5lbmQoKTsKLX0KLQot
dm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0IHBpeGVsRm9y
bWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCB2b2lkKiBiaXRzKQotewotICAgIG1fcGFpbnRlci5i
ZWdpbigmbV9waXhtYXApOwotICAgIFFJbWFnZTo6Rm9ybWF0IHF0Rm9ybWF0ID0gUUltYWdlOjpG
b3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQ7Ci0gICAgaWYgKHBpeGVsRm9ybWF0ID09IEJHUkZv
cm1hdCB8fCBwaXhlbEZvcm1hdCA9PSBSR0JGb3JtYXQpCi0gICAgICAgIHF0Rm9ybWF0ID0gUUlt
YWdlOjpGb3JtYXRfUkdCMzI7Ci0gICAgUUltYWdlIGltYWdlKHN0YXRpY19jYXN0PHVjaGFyKj4o
Yml0cyksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgcXRGb3JtYXQpOwotICAgIGlmIChw
aXhlbEZvcm1hdCA9PSBCR1JGb3JtYXQgfHwgcGl4ZWxGb3JtYXQgPT0gQkdSQUZvcm1hdCkKLSAg
ICAgICAgaW1hZ2UgPSBpbWFnZS5yZ2JTd2FwcGVkKCk7Ci0gICAgbV9wYWludGVyLnNldENvbXBv
c2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgbV9wYWlu
dGVyLmRyYXdJbWFnZShyZWN0LCBpbWFnZSk7Ci0gICAgbV9wYWludGVyLmVuZCgpOwotfQotCi1i
b29sIEJpdG1hcFRleHR1cmVRdDo6c2F2ZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0
dXJuIG1fcGl4bWFwLnNhdmUocGF0aCwgIlBORyIpOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVR
dDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoIWltYWdlKQot
ICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFwaXhtYXApCi0gICAgICAgIHJldHVy
bjsKLSAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChwaXhtYXAtPnNpemUoKSwgIXBpeG1hcC0+aGFz
QWxwaGFDaGFubmVsKCkpOwotICAgIG1fcGl4bWFwID0gKnBpeG1hcDsKLX0KLQotdm9pZCBCaXRt
YXBUZXh0dXJlUXQ6OnBhY2soKQotewotICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9pbWFnZSA9IG1fcGl4bWFwLnRvSW1hZ2UoKTsKLSAgICBtX3Bp
eG1hcCA9IFFQaXhtYXAoKTsKLSAgICBtX2lzUGFja2VkID0gdHJ1ZTsKLX0KLQotdm9pZCBCaXRt
YXBUZXh0dXJlUXQ6OnVucGFjaygpCi17Ci0gICAgbV9pc1BhY2tlZCA9IGZhbHNlOwotICAgIGlm
IChtX2ltYWdlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BpeG1hcCA9IFFQ
aXhtYXA6OmZyb21JbWFnZShtX2ltYWdlKTsKLSAgICBtX2ltYWdlID0gUUltYWdlKCk7Ci19Ci0K
LXZvaWQgVGV4dHVyZU1hcHBlclF0OjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgICBRUGFpbnRlciogcGFp
bnRlciA9IGN1cnJlbnRQYWludGVyKCk7Ci0gICAgIHBhaW50ZXItPnNhdmUoKTsKLSAgICAgUVRy
YW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNmb3JtKCk7Ci0gICAgIHBhaW50
ZXItPnNldFRyYW5zZm9ybShtYXRyaXgsIGZhbHNlKTsKLSAgICAgcGFpbnRlci0+c2V0Q2xpcFJl
Y3QocmVjdCk7Ci0gICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShwcmV2VHJhbnNmb3JtLCBmYWxz
ZSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjplbmRDbGlwKCkKLXsKLSAgICBjdXJyZW50
UGFpbnRlcigpLT5yZXN0b3JlKCk7Ci19Ci0KLUludFNpemUgVGV4dHVyZU1hcHBlclF0Ojp2aWV3
cG9ydFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fcGFpbnRlci0+ZGV2aWNl
KCktPndpZHRoKCksIG1fcGFpbnRlci0+ZGV2aWNlKCktPmhlaWdodCgpKTsKLX0KLQotCi1UZXh0
dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgpCi0gICAgOiBtX2N1cnJlbnRTdXJmYWNlKDAp
Ci17Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9w
YWludGVyID0gY29udGV4dCA/IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMDsKLSAgICBp
bml0aWFsaXplKG1fcGFpbnRlcik7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCogVGV4dHVyZU1hcHBl
clF0OjpncmFwaGljc0NvbnRleHQoKQotewotICAgIHJldHVybiBtX2NvbnRleHQ7Ci19Ci0KLXZv
aWQgVGV4dHVyZU1hcHBlclF0OjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKQot
ewotICAgIGlmIChtX2N1cnJlbnRTdXJmYWNlID09IHN1cmZhY2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAobV9jdXJyZW50U3VyZmFjZSkKLSAgICAgICAgbV9jdXJyZW50U3VyZmFjZS0+bV9w
YWludGVyLmVuZCgpOwotICAgIGlmICghc3VyZmFjZSkgewotICAgICAgICBtX2N1cnJlbnRTdXJm
YWNlID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBCaXRtYXBUZXh0dXJlUXQqIHN1
cmZhY2VRdCA9IHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVRdCo+KHN1cmZhY2UpOwotICAgIGlm
ICghc3VyZmFjZVF0LT5tX3BhaW50ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgc3VyZmFjZVF0LT5t
X3BhaW50ZXIuYmVnaW4oJnN1cmZhY2VRdC0+bV9waXhtYXApOwotICAgIG1fY3VycmVudFN1cmZh
Y2UgPSBzdXJmYWNlUXQ7Ci19Ci0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmRyYXdUZXh0dXJl
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCi17Ci0gICAgY29uc3QgQml0bWFwVGV4dHVy
ZVF0JiB0ZXh0dXJlUXQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlUXQmPih0ZXh0
dXJlKTsKLSAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fcGFpbnRlcjsKLSAgICBRUGl4bWFwIHBp
eG1hcCA9IHRleHR1cmVRdC5tX3BpeG1hcDsKLSAgICBpZiAobV9jdXJyZW50U3VyZmFjZSkKLSAg
ICAgICAgcGFpbnRlciA9ICZtX2N1cnJlbnRTdXJmYWNlLT5tX3BhaW50ZXI7Ci0KLSAgICBpZiAo
bWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgewotICAgICAgICBjb25zdCBC
aXRtYXBUZXh0dXJlUXQqIG1hc2sgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlUXQq
PihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIFFQaXhtYXAgaW50ZXJtZWRpYXRlUGl4bWFwKHBpeG1h
cC5zaXplKCkpOwotICAgICAgICBpbnRlcm1lZGlhdGVQaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJl
bnQpOwotICAgICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmaW50ZXJtZWRpYXRlUGl4bWFwKTsK
LSAgICAgICAgbWFza1BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3Np
dGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgbWFza1BhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBw
aXhtYXApOwotICAgICAgICBtYXNrUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6
OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbkluKTsKLSAgICAgICAgbWFza1BhaW50ZXIuZHJh
d1BpeG1hcChRUmVjdCgwLCAwLCBwaXhtYXAud2lkdGgoKSwgcGl4bWFwLmhlaWdodCgpKSwgbWFz
ay0+bV9waXhtYXAsIG1hc2stPnNvdXJjZVJlY3QoKSk7Ci0gICAgICAgIG1hc2tQYWludGVyLmVu
ZCgpOwotICAgICAgICBwaXhtYXAgPSBpbnRlcm1lZGlhdGVQaXhtYXA7Ci0gICAgfQotCi0gICAg
Y29uc3QgcXJlYWwgcHJldk9wYWNpdHkgPSBwYWludGVyLT5vcGFjaXR5KCk7Ci0gICAgY29uc3Qg
UVRyYW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNmb3JtKCk7Ci0gICAgcGFp
bnRlci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0
cml4LCB0cnVlKTsKLSAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRhcmdldFJlY3QsIHBpeG1hcCwg
RmxvYXRSZWN0KHRleHR1cmVRdC5zb3VyY2VSZWN0KCkpKTsKLSAgICBwYWludGVyLT5zZXRUcmFu
c2Zvcm0ocHJldlRyYW5zZm9ybSk7Ci0gICAgcGFpbnRlci0+c2V0T3BhY2l0eShwcmV2T3BhY2l0
eSk7Ci19Ci0KLVBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRl
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
Ci0gICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5n
aW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpCi0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsKLSNlbmRpZgotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgVGV4dHVyZU1hcHBlclF0KTsKLX0KLQotUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBU
ZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQml0bWFwVGV4dHVyZVF0KCkpOwotfQotCi1CaXRtYXBUZXh0dXJlUXQ6OkJpdG1hcFRleHR1
cmVRdCgpCi0gICAgOiBtX2lzUGFja2VkKGZhbHNlKQotewotCi19Ci0KLXZvaWQgVGV4dHVyZU1h
cHBlclF0OjpiZWdpblBhaW50aW5nKCkKLXsKLSAgICBtX3BhaW50ZXItPnNhdmUoKTsKLX0KLQot
dm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmVuZFBhaW50aW5nKCkKLXsKLSAgICBtX3BhaW50ZXItPnJl
c3RvcmUoKTsKLX0KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLWNsYXNzIEJHUkEzMlBy
ZW11bHRpbXBsaWVkQnVmZmVyUXQgOiBwdWJsaWMgQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIg
ewotcHVibGljOgotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFp
bnQoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBvcGFxdWUpCi0gICAgewotICAgICAgICAvLyBt
X2ltYWdlIGlzIG9ubHkgdXNpbmcgZHVyaW5nIHBhaW50LCBpdCdzIHNhZmUgdG8gb3ZlcnJpZGUg
aXQuCi0gICAgICAgIG1faW1hZ2UgPSBRSW1hZ2UocmVjdC5zaXplKCkud2lkdGgoKSwgcmVjdC5z
aXplKCkuaGVpZ2h0KCksIG9wYXF1ZSA/IFFJbWFnZTo6Rm9ybWF0X1JHQjMyIDogUUltYWdlOjpG
b3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOwotICAgICAgICBpZiAoIW9wYXF1ZSkKLSAgICAg
ICAgICAgIG1faW1hZ2UuZmlsbCgwKTsKLSAgICAgICAgbV9wYWludGVyLmJlZ2luKCZtX2ltYWdl
KTsKLSAgICAgICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKCZtX3BhaW50ZXIpOwotICAg
ICAgICBtX3BhaW50ZXIudHJhbnNsYXRlKC1yZWN0LngoKSwgLXJlY3QueSgpKTsKLSAgICAgICAg
cmV0dXJuICZtX3BhaW50ZXI7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkg
eyBtX3BhaW50ZXIuZW5kKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQqIGRhdGEoKSB7IHJldHVybiBt
X2ltYWdlLmJpdHMoKTsgfQotCi1wcml2YXRlOgotICAgIFFQYWludGVyIG1fcGFpbnRlcjsKLSAg
ICBRSW1hZ2UgbV9pbWFnZTsKLX07Ci0KLVBhc3NPd25QdHI8QkdSQTMyUHJlbXVsdGltcGxpZWRC
dWZmZXI+IEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKQotewotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCgpKTsKLX0KLQotdWlu
dDY0X3QgdWlkRm9ySW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIHJldHVybiBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c2VyaWFsTnVtYmVyKCk7Ci19Ci0jZW5kaWYKLX07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJl
TWFwcGVyUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVN
YXBwZXJRdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGZlZTAzLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJR
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgotCi0j
aWZuZGVmIFRleHR1cmVNYXBwZXJRdF9oCi0jZGVmaW5lIFRleHR1cmVNYXBwZXJRdF9oCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQml0bWFwVGV4dHVyZVF0IDogcHVibGljIEJpdG1h
cFRleHR1cmUgewotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyUXQ7Ci1wdWJsaWM6Ci0g
ICAgQml0bWFwVGV4dHVyZVF0KCk7Ci0gICAgfkJpdG1hcFRleHR1cmVRdCgpIHsgZGVzdHJveSgp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9waXhtYXAud2lkdGgoKSwgbV9waXhtYXAuaGVp
Z2h0KCkpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmLCBib29sIG9w
YXF1ZSk7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChj
b25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKLSAgICB2aXJ0dWFs
IGJvb2wgc2F2ZShjb25zdCBTdHJpbmcmIHBhdGgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gIW1fcGl4bWFwLmlzTnVsbCgpIHx8ICFtX2ltYWdlLmlzTnVsbCgp
OyB9Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgwLCAw
LCBjb250ZW50U2l6ZSgpLndpZHRoKCksIGNvbnRlbnRTaXplKCkuaGVpZ2h0KCkpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHBhY2soKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCk7Ci0gICAgdmly
dHVhbCBib29sIGlzUGFja2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BhY2tlZDsgfQotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIHZv
aWQqIGJpdHMpOwotCi0gICAgUVBhaW50ZXIqIHBhaW50ZXIoKSB7IHJldHVybiAmbV9wYWludGVy
OyB9Ci0KLXByaXZhdGU6Ci0gICAgUVBhaW50ZXIgbV9wYWludGVyOwotICAgIFFQaXhtYXAgbV9w
aXhtYXA7Ci0gICAgUUltYWdlIG1faW1hZ2U7Ci0gICAgYm9vbCBtX2lzUGFja2VkOwotfTsKLQot
Y2xhc3MgVGV4dHVyZU1hcHBlclF0IDogcHVibGljIFRleHR1cmVNYXBwZXIgewotcHVibGljOgot
ICAgIFRleHR1cmVNYXBwZXJRdCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNv
bnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUpOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJl
KiBzdXJmYWNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGVuZENsaXAo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCop
OwotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsK
LSAgICB2aXJ0dWFsIEludFNpemUgdmlld3BvcnRTaXplKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIGJlZ2luUGFpbnRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRpbmcoKTsKLQot
ICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUVBhaW50ZXIqIHBhaW50ZXIpCi0gICAgewotICAg
ICAgICBpZiAocGFpbnRlcikKLSAgICAgICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQ
YWludGVyOjpBbnRpYWxpYXNpbmcgfCBRUGFpbnRlcjo6U21vb3RoUGl4bWFwVHJhbnNmb3JtLCBm
YWxzZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJRdCk7IH0KLXByaXZhdGU6
Ci0gICAgaW5saW5lIFFQYWludGVyKiBjdXJyZW50UGFpbnRlcigpIHsgcmV0dXJuIG1fY3VycmVu
dFN1cmZhY2UgPyBtX2N1cnJlbnRTdXJmYWNlLT5wYWludGVyKCkgOiBtX3BhaW50ZXI7IH0KLQot
ICAgIFFQYWludGVyKiBtX3BhaW50ZXI7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7
Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmVRdD4gbV9jdXJyZW50U3VyZmFjZTsKLX07Ci0KLX0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCmluZGV4IGRkMzNmMGQuLjY4NmE1NzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlci5jcHAKQEAgLTIwLDYgKzIwLDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCiAKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzEsNSArNzQs
MTMzIEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlcjo6YWNxdWlyZVRl
eHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJiBzCiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dHVy
ZTsKIH0KIAorCitjbGFzcyBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIgOiBwdWJsaWMgQml0bWFw
VGV4dHVyZSB7CisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyKTsgfQorICAgIH5CaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXIoKSB7IGRlc3Ryb3koKTsgfQorICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KCkgeyBtX2ltYWdlLmNsZWFyKCk7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UtPnNpemUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCByZXNl
dChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSkKKyAgICB7CisgICAgICAgIEJpdG1h
cFRleHR1cmU6OnJlc2V0KHNpemUsIG9wYXF1ZSk7CisgICAgICAgIG1faW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgIGlubGluZSBHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCgpIHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdlLT5jb250ZXh0KCkgOiAw
OyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7CisgICAgdm9pZCB1cGRhdGVDb250ZW50
cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KTsKK3ByaXZhdGU6
CisgICAgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyKCkgeyB9CisgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBtX2ltYWdlOworfTsKKworCitjbGFzcyBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgOiBw
dWJsaWMgVGV4dHVyZU1hcHBlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0
dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgeyBtX2N1cnJlbnRTdXJmYWNlID0g
c3VyZmFjZTt9CisgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKSB7IGdyYXBoaWNzQ29udGV4dCgp
LT5yZXN0b3JlKCk7IH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyKTsgfQor
ICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIHsgcmV0dXJuIEJp
dG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCk7IH0KKyAgICBpbmxpbmUgR3JhcGhpY3ND
b250ZXh0KiBjdXJyZW50Q29udGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50
U3VyZmFjZSA/IHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcio+KG1fY3VycmVu
dFN1cmZhY2UuZ2V0KCkpLT5ncmFwaGljc0NvbnRleHQoKSA6IGdyYXBoaWNzQ29udGV4dCgpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkg
Y29uc3QgeyByZXR1cm4gU29mdHdhcmVNb2RlOyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEJp
dG1hcFRleHR1cmU+IG1fY3VycmVudFN1cmZhY2U7Cit9OworCit2b2lkIEJpdG1hcFRleHR1cmVJ
bWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1hZ2UgaW1hZ2UocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1Y2hhcio+KGRhdGEpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCksIHRhcmdldFJlY3Qud2lkdGgoKSAqIDQsIFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IG1faW1hZ2Ut
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgcGFpbnRlci0+c2F2ZSgpOworICAg
IHBhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1Nv
dXJjZSk7CisgICAgcGFpbnRlci0+ZHJhd0ltYWdlKHRhcmdldFJlY3QsIGltYWdlKTsKKyAgICBw
YWludGVyLT5yZXN0b3JlKCk7CisjZW5kaWYKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlSW1hZ2VC
dWZmZXI6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGl4ZWxGb3JtYXQpCit7CisgICAgbV9p
bWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHRh
cmdldFJlY3QsIHNvdXJjZVJlY3QsIENvbXBvc2l0ZUNvcHkpOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJJbWFnZUJ1ZmZlcjo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQgPSBjdXJyZW50Q29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuOworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cHJldmlvdXNUcmFuc2Zvcm0gPSBjb250ZXh0LT5nZXQzRFRyYW5zZm9ybSgpOworI2Vsc2UKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gcHJldmlvdXNUcmFuc2Zvcm0gPSBjb250ZXh0LT5nZXRDVE0oKTsK
KyNlbmRpZgorICAgIGNvbnRleHQtPnNhdmUoKTsKKworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcp
CisgICAgY29udGV4dC0+Y29uY2F0M0RUcmFuc2Zvcm0obWF0cml4KTsKKyNlbHNlCisgICAgY29u
dGV4dC0+Y29uY2F0Q1RNKG1hdHJpeC50b0FmZmluZSgpKTsKKyNlbmRpZgorCisgICAgY29udGV4
dC0+Y2xpcChyZWN0KTsKKworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAgY29udGV4dC0+
c2V0M0RUcmFuc2Zvcm0ocHJldmlvdXNUcmFuc2Zvcm0pOworI2Vsc2UKKyAgICBjb250ZXh0LT5z
ZXRDVE0ocHJldmlvdXNUcmFuc2Zvcm0pOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBl
ckltYWdlQnVmZmVyOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQor
eworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJl
SW1hZ2VCdWZmZXImIHRleHR1cmVJbWFnZUJ1ZmZlciA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVJbWFnZUJ1ZmZlciY+KHRleHR1cmUpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZSA9
IHRleHR1cmVJbWFnZUJ1ZmZlci5tX2ltYWdlLmdldCgpOworICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gbWFza2VkSW1hZ2U7CisKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlz
VmFsaWQoKSkgeworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIqIG1hc2sg
PSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIqPihtYXNrVGV4dHVy
ZSk7CisgICAgICAgIG1hc2tlZEltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrVGV4dHVy
ZS0+Y29udGVudFNpemUoKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0NvbnRleHQg
PSBtYXNrZWRJbWFnZS0+Y29udGV4dCgpOworICAgICAgICBtYXNrQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpLCBDb21w
b3NpdGVDb3B5KTsKKyAgICAgICAgaWYgKG9wYWNpdHkgPCAxKSB7CisgICAgICAgICAgICBtYXNr
Q29udGV4dC0+c2V0QWxwaGEob3BhY2l0eSk7CisgICAgICAgICAgICBvcGFjaXR5ID0gMTsKKyAg
ICAgICAgfQorICAgICAgICBtYXNrQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1hc2stPm1faW1h
Z2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCksIENvbXBvc2l0
ZURlc3RpbmF0aW9uSW4pOworICAgICAgICBpbWFnZSA9IG1hc2tlZEltYWdlLmdldCgpOworICAg
IH0KKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5zZXRBbHBoYShvcGFjaXR5
KTsKKyNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQorICAgIGNvbnRleHQtPmNvbmNhdDNEVHJhbnNm
b3JtKG1hdHJpeCk7CisjZWxzZQorICAgIGNvbnRleHQtPmNvbmNhdENUTShtYXRyaXgpOworI2Vu
ZGlmCisgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCB0YXJnZXRSZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK1Bhc3NPd25Q
dHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUg
bW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBTb2Z0d2FyZU1vZGUpCisgICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmNyZWF0ZSgpOworICAgIHJldHVybiBwbGF0Zm9ybUNy
ZWF0ZUFjY2VsZXJhdGVkKCk7Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggZDY2
ZmUyZi4uNzBlYTQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCkBAIC00Nyw0NiArNDcsMzEgQEAgY2xhc3Mg
VGV4dHVyZU1hcHBlcjsKIGNsYXNzIEJpdG1hcFRleHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8
Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgogICAgIGVudW0gUGl4ZWxGb3JtYXQgeyBCR1JBRm9y
bWF0LCBSR0JBRm9ybWF0LCBCR1JGb3JtYXQsIFJHQkZvcm1hdCB9OwotICAgIEJpdG1hcFRleHR1
cmUoKSA6IG1fbG9ja0NvdW50KDApIHt9CisgICAgQml0bWFwVGV4dHVyZSgpCisgICAgICAgIDog
bV9pc09wYXF1ZSh0cnVlKQorICAgIHsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0
dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSB7IH0KIAotICAgIHZpcnR1YWwg
Ym9vbCBhbGxvd09mZmxpbmVUZXh0dXJlVXBsb2FkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBi
cHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50
cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6
UGl4ZWxGb3JtYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qg
dm9pZCosIGNvbnN0IEludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBj
b25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBicHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQog
ICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSA9
IGZhbHNlKQogICAgIHsKICAgICAgICAgbV9pc09wYXF1ZSA9IG9wYXF1ZTsKICAgICAgICAgbV9j
b250ZW50U2l6ZSA9IHNpemU7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhY2soKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGlzUGFja2Vk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwotCi0gICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMsIEJpdG1hcFRleHR1cmUgbWlnaHQgbW9kaWZ5IHRoZSBiaXRzIGRpcmVjdGx5IChzd2l6
emxlKS4KLSAgICAvLyBUaHVzLCB0aGlzIG1ldGhvZCBpcyBvbmx5IHJlY29tbWVuZGVkIGZvciBi
dWZmZXIgdXBkYXRlLCBzdWNoIGFzIHVzZWQgYnkgV2ViS2l0Mi4KLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJhd0NvbnRlbnRzKGNvbnN0IEludFJlY3QmLCBj
b25zdCB2b2lkKiBiaXRzKSB7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBiZWdpblBhaW50TWVkaWEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJlZ2luUGFpbnQoSW50
UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHNhdmUoY29uc3QgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGlubGlu
ZSB2b2lkIGxvY2soKSB7ICsrbV9sb2NrQ291bnQ7IH0KLSAgICBpbmxpbmUgdm9pZCB1bmxvY2so
KSB7IC0tbV9sb2NrQ291bnQ7IH0KLSAgICBpbmxpbmUgYm9vbCBpc0xvY2tlZCgpIHsgcmV0dXJu
IG1fbG9ja0NvdW50OyB9CiAgICAgaW5saW5lIEludFNpemUgY29udGVudFNpemUoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CiAgICAgaW5saW5lIGludCBudW1iZXJPZkJ5dGVzKCkg
Y29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRoKCkgKiBzaXplKCkuaGVpZ2h0KCkgKiBicHAoKSA+
PiAzOyB9CisgICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX2lzT3Bh
cXVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBpbnQgbV9sb2NrQ291bnQ7CiAgICAgSW50U2l6ZSBt
X2NvbnRlbnRTaXplOwogICAgIGJvb2wgbV9pc09wYXF1ZTsKIH07CkBAIC05NywzMiArODIsMjYg
QEAgY2xhc3MgVGV4dHVyZU1hcHBlciB7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7
CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUo
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQgPSAwKTsKKyAgICBlbnVtIEFjY2VsZXJh
dGlvbk1vZGUgeyBTb2Z0d2FyZU1vZGUsIE9wZW5HTE1vZGUgfTsKKyAgICBzdGF0aWMgUGFzc093
blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoQWNjZWxlcmF0aW9uTW9kZSBuZXdNb2RlID0gU29m
dHdhcmVNb2RlKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyKCkgeyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkgPSAwOwogCiAgICAgLy8gbWFrZXMgYSBzdXJmYWNl
IHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dpbmcgZHJhd1RleHR1cmUgY2FsbHMuCiAgICAgdmly
dHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCopID0gMDsKLSAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSB7
IG1fY29udGV4dCA9IGNvbnRleHQ7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgdmlydHVhbCB2b2lkIGJl
Z2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0gMDsKLSAgICBJbnRTaXplIHZpZXdwb3J0U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9Ci0gICAgdm9pZCBzZXRWaWV3cG9y
dFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBtX3ZpZXdwb3J0U2l6ZSA9IHM7IH0KIAogICAgIHZv
aWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFs
aXR5KSB7IG1faW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB9CiAgICAgdm9pZCBzZXRU
ZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3RleHREcmF3aW5n
TW9kZSA9IG1vZGU7IH0KIAogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2ludGVycG9sYXRpb25RdWFsaXR5OyB9CiAg
ICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0RHJhd2luZ01vZGU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dQYXJ0aWFsVXBkYXRl
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFj
a2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV90cmFuc2Zvcm0gPSBtYXRyaXg7
IH0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25N
b2RlKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRpbmcoKSB7IH0KQEAgLTEzMCwyMiArMTA5LDI5IEBA
IHB1YmxpYzoKICAgICAvLyBBIHN1cmZhY2UgaXMgcmVsZWFzZWQgaW1wbGljaXRseSB3aGVuIGRl
cmVmZXJlbmNlZC4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gYWNxdWly
ZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJik7CiAKLQogcHJvdGVjdGVkOgogICAgIFRl
eHR1cmVNYXBwZXIoKQogICAgICAgICA6IG1faW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvbkRlZmF1bHQpCiAgICAgICAgICwgbV90ZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxsKQot
ICAgIHt9CisgICAgeworICAgIH0KIAogcHJpdmF0ZToKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gcGxhdGZvcm1DcmVhdGVB
Y2NlbGVyYXRlZCgpOworI2Vsc2UKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVy
PiBwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyNlbmRpZgogICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1faW50ZXJwb2xhdGlvblF1
YWxpdHk7CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgbV90ZXh0RHJhd2luZ01vZGU7Ci0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgSW50U2l6ZSBtX3ZpZXdwb3J0
U2l6ZTsKICAgICBWZWN0b3I8UmVmUHRyPEJpdG1hcFRleHR1cmU+ID4gbV90ZXh0dXJlUG9vbDsK
KyAgICBHcmFwaGljc0NvbnRleHQqIG1fY29udGV4dDsKIH07CiAKLX07Cit9CiAKICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAppbmRleCBjY2Y0OWJjLi40ZmUyMjZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogCiBu
YW1lc3BhY2UgewpAQCAtMTU2LDEyICsxNTcsMTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWUK
ICAgICBpZiAoIXRleHR1cmVNYXBwZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1F
OiBBZGQgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMuCi0gICAgRmxvYXRSZWN0IGRpcnR5UmVj
dCA9IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJy
ZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0OworICAgIEludFJlY3QgZGlydHlSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3Qo
KSA6IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CiAKICAgICBmb3IgKHNpemVf
dCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX293bmVkVGlsZXMuc2l6ZSgpOyArK3RpbGVJ
bmRleCkgewogICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZUluZGV4
XTsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgICAgIGlmICghdGls
ZS50ZXh0dXJlKQogICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3Jl
YXRlVGV4dHVyZSgpOwogICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4mIHRleHR1cmUgPSB0
aWxlLnRleHR1cmU7CkBAIC0xNjksMzEgKzE2OCw0NCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpyZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5
ZQogCiAgICAgICAgIGlmICh0aWxlLm5lZWRzUmVzZXQgfHwgdGV4dHVyZS0+Y29udGVudFNpemUo
KSAhPSB0aWxlU2l6ZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICB0aWxl
Lm5lZWRzUmVzZXQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KHRpbGVTaXpl
LCBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUg
PyBmYWxzZSA6IG1fc3RhdGUuY29udGVudHNPcGFxdWUpOwotICAgICAgICAgICAgcmVjdCA9IHRp
bGUucmVjdDsKKyAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KHRpbGVTaXplLCBtX3N0YXRlLmNv
bnRlbnRzT3BhcXVlKTsKKyAgICAgICAgICAgIGRpcnR5UmVjdC51bml0ZShlbmNsb3NpbmdJbnRS
ZWN0KHRpbGUucmVjdCkpOwogICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRpcnR5UmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFBhaW50IHRoZSBlbnRpcmUgZGly
dHkgcmVjdCBpbnRvIGFuIGltYWdlIGJ1ZmZlci4gVGhpcyBlbnN1cmVzIHdlIG9ubHkgcGFpbnQg
b25jZS4KKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShkaXJ0eVJlY3Quc2l6ZSgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQg
PSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIHsKKyAgICAgICAgY29udGV4dC0+c2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KCkpOworICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1h
cHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLWRp
cnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKyAgICAgICAgbGF5ZXItPnBhaW50R3JhcGhp
Y3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBpZiAobV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKQorICAgICAg
ICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIG1fc3RhdGUuY29udGVudHNSZWN0KTsKKyAgICB9CiAKLSAgICAg
ICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KTsKLSAg
ICAgICAgY29udGVudFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOwotICAg
ICAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgIC8vIFRoaXMgc3VsZCBiZSBhIHJl
ZmVyZW5jZSBjb3B5IG9ubHkuCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGltYWdlQnVmZmVy
LT5jb3B5SW1hZ2UoKTsKKworICAgIC8vIERpdmlkZSB0aGUgaW1hZ2UgdG8gdGlsZXMuCisgICAg
Zm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUo
KTsgKyt0aWxlSW5kZXgpIHsKKyAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVz
W3RpbGVJbmRleF07CisgICAgICAgIEludFJlY3QgdGFyZ2V0UmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QodGlsZS5yZWN0KTsKKyAgICAgICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsK
KyAgICAgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRhcmdldFJlY3Q7CiAKLSAgICAgICAgRmxv
YXRSZWN0IGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMgPSBjb250ZW50UmVjdDsKLSAgICAg
ICAgRmxvYXRQb2ludCBvZmZzZXQoLXRpbGUucmVjdC54KCksIC10aWxlLnJlY3QueSgpKTsKLSAg
ICAgICAgY29udGVudFJlY3RJblRpbGVDb29yZGluYXRlcy5tb3ZlKG9mZnNldC54KCksIG9mZnNl
dC55KCkpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0
KHRleHR1cmUtPmJlZ2luUGFpbnQoZW5jbG9zaW5nSW50UmVjdChjb250ZW50UmVjdEluVGlsZUNv
b3JkaW5hdGVzKSkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KHRleHR1cmVNYXBwZXItPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJh
d2luZ01vZGUoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShvZmZzZXQueCgpLCBv
ZmZzZXQueSgpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRDb250ZW50UmVjdChjb250
ZW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9
PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKQotICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIElu
dFBvaW50KDAsIDApKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsYXllci0+
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChzY2Fs
ZWRDb250ZW50UmVjdCkpOwotICAgICAgICAgICAgdGV4dHVyZS0+ZW5kUGFpbnQoKTsKLSAgICAg
ICAgfQorICAgICAgICAvLyBOb3JtYWxpemUgc291cmNlUmVjdCB0byB0aGUgYnVmZmVyJ3MgY29v
cmRpbmF0ZXMuCisgICAgICAgIHNvdXJjZVJlY3QubW92ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5
UmVjdC55KCkpOworCisgICAgICAgIC8vIE5vcm1hbGl6ZSB0YXJnZXRSZWN0IHRvIHRoZSB0ZXh0
dXJlJ3MgY29vcmRpbnFhdGVzLgorICAgICAgICB0YXJnZXRSZWN0Lm1vdmUoLXRpbGUucmVjdC54
KCksIC10aWxlLnJlY3QueSgpKTsKKyAgICAgICAgdGlsZS50ZXh0dXJlLT51cGRhdGVDb250ZW50
cyhpbWFnZS5nZXQoKSwgdGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UkdC
QUZvcm1hdCk7CiAgICAgfQogCiAgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBm
YWxzZTsKQEAgLTQ4MSw3ICs0OTMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckFs
bERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKQogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGJp
dHMpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGlu
dCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKIApA
QCAtNDk4LDcgKzUxMCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGls
ZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSCiAgICAgaWYgKCF0aWxl
LmJhY2tCdWZmZXIudGV4dHVyZSkKICAgICAgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUgPSBt
X3RleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKICAgICB0aWxlLmJhY2tCdWZmZXIudGV4
dHVyZS0+cmVzZXQoc291cmNlUmVjdC5zaXplKCksIGZhbHNlKTsKLSAgICB0aWxlLmJhY2tCdWZm
ZXIudGV4dHVyZS0+dXBkYXRlUmF3Q29udGVudHMoc291cmNlUmVjdCwgYml0cyk7CisgICAgdGls
ZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGRhdGEsIHNvdXJjZVJlY3QpOwog
ICAgIHRpbGUuaXNCYWNrQnVmZmVyVXBkYXRlZCA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmgKaW5kZXggZmU0YjE0Yy4uMjMwYzllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKQEAg
LTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaWxlT3duZXJzaGlwKFRpbGVP
d25lcnNoaXAgb3duZXJzaGlwKSB7IG1fc3RhdGUudGlsZU93bmVyc2hpcCA9IG93bmVyc2hpcDsg
fQogICAgIGludCBjcmVhdGVDb250ZW50c1RpbGUoZmxvYXQgc2NhbGUpOwogICAgIHZvaWQgcmVt
b3ZlQ29udGVudHNUaWxlKGludCBpZCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c1RpbGVCYWNrQnVm
ZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3Qgdm9pZCogYml0cyk7CisgICAgdm9pZCBzZXRDb250ZW50c1RpbGVCYWNr
QnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3Qgdm9pZCopOwogICAgIHZvaWQgc2V0VGlsZUJhY2tCdWZmZXJUZXh0
dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIEJpdG1hcFRleHR1cmUqKTsKICAg
ICB2b2lkIGNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpOwogICAgIHZvaWQg
cHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3Bw
CmluZGV4IGM4ZThkYWQuLjc0MTg4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcApA
QCAtMzM2LDcgKzMzNiw2IEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRl
ZExheWVycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEluCiAgICAgdGV4dHVyZU1h
cHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHRleHR1cmVNYXBwZXItPnNl
dEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dC0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dC0+
dGV4dERyYXdpbmdNb2RlKCkpOwotICAgIHRleHR1cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShm
cmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXplKCkpOwogICAgIFFQYWludGVyKiBwYWludGVy
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgUVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBwYWludGVyLT53b3JsZFRyYW5zZm9ybSgpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNmFlZmQ3MC4uZTAxZTcyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMS0zMCAgTm8nYW0gUm9zZW50aGFs
ICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtRdF1bVGV4bWFwXSBSZWZh
Y3RvciBUZXh0dXJlTWFwcGVyIEFQSSB0byB1c2UgSW1hZ2VCdWZmZXJzIHdoZW4gcG9zc2libGUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzE0OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSB1
bnVzZWQgVGV4dHVyZU1hcHBlciBBUEkgY2FsbHMsIGxpa2Ugc2V0Vmlld3BvcnRTaXplLgorICAg
ICAgICBVc2UgVGV4dHVyZU1hcHBlcjo6QWNjZWxlcmF0aW9uTW9kZSBpbnN0ZWFkIG9mIGNyZWF0
aW5nIFRleHR1cmVNYXBwZXJHTC9UZXh0dXJlTWFwcGVyUXQKKyAgICAgICAgZGlyZWN0bHkuCisK
KyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6
OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VD
bGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorCiAyMDEyLTAxLTMwICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2Ugbm9uLUNTU09NIEFQSSBvZiBD
U1NTdHlsZURlY2xhcmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BhZ2VDbGllbnRRdC5jcHAKaW5kZXggNDBlNmIxNC4uNDVkY2ZiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcApAQCAtMjgsMTIgKzI4
LDggQEAKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclF0LmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIgot
Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotI2luY2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuaCIKLSNlbmRpZgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc2LDcg
KzcyLDcgQEAgdm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7CiAgICAgICAgIHRleHR1cmVN
YXBwZXJOb2RlQ2xpZW50ID0gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQo
cGFnZS0+bWFpbkZyYW1lKCksIGxheWVyKSk7Ci0gICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50LT5zZXRUZXh0dXJlTWFwcGVyKGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyUXQpKTsKKyAg
ICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlcjo6Y3JlYXRlKCkpOwogICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jv
b3RMYXllcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjY3LDExICsyNjMsMTEgQEAg
dm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFw
aGljc0xheWVyKiBsYXllcikKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAgICAgIFFH
cmFwaGljc1ZpZXcqIGdyYXBoaWNzVmlldyA9IHZpZXctPnNjZW5lKCktPnZpZXdzKClbMF07CiAg
ICAgICAgIGlmIChncmFwaGljc1ZpZXcgJiYgZ3JhcGhpY3NWaWV3LT52aWV3cG9ydCgpICYmIGdy
YXBoaWNzVmlldy0+dmlld3BvcnQoKS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7Ci0gICAgICAg
ICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyR0w6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5z
ZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVu
R0xNb2RlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRpZgotICAgICAg
ICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
UXQ6OmNyZWF0ZSgpKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzc5
NDU5ZC4uMTY0NWI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTMwICBO
bydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0
XVtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXIgQVBJIHRvIHVzZSBJbWFnZUJ1ZmZlcnMg
d2hlbiBwb3NzaWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc3MTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVXNlIFRleHR1cmVNYXBwZXI6OkFjY2VsZXJhdGlvbk1vZGUgaW5zdGVhZCBvZiBjcmVh
dGluZyBUZXh0dXJlTWFwcGVyR0wgZGlyZWN0bHkuCisgICAgICAgIFVzZSB0aGUgbmV3IEFQSSBj
YWxscyBmb3IgdXBkYXRpbmcgQml0bWFwVGV4dHVyZSBjb250ZW50LgorCisgICAgICAgICogVUlQ
cm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcik6CisKIDIwMTItMDEtMzAgIEJldGggRGFraW4g
IDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NzI2MwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKaW5kZXggMWY2MDY1ZS4uODg3YjgzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQu
Y3BwCkBAIC0yNiw4ICsyNiw3IEBACiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1ZGUg
Ik1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgpAQCAt
MTcxLDggKzE3MCw4IEBAIExheWVyVHJlZUhvc3RQcm94eTo6fkxheWVyVHJlZUhvc3RQcm94eSgp
CiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKIHsKICAgICBpZiAo
IW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBl
ckdMOjpjcmVhdGUoKTsKLSAgICBBU1NFUlQoZHluYW1pY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+
KG1fdGV4dHVyZU1hcHBlci5nZXQoKSkpOworICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0
dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAgQVNTRVJU
KG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9w
ZW5HTE1vZGUpOwogCiAgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKICAgICBHcmFwaGljc0xheWVy
KiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CkBAIC0xODQsOSArMTgzLDYgQEAgdm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXQKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZp
ZXdwb3J0KTsKLSAgICBtX3RleHR1cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKHZp
ZXdwb3J0WzJdLCB2aWV3cG9ydFszXSkpOwogICAgIG5vZGUtPnNldFRleHR1cmVNYXBwZXIobV90
ZXh0dXJlTWFwcGVyLmdldCgpKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmco
KTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOwpAQCAtMjA5LDkgKzIwNSw4
IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFp
bnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciogcGFpbnRlcikKIHsKICAgICBpZiAoIW1fdGV4
dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlclF0Ojpj
cmVhdGUoKTsKLSAgICBBU1NFUlQoZHluYW1pY19jYXN0PFRleHR1cmVNYXBwZXJRdCo+KG1fdGV4
dHVyZU1hcHBlci5nZXQoKSkpOwotCisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVN
YXBwZXI6OmNyZWF0ZSgpOworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlv
bk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOwogICAgIHN5bmNSZW1vdGVD
b250ZW50KCk7CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJO
b2RlKHJvb3RMYXllcigpKTsKIApAQCAtNDA4LDcgKzQwMyw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpjcmVhdGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFNoYXJlYWJsZUJpdG1hcCogYml0
bWFwKQogICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2UuY29weShyZWN0KTsKICAgICAg
ICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5j
cmVhdGVUZXh0dXJlKCk7CiAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChyZWN0LnNpemUoKSwg
IWltYWdlSGFzQWxwaGEpOwotICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRlUmF3Q29udGVudHMo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSksIHN1YkltYWdlLmNvbnN0Qml0
cygpKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlLmNvbnN0Qml0
cygpLCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAg
ICB0aWxlZEltYWdlLmFkZChyZWN0LmxvY2F0aW9uKCksIHRleHR1cmUpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNDcxLDcgKzQ2Niw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVS
b290TGF5ZXIoKQogICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNp
emUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCiAgICAgbV9yb290TGF5ZXItPnNldFNp
emUoRmxvYXRTaXplKDEuMCwgMS4wKSk7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAg
ICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7CisgICAgICAg
IG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpP
cGVuR0xNb2RlKTsKICAgICB0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdExheWVyLmdldCgpKS0+
c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124715</attachid>
            <date>2012-01-31 06:12:32 -0800</date>
            <delta_ts>2012-02-02 16:07:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>58649</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MDc3Y2U1Li5kMjAyNmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTItMDEtMzAgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8g
dXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIFRleHR1cmVNYXBwZXJRdCwgYW5kIGluc3Rl
YWQgY3JlYXRlZCBhIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBjbGFzcywKKyAgICAgICAgd2hp
Y2ggcmVzcG9uZHMgdG8gYW4gIlVuYWNjZWxlcmF0ZWQiIG1vZGUgb2YgVGV4dHVyZU1hcHBlciwg
aW5zdGVhZCBvZiBjcmVhdGluZyBzdWJjbGFzc2VzCisgICAgICAgIG9mIFRleHR1cmVNYXBwZXIg
ZGlyZWN0bHkuIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBzb2Z0d2FyZSBmYWxsYmFjayBvZiBUZXh0
dXJlTWFwcGVyIGJ5IGFueQorICAgICAgICBwb3J0LgorCisgICAgICAgIFRvIG1ha2UgdGhlIElt
YWdlQnVmZmVyIGJhY2tlbmQgZWFzaWVyLCBjb250ZW50IHVwZGF0ZXMgdG8gQml0bWFwVGV4dHVy
ZSBjYW4gbm93IHVzZSBlaXRoZXIKKyAgICAgICAgYW4gaW1hZ2UsIG9yIGEgcmF3IGRhdGEgcG9p
bnRlci4gVGhlIHJhdyBkYXRhIHBvaW50ZXIgaXMgcHJvdmlkZWQgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMsCisgICAgICAgIGFzIGNvbnZlcnRpbmcgZGF0YSB0by9mcm9tIEltYWdlIHJlZmVyZW5j
ZXMgaW4gUXQgZ2VuZXJhdGVzIHVubmVjZXNzYXJ5IGRlZXAgY29waWVzIG9mIHRoZQorICAgICAg
ICBpbWFnZSBkYXRhLgorCisgICAgICAgIEFsc28sIGZ1bmN0aW9ucyB0aGF0IHVzZSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB3ZXJlIGFkZGVkIHRvIEdyYXBoaWNzQ29udGV4dCwgdG8gYWxsb3cgZm9y
CisgICAgICAgIDNEIHRyYW5zZm9ybXMgaW4gY3Jvc3MgcGxhdGZvcm0gY29kZS4gVGhlIGZhbGxi
YWNrIGNvZGUgc3RpbGwgdXNlcyB0aGUgMkQgQ1RNcy4KKworICAgICAgICBBZnRlciB0aGlzIHBh
dGNoIGV2ZXJ5dGhpbmcgcmVuZGVycyB0aGUgc2FtZSwgYW5kIHRoZXJlIGFyZSBubyBuZXcgaW1h
Z2UgZGVlcCBjb3BpZXMuCisKKyAgICAgICAgTm8gYmVoYXZpb3JhbCBjaGFuZ2VzLgorCisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldFRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTERhdGEpOgor
ICAgICAgICAoQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJl
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnN3aXp6bGVSR0IpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9y
bUNyZWF0ZUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmFjY2VsZXJhdGlv
bk1vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmdldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFRyYW5zZm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpCaXRtYXBUZXh0dXJlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YnBwKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmU6OmlzT3BhcXVlKToKKyAgICAgICAgKCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlcjo6Z3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oOgorICAgICAgICAoVGV4dHVyZU1hcHBlck5vZGUpOgorCiAyMDEyLTAxLTMwICBNaWhu
ZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1NSZWdpb25zXUFk
ZCBzdXBwb3J0IGZvciBiYWNrZ3JvdW5kLWNvbG9yIGluIHJlZ2lvbiBzdHlsaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQppbmRleCBiMzRjNTQyLi43MGI4Y2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NDEsNyArMzk0MSw2
IEBAIHdpbjMyOiF3aW4zMi1nKysqOmNvbnRhaW5zKFFNQUtFX0hPU1QuYXJjaCwgeDg2XzY0KTp7
CiAKIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgSEVBREVSUyArPSBcCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXApAQCAtMzk1MCw3ICszOTQ5
LDYgQEAgY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIAogICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCkBA
IC0zOTYxLDYgKzM5NTksNyBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBI
RUFERVJTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAogICAg
ICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCiAgICAgICAgIENPTkZJRyArPSBvcGVuZ2wtc2hpbXMKKyAgICAgICAgREVGSU5FUyArPSBX
VEZfVVNFX1RFWFRVUkVfTUFQUEVSX0dMCiAgICAgfQogfSBlbHNlIHsKICAgICBIRUFERVJTICs9
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA0NzVm
ZGIzLi5kYmQ1MmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAj
aW5jbHVkZSAiVGV4dFJ1bi5oIgogCkBAIC03NzYsNCArNzc3LDI0IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQog
ICAgIHBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCisjaWYgRU5BQkxFKDNE
X1JFTkRFUklORykKKy8vIFRoZXNlIGZ1Y3Rpb25zIHNob3VsZCBiZSBpbXBsZW1lbnRlZCB0byBz
dXBwb3J0IHNvZnR3YXJlLXJlbmRlcmluZyBvZiAzRCB0cmFuc2Zvcm1zLgorI2lmICFQTEFURk9S
TShRVCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXQzRFRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBH
cmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworfQorI2VuZGlmCisj
ZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKaW5kZXggZGVhOTUwYi4uNTQ5ODVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEyNCw2ICsxMjQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOworICAgIGNsYXNzIFRyYW5zZm9ybWF0
aW9uTWF0cml4OwogCiAgICAgZW51bSBUZXh0RHJhd2luZ01vZGUgewogICAgICAgICBUZXh0TW9k
ZUludmlzaWJsZSA9IDAsCkBAIC00MDksNiArNDEwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdDsKIAorI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcp
CisgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQtY29tcG9z
aXRpbmcgaW4gc29mdHdhcmUgbW9kZSwgbGlrZSBpbiBUZXh0dXJlTWFwcGVyLgorICAgICAgICB2
b2lkIGNvbmNhdDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAg
ICAgIHZvaWQgc2V0M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0M0RUcmFuc2Zvcm0oKSBjb25zdDsKKyNlbmRp
ZgogICAgICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGlz
IGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbgogICAgICAgICAvLyBmb3IgZHJhd2lu
ZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgICAgIFBh
c3NPd25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgSW50U2l6
ZSYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAKaW5kZXggNjFkOGIyMC4uZTcyOTUx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4
dHVyZU1hcHBlckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwCkBAIC0xMTUsMTEgKzExNSw2IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckNhaXJvOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0
dXJlLCBjb25zdCBGbG9hdFJlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFzc093blB0
cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckNhaXJvKTsK
LX0KLQogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyQ2Fpcm86OmNyZWF0
ZVRleHR1cmUoKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZUNhaXJv
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCBkZTA0MWJmLi4yZmRmMWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmNwcApAQCAtMjYzLDU3ICsyNjMsNiBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBl
ckdMRGF0YSB7CiAKICAgICB9OwogCi0gICAgc3RydWN0IERpcmVjdGx5Q29tcG9zaXRlZEltYWdl
UmVwb3NpdG9yeSB7Ci0gICAgICAgIHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgICAgICBHTHVpbnQg
dGV4dHVyZTsKLSAgICAgICAgICAgIGludCByZWZDb3VudDsKLSAgICAgICAgfTsKLSAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPEltYWdlVUlELCBFbnRyeT4gSW1hZ2VUZXh0dXJlTWFwOwotICAgICAg
ICBJbWFnZVRleHR1cmVNYXAgaW1hZ2VUb1RleHR1cmU7Ci0KLSAgICAgICAgR0x1aW50IGZpbmRP
ckNyZWF0ZShJbWFnZVVJRCBpbWFnZSwgYm9vbCYgZm91bmQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEltYWdlVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGlt
YWdlKTsKLSAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoaXQgIT0g
aW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNv
dW50Kys7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJl
dHVybiBpdC0+c2Vjb25kLnRleHR1cmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBFbnRy
eSBlbnRyeTsKLSAgICAgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0
dXJlKSk7Ci0gICAgICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7Ci0gICAgICAgICAgICBpbWFn
ZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKLSAgICAgICAgICAgIHJldHVybiBlbnRyeS50
ZXh0dXJlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBkZXJlZihJbWFnZVVJRCBpbWFnZSkK
LSAgICAgICAgewotICAgICAgICAgICAgSGFzaE1hcDxJbWFnZVVJRCwgRW50cnk+OjppdGVyYXRv
ciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAgICAgICAgICAgaWYgKGl0ICE9
IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
cmVmQ291bnQgPCAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLnJlbW92
ZShpdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIERpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgpCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIH5EaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnko
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEltYWdlVGV4dHVyZU1hcDo6aXRlcmF0b3Ig
aXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdpbigpOyBpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlID0gaXQtPnNlY29uZC50ZXh0
dXJlOwotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKQotICAgICAgICAgICAgICAgICAgICBH
TF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSkpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgIH0KLSAgICB9IGRpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKLQogICAgIFNoYXJlZEdM
RGF0YSYgc2hhcmVkR0xEYXRhKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAqKG1fc2hh
cmVkR0xEYXRhLmdldCgpKTsKQEAgLTMyNyw2ICsyNzYsNyBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBl
ckdMRGF0YSB7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAg
ICBpbnQgY3VycmVudFByb2dyYW07CiAgICAgaW50IHByZXZpb3VzUHJvZ3JhbTsKKyAgICBHTGlu
dCB2aWV3cG9ydFs0XTsKICAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsK
IH07CiAKQEAgLTMzNyw1NiArMjg3LDI1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiwgYm9v
bCBvcGFxdWUpOwogICAgIHZvaWQgYmluZCgpOwotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2aXJ0
dWFsIHZvaWQgZW5kUGFpbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKik7CiAgICAgfkJpdG1hcFRleHR1cmVHTCgpIHsgZGVzdHJveSgpOyB9CiAgICAgdmly
dHVhbCB1aW50MzJfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBpbmxpbmUgYm9v
bCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAgICAgaW5saW5lIEZsb2F0
U2l6ZSByZWxhdGl2ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0aXZlU2l6ZTsgfQogICAg
IHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1
cmVNYXBwZXIgPSB0ZXhtYXA7IH0KLQotICAgIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxGb3Jt
YXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKik7Ci0gICAgdm9pZCB1cGRhdGVSYXdDb250ZW50cyhj
b25zdCBJbnRSZWN0JiwgY29uc3Qgdm9pZCopOwotICAgIHZvaWQgcGFjaygpCi0gICAgewotICAg
ICAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBhIHN0dWIuCi0gICAgICAgIGlmIChpc1BhY2tlZCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2lzUGFja2VkID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICB2b2lkIHVucGFjaygpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGN1cnJlbnRs
eSBhIHN0dWIuCi0gICAgICAgIGlmICghaXNQYWNrZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgbV9pc1BhY2tlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaXNQYWNrZWQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faXNQYWNrZWQ7Ci0gICAgfQorICAgIHZv
aWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYs
IFBpeGVsRm9ybWF0KTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25z
dCBJbnRSZWN0Jik7CiAKIHByaXZhdGU6CiAgICAgR0x1aW50IG1faWQ7Ci0gICAgSW1hZ2VVSUQg
bV9pbWFnZVVJRDsKICAgICBGbG9hdFNpemUgbV9yZWxhdGl2ZVNpemU7Ci0gICAgYm9vbCBtX29w
YXF1ZTsKICAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7Ci0gICAgT3duUHRyPEJHUkEzMlByZW11
bHRpbXBsaWVkQnVmZmVyPiBtX2J1ZmZlcjsKICAgICBJbnRSZWN0IG1fZGlydHlSZWN0OwogICAg
IEdMdWludCBtX2ZibzsKICAgICBHTHVpbnQgbV9yYm87CiAgICAgSW50U2l6ZSBtX2FjdHVhbFNp
emU7CiAgICAgYm9vbCBtX3N1cmZhY2VOZWVkc1Jlc2V0OwotICAgIGJvb2wgbV9pc1BhY2tlZDsK
ICAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKICAgICBCaXRtYXBUZXh0dXJl
R0woKQogICAgICAgICA6IG1faWQoMCkKLSAgICAgICAgLCBtX2ltYWdlVUlEKDApCi0gICAgICAg
ICwgbV9vcGFxdWUoZmFsc2UpCiAgICAgICAgICwgbV9mYm8oMCkKICAgICAgICAgLCBtX3Jibygw
KQogICAgICAgICAsIG1fc3VyZmFjZU5lZWRzUmVzZXQodHJ1ZSkKQEAgLTUzMiw2ICs0NTEsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZygpCiAgICAgfQogICAgIGdsQ2xl
YXJTdGVuY2lsKDApOwogICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICBn
bEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpOwogICAgIGJpbmRTdXJm
YWNlKDApOwogI2VuZGlmCiB9CkBAIC02NDUsNyArNTY1LDYgQEAgc3RhdGljIHZvaWQgdGV4SW1h
Z2UyRFJlc291cmNlU2FmZShzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpCiB2b2lkIEJpdG1h
cFRleHR1cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgYm9vbCBvcGFxdWUpCiB7
CiAgICAgQml0bWFwVGV4dHVyZTo6cmVzZXQobmV3U2l6ZSwgb3BhcXVlKTsKLSAgICBtX2ltYWdl
VUlEID0gMDsKICAgICBJbnRTaXplIG5ld1RleHR1cmVTaXplID0gbmV4dFBvd2VyT2ZUd28obmV3
U2l6ZSk7CiAgICAgYm9vbCBqdXN0Q3JlYXRlZCA9IGZhbHNlOwogICAgIGlmICghbV9pZCkgewpA
QCAtNjY0LDI4ICs1ODMsMTAgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0IElu
dFNpemUmIG5ld1NpemUsIGJvb2wgb3BhcXVlKQogICAgIH0KICAgICBtX2FjdHVhbFNpemUgPSBu
ZXdTaXplOwogICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRTaXplKGZsb2F0KG5ld1NpemUud2lk
dGgoKSkgLyBtX3RleHR1cmVTaXplLndpZHRoKCksIGZsb2F0KG5ld1NpemUuaGVpZ2h0KCkpIC8g
bV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9vcGFxdWUgPSBvcGFxdWU7CiAgICAgbV9z
dXJmYWNlTmVlZHNSZXNldCA9IHRydWU7CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBC
aXRtYXBUZXh0dXJlR0w6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewot
ICAgIG1fYnVmZmVyID0gQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNyZWF0ZSgpOwotICAg
IG1fZGlydHlSZWN0ID0gZGlydHlSZWN0OwotICAgIHJldHVybiBtX2J1ZmZlci0+YmVnaW5QYWlu
dChkaXJ0eVJlY3QsIG1fb3BhcXVlKTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmVuZFBh
aW50KCkKLXsKLSAgICBpZiAoIW1fYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9idWZm
ZXItPmVuZFBhaW50KCk7Ci0gICAgdXBkYXRlQ29udGVudHMoQkdSQUZvcm1hdCwgbV9kaXJ0eVJl
Y3QsIG1fYnVmZmVyLT5kYXRhKCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG1faWQpKQotICAgIG1fYnVmZmVyLmNsZWFyKCk7Ci19CiAKLSNpZmRlZiBURVhNQVBf
T1BFTkdMX0VTXzIKIHN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBkYXRh
LCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsK
QEAgLTY5Niw3OSArNTk3LDMxIEBAIHN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQz
Ml90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgcFt4XSA9ICgocFt4
XSA8PCAxNikgJiAweGZmMDAwMCkgfCAoKHBbeF0gPj4gMTYpICYgMHhmZikgfCAocFt4XSAmIDB4
ZmYwMGZmMDApOwogICAgIH0KIH0KLSNlbmRpZgogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBk
YXRlQ29udGVudHMoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IHZvaWQqIGJpdHMpCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qg
dm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKICAgICBHTF9DTUQoZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VT
XzIKLSAgICBib29sIHNob3VsZFN3aXp6bGUgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgR0xpbnQg
Z2xGb3JtYXQgPSBHTF9SR0JBOwotICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKLSAgICBjYXNl
IFJHQkFGb3JtYXQ6Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSR0JGb3JtYXQ6Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEJHUkFGb3JtYXQ6Ci0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18y
Ci0gICAgICAgIHNob3VsZFN3aXp6bGUgPSB0cnVlOwotICAgICAgICBnbEZvcm1hdCA9IEdMX1JH
QkE7Ci0jZWxzZQotICAgICAgICBnbEZvcm1hdCA9IEdMX0JHUkE7Ci0jZW5kaWYKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBCR1JGb3JtYXQ6Ci0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18yCi0g
ICAgICAgIHNob3VsZFN3aXp6bGUgPSB0cnVlOwotICAgICAgICBnbEZvcm1hdCA9IEdMX1JHQjsK
LSNlbHNlCi0gICAgICAgIGdsRm9ybWF0ID0gR0xfQkdSOwotI2VuZGlmCi0gICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBpZiAoc2hvdWxkU3dp
enpsZSkKLSAgICAgICAgc3dpenpsZUJHUkFUb1JHQkEoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihi
aXRzKSwgcmVjdC5zaXplKCkpOwotI2VuZGlmCi0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGJpdHMpKQorICAgIEdMX0NNRChn
bFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJl
Y3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIGRhdGEpKQogfQogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBk
YXRlUmF3Q29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qgdm9pZCogYml0cykKK3Zv
aWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1
cmU6OlBpeGVsRm9ybWF0IGZvcm1hdCkKIHsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1
cm47CiAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCiAgICAg
R0x1aW50IGdsRm9ybWF0ID0gaXNPcGFxdWUoKSA/IEdMX1JHQiA6IEdMX1JHQkE7Ci0gICAgR0xf
Q01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IGJpdHMpKQotfQotCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKElt
YWdlKiBpbWFnZSkKLXsKLSAgICBJbWFnZVVJRCB1aWQgPSBpbWFnZSA/IHVpZEZvckltYWdlKGlt
YWdlKSA6IDA7Ci0gICAgaWYgKCFpbWFnZSB8fCAhdWlkKSB7Ci0gICAgICAgIGlmIChtX2ltYWdl
VUlEKQotICAgICAgICAgICAgZGVzdHJveSgpOworICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1h
Z2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAodWlkID09IG1faW1hZ2VV
SUQpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgR0x1aW50
IG5ld1RleHR1cmVJRCA9IG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5maW5kT3JDcmVhdGUodWlkLCBmb3VuZCk7Ci0gICAgaWYgKG5ld1RleHR1cmVJRCAh
PSBtX2lkKSB7Ci0gICAgICAgIG1faW1hZ2VVSUQgPSB1aWQ7Ci0gICAgICAgIGRlc3Ryb3koKTsK
LSAgICAgICAgbV9pZCA9IG5ld1RleHR1cmVJRDsKLSAgICAgICAgcmVzZXQoaW1hZ2UtPnNpemUo
KSwgZmFsc2UpOwotICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dChiZWdpblBhaW50KEludFJlY3QoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0
aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSkpOwotICAgICAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApLCBDb21wb3Np
dGVDb3B5KTsKLSAgICAgICAgICAgIGVuZFBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9CisjaWYg
UExBVEZPUk0oUVQpCisgICAgUUltYWdlIHF0SW1hZ2UgPSBmcmFtZUltYWdlLT50b0ltYWdlKCk7
CisgICAgaWYgKEludFNpemUocXRJbWFnZS5zaXplKCkpICE9IHNvdXJjZVJlY3Quc2l6ZSgpKQor
ICAgICAgICBxdEltYWdlID0gcXRJbWFnZS5jb3B5KHNvdXJjZVJlY3QpOworICAgIGlmIChmb3Jt
YXQgPT0gQkdSQUZvcm1hdCB8fCBmb3JtYXQgPT0gQkdSRm9ybWF0KQorICAgICAgICBzd2l6emxl
QkdSQVRvUkdCQShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocXRJbWFnZS5iaXRzKCkpLCBx
dEltYWdlLnNpemUoKSk7CisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwg
dGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIHF0SW1hZ2Uu
Y29uc3RCaXRzKCkpKQorI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25N
YXRyaXggY3JlYXRlUHJvamVjdGlvbk1hdHJpeChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGZs
aXApCkBAIC04MjAsNyArNjczLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQogCiB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSgpCiB7Ci0gICAgaWYgKG1faWQgJiYgKCFtX2lt
YWdlVUlEIHx8ICFtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXMuZGVyZWYobV9pbWFnZVVJRCkpKQorICAgIGlmIChtX2lkKQogICAgICAgICBHTF9DTUQoZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpCiAKICAgICBpZiAobV9mYm8pCkBAIC04NTUsMTEgKzcw
OCwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAq
c3VyZmFjZVBvaW50ZXIpCiAgICAgQml0bWFwVGV4dHVyZUdMKiBzdXJmYWNlID0gc3RhdGljX2Nh
c3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFjZVBvaW50ZXIpOwogCiAgICAgaWYgKCFzdXJmYWNl
KSB7CisgICAgICAgIEludFNpemUgdmlld3BvcnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0
YSgpLnZpZXdwb3J0WzNdKTsKICAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCAwKSkKLSAgICAgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQ
cm9qZWN0aW9uTWF0cml4KHZpZXdwb3J0U2l6ZSgpLCB0cnVlKS5tdWx0aXBseSh0cmFuc2Zvcm0o
KSk7CisgICAgICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1h
dHJpeCh2aWV3cG9ydFNpemUsIHRydWUpOwogICAgICAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhk
YXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4ID4gMSA/IEdMX0VRVUFMIDogR0xfQUxX
QVlTLCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4IC0gMSwgZGF0YSgpLnNoYXJl
ZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEpKQogICAgICAgICBHTF9DTUQoZ2xTdGVuY2lsT3Ao
R0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpCi0gICAgICAgIEdMX0NNRChnbFZpZXdwb3J0KDAs
IDAsIHZpZXdwb3J0U2l6ZSgpLndpZHRoKCksIHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpKSkKKyAg
ICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdw
b3J0U2l6ZS5oZWlnaHQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkxNiw0ICs3
NzAsOSBAQCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRl
VGV4dHVyZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKHRleHR1cmUpOwogfQogCitQYXNzT3duUHRy
PFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OnBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQo
KQoreworICAgIHJldHVybiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworfQorCiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVN
YXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5oCmluZGV4IGRkMmUxYTcuLmU0NmI4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgK
QEAgLTQzLDE2ICs0MywxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJl
KHVpbnQzMl90IHRleHR1cmUsIGJvb2wgb3BhcXVlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNv
bnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCBib29sIGZsaXApOwogICAgIHZpcnR1YWwg
dm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5kUGFpbnRpbmcoKTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOwogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogdHlwZSgpIGNvbnN0OwogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRl
eHR1cmVNYXBwZXJHTD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBw
ZXJHTCk7IH0KLSAgICB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKLSAgICB2b2lkIGVuZFBhaW50aW5n
KCk7CiAgICAgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0KICAgICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogICAgIHZpcnR1YWwgYm9vbCBpc09wZW5H
TEJhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHBsYXRmb3JtVXBkYXRl
Q29udGVudHMoTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jiwg
Qml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpOworICAgIHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9k
ZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gT3BlbkdMTW9kZTsgfQogCiBwcml2
YXRlOgogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1cm4gKm1f
ZGF0YTsgfQpAQCAtNjIsMTYgKzYzLDYgQEAgcHJpdmF0ZToKIH07CiAKIC8vIEFuIG9mZnNjcmVl
biBidWZmZXIgdG8gYmUgcmVuZGVyZWQgYnkgc29mdHdhcmUuCi1jbGFzcyBCR1JBMzJQcmVtdWx0
aW1wbGllZEJ1ZmZlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIoKSB7IH0KLSAgICB2aXJ0dWFs
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCwgYm9vbCBvcGFxdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkKiBkYXRhKCkgPSAwOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPEJH
UkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBjcmVhdGUoKTsKLX07Ci0KIHN0YXRpYyBpbmxpbmUg
aW50IG5leHRQb3dlck9mVHdvKGludCBudW0pCiB7CiAgICAgZm9yIChpbnQgaSA9IDB4MTAwMDAw
MDA7IGkgPiAwOyBpID4+PSAxKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IDkxNzNhNWQu
LmMxOTBhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIKIHsKICAgICBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFu
ZFJlc3RvcmVDb250ZXh0KCk7CiAKLSAgICBpZiAodGV4dHVyZU1hcHBlci0+aXNPcGVuR0xCYWNr
ZWQoKSkgeworICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4
dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSkgewogICAgICAgICBUZXh0dXJlTWFwcGVyR0wqIHRleG1h
cEdMID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlcik7CiAgICAg
ICAgIHRleG1hcEdMLT5kcmF3VGV4dHVyZShtX2NvbnRleHQtPm1fdGV4dHVyZSwgIW1fY29udGV4
dC0+bV9hdHRycy5hbHBoYSwgRmxvYXRTaXplKDEsIDEpLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9w
YWNpdHksIG1hc2ssIHRydWUgLyogZmxpcCAqLyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dFF0LmNwcAppbmRleCBlYzczYzNmZS4uMjYxYmJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAt
MTMzNSw2ICsxMzM1LDMyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgbV9kYXRhLT5wKCktPnNldFdvcmxkVHJhbnNm
b3JtKHRyYW5zZm9ybSk7CiB9CiAKKyNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQorVHJhbnNmb3Jt
YXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXQzRFRyYW5zZm9ybSgpIGNvbnN0Cit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCk7CisKKyAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPmNvbWJpbmVkVHJhbnNm
b3JtKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXQzRFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+cCgpLT5zZXRXb3JsZFRy
YW5zZm9ybSh0cmFuc2Zvcm0sIHRydWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEt
PnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCBmYWxzZSk7Cit9CisjZW5kaWYKKwog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgS1VSTCYsIGNvbnN0IElu
dFJlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2NDFjZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjYzICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclF0LmgiCi0KLSNp
bmNsdWRlIDxRdENvcmUvcWRlYnVnLmg+Ci0jaW5jbHVkZSA8UXRHdWkvcXBhaW50ZW5naW5lLmg+
Ci0jaW5jbHVkZSA8UXRHdWkvcXBpeG1hcC5oPgotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQotIyBpbmNsdWRlICJvcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgiCi0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6ZGVzdHJveSgpCi17Ci0gICAg
aWYgKG1fcGl4bWFwLnBhaW50aW5nQWN0aXZlKCkpCi0gICAgICAgIHFGYXRhbCgiRGVzdHJveWlu
ZyBhbiBhY3RpdmUgcGl4bWFwIik7Ci0gICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7Ci19Ci0KLXZv
aWQgQml0bWFwVGV4dHVyZVF0OjpyZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGlzT3Bh
cXVlKQotewotICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHNpemUsIGlzT3BhcXVlKTsKLQotICAg
IGlmIChzaXplLndpZHRoKCkgPiBtX3BpeG1hcC5zaXplKCkud2lkdGgoKSB8fCBzaXplLmhlaWdo
dCgpID4gbV9waXhtYXAuc2l6ZSgpLmhlaWdodCgpIHx8IG1fcGl4bWFwLmlzTnVsbCgpKQotICAg
ICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAg
ICBpZiAoIWlzT3BhcXVlKQotICAgICAgICBtX3BpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7
Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJlUXQ6OmJlZ2luUGFp
bnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIG1fcGFpbnRlci5iZWdpbigmbV9w
aXhtYXApOwotICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9wYWludGVyKTsKLSAg
ICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVf
Q2xlYXIpOwotICAgIG1fcGFpbnRlci5maWxsUmVjdChRUmVjdChkaXJ0eVJlY3QpLCBRdDo6dHJh
bnNwYXJlbnQpOwotICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNv
bXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKLSAgICByZXR1cm4gJm1fcGFpbnRlcjsKLX0KLQot
dm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmVuZFBhaW50KCkKLXsKLSAgICBtX3BhaW50ZXIuZW5kKCk7
Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0Ojp1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1hdCBw
aXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgdm9pZCogYml0cykKLXsKLSAgICBtX3Bh
aW50ZXIuYmVnaW4oJm1fcGl4bWFwKTsKLSAgICBRSW1hZ2U6OkZvcm1hdCBxdEZvcm1hdCA9IFFJ
bWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOwotICAgIGlmIChwaXhlbEZvcm1hdCA9
PSBCR1JGb3JtYXQgfHwgcGl4ZWxGb3JtYXQgPT0gUkdCRm9ybWF0KQotICAgICAgICBxdEZvcm1h
dCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOwotICAgIFFJbWFnZSBpbWFnZShzdGF0aWNfY2FzdDx1
Y2hhcio+KGJpdHMpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIHF0Rm9ybWF0KTsKLSAg
ICBpZiAocGl4ZWxGb3JtYXQgPT0gQkdSRm9ybWF0IHx8IHBpeGVsRm9ybWF0ID09IEJHUkFGb3Jt
YXQpCi0gICAgICAgIGltYWdlID0gaW1hZ2UucmdiU3dhcHBlZCgpOwotICAgIG1fcGFpbnRlci5z
ZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOwotICAg
IG1fcGFpbnRlci5kcmF3SW1hZ2UocmVjdCwgaW1hZ2UpOwotICAgIG1fcGFpbnRlci5lbmQoKTsK
LX0KLQotYm9vbCBCaXRtYXBUZXh0dXJlUXQ6OnNhdmUoY29uc3QgU3RyaW5nJiBwYXRoKQotewot
ICAgIHJldHVybiBtX3BpeG1hcC5zYXZlKHBhdGgsICJQTkciKTsKLX0KLQotdm9pZCBCaXRtYXBU
ZXh0dXJlUXQ6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYgKCFp
bWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFFQaXhtYXAqIHBpeG1hcCA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghcGl4bWFwKQotICAgICAg
ICByZXR1cm47Ci0gICAgQml0bWFwVGV4dHVyZTo6cmVzZXQocGl4bWFwLT5zaXplKCksICFwaXht
YXAtPmhhc0FscGhhQ2hhbm5lbCgpKTsKLSAgICBtX3BpeG1hcCA9ICpwaXhtYXA7Ci19Ci0KLXZv
aWQgQml0bWFwVGV4dHVyZVF0OjpwYWNrKCkKLXsKLSAgICBpZiAobV9waXhtYXAuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1faW1hZ2UgPSBtX3BpeG1hcC50b0ltYWdlKCk7Ci0g
ICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7Ci0gICAgbV9pc1BhY2tlZCA9IHRydWU7Ci19Ci0KLXZv
aWQgQml0bWFwVGV4dHVyZVF0Ojp1bnBhY2soKQotewotICAgIG1faXNQYWNrZWQgPSBmYWxzZTsK
LSAgICBpZiAobV9pbWFnZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9waXht
YXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UobV9pbWFnZSk7Ci0gICAgbV9pbWFnZSA9IFFJbWFnZSgp
OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICAgUVBhaW50
ZXIqIHBhaW50ZXIgPSBjdXJyZW50UGFpbnRlcigpOwotICAgICBwYWludGVyLT5zYXZlKCk7Ci0g
ICAgIFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50ZXItPnRyYW5zZm9ybSgpOwotICAg
ICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4LCBmYWxzZSk7Ci0gICAgIHBhaW50ZXItPnNl
dENsaXBSZWN0KHJlY3QpOwotICAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0ocHJldlRyYW5zZm9y
bSwgZmFsc2UpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6ZW5kQ2xpcCgpCi17Ci0gICAg
Y3VycmVudFBhaW50ZXIoKS0+cmVzdG9yZSgpOwotfQotCi1JbnRTaXplIFRleHR1cmVNYXBwZXJR
dDo6dmlld3BvcnRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX3BhaW50ZXIt
PmRldmljZSgpLT53aWR0aCgpLCBtX3BhaW50ZXItPmRldmljZSgpLT5oZWlnaHQoKSk7Ci19Ci0K
LQotVGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoKQotICAgIDogbV9jdXJyZW50U3Vy
ZmFjZSgwKQotewotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6c2V0R3JhcGhpY3NDb250ZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBtX2NvbnRleHQgPSBjb250ZXh0Owot
ICAgIG1fcGFpbnRlciA9IGNvbnRleHQgPyBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IDA7
Ci0gICAgaW5pdGlhbGl6ZShtX3BhaW50ZXIpOwotfQotCi1HcmFwaGljc0NvbnRleHQqIFRleHR1
cmVNYXBwZXJRdDo6Z3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0Owot
fQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3Vy
ZmFjZSkKLXsKLSAgICBpZiAobV9jdXJyZW50U3VyZmFjZSA9PSBzdXJmYWNlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKG1fY3VycmVudFN1cmZhY2UpCi0gICAgICAgIG1fY3VycmVudFN1cmZh
Y2UtPm1fcGFpbnRlci5lbmQoKTsKLSAgICBpZiAoIXN1cmZhY2UpIHsKLSAgICAgICAgbV9jdXJy
ZW50U3VyZmFjZSA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQml0bWFwVGV4dHVy
ZVF0KiBzdXJmYWNlUXQgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlUXQqPihzdXJmYWNlKTsK
LSAgICBpZiAoIXN1cmZhY2VRdC0+bV9wYWludGVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHN1cmZh
Y2VRdC0+bV9wYWludGVyLmJlZ2luKCZzdXJmYWNlUXQtPm1fcGl4bWFwKTsKLSAgICBtX2N1cnJl
bnRTdXJmYWNlID0gc3VyZmFjZVF0OwotfQotCi0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpkcmF3
VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQotewotICAgIGNvbnN0IEJpdG1h
cFRleHR1cmVRdCYgdGV4dHVyZVF0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZVF0
Jj4odGV4dHVyZSk7Ci0gICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX3BhaW50ZXI7Ci0gICAgUVBp
eG1hcCBwaXhtYXAgPSB0ZXh0dXJlUXQubV9waXhtYXA7Ci0gICAgaWYgKG1fY3VycmVudFN1cmZh
Y2UpCi0gICAgICAgIHBhaW50ZXIgPSAmbV9jdXJyZW50U3VyZmFjZS0+bV9wYWludGVyOwotCi0g
ICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
Y29uc3QgQml0bWFwVGV4dHVyZVF0KiBtYXNrID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4
dHVyZVF0Kj4obWFza1RleHR1cmUpOwotICAgICAgICBRUGl4bWFwIGludGVybWVkaWF0ZVBpeG1h
cChwaXhtYXAuc2l6ZSgpKTsKLSAgICAgICAgaW50ZXJtZWRpYXRlUGl4bWFwLmZpbGwoUXQ6OnRy
YW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50ZXIgbWFza1BhaW50ZXIoJmludGVybWVkaWF0ZVBp
eG1hcCk7Ci0gICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6
Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgIG1hc2tQYWludGVyLmRyYXdQaXhtYXAo
MCwgMCwgcGl4bWFwKTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQ
YWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7Ci0gICAgICAgIG1hc2tQYWlu
dGVyLmRyYXdQaXhtYXAoUVJlY3QoMCwgMCwgcGl4bWFwLndpZHRoKCksIHBpeG1hcC5oZWlnaHQo
KSksIG1hc2stPm1fcGl4bWFwLCBtYXNrLT5zb3VyY2VSZWN0KCkpOwotICAgICAgICBtYXNrUGFp
bnRlci5lbmQoKTsKLSAgICAgICAgcGl4bWFwID0gaW50ZXJtZWRpYXRlUGl4bWFwOwotICAgIH0K
LQotICAgIGNvbnN0IHFyZWFsIHByZXZPcGFjaXR5ID0gcGFpbnRlci0+b3BhY2l0eSgpOwotICAg
IGNvbnN0IFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50ZXItPnRyYW5zZm9ybSgpOwot
ICAgIHBhaW50ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgcGFpbnRlci0+c2V0VHJhbnNm
b3JtKG1hdHJpeCwgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LCBw
aXhtYXAsIEZsb2F0UmVjdCh0ZXh0dXJlUXQuc291cmNlUmVjdCgpKSk7Ci0gICAgcGFpbnRlci0+
c2V0VHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0pOwotICAgIHBhaW50ZXItPnNldE9wYWNpdHkocHJl
dk9wYWNpdHkpOwotfQotCi1QYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0jaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQotICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5w
YWludEVuZ2luZSgpLT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpPcGVuR0wyKQotICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJRdCk7Ci19Ci0KLVBhc3NSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gVGV4dHVyZU1hcHBlclF0OjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEJpdG1hcFRleHR1cmVRdCgpKTsKLX0KLQotQml0bWFwVGV4dHVyZVF0OjpCaXRt
YXBUZXh0dXJlUXQoKQotICAgIDogbV9pc1BhY2tlZChmYWxzZSkKLXsKLQotfQotCi12b2lkIFRl
eHR1cmVNYXBwZXJRdDo6YmVnaW5QYWludGluZygpCi17Ci0gICAgbV9wYWludGVyLT5zYXZlKCk7
Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjplbmRQYWludGluZygpCi17Ci0gICAgbV9wYWlu
dGVyLT5yZXN0b3JlKCk7Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi1jbGFzcyBC
R1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlclF0IDogcHVibGljIEJHUkEzMlByZW11bHRpbXBsaWVk
QnVmZmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBi
ZWdpblBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgb3BhcXVlKQotICAgIHsKLSAgICAg
ICAgLy8gbV9pbWFnZSBpcyBvbmx5IHVzaW5nIGR1cmluZyBwYWludCwgaXQncyBzYWZlIHRvIG92
ZXJyaWRlIGl0LgotICAgICAgICBtX2ltYWdlID0gUUltYWdlKHJlY3Quc2l6ZSgpLndpZHRoKCks
IHJlY3Quc2l6ZSgpLmhlaWdodCgpLCBvcGFxdWUgPyBRSW1hZ2U6OkZvcm1hdF9SR0IzMiA6IFFJ
bWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAgICAgICAgaWYgKCFvcGFxdWUp
Ci0gICAgICAgICAgICBtX2ltYWdlLmZpbGwoMCk7Ci0gICAgICAgIG1fcGFpbnRlci5iZWdpbigm
bV9pbWFnZSk7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9wYWludGVy
KTsKLSAgICAgICAgbV9wYWludGVyLnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7Ci0g
ICAgICAgIHJldHVybiAmbV9wYWludGVyOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBlbmRQ
YWludCgpIHsgbV9wYWludGVyLmVuZCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkKiBkYXRhKCkgeyBy
ZXR1cm4gbV9pbWFnZS5iaXRzKCk7IH0KLQotcHJpdmF0ZToKLSAgICBRUGFpbnRlciBtX3BhaW50
ZXI7Ci0gICAgUUltYWdlIG1faW1hZ2U7Ci19OwotCi1QYXNzT3duUHRyPEJHUkEzMlByZW11bHRp
bXBsaWVkQnVmZmVyPiBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQoKSk7Ci19
Ci0KLXVpbnQ2NF90IHVpZEZvckltYWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICByZXR1cm4gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPnNlcmlhbE51bWJlcigpOwotfQotI2Vu
ZGlmCi19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
VGV4dHVyZU1hcHBlclF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9U
ZXh0dXJlTWFwcGVyUXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmZWUwMy4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJl
TWFwcGVyUXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
Ci0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIu
aCIKLQotI2lmbmRlZiBUZXh0dXJlTWFwcGVyUXRfaAotI2RlZmluZSBUZXh0dXJlTWFwcGVyUXRf
aAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcFRleHR1cmVRdCA6IHB1Ymxp
YyBCaXRtYXBUZXh0dXJlIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlclF0OwotcHVi
bGljOgotICAgIEJpdG1hcFRleHR1cmVRdCgpOwotICAgIH5CaXRtYXBUZXh0dXJlUXQoKSB7IGRl
c3Ryb3koKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCBJbnRT
aXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fcGl4bWFwLndpZHRoKCksIG1fcGl4
bWFwLmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiwg
Ym9vbCBvcGFxdWUpOwotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2lu
UGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFp
bnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7Ci0gICAg
dmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BpeG1hcC5pc051bGwoKSB8fCAhbV9pbWFnZS5p
c051bGwoKTsgfQotICAgIEludFJlY3Qgc291cmNlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJl
Y3QoMCwgMCwgY29udGVudFNpemUoKS53aWR0aCgpLCBjb250ZW50U2l6ZSgpLmhlaWdodCgpKTsg
fQotICAgIHZpcnR1YWwgdm9pZCBwYWNrKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVucGFjaygpOwot
ICAgIHZpcnR1YWwgYm9vbCBpc1BhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYWNrZWQ7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQsIGNvbnN0IEludFJl
Y3QmLCB2b2lkKiBiaXRzKTsKLQotICAgIFFQYWludGVyKiBwYWludGVyKCkgeyByZXR1cm4gJm1f
cGFpbnRlcjsgfQotCi1wcml2YXRlOgotICAgIFFQYWludGVyIG1fcGFpbnRlcjsKLSAgICBRUGl4
bWFwIG1fcGl4bWFwOwotICAgIFFJbWFnZSBtX2ltYWdlOwotICAgIGJvb2wgbV9pc1BhY2tlZDsK
LX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJRdCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKLXB1
YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyUXQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4
dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFw
VGV4dHVyZSogc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBl
bmRDbGlwKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0Nv
bnRleHQqKTsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCk7
Ci0gICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKCk7Ci0gICAgdmlydHVhbCBJbnRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5n
KCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFFQYWludGVyKiBwYWludGVyKQotICAg
IHsKLSAgICAgICAgaWYgKHBhaW50ZXIpCi0gICAgICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJI
aW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nIHwgUVBhaW50ZXI6OlNtb290aFBpeG1hcFRyYW5z
Zm9ybSwgZmFsc2UpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBw
ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyUXQpOyB9Ci1w
cml2YXRlOgotICAgIGlubGluZSBRUGFpbnRlciogY3VycmVudFBhaW50ZXIoKSB7IHJldHVybiBt
X2N1cnJlbnRTdXJmYWNlID8gbV9jdXJyZW50U3VyZmFjZS0+cGFpbnRlcigpIDogbV9wYWludGVy
OyB9Ci0KLSAgICBRUGFpbnRlciogbV9wYWludGVyOwotICAgIEdyYXBoaWNzQ29udGV4dCogbV9j
b250ZXh0OwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlUXQ+IG1fY3VycmVudFN1cmZhY2U7Ci19
OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAppbmRleCBkZDMzZjBkLi42ODZhNTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuY3BwCkBAIC0yMCw2ICsyMCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcx
LDUgKzc0LDEzMyBAQCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXI6OmFj
cXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYgcwogICAgIHJldHVybiBzZWxlY3Rl
ZFRleHR1cmU7CiB9CiAKKworY2xhc3MgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyIDogcHVibGlj
IEJpdG1hcFRleHR1cmUgeworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVySW1hZ2VCdWZm
ZXI7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcik7IH0KKyAg
ICB+Qml0bWFwVGV4dHVyZUltYWdlQnVmZmVyKCkgeyBkZXN0cm95KCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveSgpIHsgbV9pbWFnZS5jbGVhcigpOyB9CisgICAgdmlydHVhbCBJbnRTaXpl
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLT5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUpCisgICAgeworICAgICAg
ICBCaXRtYXBUZXh0dXJlOjpyZXNldChzaXplLCBvcGFxdWUpOworICAgICAgICBtX2ltYWdlID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICBpbmxpbmUgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS0+Y29udGV4
dCgpIDogMDsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0
IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGl4ZWxGb3JtYXQpOworICAgIHZvaWQgdXBkYXRl
Q29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCk7Citw
cml2YXRlOgorICAgIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcigpIHsgfQorICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gbV9pbWFnZTsKK307CisKKworY2xhc3MgVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyIDogcHVibGljIFRleHR1cmVNYXBwZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBk
cmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJp
dG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpIHsgbV9jdXJyZW50U3Vy
ZmFjZSA9IHN1cmZhY2U7fQorICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCkgeyBncmFwaGljc0Nv
bnRleHQoKS0+cmVzdG9yZSgpOyB9CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBl
cj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
cik7IH0KKyAgICBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSB7IHJl
dHVybiBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpOyB9CisgICAgaW5saW5lIEdy
YXBoaWNzQ29udGV4dCogY3VycmVudENvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
Y3VycmVudFN1cmZhY2UgPyBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIqPiht
X2N1cnJlbnRTdXJmYWNlLmdldCgpKS0+Z3JhcGhpY3NDb250ZXh0KCkgOiBncmFwaGljc0NvbnRl
eHQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0aW9u
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIFNvZnR3YXJlTW9kZTsgfQorCitwcml2YXRlOgorICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBtX2N1cnJlbnRTdXJmYWNlOworfTsKKwordm9pZCBCaXRtYXBU
ZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QpCit7CisjaWYgUExBVEZPUk0oUVQpCisgICAgUUltYWdlIGlt
YWdlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWNoYXIqPihkYXRhKSwgdGFyZ2V0UmVjdC53aWR0
aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCB0YXJnZXRSZWN0LndpZHRoKCkgKiA0LCBRSW1hZ2U6
OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBt
X2ltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIHBhaW50ZXItPnNhdmUo
KTsKKyAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9u
TW9kZV9Tb3VyY2UpOworICAgIHBhaW50ZXItPmRyYXdJbWFnZSh0YXJnZXRSZWN0LCBpbWFnZSk7
CisgICAgcGFpbnRlci0+cmVzdG9yZSgpOworI2VuZGlmCit9CisKK3ZvaWQgQml0bWFwVGV4dHVy
ZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFBpeGVsRm9ybWF0KQorewor
ICAgIG1faW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCB0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBDb21wb3NpdGVDb3B5KTsKK30KKwordm9pZCBU
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0ID0gY3VycmVudENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKyNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQorICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHByZXZpb3VzVHJhbnNmb3JtID0gY29udGV4dC0+Z2V0M0RUcmFuc2Zvcm0oKTsKKyNl
bHNlCisgICAgQWZmaW5lVHJhbnNmb3JtIHByZXZpb3VzVHJhbnNmb3JtID0gY29udGV4dC0+Z2V0
Q1RNKCk7CisjZW5kaWYKKyAgICBjb250ZXh0LT5zYXZlKCk7CisKKyNpZiBFTkFCTEUoM0RfUkVO
REVSSU5HKQorICAgIGNvbnRleHQtPmNvbmNhdDNEVHJhbnNmb3JtKG1hdHJpeCk7CisjZWxzZQor
ICAgIGNvbnRleHQtPmNvbmNhdENUTShtYXRyaXgudG9BZmZpbmUoKSk7CisjZW5kaWYKKworICAg
IGNvbnRleHQtPmNsaXAocmVjdCk7CisKKyNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQorICAgIGNv
bnRleHQtPnNldDNEVHJhbnNmb3JtKHByZXZpb3VzVHJhbnNmb3JtKTsKKyNlbHNlCisgICAgY29u
dGV4dC0+c2V0Q1RNKHByZXZpb3VzVHJhbnNmb3JtKTsKKyNlbmRpZgorfQorCit2b2lkIFRleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4
dHVyZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBjdXJyZW50Q29udGV4dCgp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgQml0bWFw
VGV4dHVyZUltYWdlQnVmZmVyJiB0ZXh0dXJlSW1hZ2VCdWZmZXIgPSBzdGF0aWNfY2FzdDxjb25z
dCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXImPih0ZXh0dXJlKTsKKyAgICBJbWFnZUJ1ZmZlciog
aW1hZ2UgPSB0ZXh0dXJlSW1hZ2VCdWZmZXIubV9pbWFnZS5nZXQoKTsKKyAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IG1hc2tlZEltYWdlOworCisgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0
dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVy
KiBtYXNrID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyKj4obWFz
a1RleHR1cmUpOworICAgICAgICBtYXNrZWRJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFz
a1RleHR1cmUtPmNvbnRlbnRTaXplKCkpOworICAgICAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tD
b250ZXh0ID0gbWFza2VkSW1hZ2UtPmNvbnRleHQoKTsKKyAgICAgICAgbWFza0NvbnRleHQtPmRy
YXdJbWFnZUJ1ZmZlcihpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQ6Onplcm8o
KSwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGlmIChvcGFjaXR5IDwgMSkgeworICAgICAgICAg
ICAgbWFza0NvbnRleHQtPnNldEFscGhhKG9wYWNpdHkpOworICAgICAgICAgICAgb3BhY2l0eSA9
IDE7CisgICAgICAgIH0KKyAgICAgICAgbWFza0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtYXNr
LT5tX2ltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpLCBD
b21wb3NpdGVEZXN0aW5hdGlvbkluKTsKKyAgICAgICAgaW1hZ2UgPSBtYXNrZWRJbWFnZS5nZXQo
KTsKKyAgICB9CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgY29udGV4dC0+c2V0QWxwaGEo
b3BhY2l0eSk7CisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAgICBjb250ZXh0LT5jb25jYXQz
RFRyYW5zZm9ybShtYXRyaXgpOworI2Vsc2UKKyAgICBjb250ZXh0LT5jb25jYXRDVE0obWF0cml4
KTsKKyNlbmRpZgorICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgdGFyZ2V0UmVjdCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCitQ
YXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShBY2NlbGVyYXRp
b25Nb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gU29mdHdhcmVNb2RlKQorICAgICAgICBy
ZXR1cm4gVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gcGxh
dGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmlu
ZGV4IGQ2NmZlMmYuLjcwZWE0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtNDcsNDYgKzQ3LDMxIEBA
IGNsYXNzIFRleHR1cmVNYXBwZXI7CiBjbGFzcyBCaXRtYXBUZXh0dXJlICA6IHB1YmxpYyBSZWZD
b3VudGVkPEJpdG1hcFRleHR1cmU+IHsKIHB1YmxpYzoKICAgICBlbnVtIFBpeGVsRm9ybWF0IHsg
QkdSQUZvcm1hdCwgUkdCQUZvcm1hdCwgQkdSRm9ybWF0LCBSR0JGb3JtYXQgfTsKLSAgICBCaXRt
YXBUZXh0dXJlKCkgOiBtX2xvY2tDb3VudCgwKSB7fQorICAgIEJpdG1hcFRleHR1cmUoKQorICAg
ICAgICA6IG1faXNPcGFxdWUodHJ1ZSkKKyAgICB7CisgICAgfQorCiAgICAgdmlydHVhbCB+Qml0
bWFwVGV4dHVyZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgeyB9CiAKLSAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBpbnQgYnBwKCkgY29uc3QgeyByZXR1cm4gMzI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Q29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIEJpdG1hcFRl
eHR1cmU6OlBpeGVsRm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRz
KGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBpbnQgYnBwKCkgY29uc3QgeyByZXR1cm4g
MzI7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBv
cGFxdWUgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIG1faXNPcGFxdWUgPSBvcGFxdWU7CiAgICAg
ICAgIG1fY29udGVudFNpemUgPSBzaXplOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWNr
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVucGFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c1BhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpID0gMDsKLQotICAgIC8vIEZvciBwZXJmb3Jt
YW5jZSByZWFzb25zLCBCaXRtYXBUZXh0dXJlIG1pZ2h0IG1vZGlmeSB0aGUgYml0cyBkaXJlY3Rs
eSAoc3dpenpsZSkuCi0gICAgLy8gVGh1cywgdGhpcyBtZXRob2QgaXMgb25seSByZWNvbW1lbmRl
ZCBmb3IgYnVmZmVyIHVwZGF0ZSwgc3VjaCBhcyB1c2VkIGJ5IFdlYktpdDIuCi0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwgdm9pZCog
Yml0cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSYXdDb250ZW50cyhjb25zdCBJbnRS
ZWN0JiwgY29uc3Qgdm9pZCogYml0cykgeyB9Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogYmVnaW5QYWludE1lZGlhKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiZWdpblBh
aW50KEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwotICAg
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKikgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAg
ICBpbmxpbmUgdm9pZCBsb2NrKCkgeyArK21fbG9ja0NvdW50OyB9Ci0gICAgaW5saW5lIHZvaWQg
dW5sb2NrKCkgeyAtLW1fbG9ja0NvdW50OyB9Ci0gICAgaW5saW5lIGJvb2wgaXNMb2NrZWQoKSB7
IHJldHVybiBtX2xvY2tDb3VudDsgfQogICAgIGlubGluZSBJbnRTaXplIGNvbnRlbnRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50U2l6ZTsgfQogICAgIGlubGluZSBpbnQgbnVtYmVyT2ZC
eXRlcygpIGNvbnN0IHsgcmV0dXJuIHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpICog
YnBwKCkgPj4gMzsgfQorICAgIGlubGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4g
bV9pc09wYXF1ZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgaW50IG1fbG9ja0NvdW50OwogICAgIElu
dFNpemUgbV9jb250ZW50U2l6ZTsKICAgICBib29sIG1faXNPcGFxdWU7CiB9OwpAQCAtOTcsMzIg
KzgyLDI2IEBAIGNsYXNzIFRleHR1cmVNYXBwZXIgewogICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBU
ZXh0dXJlOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4g
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gMCk7CisgICAgZW51bSBB
Y2NlbGVyYXRpb25Nb2RlIHsgU29mdHdhcmVNb2RlLCBPcGVuR0xNb2RlIH07CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbmV3TW9k
ZSA9IFNvZnR3YXJlTW9kZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlcigpIHsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01h
dHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGZsb2F0IG9wYWNpdHkgPSAxLjBmLCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSA9IDApID0gMDsKIAogICAgIC8vIG1ha2VzIGEg
c3VyZmFjZSB0aGUgdGFyZ2V0IGZvciB0aGUgZm9sbG93aW5nIGRyYXdUZXh0dXJlIGNhbGxzLgog
ICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqKSA9
IDA7Ci0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogICAgIHZpcnR1YWwg
dm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJl
Y3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSA9IDA7Ci0gICAgSW50U2l6ZSB2aWV3
cG9ydFNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQotICAgIHZvaWQgc2V0
Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmIHMpIHsgbV92aWV3cG9ydFNpemUgPSBzOyB9CiAK
ICAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxp
dHkgcXVhbGl0eSkgeyBtX2ludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgfQogICAgIHZv
aWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV90ZXh0
RHJhd2luZ01vZGUgPSBtb2RlOyB9CiAKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcnBvbGF0aW9uUXVhbGl0
eTsgfQogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9Ci0gICAgdmlydHVhbCBib29sIGFsbG93UGFydGlh
bFVwZGF0ZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc09w
ZW5HTEJhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fdHJhbnNmb3JtID0g
bWF0cml4OyB9Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxl
cmF0aW9uTW9kZSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5n
KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCkgeyB9CkBAIC0xMzAsMjIgKzEw
OSwyOSBAQCBwdWJsaWM6CiAgICAgLy8gQSBzdXJmYWNlIGlzIHJlbGVhc2VkIGltcGxpY2l0bHkg
d2hlbiBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IGFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYpOwogCi0KIHByb3RlY3RlZDoK
ICAgICBUZXh0dXJlTWFwcGVyKCkKICAgICAgICAgOiBtX2ludGVycG9sYXRpb25RdWFsaXR5KElu
dGVycG9sYXRpb25EZWZhdWx0KQogICAgICAgICAsIG1fdGV4dERyYXdpbmdNb2RlKFRleHRNb2Rl
RmlsbCkKLSAgICB7fQorICAgIHsKKyAgICB9CiAKIHByaXZhdGU6CisjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IHBsYXRmb3Jt
Q3JlYXRlQWNjZWxlcmF0ZWQoKTsKKyNlbHNlCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4gcGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpCisgICAgeworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisjZW5kaWYKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9s
YXRpb25RdWFsaXR5OwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2Rl
OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIEludFNpemUgbV92
aWV3cG9ydFNpemU7CiAgICAgVmVjdG9yPFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IG1fdGV4dHVy
ZVBvb2w7CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7CiB9OwogCi19OworfQogCiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXggY2NmNDliYy4uNGZlMjI2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMu
aCIKIAogbmFtZXNwYWNlIHsKQEAgLTE1NiwxMiArMTU3LDEwIEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhp
Y3NMYXllCiAgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBGSVhNRTogQWRkIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzLgotICAgIEZsb2F0UmVjdCBk
aXJ0eVJlY3QgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6
IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdDsKKyAgICBJbnRSZWN0IGRpcnR5UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRp
cmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwogCiAgICAgZm9y
IChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsg
Kyt0aWxlSW5kZXgpIHsKICAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3Rp
bGVJbmRleF07Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gZGlydHlSZWN0OwogICAgICAgICBp
ZiAoIXRpbGUudGV4dHVyZSkKICAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1cmVNYXBw
ZXItPmNyZWF0ZVRleHR1cmUoKTsKICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+JiB0ZXh0
dXJlID0gdGlsZS50ZXh0dXJlOwpAQCAtMTY5LDMxICsxNjgsNDQgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFw
aGljc0xheWUKIAogICAgICAgICBpZiAodGlsZS5uZWVkc1Jlc2V0IHx8IHRleHR1cmUtPmNvbnRl
bnRTaXplKCkgIT0gdGlsZVNpemUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICAg
ICAgdGlsZS5uZWVkc1Jlc2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0
aWxlU2l6ZSwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRl
bnRUeXBlID8gZmFsc2UgOiBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsKLSAgICAgICAgICAgIHJl
Y3QgPSB0aWxlLnJlY3Q7CisgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9z
dGF0ZS5jb250ZW50c09wYXF1ZSk7CisgICAgICAgICAgICBkaXJ0eVJlY3QudW5pdGUoZW5jbG9z
aW5nSW50UmVjdCh0aWxlLnJlY3QpKTsKICAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkaXJ0
eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQYWludCB0aGUgZW50
aXJlIGRpcnR5IHJlY3QgaW50byBhbiBpbWFnZSBidWZmZXIuIFRoaXMgZW5zdXJlcyB3ZSBvbmx5
IHBhaW50IG9uY2UuCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoZGlydHlSZWN0LnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICB7CisgICAgICAgIGNvbnRleHQt
PnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKHRl
eHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNs
YXRlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7CisgICAgICAgIGxheWVyLT5wYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgaWYg
KG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkK
KyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdl
dCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCk7CisgICAgfQog
Ci0gICAgICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVj
dCk7Ci0gICAgICAgIGNvbnRlbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KHJlY3Qp
KTsKLSAgICAgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAvLyBUaGlzIHN1bGQg
YmUgYSByZWZlcmVuY2UgY29weSBvbmx5LgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBpbWFn
ZUJ1ZmZlci0+Y29weUltYWdlKCk7CisKKyAgICAvLyBEaXZpZGUgdGhlIGltYWdlIHRvIHRpbGVz
LgorICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxl
cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CisgICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3du
ZWRUaWxlc1t0aWxlSW5kZXhdOworICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KHRpbGUucmVjdCk7CisgICAgICAgIHRhcmdldFJlY3QuaW50ZXJzZWN0KGRpcnR5
UmVjdCk7CisgICAgICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0OwogCi0gICAg
ICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzID0gY29udGVudFJlY3Q7
Ci0gICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0KC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0Lnko
KSk7Ci0gICAgICAgIGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMubW92ZShvZmZzZXQueCgp
LCBvZmZzZXQueSgpKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dCh0ZXh0dXJlLT5iZWdpblBhaW50KGVuY2xvc2luZ0ludFJlY3QoY29udGVudFJlY3RJ
blRpbGVDb29yZGluYXRlcykpKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkp
OwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+
dGV4dERyYXdpbmdNb2RlKCkpOwotICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0
LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkQ29udGVudFJl
Y3QoY29udGVudFJlY3QpOwotICAgICAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVu
dFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBJbnRQb2ludCgwLCAwKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xvc2luZ0ludFJl
Y3Qoc2NhbGVkQ29udGVudFJlY3QpKTsKLSAgICAgICAgICAgIHRleHR1cmUtPmVuZFBhaW50KCk7
Ci0gICAgICAgIH0KKyAgICAgICAgLy8gTm9ybWFsaXplIHNvdXJjZVJlY3QgdG8gdGhlIGJ1ZmZl
cidzIGNvb3JkaW5hdGVzLgorICAgICAgICBzb3VyY2VSZWN0Lm1vdmUoLWRpcnR5UmVjdC54KCks
IC1kaXJ0eVJlY3QueSgpKTsKKworICAgICAgICAvLyBOb3JtYWxpemUgdGFyZ2V0UmVjdCB0byB0
aGUgdGV4dHVyZSdzIGNvb3JkaW5xYXRlcy4KKyAgICAgICAgdGFyZ2V0UmVjdC5tb3ZlKC10aWxl
LnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7CisgICAgICAgIHRpbGUudGV4dHVyZS0+dXBkYXRl
Q29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1
cmU6OlJHQkFGb3JtYXQpOwogICAgIH0KIAogICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNw
bGF5ID0gZmFsc2U7CkBAIC00ODEsNyArNDkzLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCkKICAgICB9CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCB2
b2lkKiBiaXRzKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1
ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBl
cik7CiAKQEAgLTQ5OCw3ICs1MTAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250
ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUgogICAgIGlm
ICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCiAgICAgICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0
dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgdGlsZS5iYWNrQnVm
ZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Quc2l6ZSgpLCBmYWxzZSk7Ci0gICAgdGlsZS5i
YWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKHNvdXJjZVJlY3QsIGJpdHMpOwor
ICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhkYXRhLCBzb3VyY2VS
ZWN0KTsKICAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTm9kZS5oCmluZGV4IGZlNGIxNGMuLjIzMGM5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGlsZU93bmVyc2hp
cChUaWxlT3duZXJzaGlwIG93bmVyc2hpcCkgeyBtX3N0YXRlLnRpbGVPd25lcnNoaXAgPSBvd25l
cnNoaXA7IH0KICAgICBpbnQgY3JlYXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxlKTsKICAgICB2
b2lkIHJlbW92ZUNvbnRlbnRzVGlsZShpbnQgaWQpOwotICAgIHZvaWQgc2V0Q29udGVudHNUaWxl
QmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGJpdHMpOworICAgIHZvaWQgc2V0Q29udGVudHNU
aWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqKTsKICAgICB2b2lkIHNldFRpbGVCYWNrQnVm
ZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJl
Kik7CiAgICAgdm9pZCBjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKTsKICAg
ICB2b2lkIHB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcAppbmRleCBjOGU4ZGFkLi43NDE4ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKQEAgLTMzNiw3ICszMzYsNiBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNv
bXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbgogICAgIHRl
eHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICB0ZXh0dXJlTWFw
cGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSk7CiAgICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNv
bnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKLSAgICB0ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9y
dFNpemUoZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAgICBRUGFpbnRlciog
cGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IFFUcmFuc2Zv
cm0gdHJhbnNmb3JtID0gcGFpbnRlci0+d29ybGRUcmFuc2Zvcm0oKTsKICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDZhZWZkNzAuLmUwMWU3
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMDEtMzAgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1h
cF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8gdXNlIEltYWdlQnVmZmVycyB3aGVuIHBv
c3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzcxNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW1vdmUgdW51c2VkIFRleHR1cmVNYXBwZXIgQVBJIGNhbGxzLCBsaWtlIHNldFZpZXdwb3J0U2l6
ZS4KKyAgICAgICAgVXNlIFRleHR1cmVNYXBwZXI6OkFjY2VsZXJhdGlvbk1vZGUgaW5zdGVhZCBv
ZiBjcmVhdGluZyBUZXh0dXJlTWFwcGVyR0wvVGV4dHVyZU1hcHBlclF0CisgICAgICAgIGRpcmVj
dGx5LgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQ
cml2YXRlOjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9QYWdlQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6
OnNldFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3Jh
cGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKwogMjAxMi0wMS0zMCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVkdWNlIG5vbi1DU1NPTSBB
UEkgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDQwZTZiMTQuLjQ1ZGNmYmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTI4
LDEyICsyOCw4IEBACiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgorI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuaCIKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSNpbmNsdWRlICJvcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmgiCi0jZW5kaWYKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03Niw3ICs3Miw3IEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikgewogICAgICAgICB0
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZUNs
aWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcikpOwotICAgICAgICB0ZXh0dXJlTWFwcGVy
Tm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlclF0
KSk7CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsKICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQt
PnN5bmNSb290TGF5ZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI2NywxMSArMjYz
LDExIEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogICAg
ICAgICBRR3JhcGhpY3NWaWV3KiBncmFwaGljc1ZpZXcgPSB2aWV3LT5zY2VuZSgpLT52aWV3cygp
WzBdOwogICAgICAgICBpZiAoZ3JhcGhpY3NWaWV3ICYmIGdyYXBoaWNzVmlldy0+dmlld3BvcnQo
KSAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCktPmluaGVyaXRzKCJRR0xXaWRnZXQiKSkgewot
ICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7CisgICAgICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBl
cjo6T3BlbkdMTW9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjZW5kaWYK
LSAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlclF0OjpjcmVhdGUoKSk7CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5z
ZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC5jbGVhcigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDc3OTQ1OWQuLjE2NDViN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0w
MS0zMCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAg
ICAgIFtRdF1bVGV4bWFwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyIEFQSSB0byB1c2UgSW1hZ2VC
dWZmZXJzIHdoZW4gcG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NzE0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVzZSBUZXh0dXJlTWFwcGVyOjpBY2NlbGVyYXRpb25Nb2RlIGluc3RlYWQg
b2YgY3JlYXRpbmcgVGV4dHVyZU1hcHBlckdMIGRpcmVjdGx5LgorICAgICAgICBVc2UgdGhlIG5l
dyBBUEkgY2FsbHMgZm9yIHVwZGF0aW5nIEJpdG1hcFRleHR1cmUgY29udGVudC4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVSb290TGF5ZXIpOgorCiAyMDEyLTAxLTMwICBCZXRo
IERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyNjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCmluZGV4IDFmNjA2NWUuLjg4N2I4M2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJv
eHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQ
cm94eVF0LmNwcApAQCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNp
bmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8u
aCIKQEAgLTE3MSw4ICsxNzAsOCBAQCBMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0
UHJveHkoKQogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCiB7CiAg
ICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1
cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dXJlTWFw
cGVyR0wqPihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpKTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVy
ID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAg
IEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFw
cGVyOjpPcGVuR0xNb2RlKTsKIAogICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CiAgICAgR3JhcGhp
Y3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwpAQCAtMTg0LDkgKzE4Myw2
IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQ
T1JULCB2aWV3cG9ydCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoSW50
U2l6ZSh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pKTsKICAgICBub2RlLT5zZXRUZXh0dXJlTWFw
cGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBh
aW50aW5nKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKQEAgLTIwOSw5
ICsyMDUsOCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCiB7CiAgICAgaWYg
KCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBw
ZXJRdDo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dXJlTWFwcGVyUXQq
PihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpKTsKLQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2Nl
bGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKICAgICBzeW5j
UmVtb3RlQ29udGVudCgpOwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJl
TWFwcGVyTm9kZShyb290TGF5ZXIoKSk7CiAKQEAgLTQwOCw3ICs0MDMsNyBAQCB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBTaGFyZWFibGVCaXRt
YXAqIGJpdG1hcCkKICAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7
CiAgICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1h
cHBlci0+Y3JlYXRlVGV4dHVyZSgpOwogICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5z
aXplKCksICFpbWFnZUhhc0FscGhhKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZVJhd0Nv
bnRlbnRzKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBzdWJJbWFnZS5j
b25zdEJpdHMoKSk7CisgICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5j
b25zdEJpdHMoKSwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSkpOwogICAg
ICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlvbigpLCB0ZXh0dXJlKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTQ3MSw3ICs0NjYsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
ZW5zdXJlUm9vdExheWVyKCkKICAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUg
emVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgogICAgIG1fcm9vdExheWVy
LT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOwogICAgIGlmICghbV90ZXh0dXJlTWFwcGVy
KQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOwor
ICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1h
cHBlcjo6T3BlbkdMTW9kZSk7CiAgICAgdG9UZXh0dXJlTWFwcGVyTm9kZShtX3Jvb3RMYXllci5n
ZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125205</attachid>
            <date>2012-02-02 16:07:36 -0800</date>
            <delta_ts>2012-02-02 16:09:32 -0800</delta_ts>
            <desc>Revised patch based on Martin Robinson&apos;s comments.</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>58301</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMDZkMGVkLi4wZjBjYjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTItMDItMDIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8g
dXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZW1vdmVkIFRleHR1cmVN
YXBwZXJRdCwgYW5kIGluc3RlYWQgY3JlYXRlZCBhIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBj
bGFzcywKKyAgICAgICAgd2hpY2ggcmVzcG9uZHMgdG8gYW4gIlNvZnR3YXJlIiBtb2RlIG9mIFRl
eHR1cmVNYXBwZXIsIGluc3RlYWQgb2YgY3JlYXRpbmcgc3ViY2xhc3NlcworICAgICAgICBvZiBU
ZXh0dXJlTWFwcGVyIGRpcmVjdGx5LiBUaGlzIGFsbG93cyB1c2luZyB0aGUgc29mdHdhcmUgZmFs
bGJhY2sgb2YgVGV4dHVyZU1hcHBlciBieSBhbnkKKyAgICAgICAgc29ydC4KKworICAgICAgICBU
byBtYWtlIHRoZSBJbWFnZUJ1ZmZlciBiYWNrZW5kIGVhc2llciwgY29udGVudCB1cGRhdGVzIHRv
IEJpdG1hcFRleHR1cmUgY2FuIG5vdyB1c2UgZWl0aGVyCisgICAgICAgIGFuIGltYWdlLCBvciBh
IHJhdyBkYXRhIHBvaW50ZXIuIFRoZSByYXcgZGF0YSBwb2ludGVyIGlzIHByb3ZpZGVkIGZvciBw
ZXJmb3JtYW5jZSByZWFzb25zLAorICAgICAgICBhcyBjb252ZXJ0aW5nIGRhdGEgdG8vZnJvbSBJ
bWFnZSByZWZlcmVuY2VzIGluIFF0IGdlbmVyYXRlcyB1bm5lY2Vzc2FyeSBkZWVwIGNvcGllcyBv
ZiB0aGUKKyAgICAgICAgaW1hZ2UgZGF0YS4KKworICAgICAgICBBbHNvLCBmdW5jdGlvbnMgdGhh
dCB1c2UgVHJhbnNmb3JtYXRpb25NYXRyaXggd2VyZSBhZGRlZCB0byBHcmFwaGljc0NvbnRleHQs
IHRvIGFsbG93IGZvcgorICAgICAgICAzRCB0cmFuc2Zvcm1zIGluIGNyb3NzIHBsYXRmb3JtIGNv
ZGUuCisgICAgICAgIEFmdGVyIHRoaXMgcGF0Y2ggZXZlcnl0aGluZyByZW5kZXJzIHRoZSBzYW1l
LiBBbiBhZGRpdGlvbmFsIGJ1ZyByZXBvcnQgd2FzIGNyZWF0ZWQgdG8gYWxsb3cKKyAgICAgICAg
SW1hZ2VCdWZmZXIgc2hhbGxvdyBpbWFnZSBjb3BpZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NzY4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENvdmVyZWQgZXh0ZW5zaXZlbHkgYnkgZXhpc3RpbmcgdGVzdHMsIG5v
IGJlaGF2aW9yYWwgY2hhbmdlcy4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9U
ZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6Cisg
ICAgICAgIChCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjpCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpzd2l6emxlQkdSQVRv
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXI6OnBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFRl
eHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmFjY2Vs
ZXJhdGlvbk1vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0M0RUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXQzRFRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldDNEVHJhbnNmb3JtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQml0bWFwVGV4dHVyZUltYWdlQnVmZmVy
KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmU6OkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoQml0bWFwVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpicHApOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZTo6aXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
cjo6c2V0R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6
OmdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXI6OlRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaDoKKyAgICAg
ICAgKFRleHR1cmVNYXBwZXJOb2RlKToKKwogMjAxMi0wMi0wMiAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjEwNjU2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGZjNmY2ZTYuLmU0Zjg1N2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQpAQCAtMzkzOSw3ICszOTM5LDYgQEAgd2luMzI6IXdpbjMyLWcrKyo6Y29udGFpbnMoUU1BS0Vf
SE9TVC5hcmNoLCB4ODZfNjQpOnsKIAogY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICBI
RUFERVJTICs9IFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0
LmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5z
Zm9ybS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aCBcCkBAIC0zOTQ4LDcgKzM5NDcsNiBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIu
aAogCiAgICAgU09VUkNFUyArPSBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJU
cmFuc2Zvcm0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJBbmltYXRpb24uY3BwIFwKQEAgLTM5NTksNiArMzk1Nyw3IEBAIGNvbnRhaW5zKENPTkZJRywg
dGV4bWFwKSB7CiAgICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oCiAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICAgICAgQ09ORklHICs9IG9wZW5nbC1zaGltcwor
ICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVJfR0wKICAgICB9CiB9IGVs
c2UgewogICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCmluZGV4IDQ3NWZkYjMuLjMwZWI5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZGVhOTUw
Yi4uZjdiZWY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKQEAgLTEyNCw2ICsxMjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBjbGFz
cyBUZXh0UnVuOworICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCiAgICAgZW51bSBU
ZXh0RHJhd2luZ01vZGUgewogICAgICAgICBUZXh0TW9kZUludmlzaWJsZSA9IDAsCkBAIC00MDks
NiArNDEwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBj
b25zdDsKIAorI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
KyAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgd2hlbiB1c2luZyBhY2NlbGVyYXRlZC1jb21wb3Np
dGluZyBpbiBzb2Z0d2FyZSBtb2RlLCBsaWtlIGluIFRleHR1cmVNYXBwZXIuCisgICAgICAgIHZv
aWQgY29uY2F0M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICAg
ICAgdm9pZCBzZXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXQzRFRyYW5zZm9ybSgpIGNvbnN0OworI2VuZGlm
CiAgICAgICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoaXMg
Y29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uCiAgICAgICAgIC8vIGZvciBkcmF3aW5n
IGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICAgICAgUGFz
c093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBJbnRTaXpl
JikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcAppbmRleCA2MWQ4YjIwLi5lNzI5NTEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0
dXJlTWFwcGVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAKQEAgLTExNSwxMSArMTE1LDYgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyQ2Fpcm86OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1
cmUsIGNvbnN0IEZsb2F0UmUKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYXNzT3duUHRy
PFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyQ2Fpcm8pOwot
fQotCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJDYWlybzo6Y3JlYXRl
VGV4dHVyZSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJlQ2Fpcm8o
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGRkZmY2MDUuLjU4NzI5MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0
dXJlTWFwcGVyR0wuY3BwCkBAIC0yNjUsNTcgKzI2NSw2IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVy
R0xEYXRhIHsKIAogICAgIH07CiAKLSAgICBzdHJ1Y3QgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZXBvc2l0b3J5IHsKLSAgICAgICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgICAgIEdMdWludCB0
ZXh0dXJlOwotICAgICAgICAgICAgaW50IHJlZkNvdW50OwotICAgICAgICB9OwotICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8SW1hZ2VVSUQsIEVudHJ5PiBJbWFnZVRleHR1cmVNYXA7Ci0gICAgICAg
IEltYWdlVGV4dHVyZU1hcCBpbWFnZVRvVGV4dHVyZTsKLQotICAgICAgICBHTHVpbnQgZmluZE9y
Q3JlYXRlKEltYWdlVUlEIGltYWdlLCBib29sJiBmb3VuZCkKLSAgICAgICAgewotICAgICAgICAg
ICAgSW1hZ2VUZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1h
Z2UpOwotICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBp
bWFnZVRvVGV4dHVyZS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQucmVmQ291
bnQrKzsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQudGV4dHVyZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEVudHJ5
IGVudHJ5OwotICAgICAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJmVudHJ5LnRleHR1
cmUpKTsKLSAgICAgICAgICAgIGVudHJ5LnJlZkNvdW50ID0gMTsKLSAgICAgICAgICAgIGltYWdl
VG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOwotICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnRl
eHR1cmU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGRlcmVmKEltYWdlVUlEIGltYWdlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBIYXNoTWFwPEltYWdlVUlELCBFbnRyeT46Oml0ZXJhdG9y
IGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0gICAgICAgICAgICBpZiAoaXQgIT0g
aW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5y
ZWZDb3VudCA8IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VUb1RleHR1cmUucmVtb3Zl
KGl0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5KCkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgfkRpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoSW1hZ2VUZXh0dXJlTWFwOjppdGVyYXRvciBp
dCA9IGltYWdlVG9UZXh0dXJlLmJlZ2luKCk7IGl0ICE9IGltYWdlVG9UZXh0dXJlLmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgICAgICAgICAgR0x1aW50IHRleHR1cmUgPSBpdC0+c2Vjb25kLnRleHR1
cmU7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgICAgICAgICAgICAgIEdM
X0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgfQotICAgIH0gZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOwotCiAgICAgU2hhcmVkR0xE
YXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICoobV9zaGFy
ZWRHTERhdGEuZ2V0KCkpOwpAQCAtMzMyLDYgKzI4MSw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVy
R0xEYXRhIHsKICAgICBpbnQgY3VycmVudFByb2dyYW07CiAgICAgR0xpbnQgcHJldmlvdXNQcm9n
cmFtOwogICAgIEdMaW50IHByZXZpb3VzU2Npc3NvclN0YXRlOworICAgIEdMaW50IHZpZXdwb3J0
WzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERhdGE+IG1fc2hhcmVkR0xEYXRhOwogfTsKIApAQCAt
MzQyLDU2ICsyOTIsMjUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmLCBib29sIG9wYXF1ZSk7
CiAgICAgdm9pZCBiaW5kKCk7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCog
YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZpcnR1YWwgdm9pZCBl
bmRQYWludCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsK
ICAgICB+Qml0bWFwVGV4dHVyZUdMKCkgeyBkZXN0cm95KCk7IH0KICAgICB2aXJ0dWFsIHVpbnQz
Ml90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIGlubGluZSBib29sIGlzT3BhcXVl
KCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KICAgICBpbmxpbmUgRmxvYXRTaXplIHJlbGF0
aXZlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVTaXplOyB9CiAgICAgdm9pZCBzZXRU
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFwKSB7IG1fdGV4dHVyZU1hcHBlciA9
IHRleG1hcDsgfQotCi0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYsIHZvaWQqKTsKLSAgICB2b2lkIHVwZGF0ZVJhd0NvbnRlbnRzKGNvbnN0IEludFJl
Y3QmLCBjb25zdCB2b2lkKik7Ci0gICAgdm9pZCBwYWNrKCkKLSAgICB7Ci0gICAgICAgIC8vIFRo
aXMgaXMgY3VycmVudGx5IGEgc3R1Yi4KLSAgICAgICAgaWYgKGlzUGFja2VkKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG1faXNQYWNrZWQgPSB0cnVlOwotICAgIH0KLQotICAgIHZv
aWQgdW5wYWNrKCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGEgc3R1Yi4K
LSAgICAgICAgaWYgKCFpc1BhY2tlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBt
X2lzUGFja2VkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBpc1BhY2tlZCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9pc1BhY2tlZDsKLSAgICB9CisgICAgdm9pZCB1cGRhdGVD
b250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGl4ZWxGb3Jt
YXQpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3Qm
KTsKIAogcHJpdmF0ZToKICAgICBHTHVpbnQgbV9pZDsKLSAgICBJbWFnZVVJRCBtX2ltYWdlVUlE
OwogICAgIEZsb2F0U2l6ZSBtX3JlbGF0aXZlU2l6ZTsKLSAgICBib29sIG1fb3BhcXVlOwogICAg
IEludFNpemUgbV90ZXh0dXJlU2l6ZTsKLSAgICBPd25QdHI8QkdSQTMyUHJlbXVsdGltcGxpZWRC
dWZmZXI+IG1fYnVmZmVyOwogICAgIEludFJlY3QgbV9kaXJ0eVJlY3Q7CiAgICAgR0x1aW50IG1f
ZmJvOwogICAgIEdMdWludCBtX3JibzsKICAgICBJbnRTaXplIG1fYWN0dWFsU2l6ZTsKICAgICBi
b29sIG1fc3VyZmFjZU5lZWRzUmVzZXQ7Ci0gICAgYm9vbCBtX2lzUGFja2VkOwogICAgIFRleHR1
cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOwogICAgIEJpdG1hcFRleHR1cmVHTCgpCiAgICAg
ICAgIDogbV9pZCgwKQotICAgICAgICAsIG1faW1hZ2VVSUQoMCkKLSAgICAgICAgLCBtX29wYXF1
ZShmYWxzZSkKICAgICAgICAgLCBtX2ZibygwKQogICAgICAgICAsIG1fcmJvKDApCiAgICAgICAg
ICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVlKQpAQCAtNTQ0LDYgKzQ2Myw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKCkKICNlbmRpZgogICAgIGdsQ2xlYXJTdGVuY2ls
KDApOwogICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICBnbEdldEludGVn
ZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpOwogICAgIGJpbmRTdXJmYWNlKDApOwog
fQogCkBAIC02NjMsNyArNTgzLDYgQEAgc3RhdGljIHZvaWQgdGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZShzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVz
ZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgYm9vbCBvcGFxdWUpCiB7CiAgICAgQml0bWFwVGV4
dHVyZTo6cmVzZXQobmV3U2l6ZSwgb3BhcXVlKTsKLSAgICBtX2ltYWdlVUlEID0gMDsKICAgICBJ
bnRTaXplIG5ld1RleHR1cmVTaXplID0gbmV4dFBvd2VyT2ZUd28obmV3U2l6ZSk7CiAgICAgYm9v
bCBqdXN0Q3JlYXRlZCA9IGZhbHNlOwogICAgIGlmICghbV9pZCkgewpAQCAtNjgyLDI4ICs2MDEs
MTAgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUs
IGJvb2wgb3BhcXVlKQogICAgIH0KICAgICBtX2FjdHVhbFNpemUgPSBuZXdTaXplOwogICAgIG1f
cmVsYXRpdmVTaXplID0gRmxvYXRTaXplKGZsb2F0KG5ld1NpemUud2lkdGgoKSkgLyBtX3RleHR1
cmVTaXplLndpZHRoKCksIGZsb2F0KG5ld1NpemUuaGVpZ2h0KCkpIC8gbV90ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgbV9vcGFxdWUgPSBvcGFxdWU7CiAgICAgbV9zdXJmYWNlTmVlZHNSZXNl
dCA9IHRydWU7CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJlR0w6
OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIG1fYnVmZmVyID0g
QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNyZWF0ZSgpOwotICAgIG1fZGlydHlSZWN0ID0g
ZGlydHlSZWN0OwotICAgIHJldHVybiBtX2J1ZmZlci0+YmVnaW5QYWludChkaXJ0eVJlY3QsIG1f
b3BhcXVlKTsKLX0KIAotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmVuZFBhaW50KCkKLXsKLSAgICBp
ZiAoIW1fYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9idWZmZXItPmVuZFBhaW50KCk7
Ci0gICAgdXBkYXRlQ29udGVudHMoQkdSQUZvcm1hdCwgbV9kaXJ0eVJlY3QsIG1fYnVmZmVyLT5k
YXRhKCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQot
ICAgIG1fYnVmZmVyLmNsZWFyKCk7Ci19Ci0KLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKIHN0
YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBkYXRhLCBjb25zdCBJbnRTaXpl
JiBzaXplKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKQEAgLTcxNCw3OSArNjE1
LDMxIEBAIHN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBkYXRhLCBjb25z
dCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgcFt4XSA9ICgocFt4XSA8PCAxNikgJiAweGZm
MDAwMCkgfCAoKHBbeF0gPj4gMTYpICYgMHhmZikgfCAocFt4XSAmIDB4ZmYwMGZmMDApOwogICAg
IH0KIH0KLSNlbmRpZgogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoUGl4
ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHZvaWQqIGJpdHMpCit2
b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX2lkKSkKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBib29sIHNo
b3VsZFN3aXp6bGUgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgR0xpbnQgZ2xGb3JtYXQgPSBHTF9S
R0JBOwotICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKLSAgICBjYXNlIFJHQkFGb3JtYXQ6Ci0g
ICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSR0JG
b3JtYXQ6Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEJHUkFGb3JtYXQ6Ci0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18yCi0gICAgICAgIHNob3Vs
ZFN3aXp6bGUgPSB0cnVlOwotICAgICAgICBnbEZvcm1hdCA9IEdMX1JHQkE7Ci0jZWxzZQotICAg
ICAgICBnbEZvcm1hdCA9IEdMX0JHUkE7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBCR1JGb3JtYXQ6Ci0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18yCi0gICAgICAgIHNob3VsZFN3
aXp6bGUgPSB0cnVlOwotICAgICAgICBnbEZvcm1hdCA9IEdMX1JHQjsKLSNlbHNlCi0gICAgICAg
IGdsRm9ybWF0ID0gR0xfQkdSOwotI2VuZGlmCi0gICAgICAgICBicmVhazsKLSAgICB9Ci0KLSNp
ZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBpZiAoc2hvdWxkU3dpenpsZSkKLSAgICAgICAg
c3dpenpsZUJHUkFUb1JHQkEoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihiaXRzKSwgcmVjdC5zaXpl
KCkpOwotI2VuZGlmCi0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgZ2xGb3Jt
YXQsIEdMX1VOU0lHTkVEX0JZVEUsIGJpdHMpKQorICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRS
ZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIGRhdGEpKQogfQogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlUmF3Q29udGVudHMo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qgdm9pZCogYml0cykKK3ZvaWQgQml0bWFwVGV4dHVy
ZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0
IGZvcm1hdCkKIHsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CiAgICAgR0xfQ01E
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCiAgICAgR0x1aW50IGdsRm9ybWF0
ID0gaXNPcGFxdWUoKSA/IEdMX1JHQiA6IEdMX1JHQkE7Ci0gICAgR0xfQ01EKGdsVGV4U3ViSW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGJpdHMpKQotfQotCi12
b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKLXsK
LSAgICBJbWFnZVVJRCB1aWQgPSBpbWFnZSA/IHVpZEZvckltYWdlKGltYWdlKSA6IDA7Ci0gICAg
aWYgKCFpbWFnZSB8fCAhdWlkKSB7Ci0gICAgICAgIGlmIChtX2ltYWdlVUlEKQotICAgICAgICAg
ICAgZGVzdHJveSgpOworICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2UgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lSW1hZ2UpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAodWlkID09IG1faW1hZ2VVSUQpCi0gICAgICAgIHJl
dHVybjsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgR0x1aW50IG5ld1RleHR1cmVJRCA9
IG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kT3JD
cmVhdGUodWlkLCBmb3VuZCk7Ci0gICAgaWYgKG5ld1RleHR1cmVJRCAhPSBtX2lkKSB7Ci0gICAg
ICAgIG1faW1hZ2VVSUQgPSB1aWQ7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgbV9pZCA9
IG5ld1RleHR1cmVJRDsKLSAgICAgICAgcmVzZXQoaW1hZ2UtPnNpemUoKSwgZmFsc2UpOwotICAg
ICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChi
ZWdpblBhaW50KEludFJlY3QoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVT
aXplLmhlaWdodCgpKSkpOwotICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApLCBDb21wb3NpdGVDb3B5KTsKLSAgICAg
ICAgICAgIGVuZFBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9CisjaWYgUExBVEZPUk0oUVQpCisg
ICAgUUltYWdlIHF0SW1hZ2UgPSBmcmFtZUltYWdlLT50b0ltYWdlKCk7CisgICAgaWYgKEludFNp
emUocXRJbWFnZS5zaXplKCkpICE9IHNvdXJjZVJlY3Quc2l6ZSgpKQorICAgICAgICBxdEltYWdl
ID0gcXRJbWFnZS5jb3B5KHNvdXJjZVJlY3QpOworICAgIGlmIChmb3JtYXQgPT0gQkdSQUZvcm1h
dCB8fCBmb3JtYXQgPT0gQkdSRm9ybWF0KQorICAgICAgICBzd2l6emxlQkdSQVRvUkdCQShyZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocXRJbWFnZS5iaXRzKCkpLCBxdEltYWdlLnNpemUoKSk7
CisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0
LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWln
aHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIHF0SW1hZ2UuY29uc3RCaXRzKCkpKQor
I2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXggY3JlYXRlUHJv
amVjdGlvbk1hdHJpeChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGZsaXApCkBAIC04MzcsNyAr
NjkwLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQogCiB2b2lkIEJpdG1hcFRleHR1
cmVHTDo6ZGVzdHJveSgpCiB7Ci0gICAgaWYgKG1faWQgJiYgKCFtX2ltYWdlVUlEIHx8ICFtX3Rl
eHR1cmVNYXBwZXItPmRhdGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZGVyZWYobV9pbWFn
ZVVJRCkpKQorICAgIGlmIChtX2lkKQogICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygx
LCAmbV9pZCkpCiAKICAgICBpZiAobV9mYm8pCkBAIC04NzIsMTIgKzcyNSwxMyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIp
CiAgICAgQml0bWFwVGV4dHVyZUdMKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVy
ZUdMKj4oc3VyZmFjZVBvaW50ZXIpOwogCiAgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIElu
dFNpemUgdmlld3BvcnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNd
KTsKICAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKSkK
LSAgICAgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4
KHZpZXdwb3J0U2l6ZSgpLCB0cnVlKS5tdWx0aXBseSh0cmFuc2Zvcm0oKSk7CisgICAgICAgIGRh
dGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNp
emUsIHRydWUpOwogICAgICAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuc3RlbmNpbEluZGV4ID4gMSA/IEdMX0VRVUFMIDogR0xfQUxXQVlTLCBkYXRhKCkuc2hh
cmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4IC0gMSwgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5j
aWxJbmRleCAtIDEpKQogICAgICAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VF
UCwgR0xfS0VFUCkpCi0gICAgICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6
ZSgpLndpZHRoKCksIHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpKSkKLSAgICAgICAgZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLmNsaXBTdGFjay5hcHBlbmQoSW50UmVjdChJbnRQb2ludDo6emVybygpLCB2
aWV3cG9ydFNpemUoKSkpOworICAgICAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCB2aWV3cG9y
dFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKSkKKyAgICAgICAgZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLmNsaXBTdGFjay5hcHBlbmQoSW50UmVjdChkYXRhKCkudmlld3BvcnRbMF0s
IGRhdGEoKS52aWV3cG9ydFsxXSwgZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRb
M10pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTg1LDQgKzgzOSw5IEBAIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKICAg
ICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKK1Bhc3NPd25QdHI8VGV4dHVyZU1hcHBl
cj4gVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpCit7CisgICAgcmV0
dXJuIFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Cit9CisKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgK
aW5kZXggMWI0MTE4NS4uMDhmYTBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtNDMsMTYgKzQz
LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUodWludDMyX3QgdGV4
dHVyZSwgYm9vbCBvcGFxdWUsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUsIGJvb2wgZmxpcCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJm
YWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5QYWludGluZygpOworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygp
OwogICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7Ci0gICAgdmlydHVhbCBib29sIGFsbG93U3Vy
ZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiB0eXBlKCkgY29uc3Q7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlckdM
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsgfQotICAg
IHZvaWQgYmVnaW5QYWludGluZygpOwotICAgIHZvaWQgZW5kUGFpbnRpbmcoKTsKICAgICB2b2lk
IHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIHsgbV9jb250ZXh0
ID0gY29udGV4dDsgfQogICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyBy
ZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFja2VkKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgcGxhdGZvcm1VcGRhdGVDb250ZW50cyhOYXRp
dmVJbWFnZVB0ciwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBCaXRtYXBUZXh0dXJl
OjpQaXhlbEZvcm1hdCk7CisgICAgdmlydHVhbCBBY2NlbGVyYXRpb25Nb2RlIGFjY2VsZXJhdGlv
bk1vZGUoKSBjb25zdCB7IHJldHVybiBPcGVuR0xNb2RlOyB9CiAKIHByaXZhdGU6CiAgICAgYm9v
bCBiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxv
YXRSZWN0Jik7CkBAIC02NCwxNiArNjUsNiBAQCBwcml2YXRlOgogfTsKIAogLy8gQW4gb2Zmc2Ny
ZWVuIGJ1ZmZlciB0byBiZSByZW5kZXJlZCBieSBzb2Z0d2FyZS4KLWNsYXNzIEJHUkEzMlByZW11
bHRpbXBsaWVkQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5CR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcigpIHsgfQotICAgIHZpcnR1
YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0LCBib29sIG9wYXF1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQqIGRhdGEoKSA9IDA7Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IGNyZWF0ZSgpOwotfTsKLQogc3RhdGljIGlubGlu
ZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bSkKIHsKICAgICBmb3IgKGludCBpID0gMHgxMDAw
MDAwMDsgaSA+IDA7IGkgPj49IDEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggNDk1YmNh
ZC4uNjZiYzc2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlcgogewogICAgIGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVy
QW5kUmVzdG9yZUNvbnRleHQoKTsKIAotICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5pc09wZW5HTEJh
Y2tlZCgpKSB7CisgICAgaWYgKHRleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBU
ZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKSB7CiAgICAgICAgIFRleHR1cmVNYXBwZXJHTCogdGV4
bWFwR0wgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKTsKICAg
ICAgICAgdGV4bWFwR0wtPmRyYXdUZXh0dXJlKG1fY29udGV4dC0+bV90ZXh0dXJlLCAhbV9jb250
ZXh0LT5tX2F0dHJzLmFscGhhLCBGbG9hdFNpemUoMSwgMSksIHRhcmdldFJlY3QsIG1hdHJpeCwg
b3BhY2l0eSwgbWFzaywgdHJ1ZSAvKiBmbGlwICovKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0UXQuY3BwCmluZGV4IGVjNzNjM2ZlLi4yNjFiYmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBA
IC0xMzM1LDYgKzEzMzUsMzIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFu
c2Zvcm0odHJhbnNmb3JtKTsKIH0KIAorI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCitUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3JtKCkgY29uc3QKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4gVHJhbnNmb3JtYXRp
b25NYXRyaXgoKTsKKworICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+Y29tYmluZWRUcmFu
c2Zvcm0oKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdDNEVHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5wKCktPnNldFdvcmxk
VHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJ1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0
YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0sIGZhbHNlKTsKK30KKyNlbmRpZgor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiwgY29uc3Qg
SW50UmVjdCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDY0MWNlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyNjMgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKLQot
I2luY2x1ZGUgPFF0Q29yZS9xZGVidWcuaD4KLSNpbmNsdWRlIDxRdEd1aS9xcGFpbnRlbmdpbmUu
aD4KLSNpbmNsdWRlIDxRdEd1aS9xcGl4bWFwLmg+Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCi0jIGluY2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpkZXN0cm95KCkKLXsKLSAg
ICBpZiAobV9waXhtYXAucGFpbnRpbmdBY3RpdmUoKSkKLSAgICAgICAgcUZhdGFsKCJEZXN0cm95
aW5nIGFuIGFjdGl2ZSBwaXhtYXAiKTsKLSAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKLX0KLQot
dm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgaXNP
cGFxdWUpCi17Ci0gICAgQml0bWFwVGV4dHVyZTo6cmVzZXQoc2l6ZSwgaXNPcGFxdWUpOwotCi0g
ICAgaWYgKHNpemUud2lkdGgoKSA+IG1fcGl4bWFwLnNpemUoKS53aWR0aCgpIHx8IHNpemUuaGVp
Z2h0KCkgPiBtX3BpeG1hcC5zaXplKCkuaGVpZ2h0KCkgfHwgbV9waXhtYXAuaXNOdWxsKCkpCi0g
ICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwot
ICAgIGlmICghaXNPcGFxdWUpCi0gICAgICAgIG1fcGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50
KTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVRdDo6YmVnaW5Q
YWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9wYWludGVyLmJlZ2luKCZt
X3BpeG1hcCk7Ci0gICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKCZtX3BhaW50ZXIpOwot
ICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9k
ZV9DbGVhcik7Ci0gICAgbV9wYWludGVyLmZpbGxSZWN0KFFSZWN0KGRpcnR5UmVjdCksIFF0Ojp0
cmFuc3BhcmVudCk7Ci0gICAgbV9wYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6
Q29tcG9zaXRpb25Nb2RlX1NvdXJjZU92ZXIpOwotICAgIHJldHVybiAmbV9wYWludGVyOwotfQot
Ci12b2lkIEJpdG1hcFRleHR1cmVRdDo6ZW5kUGFpbnQoKQotewotICAgIG1fcGFpbnRlci5lbmQo
KTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0
IHBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCB2b2lkKiBiaXRzKQotewotICAgIG1f
cGFpbnRlci5iZWdpbigmbV9waXhtYXApOwotICAgIFFJbWFnZTo6Rm9ybWF0IHF0Rm9ybWF0ID0g
UUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQ7Ci0gICAgaWYgKHBpeGVsRm9ybWF0
ID09IEJHUkZvcm1hdCB8fCBwaXhlbEZvcm1hdCA9PSBSR0JGb3JtYXQpCi0gICAgICAgIHF0Rm9y
bWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7Ci0gICAgUUltYWdlIGltYWdlKHN0YXRpY19jYXN0
PHVjaGFyKj4oYml0cyksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgcXRGb3JtYXQpOwot
ICAgIGlmIChwaXhlbEZvcm1hdCA9PSBCR1JGb3JtYXQgfHwgcGl4ZWxGb3JtYXQgPT0gQkdSQUZv
cm1hdCkKLSAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZ2JTd2FwcGVkKCk7Ci0gICAgbV9wYWludGVy
LnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0g
ICAgbV9wYWludGVyLmRyYXdJbWFnZShyZWN0LCBpbWFnZSk7Ci0gICAgbV9wYWludGVyLmVuZCgp
OwotfQotCi1ib29sIEJpdG1hcFRleHR1cmVRdDo6c2F2ZShjb25zdCBTdHJpbmcmIHBhdGgpCi17
Ci0gICAgcmV0dXJuIG1fcGl4bWFwLnNhdmUocGF0aCwgIlBORyIpOwotfQotCi12b2lkIEJpdG1h
cFRleHR1cmVRdDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgUVBpeG1hcCogcGl4bWFwID0gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFwaXhtYXApCi0gICAg
ICAgIHJldHVybjsKLSAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChwaXhtYXAtPnNpemUoKSwgIXBp
eG1hcC0+aGFzQWxwaGFDaGFubmVsKCkpOwotICAgIG1fcGl4bWFwID0gKnBpeG1hcDsKLX0KLQot
dm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnBhY2soKQotewotICAgIGlmIChtX3BpeG1hcC5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbWFnZSA9IG1fcGl4bWFwLnRvSW1hZ2UoKTsK
LSAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKLSAgICBtX2lzUGFja2VkID0gdHJ1ZTsKLX0KLQot
dm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnVucGFjaygpCi17Ci0gICAgbV9pc1BhY2tlZCA9IGZhbHNl
OwotICAgIGlmIChtX2ltYWdlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bp
eG1hcCA9IFFQaXhtYXA6OmZyb21JbWFnZShtX2ltYWdlKTsKLSAgICBtX2ltYWdlID0gUUltYWdl
KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgICBRUGFp
bnRlciogcGFpbnRlciA9IGN1cnJlbnRQYWludGVyKCk7Ci0gICAgIHBhaW50ZXItPnNhdmUoKTsK
LSAgICAgUVRyYW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNmb3JtKCk7Ci0g
ICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShtYXRyaXgsIGZhbHNlKTsKLSAgICAgcGFpbnRlci0+
c2V0Q2xpcFJlY3QocmVjdCk7Ci0gICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShwcmV2VHJhbnNm
b3JtLCBmYWxzZSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjplbmRDbGlwKCkKLXsKLSAg
ICBjdXJyZW50UGFpbnRlcigpLT5yZXN0b3JlKCk7Ci19Ci0KLUludFNpemUgVGV4dHVyZU1hcHBl
clF0Ojp2aWV3cG9ydFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fcGFpbnRl
ci0+ZGV2aWNlKCktPndpZHRoKCksIG1fcGFpbnRlci0+ZGV2aWNlKCktPmhlaWdodCgpKTsKLX0K
LQotCi1UZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgpCi0gICAgOiBtX2N1cnJlbnRT
dXJmYWNlKDApCi17Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7
Ci0gICAgbV9wYWludGVyID0gY29udGV4dCA/IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDog
MDsKLSAgICBpbml0aWFsaXplKG1fcGFpbnRlcik7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCogVGV4
dHVyZU1hcHBlclF0OjpncmFwaGljc0NvbnRleHQoKQotewotICAgIHJldHVybiBtX2NvbnRleHQ7
Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBz
dXJmYWNlKQotewotICAgIGlmIChtX2N1cnJlbnRTdXJmYWNlID09IHN1cmZhY2UpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAobV9jdXJyZW50U3VyZmFjZSkKLSAgICAgICAgbV9jdXJyZW50U3Vy
ZmFjZS0+bV9wYWludGVyLmVuZCgpOwotICAgIGlmICghc3VyZmFjZSkgewotICAgICAgICBtX2N1
cnJlbnRTdXJmYWNlID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBCaXRtYXBUZXh0
dXJlUXQqIHN1cmZhY2VRdCA9IHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVRdCo+KHN1cmZhY2Up
OwotICAgIGlmICghc3VyZmFjZVF0LT5tX3BhaW50ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgc3Vy
ZmFjZVF0LT5tX3BhaW50ZXIuYmVnaW4oJnN1cmZhY2VRdC0+bV9waXhtYXApOwotICAgIG1fY3Vy
cmVudFN1cmZhY2UgPSBzdXJmYWNlUXQ7Ci19Ci0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmRy
YXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3Bh
Y2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCi17Ci0gICAgY29uc3QgQml0
bWFwVGV4dHVyZVF0JiB0ZXh0dXJlUXQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJl
UXQmPih0ZXh0dXJlKTsKLSAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fcGFpbnRlcjsKLSAgICBR
UGl4bWFwIHBpeG1hcCA9IHRleHR1cmVRdC5tX3BpeG1hcDsKLSAgICBpZiAobV9jdXJyZW50U3Vy
ZmFjZSkKLSAgICAgICAgcGFpbnRlciA9ICZtX2N1cnJlbnRTdXJmYWNlLT5tX3BhaW50ZXI7Ci0K
LSAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgewotICAgICAg
ICBjb25zdCBCaXRtYXBUZXh0dXJlUXQqIG1hc2sgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBU
ZXh0dXJlUXQqPihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIFFQaXhtYXAgaW50ZXJtZWRpYXRlUGl4
bWFwKHBpeG1hcC5zaXplKCkpOwotICAgICAgICBpbnRlcm1lZGlhdGVQaXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmaW50ZXJtZWRpYXRl
UGl4bWFwKTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgbWFza1BhaW50ZXIuZHJhd1BpeG1h
cCgwLCAwLCBwaXhtYXApOwotICAgICAgICBtYXNrUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUo
UVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbkluKTsKLSAgICAgICAgbWFza1Bh
aW50ZXIuZHJhd1BpeG1hcChRUmVjdCgwLCAwLCBwaXhtYXAud2lkdGgoKSwgcGl4bWFwLmhlaWdo
dCgpKSwgbWFzay0+bV9waXhtYXAsIG1hc2stPnNvdXJjZVJlY3QoKSk7Ci0gICAgICAgIG1hc2tQ
YWludGVyLmVuZCgpOwotICAgICAgICBwaXhtYXAgPSBpbnRlcm1lZGlhdGVQaXhtYXA7Ci0gICAg
fQotCi0gICAgY29uc3QgcXJlYWwgcHJldk9wYWNpdHkgPSBwYWludGVyLT5vcGFjaXR5KCk7Ci0g
ICAgY29uc3QgUVRyYW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNmb3JtKCk7
Ci0gICAgcGFpbnRlci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBwYWludGVyLT5zZXRUcmFu
c2Zvcm0obWF0cml4LCB0cnVlKTsKLSAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRhcmdldFJlY3Qs
IHBpeG1hcCwgRmxvYXRSZWN0KHRleHR1cmVRdC5zb3VyY2VSZWN0KCkpKTsKLSAgICBwYWludGVy
LT5zZXRUcmFuc2Zvcm0ocHJldlRyYW5zZm9ybSk7Ci0gICAgcGFpbnRlci0+c2V0T3BhY2l0eShw
cmV2T3BhY2l0eSk7Ci19Ci0KLVBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCi0gICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpCi0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsKLSNlbmRpZgotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlclF0KTsKLX0KLQotUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZVF0KCkpOwotfQotCi1CaXRtYXBUZXh0dXJlUXQ6OkJp
dG1hcFRleHR1cmVRdCgpCi0gICAgOiBtX2lzUGFja2VkKGZhbHNlKQotewotCi19Ci0KLXZvaWQg
VGV4dHVyZU1hcHBlclF0OjpiZWdpblBhaW50aW5nKCkKLXsKLSAgICBtX3BhaW50ZXItPnNhdmUo
KTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmVuZFBhaW50aW5nKCkKLXsKLSAgICBtX3Bh
aW50ZXItPnJlc3RvcmUoKTsKLX0KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLWNsYXNz
IEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQgOiBwdWJsaWMgQkdSQTMyUHJlbXVsdGltcGxp
ZWRCdWZmZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
IGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBvcGFxdWUpCi0gICAgewotICAg
ICAgICAvLyBtX2ltYWdlIGlzIG9ubHkgdXNpbmcgZHVyaW5nIHBhaW50LCBpdCdzIHNhZmUgdG8g
b3ZlcnJpZGUgaXQuCi0gICAgICAgIG1faW1hZ2UgPSBRSW1hZ2UocmVjdC5zaXplKCkud2lkdGgo
KSwgcmVjdC5zaXplKCkuaGVpZ2h0KCksIG9wYXF1ZSA/IFFJbWFnZTo6Rm9ybWF0X1JHQjMyIDog
UUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOwotICAgICAgICBpZiAoIW9wYXF1
ZSkKLSAgICAgICAgICAgIG1faW1hZ2UuZmlsbCgwKTsKLSAgICAgICAgbV9wYWludGVyLmJlZ2lu
KCZtX2ltYWdlKTsKLSAgICAgICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKCZtX3BhaW50
ZXIpOwotICAgICAgICBtX3BhaW50ZXIudHJhbnNsYXRlKC1yZWN0LngoKSwgLXJlY3QueSgpKTsK
LSAgICAgICAgcmV0dXJuICZtX3BhaW50ZXI7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGVu
ZFBhaW50KCkgeyBtX3BhaW50ZXIuZW5kKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQqIGRhdGEoKSB7
IHJldHVybiBtX2ltYWdlLmJpdHMoKTsgfQotCi1wcml2YXRlOgotICAgIFFQYWludGVyIG1fcGFp
bnRlcjsKLSAgICBRSW1hZ2UgbV9pbWFnZTsKLX07Ci0KLVBhc3NPd25QdHI8QkdSQTMyUHJlbXVs
dGltcGxpZWRCdWZmZXI+IEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKQotewot
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCgpKTsK
LX0KLQotdWludDY0X3QgdWlkRm9ySW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIHJldHVybiBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c2VyaWFsTnVtYmVyKCk7Ci19Ci0j
ZW5kaWYKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9UZXh0dXJlTWFwcGVyUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RleHR1cmVNYXBwZXJRdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGZlZTAz
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oIgotCi0jaWZuZGVmIFRleHR1cmVNYXBwZXJRdF9oCi0jZGVmaW5lIFRleHR1cmVNYXBwZXJR
dF9oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQml0bWFwVGV4dHVyZVF0IDogcHVi
bGljIEJpdG1hcFRleHR1cmUgewotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyUXQ7Ci1w
dWJsaWM6Ci0gICAgQml0bWFwVGV4dHVyZVF0KCk7Ci0gICAgfkJpdG1hcFRleHR1cmVRdCgpIHsg
ZGVzdHJveSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICB2aXJ0dWFsIElu
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9waXhtYXAud2lkdGgoKSwgbV9w
aXhtYXAuaGVpZ2h0KCkpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUm
LCBib29sIG9wYXF1ZSk7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVn
aW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQ
YWludCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgc2F2ZShjb25zdCBTdHJpbmcmIHBhdGgpOwotICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fcGl4bWFwLmlzTnVsbCgpIHx8ICFtX2ltYWdl
LmlzTnVsbCgpOyB9Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50
UmVjdCgwLCAwLCBjb250ZW50U2l6ZSgpLndpZHRoKCksIGNvbnRlbnRTaXplKCkuaGVpZ2h0KCkp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhY2soKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCk7
Ci0gICAgdmlydHVhbCBib29sIGlzUGFja2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BhY2tlZDsg
fQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1hdCwgY29uc3QgSW50
UmVjdCYsIHZvaWQqIGJpdHMpOwotCi0gICAgUVBhaW50ZXIqIHBhaW50ZXIoKSB7IHJldHVybiAm
bV9wYWludGVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgUVBhaW50ZXIgbV9wYWludGVyOwotICAgIFFQ
aXhtYXAgbV9waXhtYXA7Ci0gICAgUUltYWdlIG1faW1hZ2U7Ci0gICAgYm9vbCBtX2lzUGFja2Vk
OwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclF0IDogcHVibGljIFRleHR1cmVNYXBwZXIgewot
cHVibGljOgotICAgIFRleHR1cmVNYXBwZXJRdCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdU
ZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUpOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRt
YXBUZXh0dXJlKiBzdXJmYWNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCopOwotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQo
KTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRl
eHR1cmUoKTsKLSAgICB2aXJ0dWFsIEludFNpemUgdmlld3BvcnRTaXplKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRp
bmcoKTsKLQotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUVBhaW50ZXIqIHBhaW50ZXIpCi0g
ICAgewotICAgICAgICBpZiAocGFpbnRlcikKLSAgICAgICAgICAgIHBhaW50ZXItPnNldFJlbmRl
ckhpbnRzKFFQYWludGVyOjpBbnRpYWxpYXNpbmcgfCBRUGFpbnRlcjo6U21vb3RoUGl4bWFwVHJh
bnNmb3JtLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1h
cHBlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJRdCk7IH0K
LXByaXZhdGU6Ci0gICAgaW5saW5lIFFQYWludGVyKiBjdXJyZW50UGFpbnRlcigpIHsgcmV0dXJu
IG1fY3VycmVudFN1cmZhY2UgPyBtX2N1cnJlbnRTdXJmYWNlLT5wYWludGVyKCkgOiBtX3BhaW50
ZXI7IH0KLQotICAgIFFQYWludGVyKiBtX3BhaW50ZXI7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBt
X2NvbnRleHQ7Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmVRdD4gbV9jdXJyZW50U3VyZmFjZTsK
LX07Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCmluZGV4IGRkMzNmMGQuLjY4NmE1Nzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlci5jcHAKQEAgLTIwLDYgKzIwLDkgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NzEsNSArNzQsMTMzIEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlcjo6
YWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJiBzCiAgICAgcmV0dXJuIHNlbGVj
dGVkVGV4dHVyZTsKIH0KIAorCitjbGFzcyBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIgOiBwdWJs
aWMgQml0bWFwVGV4dHVyZSB7CisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlcjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyKTsgfQor
ICAgIH5CaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIoKSB7IGRlc3Ryb3koKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95KCkgeyBtX2ltYWdlLmNsZWFyKCk7IH0KKyAgICB2aXJ0dWFsIEludFNp
emUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UtPnNpemUoKTsgfQorICAgIHZpcnR1YWwg
dm9pZCByZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSkKKyAgICB7CisgICAg
ICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHNpemUsIG9wYXF1ZSk7CisgICAgICAgIG1faW1hZ2Ug
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgIGlubGluZSBHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdlLT5jb250
ZXh0KCkgOiAwOyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7CisgICAgdm9pZCB1cGRh
dGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KTsK
K3ByaXZhdGU6CisgICAgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyKCkgeyB9CisgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBtX2ltYWdlOworfTsKKworCitjbGFzcyBUZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lk
IGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3Qg
Qml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgeyBtX2N1cnJlbnRT
dXJmYWNlID0gc3VyZmFjZTt9CisgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKSB7IGdyYXBoaWNz
Q29udGV4dCgpLT5yZXN0b3JlKCk7IH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFw
cGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyKTsgfQorICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIHsg
cmV0dXJuIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCk7IH0KKyAgICBpbmxpbmUg
R3JhcGhpY3NDb250ZXh0KiBjdXJyZW50Q29udGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3VyZmFjZSA/IHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcio+
KG1fY3VycmVudFN1cmZhY2UuZ2V0KCkpLT5ncmFwaGljc0NvbnRleHQoKSA6IGdyYXBoaWNzQ29u
dGV4dCgpOworICAgIH0KKworICAgIHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRp
b25Nb2RlKCkgY29uc3QgeyByZXR1cm4gU29mdHdhcmVNb2RlOyB9CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fY3VycmVudFN1cmZhY2U7Cit9OworCit2b2lkIEJpdG1h
cFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1hZ2Ug
aW1hZ2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1Y2hhcio+KGRhdGEpLCB0YXJnZXRSZWN0Lndp
ZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIHRhcmdldFJlY3Qud2lkdGgoKSAqIDQsIFFJbWFn
ZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9
IG1faW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgcGFpbnRlci0+c2F2
ZSgpOworICAgIHBhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX1NvdXJjZSk7CisgICAgcGFpbnRlci0+ZHJhd0ltYWdlKHRhcmdldFJlY3QsIGltYWdl
KTsKKyAgICBwYWludGVyLT5yZXN0b3JlKCk7CisjZW5kaWYKK30KKwordm9pZCBCaXRtYXBUZXh0
dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGl4ZWxGb3JtYXQpCit7
CisgICAgbV9pbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIENvbXBvc2l0ZUNvcHkpOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQgPSBjdXJyZW50Q29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcHJldmlvdXNUcmFuc2Zvcm0gPSBjb250ZXh0LT5nZXQzRFRyYW5zZm9ybSgpOwor
I2Vsc2UKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcHJldmlvdXNUcmFuc2Zvcm0gPSBjb250ZXh0LT5n
ZXRDVE0oKTsKKyNlbmRpZgorICAgIGNvbnRleHQtPnNhdmUoKTsKKworI2lmIEVOQUJMRSgzRF9S
RU5ERVJJTkcpCisgICAgY29udGV4dC0+Y29uY2F0M0RUcmFuc2Zvcm0obWF0cml4KTsKKyNlbHNl
CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKG1hdHJpeC50b0FmZmluZSgpKTsKKyNlbmRpZgorCisg
ICAgY29udGV4dC0+Y2xpcChyZWN0KTsKKworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAg
Y29udGV4dC0+c2V0M0RUcmFuc2Zvcm0ocHJldmlvdXNUcmFuc2Zvcm0pOworI2Vsc2UKKyAgICBj
b250ZXh0LT5zZXRDVE0ocHJldmlvdXNUcmFuc2Zvcm0pOworI2VuZGlmCit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlckltYWdlQnVmZmVyOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0
ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKQoreworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGN1cnJlbnRDb250ZXh0
KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBCaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXImIHRleHR1cmVJbWFnZUJ1ZmZlciA9IHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciY+KHRleHR1cmUpOworICAgIEltYWdlQnVmZmVy
KiBpbWFnZSA9IHRleHR1cmVJbWFnZUJ1ZmZlci5tX2ltYWdlLmdldCgpOworICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gbWFza2VkSW1hZ2U7CisKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1Rl
eHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZm
ZXIqIG1hc2sgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIqPiht
YXNrVGV4dHVyZSk7CisgICAgICAgIG1hc2tlZEltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSht
YXNrVGV4dHVyZS0+Y29udGVudFNpemUoKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFz
a0NvbnRleHQgPSBtYXNrZWRJbWFnZS0+Y29udGV4dCgpOworICAgICAgICBtYXNrQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVy
bygpLCBDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgaWYgKG9wYWNpdHkgPCAxKSB7CisgICAgICAg
ICAgICBtYXNrQ29udGV4dC0+c2V0QWxwaGEob3BhY2l0eSk7CisgICAgICAgICAgICBvcGFjaXR5
ID0gMTsKKyAgICAgICAgfQorICAgICAgICBtYXNrQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1h
c2stPm1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCks
IENvbXBvc2l0ZURlc3RpbmF0aW9uSW4pOworICAgICAgICBpbWFnZSA9IG1hc2tlZEltYWdlLmdl
dCgpOworICAgIH0KKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5zZXRBbHBo
YShvcGFjaXR5KTsKKyNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQorICAgIGNvbnRleHQtPmNvbmNh
dDNEVHJhbnNmb3JtKG1hdHJpeCk7CisjZWxzZQorICAgIGNvbnRleHQtPmNvbmNhdENUTShtYXRy
aXgpOworI2VuZGlmCisgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCB0YXJnZXRSZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisK
K1Bhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEFjY2VsZXJh
dGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBTb2Z0d2FyZU1vZGUpCisgICAgICAg
IHJldHVybiBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmNyZWF0ZSgpOworICAgIHJldHVybiBw
bGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCk7Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgK
aW5kZXggZDY2ZmUyZi4uOGUyZTlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCkBAIC00Nyw0NiArNDcsMzEg
QEAgY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIEJpdG1hcFRleHR1cmUgIDogcHVibGljIFJl
ZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgogICAgIGVudW0gUGl4ZWxGb3JtYXQg
eyBCR1JBRm9ybWF0LCBSR0JBRm9ybWF0LCBCR1JGb3JtYXQsIFJHQkZvcm1hdCB9OwotICAgIEJp
dG1hcFRleHR1cmUoKSA6IG1fbG9ja0NvdW50KDApIHt9CisgICAgQml0bWFwVGV4dHVyZSgpCisg
ICAgICAgIDogbV9pc09wYXF1ZSh0cnVlKQorICAgIHsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5C
aXRtYXBUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSB7IH0KIAotICAg
IHZpcnR1YWwgYm9vbCBhbGxvd09mZmxpbmVUZXh0dXJlVXBsb2FkKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGludCBicHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgQml0bWFw
VGV4dHVyZTo6UGl4ZWxGb3JtYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVu
dHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlz
VmFsaWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBicHAoKSBjb25zdCB7IHJldHVy
biAzMjsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IG9wYXF1ZSA9IGZhbHNlKQogICAgIHsKICAgICAgICAgbV9pc09wYXF1ZSA9IG9wYXF1ZTsKICAg
ICAgICAgbV9jb250ZW50U2l6ZSA9IHNpemU7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHBh
Y2soKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29s
IGlzUGFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwotCi0gICAgLy8gRm9yIHBlcmZv
cm1hbmNlIHJlYXNvbnMsIEJpdG1hcFRleHR1cmUgbWlnaHQgbW9kaWZ5IHRoZSBiaXRzIGRpcmVj
dGx5IChzd2l6emxlKS4KLSAgICAvLyBUaHVzLCB0aGlzIG1ldGhvZCBpcyBvbmx5IHJlY29tbWVu
ZGVkIGZvciBidWZmZXIgdXBkYXRlLCBzdWNoIGFzIHVzZWQgYnkgV2ViS2l0Mi4KLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lk
KiBiaXRzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJhd0NvbnRlbnRzKGNvbnN0IElu
dFJlY3QmLCBjb25zdCB2b2lkKiBiaXRzKSB7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBiZWdpblBhaW50TWVkaWEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJlZ2lu
UGFpbnQoSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KLQot
ICAgIGlubGluZSB2b2lkIGxvY2soKSB7ICsrbV9sb2NrQ291bnQ7IH0KLSAgICBpbmxpbmUgdm9p
ZCB1bmxvY2soKSB7IC0tbV9sb2NrQ291bnQ7IH0KLSAgICBpbmxpbmUgYm9vbCBpc0xvY2tlZCgp
IHsgcmV0dXJuIG1fbG9ja0NvdW50OyB9CiAgICAgaW5saW5lIEludFNpemUgY29udGVudFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CiAgICAgaW5saW5lIGludCBudW1iZXJP
ZkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRoKCkgKiBzaXplKCkuaGVpZ2h0KCkg
KiBicHAoKSA+PiAzOyB9CisgICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVy
biBtX2lzT3BhcXVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBpbnQgbV9sb2NrQ291bnQ7CiAgICAg
SW50U2l6ZSBtX2NvbnRlbnRTaXplOwogICAgIGJvb2wgbV9pc09wYXF1ZTsKIH07CkBAIC05Nywz
MiArODIsMjYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlciB7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1h
cFRleHR1cmU7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVy
PiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQgPSAwKTsKKyAgICBlbnVt
IEFjY2VsZXJhdGlvbk1vZGUgeyBTb2Z0d2FyZU1vZGUsIE9wZW5HTE1vZGUgfTsKKyAgICBzdGF0
aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoQWNjZWxlcmF0aW9uTW9kZSBuZXdN
b2RlID0gU29mdHdhcmVNb2RlKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyKCkgeyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMGYsIGNv
bnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkgPSAwOwogCiAgICAgLy8gbWFrZXMg
YSBzdXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dpbmcgZHJhd1RleHR1cmUgY2FsbHMu
CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCop
ID0gMDsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgdmlydHVh
bCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0gMDsKLSAgICBJbnRTaXplIHZp
ZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9Ci0gICAgdm9pZCBz
ZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBtX3ZpZXdwb3J0U2l6ZSA9IHM7IH0K
IAogICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVh
bGl0eSBxdWFsaXR5KSB7IG1faW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB9CiAgICAg
dm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3Rl
eHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KIAogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2ludGVycG9sYXRpb25RdWFs
aXR5OyB9CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dQYXJ0
aWFsVXBkYXRlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
T3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV90cmFuc2Zvcm0g
PSBtYXRyaXg7IH0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9kZSBhY2Nl
bGVyYXRpb25Nb2RlKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRp
bmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRpbmcoKSB7IH0KQEAgLTEzMCw3ICsx
MDksNiBAQCBwdWJsaWM6CiAgICAgLy8gQSBzdXJmYWNlIGlzIHJlbGVhc2VkIGltcGxpY2l0bHkg
d2hlbiBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IGFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYpOwogCi0KIHByb3RlY3RlZDoK
ICAgICBUZXh0dXJlTWFwcGVyKCkKICAgICAgICAgOiBtX2ludGVycG9sYXRpb25RdWFsaXR5KElu
dGVycG9sYXRpb25EZWZhdWx0KQpAQCAtMTM4LDE0ICsxMTYsMjEgQEAgcHJvdGVjdGVkOgogICAg
IHt9CiAKIHByaXZhdGU6CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IHBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQoKTsKKyNl
bHNlCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gcGxhdGZvcm1DcmVhdGVB
Y2NlbGVyYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKICAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRpb25RdWFsaXR5OwogICAgIFRleHRE
cmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1fdHJhbnNmb3JtOwotICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgVmVjdG9y
PFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IG1fdGV4dHVyZVBvb2w7CisgICAgR3JhcGhpY3NDb250
ZXh0KiBtX2NvbnRleHQ7CiB9OwogCi19OworfQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5jcHAKaW5kZXggY2NmNDliYy4uNjg2NmM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUu
Y3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKIAogbmFtZXNwYWNlIHsKQEAgLTE1
NiwxMiArMTU3LDEwIEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllCiAgICAgaWYgKCF0ZXh0dXJl
TWFwcGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogQWRkIGRpcmVjdGx5IGNv
bXBvc2l0ZWQgaW1hZ2VzLgotICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBtX2N1cnJlbnRDb250
ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6IG1fY3VycmVudENvbnRlbnQubmVlZHNE
aXNwbGF5UmVjdDsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250
ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwogCiAgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsg
dGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKICAgICAgICAg
T3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRleF07Ci0gICAgICAgIEZsb2F0
UmVjdCByZWN0ID0gZGlydHlSZWN0OwogICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSkKICAgICAg
ICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKICAg
ICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+JiB0ZXh0dXJlID0gdGlsZS50ZXh0dXJlOwpAQCAt
MTY5LDMxICsxNjgsNDMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWUKIAogICAgICAgICBpZiAo
dGlsZS5uZWVkc1Jlc2V0IHx8IHRleHR1cmUtPmNvbnRlbnRTaXplKCkgIT0gdGlsZVNpemUgfHwg
IXRleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9jdXJyZW50Q29udGVu
dC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlID8gZmFsc2UgOiBtX3N0YXRl
LmNvbnRlbnRzT3BhcXVlKTsKLSAgICAgICAgICAgIHJlY3QgPSB0aWxlLnJlY3Q7CisgICAgICAg
ICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7Cisg
ICAgICAgICAgICBkaXJ0eVJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJlY3QpKTsK
ICAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QodGlsZS5yZWN0KTsKLSAgICAgICAgY29udGVudFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0lu
dFJlY3QocmVjdCkpOwotICAgICAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgIC8v
IFBhaW50IHRoZSBlbnRpcmUgZGlydHkgcmVjdCBpbnRvIGFuIGltYWdlIGJ1ZmZlci4gVGhpcyBl
bnN1cmVzIHdlIG9ubHkgcGFpbnQgb25jZS4KKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShkaXJ0eVJlY3Quc2l6ZSgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIGNvbnRl
eHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUodGV4
dHVyZU1hcHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgt
ZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworICAgIGxheWVyLT5wYWludEdyYXBoaWNz
TGF5ZXJDb250ZW50cygqY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICBpZiAobV9jdXJyZW50Q29u
dGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKQorICAgICAgICBjb250
ZXh0LT5kcmF3SW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgbV9zdGF0ZS5jb250ZW50c1JlY3QpOworCisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBJbWFnZUJ1ZmZlcjo6RG9udENvcHlCYWNraW5nU3RvcmUgaW4gUXQvR1RLIHBvcnRzLCBhbmQg
dGhlbiBjaGFuZ2UgdGhpcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc3Njg5CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGltYWdlQnVmZmVy
LT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisKKyAgICAvLyBEaXZpZGUgdGhlIGltYWdl
IHRvIHRpbGVzLgorICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1f
b3duZWRUaWxlcy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CisgICAgICAgIE93bmVkVGlsZSYgdGls
ZSA9IG1fb3duZWRUaWxlc1t0aWxlSW5kZXhdOworICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCk7CisgICAgICAgIHRhcmdldFJlY3QuaW50ZXJz
ZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0
OwogCi0gICAgICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzID0gY29u
dGVudFJlY3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0KC10aWxlLnJlY3QueCgpLCAtdGls
ZS5yZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMubW92ZShv
ZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQgY29udGV4dCh0ZXh0dXJlLT5iZWdpblBhaW50KGVuY2xvc2luZ0ludFJlY3QoY29u
dGVudFJlY3RJblRpbGVDb29yZGluYXRlcykpKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVy
ZU1hcHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOwotICAgICAgICAgICAgY29udGV4dC50cmFuc2xh
dGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVk
Q29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgICAgICAgICAgaWYgKG1fY3VycmVudENvbnRl
bnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xv
c2luZ0ludFJlY3Qoc2NhbGVkQ29udGVudFJlY3QpKTsKLSAgICAgICAgICAgIHRleHR1cmUtPmVu
ZFBhaW50KCk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gTm9ybWFsaXplIHNvdXJjZVJlY3QgdG8g
dGhlIGJ1ZmZlcidzIGNvb3JkaW5hdGVzLgorICAgICAgICBzb3VyY2VSZWN0Lm1vdmUoLWRpcnR5
UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKworICAgICAgICAvLyBOb3JtYWxpemUgdGFyZ2V0
UmVjdCB0byB0aGUgdGV4dHVyZSdzIGNvb3JkaW5xYXRlcy4KKyAgICAgICAgdGFyZ2V0UmVjdC5t
b3ZlKC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7CisgICAgICAgIHRpbGUudGV4dHVy
ZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIEJp
dG1hcFRleHR1cmU6OlJHQkFGb3JtYXQpOwogICAgIH0KIAogICAgIG1fY3VycmVudENvbnRlbnQu
bmVlZHNEaXNwbGF5ID0gZmFsc2U7CkBAIC00ODEsNyArNDkyLDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCkKICAgICB9CiB9
CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50
IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCB2b2lkKiBiaXRzKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNU
aWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgQVNTRVJUKG1fdGV4
dHVyZU1hcHBlcik7CiAKQEAgLTQ5OCw3ICs1MDksNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNl
UgogICAgIGlmICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCiAgICAgICAgIHRpbGUuYmFja0J1
ZmZlci50ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgdGls
ZS5iYWNrQnVmZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Quc2l6ZSgpLCBmYWxzZSk7Ci0g
ICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKHNvdXJjZVJlY3Qs
IGJpdHMpOworICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhkYXRh
LCBzb3VyY2VSZWN0KTsKICAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IGZlNGIxNGMuLjIzMGM5ZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTm9kZS5oCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGls
ZU93bmVyc2hpcChUaWxlT3duZXJzaGlwIG93bmVyc2hpcCkgeyBtX3N0YXRlLnRpbGVPd25lcnNo
aXAgPSBvd25lcnNoaXA7IH0KICAgICBpbnQgY3JlYXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxl
KTsKICAgICB2b2lkIHJlbW92ZUNvbnRlbnRzVGlsZShpbnQgaWQpOwotICAgIHZvaWQgc2V0Q29u
dGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGJpdHMpOworICAgIHZvaWQgc2V0
Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqKTsKICAgICB2b2lkIHNldFRp
bGVCYWNrQnVmZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRt
YXBUZXh0dXJlKik7CiAgICAgdm9pZCBjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGls
ZXMoKTsKICAgICB2b2lkIHB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYmZyYW1lLmNwcAppbmRleCBjOGU4ZGFkLi43NDE4ODI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAKQEAgLTMzNiw3ICszMzYsNiBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6
OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bgogICAgIHRleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICB0
ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdp
bmdNb2RlKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKLSAgICB0ZXh0dXJlTWFwcGVyLT5z
ZXRWaWV3cG9ydFNpemUoZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAgICBR
UGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0
IFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0gcGFpbnRlci0+d29ybGRUcmFuc2Zvcm0oKTsKICAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDBiODU0
ZjkuLmRhMzFlZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMDItMDIg
IE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBb
UXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8gdXNlIEltYWdlQnVmZmVy
cyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBVc2UgVGV4dHVyZU1hcHBlcjo6Y3JldGUgaW5zdGVh
ZCBvZiBjcmVhdGluZyBUZXh0dXJlTWFwcGVyR0wvVGV4dHVyZU1hcHBlclF0IGRpcmVjdGx5Lgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3F3
ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJDb21wb3NpdGVk
TGF5ZXJzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFw
aGljc0xheWVyKToKKwogMjAxMi0wMi0wMSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhv
ICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIEF2b2lkIGNyZWF0aW5n
IE5hbWVkTm9kZU1hcCB1bm5lY2Vzc2FyaWx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKaW5kZXggNDBlNmIxNC4uNDVkY2ZiYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcApAQCAt
MjgsMTIgKzI4LDggQEAKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclF0LmgiCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oIgotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotI2luY2x1ZGUgIm9wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuaCIKLSNlbmRpZgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTc2LDcgKzcyLDcgQEAgdm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7CiAgICAgICAg
IHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50ID0gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJOb2Rl
Q2xpZW50UXQocGFnZS0+bWFpbkZyYW1lKCksIGxheWVyKSk7Ci0gICAgICAgIHRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVy
UXQpKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCkpOwogICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVu
dC0+c3luY1Jvb3RMYXllcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjY3LDExICsy
NjMsMTEgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAg
ICAgICAgIFFHcmFwaGljc1ZpZXcqIGdyYXBoaWNzVmlldyA9IHZpZXctPnNjZW5lKCktPnZpZXdz
KClbMF07CiAgICAgICAgIGlmIChncmFwaGljc1ZpZXcgJiYgZ3JhcGhpY3NWaWV3LT52aWV3cG9y
dCgpICYmIGdyYXBoaWNzVmlldy0+dmlld3BvcnQoKS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7
Ci0gICAgICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIHRleHR1cmVNYXBwZXJOb2Rl
Q2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFw
cGVyOjpPcGVuR0xNb2RlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRp
ZgotICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyUXQ6OmNyZWF0ZSgpKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQt
PnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LmNsZWFyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggYzU1OTg0Mi4uM2JmOGQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEy
LTAyLTAyICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAg
ICAgICAgW1F0XVtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXIgQVBJIHRvIHVzZSBJbWFn
ZUJ1ZmZlcnMgd2hlbiBwb3NzaWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc3MTQ4CisKKyAgICAgICAgVXNlIFRleHR1cmVNYXBwZXI6OmNyZWF0
ZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIFRleHR1cmVNYXBwZXJHTC9UZXh0dXJlTWFwcGVyUXQgZGly
ZWN0bHkuCisgICAgICAgIFJlbW92ZSBjYWxscyB0byB1bnVzZWQgQVBJLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVy
VHJlZUhvc3RQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5
OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RQcm94eTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcik6CisKIDIwMTItMDItMDIgIEFuZGVycyBDYXJsc3Nv
biAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBOUEFQSSB3aWxsIG5vdCBzZW5kIG1v
dXNlIHVwIGV2ZW50cyB3aGVuIG1vdXNlIGlzIG91dHNpZGUgcGx1Z2luIGFyZWEKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCmlu
ZGV4IDg5NjliYmIuLmM3Y2E3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMjYsOCArMjYsNyBAQAogI2luY2x1
ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJTaGFy
ZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyUXQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAi
VXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1
ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKQEAgLTE3MSw4ICsxNzAsOCBAQCBMYXllclRyZWVIb3N0
UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkoKQogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgaWYgKCFt
X3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJH
TDo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPiht
X3RleHR1cmVNYXBwZXIuZ2V0KCkpKTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVy
ZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAgIEFTU0VSVCht
X3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVu
R0xNb2RlKTsKIAogICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CiAgICAgR3JhcGhpY3NMYXllciog
Y3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwpAQCAtMTg0LDkgKzE4Myw2IEBAIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbWF0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3
cG9ydCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSh2aWV3
cG9ydFsyXSwgdmlld3BvcnRbM10pKTsKICAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4
dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7
CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKQEAgLTIxMSw5ICsyMDcsOCBA
QCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50
VG9HcmFwaGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCiB7CiAgICAgaWYgKCFtX3RleHR1
cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJRdDo6Y3Jl
YXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dXJlTWFwcGVyUXQqPihtX3RleHR1
cmVNYXBwZXIuZ2V0KCkpKTsKLQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFw
cGVyOjpjcmVhdGUoKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25N
b2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKICAgICBzeW5jUmVtb3RlQ29u
dGVudCgpOwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9k
ZShyb290TGF5ZXIoKSk7CiAKQEAgLTQxMCw3ICs0MDUsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQ
cm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBTaGFyZWFibGVCaXRtYXAqIGJpdG1h
cCkKICAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7CiAgICAgICAg
ICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3Jl
YXRlVGV4dHVyZSgpOwogICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFp
bWFnZUhhc0FscGhhKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBzdWJJbWFnZS5jb25zdEJpdHMo
KSk7CisgICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhzdWJJbWFnZS5jb25zdEJp
dHMoKSwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSkpOwogICAgICAgICAg
ICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlvbigpLCB0ZXh0dXJlKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTQ3Myw3ICs0NjgsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJl
Um9vdExheWVyKCkKICAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBz
aXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgogICAgIG1fcm9vdExheWVyLT5zZXRT
aXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOwogICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAg
ICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgICAg
ICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6
T3BlbkdMTW9kZSk7CiAgICAgdG9UZXh0dXJlTWFwcGVyTm9kZShtX3Jvb3RMYXllci5nZXQoKSkt
PnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125206</attachid>
            <date>2012-02-02 16:09:32 -0800</date>
            <delta_ts>2012-02-02 17:09:42 -0800</delta_ts>
            <desc>Revised patch based on Martin Robinson&apos;s comments.</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>57863</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMDZkMGVkLi4wZjBjYjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTItMDItMDIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8g
dXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZW1vdmVkIFRleHR1cmVN
YXBwZXJRdCwgYW5kIGluc3RlYWQgY3JlYXRlZCBhIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBj
bGFzcywKKyAgICAgICAgd2hpY2ggcmVzcG9uZHMgdG8gYW4gIlNvZnR3YXJlIiBtb2RlIG9mIFRl
eHR1cmVNYXBwZXIsIGluc3RlYWQgb2YgY3JlYXRpbmcgc3ViY2xhc3NlcworICAgICAgICBvZiBU
ZXh0dXJlTWFwcGVyIGRpcmVjdGx5LiBUaGlzIGFsbG93cyB1c2luZyB0aGUgc29mdHdhcmUgZmFs
bGJhY2sgb2YgVGV4dHVyZU1hcHBlciBieSBhbnkKKyAgICAgICAgc29ydC4KKworICAgICAgICBU
byBtYWtlIHRoZSBJbWFnZUJ1ZmZlciBiYWNrZW5kIGVhc2llciwgY29udGVudCB1cGRhdGVzIHRv
IEJpdG1hcFRleHR1cmUgY2FuIG5vdyB1c2UgZWl0aGVyCisgICAgICAgIGFuIGltYWdlLCBvciBh
IHJhdyBkYXRhIHBvaW50ZXIuIFRoZSByYXcgZGF0YSBwb2ludGVyIGlzIHByb3ZpZGVkIGZvciBw
ZXJmb3JtYW5jZSByZWFzb25zLAorICAgICAgICBhcyBjb252ZXJ0aW5nIGRhdGEgdG8vZnJvbSBJ
bWFnZSByZWZlcmVuY2VzIGluIFF0IGdlbmVyYXRlcyB1bm5lY2Vzc2FyeSBkZWVwIGNvcGllcyBv
ZiB0aGUKKyAgICAgICAgaW1hZ2UgZGF0YS4KKworICAgICAgICBBbHNvLCBmdW5jdGlvbnMgdGhh
dCB1c2UgVHJhbnNmb3JtYXRpb25NYXRyaXggd2VyZSBhZGRlZCB0byBHcmFwaGljc0NvbnRleHQs
IHRvIGFsbG93IGZvcgorICAgICAgICAzRCB0cmFuc2Zvcm1zIGluIGNyb3NzIHBsYXRmb3JtIGNv
ZGUuCisgICAgICAgIEFmdGVyIHRoaXMgcGF0Y2ggZXZlcnl0aGluZyByZW5kZXJzIHRoZSBzYW1l
LiBBbiBhZGRpdGlvbmFsIGJ1ZyByZXBvcnQgd2FzIGNyZWF0ZWQgdG8gYWxsb3cKKyAgICAgICAg
SW1hZ2VCdWZmZXIgc2hhbGxvdyBpbWFnZSBjb3BpZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NzY4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENvdmVyZWQgZXh0ZW5zaXZlbHkgYnkgZXhpc3RpbmcgdGVzdHMsIG5v
IGJlaGF2aW9yYWwgY2hhbmdlcy4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9U
ZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6Cisg
ICAgICAgIChCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjpCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpzd2l6emxlQkdSQVRv
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXI6OnBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFRl
eHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmFjY2Vs
ZXJhdGlvbk1vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0M0RUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXQzRFRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldDNEVHJhbnNmb3JtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQml0bWFwVGV4dHVyZUltYWdlQnVmZmVy
KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmU6OkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoQml0bWFwVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpicHApOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZTo6aXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
cjo6c2V0R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6
OmdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXI6OlRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaDoKKyAgICAg
ICAgKFRleHR1cmVNYXBwZXJOb2RlKToKKwogMjAxMi0wMi0wMiAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjEwNjU2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGZjNmY2ZTYuLmU0Zjg1N2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQpAQCAtMzkzOSw3ICszOTM5LDYgQEAgd2luMzI6IXdpbjMyLWcrKyo6Y29udGFpbnMoUU1BS0Vf
SE9TVC5hcmNoLCB4ODZfNjQpOnsKIAogY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICBI
RUFERVJTICs9IFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0
LmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5z
Zm9ybS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aCBcCkBAIC0zOTQ4LDcgKzM5NDcsNiBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIu
aAogCiAgICAgU09VUkNFUyArPSBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJU
cmFuc2Zvcm0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJBbmltYXRpb24uY3BwIFwKQEAgLTM5NTksNiArMzk1Nyw3IEBAIGNvbnRhaW5zKENPTkZJRywg
dGV4bWFwKSB7CiAgICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oCiAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICAgICAgQ09ORklHICs9IG9wZW5nbC1zaGltcwor
ICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVJfR0wKICAgICB9CiB9IGVs
c2UgewogICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKaW5kZXggZGVhOTUwYi4uZjdiZWY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEyNCw2ICsxMjQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOworICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0
cml4OwogCiAgICAgZW51bSBUZXh0RHJhd2luZ01vZGUgewogICAgICAgICBUZXh0TW9kZUludmlz
aWJsZSA9IDAsCkBAIC00MDksNiArNDEwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oKSBjb25zdDsKIAorI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgd2hlbiB1c2luZyBh
Y2NlbGVyYXRlZC1jb21wb3NpdGluZyBpbiBzb2Z0d2FyZSBtb2RlLCBsaWtlIGluIFRleHR1cmVN
YXBwZXIuCisgICAgICAgIHZvaWQgY29uY2F0M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKTsKKyAgICAgICAgdm9pZCBzZXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXQzRFRyYW5zZm9y
bSgpIGNvbnN0OworI2VuZGlmCiAgICAgICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29t
cGF0aWJsZSB3aXRoIHRoaXMgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uCiAgICAg
ICAgIC8vIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29u
dGV4dC4KICAgICAgICAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihjb25zdCBJbnRTaXplJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcAppbmRl
eCA2MWQ4YjIwLi5lNzI5NTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAKQEAgLTExNSwx
MSArMTE1LDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmRyYXdUZXh0dXJlKGNvbnN0IEJp
dG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmUKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi1QYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0
dXJlTWFwcGVyQ2Fpcm8pOwotfQotCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVN
YXBwZXJDYWlybzo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBC
aXRtYXBUZXh0dXJlQ2Fpcm8oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGRkZmY2MDUu
LjU4NzI5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yNjUsNTcgKzI2NSw2IEBAIHN0
cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKIAogICAgIH07CiAKLSAgICBzdHJ1Y3QgRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5IHsKLSAgICAgICAgc3RydWN0IEVudHJ5IHsKLSAg
ICAgICAgICAgIEdMdWludCB0ZXh0dXJlOwotICAgICAgICAgICAgaW50IHJlZkNvdW50OwotICAg
ICAgICB9OwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8SW1hZ2VVSUQsIEVudHJ5PiBJbWFnZVRl
eHR1cmVNYXA7Ci0gICAgICAgIEltYWdlVGV4dHVyZU1hcCBpbWFnZVRvVGV4dHVyZTsKLQotICAg
ICAgICBHTHVpbnQgZmluZE9yQ3JlYXRlKEltYWdlVUlEIGltYWdlLCBib29sJiBmb3VuZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgSW1hZ2VUZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IGltYWdl
VG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgewotICAgICAgICAgICAgICAg
IGl0LT5zZWNvbmQucmVmQ291bnQrKzsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQudGV4dHVyZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIEVudHJ5IGVudHJ5OwotICAgICAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVy
ZXMoMSwgJmVudHJ5LnRleHR1cmUpKTsKLSAgICAgICAgICAgIGVudHJ5LnJlZkNvdW50ID0gMTsK
LSAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOwotICAgICAgICAg
ICAgcmV0dXJuIGVudHJ5LnRleHR1cmU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGRlcmVm
KEltYWdlVUlEIGltYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBIYXNoTWFwPEltYWdlVUlE
LCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0gICAg
ICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaXQtPnNlY29uZC5yZWZDb3VudCA8IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgaW1h
Z2VUb1RleHR1cmUucmVtb3ZlKGl0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0
b3J5KCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgfkRpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlUmVwb3NpdG9yeSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoSW1hZ2VUZXh0
dXJlTWFwOjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmJlZ2luKCk7IGl0ICE9IGltYWdl
VG9UZXh0dXJlLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgR0x1aW50IHRleHR1cmUg
PSBpdC0+c2Vjb25kLnRleHR1cmU7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpCi0gICAg
ICAgICAgICAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0gZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Vz
OwotCiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOwpAQCAtMzMyLDYgKzI4MSw3IEBAIHN0
cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICBpbnQgY3VycmVudFByb2dyYW07CiAgICAg
R0xpbnQgcHJldmlvdXNQcm9ncmFtOwogICAgIEdMaW50IHByZXZpb3VzU2Npc3NvclN0YXRlOwor
ICAgIEdMaW50IHZpZXdwb3J0WzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERhdGE+IG1fc2hhcmVk
R0xEYXRhOwogfTsKIApAQCAtMzQyLDU2ICsyOTIsMjUgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNp
emUmLCBib29sIG9wYXF1ZSk7CiAgICAgdm9pZCBiaW5kKCk7Ci0gICAgdmlydHVhbCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwot
ICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB+Qml0bWFwVGV4dHVyZUdMKCkgeyBkZXN0cm95KCk7IH0K
ICAgICB2aXJ0dWFsIHVpbnQzMl90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIGlu
bGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KICAgICBpbmxp
bmUgRmxvYXRTaXplIHJlbGF0aXZlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVTaXpl
OyB9CiAgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFwKSB7
IG1fdGV4dHVyZU1hcHBlciA9IHRleG1hcDsgfQotCi0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhQ
aXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIHZvaWQqKTsKLSAgICB2b2lkIHVwZGF0ZVJhd0Nv
bnRlbnRzKGNvbnN0IEludFJlY3QmLCBjb25zdCB2b2lkKik7Ci0gICAgdm9pZCBwYWNrKCkKLSAg
ICB7Ci0gICAgICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGEgc3R1Yi4KLSAgICAgICAgaWYgKGlz
UGFja2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNQYWNrZWQgPSB0cnVl
OwotICAgIH0KLQotICAgIHZvaWQgdW5wYWNrKCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
Y3VycmVudGx5IGEgc3R1Yi4KLSAgICAgICAgaWYgKCFpc1BhY2tlZCgpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtX2lzUGFja2VkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBp
c1BhY2tlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pc1BhY2tlZDsKLSAgICB9
CisgICAgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRSZWN0JiwgUGl4ZWxGb3JtYXQpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9p
ZCosIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0ZToKICAgICBHTHVpbnQgbV9pZDsKLSAgICBJ
bWFnZVVJRCBtX2ltYWdlVUlEOwogICAgIEZsb2F0U2l6ZSBtX3JlbGF0aXZlU2l6ZTsKLSAgICBi
b29sIG1fb3BhcXVlOwogICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKLSAgICBPd25QdHI8QkdS
QTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IG1fYnVmZmVyOwogICAgIEludFJlY3QgbV9kaXJ0eVJl
Y3Q7CiAgICAgR0x1aW50IG1fZmJvOwogICAgIEdMdWludCBtX3JibzsKICAgICBJbnRTaXplIG1f
YWN0dWFsU2l6ZTsKICAgICBib29sIG1fc3VyZmFjZU5lZWRzUmVzZXQ7Ci0gICAgYm9vbCBtX2lz
UGFja2VkOwogICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOwogICAgIEJpdG1h
cFRleHR1cmVHTCgpCiAgICAgICAgIDogbV9pZCgwKQotICAgICAgICAsIG1faW1hZ2VVSUQoMCkK
LSAgICAgICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAgICAgLCBtX2ZibygwKQogICAgICAgICAs
IG1fcmJvKDApCiAgICAgICAgICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVlKQpAQCAtNTQ0LDYg
KzQ2Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKCkKICNlbmRpZgog
ICAgIGdsQ2xlYXJTdGVuY2lsKDApOwogICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklU
KTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpOwogICAg
IGJpbmRTdXJmYWNlKDApOwogfQogCkBAIC02NjMsNyArNTgzLDYgQEAgc3RhdGljIHZvaWQgdGV4
SW1hZ2UyRFJlc291cmNlU2FmZShzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpCiB2b2lkIEJp
dG1hcFRleHR1cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgYm9vbCBvcGFxdWUp
CiB7CiAgICAgQml0bWFwVGV4dHVyZTo6cmVzZXQobmV3U2l6ZSwgb3BhcXVlKTsKLSAgICBtX2lt
YWdlVUlEID0gMDsKICAgICBJbnRTaXplIG5ld1RleHR1cmVTaXplID0gbmV4dFBvd2VyT2ZUd28o
bmV3U2l6ZSk7CiAgICAgYm9vbCBqdXN0Q3JlYXRlZCA9IGZhbHNlOwogICAgIGlmICghbV9pZCkg
ewpAQCAtNjgyLDI4ICs2MDEsMTAgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0
IEludFNpemUmIG5ld1NpemUsIGJvb2wgb3BhcXVlKQogICAgIH0KICAgICBtX2FjdHVhbFNpemUg
PSBuZXdTaXplOwogICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRTaXplKGZsb2F0KG5ld1NpemUu
d2lkdGgoKSkgLyBtX3RleHR1cmVTaXplLndpZHRoKCksIGZsb2F0KG5ld1NpemUuaGVpZ2h0KCkp
IC8gbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9vcGFxdWUgPSBvcGFxdWU7CiAgICAg
bV9zdXJmYWNlTmVlZHNSZXNldCA9IHRydWU7CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBCaXRtYXBUZXh0dXJlR0w6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQot
ewotICAgIG1fYnVmZmVyID0gQkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNyZWF0ZSgpOwot
ICAgIG1fZGlydHlSZWN0ID0gZGlydHlSZWN0OwotICAgIHJldHVybiBtX2J1ZmZlci0+YmVnaW5Q
YWludChkaXJ0eVJlY3QsIG1fb3BhcXVlKTsKLX0KIAotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmVu
ZFBhaW50KCkKLXsKLSAgICBpZiAoIW1fYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9i
dWZmZXItPmVuZFBhaW50KCk7Ci0gICAgdXBkYXRlQ29udGVudHMoQkdSQUZvcm1hdCwgbV9kaXJ0
eVJlY3QsIG1fYnVmZmVyLT5kYXRhKCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1faWQpKQotICAgIG1fYnVmZmVyLmNsZWFyKCk7Ci19Ci0KLSNpZmRlZiBURVhN
QVBfT1BFTkdMX0VTXzIKIHN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBk
YXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgo
KTsKQEAgLTcxNCw3OSArNjE1LDMxIEBAIHN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVp
bnQzMl90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgcFt4XSA9ICgo
cFt4XSA8PCAxNikgJiAweGZmMDAwMCkgfCAoKHBbeF0gPj4gMTYpICYgMHhmZikgfCAocFt4XSAm
IDB4ZmYwMGZmMDApOwogICAgIH0KIH0KLSNlbmRpZgogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6
dXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIHZvaWQqIGJpdHMpCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29u
c3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKICAgICBHTF9DTUQo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKLSNpZmRlZiBURVhNQVBfT1BFTkdM
X0VTXzIKLSAgICBib29sIHNob3VsZFN3aXp6bGUgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgR0xp
bnQgZ2xGb3JtYXQgPSBHTF9SR0JBOwotICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKLSAgICBj
YXNlIFJHQkFGb3JtYXQ6Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBSR0JGb3JtYXQ6Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEJHUkFGb3JtYXQ6Ci0jaWZkZWYgVEVYTUFQX09QRU5HTF9F
U18yCi0gICAgICAgIHNob3VsZFN3aXp6bGUgPSB0cnVlOwotICAgICAgICBnbEZvcm1hdCA9IEdM
X1JHQkE7Ci0jZWxzZQotICAgICAgICBnbEZvcm1hdCA9IEdMX0JHUkE7Ci0jZW5kaWYKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBCR1JGb3JtYXQ6Ci0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18y
Ci0gICAgICAgIHNob3VsZFN3aXp6bGUgPSB0cnVlOwotICAgICAgICBnbEZvcm1hdCA9IEdMX1JH
QjsKLSNlbHNlCi0gICAgICAgIGdsRm9ybWF0ID0gR0xfQkdSOwotI2VuZGlmCi0gICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBpZiAoc2hvdWxk
U3dpenpsZSkKLSAgICAgICAgc3dpenpsZUJHUkFUb1JHQkEoc3RhdGljX2Nhc3Q8dWludDMyX3Qq
PihiaXRzKSwgcmVjdC5zaXplKCkpOwotI2VuZGlmCi0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGJpdHMpKQorICAgIEdMX0NN
RChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdl
dFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIGRhdGEpKQogfQogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6
dXBkYXRlUmF3Q29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qgdm9pZCogYml0cykK
K3ZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIEJpdG1hcFRl
eHR1cmU6OlBpeGVsRm9ybWF0IGZvcm1hdCkKIHsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICBy
ZXR1cm47CiAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCiAg
ICAgR0x1aW50IGdsRm9ybWF0ID0gaXNPcGFxdWUoKSA/IEdMX1JHQiA6IEdMX1JHQkE7Ci0gICAg
R0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIGJpdHMpKQotfQotCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKLXsKLSAgICBJbWFnZVVJRCB1aWQgPSBpbWFnZSA/IHVpZEZvckltYWdl
KGltYWdlKSA6IDA7Ci0gICAgaWYgKCFpbWFnZSB8fCAhdWlkKSB7Ci0gICAgICAgIGlmIChtX2lt
YWdlVUlEKQotICAgICAgICAgICAgZGVzdHJveSgpOworICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1l
SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWZy
YW1lSW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAodWlkID09IG1faW1h
Z2VVSUQpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgR0x1
aW50IG5ld1RleHR1cmVJRCA9IG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5maW5kT3JDcmVhdGUodWlkLCBmb3VuZCk7Ci0gICAgaWYgKG5ld1RleHR1cmVJ
RCAhPSBtX2lkKSB7Ci0gICAgICAgIG1faW1hZ2VVSUQgPSB1aWQ7Ci0gICAgICAgIGRlc3Ryb3ko
KTsKLSAgICAgICAgbV9pZCA9IG5ld1RleHR1cmVJRDsKLSAgICAgICAgcmVzZXQoaW1hZ2UtPnNp
emUoKSwgZmFsc2UpOwotICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQgY29udGV4dChiZWdpblBhaW50KEludFJlY3QoMCwgMCwgbV90ZXh0dXJlU2l6ZS53
aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSkpOwotICAgICAgICAgICAgY29udGV4dC5k
cmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApLCBDb21w
b3NpdGVDb3B5KTsKLSAgICAgICAgICAgIGVuZFBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9Cisj
aWYgUExBVEZPUk0oUVQpCisgICAgUUltYWdlIHF0SW1hZ2UgPSBmcmFtZUltYWdlLT50b0ltYWdl
KCk7CisgICAgaWYgKEludFNpemUocXRJbWFnZS5zaXplKCkpICE9IHNvdXJjZVJlY3Quc2l6ZSgp
KQorICAgICAgICBxdEltYWdlID0gcXRJbWFnZS5jb3B5KHNvdXJjZVJlY3QpOworICAgIGlmIChm
b3JtYXQgPT0gQkdSQUZvcm1hdCB8fCBmb3JtYXQgPT0gQkdSRm9ybWF0KQorICAgICAgICBzd2l6
emxlQkdSQVRvUkdCQShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocXRJbWFnZS5iaXRzKCkp
LCBxdEltYWdlLnNpemUoKSk7CisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgo
KSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIHF0SW1h
Z2UuY29uc3RCaXRzKCkpKQorI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRp
b25NYXRyaXggY3JlYXRlUHJvamVjdGlvbk1hdHJpeChjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IGZsaXApCkBAIC04MzcsNyArNjkwLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQog
CiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSgpCiB7Ci0gICAgaWYgKG1faWQgJiYgKCFt
X2ltYWdlVUlEIHx8ICFtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZXMuZGVyZWYobV9pbWFnZVVJRCkpKQorICAgIGlmIChtX2lkKQogICAgICAgICBHTF9DTUQo
Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpCiAKICAgICBpZiAobV9mYm8pCkBAIC04NzIsMTIg
KzcyNSwxMyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVy
ZSAqc3VyZmFjZVBvaW50ZXIpCiAgICAgQml0bWFwVGV4dHVyZUdMKiBzdXJmYWNlID0gc3RhdGlj
X2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFjZVBvaW50ZXIpOwogCiAgICAgaWYgKCFzdXJm
YWNlKSB7CisgICAgICAgIEludFNpemUgdmlld3BvcnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwg
ZGF0YSgpLnZpZXdwb3J0WzNdKTsKICAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCAwKSkKLSAgICAgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVh
dGVQcm9qZWN0aW9uTWF0cml4KHZpZXdwb3J0U2l6ZSgpLCB0cnVlKS5tdWx0aXBseSh0cmFuc2Zv
cm0oKSk7CisgICAgICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlv
bk1hdHJpeCh2aWV3cG9ydFNpemUsIHRydWUpOwogICAgICAgICBHTF9DTUQoZ2xTdGVuY2lsRnVu
YyhkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4ID4gMSA/IEdMX0VRVUFMIDogR0xf
QUxXQVlTLCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4IC0gMSwgZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEpKQogICAgICAgICBHTF9DTUQoZ2xTdGVuY2ls
T3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpCi0gICAgICAgIEdMX0NNRChnbFZpZXdwb3J0
KDAsIDAsIHZpZXdwb3J0U2l6ZSgpLndpZHRoKCksIHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpKSkK
LSAgICAgICAgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFjay5hcHBlbmQoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCB2aWV3cG9ydFNpemUoKSkpOworICAgICAgICBHTF9DTUQoZ2xWaWV3
cG9ydCgwLCAwLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKSkK
KyAgICAgICAgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFjay5hcHBlbmQoSW50UmVjdChk
YXRhKCkudmlld3BvcnRbMF0sIGRhdGEoKS52aWV3cG9ydFsxXSwgZGF0YSgpLnZpZXdwb3J0WzJd
LCBkYXRhKCkudmlld3BvcnRbM10pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTg1
LDQgKzgzOSw5IEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpj
cmVhdGVUZXh0dXJlKCkKICAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKK1Bhc3NP
d25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1DcmVhdGVBY2NlbGVy
YXRlZCgpCit7CisgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Cit9CisKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmgKaW5kZXggMWI0MTE4NS4uMDhmYTBhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaApAQCAtNDMsMTYgKzQzLDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1Rl
eHR1cmUodWludDMyX3QgdGV4dHVyZSwgYm9vbCBvcGFxdWUsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0
eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJvb2wgZmxpcCk7CiAgICAgdmly
dHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwogICAgIHZpcnR1
YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZygpOworICAgIHZpcnR1YWwg
dm9pZCBlbmRQYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7Ci0gICAgdmly
dHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7CiAgICAgc3RhdGljIFBhc3NPd25Q
dHI8VGV4dHVyZU1hcHBlckdMPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVy
ZU1hcHBlckdMKTsgfQotICAgIHZvaWQgYmVnaW5QYWludGluZygpOwotICAgIHZvaWQgZW5kUGFp
bnRpbmcoKTsKICAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpIHsgbV9jb250ZXh0ID0gY29udGV4dDsgfQogICAgIEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgdmlydHVhbCBib29sIGlz
T3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgcGxhdGZvcm1V
cGRhdGVDb250ZW50cyhOYXRpdmVJbWFnZVB0ciwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCk7CisgICAgdmlydHVhbCBBY2NlbGVyYXRp
b25Nb2RlIGFjY2VsZXJhdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBPcGVuR0xNb2RlOyB9CiAK
IHByaXZhdGU6CiAgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CkBAIC02NCwxNiArNjUsNiBAQCBwcml2YXRlOgog
fTsKIAogLy8gQW4gb2Zmc2NyZWVuIGJ1ZmZlciB0byBiZSByZW5kZXJlZCBieSBzb2Z0d2FyZS4K
LWNsYXNzIEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5CR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZl
cigpIHsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQo
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBib29sIG9wYXF1ZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBlbmRQYWludCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQqIGRhdGEoKSA9IDA7Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IGNyZWF0ZSgpOwot
fTsKLQogc3RhdGljIGlubGluZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bSkKIHsKICAgICBm
b3IgKGludCBpID0gMHgxMDAwMDAwMDsgaSA+IDA7IGkgPj49IDEpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RR
dC5jcHAKaW5kZXggNDk1YmNhZC4uNjZiYzc2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAg
LTE0Niw3ICsxNDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1Rl
eHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcgogewogICAgIGJsaXRNdWx0
aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVzdG9yZUNvbnRleHQoKTsKIAotICAgIGlmICh0ZXh0dXJl
TWFwcGVyLT5pc09wZW5HTEJhY2tlZCgpKSB7CisgICAgaWYgKHRleHR1cmVNYXBwZXItPmFjY2Vs
ZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKSB7CiAgICAgICAgIFRl
eHR1cmVNYXBwZXJHTCogdGV4bWFwR0wgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0
ZXh0dXJlTWFwcGVyKTsKICAgICAgICAgdGV4bWFwR0wtPmRyYXdUZXh0dXJlKG1fY29udGV4dC0+
bV90ZXh0dXJlLCAhbV9jb250ZXh0LT5tX2F0dHJzLmFscGhhLCBGbG9hdFNpemUoMSwgMSksIHRh
cmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgdHJ1ZSAvKiBmbGlwICovKTsKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCmluZGV4IGVjNzNjM2ZlLi4yNjFiYmVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCkBAIC0xMzM1LDYgKzEzMzUsMzIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICBtX2RhdGEt
PnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKIH0KIAorI2lmIEVOQUJMRSgzRF9S
RU5ERVJJTkcpCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJh
bnNmb3JtKCkgY29uc3QKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKworICAgIHJldHVybiBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y29tYmluZWRUcmFuc2Zvcm0oKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9k
YXRhLT5wKCktPnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJ1ZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZGF0YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0sIGZh
bHNlKTsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChj
b25zdCBLVVJMJiwgY29uc3QgSW50UmVjdCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBw
ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFw
cGVyUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDY0MWNlLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJR
dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUXQuaCIKLQotI2luY2x1ZGUgPFF0Q29yZS9xZGVidWcuaD4KLSNpbmNsdWRlIDxR
dEd1aS9xcGFpbnRlbmdpbmUuaD4KLSNpbmNsdWRlIDxRdEd1aS9xcGl4bWFwLmg+Ci0KLSNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0jIGluY2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFwcGVyR0wu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0
OjpkZXN0cm95KCkKLXsKLSAgICBpZiAobV9waXhtYXAucGFpbnRpbmdBY3RpdmUoKSkKLSAgICAg
ICAgcUZhdGFsKCJEZXN0cm95aW5nIGFuIGFjdGl2ZSBwaXhtYXAiKTsKLSAgICBtX3BpeG1hcCA9
IFFQaXhtYXAoKTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnJlc2V0KGNvbnN0IEludFNp
emUmIHNpemUsIGJvb2wgaXNPcGFxdWUpCi17Ci0gICAgQml0bWFwVGV4dHVyZTo6cmVzZXQoc2l6
ZSwgaXNPcGFxdWUpOwotCi0gICAgaWYgKHNpemUud2lkdGgoKSA+IG1fcGl4bWFwLnNpemUoKS53
aWR0aCgpIHx8IHNpemUuaGVpZ2h0KCkgPiBtX3BpeG1hcC5zaXplKCkuaGVpZ2h0KCkgfHwgbV9w
aXhtYXAuaXNOdWxsKCkpCi0gICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcChzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwotICAgIGlmICghaXNPcGFxdWUpCi0gICAgICAgIG1fcGl4bWFwLmZp
bGwoUXQ6OnRyYW5zcGFyZW50KTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1h
cFRleHR1cmVRdDo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAg
bV9wYWludGVyLmJlZ2luKCZtX3BpeG1hcCk7Ci0gICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFs
aXplKCZtX3BhaW50ZXIpOwotICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50
ZXI6OkNvbXBvc2l0aW9uTW9kZV9DbGVhcik7Ci0gICAgbV9wYWludGVyLmZpbGxSZWN0KFFSZWN0
KGRpcnR5UmVjdCksIFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgbV9wYWludGVyLnNldENvbXBvc2l0
aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZU92ZXIpOwotICAgIHJldHVy
biAmbV9wYWludGVyOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6ZW5kUGFpbnQoKQotewot
ICAgIG1fcGFpbnRlci5lbmQoKTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnVwZGF0ZUNv
bnRlbnRzKFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCB2b2lk
KiBiaXRzKQotewotICAgIG1fcGFpbnRlci5iZWdpbigmbV9waXhtYXApOwotICAgIFFJbWFnZTo6
Rm9ybWF0IHF0Rm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQ7Ci0g
ICAgaWYgKHBpeGVsRm9ybWF0ID09IEJHUkZvcm1hdCB8fCBwaXhlbEZvcm1hdCA9PSBSR0JGb3Jt
YXQpCi0gICAgICAgIHF0Rm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7Ci0gICAgUUltYWdl
IGltYWdlKHN0YXRpY19jYXN0PHVjaGFyKj4oYml0cyksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSwgcXRGb3JtYXQpOwotICAgIGlmIChwaXhlbEZvcm1hdCA9PSBCR1JGb3JtYXQgfHwgcGl4
ZWxGb3JtYXQgPT0gQkdSQUZvcm1hdCkKLSAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZ2JTd2FwcGVk
KCk7Ci0gICAgbV9wYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX1NvdXJjZSk7Ci0gICAgbV9wYWludGVyLmRyYXdJbWFnZShyZWN0LCBpbWFnZSk7Ci0g
ICAgbV9wYWludGVyLmVuZCgpOwotfQotCi1ib29sIEJpdG1hcFRleHR1cmVRdDo6c2F2ZShjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIG1fcGl4bWFwLnNhdmUocGF0aCwgIlBORyIp
OwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBp
bWFnZSkKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgUVBp
eG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAg
aWYgKCFwaXhtYXApCi0gICAgICAgIHJldHVybjsKLSAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChw
aXhtYXAtPnNpemUoKSwgIXBpeG1hcC0+aGFzQWxwaGFDaGFubmVsKCkpOwotICAgIG1fcGl4bWFw
ID0gKnBpeG1hcDsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnBhY2soKQotewotICAgIGlm
IChtX3BpeG1hcC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbWFnZSA9IG1f
cGl4bWFwLnRvSW1hZ2UoKTsKLSAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKLSAgICBtX2lzUGFj
a2VkID0gdHJ1ZTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnVucGFjaygpCi17Ci0gICAg
bV9pc1BhY2tlZCA9IGZhbHNlOwotICAgIGlmIChtX2ltYWdlLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3BpeG1hcCA9IFFQaXhtYXA6OmZyb21JbWFnZShtX2ltYWdlKTsKLSAg
ICBtX2ltYWdlID0gUUltYWdlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpiZWdpbkNs
aXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgICBRUGFpbnRlciogcGFpbnRlciA9IGN1cnJlbnRQYWludGVyKCk7Ci0gICAg
IHBhaW50ZXItPnNhdmUoKTsKLSAgICAgUVRyYW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRl
ci0+dHJhbnNmb3JtKCk7Ci0gICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShtYXRyaXgsIGZhbHNl
KTsKLSAgICAgcGFpbnRlci0+c2V0Q2xpcFJlY3QocmVjdCk7Ci0gICAgIHBhaW50ZXItPnNldFRy
YW5zZm9ybShwcmV2VHJhbnNmb3JtLCBmYWxzZSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0
OjplbmRDbGlwKCkKLXsKLSAgICBjdXJyZW50UGFpbnRlcigpLT5yZXN0b3JlKCk7Ci19Ci0KLUlu
dFNpemUgVGV4dHVyZU1hcHBlclF0Ojp2aWV3cG9ydFNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBJbnRTaXplKG1fcGFpbnRlci0+ZGV2aWNlKCktPndpZHRoKCksIG1fcGFpbnRlci0+ZGV2aWNl
KCktPmhlaWdodCgpKTsKLX0KLQotCi1UZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgp
Ci0gICAgOiBtX2N1cnJlbnRTdXJmYWNlKDApCi17Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0
OjpzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIG1f
Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9wYWludGVyID0gY29udGV4dCA/IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpIDogMDsKLSAgICBpbml0aWFsaXplKG1fcGFpbnRlcik7Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dCogVGV4dHVyZU1hcHBlclF0OjpncmFwaGljc0NvbnRleHQoKQotewotICAg
IHJldHVybiBtX2NvbnRleHQ7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpiaW5kU3VyZmFj
ZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKQotewotICAgIGlmIChtX2N1cnJlbnRTdXJmYWNlID09
IHN1cmZhY2UpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9jdXJyZW50U3VyZmFjZSkKLSAg
ICAgICAgbV9jdXJyZW50U3VyZmFjZS0+bV9wYWludGVyLmVuZCgpOwotICAgIGlmICghc3VyZmFj
ZSkgewotICAgICAgICBtX2N1cnJlbnRTdXJmYWNlID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBCaXRtYXBUZXh0dXJlUXQqIHN1cmZhY2VRdCA9IHN0YXRpY19jYXN0PEJpdG1hcFRl
eHR1cmVRdCo+KHN1cmZhY2UpOwotICAgIGlmICghc3VyZmFjZVF0LT5tX3BhaW50ZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgc3VyZmFjZVF0LT5tX3BhaW50ZXIuYmVnaW4oJnN1cmZhY2VRdC0+bV9w
aXhtYXApOwotICAgIG1fY3VycmVudFN1cmZhY2UgPSBzdXJmYWNlUXQ7Ci19Ci0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyUXQ6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUp
Ci17Ci0gICAgY29uc3QgQml0bWFwVGV4dHVyZVF0JiB0ZXh0dXJlUXQgPSBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlUXQmPih0ZXh0dXJlKTsKLSAgICBRUGFpbnRlciogcGFpbnRlciA9
IG1fcGFpbnRlcjsKLSAgICBRUGl4bWFwIHBpeG1hcCA9IHRleHR1cmVRdC5tX3BpeG1hcDsKLSAg
ICBpZiAobV9jdXJyZW50U3VyZmFjZSkKLSAgICAgICAgcGFpbnRlciA9ICZtX2N1cnJlbnRTdXJm
YWNlLT5tX3BhaW50ZXI7Ci0KLSAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlz
VmFsaWQoKSkgewotICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlUXQqIG1hc2sgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlUXQqPihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIFFQaXht
YXAgaW50ZXJtZWRpYXRlUGl4bWFwKHBpeG1hcC5zaXplKCkpOwotICAgICAgICBpbnRlcm1lZGlh
dGVQaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBtYXNrUGFp
bnRlcigmaW50ZXJtZWRpYXRlUGl4bWFwKTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0Q29tcG9z
aXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgbWFz
a1BhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBwaXhtYXApOwotICAgICAgICBtYXNrUGFpbnRlci5z
ZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbklu
KTsKLSAgICAgICAgbWFza1BhaW50ZXIuZHJhd1BpeG1hcChRUmVjdCgwLCAwLCBwaXhtYXAud2lk
dGgoKSwgcGl4bWFwLmhlaWdodCgpKSwgbWFzay0+bV9waXhtYXAsIG1hc2stPnNvdXJjZVJlY3Qo
KSk7Ci0gICAgICAgIG1hc2tQYWludGVyLmVuZCgpOwotICAgICAgICBwaXhtYXAgPSBpbnRlcm1l
ZGlhdGVQaXhtYXA7Ci0gICAgfQotCi0gICAgY29uc3QgcXJlYWwgcHJldk9wYWNpdHkgPSBwYWlu
dGVyLT5vcGFjaXR5KCk7Ci0gICAgY29uc3QgUVRyYW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFp
bnRlci0+dHJhbnNmb3JtKCk7Ci0gICAgcGFpbnRlci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAg
ICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4LCB0cnVlKTsKLSAgICBwYWludGVyLT5kcmF3
UGl4bWFwKHRhcmdldFJlY3QsIHBpeG1hcCwgRmxvYXRSZWN0KHRleHR1cmVRdC5zb3VyY2VSZWN0
KCkpKTsKLSAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0ocHJldlRyYW5zZm9ybSk7Ci0gICAgcGFp
bnRlci0+c2V0T3BhY2l0eShwcmV2T3BhY2l0eSk7Ci19Ci0KLVBhc3NPd25QdHI8VGV4dHVyZU1h
cHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsK
LSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6
Ok9wZW5HTDIpCi0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsK
LSNlbmRpZgotICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlclF0KTsKLX0KLQot
UGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZVRleHR1cmUo
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZVF0KCkpOwotfQotCi1C
aXRtYXBUZXh0dXJlUXQ6OkJpdG1hcFRleHR1cmVRdCgpCi0gICAgOiBtX2lzUGFja2VkKGZhbHNl
KQotewotCi19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpiZWdpblBhaW50aW5nKCkKLXsKLSAg
ICBtX3BhaW50ZXItPnNhdmUoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmVuZFBhaW50
aW5nKCkKLXsKLSAgICBtX3BhaW50ZXItPnJlc3RvcmUoKTsKLX0KLQotI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKLWNsYXNzIEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQgOiBwdWJsaWMg
QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBv
cGFxdWUpCi0gICAgewotICAgICAgICAvLyBtX2ltYWdlIGlzIG9ubHkgdXNpbmcgZHVyaW5nIHBh
aW50LCBpdCdzIHNhZmUgdG8gb3ZlcnJpZGUgaXQuCi0gICAgICAgIG1faW1hZ2UgPSBRSW1hZ2Uo
cmVjdC5zaXplKCkud2lkdGgoKSwgcmVjdC5zaXplKCkuaGVpZ2h0KCksIG9wYXF1ZSA/IFFJbWFn
ZTo6Rm9ybWF0X1JHQjMyIDogUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOwot
ICAgICAgICBpZiAoIW9wYXF1ZSkKLSAgICAgICAgICAgIG1faW1hZ2UuZmlsbCgwKTsKLSAgICAg
ICAgbV9wYWludGVyLmJlZ2luKCZtX2ltYWdlKTsKLSAgICAgICAgVGV4dHVyZU1hcHBlclF0Ojpp
bml0aWFsaXplKCZtX3BhaW50ZXIpOwotICAgICAgICBtX3BhaW50ZXIudHJhbnNsYXRlKC1yZWN0
LngoKSwgLXJlY3QueSgpKTsKLSAgICAgICAgcmV0dXJuICZtX3BhaW50ZXI7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgeyBtX3BhaW50ZXIuZW5kKCk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2ltYWdlLmJpdHMoKTsgfQotCi1wcml2YXRlOgot
ICAgIFFQYWludGVyIG1fcGFpbnRlcjsKLSAgICBRSW1hZ2UgbV9pbWFnZTsKLX07Ci0KLVBhc3NP
d25QdHI8QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IEJHUkEzMlByZW11bHRpbXBsaWVkQnVm
ZmVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQkdSQTMyUHJlbXVsdGlt
cGxpZWRCdWZmZXJRdCgpKTsKLX0KLQotdWludDY0X3QgdWlkRm9ySW1hZ2UoSW1hZ2UqIGltYWdl
KQotewotICAgIHJldHVybiBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c2Vy
aWFsTnVtYmVyKCk7Ci19Ci0jZW5kaWYKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwOGZlZTAzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAs
MCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJ0
ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgotCi0jaWZuZGVmIFRleHR1cmVNYXBwZXJRdF9oCi0jZGVm
aW5lIFRleHR1cmVNYXBwZXJRdF9oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQml0
bWFwVGV4dHVyZVF0IDogcHVibGljIEJpdG1hcFRleHR1cmUgewotICAgIGZyaWVuZCBjbGFzcyBU
ZXh0dXJlTWFwcGVyUXQ7Ci1wdWJsaWM6Ci0gICAgQml0bWFwVGV4dHVyZVF0KCk7Ci0gICAgfkJp
dG1hcFRleHR1cmVRdCgpIHsgZGVzdHJveSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3ko
KTsKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9w
aXhtYXAud2lkdGgoKSwgbV9waXhtYXAuaGVpZ2h0KCkpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJl
c2V0KGNvbnN0IEludFNpemUmLCBib29sIG9wYXF1ZSk7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAg
IHZpcnR1YWwgdm9pZCBlbmRQYWludCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
SW1hZ2UoSW1hZ2UqKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2F2ZShjb25zdCBTdHJpbmcmIHBhdGgp
OwotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fcGl4bWFwLmlz
TnVsbCgpIHx8ICFtX2ltYWdlLmlzTnVsbCgpOyB9Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0KCkg
Y29uc3QgeyByZXR1cm4gSW50UmVjdCgwLCAwLCBjb250ZW50U2l6ZSgpLndpZHRoKCksIGNvbnRl
bnRTaXplKCkuaGVpZ2h0KCkpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhY2soKTsKLSAgICB2aXJ0
dWFsIHZvaWQgdW5wYWNrKCk7Ci0gICAgdmlydHVhbCBib29sIGlzUGFja2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1BhY2tlZDsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhQaXhl
bEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIHZvaWQqIGJpdHMpOwotCi0gICAgUVBhaW50ZXIqIHBh
aW50ZXIoKSB7IHJldHVybiAmbV9wYWludGVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgUVBhaW50ZXIg
bV9wYWludGVyOwotICAgIFFQaXhtYXAgbV9waXhtYXA7Ci0gICAgUUltYWdlIG1faW1hZ2U7Ci0g
ICAgYm9vbCBtX2lzUGFja2VkOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclF0IDogcHVibGlj
IFRleHR1cmVNYXBwZXIgewotcHVibGljOgotICAgIFRleHR1cmVNYXBwZXJRdCgpOwotCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3Bh
Y2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwotICAgIHZpcnR1YWwgdm9p
ZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhp
Y3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCopOwotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9v
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1h
cFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIEludFNpemUgdmlld3BvcnRT
aXplKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZW5kUGFpbnRpbmcoKTsKLQotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUVBh
aW50ZXIqIHBhaW50ZXIpCi0gICAgewotICAgICAgICBpZiAocGFpbnRlcikKLSAgICAgICAgICAg
IHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWludGVyOjpBbnRpYWxpYXNpbmcgfCBRUGFpbnRl
cjo6U21vb3RoUGl4bWFwVHJhbnNmb3JtLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBh
c3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRl
eHR1cmVNYXBwZXJRdCk7IH0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFFQYWludGVyKiBjdXJyZW50
UGFpbnRlcigpIHsgcmV0dXJuIG1fY3VycmVudFN1cmZhY2UgPyBtX2N1cnJlbnRTdXJmYWNlLT5w
YWludGVyKCkgOiBtX3BhaW50ZXI7IH0KLQotICAgIFFQYWludGVyKiBtX3BhaW50ZXI7Ci0gICAg
R3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmVRdD4g
bV9jdXJyZW50U3VyZmFjZTsKLX07Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCmluZGV4
IGRkMzNmMGQuLjY4NmE1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKQEAgLTIwLDYgKzIwLDkgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAKKyNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNzEsNSArNzQsMTMzIEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gVGV4dHVyZU1hcHBlcjo6YWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJiBz
CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dHVyZTsKIH0KIAorCitjbGFzcyBCaXRtYXBUZXh0dXJl
SW1hZ2VCdWZmZXIgOiBwdWJsaWMgQml0bWFwVGV4dHVyZSB7CisgICAgZnJpZW5kIGNsYXNzIFRl
eHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVy
ZUltYWdlQnVmZmVyKTsgfQorICAgIH5CaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIoKSB7IGRlc3Ry
b3koKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgeyBtX2ltYWdlLmNsZWFyKCk7IH0K
KyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UtPnNpemUo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIG9w
YXF1ZSkKKyAgICB7CisgICAgICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHNpemUsIG9wYXF1ZSk7
CisgICAgICAgIG1faW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAg
IGlubGluZSBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIHsgcmV0dXJuIG1faW1h
Z2UgPyBtX2ltYWdlLT5jb250ZXh0KCkgOiAwOyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNv
bnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1h
dCk7CisgICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0KTsKK3ByaXZhdGU6CisgICAgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVy
KCkgeyB9CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlOworfTsKKworCitjbGFzcyBU
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOworICAgIHZpcnR1
YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3Vy
ZmFjZSkgeyBtX2N1cnJlbnRTdXJmYWNlID0gc3VyZmFjZTt9CisgICAgdmlydHVhbCB2b2lkIGVu
ZENsaXAoKSB7IGdyYXBoaWNzQ29udGV4dCgpLT5yZXN0b3JlKCk7IH0KKyAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4
dHVyZU1hcHBlckltYWdlQnVmZmVyKTsgfQorICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
Y3JlYXRlVGV4dHVyZSgpIHsgcmV0dXJuIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCk7IH0KKyAgICBpbmxpbmUgR3JhcGhpY3NDb250ZXh0KiBjdXJyZW50Q29udGV4dCgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9jdXJyZW50U3VyZmFjZSA/IHN0YXRpY19jYXN0PEJpdG1hcFRl
eHR1cmVJbWFnZUJ1ZmZlcio+KG1fY3VycmVudFN1cmZhY2UuZ2V0KCkpLT5ncmFwaGljc0NvbnRl
eHQoKSA6IGdyYXBoaWNzQ29udGV4dCgpOworICAgIH0KKworICAgIHZpcnR1YWwgQWNjZWxlcmF0
aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gU29mdHdhcmVNb2RlOyB9
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fY3VycmVudFN1cmZhY2U7
Cit9OworCit2b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoY29u
c3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyNpZiBQTEFURk9S
TShRVCkKKyAgICBRSW1hZ2UgaW1hZ2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1Y2hhcio+KGRh
dGEpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIHRhcmdldFJlY3Qu
d2lkdGgoKSAqIDQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICBR
UGFpbnRlciogcGFpbnRlciA9IG1faW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7
CisgICAgcGFpbnRlci0+c2F2ZSgpOworICAgIHBhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShR
UGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CisgICAgcGFpbnRlci0+ZHJhd0ltYWdl
KHRhcmdldFJlY3QsIGltYWdlKTsKKyAgICBwYWludGVyLT5yZXN0b3JlKCk7CisjZW5kaWYKK30K
Kwordm9pZCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBp
bWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgUGl4ZWxGb3JtYXQpCit7CisgICAgbV9pbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1h
Z2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIENvbXBvc2l0
ZUNvcHkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6YmVnaW5DbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBjdXJyZW50Q29udGV4dCgpOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcp
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJldmlvdXNUcmFuc2Zvcm0gPSBjb250ZXh0LT5n
ZXQzRFRyYW5zZm9ybSgpOworI2Vsc2UKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcHJldmlvdXNUcmFu
c2Zvcm0gPSBjb250ZXh0LT5nZXRDVE0oKTsKKyNlbmRpZgorICAgIGNvbnRleHQtPnNhdmUoKTsK
KworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAgY29udGV4dC0+Y29uY2F0M0RUcmFuc2Zv
cm0obWF0cml4KTsKKyNlbHNlCisgICAgY29udGV4dC0+Y29uY2F0Q1RNKG1hdHJpeC50b0FmZmlu
ZSgpKTsKKyNlbmRpZgorCisgICAgY29udGV4dC0+Y2xpcChyZWN0KTsKKworI2lmIEVOQUJMRSgz
RF9SRU5ERVJJTkcpCisgICAgY29udGV4dC0+c2V0M0RUcmFuc2Zvcm0ocHJldmlvdXNUcmFuc2Zv
cm0pOworI2Vsc2UKKyAgICBjb250ZXh0LT5zZXRDVE0ocHJldmlvdXNUcmFuc2Zvcm0pOworI2Vu
ZGlmCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJp
dG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQoreworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCA9IGN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXImIHRleHR1cmVJbWFnZUJ1ZmZl
ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciY+KHRleHR1cmUp
OworICAgIEltYWdlQnVmZmVyKiBpbWFnZSA9IHRleHR1cmVJbWFnZUJ1ZmZlci5tX2ltYWdlLmdl
dCgpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza2VkSW1hZ2U7CisKKyAgICBpZiAobWFz
a1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAgICBjb25zdCBCaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXIqIG1hc2sgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0
dXJlSW1hZ2VCdWZmZXIqPihtYXNrVGV4dHVyZSk7CisgICAgICAgIG1hc2tlZEltYWdlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtYXNrVGV4dHVyZS0+Y29udGVudFNpemUoKSk7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dCogbWFza0NvbnRleHQgPSBtYXNrZWRJbWFnZS0+Y29udGV4dCgpOworICAg
ICAgICBtYXNrQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBJbnRQb2ludDo6emVybygpLCBDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgaWYgKG9wYWNp
dHkgPCAxKSB7CisgICAgICAgICAgICBtYXNrQ29udGV4dC0+c2V0QWxwaGEob3BhY2l0eSk7Cisg
ICAgICAgICAgICBvcGFjaXR5ID0gMTsKKyAgICAgICAgfQorICAgICAgICBtYXNrQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKG1hc2stPm1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IEludFBvaW50Ojp6ZXJvKCksIENvbXBvc2l0ZURlc3RpbmF0aW9uSW4pOworICAgICAgICBpbWFn
ZSA9IG1hc2tlZEltYWdlLmdldCgpOworICAgIH0KKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAg
ICBjb250ZXh0LT5zZXRBbHBoYShvcGFjaXR5KTsKKyNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQor
ICAgIGNvbnRleHQtPmNvbmNhdDNEVHJhbnNmb3JtKG1hdHJpeCk7CisjZWxzZQorICAgIGNvbnRl
eHQtPmNvbmNhdENUTShtYXRyaXgpOworI2VuZGlmCisgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVm
ZmVyKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCB0YXJnZXRSZWN0KTsKKyAgICBjb250ZXh0
LT5yZXN0b3JlKCk7Cit9CisKK1Bhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBTb2Z0
d2FyZU1vZGUpCisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmNyZWF0
ZSgpOworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCk7Cit9CisKIH0KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggZDY2ZmUyZi4uOGUyZTlmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5o
CkBAIC00Nyw0NiArNDcsMzEgQEAgY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIEJpdG1hcFRl
eHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgogICAg
IGVudW0gUGl4ZWxGb3JtYXQgeyBCR1JBRm9ybWF0LCBSR0JBRm9ybWF0LCBCR1JGb3JtYXQsIFJH
QkZvcm1hdCB9OwotICAgIEJpdG1hcFRleHR1cmUoKSA6IG1fbG9ja0NvdW50KDApIHt9CisgICAg
Qml0bWFwVGV4dHVyZSgpCisgICAgICAgIDogbV9pc09wYXF1ZSh0cnVlKQorICAgIHsKKyAgICB9
CisKICAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koKSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBhbGxvd09mZmxpbmVUZXh0dXJlVXBsb2Fk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBicHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQorICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBi
cHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJ
bnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSA9IGZhbHNlKQogICAgIHsKICAgICAgICAgbV9pc09w
YXF1ZSA9IG9wYXF1ZTsKICAgICAgICAgbV9jb250ZW50U2l6ZSA9IHNpemU7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB2b2lkIHBhY2soKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCkgeyB9
Ci0gICAgdmlydHVhbCBib29sIGlzUGFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQot
ICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwot
Ci0gICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIEJpdG1hcFRleHR1cmUgbWlnaHQgbW9k
aWZ5IHRoZSBiaXRzIGRpcmVjdGx5IChzd2l6emxlKS4KLSAgICAvLyBUaHVzLCB0aGlzIG1ldGhv
ZCBpcyBvbmx5IHJlY29tbWVuZGVkIGZvciBidWZmZXIgdXBkYXRlLCBzdWNoIGFzIHVzZWQgYnkg
V2ViS2l0Mi4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQsIGNv
bnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJh
d0NvbnRlbnRzKGNvbnN0IEludFJlY3QmLCBjb25zdCB2b2lkKiBiaXRzKSB7IH0KLSAgICB2aXJ0
dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50TWVkaWEoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGJlZ2luUGFpbnQoSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6
ZSgpLmhlaWdodCgpKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJikgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIGlubGluZSB2b2lkIGxvY2soKSB7ICsrbV9sb2NrQ291bnQ7
IH0KLSAgICBpbmxpbmUgdm9pZCB1bmxvY2soKSB7IC0tbV9sb2NrQ291bnQ7IH0KLSAgICBpbmxp
bmUgYm9vbCBpc0xvY2tlZCgpIHsgcmV0dXJuIG1fbG9ja0NvdW50OyB9CiAgICAgaW5saW5lIElu
dFNpemUgY29udGVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CiAgICAg
aW5saW5lIGludCBudW1iZXJPZkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRoKCkg
KiBzaXplKCkuaGVpZ2h0KCkgKiBicHAoKSA+PiAzOyB9CisgICAgaW5saW5lIGJvb2wgaXNPcGFx
dWUoKSBjb25zdCB7IHJldHVybiBtX2lzT3BhcXVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBpbnQg
bV9sb2NrQ291bnQ7CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOwogICAgIGJvb2wgbV9pc09w
YXF1ZTsKIH07CkBAIC05NywzMiArODIsMjYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlciB7CiAgICAg
ZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQgPSAwKTsKKyAgICBlbnVtIEFjY2VsZXJhdGlvbk1vZGUgeyBTb2Z0d2FyZU1vZGUsIE9wZW5H
TE1vZGUgfTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoQWNj
ZWxlcmF0aW9uTW9kZSBuZXdNb2RlID0gU29mdHdhcmVNb2RlKTsKICAgICB2aXJ0dWFsIH5UZXh0
dXJlTWFwcGVyKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0
bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQg
b3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkgPSAw
OwogCiAgICAgLy8gbWFrZXMgYSBzdXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dpbmcg
ZHJhd1RleHR1cmUgY2FsbHMuCiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRl
eHR1cmUqIHN1cmZhY2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0
KEdyYXBoaWNzQ29udGV4dCopID0gMDsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0KKyAgICB2
aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9jb250
ZXh0OyB9CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0g
MDsKLSAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRT
aXplOyB9Ci0gICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBtX3Zp
ZXdwb3J0U2l6ZSA9IHM7IH0KIAogICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW50ZXJwb2xhdGlvblF1YWxpdHkg
PSBxdWFsaXR5OyB9CiAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkgeyBtX3RleHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KIAogICAgIEludGVycG9s
YXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBt
X2ludGVycG9sYXRpb25RdWFsaXR5OyB9CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERy
YXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dQYXJ0aWFsVXBkYXRlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgpIHsgbV90cmFuc2Zvcm0gPSBtYXRyaXg7IH0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgQWNj
ZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVh
bCB2b2lkIGJlZ2luUGFpbnRpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRpbmco
KSB7IH0KQEAgLTEzMCw3ICsxMDksNiBAQCBwdWJsaWM6CiAgICAgLy8gQSBzdXJmYWNlIGlzIHJl
bGVhc2VkIGltcGxpY2l0bHkgd2hlbiBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IGFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYp
OwogCi0KIHByb3RlY3RlZDoKICAgICBUZXh0dXJlTWFwcGVyKCkKICAgICAgICAgOiBtX2ludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25EZWZhdWx0KQpAQCAtMTM4LDE0ICsxMTYsMjEg
QEAgcHJvdGVjdGVkOgogICAgIHt9CiAKIHByaXZhdGU6CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IHBsYXRmb3JtQ3JlYXRl
QWNjZWxlcmF0ZWQoKTsKKyNlbHNlCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBl
cj4gcGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisjZW5kaWYKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRpb25R
dWFsaXR5OwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlOwotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIEludFNpemUgbV92aWV3cG9y
dFNpemU7CiAgICAgVmVjdG9yPFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IG1fdGV4dHVyZVBvb2w7
CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7CiB9OwogCi19OworfQogCiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXggY2NmNDliYy4uNjg2NmM0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKIAog
bmFtZXNwYWNlIHsKQEAgLTE1NiwxMiArMTU3LDEwIEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXll
CiAgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhN
RTogQWRkIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzLgotICAgIEZsb2F0UmVjdCBkaXJ0eVJl
Y3QgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6IG1fY3Vy
cmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdDsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRpcmVSZWN0
KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwogCiAgICAgZm9yIChzaXpl
X3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxl
SW5kZXgpIHsKICAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRl
eF07Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gZGlydHlSZWN0OwogICAgICAgICBpZiAoIXRp
bGUudGV4dHVyZSkKICAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNy
ZWF0ZVRleHR1cmUoKTsKICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+JiB0ZXh0dXJlID0g
dGlsZS50ZXh0dXJlOwpAQCAtMTY5LDMxICsxNjgsNDMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xh
eWUKIAogICAgICAgICBpZiAodGlsZS5uZWVkc1Jlc2V0IHx8IHRleHR1cmUtPmNvbnRlbnRTaXpl
KCkgIT0gdGlsZVNpemUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgdGls
ZS5uZWVkc1Jlc2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6
ZSwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBl
ID8gZmFsc2UgOiBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsKLSAgICAgICAgICAgIHJlY3QgPSB0
aWxlLnJlY3Q7CisgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9zdGF0ZS5j
b250ZW50c09wYXF1ZSk7CisgICAgICAgICAgICBkaXJ0eVJlY3QudW5pdGUoZW5jbG9zaW5nSW50
UmVjdCh0aWxlLnJlY3QpKTsKICAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkaXJ0eVJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgSW50UmVjdCBjb250ZW50UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KTsKLSAgICAgICAgY29udGVudFJlY3QuaW50
ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOwotICAgICAgICBpZiAoY29udGVudFJlY3Qu
aXNFbXB0eSgpKQorICAgIC8vIFBhaW50IHRoZSBlbnRpcmUgZGlydHkgcmVjdCBpbnRvIGFuIGlt
YWdlIGJ1ZmZlci4gVGhpcyBlbnN1cmVzIHdlIG9ubHkgcGFpbnQgb25jZS4KKyAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShkaXJ0eVJlY3Qu
c2l6ZSgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpOworICAgIGNvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVy
ZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb250ZXh0LT5zZXRU
ZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgIGNv
bnRleHQtPnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworICAgIGxh
eWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgZGlydHlSZWN0KTsKKyAg
ICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRU
eXBlKQorICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5n
ZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgbV9zdGF0ZS5jb250ZW50c1JlY3QpOworCisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBJbWFnZUJ1ZmZlcjo6RG9udENvcHlCYWNraW5nU3RvcmUgaW4g
UXQvR1RLIHBvcnRzLCBhbmQgdGhlbiBjaGFuZ2UgdGhpcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3Njg5CisgICAgUmVmUHRyPEltYWdlPiBp
bWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisKKyAgICAv
LyBEaXZpZGUgdGhlIGltYWdlIHRvIHRpbGVzLgorICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9
IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CisgICAg
ICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxlSW5kZXhdOworICAgICAgICBJ
bnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCk7CisgICAgICAg
IHRhcmdldFJlY3QuaW50ZXJzZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIGlmICh0YXJnZXRSZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBJbnRSZWN0IHNvdXJj
ZVJlY3QgPSB0YXJnZXRSZWN0OwogCi0gICAgICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdEluVGls
ZUNvb3JkaW5hdGVzID0gY29udGVudFJlY3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0KC10
aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRlbnRSZWN0SW5UaWxl
Q29vcmRpbmF0ZXMubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKLQotICAgICAgICB7Ci0g
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCh0ZXh0dXJlLT5iZWdpblBhaW50KGVu
Y2xvc2luZ0ludFJlY3QoY29udGVudFJlY3RJblRpbGVDb29yZGluYXRlcykpKTsKLSAgICAgICAg
ICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0
RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOwotICAgICAgICAg
ICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgICAgICAg
ICBGbG9hdFJlY3Qgc2NhbGVkQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgICAgICAgICAg
aWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlw
ZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50Lmlt
YWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRl
bnRzKGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qoc2NhbGVkQ29udGVudFJlY3QpKTsKLSAgICAg
ICAgICAgIHRleHR1cmUtPmVuZFBhaW50KCk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gTm9ybWFs
aXplIHNvdXJjZVJlY3QgdG8gdGhlIGJ1ZmZlcidzIGNvb3JkaW5hdGVzLgorICAgICAgICBzb3Vy
Y2VSZWN0Lm1vdmUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKworICAgICAgICAv
LyBOb3JtYWxpemUgdGFyZ2V0UmVjdCB0byB0aGUgdGV4dHVyZSdzIGNvb3JkaW5xYXRlcy4KKyAg
ICAgICAgdGFyZ2V0UmVjdC5tb3ZlKC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7Cisg
ICAgICAgIHRpbGUudGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldFJl
Y3QsIHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1cmU6OlJHQkFGb3JtYXQpOwogICAgIH0KIAogICAg
IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CkBAIC00ODEsNyArNDkyLDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVRpbGVzKCkKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRz
VGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCB2b2lkKiBiaXRzKQordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGRhdGEpCiB7
CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7CiAKQEAgLTQ5OCw3ICs1MDksNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29u
c3QgSW50UmVjdCYgc291cmNlUgogICAgIGlmICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCiAg
ICAgICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVU
ZXh0dXJlKCk7CiAgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Qu
c2l6ZSgpLCBmYWxzZSk7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZVJhd0Nv
bnRlbnRzKHNvdXJjZVJlY3QsIGJpdHMpOworICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51
cGRhdGVDb250ZW50cyhkYXRhLCBzb3VyY2VSZWN0KTsKICAgICB0aWxlLmlzQmFja0J1ZmZlclVw
ZGF0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IGZlNGIxNGMuLjIz
MGM5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VGlsZU93bmVyc2hpcChUaWxlT3duZXJzaGlwIG93bmVyc2hpcCkgeyBt
X3N0YXRlLnRpbGVPd25lcnNoaXAgPSBvd25lcnNoaXA7IH0KICAgICBpbnQgY3JlYXRlQ29udGVu
dHNUaWxlKGZsb2F0IHNjYWxlKTsKICAgICB2b2lkIHJlbW92ZUNvbnRlbnRzVGlsZShpbnQgaWQp
OwotICAgIHZvaWQgc2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqIGJp
dHMpOworICAgIHZvaWQgc2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQq
KTsKICAgICB2b2lkIHNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJlKik7CiAgICAgdm9pZCBjbGVhckFsbERpcmVjdGx5
Q29tcG9zaXRlZEltYWdlVGlsZXMoKTsKICAgICB2b2lkIHB1cmdlTm9kZVRleHR1cmVzUmVjdXJz
aXZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAppbmRleCBjOGU4ZGFkLi43NDE4ODI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTMzNiw3ICszMzYsNiBAQCB2b2lk
IFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbgogICAgIHRleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgdGV4dHVyZU1h
cHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKLSAg
ICB0ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0
KCkuc2l6ZSgpKTsKICAgICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0gcGFpbnRlci0+d29ybGRU
cmFuc2Zvcm0oKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCmluZGV4IDBiODU0ZjkuLmRhMzFlZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTItMDItMDIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lh
LmNvbT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkg
dG8gdXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBVc2UgVGV4dHVyZU1h
cHBlcjo6Y3JldGUgaW5zdGVhZCBvZiBjcmVhdGluZyBUZXh0dXJlTWFwcGVyR0wvVGV4dHVyZU1h
cHBlclF0IGRpcmVjdGx5LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRl
OjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdl
Q2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OnNldFJv
b3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKwogMjAxMi0wMi0wMSAgQ2FpbyBNYXJjZWxv
IGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAg
ICAgIEF2b2lkIGNyZWF0aW5nIE5hbWVkTm9kZU1hcCB1bm5lY2Vzc2FyaWx5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKaW5kZXggNDBlNmIx
NC4uNDVkY2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Q
YWdlQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0LmNwcApAQCAtMjgsMTIgKzI4LDggQEAKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclF0LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgInRl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIgotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQot
I2luY2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCIKLSNlbmRpZgogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc2LDcgKzcyLDcgQEAgdm9pZCBQYWdlQ2xpZW50UVdpZGdl
dDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYg
KGxheWVyKSB7CiAgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50ID0gYWRvcHRQdHIobmV3
IFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQocGFnZS0+bWFpbkZyYW1lKCksIGxheWVyKSk7Ci0g
ICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKGFkb3B0UHRy
KG5ldyBUZXh0dXJlTWFwcGVyUXQpKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQt
PnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCkpOwogICAgICAgICB0ZXh0
dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMjY3LDExICsyNjMsMTEgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCiAgICAgICAgIFFHcmFwaGljc1ZpZXcqIGdyYXBoaWNzVmlldyA9IHZp
ZXctPnNjZW5lKCktPnZpZXdzKClbMF07CiAgICAgICAgIGlmIChncmFwaGljc1ZpZXcgJiYgZ3Jh
cGhpY3NWaWV3LT52aWV3cG9ydCgpICYmIGdyYXBoaWNzVmlldy0+dmlld3BvcnQoKS0+aW5oZXJp
dHMoIlFHTFdpZGdldCIpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+
c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAg
IHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6
OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZSgpKTsKKyAgICAgICAgdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRl
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50
LmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzU1OTg0Mi4uM2JmOGQ5NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE5IEBACisyMDEyLTAyLTAyICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhh
bEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBw
ZXIgQVBJIHRvIHVzZSBJbWFnZUJ1ZmZlcnMgd2hlbiBwb3NzaWJsZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MTQ4CisKKyAgICAgICAgVXNlIFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIFRleHR1cmVNYXBwZXJHTC9U
ZXh0dXJlTWFwcGVyUXQgZGlyZWN0bHkuCisgICAgICAgIFJlbW92ZSBjYWxscyB0byB1bnVzZWQg
QVBJLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcik6CisKIDIwMTItMDIt
MDIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBOUEFQ
SSB3aWxsIG5vdCBzZW5kIG1vdXNlIHVwIGV2ZW50cyB3aGVuIG1vdXNlIGlzIG91dHNpZGUgcGx1
Z2luIGFyZWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRy
ZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVl
SG9zdFByb3h5UXQuY3BwCmluZGV4IDg5NjliYmIuLmM3Y2E3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMjYs
OCArMjYsNyBAQAogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQu
aCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
R0wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKQEAgLTE3MSw4ICsxNzAs
OCBAQCBMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkoKQogdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJl
Y3QpCiB7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBl
ciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxU
ZXh0dXJlTWFwcGVyR0wqPihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpKTsKKyAgICAgICAgbV90ZXh0
dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1v
ZGUpOworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBU
ZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKIAogICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CiAg
ICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwpAQCAtMTg0
LDkgKzE4Myw2IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29u
dGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBnbEdldEludGVnZXJ2
KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9y
dFNpemUoSW50U2l6ZSh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pKTsKICAgICBub2RlLT5zZXRU
ZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgbV90ZXh0dXJlTWFwcGVy
LT5iZWdpblBhaW50aW5nKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsK
QEAgLTIxMSw5ICsyMDcsOCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJl
bnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCiB7
CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRl
eHR1cmVNYXBwZXJRdDo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dXJl
TWFwcGVyUXQqPihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpKTsKLQorICAgICAgICBtX3RleHR1cmVN
YXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFw
cGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsK
ICAgICBzeW5jUmVtb3RlQ29udGVudCgpOwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0g
dG9UZXh0dXJlTWFwcGVyTm9kZShyb290TGF5ZXIoKSk7CiAKQEAgLTQxMCw3ICs0MDUsNyBAQCB2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBTaGFy
ZWFibGVCaXRtYXAqIGJpdG1hcCkKICAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlLmNv
cHkocmVjdCk7CiAgICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1f
dGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwogICAgICAgICAgICAgdGV4dHVyZS0+cmVz
ZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhhKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnVw
ZGF0ZVJhd0NvbnRlbnRzKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBz
dWJJbWFnZS5jb25zdEJpdHMoKSk7CisgICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50
cyhzdWJJbWFnZS5jb25zdEJpdHMoKSwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNp
emUoKSkpOwogICAgICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlvbigpLCB0ZXh0
dXJlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ3Myw3ICs0NjgsNyBAQCB2b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVyKCkKICAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91
bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgogICAg
IG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOwogICAgIGlmICghbV90
ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6
OmNyZWF0ZSgpOworICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVh
dGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CiAgICAgdG9UZXh0dXJlTWFwcGVyTm9kZSht
X3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgp
KTsKIH0KIAo=
</data>
<flag name="review"
          id="126651"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125214</attachid>
            <date>2012-02-02 17:09:42 -0800</date>
            <delta_ts>2012-02-03 06:08:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>63578</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMDZkMGVkLi42NDdmYTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTItMDItMDIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8g
dXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJ0
aW4gUm9iaW5zb24uCisKKyAgICAgICAgUmVtb3ZlZCBUZXh0dXJlTWFwcGVyUXQsIGFuZCBpbnN0
ZWFkIGNyZWF0ZWQgYSBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgY2xhc3MsCisgICAgICAgIHdo
aWNoIHJlc3BvbmRzIHRvIGFuICJTb2Z0d2FyZSIgbW9kZSBvZiBUZXh0dXJlTWFwcGVyLCBpbnN0
ZWFkIG9mIGNyZWF0aW5nIHN1YmNsYXNzZXMKKyAgICAgICAgb2YgVGV4dHVyZU1hcHBlciBkaXJl
Y3RseS4gVGhpcyBhbGxvd3MgdXNpbmcgdGhlIHNvZnR3YXJlIGZhbGxiYWNrIG9mIFRleHR1cmVN
YXBwZXIgYnkgYW55CisgICAgICAgIHNvcnQuCisKKyAgICAgICAgVG8gbWFrZSB0aGUgSW1hZ2VC
dWZmZXIgYmFja2VuZCBlYXNpZXIsIGNvbnRlbnQgdXBkYXRlcyB0byBCaXRtYXBUZXh0dXJlIGNh
biBub3cgdXNlIGVpdGhlcgorICAgICAgICBhbiBpbWFnZSwgb3IgYSByYXcgZGF0YSBwb2ludGVy
LiBUaGUgcmF3IGRhdGEgcG9pbnRlciBpcyBwcm92aWRlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29u
cywKKyAgICAgICAgYXMgY29udmVydGluZyBkYXRhIHRvL2Zyb20gSW1hZ2UgcmVmZXJlbmNlcyBp
biBRdCBnZW5lcmF0ZXMgdW5uZWNlc3NhcnkgZGVlcCBjb3BpZXMgb2YgdGhlCisgICAgICAgIGlt
YWdlIGRhdGEuCisKKyAgICAgICAgQWxzbywgZnVuY3Rpb25zIHRoYXQgdXNlIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHdlcmUgYWRkZWQgdG8gR3JhcGhpY3NDb250ZXh0LCB0byBhbGxvdyBmb3IKKyAg
ICAgICAgM0QgdHJhbnNmb3JtcyBpbiBjcm9zcyBwbGF0Zm9ybSBjb2RlLgorICAgICAgICBBZnRl
ciB0aGlzIHBhdGNoIGV2ZXJ5dGhpbmcgcmVuZGVycyB0aGUgc2FtZS4gQW4gYWRkaXRpb25hbCBi
dWcgcmVwb3J0IHdhcyBjcmVhdGVkIHRvIGFsbG93CisgICAgICAgIEltYWdlQnVmZmVyIHNoYWxs
b3cgaW1hZ2UgY29waWVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzc2ODkKKworICAgICAgICBDb3ZlcmVkIGV4dGVuc2l2ZWx5IGJ5IGV4aXN0aW5nIHRlc3RzLCBu
byBiZWhhdmlvcmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTERhdGEpOgor
ICAgICAgICAoQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJl
c2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c3dpenpsZUJHUkFU
b1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChU
ZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjphY2Nl
bGVyYXRpb25Nb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0M0RUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXQzRFRyYW5zZm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpCaXRtYXBUZXh0dXJlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YnBwKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmU6OmlzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXI6OnNldEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
OjpncmFwaGljc0NvbnRleHQpOgorICAgICAgICAoVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6OnBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyTm9kZSk6CisKIDIwMTItMDItMDIgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxMDY1NjYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBjZmVkZmYyLi5l
OTg0NzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU3MzIsOSArNTczMiwx
MSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwIFwKKyAgICAg
ICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJ
bWFnZUJ1ZmZlci5oIFwKKyAgICAgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKKyAgICAgICAgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmgKQEAgLTU3NTIs
OCArNTc1NCwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmggXAorICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCBcCisgICAgICAgIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuaCBcCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAorICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIHdl
YmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vVGV4dHVyZU1hcHBlckdMQ2Fpcm8uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGZjNmY2ZTYu
LmE3ZTUzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzkzOSwxOSArMzkzOSwxOSBAQCB3aW4zMjohd2lu
MzItZysrKjpjb250YWlucyhRTUFLRV9IT1NULmFyY2gsIHg4Nl82NCk6ewogCiBjb250YWlucyhD
T05GSUcsIHRleG1hcCkgewogICAgIEhFQURFUlMgKz0gXAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIAogICAgIFNPVVJDRVMg
Kz0gXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIFwK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZm
ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5jcHAKIApAQCAtMzk1OSw2ICszOTU5LDcgQEAgY29udGFpbnMoQ09ORklH
LCB0ZXhtYXApIHsKICAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmgKICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAogICAgICAgICBDT05GSUcgKz0gb3BlbmdsLXNoaW1z
CisgICAgICAgIERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJFX01BUFBFUl9HTAogICAgIH0KIH0g
ZWxzZSB7CiAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVy
UXQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDEwMWM4N2YuLjFjZDU2YmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM1ODAsNiArMzU4MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFn
ZUJ1ZmZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlck5vZGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkZWE5NTBiLi5mN2Jl
ZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaApAQCAtMTI0LDYgKzEyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBLVVJMOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRS
dW47CisgICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKICAgICBlbnVtIFRleHREcmF3
aW5nTW9kZSB7CiAgICAgICAgIFRleHRNb2RlSW52aXNpYmxlID0gMCwKQEAgLTQwOSw2ICs0MTAs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0Owog
CisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAg
ICAvLyBUaGlzIGlzIG5lZWRlZCB3aGVuIHVzaW5nIGFjY2VsZXJhdGVkLWNvbXBvc2l0aW5nIGlu
IHNvZnR3YXJlIG1vZGUsIGxpa2UgaW4gVGV4dHVyZU1hcHBlci4KKyAgICAgICAgdm9pZCBjb25j
YXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgICAgICB2b2lk
IHNldDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGdldDNEVHJhbnNmb3JtKCkgY29uc3Q7CisjZW5kaWYKICAgICAg
ICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhpcyBjb250ZXh0
LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24KICAgICAgICAgLy8gZm9yIGRyYXdpbmcgaW50byB0
aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgICAgICBQYXNzT3duUHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEludFNpemUmKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Rl
eHR1cmVNYXBwZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwCmluZGV4IDYxZDhiMjAuLmU3Mjk1MTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBw
ZXJDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcApAQCAtMTE1LDExICsxMTUsNiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJDYWlybzo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29u
c3QgRmxvYXRSZQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
LXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJDYWlybyk7Ci19Ci0KIFBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckNhaXJvOjpjcmVhdGVUZXh0dXJl
KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVDYWlybygpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZGRmZjYwNS4uNTg3MjkzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJHTC5jcHAKQEAgLTI2NSw1NyArMjY1LDYgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEg
ewogCiAgICAgfTsKIAotICAgIHN0cnVjdCBEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRv
cnkgewotICAgICAgICBzdHJ1Y3QgRW50cnkgewotICAgICAgICAgICAgR0x1aW50IHRleHR1cmU7
Ci0gICAgICAgICAgICBpbnQgcmVmQ291bnQ7Ci0gICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxJbWFnZVVJRCwgRW50cnk+IEltYWdlVGV4dHVyZU1hcDsKLSAgICAgICAgSW1hZ2VU
ZXh0dXJlTWFwIGltYWdlVG9UZXh0dXJlOwotCi0gICAgICAgIEdMdWludCBmaW5kT3JDcmVhdGUo
SW1hZ2VVSUQgaW1hZ2UsIGJvb2wmIGZvdW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbWFn
ZVRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0g
ICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9U
ZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOwot
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQt
PnNlY29uZC50ZXh0dXJlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRW50cnkgZW50cnk7
Ci0gICAgICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOwot
ICAgICAgICAgICAgZW50cnkucmVmQ291bnQgPSAxOwotICAgICAgICAgICAgaW1hZ2VUb1RleHR1
cmUuYWRkKGltYWdlLCBlbnRyeSk7Ci0gICAgICAgICAgICByZXR1cm4gZW50cnkudGV4dHVyZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgZGVyZWYoSW1hZ2VVSUQgaW1hZ2UpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEhhc2hNYXA8SW1hZ2VVSUQsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBp
bWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBpbWFnZVRv
VGV4dHVyZS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnJlZkNvdW50
IDwgMikgewotICAgICAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkoKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICB+RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChJbWFnZVRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gaW1h
Z2VUb1RleHR1cmUuYmVnaW4oKTsgaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVyZTsKLSAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgICAgICAgICAgICAgR0xfQ01EKGds
RGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9
Ci0gICAgfSBkaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0KICAgICBTaGFyZWRHTERhdGEmIHNo
YXJlZEdMRGF0YSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdMRGF0
YS5nZXQoKSk7CkBAIC0zMzIsNiArMjgxLDcgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEg
ewogICAgIGludCBjdXJyZW50UHJvZ3JhbTsKICAgICBHTGludCBwcmV2aW91c1Byb2dyYW07CiAg
ICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7CisgICAgR0xpbnQgdmlld3BvcnRbNF07CiAg
ICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4gbV9zaGFyZWRHTERhdGE7CiB9OwogCkBAIC0zNDIsNTYg
KzI5MiwyNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKICAgICB2
b2lkIGJpbmQoKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBh
aW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIH5C
aXRtYXBUZXh0dXJlR0woKSB7IGRlc3Ryb3koKTsgfQogICAgIHZpcnR1YWwgdWludDMyX3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBtX29wYXF1ZTsgfQogICAgIGlubGluZSBGbG9hdFNpemUgcmVsYXRpdmVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVNpemU7IH0KICAgICB2b2lkIHNldFRleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4bWFw
OyB9Ci0KLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0
Jiwgdm9pZCopOwotICAgIHZvaWQgdXBkYXRlUmF3Q29udGVudHMoY29uc3QgSW50UmVjdCYsIGNv
bnN0IHZvaWQqKTsKLSAgICB2b2lkIHBhY2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBj
dXJyZW50bHkgYSBzdHViLgotICAgICAgICBpZiAoaXNQYWNrZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9pc1BhY2tlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCB1bnBh
Y2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYSBzdHViLgotICAgICAg
ICBpZiAoIWlzUGFja2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNQYWNr
ZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGlzUGFja2VkKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2lzUGFja2VkOwotICAgIH0KKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRz
KEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7Cisg
ICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYpOwogCiBw
cml2YXRlOgogICAgIEdMdWludCBtX2lkOwotICAgIEltYWdlVUlEIG1faW1hZ2VVSUQ7CiAgICAg
RmxvYXRTaXplIG1fcmVsYXRpdmVTaXplOwotICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgSW50U2l6
ZSBtX3RleHR1cmVTaXplOwotICAgIE93blB0cjxCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4g
bV9idWZmZXI7CiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKICAgICBHTHVpbnQgbV9mYm87CiAg
ICAgR0x1aW50IG1fcmJvOwogICAgIEludFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9z
dXJmYWNlTmVlZHNSZXNldDsKLSAgICBib29sIG1faXNQYWNrZWQ7CiAgICAgVGV4dHVyZU1hcHBl
ckdMKiBtX3RleHR1cmVNYXBwZXI7CiAgICAgQml0bWFwVGV4dHVyZUdMKCkKICAgICAgICAgOiBt
X2lkKDApCi0gICAgICAgICwgbV9pbWFnZVVJRCgwKQotICAgICAgICAsIG1fb3BhcXVlKGZhbHNl
KQogICAgICAgICAsIG1fZmJvKDApCiAgICAgICAgICwgbV9yYm8oMCkKICAgICAgICAgLCBtX3N1
cmZhY2VOZWVkc1Jlc2V0KHRydWUpCkBAIC01NDQsNiArNDYzLDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luUGFpbnRpbmcoKQogI2VuZGlmCiAgICAgZ2xDbGVhclN0ZW5jaWwoMCk7CiAg
ICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIGdsR2V0SW50ZWdlcnYoR0xf
VklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCk7CiAgICAgYmluZFN1cmZhY2UoMCk7CiB9CiAKQEAg
LTY2Myw3ICs1ODMsNiBAQCBzdGF0aWMgdm9pZCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHNpemVf
dCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChjb25z
dCBJbnRTaXplJiBuZXdTaXplLCBib29sIG9wYXF1ZSkKIHsKICAgICBCaXRtYXBUZXh0dXJlOjpy
ZXNldChuZXdTaXplLCBvcGFxdWUpOwotICAgIG1faW1hZ2VVSUQgPSAwOwogICAgIEludFNpemUg
bmV3VGV4dHVyZVNpemUgPSBuZXh0UG93ZXJPZlR3byhuZXdTaXplKTsKICAgICBib29sIGp1c3RD
cmVhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFtX2lkKSB7CkBAIC02ODIsMjggKzYwMSwxMCBAQCB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgYm9vbCBv
cGFxdWUpCiAgICAgfQogICAgIG1fYWN0dWFsU2l6ZSA9IG5ld1NpemU7CiAgICAgbV9yZWxhdGl2
ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3U2l6ZS53aWR0aCgpKSAvIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWlnaHQoKSkgLyBtX3RleHR1cmVTaXplLmhlaWdodCgp
KTsKLSAgICBtX29wYXF1ZSA9IG9wYXF1ZTsKICAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1
ZTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVHTDo6YmVnaW5Q
YWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9idWZmZXIgPSBCR1JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBkaXJ0eVJl
Y3Q7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLT5iZWdpblBhaW50KGRpcnR5UmVjdCwgbV9vcGFxdWUp
OwotfQogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6ZW5kUGFpbnQoKQotewotICAgIGlmICghbV9i
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2J1ZmZlci0+ZW5kUGFpbnQoKTsKLSAgICB1
cGRhdGVDb250ZW50cyhCR1JBRm9ybWF0LCBtX2RpcnR5UmVjdCwgbV9idWZmZXItPmRhdGEoKSk7
Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgbV9i
dWZmZXIuY2xlYXIoKTsKLX0KLQotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgogc3RhdGljIHZv
aWQgc3dpenpsZUJHUkFUb1JHQkEodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpAQCAtNzE0LDc5ICs2MTUsMzEgQEAg
c3RhdGljIHZvaWQgc3dpenpsZUJHUkFUb1JHQkEodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgICAgICAgICBwW3hdID0gKChwW3hdIDw8IDE2KSAmIDB4ZmYwMDAwKSB8
ICgocFt4XSA+PiAxNikgJiAweGZmKSB8IChwW3hdICYgMHhmZjAwZmYwMCk7CiAgICAgfQogfQot
I2VuZGlmCiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1h
dCBwaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgdm9pZCogYml0cykKK3ZvaWQgQml0
bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0KQogewogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1faWQpKQotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIGJvb2wgc2hvdWxkU3dp
enpsZSA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBHTGludCBnbEZvcm1hdCA9IEdMX1JHQkE7Ci0g
ICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgewotICAgIGNhc2UgUkdCQUZvcm1hdDoKLSAgICAgICAg
Z2xGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJHQkZvcm1hdDoK
LSAgICAgICAgZ2xGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkdS
QUZvcm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICAgICAgc2hvdWxkU3dpenps
ZSA9IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKLSNlbHNlCi0gICAgICAgIGds
Rm9ybWF0ID0gR0xfQkdSQTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJHUkZv
cm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICAgICAgc2hvdWxkU3dpenpsZSA9
IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCOwotI2Vsc2UKLSAgICAgICAgZ2xGb3Jt
YXQgPSBHTF9CR1I7Ci0jZW5kaWYKLSAgICAgICAgIGJyZWFrOwotICAgIH0KLQotI2lmZGVmIFRF
WE1BUF9PUEVOR0xfRVNfMgotICAgIGlmIChzaG91bGRTd2l6emxlKQotICAgICAgICBzd2l6emxl
QkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50MzJfdCo+KGJpdHMpLCByZWN0LnNpemUoKSk7Ci0j
ZW5kaWYKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xf
VU5TSUdORURfQllURSwgYml0cykpCisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgZGF0
YSkpCiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVSYXdDb250ZW50cyhjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCB2b2lkKiBiaXRzKQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVw
ZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0
KQogeworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKICAgICBHTF9DTUQoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKICAgICBHTHVpbnQgZ2xGb3JtYXQgPSBpc09w
YXF1ZSgpID8gR0xfUkdCIDogR0xfUkdCQTsKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgYml0cykpCi19Ci0KLXZvaWQgQml0
bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIElt
YWdlVUlEIHVpZCA9IGltYWdlID8gdWlkRm9ySW1hZ2UoaW1hZ2UpIDogMDsKLSAgICBpZiAoIWlt
YWdlIHx8ICF1aWQpIHsKLSAgICAgICAgaWYgKG1faW1hZ2VVSUQpCi0gICAgICAgICAgICBkZXN0
cm95KCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWVJbWFnZSkKICAgICAgICAgcmV0dXJu
OwotICAgIH0KIAotICAgIGlmICh1aWQgPT0gbV9pbWFnZVVJRCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0
dXJlTWFwcGVyLT5kYXRhKCkuZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZSh1
aWQsIGZvdW5kKTsKLSAgICBpZiAobmV3VGV4dHVyZUlEICE9IG1faWQpIHsKLSAgICAgICAgbV9p
bWFnZVVJRCA9IHVpZDsKLSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICBtX2lkID0gbmV3VGV4
dHVyZUlEOwotICAgICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlm
ICghZm91bmQpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGJlZ2luUGFp
bnQoSW50UmVjdCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVp
Z2h0KCkpKSk7Ci0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCksIENvbXBvc2l0ZUNvcHkpOwotICAgICAgICAgICAg
ZW5kUGFpbnQoKTsKLSAgICAgICAgfQotICAgIH0KKyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1h
Z2UgcXRJbWFnZSA9IGZyYW1lSW1hZ2UtPnRvSW1hZ2UoKTsKKyAgICBpZiAoSW50U2l6ZShxdElt
YWdlLnNpemUoKSkgIT0gc291cmNlUmVjdC5zaXplKCkpCisgICAgICAgIHF0SW1hZ2UgPSBxdElt
YWdlLmNvcHkoc291cmNlUmVjdCk7CisgICAgaWYgKGZvcm1hdCA9PSBCR1JBRm9ybWF0IHx8IGZv
cm1hdCA9PSBCR1JGb3JtYXQpCisgICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihxdEltYWdlLmJpdHMoKSksIHF0SW1hZ2Uuc2l6ZSgpKTsKKyAgICBH
TF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0
YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBn
bEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgcXRJbWFnZS5jb25zdEJpdHMoKSkpCisjZW5kaWYK
IH0KIAogc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9u
TWF0cml4KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkKQEAgLTgzNyw3ICs2OTAsNyBA
QCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6YmluZCgpCiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpk
ZXN0cm95KCkKIHsKLSAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2VVSUQgfHwgIW1fdGV4dHVyZU1h
cHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5kZXJlZihtX2ltYWdlVUlEKSkp
CisgICAgaWYgKG1faWQpCiAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lk
KSkKIAogICAgIGlmIChtX2ZibykKQEAgLTg3MiwxMiArNzI1LDEzIEBAIHZvaWQgVGV4dHVyZU1h
cHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKICAgICBC
aXRtYXBUZXh0dXJlR0wqIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihz
dXJmYWNlUG9pbnRlcik7CiAKICAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgSW50U2l6ZSB2
aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pOwogICAg
ICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApKQotICAgICAg
ICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgodmlld3Bv
cnRTaXplKCksIHRydWUpLm11bHRpcGx5KHRyYW5zZm9ybSgpKTsKKyAgICAgICAgZGF0YSgpLnBy
b2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZpZXdwb3J0U2l6ZSwgdHJ1
ZSk7CiAgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKGRhdGEoKS5zaGFyZWRHTERhdGEoKS5z
dGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIGRhdGEoKS5zaGFyZWRHTERh
dGEoKS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4
IC0gMSkpCiAgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9L
RUVQKSkKLSAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmlld3BvcnRTaXplKCkud2lk
dGgoKSwgdmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpKQotICAgICAgICBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuY2xpcFN0YWNrLmFwcGVuZChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHZpZXdwb3J0
U2l6ZSgpKSk7CisgICAgICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53
aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKQorICAgICAgICBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuY2xpcFN0YWNrLmFwcGVuZChJbnRSZWN0KGRhdGEoKS52aWV3cG9ydFswXSwgZGF0YSgp
LnZpZXdwb3J0WzFdLCBkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05ODUsNCArODM5LDkgQEAgUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVy
biBhZG9wdFJlZih0ZXh0dXJlKTsKIH0KIAorUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0
dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCkKK3sKKyAgICByZXR1cm4gVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKK30KKwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAx
YjQxMTg1Li4wOGZhMGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC00MywxNiArNDMsMTcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBi
b29sIG9wYXF1ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSwgYm9vbCBmbGlwKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblBhaW50aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCk7CiAgICAg
dmlydHVhbCB2b2lkIGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9y
Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5
cGUoKSBjb25zdDsKICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgdm9pZCBi
ZWdpblBhaW50aW5nKCk7Ci0gICAgdm9pZCBlbmRQYWludGluZygpOwogICAgIHZvaWQgc2V0R3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250
ZXh0OyB9CiAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBt
X2NvbnRleHQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNPcGVuR0xCYWNrZWQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdm9pZCBwbGF0Zm9ybVVwZGF0ZUNvbnRlbnRzKE5hdGl2ZUltYWdl
UHRyLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVs
Rm9ybWF0KTsKKyAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIE9wZW5HTE1vZGU7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGJlZ2lu
U2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3Qm
KTsKQEAgLTY0LDE2ICs2NSw2IEBAIHByaXZhdGU6CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4gYnVm
ZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJlLgotY2xhc3MgQkdSQTMyUHJlbXVsdGltcGxp
ZWRCdWZmZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZp
cnR1YWwgfkJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKCkgeyB9Ci0gICAgdmlydHVhbCBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qs
IGJvb2wgb3BhcXVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCogZGF0YSgpID0gMDsKLSAgICBzdGF0aWMgUGFzc093blB0cjxCR1JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7Ci19OwotCiBzdGF0aWMgaW5saW5lIGludCBu
ZXh0UG93ZXJPZlR3byhpbnQgbnVtKQogewogICAgIGZvciAoaW50IGkgPSAweDEwMDAwMDAwOyBp
ID4gMDsgaSA+Pj0gMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA0OTViY2FkLi42NmJj
NzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyCiB7CiAgICAgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0
b3JlQ29udGV4dCgpOwogCi0gICAgaWYgKHRleHR1cmVNYXBwZXItPmlzT3BlbkdMQmFja2VkKCkp
IHsKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVN
YXBwZXI6Ok9wZW5HTE1vZGUpIHsKICAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9
IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpOwogICAgICAgICB0
ZXhtYXBHTC0+ZHJhd1RleHR1cmUobV9jb250ZXh0LT5tX3RleHR1cmUsICFtX2NvbnRleHQtPm1f
YXR0cnMuYWxwaGEsIEZsb2F0U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5
LCBtYXNrLCB0cnVlIC8qIGZsaXAgKi8pOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5j
cHAKaW5kZXggZWM3M2MzZmUuLjkwMDc5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTEzMzUs
NiArMTMzNSwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIG1fZGF0YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0
cmFuc2Zvcm0pOwogfQogCisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXQzRFRyYW5z
Zm9ybSgpIGNvbnN0Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisKKyAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0
KCktPmNvbWJpbmVkVHJhbnNmb3JtKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0
YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0sIHRydWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCBmYWxz
ZSk7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29u
c3QgS1VSTCYsIGNvbnN0IEludFJlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVy
UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBl
clF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2NDFjZS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclF0LmgiCi0KLSNpbmNsdWRlIDxRdENvcmUvcWRlYnVnLmg+Ci0jaW5jbHVkZSA8UXRH
dWkvcXBhaW50ZW5naW5lLmg+Ci0jaW5jbHVkZSA8UXRHdWkvcXBpeG1hcC5oPgotCi0jaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQotIyBpbmNsdWRlICJvcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6
ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fcGl4bWFwLnBhaW50aW5nQWN0aXZlKCkpCi0gICAgICAg
IHFGYXRhbCgiRGVzdHJveWluZyBhbiBhY3RpdmUgcGl4bWFwIik7Ci0gICAgbV9waXhtYXAgPSBR
UGl4bWFwKCk7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpyZXNldChjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIGlzT3BhcXVlKQotewotICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHNpemUs
IGlzT3BhcXVlKTsKLQotICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3BpeG1hcC5zaXplKCkud2lk
dGgoKSB8fCBzaXplLmhlaWdodCgpID4gbV9waXhtYXAuc2l6ZSgpLmhlaWdodCgpIHx8IG1fcGl4
bWFwLmlzTnVsbCgpKQotICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKLSAgICBpZiAoIWlzT3BhcXVlKQotICAgICAgICBtX3BpeG1hcC5maWxs
KFF0Ojp0cmFuc3BhcmVudCk7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBU
ZXh0dXJlUXQ6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIG1f
cGFpbnRlci5iZWdpbigmbV9waXhtYXApOwotICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6
ZSgmbV9wYWludGVyKTsKLSAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOwotICAgIG1fcGFpbnRlci5maWxsUmVjdChRUmVjdChk
aXJ0eVJlY3QpLCBRdDo6dHJhbnNwYXJlbnQpOwotICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlv
bk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKLSAgICByZXR1cm4g
Jm1fcGFpbnRlcjsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmVuZFBhaW50KCkKLXsKLSAg
ICBtX3BhaW50ZXIuZW5kKCk7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0Ojp1cGRhdGVDb250
ZW50cyhQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgdm9pZCog
Yml0cykKLXsKLSAgICBtX3BhaW50ZXIuYmVnaW4oJm1fcGl4bWFwKTsKLSAgICBRSW1hZ2U6OkZv
cm1hdCBxdEZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOwotICAg
IGlmIChwaXhlbEZvcm1hdCA9PSBCR1JGb3JtYXQgfHwgcGl4ZWxGb3JtYXQgPT0gUkdCRm9ybWF0
KQotICAgICAgICBxdEZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOwotICAgIFFJbWFnZSBp
bWFnZShzdGF0aWNfY2FzdDx1Y2hhcio+KGJpdHMpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCksIHF0Rm9ybWF0KTsKLSAgICBpZiAocGl4ZWxGb3JtYXQgPT0gQkdSRm9ybWF0IHx8IHBpeGVs
Rm9ybWF0ID09IEJHUkFGb3JtYXQpCi0gICAgICAgIGltYWdlID0gaW1hZ2UucmdiU3dhcHBlZCgp
OwotICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9u
TW9kZV9Tb3VyY2UpOwotICAgIG1fcGFpbnRlci5kcmF3SW1hZ2UocmVjdCwgaW1hZ2UpOwotICAg
IG1fcGFpbnRlci5lbmQoKTsKLX0KLQotYm9vbCBCaXRtYXBUZXh0dXJlUXQ6OnNhdmUoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBtX3BpeG1hcC5zYXZlKHBhdGgsICJQTkciKTsK
LX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1h
Z2UpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFFQaXht
YXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlm
ICghcGl4bWFwKQotICAgICAgICByZXR1cm47Ci0gICAgQml0bWFwVGV4dHVyZTo6cmVzZXQocGl4
bWFwLT5zaXplKCksICFwaXhtYXAtPmhhc0FscGhhQ2hhbm5lbCgpKTsKLSAgICBtX3BpeG1hcCA9
ICpwaXhtYXA7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpwYWNrKCkKLXsKLSAgICBpZiAo
bV9waXhtYXAuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW1hZ2UgPSBtX3Bp
eG1hcC50b0ltYWdlKCk7Ci0gICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7Ci0gICAgbV9pc1BhY2tl
ZCA9IHRydWU7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0Ojp1bnBhY2soKQotewotICAgIG1f
aXNQYWNrZWQgPSBmYWxzZTsKLSAgICBpZiAobV9pbWFnZS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9waXhtYXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UobV9pbWFnZSk7Ci0gICAg
bV9pbWFnZSA9IFFJbWFnZSgpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjdXJyZW50UGFpbnRlcigpOwotICAgICBw
YWludGVyLT5zYXZlKCk7Ci0gICAgIFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50ZXIt
PnRyYW5zZm9ybSgpOwotICAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4LCBmYWxzZSk7
Ci0gICAgIHBhaW50ZXItPnNldENsaXBSZWN0KHJlY3QpOwotICAgICBwYWludGVyLT5zZXRUcmFu
c2Zvcm0ocHJldlRyYW5zZm9ybSwgZmFsc2UpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6
ZW5kQ2xpcCgpCi17Ci0gICAgY3VycmVudFBhaW50ZXIoKS0+cmVzdG9yZSgpOwotfQotCi1JbnRT
aXplIFRleHR1cmVNYXBwZXJRdDo6dmlld3BvcnRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SW50U2l6ZShtX3BhaW50ZXItPmRldmljZSgpLT53aWR0aCgpLCBtX3BhaW50ZXItPmRldmljZSgp
LT5oZWlnaHQoKSk7Ci19Ci0KLQotVGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoKQot
ICAgIDogbV9jdXJyZW50U3VyZmFjZSgwKQotewotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6
c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBtX2Nv
bnRleHQgPSBjb250ZXh0OwotICAgIG1fcGFpbnRlciA9IGNvbnRleHQgPyBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSA6IDA7Ci0gICAgaW5pdGlhbGl6ZShtX3BhaW50ZXIpOwotfQotCi1HcmFw
aGljc0NvbnRleHQqIFRleHR1cmVNYXBwZXJRdDo6Z3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2Uo
Qml0bWFwVGV4dHVyZSogc3VyZmFjZSkKLXsKLSAgICBpZiAobV9jdXJyZW50U3VyZmFjZSA9PSBz
dXJmYWNlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fY3VycmVudFN1cmZhY2UpCi0gICAg
ICAgIG1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlci5lbmQoKTsKLSAgICBpZiAoIXN1cmZhY2Up
IHsKLSAgICAgICAgbV9jdXJyZW50U3VyZmFjZSA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgQml0bWFwVGV4dHVyZVF0KiBzdXJmYWNlUXQgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0
dXJlUXQqPihzdXJmYWNlKTsKLSAgICBpZiAoIXN1cmZhY2VRdC0+bV9wYWludGVyLmlzQWN0aXZl
KCkpCi0gICAgICAgIHN1cmZhY2VRdC0+bV9wYWludGVyLmJlZ2luKCZzdXJmYWNlUXQtPm1fcGl4
bWFwKTsKLSAgICBtX2N1cnJlbnRTdXJmYWNlID0gc3VyZmFjZVF0OwotfQotCi0KLXZvaWQgVGV4
dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQot
ewotICAgIGNvbnN0IEJpdG1hcFRleHR1cmVRdCYgdGV4dHVyZVF0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQml0bWFwVGV4dHVyZVF0Jj4odGV4dHVyZSk7Ci0gICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBt
X3BhaW50ZXI7Ci0gICAgUVBpeG1hcCBwaXhtYXAgPSB0ZXh0dXJlUXQubV9waXhtYXA7Ci0gICAg
aWYgKG1fY3VycmVudFN1cmZhY2UpCi0gICAgICAgIHBhaW50ZXIgPSAmbV9jdXJyZW50U3VyZmFj
ZS0+bV9wYWludGVyOwotCi0gICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZVF0KiBtYXNrID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQml0bWFwVGV4dHVyZVF0Kj4obWFza1RleHR1cmUpOwotICAgICAgICBRUGl4bWFw
IGludGVybWVkaWF0ZVBpeG1hcChwaXhtYXAuc2l6ZSgpKTsKLSAgICAgICAgaW50ZXJtZWRpYXRl
UGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50ZXIgbWFza1BhaW50
ZXIoJmludGVybWVkaWF0ZVBpeG1hcCk7Ci0gICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0
aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgIG1hc2tQ
YWludGVyLmRyYXdQaXhtYXAoMCwgMCwgcGl4bWFwKTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0
Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7
Ci0gICAgICAgIG1hc2tQYWludGVyLmRyYXdQaXhtYXAoUVJlY3QoMCwgMCwgcGl4bWFwLndpZHRo
KCksIHBpeG1hcC5oZWlnaHQoKSksIG1hc2stPm1fcGl4bWFwLCBtYXNrLT5zb3VyY2VSZWN0KCkp
OwotICAgICAgICBtYXNrUGFpbnRlci5lbmQoKTsKLSAgICAgICAgcGl4bWFwID0gaW50ZXJtZWRp
YXRlUGl4bWFwOwotICAgIH0KLQotICAgIGNvbnN0IHFyZWFsIHByZXZPcGFjaXR5ID0gcGFpbnRl
ci0+b3BhY2l0eSgpOwotICAgIGNvbnN0IFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50
ZXItPnRyYW5zZm9ybSgpOwotICAgIHBhaW50ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAg
cGFpbnRlci0+c2V0VHJhbnNmb3JtKG1hdHJpeCwgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+ZHJhd1Bp
eG1hcCh0YXJnZXRSZWN0LCBwaXhtYXAsIEZsb2F0UmVjdCh0ZXh0dXJlUXQuc291cmNlUmVjdCgp
KSk7Ci0gICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0pOwotICAgIHBhaW50
ZXItPnNldE9wYWNpdHkocHJldk9wYWNpdHkpOwotfQotCi1QYXNzT3duUHRyPFRleHR1cmVNYXBw
ZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0j
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5wYWludEVuZ2luZSgpLT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpP
cGVuR0wyKQotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJRdCk7Ci19Ci0KLVBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlclF0OjpjcmVhdGVUZXh0dXJlKCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVRdCgpKTsKLX0KLQotQml0
bWFwVGV4dHVyZVF0OjpCaXRtYXBUZXh0dXJlUXQoKQotICAgIDogbV9pc1BhY2tlZChmYWxzZSkK
LXsKLQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5QYWludGluZygpCi17Ci0gICAg
bV9wYWludGVyLT5zYXZlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjplbmRQYWludGlu
ZygpCi17Ci0gICAgbV9wYWludGVyLT5yZXN0b3JlKCk7Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCi1jbGFzcyBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlclF0IDogcHVibGljIEJH
UkEzMlByZW11bHRpbXBsaWVkQnVmZmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgb3Bh
cXVlKQotICAgIHsKLSAgICAgICAgLy8gbV9pbWFnZSBpcyBvbmx5IHVzaW5nIGR1cmluZyBwYWlu
dCwgaXQncyBzYWZlIHRvIG92ZXJyaWRlIGl0LgotICAgICAgICBtX2ltYWdlID0gUUltYWdlKHJl
Y3Quc2l6ZSgpLndpZHRoKCksIHJlY3Quc2l6ZSgpLmhlaWdodCgpLCBvcGFxdWUgPyBRSW1hZ2U6
OkZvcm1hdF9SR0IzMiA6IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAg
ICAgICAgaWYgKCFvcGFxdWUpCi0gICAgICAgICAgICBtX2ltYWdlLmZpbGwoMCk7Ci0gICAgICAg
IG1fcGFpbnRlci5iZWdpbigmbV9pbWFnZSk7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJRdDo6aW5p
dGlhbGl6ZSgmbV9wYWludGVyKTsKLSAgICAgICAgbV9wYWludGVyLnRyYW5zbGF0ZSgtcmVjdC54
KCksIC1yZWN0LnkoKSk7Ci0gICAgICAgIHJldHVybiAmbV9wYWludGVyOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBlbmRQYWludCgpIHsgbV9wYWludGVyLmVuZCgpOyB9Ci0gICAgdmlydHVh
bCB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9pbWFnZS5iaXRzKCk7IH0KLQotcHJpdmF0ZToKLSAg
ICBRUGFpbnRlciBtX3BhaW50ZXI7Ci0gICAgUUltYWdlIG1faW1hZ2U7Ci19OwotCi1QYXNzT3du
UHRyPEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZl
cjo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJHUkEzMlByZW11bHRpbXBs
aWVkQnVmZmVyUXQoKSk7Ci19Ci0KLXVpbnQ2NF90IHVpZEZvckltYWdlKEltYWdlKiBpbWFnZSkK
LXsKLSAgICByZXR1cm4gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPnNlcmlh
bE51bWJlcigpOwotfQotI2VuZGlmCi19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDhmZWUwMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAg
QEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAidGV4
bWFwL1RleHR1cmVNYXBwZXIuaCIKLQotI2lmbmRlZiBUZXh0dXJlTWFwcGVyUXRfaAotI2RlZmlu
ZSBUZXh0dXJlTWFwcGVyUXRfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1h
cFRleHR1cmVRdCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4
dHVyZU1hcHBlclF0OwotcHVibGljOgotICAgIEJpdG1hcFRleHR1cmVRdCgpOwotICAgIH5CaXRt
YXBUZXh0dXJlUXQoKSB7IGRlc3Ryb3koKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fcGl4
bWFwLndpZHRoKCksIG1fcGl4bWFwLmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXNl
dChjb25zdCBJbnRTaXplJiwgYm9vbCBvcGFxdWUpOwotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2
aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKik7Ci0gICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJiBwYXRoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BpeG1hcC5pc051
bGwoKSB8fCAhbV9pbWFnZS5pc051bGwoKTsgfQotICAgIEludFJlY3Qgc291cmNlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIEludFJlY3QoMCwgMCwgY29udGVudFNpemUoKS53aWR0aCgpLCBjb250ZW50
U2l6ZSgpLmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWNrKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHVucGFjaygpOwotICAgIHZpcnR1YWwgYm9vbCBpc1BhY2tlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNQYWNrZWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxG
b3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKTsKLQotICAgIFFQYWludGVyKiBwYWlu
dGVyKCkgeyByZXR1cm4gJm1fcGFpbnRlcjsgfQotCi1wcml2YXRlOgotICAgIFFQYWludGVyIG1f
cGFpbnRlcjsKLSAgICBRUGl4bWFwIG1fcGl4bWFwOwotICAgIFFJbWFnZSBtX2ltYWdlOwotICAg
IGJvb2wgbV9pc1BhY2tlZDsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJRdCA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyIHsKLXB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyUXQoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJl
Z2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNz
Q29udGV4dChHcmFwaGljc0NvbnRleHQqKTsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3Qo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCBJbnRTaXplIHZpZXdwb3J0U2l6
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGVuZFBhaW50aW5nKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFFQYWlu
dGVyKiBwYWludGVyKQotICAgIHsKLSAgICAgICAgaWYgKHBhaW50ZXIpCi0gICAgICAgICAgICBw
YWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nIHwgUVBhaW50ZXI6
OlNtb290aFBpeG1hcFRyYW5zZm9ybSwgZmFsc2UpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0
dXJlTWFwcGVyUXQpOyB9Ci1wcml2YXRlOgotICAgIGlubGluZSBRUGFpbnRlciogY3VycmVudFBh
aW50ZXIoKSB7IHJldHVybiBtX2N1cnJlbnRTdXJmYWNlID8gbV9jdXJyZW50U3VyZmFjZS0+cGFp
bnRlcigpIDogbV9wYWludGVyOyB9Ci0KLSAgICBRUGFpbnRlciogbV9wYWludGVyOwotICAgIEdy
YXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlUXQ+IG1f
Y3VycmVudFN1cmZhY2U7Ci19OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAppbmRleCBk
ZDMzZjBkLi41ZTUyOGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCkBAIC0yMCw2ICsyMCw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgiCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNzEsNSArNzMsMTMgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVy
OjphY3F1aXJlVGV4dHVyZUZyb21Qb29sKGNvbnN0IEludFNpemUmIHMKICAgICByZXR1cm4gc2Vs
ZWN0ZWRUZXh0dXJlOwogfQogCisKK1Bhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1h
cHBlcjo6Y3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBT
b2Z0d2FyZU1vZGUpCisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmNy
ZWF0ZSgpOworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCk7Cit9CisKIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggZDY2ZmUyZi4uOGUyZTlmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oCkBAIC00Nyw0NiArNDcsMzEgQEAgY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIEJpdG1h
cFRleHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgog
ICAgIGVudW0gUGl4ZWxGb3JtYXQgeyBCR1JBRm9ybWF0LCBSR0JBRm9ybWF0LCBCR1JGb3JtYXQs
IFJHQkZvcm1hdCB9OwotICAgIEJpdG1hcFRleHR1cmUoKSA6IG1fbG9ja0NvdW50KDApIHt9Cisg
ICAgQml0bWFwVGV4dHVyZSgpCisgICAgICAgIDogbV9pc09wYXF1ZSh0cnVlKQorICAgIHsKKyAg
ICB9CisKICAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBhbGxvd09mZmxpbmVUZXh0dXJlVXBs
b2FkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBicHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGlu
dCBicHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSA9IGZhbHNlKQogICAgIHsKICAgICAgICAgbV9p
c09wYXF1ZSA9IG9wYXF1ZTsKICAgICAgICAgbV9jb250ZW50U2l6ZSA9IHNpemU7CiAgICAgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHBhY2soKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCkg
eyB9Ci0gICAgdmlydHVhbCBib29sIGlzUGFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAw
OwotCi0gICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIEJpdG1hcFRleHR1cmUgbWlnaHQg
bW9kaWZ5IHRoZSBiaXRzIGRpcmVjdGx5IChzd2l6emxlKS4KLSAgICAvLyBUaHVzLCB0aGlzIG1l
dGhvZCBpcyBvbmx5IHJlY29tbWVuZGVkIGZvciBidWZmZXIgdXBkYXRlLCBzdWNoIGFzIHVzZWQg
YnkgV2ViS2l0Mi4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQs
IGNvbnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVJhd0NvbnRlbnRzKGNvbnN0IEludFJlY3QmLCBjb25zdCB2b2lkKiBiaXRzKSB7IH0KLSAgICB2
aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50TWVkaWEoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJlZ2luUGFpbnQoSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwg
c2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
SW1hZ2UoSW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJikg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGlubGluZSB2b2lkIGxvY2soKSB7ICsrbV9sb2NrQ291
bnQ7IH0KLSAgICBpbmxpbmUgdm9pZCB1bmxvY2soKSB7IC0tbV9sb2NrQ291bnQ7IH0KLSAgICBp
bmxpbmUgYm9vbCBpc0xvY2tlZCgpIHsgcmV0dXJuIG1fbG9ja0NvdW50OyB9CiAgICAgaW5saW5l
IEludFNpemUgY29udGVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CiAg
ICAgaW5saW5lIGludCBudW1iZXJPZkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRo
KCkgKiBzaXplKCkuaGVpZ2h0KCkgKiBicHAoKSA+PiAzOyB9CisgICAgaW5saW5lIGJvb2wgaXNP
cGFxdWUoKSBjb25zdCB7IHJldHVybiBtX2lzT3BhcXVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBp
bnQgbV9sb2NrQ291bnQ7CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOwogICAgIGJvb2wgbV9p
c09wYXF1ZTsKIH07CkBAIC05NywzMiArODIsMjYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlciB7CiAg
ICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQgPSAwKTsKKyAgICBlbnVtIEFjY2VsZXJhdGlvbk1vZGUgeyBTb2Z0d2FyZU1vZGUsIE9w
ZW5HTE1vZGUgfTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUo
QWNjZWxlcmF0aW9uTW9kZSBuZXdNb2RlID0gU29mdHdhcmVNb2RlKTsKICAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3Qg
Qml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxv
YXQgb3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkg
PSAwOwogCiAgICAgLy8gbWFrZXMgYSBzdXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dp
bmcgZHJhd1RleHR1cmUgY2FsbHMuCiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1h
cFRleHR1cmUqIHN1cmZhY2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250
ZXh0KEdyYXBoaWNzQ29udGV4dCopID0gMDsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0KKyAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9j
b250ZXh0OyB9CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xp
cCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgp
ID0gMDsKLSAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3Bv
cnRTaXplOyB9Ci0gICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBt
X3ZpZXdwb3J0U2l6ZSA9IHM7IH0KIAogICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW50ZXJwb2xhdGlvblF1YWxp
dHkgPSBxdWFsaXR5OyB9CiAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdN
b2RlRmxhZ3MgbW9kZSkgeyBtX3RleHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KIAogICAgIEludGVy
cG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVy
biBtX2ludGVycG9sYXRpb25RdWFsaXR5OyB9CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4
dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dQYXJ0aWFsVXBkYXRlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgpIHsgbV90cmFuc2Zvcm0gPSBtYXRyaXg7IH0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwg
QWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgPSAwOwogCiAgICAgdmly
dHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRp
bmcoKSB7IH0KQEAgLTEzMCw3ICsxMDksNiBAQCBwdWJsaWM6CiAgICAgLy8gQSBzdXJmYWNlIGlz
IHJlbGVhc2VkIGltcGxpY2l0bHkgd2hlbiBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IGFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6
ZSYpOwogCi0KIHByb3RlY3RlZDoKICAgICBUZXh0dXJlTWFwcGVyKCkKICAgICAgICAgOiBtX2lu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25EZWZhdWx0KQpAQCAtMTM4LDE0ICsxMTYs
MjEgQEAgcHJvdGVjdGVkOgogICAgIHt9CiAKIHByaXZhdGU6CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IHBsYXRmb3JtQ3Jl
YXRlQWNjZWxlcmF0ZWQoKTsKKyNlbHNlCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1h
cHBlcj4gcGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisjZW5kaWYKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRp
b25RdWFsaXR5OwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlOwot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIEludFNpemUgbV92aWV3
cG9ydFNpemU7CiAgICAgVmVjdG9yPFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IG1fdGV4dHVyZVBv
b2w7CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7CiB9OwogCi19OworfQogCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBkMjc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ci5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmgiCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhjb25zdCB2
b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworI2lmIFBMQVRGT1JNKFFU
KQorICAgIFFJbWFnZSBpbWFnZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oZGF0YSks
IHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgdGFyZ2V0UmVjdC53aWR0
aCgpICogNCwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIFFQYWlu
dGVyKiBwYWludGVyID0gbV9pbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAg
ICBwYWludGVyLT5zYXZlKCk7CisgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICBwYWludGVyLT5kcmF3SW1hZ2UodGFy
Z2V0UmVjdCwgaW1hZ2UpOworICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKKyNlbmRpZgorfQorCit2
b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdl
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQ
aXhlbEZvcm1hdCkKK3sKKyAgICBtX2ltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgdGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgQ29tcG9zaXRlQ29w
eSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpiZWdpbkNsaXAoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcmV2aW91c1RyYW5zZm9ybSA9IGNvbnRleHQtPmdldDNE
VHJhbnNmb3JtKCk7CisjZWxzZQorICAgIEFmZmluZVRyYW5zZm9ybSBwcmV2aW91c1RyYW5zZm9y
bSA9IGNvbnRleHQtPmdldENUTSgpOworI2VuZGlmCisgICAgY29udGV4dC0+c2F2ZSgpOworCisj
aWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAgICBjb250ZXh0LT5jb25jYXQzRFRyYW5zZm9ybSht
YXRyaXgpOworI2Vsc2UKKyAgICBjb250ZXh0LT5jb25jYXRDVE0obWF0cml4LnRvQWZmaW5lKCkp
OworI2VuZGlmCisKKyAgICBjb250ZXh0LT5jbGlwKHJlY3QpOworCisjaWYgRU5BQkxFKDNEX1JF
TkRFUklORykKKyAgICBjb250ZXh0LT5zZXQzRFRyYW5zZm9ybShwcmV2aW91c1RyYW5zZm9ybSk7
CisjZWxzZQorICAgIGNvbnRleHQtPnNldENUTShwcmV2aW91c1RyYW5zZm9ybSk7CisjZW5kaWYK
K30KKwordm9pZCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmRyYXdUZXh0dXJlKGNvbnN0IEJp
dG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0g
Y3VycmVudENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciYgdGV4dHVyZUltYWdlQnVmZmVyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyJj4odGV4dHVyZSk7Cisg
ICAgSW1hZ2VCdWZmZXIqIGltYWdlID0gdGV4dHVyZUltYWdlQnVmZmVyLm1faW1hZ2UuZ2V0KCk7
CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrZWRJbWFnZTsKKworICAgIGlmIChtYXNrVGV4
dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGNvbnN0IEJpdG1hcFRl
eHR1cmVJbWFnZUJ1ZmZlciogbWFzayA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVJ
bWFnZUJ1ZmZlcio+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgbWFza2VkSW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKG1hc2tUZXh0dXJlLT5jb250ZW50U2l6ZSgpKTsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiBtYXNrQ29udGV4dCA9IG1hc2tlZEltYWdlLT5jb250ZXh0KCk7CisgICAgICAg
IG1hc2tDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IEludFBvaW50Ojp6ZXJvKCksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBpZiAob3BhY2l0eSA8
IDEpIHsKKyAgICAgICAgICAgIG1hc2tDb250ZXh0LT5zZXRBbHBoYShvcGFjaXR5KTsKKyAgICAg
ICAgICAgIG9wYWNpdHkgPSAxOworICAgICAgICB9CisgICAgICAgIG1hc2tDb250ZXh0LT5kcmF3
SW1hZ2VCdWZmZXIobWFzay0+bV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50
UG9pbnQ6Onplcm8oKSwgQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7CisgICAgICAgIGltYWdlID0g
bWFza2VkSW1hZ2UuZ2V0KCk7CisgICAgfQorCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNv
bnRleHQtPnNldEFscGhhKG9wYWNpdHkpOworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAg
Y29udGV4dC0+Y29uY2F0M0RUcmFuc2Zvcm0obWF0cml4KTsKKyNlbHNlCisgICAgY29udGV4dC0+
Y29uY2F0Q1RNKG1hdHJpeCk7CisjZW5kaWYKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
aW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHRhcmdldFJlY3QpOworICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxMTIwNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVySW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXJfaAor
I2RlZmluZSBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZl
ciA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBl
ckltYWdlQnVmZmVyOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcFRleHR1
cmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZm
ZXIpOyB9CisgICAgfkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcigpIHsgZGVzdHJveSgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSB7IG1faW1hZ2UuY2xlYXIoKTsgfQorICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS0+c2l6ZSgpOyB9CisgICAg
dmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgb3BhcXVlKQorICAg
IHsKKyAgICAgICAgQml0bWFwVGV4dHVyZTo6cmVzZXQoc2l6ZSwgb3BhcXVlKTsKKyAgICAgICAg
bV9pbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7CisgICAgfQorCisgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgaW5saW5lIEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9pbWFnZSA/IG1faW1h
Z2UtPmNvbnRleHQoKSA6IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoSW1h
Z2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIFBpeGVsRm9ybWF0KTsKKyAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QpOworcHJpdmF0ZToKKyAgICBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIoKSB7IH0KKyAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2U7Cit9OworCisKK2NsYXNzIFRleHR1cmVNYXBw
ZXJJbWFnZUJ1ZmZlciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGJl
Z2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSB7IG1f
Y3VycmVudFN1cmZhY2UgPSBzdXJmYWNlO30KKyAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpIHsg
Z3JhcGhpY3NDb250ZXh0KCktPnJlc3RvcmUoKTsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRl
eHR1cmVNYXBwZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVy
SW1hZ2VCdWZmZXIpOyB9CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKCkgeyByZXR1cm4gQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjpjcmVhdGUoKTsgfQorICAg
IGlubGluZSBHcmFwaGljc0NvbnRleHQqIGN1cnJlbnRDb250ZXh0KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2N1cnJlbnRTdXJmYWNlID8gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUltYWdl
QnVmZmVyKj4obV9jdXJyZW50U3VyZmFjZS5nZXQoKSktPmdyYXBoaWNzQ29udGV4dCgpIDogZ3Jh
cGhpY3NDb250ZXh0KCk7CisgICAgfQorCisgICAgdmlydHVhbCBBY2NlbGVyYXRpb25Nb2RlIGFj
Y2VsZXJhdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBTb2Z0d2FyZU1vZGU7IH0KKworcHJpdmF0
ZToKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV9jdXJyZW50U3VyZmFjZTsKK307CisKK30K
KyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVy
SW1hZ2VCdWZmZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXggY2NmNDliYy4uNjg2
NmM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1hdGhF
eHRyYXMuaCIKIAogbmFtZXNwYWNlIHsKQEAgLTE1NiwxMiArMTU3LDEwIEBAIHZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwg
R3JhcGhpY3NMYXllCiAgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICAvLyBGSVhNRTogQWRkIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzLgotICAgIEZsb2F0
UmVjdCBkaXJ0eVJlY3QgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJl
Y3QoKSA6IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdDsKKyAgICBJbnRSZWN0IGRp
cnR5UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkg
PyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwogCiAg
ICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNp
emUoKTsgKyt0aWxlSW5kZXgpIHsKICAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRp
bGVzW3RpbGVJbmRleF07Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gZGlydHlSZWN0OwogICAg
ICAgICBpZiAoIXRpbGUudGV4dHVyZSkKICAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1
cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
JiB0ZXh0dXJlID0gdGlsZS50ZXh0dXJlOwpAQCAtMTY5LDMxICsxNjgsNDMgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
LCBHcmFwaGljc0xheWUKIAogICAgICAgICBpZiAodGlsZS5uZWVkc1Jlc2V0IHx8IHRleHR1cmUt
PmNvbnRlbnRTaXplKCkgIT0gdGlsZVNpemUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSkgewogICAg
ICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5y
ZXNldCh0aWxlU2l6ZSwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFn
ZUNvbnRlbnRUeXBlID8gZmFsc2UgOiBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsKLSAgICAgICAg
ICAgIHJlY3QgPSB0aWxlLnJlY3Q7CisgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6
ZSwgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7CisgICAgICAgICAgICBkaXJ0eVJlY3QudW5pdGUo
ZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJlY3QpKTsKICAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChkaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgSW50UmVj
dCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KTsKLSAgICAgICAgY29u
dGVudFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOwotICAgICAgICBpZiAo
Y29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgIC8vIFBhaW50IHRoZSBlbnRpcmUgZGlydHkgcmVj
dCBpbnRvIGFuIGltYWdlIGJ1ZmZlci4gVGhpcyBlbnN1cmVzIHdlIG9ubHkgcGFpbnQgb25jZS4K
KyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShkaXJ0eVJlY3Quc2l6ZSgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBj
b250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+dGV4dERyYXdpbmdNb2Rl
KCkpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55
KCkpOworICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgZGly
dHlSZWN0KTsKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJ
bWFnZUNvbnRlbnRUeXBlKQorICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9jdXJyZW50Q29u
dGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgbV9zdGF0ZS5jb250ZW50c1Jl
Y3QpOworCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBJbWFnZUJ1ZmZlcjo6RG9udENvcHlCYWNr
aW5nU3RvcmUgaW4gUXQvR1RLIHBvcnRzLCBhbmQgdGhlbiBjaGFuZ2UgdGhpcy4KKyAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3Njg5CisgICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSk7CisKKyAgICAvLyBEaXZpZGUgdGhlIGltYWdlIHRvIHRpbGVzLgorICAgIGZvciAoc2l6ZV90
IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsrdGlsZUlu
ZGV4KSB7CisgICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxlSW5kZXhd
OworICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVj
dCk7CisgICAgICAgIHRhcmdldFJlY3QuaW50ZXJzZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIGlm
ICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBJ
bnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0OwogCi0gICAgICAgIEZsb2F0UmVjdCBjb250
ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzID0gY29udGVudFJlY3Q7Ci0gICAgICAgIEZsb2F0UG9p
bnQgb2Zmc2V0KC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRl
bnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKLQot
ICAgICAgICB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCh0ZXh0dXJlLT5i
ZWdpblBhaW50KGVuY2xvc2luZ0ludFJlY3QoY29udGVudFJlY3RJblRpbGVDb29yZGluYXRlcykp
KTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0
dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICAgICAgY29u
dGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+dGV4dERyYXdpbmdNb2RlKCkp
OwotICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7
Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkQ29udGVudFJlY3QoY29udGVudFJlY3QpOwot
ICAgICAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1h
Z2VDb250ZW50VHlwZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2N1cnJl
bnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAw
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGF5ZXItPnBhaW50R3JhcGhp
Y3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qoc2NhbGVkQ29udGVudFJl
Y3QpKTsKLSAgICAgICAgICAgIHRleHR1cmUtPmVuZFBhaW50KCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgLy8gTm9ybWFsaXplIHNvdXJjZVJlY3QgdG8gdGhlIGJ1ZmZlcidzIGNvb3JkaW5hdGVzLgor
ICAgICAgICBzb3VyY2VSZWN0Lm1vdmUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsK
KworICAgICAgICAvLyBOb3JtYWxpemUgdGFyZ2V0UmVjdCB0byB0aGUgdGV4dHVyZSdzIGNvb3Jk
aW5xYXRlcy4KKyAgICAgICAgdGFyZ2V0UmVjdC5tb3ZlKC10aWxlLnJlY3QueCgpLCAtdGlsZS5y
ZWN0LnkoKSk7CisgICAgICAgIHRpbGUudGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0
KCksIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1cmU6OlJHQkFGb3JtYXQpOwog
ICAgIH0KIAogICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CkBAIC00
ODEsNyArNDkyLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYXJBbGxEaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVRpbGVzKCkKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCB2b2lkKiBiaXRzKQordm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZv
aWQqIGRhdGEpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7CiAKQEAgLTQ5OCw3ICs1
MDksNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVy
KGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUgogICAgIGlmICghdGlsZS5iYWNrQnVmZmVy
LnRleHR1cmUpCiAgICAgICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlID0gbV90ZXh0dXJlTWFw
cGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnJlc2V0
KHNvdXJjZVJlY3Quc2l6ZSgpLCBmYWxzZSk7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUt
PnVwZGF0ZVJhd0NvbnRlbnRzKHNvdXJjZVJlY3QsIGJpdHMpOworICAgIHRpbGUuYmFja0J1ZmZl
ci50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhkYXRhLCBzb3VyY2VSZWN0KTsKICAgICB0aWxlLmlz
QmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4
IGZlNGIxNGMuLjIzMGM5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0xNDgsNyArMTQ4
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGlsZU93bmVyc2hpcChUaWxlT3duZXJzaGlwIG93
bmVyc2hpcCkgeyBtX3N0YXRlLnRpbGVPd25lcnNoaXAgPSBvd25lcnNoaXA7IH0KICAgICBpbnQg
Y3JlYXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxlKTsKICAgICB2b2lkIHJlbW92ZUNvbnRlbnRz
VGlsZShpbnQgaWQpOwotICAgIHZvaWQgc2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IHZvaWQqIGJpdHMpOworICAgIHZvaWQgc2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQg
aWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IHZvaWQqKTsKICAgICB2b2lkIHNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZvckRpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJlKik7CiAgICAgdm9pZCBjbGVh
ckFsbERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKTsKICAgICB2b2lkIHB1cmdlTm9kZVRl
eHR1cmVzUmVjdXJzaXZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAppbmRleCBjOGU4
ZGFkLi43NDE4ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTMzNiw3ICsz
MzYsNiBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbgogICAgIHRleHR1cmVNYXBwZXItPnNldEdy
YXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAg
ICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQtPnRleHREcmF3aW5n
TW9kZSgpKTsKLSAgICB0ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoZnJhbWUtPnZpZXco
KS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAgICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0gcGFp
bnRlci0+d29ybGRUcmFuc2Zvcm0oKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
YXRyaXgoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDBiODU0ZjkuLjFiYzM5MWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMDItMDIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9z
ZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVy
ZU1hcHBlciBBUEkgdG8gdXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBS
ZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCisKKyAgICAgICAgVXNlIFRleHR1cmVNYXBwZXI6
OmNyZWF0ZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIFRleHR1cmVNYXBwZXJHTC9UZXh0dXJlTWFwcGVy
UXQgZGlyZWN0bHkuCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFX
ZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50
UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNs
aWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorCiAyMDEyLTAyLTAx
ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CiAKICAgICAgICAgQXZvaWQgY3JlYXRpbmcgTmFtZWROb2RlTWFwIHVubmVjZXNzYXJp
bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVu
dFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNw
cAppbmRleCA0MGU2YjE0Li40NWRjZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCkBAIC0yOCwxMiArMjgsOCBAQAogI2VuZGlmCiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgi
CiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCi0KLSNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCi0jaW5jbHVkZSAib3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIgotI2VuZGlm
CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzYsNyArNzIsNyBAQCB2b2lkIFBh
Z2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXll
cikKIHsKICAgICBpZiAobGF5ZXIpIHsKICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQg
PSBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdChwYWdlLT5tYWluRnJhbWUo
KSwgbGF5ZXIpKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVN
YXBwZXIoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJRdCkpOworICAgICAgICB0ZXh0dXJlTWFw
cGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKSk7
CiAgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0yNjcsMTEgKzI2MywxMSBAQCB2b2lkIFBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
KQogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICAgICAgUUdyYXBoaWNzVmlldyogZ3Jh
cGhpY3NWaWV3ID0gdmlldy0+c2NlbmUoKS0+dmlld3MoKVswXTsKICAgICAgICAgaWYgKGdyYXBo
aWNzVmlldyAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCkgJiYgZ3JhcGhpY3NWaWV3LT52aWV3
cG9ydCgpLT5pbmhlcml0cygiUUdMV2lkZ2V0IikpIHsKLSAgICAgICAgICAgIHRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCkp
OworICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIHRleHR1cmVNYXBwZXJO
b2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlKCkpOwor
ICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyOjpjcmVhdGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgdGV4dHVyZU1h
cHBlck5vZGVDbGllbnQuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjNTU5ODQyLi45ZDhlNjRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDItMDIgIE5vJ2FtIFJvc2VudGhhbCAg
PG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0
b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8gdXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCisKKyAgICAgICAgVXNlIFRleHR1
cmVNYXBwZXI6OmNyZWF0ZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIFRleHR1cmVNYXBwZXJHTC9UZXh0
dXJlTWFwcGVyUXQgZGlyZWN0bHkuCisgICAgICAgIFJlbW92ZSBjYWxscyB0byB1bnVzZWQgQVBJ
LgorCisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4
dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0dyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1h
Z2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXll
cik6CisKIDIwMTItMDItMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4K
IAogICAgICAgICBOUEFQSSB3aWxsIG5vdCBzZW5kIG1vdXNlIHVwIGV2ZW50cyB3aGVuIG1vdXNl
IGlzIG91dHNpZGUgcGx1Z2luIGFyZWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCmluZGV4IDg5NjliYmIuLmM3Y2E3ZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcApAQCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNs
dWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIK
QEAgLTE3MSw4ICsxNzAsOCBAQCBMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJv
eHkoKQogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZs
b2F0UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAg
IG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJU
KGR5bmFtaWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpKTsK
KyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVN
YXBwZXI6Ok9wZW5HTE1vZGUpOworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJh
dGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKIAogICAgIHN5bmNSZW1v
dGVDb250ZW50KCk7CiAgICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RM
YXllcigpOwpAQCAtMTg0LDkgKzE4Myw2IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWlu
dFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAg
ICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCk7Ci0gICAgbV90ZXh0dXJlTWFw
cGVyLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pKTsK
ICAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAg
bV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5i
aW5kU3VyZmFjZSgwKTsKQEAgLTIxMSw5ICsyMDcsOCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUVBhaW50
ZXIqIHBhaW50ZXIpCiB7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4
dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKGR5bmFt
aWNfY2FzdDxUZXh0dXJlTWFwcGVyUXQqPihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpKTsKLQorICAg
ICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKKyAgICBBU1NF
UlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6
U29mdHdhcmVNb2RlKTsKICAgICBzeW5jUmVtb3RlQ29udGVudCgpOwogICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShyb290TGF5ZXIoKSk7CiAKQEAgLTQx
MCw3ICs0MDUsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRf
dCBpbWFnZUlELCBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCkKICAgICAgICAgICAgICAgICBzdWJJ
bWFnZSA9IGltYWdlLmNvcHkocmVjdCk7CiAgICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwogICAgICAgICAg
ICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhhKTsKLSAgICAgICAg
ICAgIHRleHR1cmUtPnVwZGF0ZVJhd0NvbnRlbnRzKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cmVjdC5zaXplKCkpLCBzdWJJbWFnZS5jb25zdEJpdHMoKSk7CisgICAgICAgICAgICB0ZXh0dXJl
LT51cGRhdGVDb250ZW50cyhzdWJJbWFnZS5jb25zdEJpdHMoKSwgSW50UmVjdChJbnRQb2ludDo6
emVybygpLCByZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5s
b2NhdGlvbigpLCB0ZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ3Myw3ICs0NjgsNyBA
QCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVyKCkKICAgICAvLyBUaGUg
cm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRp
bWl6ZWQgb3V0LgogICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkp
OwogICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0
dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CiAgICAgdG9UZXh0
dXJlTWFwcGVyTm9kZShtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0
dXJlTWFwcGVyLmdldCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125313</attachid>
            <date>2012-02-03 06:08:06 -0800</date>
            <delta_ts>2012-02-03 08:59:51 -0800</delta_ts>
            <desc>Fixed the non-3d-rendering path</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>63607</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMDZkMGVkLi42NDdmYTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTItMDItMDIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8g
dXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJ0
aW4gUm9iaW5zb24uCisKKyAgICAgICAgUmVtb3ZlZCBUZXh0dXJlTWFwcGVyUXQsIGFuZCBpbnN0
ZWFkIGNyZWF0ZWQgYSBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgY2xhc3MsCisgICAgICAgIHdo
aWNoIHJlc3BvbmRzIHRvIGFuICJTb2Z0d2FyZSIgbW9kZSBvZiBUZXh0dXJlTWFwcGVyLCBpbnN0
ZWFkIG9mIGNyZWF0aW5nIHN1YmNsYXNzZXMKKyAgICAgICAgb2YgVGV4dHVyZU1hcHBlciBkaXJl
Y3RseS4gVGhpcyBhbGxvd3MgdXNpbmcgdGhlIHNvZnR3YXJlIGZhbGxiYWNrIG9mIFRleHR1cmVN
YXBwZXIgYnkgYW55CisgICAgICAgIHNvcnQuCisKKyAgICAgICAgVG8gbWFrZSB0aGUgSW1hZ2VC
dWZmZXIgYmFja2VuZCBlYXNpZXIsIGNvbnRlbnQgdXBkYXRlcyB0byBCaXRtYXBUZXh0dXJlIGNh
biBub3cgdXNlIGVpdGhlcgorICAgICAgICBhbiBpbWFnZSwgb3IgYSByYXcgZGF0YSBwb2ludGVy
LiBUaGUgcmF3IGRhdGEgcG9pbnRlciBpcyBwcm92aWRlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29u
cywKKyAgICAgICAgYXMgY29udmVydGluZyBkYXRhIHRvL2Zyb20gSW1hZ2UgcmVmZXJlbmNlcyBp
biBRdCBnZW5lcmF0ZXMgdW5uZWNlc3NhcnkgZGVlcCBjb3BpZXMgb2YgdGhlCisgICAgICAgIGlt
YWdlIGRhdGEuCisKKyAgICAgICAgQWxzbywgZnVuY3Rpb25zIHRoYXQgdXNlIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHdlcmUgYWRkZWQgdG8gR3JhcGhpY3NDb250ZXh0LCB0byBhbGxvdyBmb3IKKyAg
ICAgICAgM0QgdHJhbnNmb3JtcyBpbiBjcm9zcyBwbGF0Zm9ybSBjb2RlLgorICAgICAgICBBZnRl
ciB0aGlzIHBhdGNoIGV2ZXJ5dGhpbmcgcmVuZGVycyB0aGUgc2FtZS4gQW4gYWRkaXRpb25hbCBi
dWcgcmVwb3J0IHdhcyBjcmVhdGVkIHRvIGFsbG93CisgICAgICAgIEltYWdlQnVmZmVyIHNoYWxs
b3cgaW1hZ2UgY29waWVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzc2ODkKKworICAgICAgICBDb3ZlcmVkIGV4dGVuc2l2ZWx5IGJ5IGV4aXN0aW5nIHRlc3RzLCBu
byBiZWhhdmlvcmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTERhdGEpOgor
ICAgICAgICAoQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJl
c2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c3dpenpsZUJHUkFU
b1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChU
ZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjphY2Nl
bGVyYXRpb25Nb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0M0RUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXQzRFRyYW5zZm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpCaXRtYXBUZXh0dXJlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YnBwKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmU6OmlzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXI6OnNldEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
OjpncmFwaGljc0NvbnRleHQpOgorICAgICAgICAoVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6OnBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyTm9kZSk6CisKIDIwMTItMDItMDIgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxMDY1NjYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBjZmVkZmYyLi5l
OTg0NzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU3MzIsOSArNTczMiwx
MSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwIFwKKyAgICAg
ICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJ
bWFnZUJ1ZmZlci5oIFwKKyAgICAgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKKyAgICAgICAgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmgKQEAgLTU3NTIs
OCArNTc1NCwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmggXAorICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCBcCisgICAgICAgIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuaCBcCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAorICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIHdl
YmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vVGV4dHVyZU1hcHBlckdMQ2Fpcm8uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGZjNmY2ZTYu
LmE3ZTUzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzkzOSwxOSArMzkzOSwxOSBAQCB3aW4zMjohd2lu
MzItZysrKjpjb250YWlucyhRTUFLRV9IT1NULmFyY2gsIHg4Nl82NCk6ewogCiBjb250YWlucyhD
T05GSUcsIHRleG1hcCkgewogICAgIEhFQURFUlMgKz0gXAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIAogICAgIFNPVVJDRVMg
Kz0gXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIFwK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZm
ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5jcHAKIApAQCAtMzk1OSw2ICszOTU5LDcgQEAgY29udGFpbnMoQ09ORklH
LCB0ZXhtYXApIHsKICAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmgKICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAogICAgICAgICBDT05GSUcgKz0gb3BlbmdsLXNoaW1z
CisgICAgICAgIERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJFX01BUFBFUl9HTAogICAgIH0KIH0g
ZWxzZSB7CiAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVy
UXQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDEwMWM4N2YuLjFjZDU2YmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM1ODAsNiArMzU4MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFn
ZUJ1ZmZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlck5vZGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkZWE5NTBiLi5mN2Jl
ZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaApAQCAtMTI0LDYgKzEyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBLVVJMOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRS
dW47CisgICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKICAgICBlbnVtIFRleHREcmF3
aW5nTW9kZSB7CiAgICAgICAgIFRleHRNb2RlSW52aXNpYmxlID0gMCwKQEAgLTQwOSw2ICs0MTAs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0Owog
CisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAg
ICAvLyBUaGlzIGlzIG5lZWRlZCB3aGVuIHVzaW5nIGFjY2VsZXJhdGVkLWNvbXBvc2l0aW5nIGlu
IHNvZnR3YXJlIG1vZGUsIGxpa2UgaW4gVGV4dHVyZU1hcHBlci4KKyAgICAgICAgdm9pZCBjb25j
YXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgICAgICB2b2lk
IHNldDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGdldDNEVHJhbnNmb3JtKCkgY29uc3Q7CisjZW5kaWYKICAgICAg
ICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhpcyBjb250ZXh0
LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24KICAgICAgICAgLy8gZm9yIGRyYXdpbmcgaW50byB0
aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgICAgICBQYXNzT3duUHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEludFNpemUmKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Rl
eHR1cmVNYXBwZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwCmluZGV4IDYxZDhiMjAuLmU3Mjk1MTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBw
ZXJDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcApAQCAtMTE1LDExICsxMTUsNiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJDYWlybzo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29u
c3QgRmxvYXRSZQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
LXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJDYWlybyk7Ci19Ci0KIFBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckNhaXJvOjpjcmVhdGVUZXh0dXJl
KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVDYWlybygpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZGRmZjYwNS4uNTg3MjkzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJHTC5jcHAKQEAgLTI2NSw1NyArMjY1LDYgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEg
ewogCiAgICAgfTsKIAotICAgIHN0cnVjdCBEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRv
cnkgewotICAgICAgICBzdHJ1Y3QgRW50cnkgewotICAgICAgICAgICAgR0x1aW50IHRleHR1cmU7
Ci0gICAgICAgICAgICBpbnQgcmVmQ291bnQ7Ci0gICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxJbWFnZVVJRCwgRW50cnk+IEltYWdlVGV4dHVyZU1hcDsKLSAgICAgICAgSW1hZ2VU
ZXh0dXJlTWFwIGltYWdlVG9UZXh0dXJlOwotCi0gICAgICAgIEdMdWludCBmaW5kT3JDcmVhdGUo
SW1hZ2VVSUQgaW1hZ2UsIGJvb2wmIGZvdW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbWFn
ZVRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0g
ICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9U
ZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOwot
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQt
PnNlY29uZC50ZXh0dXJlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRW50cnkgZW50cnk7
Ci0gICAgICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOwot
ICAgICAgICAgICAgZW50cnkucmVmQ291bnQgPSAxOwotICAgICAgICAgICAgaW1hZ2VUb1RleHR1
cmUuYWRkKGltYWdlLCBlbnRyeSk7Ci0gICAgICAgICAgICByZXR1cm4gZW50cnkudGV4dHVyZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgZGVyZWYoSW1hZ2VVSUQgaW1hZ2UpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEhhc2hNYXA8SW1hZ2VVSUQsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBp
bWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBpbWFnZVRv
VGV4dHVyZS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnJlZkNvdW50
IDwgMikgewotICAgICAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkoKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICB+RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChJbWFnZVRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gaW1h
Z2VUb1RleHR1cmUuYmVnaW4oKTsgaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVyZTsKLSAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgICAgICAgICAgICAgR0xfQ01EKGds
RGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9
Ci0gICAgfSBkaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0KICAgICBTaGFyZWRHTERhdGEmIHNo
YXJlZEdMRGF0YSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdMRGF0
YS5nZXQoKSk7CkBAIC0zMzIsNiArMjgxLDcgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEg
ewogICAgIGludCBjdXJyZW50UHJvZ3JhbTsKICAgICBHTGludCBwcmV2aW91c1Byb2dyYW07CiAg
ICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7CisgICAgR0xpbnQgdmlld3BvcnRbNF07CiAg
ICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4gbV9zaGFyZWRHTERhdGE7CiB9OwogCkBAIC0zNDIsNTYg
KzI5MiwyNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKICAgICB2
b2lkIGJpbmQoKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBh
aW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIH5C
aXRtYXBUZXh0dXJlR0woKSB7IGRlc3Ryb3koKTsgfQogICAgIHZpcnR1YWwgdWludDMyX3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBtX29wYXF1ZTsgfQogICAgIGlubGluZSBGbG9hdFNpemUgcmVsYXRpdmVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVNpemU7IH0KICAgICB2b2lkIHNldFRleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4bWFw
OyB9Ci0KLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0
Jiwgdm9pZCopOwotICAgIHZvaWQgdXBkYXRlUmF3Q29udGVudHMoY29uc3QgSW50UmVjdCYsIGNv
bnN0IHZvaWQqKTsKLSAgICB2b2lkIHBhY2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBj
dXJyZW50bHkgYSBzdHViLgotICAgICAgICBpZiAoaXNQYWNrZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9pc1BhY2tlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCB1bnBh
Y2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYSBzdHViLgotICAgICAg
ICBpZiAoIWlzUGFja2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNQYWNr
ZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGlzUGFja2VkKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2lzUGFja2VkOwotICAgIH0KKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRz
KEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7Cisg
ICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYpOwogCiBw
cml2YXRlOgogICAgIEdMdWludCBtX2lkOwotICAgIEltYWdlVUlEIG1faW1hZ2VVSUQ7CiAgICAg
RmxvYXRTaXplIG1fcmVsYXRpdmVTaXplOwotICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgSW50U2l6
ZSBtX3RleHR1cmVTaXplOwotICAgIE93blB0cjxCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4g
bV9idWZmZXI7CiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKICAgICBHTHVpbnQgbV9mYm87CiAg
ICAgR0x1aW50IG1fcmJvOwogICAgIEludFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9z
dXJmYWNlTmVlZHNSZXNldDsKLSAgICBib29sIG1faXNQYWNrZWQ7CiAgICAgVGV4dHVyZU1hcHBl
ckdMKiBtX3RleHR1cmVNYXBwZXI7CiAgICAgQml0bWFwVGV4dHVyZUdMKCkKICAgICAgICAgOiBt
X2lkKDApCi0gICAgICAgICwgbV9pbWFnZVVJRCgwKQotICAgICAgICAsIG1fb3BhcXVlKGZhbHNl
KQogICAgICAgICAsIG1fZmJvKDApCiAgICAgICAgICwgbV9yYm8oMCkKICAgICAgICAgLCBtX3N1
cmZhY2VOZWVkc1Jlc2V0KHRydWUpCkBAIC01NDQsNiArNDYzLDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luUGFpbnRpbmcoKQogI2VuZGlmCiAgICAgZ2xDbGVhclN0ZW5jaWwoMCk7CiAg
ICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIGdsR2V0SW50ZWdlcnYoR0xf
VklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCk7CiAgICAgYmluZFN1cmZhY2UoMCk7CiB9CiAKQEAg
LTY2Myw3ICs1ODMsNiBAQCBzdGF0aWMgdm9pZCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHNpemVf
dCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChjb25z
dCBJbnRTaXplJiBuZXdTaXplLCBib29sIG9wYXF1ZSkKIHsKICAgICBCaXRtYXBUZXh0dXJlOjpy
ZXNldChuZXdTaXplLCBvcGFxdWUpOwotICAgIG1faW1hZ2VVSUQgPSAwOwogICAgIEludFNpemUg
bmV3VGV4dHVyZVNpemUgPSBuZXh0UG93ZXJPZlR3byhuZXdTaXplKTsKICAgICBib29sIGp1c3RD
cmVhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFtX2lkKSB7CkBAIC02ODIsMjggKzYwMSwxMCBAQCB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgYm9vbCBv
cGFxdWUpCiAgICAgfQogICAgIG1fYWN0dWFsU2l6ZSA9IG5ld1NpemU7CiAgICAgbV9yZWxhdGl2
ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3U2l6ZS53aWR0aCgpKSAvIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWlnaHQoKSkgLyBtX3RleHR1cmVTaXplLmhlaWdodCgp
KTsKLSAgICBtX29wYXF1ZSA9IG9wYXF1ZTsKICAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1
ZTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVHTDo6YmVnaW5Q
YWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9idWZmZXIgPSBCR1JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBkaXJ0eVJl
Y3Q7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLT5iZWdpblBhaW50KGRpcnR5UmVjdCwgbV9vcGFxdWUp
OwotfQogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6ZW5kUGFpbnQoKQotewotICAgIGlmICghbV9i
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2J1ZmZlci0+ZW5kUGFpbnQoKTsKLSAgICB1
cGRhdGVDb250ZW50cyhCR1JBRm9ybWF0LCBtX2RpcnR5UmVjdCwgbV9idWZmZXItPmRhdGEoKSk7
Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgbV9i
dWZmZXIuY2xlYXIoKTsKLX0KLQotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgogc3RhdGljIHZv
aWQgc3dpenpsZUJHUkFUb1JHQkEodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpAQCAtNzE0LDc5ICs2MTUsMzEgQEAg
c3RhdGljIHZvaWQgc3dpenpsZUJHUkFUb1JHQkEodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgICAgICAgICBwW3hdID0gKChwW3hdIDw8IDE2KSAmIDB4ZmYwMDAwKSB8
ICgocFt4XSA+PiAxNikgJiAweGZmKSB8IChwW3hdICYgMHhmZjAwZmYwMCk7CiAgICAgfQogfQot
I2VuZGlmCiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1h
dCBwaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgdm9pZCogYml0cykKK3ZvaWQgQml0
bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0KQogewogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1faWQpKQotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIGJvb2wgc2hvdWxkU3dp
enpsZSA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBHTGludCBnbEZvcm1hdCA9IEdMX1JHQkE7Ci0g
ICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgewotICAgIGNhc2UgUkdCQUZvcm1hdDoKLSAgICAgICAg
Z2xGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJHQkZvcm1hdDoK
LSAgICAgICAgZ2xGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkdS
QUZvcm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICAgICAgc2hvdWxkU3dpenps
ZSA9IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKLSNlbHNlCi0gICAgICAgIGds
Rm9ybWF0ID0gR0xfQkdSQTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJHUkZv
cm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICAgICAgc2hvdWxkU3dpenpsZSA9
IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCOwotI2Vsc2UKLSAgICAgICAgZ2xGb3Jt
YXQgPSBHTF9CR1I7Ci0jZW5kaWYKLSAgICAgICAgIGJyZWFrOwotICAgIH0KLQotI2lmZGVmIFRF
WE1BUF9PUEVOR0xfRVNfMgotICAgIGlmIChzaG91bGRTd2l6emxlKQotICAgICAgICBzd2l6emxl
QkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50MzJfdCo+KGJpdHMpLCByZWN0LnNpemUoKSk7Ci0j
ZW5kaWYKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xf
VU5TSUdORURfQllURSwgYml0cykpCisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgZGF0
YSkpCiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVSYXdDb250ZW50cyhjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCB2b2lkKiBiaXRzKQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVw
ZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0
KQogeworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKICAgICBHTF9DTUQoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKICAgICBHTHVpbnQgZ2xGb3JtYXQgPSBpc09w
YXF1ZSgpID8gR0xfUkdCIDogR0xfUkdCQTsKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgYml0cykpCi19Ci0KLXZvaWQgQml0
bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIElt
YWdlVUlEIHVpZCA9IGltYWdlID8gdWlkRm9ySW1hZ2UoaW1hZ2UpIDogMDsKLSAgICBpZiAoIWlt
YWdlIHx8ICF1aWQpIHsKLSAgICAgICAgaWYgKG1faW1hZ2VVSUQpCi0gICAgICAgICAgICBkZXN0
cm95KCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWVJbWFnZSkKICAgICAgICAgcmV0dXJu
OwotICAgIH0KIAotICAgIGlmICh1aWQgPT0gbV9pbWFnZVVJRCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0
dXJlTWFwcGVyLT5kYXRhKCkuZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZSh1
aWQsIGZvdW5kKTsKLSAgICBpZiAobmV3VGV4dHVyZUlEICE9IG1faWQpIHsKLSAgICAgICAgbV9p
bWFnZVVJRCA9IHVpZDsKLSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICBtX2lkID0gbmV3VGV4
dHVyZUlEOwotICAgICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlm
ICghZm91bmQpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGJlZ2luUGFp
bnQoSW50UmVjdCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVp
Z2h0KCkpKSk7Ci0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCksIENvbXBvc2l0ZUNvcHkpOwotICAgICAgICAgICAg
ZW5kUGFpbnQoKTsKLSAgICAgICAgfQotICAgIH0KKyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1h
Z2UgcXRJbWFnZSA9IGZyYW1lSW1hZ2UtPnRvSW1hZ2UoKTsKKyAgICBpZiAoSW50U2l6ZShxdElt
YWdlLnNpemUoKSkgIT0gc291cmNlUmVjdC5zaXplKCkpCisgICAgICAgIHF0SW1hZ2UgPSBxdElt
YWdlLmNvcHkoc291cmNlUmVjdCk7CisgICAgaWYgKGZvcm1hdCA9PSBCR1JBRm9ybWF0IHx8IGZv
cm1hdCA9PSBCR1JGb3JtYXQpCisgICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihxdEltYWdlLmJpdHMoKSksIHF0SW1hZ2Uuc2l6ZSgpKTsKKyAgICBH
TF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0
YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBn
bEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgcXRJbWFnZS5jb25zdEJpdHMoKSkpCisjZW5kaWYK
IH0KIAogc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9u
TWF0cml4KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkKQEAgLTgzNyw3ICs2OTAsNyBA
QCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6YmluZCgpCiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpk
ZXN0cm95KCkKIHsKLSAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2VVSUQgfHwgIW1fdGV4dHVyZU1h
cHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5kZXJlZihtX2ltYWdlVUlEKSkp
CisgICAgaWYgKG1faWQpCiAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lk
KSkKIAogICAgIGlmIChtX2ZibykKQEAgLTg3MiwxMiArNzI1LDEzIEBAIHZvaWQgVGV4dHVyZU1h
cHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKICAgICBC
aXRtYXBUZXh0dXJlR0wqIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihz
dXJmYWNlUG9pbnRlcik7CiAKICAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgSW50U2l6ZSB2
aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pOwogICAg
ICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApKQotICAgICAg
ICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgodmlld3Bv
cnRTaXplKCksIHRydWUpLm11bHRpcGx5KHRyYW5zZm9ybSgpKTsKKyAgICAgICAgZGF0YSgpLnBy
b2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZpZXdwb3J0U2l6ZSwgdHJ1
ZSk7CiAgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKGRhdGEoKS5zaGFyZWRHTERhdGEoKS5z
dGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIGRhdGEoKS5zaGFyZWRHTERh
dGEoKS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4
IC0gMSkpCiAgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9L
RUVQKSkKLSAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmlld3BvcnRTaXplKCkud2lk
dGgoKSwgdmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpKQotICAgICAgICBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuY2xpcFN0YWNrLmFwcGVuZChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHZpZXdwb3J0
U2l6ZSgpKSk7CisgICAgICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53
aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKQorICAgICAgICBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuY2xpcFN0YWNrLmFwcGVuZChJbnRSZWN0KGRhdGEoKS52aWV3cG9ydFswXSwgZGF0YSgp
LnZpZXdwb3J0WzFdLCBkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05ODUsNCArODM5LDkgQEAgUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVy
biBhZG9wdFJlZih0ZXh0dXJlKTsKIH0KIAorUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0
dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCkKK3sKKyAgICByZXR1cm4gVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKK30KKwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAx
YjQxMTg1Li4wOGZhMGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC00MywxNiArNDMsMTcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBi
b29sIG9wYXF1ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSwgYm9vbCBmbGlwKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblBhaW50aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCk7CiAgICAg
dmlydHVhbCB2b2lkIGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9y
Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5
cGUoKSBjb25zdDsKICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgdm9pZCBi
ZWdpblBhaW50aW5nKCk7Ci0gICAgdm9pZCBlbmRQYWludGluZygpOwogICAgIHZvaWQgc2V0R3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250
ZXh0OyB9CiAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBt
X2NvbnRleHQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNPcGVuR0xCYWNrZWQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdm9pZCBwbGF0Zm9ybVVwZGF0ZUNvbnRlbnRzKE5hdGl2ZUltYWdl
UHRyLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVs
Rm9ybWF0KTsKKyAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIE9wZW5HTE1vZGU7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGJlZ2lu
U2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3Qm
KTsKQEAgLTY0LDE2ICs2NSw2IEBAIHByaXZhdGU6CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4gYnVm
ZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJlLgotY2xhc3MgQkdSQTMyUHJlbXVsdGltcGxp
ZWRCdWZmZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZp
cnR1YWwgfkJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKCkgeyB9Ci0gICAgdmlydHVhbCBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qs
IGJvb2wgb3BhcXVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCogZGF0YSgpID0gMDsKLSAgICBzdGF0aWMgUGFzc093blB0cjxCR1JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7Ci19OwotCiBzdGF0aWMgaW5saW5lIGludCBu
ZXh0UG93ZXJPZlR3byhpbnQgbnVtKQogewogICAgIGZvciAoaW50IGkgPSAweDEwMDAwMDAwOyBp
ID4gMDsgaSA+Pj0gMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA0OTViY2FkLi42NmJj
NzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyCiB7CiAgICAgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0
b3JlQ29udGV4dCgpOwogCi0gICAgaWYgKHRleHR1cmVNYXBwZXItPmlzT3BlbkdMQmFja2VkKCkp
IHsKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVN
YXBwZXI6Ok9wZW5HTE1vZGUpIHsKICAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9
IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpOwogICAgICAgICB0
ZXhtYXBHTC0+ZHJhd1RleHR1cmUobV9jb250ZXh0LT5tX3RleHR1cmUsICFtX2NvbnRleHQtPm1f
YXR0cnMuYWxwaGEsIEZsb2F0U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5
LCBtYXNrLCB0cnVlIC8qIGZsaXAgKi8pOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5j
cHAKaW5kZXggZWM3M2MzZmUuLjkwMDc5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTEzMzUs
NiArMTMzNSwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIG1fZGF0YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0
cmFuc2Zvcm0pOwogfQogCisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXQzRFRyYW5z
Zm9ybSgpIGNvbnN0Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisKKyAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0
KCktPmNvbWJpbmVkVHJhbnNmb3JtKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0
YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0sIHRydWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCBmYWxz
ZSk7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29u
c3QgS1VSTCYsIGNvbnN0IEludFJlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVy
UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBl
clF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2NDFjZS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclF0LmgiCi0KLSNpbmNsdWRlIDxRdENvcmUvcWRlYnVnLmg+Ci0jaW5jbHVkZSA8UXRH
dWkvcXBhaW50ZW5naW5lLmg+Ci0jaW5jbHVkZSA8UXRHdWkvcXBpeG1hcC5oPgotCi0jaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQotIyBpbmNsdWRlICJvcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6
ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fcGl4bWFwLnBhaW50aW5nQWN0aXZlKCkpCi0gICAgICAg
IHFGYXRhbCgiRGVzdHJveWluZyBhbiBhY3RpdmUgcGl4bWFwIik7Ci0gICAgbV9waXhtYXAgPSBR
UGl4bWFwKCk7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpyZXNldChjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIGlzT3BhcXVlKQotewotICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHNpemUs
IGlzT3BhcXVlKTsKLQotICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3BpeG1hcC5zaXplKCkud2lk
dGgoKSB8fCBzaXplLmhlaWdodCgpID4gbV9waXhtYXAuc2l6ZSgpLmhlaWdodCgpIHx8IG1fcGl4
bWFwLmlzTnVsbCgpKQotICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKLSAgICBpZiAoIWlzT3BhcXVlKQotICAgICAgICBtX3BpeG1hcC5maWxs
KFF0Ojp0cmFuc3BhcmVudCk7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBU
ZXh0dXJlUXQ6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIG1f
cGFpbnRlci5iZWdpbigmbV9waXhtYXApOwotICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6
ZSgmbV9wYWludGVyKTsKLSAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOwotICAgIG1fcGFpbnRlci5maWxsUmVjdChRUmVjdChk
aXJ0eVJlY3QpLCBRdDo6dHJhbnNwYXJlbnQpOwotICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlv
bk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKLSAgICByZXR1cm4g
Jm1fcGFpbnRlcjsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmVuZFBhaW50KCkKLXsKLSAg
ICBtX3BhaW50ZXIuZW5kKCk7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0Ojp1cGRhdGVDb250
ZW50cyhQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgdm9pZCog
Yml0cykKLXsKLSAgICBtX3BhaW50ZXIuYmVnaW4oJm1fcGl4bWFwKTsKLSAgICBRSW1hZ2U6OkZv
cm1hdCBxdEZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOwotICAg
IGlmIChwaXhlbEZvcm1hdCA9PSBCR1JGb3JtYXQgfHwgcGl4ZWxGb3JtYXQgPT0gUkdCRm9ybWF0
KQotICAgICAgICBxdEZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOwotICAgIFFJbWFnZSBp
bWFnZShzdGF0aWNfY2FzdDx1Y2hhcio+KGJpdHMpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCksIHF0Rm9ybWF0KTsKLSAgICBpZiAocGl4ZWxGb3JtYXQgPT0gQkdSRm9ybWF0IHx8IHBpeGVs
Rm9ybWF0ID09IEJHUkFGb3JtYXQpCi0gICAgICAgIGltYWdlID0gaW1hZ2UucmdiU3dhcHBlZCgp
OwotICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9u
TW9kZV9Tb3VyY2UpOwotICAgIG1fcGFpbnRlci5kcmF3SW1hZ2UocmVjdCwgaW1hZ2UpOwotICAg
IG1fcGFpbnRlci5lbmQoKTsKLX0KLQotYm9vbCBCaXRtYXBUZXh0dXJlUXQ6OnNhdmUoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBtX3BpeG1hcC5zYXZlKHBhdGgsICJQTkciKTsK
LX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1h
Z2UpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFFQaXht
YXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlm
ICghcGl4bWFwKQotICAgICAgICByZXR1cm47Ci0gICAgQml0bWFwVGV4dHVyZTo6cmVzZXQocGl4
bWFwLT5zaXplKCksICFwaXhtYXAtPmhhc0FscGhhQ2hhbm5lbCgpKTsKLSAgICBtX3BpeG1hcCA9
ICpwaXhtYXA7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpwYWNrKCkKLXsKLSAgICBpZiAo
bV9waXhtYXAuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW1hZ2UgPSBtX3Bp
eG1hcC50b0ltYWdlKCk7Ci0gICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7Ci0gICAgbV9pc1BhY2tl
ZCA9IHRydWU7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0Ojp1bnBhY2soKQotewotICAgIG1f
aXNQYWNrZWQgPSBmYWxzZTsKLSAgICBpZiAobV9pbWFnZS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9waXhtYXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UobV9pbWFnZSk7Ci0gICAg
bV9pbWFnZSA9IFFJbWFnZSgpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjdXJyZW50UGFpbnRlcigpOwotICAgICBw
YWludGVyLT5zYXZlKCk7Ci0gICAgIFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50ZXIt
PnRyYW5zZm9ybSgpOwotICAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4LCBmYWxzZSk7
Ci0gICAgIHBhaW50ZXItPnNldENsaXBSZWN0KHJlY3QpOwotICAgICBwYWludGVyLT5zZXRUcmFu
c2Zvcm0ocHJldlRyYW5zZm9ybSwgZmFsc2UpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6
ZW5kQ2xpcCgpCi17Ci0gICAgY3VycmVudFBhaW50ZXIoKS0+cmVzdG9yZSgpOwotfQotCi1JbnRT
aXplIFRleHR1cmVNYXBwZXJRdDo6dmlld3BvcnRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SW50U2l6ZShtX3BhaW50ZXItPmRldmljZSgpLT53aWR0aCgpLCBtX3BhaW50ZXItPmRldmljZSgp
LT5oZWlnaHQoKSk7Ci19Ci0KLQotVGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoKQot
ICAgIDogbV9jdXJyZW50U3VyZmFjZSgwKQotewotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6
c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBtX2Nv
bnRleHQgPSBjb250ZXh0OwotICAgIG1fcGFpbnRlciA9IGNvbnRleHQgPyBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSA6IDA7Ci0gICAgaW5pdGlhbGl6ZShtX3BhaW50ZXIpOwotfQotCi1HcmFw
aGljc0NvbnRleHQqIFRleHR1cmVNYXBwZXJRdDo6Z3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2Uo
Qml0bWFwVGV4dHVyZSogc3VyZmFjZSkKLXsKLSAgICBpZiAobV9jdXJyZW50U3VyZmFjZSA9PSBz
dXJmYWNlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fY3VycmVudFN1cmZhY2UpCi0gICAg
ICAgIG1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlci5lbmQoKTsKLSAgICBpZiAoIXN1cmZhY2Up
IHsKLSAgICAgICAgbV9jdXJyZW50U3VyZmFjZSA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgQml0bWFwVGV4dHVyZVF0KiBzdXJmYWNlUXQgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0
dXJlUXQqPihzdXJmYWNlKTsKLSAgICBpZiAoIXN1cmZhY2VRdC0+bV9wYWludGVyLmlzQWN0aXZl
KCkpCi0gICAgICAgIHN1cmZhY2VRdC0+bV9wYWludGVyLmJlZ2luKCZzdXJmYWNlUXQtPm1fcGl4
bWFwKTsKLSAgICBtX2N1cnJlbnRTdXJmYWNlID0gc3VyZmFjZVF0OwotfQotCi0KLXZvaWQgVGV4
dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQot
ewotICAgIGNvbnN0IEJpdG1hcFRleHR1cmVRdCYgdGV4dHVyZVF0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQml0bWFwVGV4dHVyZVF0Jj4odGV4dHVyZSk7Ci0gICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBt
X3BhaW50ZXI7Ci0gICAgUVBpeG1hcCBwaXhtYXAgPSB0ZXh0dXJlUXQubV9waXhtYXA7Ci0gICAg
aWYgKG1fY3VycmVudFN1cmZhY2UpCi0gICAgICAgIHBhaW50ZXIgPSAmbV9jdXJyZW50U3VyZmFj
ZS0+bV9wYWludGVyOwotCi0gICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZVF0KiBtYXNrID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQml0bWFwVGV4dHVyZVF0Kj4obWFza1RleHR1cmUpOwotICAgICAgICBRUGl4bWFw
IGludGVybWVkaWF0ZVBpeG1hcChwaXhtYXAuc2l6ZSgpKTsKLSAgICAgICAgaW50ZXJtZWRpYXRl
UGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50ZXIgbWFza1BhaW50
ZXIoJmludGVybWVkaWF0ZVBpeG1hcCk7Ci0gICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0
aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgIG1hc2tQ
YWludGVyLmRyYXdQaXhtYXAoMCwgMCwgcGl4bWFwKTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0
Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7
Ci0gICAgICAgIG1hc2tQYWludGVyLmRyYXdQaXhtYXAoUVJlY3QoMCwgMCwgcGl4bWFwLndpZHRo
KCksIHBpeG1hcC5oZWlnaHQoKSksIG1hc2stPm1fcGl4bWFwLCBtYXNrLT5zb3VyY2VSZWN0KCkp
OwotICAgICAgICBtYXNrUGFpbnRlci5lbmQoKTsKLSAgICAgICAgcGl4bWFwID0gaW50ZXJtZWRp
YXRlUGl4bWFwOwotICAgIH0KLQotICAgIGNvbnN0IHFyZWFsIHByZXZPcGFjaXR5ID0gcGFpbnRl
ci0+b3BhY2l0eSgpOwotICAgIGNvbnN0IFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50
ZXItPnRyYW5zZm9ybSgpOwotICAgIHBhaW50ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAg
cGFpbnRlci0+c2V0VHJhbnNmb3JtKG1hdHJpeCwgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+ZHJhd1Bp
eG1hcCh0YXJnZXRSZWN0LCBwaXhtYXAsIEZsb2F0UmVjdCh0ZXh0dXJlUXQuc291cmNlUmVjdCgp
KSk7Ci0gICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0pOwotICAgIHBhaW50
ZXItPnNldE9wYWNpdHkocHJldk9wYWNpdHkpOwotfQotCi1QYXNzT3duUHRyPFRleHR1cmVNYXBw
ZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0j
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5wYWludEVuZ2luZSgpLT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpP
cGVuR0wyKQotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJRdCk7Ci19Ci0KLVBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlclF0OjpjcmVhdGVUZXh0dXJlKCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVRdCgpKTsKLX0KLQotQml0
bWFwVGV4dHVyZVF0OjpCaXRtYXBUZXh0dXJlUXQoKQotICAgIDogbV9pc1BhY2tlZChmYWxzZSkK
LXsKLQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5QYWludGluZygpCi17Ci0gICAg
bV9wYWludGVyLT5zYXZlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjplbmRQYWludGlu
ZygpCi17Ci0gICAgbV9wYWludGVyLT5yZXN0b3JlKCk7Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCi1jbGFzcyBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlclF0IDogcHVibGljIEJH
UkEzMlByZW11bHRpbXBsaWVkQnVmZmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgb3Bh
cXVlKQotICAgIHsKLSAgICAgICAgLy8gbV9pbWFnZSBpcyBvbmx5IHVzaW5nIGR1cmluZyBwYWlu
dCwgaXQncyBzYWZlIHRvIG92ZXJyaWRlIGl0LgotICAgICAgICBtX2ltYWdlID0gUUltYWdlKHJl
Y3Quc2l6ZSgpLndpZHRoKCksIHJlY3Quc2l6ZSgpLmhlaWdodCgpLCBvcGFxdWUgPyBRSW1hZ2U6
OkZvcm1hdF9SR0IzMiA6IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAg
ICAgICAgaWYgKCFvcGFxdWUpCi0gICAgICAgICAgICBtX2ltYWdlLmZpbGwoMCk7Ci0gICAgICAg
IG1fcGFpbnRlci5iZWdpbigmbV9pbWFnZSk7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJRdDo6aW5p
dGlhbGl6ZSgmbV9wYWludGVyKTsKLSAgICAgICAgbV9wYWludGVyLnRyYW5zbGF0ZSgtcmVjdC54
KCksIC1yZWN0LnkoKSk7Ci0gICAgICAgIHJldHVybiAmbV9wYWludGVyOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBlbmRQYWludCgpIHsgbV9wYWludGVyLmVuZCgpOyB9Ci0gICAgdmlydHVh
bCB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9pbWFnZS5iaXRzKCk7IH0KLQotcHJpdmF0ZToKLSAg
ICBRUGFpbnRlciBtX3BhaW50ZXI7Ci0gICAgUUltYWdlIG1faW1hZ2U7Ci19OwotCi1QYXNzT3du
UHRyPEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZl
cjo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJHUkEzMlByZW11bHRpbXBs
aWVkQnVmZmVyUXQoKSk7Ci19Ci0KLXVpbnQ2NF90IHVpZEZvckltYWdlKEltYWdlKiBpbWFnZSkK
LXsKLSAgICByZXR1cm4gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPnNlcmlh
bE51bWJlcigpOwotfQotI2VuZGlmCi19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDhmZWUwMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAg
QEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAidGV4
bWFwL1RleHR1cmVNYXBwZXIuaCIKLQotI2lmbmRlZiBUZXh0dXJlTWFwcGVyUXRfaAotI2RlZmlu
ZSBUZXh0dXJlTWFwcGVyUXRfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1h
cFRleHR1cmVRdCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4
dHVyZU1hcHBlclF0OwotcHVibGljOgotICAgIEJpdG1hcFRleHR1cmVRdCgpOwotICAgIH5CaXRt
YXBUZXh0dXJlUXQoKSB7IGRlc3Ryb3koKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fcGl4
bWFwLndpZHRoKCksIG1fcGl4bWFwLmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXNl
dChjb25zdCBJbnRTaXplJiwgYm9vbCBvcGFxdWUpOwotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2
aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKik7Ci0gICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJiBwYXRoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BpeG1hcC5pc051
bGwoKSB8fCAhbV9pbWFnZS5pc051bGwoKTsgfQotICAgIEludFJlY3Qgc291cmNlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIEludFJlY3QoMCwgMCwgY29udGVudFNpemUoKS53aWR0aCgpLCBjb250ZW50
U2l6ZSgpLmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWNrKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHVucGFjaygpOwotICAgIHZpcnR1YWwgYm9vbCBpc1BhY2tlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNQYWNrZWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxG
b3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKTsKLQotICAgIFFQYWludGVyKiBwYWlu
dGVyKCkgeyByZXR1cm4gJm1fcGFpbnRlcjsgfQotCi1wcml2YXRlOgotICAgIFFQYWludGVyIG1f
cGFpbnRlcjsKLSAgICBRUGl4bWFwIG1fcGl4bWFwOwotICAgIFFJbWFnZSBtX2ltYWdlOwotICAg
IGJvb2wgbV9pc1BhY2tlZDsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJRdCA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyIHsKLXB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyUXQoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJl
Z2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNz
Q29udGV4dChHcmFwaGljc0NvbnRleHQqKTsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3Qo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCBJbnRTaXplIHZpZXdwb3J0U2l6
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGVuZFBhaW50aW5nKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFFQYWlu
dGVyKiBwYWludGVyKQotICAgIHsKLSAgICAgICAgaWYgKHBhaW50ZXIpCi0gICAgICAgICAgICBw
YWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nIHwgUVBhaW50ZXI6
OlNtb290aFBpeG1hcFRyYW5zZm9ybSwgZmFsc2UpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0
dXJlTWFwcGVyUXQpOyB9Ci1wcml2YXRlOgotICAgIGlubGluZSBRUGFpbnRlciogY3VycmVudFBh
aW50ZXIoKSB7IHJldHVybiBtX2N1cnJlbnRTdXJmYWNlID8gbV9jdXJyZW50U3VyZmFjZS0+cGFp
bnRlcigpIDogbV9wYWludGVyOyB9Ci0KLSAgICBRUGFpbnRlciogbV9wYWludGVyOwotICAgIEdy
YXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlUXQ+IG1f
Y3VycmVudFN1cmZhY2U7Ci19OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAppbmRleCBk
ZDMzZjBkLi41ZTUyOGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCkBAIC0yMCw2ICsyMCw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgiCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNzEsNSArNzMsMTMgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVy
OjphY3F1aXJlVGV4dHVyZUZyb21Qb29sKGNvbnN0IEludFNpemUmIHMKICAgICByZXR1cm4gc2Vs
ZWN0ZWRUZXh0dXJlOwogfQogCisKK1Bhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1h
cHBlcjo6Y3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBT
b2Z0d2FyZU1vZGUpCisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmNy
ZWF0ZSgpOworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCk7Cit9CisKIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggZDY2ZmUyZi4uOGUyZTlmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oCkBAIC00Nyw0NiArNDcsMzEgQEAgY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIEJpdG1h
cFRleHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgog
ICAgIGVudW0gUGl4ZWxGb3JtYXQgeyBCR1JBRm9ybWF0LCBSR0JBRm9ybWF0LCBCR1JGb3JtYXQs
IFJHQkZvcm1hdCB9OwotICAgIEJpdG1hcFRleHR1cmUoKSA6IG1fbG9ja0NvdW50KDApIHt9Cisg
ICAgQml0bWFwVGV4dHVyZSgpCisgICAgICAgIDogbV9pc09wYXF1ZSh0cnVlKQorICAgIHsKKyAg
ICB9CisKICAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBhbGxvd09mZmxpbmVUZXh0dXJlVXBs
b2FkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBicHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGlu
dCBicHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSA9IGZhbHNlKQogICAgIHsKICAgICAgICAgbV9p
c09wYXF1ZSA9IG9wYXF1ZTsKICAgICAgICAgbV9jb250ZW50U2l6ZSA9IHNpemU7CiAgICAgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHBhY2soKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCkg
eyB9Ci0gICAgdmlydHVhbCBib29sIGlzUGFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAw
OwotCi0gICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIEJpdG1hcFRleHR1cmUgbWlnaHQg
bW9kaWZ5IHRoZSBiaXRzIGRpcmVjdGx5IChzd2l6emxlKS4KLSAgICAvLyBUaHVzLCB0aGlzIG1l
dGhvZCBpcyBvbmx5IHJlY29tbWVuZGVkIGZvciBidWZmZXIgdXBkYXRlLCBzdWNoIGFzIHVzZWQg
YnkgV2ViS2l0Mi4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQs
IGNvbnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVJhd0NvbnRlbnRzKGNvbnN0IEludFJlY3QmLCBjb25zdCB2b2lkKiBiaXRzKSB7IH0KLSAgICB2
aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50TWVkaWEoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJlZ2luUGFpbnQoSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwg
c2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
SW1hZ2UoSW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJikg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGlubGluZSB2b2lkIGxvY2soKSB7ICsrbV9sb2NrQ291
bnQ7IH0KLSAgICBpbmxpbmUgdm9pZCB1bmxvY2soKSB7IC0tbV9sb2NrQ291bnQ7IH0KLSAgICBp
bmxpbmUgYm9vbCBpc0xvY2tlZCgpIHsgcmV0dXJuIG1fbG9ja0NvdW50OyB9CiAgICAgaW5saW5l
IEludFNpemUgY29udGVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CiAg
ICAgaW5saW5lIGludCBudW1iZXJPZkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRo
KCkgKiBzaXplKCkuaGVpZ2h0KCkgKiBicHAoKSA+PiAzOyB9CisgICAgaW5saW5lIGJvb2wgaXNP
cGFxdWUoKSBjb25zdCB7IHJldHVybiBtX2lzT3BhcXVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBp
bnQgbV9sb2NrQ291bnQ7CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOwogICAgIGJvb2wgbV9p
c09wYXF1ZTsKIH07CkBAIC05NywzMiArODIsMjYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlciB7CiAg
ICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQgPSAwKTsKKyAgICBlbnVtIEFjY2VsZXJhdGlvbk1vZGUgeyBTb2Z0d2FyZU1vZGUsIE9w
ZW5HTE1vZGUgfTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUo
QWNjZWxlcmF0aW9uTW9kZSBuZXdNb2RlID0gU29mdHdhcmVNb2RlKTsKICAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3Qg
Qml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxv
YXQgb3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkg
PSAwOwogCiAgICAgLy8gbWFrZXMgYSBzdXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dp
bmcgZHJhd1RleHR1cmUgY2FsbHMuCiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1h
cFRleHR1cmUqIHN1cmZhY2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250
ZXh0KEdyYXBoaWNzQ29udGV4dCopID0gMDsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0KKyAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9j
b250ZXh0OyB9CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xp
cCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgp
ID0gMDsKLSAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3Bv
cnRTaXplOyB9Ci0gICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBt
X3ZpZXdwb3J0U2l6ZSA9IHM7IH0KIAogICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW50ZXJwb2xhdGlvblF1YWxp
dHkgPSBxdWFsaXR5OyB9CiAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdN
b2RlRmxhZ3MgbW9kZSkgeyBtX3RleHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KIAogICAgIEludGVy
cG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVy
biBtX2ludGVycG9sYXRpb25RdWFsaXR5OyB9CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4
dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dQYXJ0aWFsVXBkYXRlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgpIHsgbV90cmFuc2Zvcm0gPSBtYXRyaXg7IH0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwg
QWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgPSAwOwogCiAgICAgdmly
dHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRp
bmcoKSB7IH0KQEAgLTEzMCw3ICsxMDksNiBAQCBwdWJsaWM6CiAgICAgLy8gQSBzdXJmYWNlIGlz
IHJlbGVhc2VkIGltcGxpY2l0bHkgd2hlbiBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IGFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6
ZSYpOwogCi0KIHByb3RlY3RlZDoKICAgICBUZXh0dXJlTWFwcGVyKCkKICAgICAgICAgOiBtX2lu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25EZWZhdWx0KQpAQCAtMTM4LDE0ICsxMTYs
MjEgQEAgcHJvdGVjdGVkOgogICAgIHt9CiAKIHByaXZhdGU6CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IHBsYXRmb3JtQ3Jl
YXRlQWNjZWxlcmF0ZWQoKTsKKyNlbHNlCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1h
cHBlcj4gcGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisjZW5kaWYKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRp
b25RdWFsaXR5OwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlOwot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIEludFNpemUgbV92aWV3
cG9ydFNpemU7CiAgICAgVmVjdG9yPFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IG1fdGV4dHVyZVBv
b2w7CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7CiB9OwogCi19OworfQogCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBkMjc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ci5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmgiCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhjb25zdCB2
b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworI2lmIFBMQVRGT1JNKFFU
KQorICAgIFFJbWFnZSBpbWFnZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oZGF0YSks
IHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgdGFyZ2V0UmVjdC53aWR0
aCgpICogNCwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIFFQYWlu
dGVyKiBwYWludGVyID0gbV9pbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAg
ICBwYWludGVyLT5zYXZlKCk7CisgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICBwYWludGVyLT5kcmF3SW1hZ2UodGFy
Z2V0UmVjdCwgaW1hZ2UpOworICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKKyNlbmRpZgorfQorCit2
b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdl
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQ
aXhlbEZvcm1hdCkKK3sKKyAgICBtX2ltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgdGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgQ29tcG9zaXRlQ29w
eSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpiZWdpbkNsaXAoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcmV2aW91c1RyYW5zZm9ybSA9IGNvbnRleHQtPmdldDNE
VHJhbnNmb3JtKCk7CisjZWxzZQorICAgIEFmZmluZVRyYW5zZm9ybSBwcmV2aW91c1RyYW5zZm9y
bSA9IGNvbnRleHQtPmdldENUTSgpOworI2VuZGlmCisgICAgY29udGV4dC0+c2F2ZSgpOworCisj
aWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAgICBjb250ZXh0LT5jb25jYXQzRFRyYW5zZm9ybSht
YXRyaXgpOworI2Vsc2UKKyAgICBjb250ZXh0LT5jb25jYXRDVE0obWF0cml4LnRvQWZmaW5lVHJh
bnNmb3JtKCkpOworI2VuZGlmCisKKyAgICBjb250ZXh0LT5jbGlwKHJlY3QpOworCisjaWYgRU5B
QkxFKDNEX1JFTkRFUklORykKKyAgICBjb250ZXh0LT5zZXQzRFRyYW5zZm9ybShwcmV2aW91c1Ry
YW5zZm9ybSk7CisjZWxzZQorICAgIGNvbnRleHQtPnNldENUTShwcmV2aW91c1RyYW5zZm9ybSk7
CisjZW5kaWYKK30KKwordm9pZCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmRyYXdUZXh0dXJl
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gY3VycmVudENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciYgdGV4dHVyZUltYWdl
QnVmZmVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyJj4odGV4
dHVyZSk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlID0gdGV4dHVyZUltYWdlQnVmZmVyLm1faW1h
Z2UuZ2V0KCk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrZWRJbWFnZTsKKworICAgIGlm
IChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGNvbnN0
IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciogbWFzayA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVJbWFnZUJ1ZmZlcio+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgbWFza2VkSW1hZ2Ug
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tUZXh0dXJlLT5jb250ZW50U2l6ZSgpKTsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrQ29udGV4dCA9IG1hc2tlZEltYWdlLT5jb250ZXh0KCk7
CisgICAgICAgIG1hc2tDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBpZiAo
b3BhY2l0eSA8IDEpIHsKKyAgICAgICAgICAgIG1hc2tDb250ZXh0LT5zZXRBbHBoYShvcGFjaXR5
KTsKKyAgICAgICAgICAgIG9wYWNpdHkgPSAxOworICAgICAgICB9CisgICAgICAgIG1hc2tDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobWFzay0+bV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgSW50UG9pbnQ6Onplcm8oKSwgQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7CisgICAgICAg
IGltYWdlID0gbWFza2VkSW1hZ2UuZ2V0KCk7CisgICAgfQorCisgICAgY29udGV4dC0+c2F2ZSgp
OworICAgIGNvbnRleHQtPnNldEFscGhhKG9wYWNpdHkpOworI2lmIEVOQUJMRSgzRF9SRU5ERVJJ
TkcpCisgICAgY29udGV4dC0+Y29uY2F0M0RUcmFuc2Zvcm0obWF0cml4KTsKKyNlbHNlCisgICAg
Y29udGV4dC0+Y29uY2F0Q1RNKG1hdHJpeC50b0FmZmluZVRyYW5zZm9ybSgpKTsKKyNlbmRpZgor
ICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
dGFyZ2V0UmVjdCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCit9CisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVySW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi44NDExMjA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCkBAIC0wLDAg
KzEsNzQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcl9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlcl9oCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXIuaCIKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyIDogcHVibGljIEJpdG1hcFRleHR1cmUgewor
ICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcik7IH0KKyAgICB+Qml0bWFwVGV4dHVyZUlt
YWdlQnVmZmVyKCkgeyBkZXN0cm95KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIHsg
bV9pbWFnZS5jbGVhcigpOyB9CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlLT5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUpCisgICAgeworICAgICAgICBCaXRtYXBUZXh0dXJlOjpy
ZXNldChzaXplLCBvcGFxdWUpOworICAgICAgICBtX2ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICBpbmxpbmUgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQoKSB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS0+Y29udGV4dCgpIDogMDsgfQorICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRSZWN0JiwgUGl4ZWxGb3JtYXQpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9p
ZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCk7Citwcml2YXRlOgorICAgIEJpdG1h
cFRleHR1cmVJbWFnZUJ1ZmZlcigpIHsgfQorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFn
ZTsKK307CisKKworY2xhc3MgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyIDogcHVibGljIFRleHR1
cmVNYXBwZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBC
aXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNl
KEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpIHsgbV9jdXJyZW50U3VyZmFjZSA9IHN1cmZhY2U7fQor
ICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCkgeyBncmFwaGljc0NvbnRleHQoKS0+cmVzdG9yZSgp
OyB9CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcik7IH0KKyAgICBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSB7IHJldHVybiBCaXRtYXBUZXh0dXJl
SW1hZ2VCdWZmZXI6OmNyZWF0ZSgpOyB9CisgICAgaW5saW5lIEdyYXBoaWNzQ29udGV4dCogY3Vy
cmVudENvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudFN1cmZhY2UgPyBz
dGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIqPihtX2N1cnJlbnRTdXJmYWNlLmdl
dCgpKS0+Z3JhcGhpY3NDb250ZXh0KCkgOiBncmFwaGljc0NvbnRleHQoKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIFNvZnR3YXJlTW9kZTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiBtX2N1cnJlbnRTdXJmYWNlOworfTsKKworfQorI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBF
UikKKworI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmNwcAppbmRleCBjY2Y0OWJjLi42ODY2YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogCiBuYW1lc3BhY2UgewpAQCAt
MTU2LDEyICsxNTcsMTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWUKICAgICBpZiAoIXRleHR1
cmVNYXBwZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBBZGQgZGlyZWN0bHkg
Y29tcG9zaXRlZCBpbWFnZXMuCi0gICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IG1fY3VycmVudENv
bnRlbnQubmVlZHNEaXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXlSZWN0OworICAgIEludFJlY3QgZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCht
X2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6IG1fY3VycmVudENv
bnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CiAKICAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAw
OyB0aWxlSW5kZXggPCBtX293bmVkVGlsZXMuc2l6ZSgpOyArK3RpbGVJbmRleCkgewogICAgICAg
ICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZUluZGV4XTsKLSAgICAgICAgRmxv
YXRSZWN0IHJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgICAgIGlmICghdGlsZS50ZXh0dXJlKQogICAg
ICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwog
ICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4mIHRleHR1cmUgPSB0aWxlLnRleHR1cmU7CkBA
IC0xNjksMzEgKzE2OCw0MyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50
KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZQogCiAgICAgICAgIGlm
ICh0aWxlLm5lZWRzUmVzZXQgfHwgdGV4dHVyZS0+Y29udGVudFNpemUoKSAhPSB0aWxlU2l6ZSB8
fCAhdGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICB0aWxlLm5lZWRzUmVzZXQgPSBm
YWxzZTsKLSAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KHRpbGVTaXplLCBtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUgPyBmYWxzZSA6IG1fc3Rh
dGUuY29udGVudHNPcGFxdWUpOwotICAgICAgICAgICAgcmVjdCA9IHRpbGUucmVjdDsKKyAgICAg
ICAgICAgIHRleHR1cmUtPnJlc2V0KHRpbGVTaXplLCBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsK
KyAgICAgICAgICAgIGRpcnR5UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCkp
OwogICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdCh0aWxlLnJlY3QpOwotICAgICAgICBjb250ZW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5n
SW50UmVjdChyZWN0KSk7Ci0gICAgICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAg
Ly8gUGFpbnQgdGhlIGVudGlyZSBkaXJ0eSByZWN0IGludG8gYW4gaW1hZ2UgYnVmZmVyLiBUaGlz
IGVuc3VyZXMgd2Ugb25seSBwYWludCBvbmNlLgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGRpcnR5UmVjdC5zaXplKCkpOworICAgIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgY29u
dGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZSh0
ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgY29udGV4dC0+dHJhbnNsYXRl
KC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7CisgICAgbGF5ZXItPnBhaW50R3JhcGhp
Y3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgIGlmIChtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpCisgICAgICAgIGNv
bnRleHQtPmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IEltYWdlQnVmZmVyOjpEb250Q29weUJhY2tpbmdTdG9yZSBpbiBRdC9HVEsgcG9ydHMsIGFu
ZCB0aGVuIGNoYW5nZSB0aGlzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzc2ODkKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gaW1hZ2VCdWZm
ZXItPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKworICAgIC8vIERpdmlkZSB0aGUgaW1h
Z2UgdG8gdGlsZXMuCisgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwg
bV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKKyAgICAgICAgT3duZWRUaWxlJiB0
aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRleF07CisgICAgICAgIEludFJlY3QgdGFyZ2V0UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KTsKKyAgICAgICAgdGFyZ2V0UmVjdC5pbnRl
cnNlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRhcmdldFJl
Y3Q7CiAKLSAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMgPSBj
b250ZW50UmVjdDsKLSAgICAgICAgRmxvYXRQb2ludCBvZmZzZXQoLXRpbGUucmVjdC54KCksIC10
aWxlLnJlY3QueSgpKTsKLSAgICAgICAgY29udGVudFJlY3RJblRpbGVDb29yZGluYXRlcy5tb3Zl
KG9mZnNldC54KCksIG9mZnNldC55KCkpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KHRleHR1cmUtPmJlZ2luUGFpbnQoZW5jbG9zaW5nSW50UmVjdChj
b250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzKSkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1cmVNYXBwZXItPmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZSh0ZXh0
dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnRyYW5z
bGF0ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBzY2Fs
ZWRDb250ZW50UmVjdChjb250ZW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50Q29u
dGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKQotICAgICAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgZW5j
bG9zaW5nSW50UmVjdChzY2FsZWRDb250ZW50UmVjdCkpOwotICAgICAgICAgICAgdGV4dHVyZS0+
ZW5kUGFpbnQoKTsKLSAgICAgICAgfQorICAgICAgICAvLyBOb3JtYWxpemUgc291cmNlUmVjdCB0
byB0aGUgYnVmZmVyJ3MgY29vcmRpbmF0ZXMuCisgICAgICAgIHNvdXJjZVJlY3QubW92ZSgtZGly
dHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworCisgICAgICAgIC8vIE5vcm1hbGl6ZSB0YXJn
ZXRSZWN0IHRvIHRoZSB0ZXh0dXJlJ3MgY29vcmRpbnFhdGVzLgorICAgICAgICB0YXJnZXRSZWN0
Lm1vdmUoLXRpbGUucmVjdC54KCksIC10aWxlLnJlY3QueSgpKTsKKyAgICAgICAgdGlsZS50ZXh0
dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5nZXQoKSwgdGFyZ2V0UmVjdCwgc291cmNlUmVjdCwg
Qml0bWFwVGV4dHVyZTo6UkdCQUZvcm1hdCk7CiAgICAgfQogCiAgICAgbV9jdXJyZW50Q29udGVu
dC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKQEAgLTQ4MSw3ICs0OTIsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKQogICAgIH0K
IH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihp
bnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IHZvaWQqIGJpdHMpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50
c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBBU1NFUlQobV90
ZXh0dXJlTWFwcGVyKTsKIApAQCAtNDk4LDcgKzUwOSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSCiAgICAgaWYgKCF0aWxlLmJhY2tCdWZmZXIudGV4dHVyZSkKICAgICAgICAgdGlsZS5iYWNr
QnVmZmVyLnRleHR1cmUgPSBtX3RleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKICAgICB0
aWxlLmJhY2tCdWZmZXIudGV4dHVyZS0+cmVzZXQoc291cmNlUmVjdC5zaXplKCksIGZhbHNlKTsK
LSAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZS0+dXBkYXRlUmF3Q29udGVudHMoc291cmNlUmVj
dCwgYml0cyk7CisgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGRh
dGEsIHNvdXJjZVJlY3QpOwogICAgIHRpbGUuaXNCYWNrQnVmZmVyVXBkYXRlZCA9IHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKaW5kZXggZmU0YjE0Yy4uMjMwYzllMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmgKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRU
aWxlT3duZXJzaGlwKFRpbGVPd25lcnNoaXAgb3duZXJzaGlwKSB7IG1fc3RhdGUudGlsZU93bmVy
c2hpcCA9IG93bmVyc2hpcDsgfQogICAgIGludCBjcmVhdGVDb250ZW50c1RpbGUoZmxvYXQgc2Nh
bGUpOwogICAgIHZvaWQgcmVtb3ZlQ29udGVudHNUaWxlKGludCBpZCk7Ci0gICAgdm9pZCBzZXRD
b250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qgdm9pZCogYml0cyk7CisgICAgdm9pZCBz
ZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qgdm9pZCopOwogICAgIHZvaWQgc2V0
VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50IGlkLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIEJp
dG1hcFRleHR1cmUqKTsKICAgICB2b2lkIGNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VU
aWxlcygpOwogICAgIHZvaWQgcHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWUuY3BwCmluZGV4IGM4ZThkYWQuLjc0MTg4MjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYmZyYW1lLmNwcApAQCAtMzM2LDcgKzMzNiw2IEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0
ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEluCiAgICAgdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAg
IHRleHR1cmVNYXBwZXItPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dC0+aW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRUZXh0RHJh
d2luZ01vZGUoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkpOwotICAgIHRleHR1cmVNYXBwZXIt
PnNldFZpZXdwb3J0U2l6ZShmcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXplKCkpOwogICAg
IFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29u
c3QgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBwYWludGVyLT53b3JsZFRyYW5zZm9ybSgpOwogICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMGI4
NTRmOS4uMWJjMzkxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wMi0w
MiAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAg
IFtRdF1bVGV4bWFwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyIEFQSSB0byB1c2UgSW1hZ2VCdWZm
ZXJzIHdoZW4gcG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NzE0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4K
KworICAgICAgICBVc2UgVGV4dHVyZU1hcHBlcjo6Y3JlYXRlIGluc3RlYWQgb2YgY3JlYXRpbmcg
VGV4dHVyZU1hcHBlckdML1RleHR1cmVNYXBwZXJRdCBkaXJlY3RseS4KKworICAgICAgICAqIEFw
aS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29tcG9z
aXRlZExheWVycyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290
R3JhcGhpY3NMYXllcik6CisKIDIwMTItMDItMDEgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBG
aWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBBdm9pZCBjcmVh
dGluZyBOYW1lZE5vZGVNYXAgdW5uZWNlc3NhcmlseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDQwZTZiMTQuLjQ1ZGNmYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAK
QEAgLTI4LDEyICsyOCw4IEBACiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuaCIKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSNpbmNsdWRlICJvcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmgiCi0jZW5kaWYKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC03Niw3ICs3Miw3IEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RHcmFw
aGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikgewogICAg
ICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVy
Tm9kZUNsaWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcikpOwotICAgICAgICB0ZXh0dXJl
TWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihhZG9wdFB0cihuZXcgVGV4dHVyZU1h
cHBlclF0KSk7CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFw
cGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsKICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVD
bGllbnQtPnN5bmNSb290TGF5ZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI2Nywx
MSArMjYzLDExIEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBo
aWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQogICAgICAgICBRR3JhcGhpY3NWaWV3KiBncmFwaGljc1ZpZXcgPSB2aWV3LT5zY2VuZSgpLT52
aWV3cygpWzBdOwogICAgICAgICBpZiAoZ3JhcGhpY3NWaWV3ICYmIGdyYXBoaWNzVmlldy0+dmll
d3BvcnQoKSAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCktPmluaGVyaXRzKCJRR0xXaWRnZXQi
KSkgewotICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7CisgICAgICAgICAgICB0ZXh0dXJlTWFwcGVy
Tm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVy
ZU1hcHBlcjo6T3BlbkdMTW9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAj
ZW5kaWYKLSAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlclF0OjpjcmVhdGUoKSk7CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC5jbGVhcigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IGM1NTk4NDIuLjlkOGU2NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAor
MjAxMi0wMi0wMiAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgor
CisgICAgICAgIFtRdF1bVGV4bWFwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyIEFQSSB0byB1c2Ug
SW1hZ2VCdWZmZXJzIHdoZW4gcG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03NzE0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBS
b2JpbnNvbi4KKworICAgICAgICBVc2UgVGV4dHVyZU1hcHBlcjo6Y3JlYXRlIGluc3RlYWQgb2Yg
Y3JlYXRpbmcgVGV4dHVyZU1hcHBlckdML1RleHR1cmVNYXBwZXJRdCBkaXJlY3RseS4KKyAgICAg
ICAgUmVtb3ZlIGNhbGxzIHRvIHVudXNlZCBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
TGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVyKToKKwogMjAxMi0wMi0wMiAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIE5QQVBJIHdpbGwgbm90IHNl
bmQgbW91c2UgdXAgZXZlbnRzIHdoZW4gbW91c2UgaXMgb3V0c2lkZSBwbHVnaW4gYXJlYQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5j
cHAKaW5kZXggODk2OWJiYi4uYzdjYTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCkBAIC0yNiw4ICsyNiw3IEBACiAj
aW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNs
dWRlICJVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAj
aW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgpAQCAtMTcxLDggKzE3MCw4IEBAIExheWVyVHJl
ZUhvc3RQcm94eTo6fkxheWVyVHJlZUhvc3RQcm94eSgpCiB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBp
ZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1h
cHBlckdMOjpjcmVhdGUoKTsKLSAgICBBU1NFUlQoZHluYW1pY19jYXN0PFRleHR1cmVNYXBwZXJH
TCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSkpOworICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAgQVNT
RVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6
Ok9wZW5HTE1vZGUpOwogCiAgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKICAgICBHcmFwaGljc0xh
eWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CkBAIC0xODQsOSArMTgzLDYgQEAg
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXQKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQs
IHZpZXdwb3J0KTsKLSAgICBtX3RleHR1cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShJbnRTaXpl
KHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSkpOwogICAgIG5vZGUtPnNldFRleHR1cmVNYXBwZXIo
bV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRp
bmcoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOwpAQCAtMjExLDkgKzIw
Nyw4IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
cGFpbnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciogcGFpbnRlcikKIHsKICAgICBpZiAoIW1f
dGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlclF0
OjpjcmVhdGUoKTsKLSAgICBBU1NFUlQoZHluYW1pY19jYXN0PFRleHR1cmVNYXBwZXJRdCo+KG1f
dGV4dHVyZU1hcHBlci5nZXQoKSkpOwotCisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1
cmVNYXBwZXI6OmNyZWF0ZSgpOworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJh
dGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOwogICAgIHN5bmNSZW1v
dGVDb250ZW50KCk7CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBw
ZXJOb2RlKHJvb3RMYXllcigpKTsKIApAQCAtNDEwLDcgKzQwNSw3IEBAIHZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpjcmVhdGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFNoYXJlYWJsZUJpdG1hcCog
Yml0bWFwKQogICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2UuY29weShyZWN0KTsKICAg
ICAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVy
LT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChyZWN0LnNpemUo
KSwgIWltYWdlSGFzQWxwaGEpOwotICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRlUmF3Q29udGVu
dHMoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSksIHN1YkltYWdlLmNvbnN0
Qml0cygpKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHN1YkltYWdlLmNv
bnN0Qml0cygpLCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSk7CiAgICAg
ICAgICAgICB0aWxlZEltYWdlLmFkZChyZWN0LmxvY2F0aW9uKCksIHRleHR1cmUpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNDczLDcgKzQ2OCw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpl
bnN1cmVSb290TGF5ZXIoKQogICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6
ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCiAgICAgbV9yb290TGF5ZXIt
PnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIp
Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Cisg
ICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFw
cGVyOjpPcGVuR0xNb2RlKTsKICAgICB0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdExheWVyLmdl
dCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125346</attachid>
            <date>2012-02-03 08:59:51 -0800</date>
            <delta_ts>2012-02-03 09:08:08 -0800</delta_ts>
            <desc>Attempt at a patch that doesn&apos;t break the ARM bot</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>63613</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMDZkMGVkLi42NDdmYTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTItMDItMDIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8g
dXNlIEltYWdlQnVmZmVycyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNDgKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJ0
aW4gUm9iaW5zb24uCisKKyAgICAgICAgUmVtb3ZlZCBUZXh0dXJlTWFwcGVyUXQsIGFuZCBpbnN0
ZWFkIGNyZWF0ZWQgYSBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgY2xhc3MsCisgICAgICAgIHdo
aWNoIHJlc3BvbmRzIHRvIGFuICJTb2Z0d2FyZSIgbW9kZSBvZiBUZXh0dXJlTWFwcGVyLCBpbnN0
ZWFkIG9mIGNyZWF0aW5nIHN1YmNsYXNzZXMKKyAgICAgICAgb2YgVGV4dHVyZU1hcHBlciBkaXJl
Y3RseS4gVGhpcyBhbGxvd3MgdXNpbmcgdGhlIHNvZnR3YXJlIGZhbGxiYWNrIG9mIFRleHR1cmVN
YXBwZXIgYnkgYW55CisgICAgICAgIHNvcnQuCisKKyAgICAgICAgVG8gbWFrZSB0aGUgSW1hZ2VC
dWZmZXIgYmFja2VuZCBlYXNpZXIsIGNvbnRlbnQgdXBkYXRlcyB0byBCaXRtYXBUZXh0dXJlIGNh
biBub3cgdXNlIGVpdGhlcgorICAgICAgICBhbiBpbWFnZSwgb3IgYSByYXcgZGF0YSBwb2ludGVy
LiBUaGUgcmF3IGRhdGEgcG9pbnRlciBpcyBwcm92aWRlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29u
cywKKyAgICAgICAgYXMgY29udmVydGluZyBkYXRhIHRvL2Zyb20gSW1hZ2UgcmVmZXJlbmNlcyBp
biBRdCBnZW5lcmF0ZXMgdW5uZWNlc3NhcnkgZGVlcCBjb3BpZXMgb2YgdGhlCisgICAgICAgIGlt
YWdlIGRhdGEuCisKKyAgICAgICAgQWxzbywgZnVuY3Rpb25zIHRoYXQgdXNlIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHdlcmUgYWRkZWQgdG8gR3JhcGhpY3NDb250ZXh0LCB0byBhbGxvdyBmb3IKKyAg
ICAgICAgM0QgdHJhbnNmb3JtcyBpbiBjcm9zcyBwbGF0Zm9ybSBjb2RlLgorICAgICAgICBBZnRl
ciB0aGlzIHBhdGNoIGV2ZXJ5dGhpbmcgcmVuZGVycyB0aGUgc2FtZS4gQW4gYWRkaXRpb25hbCBi
dWcgcmVwb3J0IHdhcyBjcmVhdGVkIHRvIGFsbG93CisgICAgICAgIEltYWdlQnVmZmVyIHNoYWxs
b3cgaW1hZ2UgY29waWVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzc2ODkKKworICAgICAgICBDb3ZlcmVkIGV4dGVuc2l2ZWx5IGJ5IGV4aXN0aW5nIHRlc3RzLCBu
byBiZWhhdmlvcmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTERhdGEpOgor
ICAgICAgICAoQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJl
c2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c3dpenpsZUJHUkFU
b1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChU
ZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjphY2Nl
bGVyYXRpb25Nb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0M0RUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXQzRFRyYW5zZm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpCaXRtYXBUZXh0dXJlKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YnBwKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmU6OmlzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXI6OnNldEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
OjpncmFwaGljc0NvbnRleHQpOgorICAgICAgICAoVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6OnBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyTm9kZSk6CisKIDIwMTItMDItMDIgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxMDY1NjYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBjZmVkZmYyLi5l
OTg0NzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU3MzIsOSArNTczMiwx
MSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwIFwKKyAgICAg
ICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJ
bWFnZUJ1ZmZlci5oIFwKKyAgICAgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKKyAgICAgICAgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmgKQEAgLTU3NTIs
OCArNTc1NCwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmggXAorICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCBcCisgICAgICAgIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuaCBcCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAorICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIHdl
YmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vVGV4dHVyZU1hcHBlckdMQ2Fpcm8uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGZjNmY2ZTYu
LmE3ZTUzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzkzOSwxOSArMzkzOSwxOSBAQCB3aW4zMjohd2lu
MzItZysrKjpjb250YWlucyhRTUFLRV9IT1NULmFyY2gsIHg4Nl82NCk6ewogCiBjb250YWlucyhD
T05GSUcsIHRleG1hcCkgewogICAgIEhFQURFUlMgKz0gXAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIAogICAgIFNPVVJDRVMg
Kz0gXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIFwK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZm
ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5jcHAKIApAQCAtMzk1OSw2ICszOTU5LDcgQEAgY29udGFpbnMoQ09ORklH
LCB0ZXhtYXApIHsKICAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmgKICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAogICAgICAgICBDT05GSUcgKz0gb3BlbmdsLXNoaW1z
CisgICAgICAgIERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJFX01BUFBFUl9HTAogICAgIH0KIH0g
ZWxzZSB7CiAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVy
UXQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDEwMWM4N2YuLjFjZDU2YmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM1ODAsNiArMzU4MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFn
ZUJ1ZmZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlck5vZGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkZWE5NTBiLi5mN2Jl
ZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaApAQCAtMTI0LDYgKzEyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBLVVJMOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRS
dW47CisgICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKICAgICBlbnVtIFRleHREcmF3
aW5nTW9kZSB7CiAgICAgICAgIFRleHRNb2RlSW52aXNpYmxlID0gMCwKQEAgLTQwOSw2ICs0MTAs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0Owog
CisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAg
ICAvLyBUaGlzIGlzIG5lZWRlZCB3aGVuIHVzaW5nIGFjY2VsZXJhdGVkLWNvbXBvc2l0aW5nIGlu
IHNvZnR3YXJlIG1vZGUsIGxpa2UgaW4gVGV4dHVyZU1hcHBlci4KKyAgICAgICAgdm9pZCBjb25j
YXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgICAgICB2b2lk
IHNldDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGdldDNEVHJhbnNmb3JtKCkgY29uc3Q7CisjZW5kaWYKICAgICAg
ICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhpcyBjb250ZXh0
LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24KICAgICAgICAgLy8gZm9yIGRyYXdpbmcgaW50byB0
aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgICAgICBQYXNzT3duUHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEludFNpemUmKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Rl
eHR1cmVNYXBwZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwCmluZGV4IDYxZDhiMjAuLmU3Mjk1MTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBw
ZXJDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcApAQCAtMTE1LDExICsxMTUsNiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJDYWlybzo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29u
c3QgRmxvYXRSZQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
LXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJDYWlybyk7Ci19Ci0KIFBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckNhaXJvOjpjcmVhdGVUZXh0dXJl
KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVDYWlybygpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZGRmZjYwNS4uNTg3MjkzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJHTC5jcHAKQEAgLTI2NSw1NyArMjY1LDYgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEg
ewogCiAgICAgfTsKIAotICAgIHN0cnVjdCBEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRv
cnkgewotICAgICAgICBzdHJ1Y3QgRW50cnkgewotICAgICAgICAgICAgR0x1aW50IHRleHR1cmU7
Ci0gICAgICAgICAgICBpbnQgcmVmQ291bnQ7Ci0gICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxJbWFnZVVJRCwgRW50cnk+IEltYWdlVGV4dHVyZU1hcDsKLSAgICAgICAgSW1hZ2VU
ZXh0dXJlTWFwIGltYWdlVG9UZXh0dXJlOwotCi0gICAgICAgIEdMdWludCBmaW5kT3JDcmVhdGUo
SW1hZ2VVSUQgaW1hZ2UsIGJvb2wmIGZvdW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbWFn
ZVRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0g
ICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9U
ZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOwot
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQt
PnNlY29uZC50ZXh0dXJlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRW50cnkgZW50cnk7
Ci0gICAgICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOwot
ICAgICAgICAgICAgZW50cnkucmVmQ291bnQgPSAxOwotICAgICAgICAgICAgaW1hZ2VUb1RleHR1
cmUuYWRkKGltYWdlLCBlbnRyeSk7Ci0gICAgICAgICAgICByZXR1cm4gZW50cnkudGV4dHVyZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgZGVyZWYoSW1hZ2VVSUQgaW1hZ2UpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEhhc2hNYXA8SW1hZ2VVSUQsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBp
bWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBpbWFnZVRv
VGV4dHVyZS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnJlZkNvdW50
IDwgMikgewotICAgICAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkoKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICB+RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChJbWFnZVRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gaW1h
Z2VUb1RleHR1cmUuYmVnaW4oKTsgaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVyZTsKLSAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgICAgICAgICAgICAgR0xfQ01EKGds
RGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9
Ci0gICAgfSBkaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0KICAgICBTaGFyZWRHTERhdGEmIHNo
YXJlZEdMRGF0YSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdMRGF0
YS5nZXQoKSk7CkBAIC0zMzIsNiArMjgxLDcgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEg
ewogICAgIGludCBjdXJyZW50UHJvZ3JhbTsKICAgICBHTGludCBwcmV2aW91c1Byb2dyYW07CiAg
ICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7CisgICAgR0xpbnQgdmlld3BvcnRbNF07CiAg
ICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4gbV9zaGFyZWRHTERhdGE7CiB9OwogCkBAIC0zNDIsNTYg
KzI5MiwyNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKICAgICB2
b2lkIGJpbmQoKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBh
aW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIH5C
aXRtYXBUZXh0dXJlR0woKSB7IGRlc3Ryb3koKTsgfQogICAgIHZpcnR1YWwgdWludDMyX3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBtX29wYXF1ZTsgfQogICAgIGlubGluZSBGbG9hdFNpemUgcmVsYXRpdmVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVNpemU7IH0KICAgICB2b2lkIHNldFRleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4bWFw
OyB9Ci0KLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0
Jiwgdm9pZCopOwotICAgIHZvaWQgdXBkYXRlUmF3Q29udGVudHMoY29uc3QgSW50UmVjdCYsIGNv
bnN0IHZvaWQqKTsKLSAgICB2b2lkIHBhY2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBj
dXJyZW50bHkgYSBzdHViLgotICAgICAgICBpZiAoaXNQYWNrZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9pc1BhY2tlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCB1bnBh
Y2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYSBzdHViLgotICAgICAg
ICBpZiAoIWlzUGFja2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNQYWNr
ZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGlzUGFja2VkKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2lzUGFja2VkOwotICAgIH0KKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRz
KEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7Cisg
ICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYpOwogCiBw
cml2YXRlOgogICAgIEdMdWludCBtX2lkOwotICAgIEltYWdlVUlEIG1faW1hZ2VVSUQ7CiAgICAg
RmxvYXRTaXplIG1fcmVsYXRpdmVTaXplOwotICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgSW50U2l6
ZSBtX3RleHR1cmVTaXplOwotICAgIE93blB0cjxCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4g
bV9idWZmZXI7CiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKICAgICBHTHVpbnQgbV9mYm87CiAg
ICAgR0x1aW50IG1fcmJvOwogICAgIEludFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9z
dXJmYWNlTmVlZHNSZXNldDsKLSAgICBib29sIG1faXNQYWNrZWQ7CiAgICAgVGV4dHVyZU1hcHBl
ckdMKiBtX3RleHR1cmVNYXBwZXI7CiAgICAgQml0bWFwVGV4dHVyZUdMKCkKICAgICAgICAgOiBt
X2lkKDApCi0gICAgICAgICwgbV9pbWFnZVVJRCgwKQotICAgICAgICAsIG1fb3BhcXVlKGZhbHNl
KQogICAgICAgICAsIG1fZmJvKDApCiAgICAgICAgICwgbV9yYm8oMCkKICAgICAgICAgLCBtX3N1
cmZhY2VOZWVkc1Jlc2V0KHRydWUpCkBAIC01NDQsNiArNDYzLDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luUGFpbnRpbmcoKQogI2VuZGlmCiAgICAgZ2xDbGVhclN0ZW5jaWwoMCk7CiAg
ICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIGdsR2V0SW50ZWdlcnYoR0xf
VklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCk7CiAgICAgYmluZFN1cmZhY2UoMCk7CiB9CiAKQEAg
LTY2Myw3ICs1ODMsNiBAQCBzdGF0aWMgdm9pZCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHNpemVf
dCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChjb25z
dCBJbnRTaXplJiBuZXdTaXplLCBib29sIG9wYXF1ZSkKIHsKICAgICBCaXRtYXBUZXh0dXJlOjpy
ZXNldChuZXdTaXplLCBvcGFxdWUpOwotICAgIG1faW1hZ2VVSUQgPSAwOwogICAgIEludFNpemUg
bmV3VGV4dHVyZVNpemUgPSBuZXh0UG93ZXJPZlR3byhuZXdTaXplKTsKICAgICBib29sIGp1c3RD
cmVhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFtX2lkKSB7CkBAIC02ODIsMjggKzYwMSwxMCBAQCB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgYm9vbCBv
cGFxdWUpCiAgICAgfQogICAgIG1fYWN0dWFsU2l6ZSA9IG5ld1NpemU7CiAgICAgbV9yZWxhdGl2
ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3U2l6ZS53aWR0aCgpKSAvIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWlnaHQoKSkgLyBtX3RleHR1cmVTaXplLmhlaWdodCgp
KTsKLSAgICBtX29wYXF1ZSA9IG9wYXF1ZTsKICAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1
ZTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVHTDo6YmVnaW5Q
YWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9idWZmZXIgPSBCR1JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBkaXJ0eVJl
Y3Q7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLT5iZWdpblBhaW50KGRpcnR5UmVjdCwgbV9vcGFxdWUp
OwotfQogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6ZW5kUGFpbnQoKQotewotICAgIGlmICghbV9i
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2J1ZmZlci0+ZW5kUGFpbnQoKTsKLSAgICB1
cGRhdGVDb250ZW50cyhCR1JBRm9ybWF0LCBtX2RpcnR5UmVjdCwgbV9idWZmZXItPmRhdGEoKSk7
Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgbV9i
dWZmZXIuY2xlYXIoKTsKLX0KLQotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgogc3RhdGljIHZv
aWQgc3dpenpsZUJHUkFUb1JHQkEodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpAQCAtNzE0LDc5ICs2MTUsMzEgQEAg
c3RhdGljIHZvaWQgc3dpenpsZUJHUkFUb1JHQkEodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgICAgICAgICBwW3hdID0gKChwW3hdIDw8IDE2KSAmIDB4ZmYwMDAwKSB8
ICgocFt4XSA+PiAxNikgJiAweGZmKSB8IChwW3hdICYgMHhmZjAwZmYwMCk7CiAgICAgfQogfQot
I2VuZGlmCiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1h
dCBwaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgdm9pZCogYml0cykKK3ZvaWQgQml0
bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0KQogewogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1faWQpKQotI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIGJvb2wgc2hvdWxkU3dp
enpsZSA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBHTGludCBnbEZvcm1hdCA9IEdMX1JHQkE7Ci0g
ICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgewotICAgIGNhc2UgUkdCQUZvcm1hdDoKLSAgICAgICAg
Z2xGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJHQkZvcm1hdDoK
LSAgICAgICAgZ2xGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkdS
QUZvcm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICAgICAgc2hvdWxkU3dpenps
ZSA9IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKLSNlbHNlCi0gICAgICAgIGds
Rm9ybWF0ID0gR0xfQkdSQTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJHUkZv
cm1hdDoKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICAgICAgc2hvdWxkU3dpenpsZSA9
IHRydWU7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCOwotI2Vsc2UKLSAgICAgICAgZ2xGb3Jt
YXQgPSBHTF9CR1I7Ci0jZW5kaWYKLSAgICAgICAgIGJyZWFrOwotICAgIH0KLQotI2lmZGVmIFRF
WE1BUF9PUEVOR0xfRVNfMgotICAgIGlmIChzaG91bGRTd2l6emxlKQotICAgICAgICBzd2l6emxl
QkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50MzJfdCo+KGJpdHMpLCByZWN0LnNpemUoKSk7Ci0j
ZW5kaWYKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xf
VU5TSUdORURfQllURSwgYml0cykpCisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgZGF0
YSkpCiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVSYXdDb250ZW50cyhjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCB2b2lkKiBiaXRzKQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVw
ZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0
KQogeworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKICAgICBHTF9DTUQoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKICAgICBHTHVpbnQgZ2xGb3JtYXQgPSBpc09w
YXF1ZSgpID8gR0xfUkdCIDogR0xfUkdCQTsKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgYml0cykpCi19Ci0KLXZvaWQgQml0
bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIElt
YWdlVUlEIHVpZCA9IGltYWdlID8gdWlkRm9ySW1hZ2UoaW1hZ2UpIDogMDsKLSAgICBpZiAoIWlt
YWdlIHx8ICF1aWQpIHsKLSAgICAgICAgaWYgKG1faW1hZ2VVSUQpCi0gICAgICAgICAgICBkZXN0
cm95KCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWVJbWFnZSkKICAgICAgICAgcmV0dXJu
OwotICAgIH0KIAotICAgIGlmICh1aWQgPT0gbV9pbWFnZVVJRCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0
dXJlTWFwcGVyLT5kYXRhKCkuZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZSh1
aWQsIGZvdW5kKTsKLSAgICBpZiAobmV3VGV4dHVyZUlEICE9IG1faWQpIHsKLSAgICAgICAgbV9p
bWFnZVVJRCA9IHVpZDsKLSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICBtX2lkID0gbmV3VGV4
dHVyZUlEOwotICAgICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlm
ICghZm91bmQpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGJlZ2luUGFp
bnQoSW50UmVjdCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVp
Z2h0KCkpKSk7Ci0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCksIENvbXBvc2l0ZUNvcHkpOwotICAgICAgICAgICAg
ZW5kUGFpbnQoKTsKLSAgICAgICAgfQotICAgIH0KKyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1h
Z2UgcXRJbWFnZSA9IGZyYW1lSW1hZ2UtPnRvSW1hZ2UoKTsKKyAgICBpZiAoSW50U2l6ZShxdElt
YWdlLnNpemUoKSkgIT0gc291cmNlUmVjdC5zaXplKCkpCisgICAgICAgIHF0SW1hZ2UgPSBxdElt
YWdlLmNvcHkoc291cmNlUmVjdCk7CisgICAgaWYgKGZvcm1hdCA9PSBCR1JBRm9ybWF0IHx8IGZv
cm1hdCA9PSBCR1JGb3JtYXQpCisgICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihxdEltYWdlLmJpdHMoKSksIHF0SW1hZ2Uuc2l6ZSgpKTsKKyAgICBH
TF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0
YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBn
bEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgcXRJbWFnZS5jb25zdEJpdHMoKSkpCisjZW5kaWYK
IH0KIAogc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9u
TWF0cml4KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkKQEAgLTgzNyw3ICs2OTAsNyBA
QCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6YmluZCgpCiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpk
ZXN0cm95KCkKIHsKLSAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2VVSUQgfHwgIW1fdGV4dHVyZU1h
cHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5kZXJlZihtX2ltYWdlVUlEKSkp
CisgICAgaWYgKG1faWQpCiAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lk
KSkKIAogICAgIGlmIChtX2ZibykKQEAgLTg3MiwxMiArNzI1LDEzIEBAIHZvaWQgVGV4dHVyZU1h
cHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKICAgICBC
aXRtYXBUZXh0dXJlR0wqIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihz
dXJmYWNlUG9pbnRlcik7CiAKICAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgSW50U2l6ZSB2
aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pOwogICAg
ICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApKQotICAgICAg
ICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgodmlld3Bv
cnRTaXplKCksIHRydWUpLm11bHRpcGx5KHRyYW5zZm9ybSgpKTsKKyAgICAgICAgZGF0YSgpLnBy
b2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZpZXdwb3J0U2l6ZSwgdHJ1
ZSk7CiAgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKGRhdGEoKS5zaGFyZWRHTERhdGEoKS5z
dGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIGRhdGEoKS5zaGFyZWRHTERh
dGEoKS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4
IC0gMSkpCiAgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9L
RUVQKSkKLSAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmlld3BvcnRTaXplKCkud2lk
dGgoKSwgdmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpKQotICAgICAgICBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuY2xpcFN0YWNrLmFwcGVuZChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHZpZXdwb3J0
U2l6ZSgpKSk7CisgICAgICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53
aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKQorICAgICAgICBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuY2xpcFN0YWNrLmFwcGVuZChJbnRSZWN0KGRhdGEoKS52aWV3cG9ydFswXSwgZGF0YSgp
LnZpZXdwb3J0WzFdLCBkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05ODUsNCArODM5LDkgQEAgUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKQogICAgIHJldHVy
biBhZG9wdFJlZih0ZXh0dXJlKTsKIH0KIAorUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0
dXJlTWFwcGVyOjpwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCkKK3sKKyAgICByZXR1cm4gVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKK30KKwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAx
YjQxMTg1Li4wOGZhMGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC00MywxNiArNDMsMTcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBi
b29sIG9wYXF1ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSwgYm9vbCBmbGlwKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblBhaW50aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCk7CiAgICAg
dmlydHVhbCB2b2lkIGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9y
Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5
cGUoKSBjb25zdDsKICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgdm9pZCBi
ZWdpblBhaW50aW5nKCk7Ci0gICAgdm9pZCBlbmRQYWludGluZygpOwogICAgIHZvaWQgc2V0R3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250
ZXh0OyB9CiAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBt
X2NvbnRleHQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNPcGVuR0xCYWNrZWQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdm9pZCBwbGF0Zm9ybVVwZGF0ZUNvbnRlbnRzKE5hdGl2ZUltYWdl
UHRyLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVs
Rm9ybWF0KTsKKyAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIE9wZW5HTE1vZGU7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGJlZ2lu
U2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3Qm
KTsKQEAgLTY0LDE2ICs2NSw2IEBAIHByaXZhdGU6CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4gYnVm
ZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJlLgotY2xhc3MgQkdSQTMyUHJlbXVsdGltcGxp
ZWRCdWZmZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZp
cnR1YWwgfkJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKCkgeyB9Ci0gICAgdmlydHVhbCBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qs
IGJvb2wgb3BhcXVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCogZGF0YSgpID0gMDsKLSAgICBzdGF0aWMgUGFzc093blB0cjxCR1JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7Ci19OwotCiBzdGF0aWMgaW5saW5lIGludCBu
ZXh0UG93ZXJPZlR3byhpbnQgbnVtKQogewogICAgIGZvciAoaW50IGkgPSAweDEwMDAwMDAwOyBp
ID4gMDsgaSA+Pj0gMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA0OTViY2FkLi42NmJj
NzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyCiB7CiAgICAgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0
b3JlQ29udGV4dCgpOwogCi0gICAgaWYgKHRleHR1cmVNYXBwZXItPmlzT3BlbkdMQmFja2VkKCkp
IHsKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVN
YXBwZXI6Ok9wZW5HTE1vZGUpIHsKICAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9
IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpOwogICAgICAgICB0
ZXhtYXBHTC0+ZHJhd1RleHR1cmUobV9jb250ZXh0LT5tX3RleHR1cmUsICFtX2NvbnRleHQtPm1f
YXR0cnMuYWxwaGEsIEZsb2F0U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5
LCBtYXNrLCB0cnVlIC8qIGZsaXAgKi8pOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5j
cHAKaW5kZXggZWM3M2MzZmUuLjkwMDc5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTEzMzUs
NiArMTMzNSwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIG1fZGF0YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0
cmFuc2Zvcm0pOwogfQogCisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXQzRFRyYW5z
Zm9ybSgpIGNvbnN0Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisKKyAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0
KCktPmNvbWJpbmVkVHJhbnNmb3JtKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0
YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0sIHRydWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCBmYWxz
ZSk7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29u
c3QgS1VSTCYsIGNvbnN0IEludFJlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVy
UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBl
clF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2NDFjZS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclF0LmgiCi0KLSNpbmNsdWRlIDxRdENvcmUvcWRlYnVnLmg+Ci0jaW5jbHVkZSA8UXRH
dWkvcXBhaW50ZW5naW5lLmg+Ci0jaW5jbHVkZSA8UXRHdWkvcXBpeG1hcC5oPgotCi0jaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQotIyBpbmNsdWRlICJvcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEJpdG1hcFRleHR1cmVRdDo6
ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fcGl4bWFwLnBhaW50aW5nQWN0aXZlKCkpCi0gICAgICAg
IHFGYXRhbCgiRGVzdHJveWluZyBhbiBhY3RpdmUgcGl4bWFwIik7Ci0gICAgbV9waXhtYXAgPSBR
UGl4bWFwKCk7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpyZXNldChjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIGlzT3BhcXVlKQotewotICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHNpemUs
IGlzT3BhcXVlKTsKLQotICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3BpeG1hcC5zaXplKCkud2lk
dGgoKSB8fCBzaXplLmhlaWdodCgpID4gbV9waXhtYXAuc2l6ZSgpLmhlaWdodCgpIHx8IG1fcGl4
bWFwLmlzTnVsbCgpKQotICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKLSAgICBpZiAoIWlzT3BhcXVlKQotICAgICAgICBtX3BpeG1hcC5maWxs
KFF0Ojp0cmFuc3BhcmVudCk7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBU
ZXh0dXJlUXQ6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIG1f
cGFpbnRlci5iZWdpbigmbV9waXhtYXApOwotICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6
ZSgmbV9wYWludGVyKTsKLSAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOwotICAgIG1fcGFpbnRlci5maWxsUmVjdChRUmVjdChk
aXJ0eVJlY3QpLCBRdDo6dHJhbnNwYXJlbnQpOwotICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlv
bk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKLSAgICByZXR1cm4g
Jm1fcGFpbnRlcjsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmVuZFBhaW50KCkKLXsKLSAg
ICBtX3BhaW50ZXIuZW5kKCk7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0Ojp1cGRhdGVDb250
ZW50cyhQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgdm9pZCog
Yml0cykKLXsKLSAgICBtX3BhaW50ZXIuYmVnaW4oJm1fcGl4bWFwKTsKLSAgICBRSW1hZ2U6OkZv
cm1hdCBxdEZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOwotICAg
IGlmIChwaXhlbEZvcm1hdCA9PSBCR1JGb3JtYXQgfHwgcGl4ZWxGb3JtYXQgPT0gUkdCRm9ybWF0
KQotICAgICAgICBxdEZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOwotICAgIFFJbWFnZSBp
bWFnZShzdGF0aWNfY2FzdDx1Y2hhcio+KGJpdHMpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCksIHF0Rm9ybWF0KTsKLSAgICBpZiAocGl4ZWxGb3JtYXQgPT0gQkdSRm9ybWF0IHx8IHBpeGVs
Rm9ybWF0ID09IEJHUkFGb3JtYXQpCi0gICAgICAgIGltYWdlID0gaW1hZ2UucmdiU3dhcHBlZCgp
OwotICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9u
TW9kZV9Tb3VyY2UpOwotICAgIG1fcGFpbnRlci5kcmF3SW1hZ2UocmVjdCwgaW1hZ2UpOwotICAg
IG1fcGFpbnRlci5lbmQoKTsKLX0KLQotYm9vbCBCaXRtYXBUZXh0dXJlUXQ6OnNhdmUoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBtX3BpeG1hcC5zYXZlKHBhdGgsICJQTkciKTsK
LX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1h
Z2UpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFFQaXht
YXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlm
ICghcGl4bWFwKQotICAgICAgICByZXR1cm47Ci0gICAgQml0bWFwVGV4dHVyZTo6cmVzZXQocGl4
bWFwLT5zaXplKCksICFwaXhtYXAtPmhhc0FscGhhQ2hhbm5lbCgpKTsKLSAgICBtX3BpeG1hcCA9
ICpwaXhtYXA7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0OjpwYWNrKCkKLXsKLSAgICBpZiAo
bV9waXhtYXAuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW1hZ2UgPSBtX3Bp
eG1hcC50b0ltYWdlKCk7Ci0gICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7Ci0gICAgbV9pc1BhY2tl
ZCA9IHRydWU7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZVF0Ojp1bnBhY2soKQotewotICAgIG1f
aXNQYWNrZWQgPSBmYWxzZTsKLSAgICBpZiAobV9pbWFnZS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9waXhtYXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UobV9pbWFnZSk7Ci0gICAg
bV9pbWFnZSA9IFFJbWFnZSgpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjdXJyZW50UGFpbnRlcigpOwotICAgICBw
YWludGVyLT5zYXZlKCk7Ci0gICAgIFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50ZXIt
PnRyYW5zZm9ybSgpOwotICAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4LCBmYWxzZSk7
Ci0gICAgIHBhaW50ZXItPnNldENsaXBSZWN0KHJlY3QpOwotICAgICBwYWludGVyLT5zZXRUcmFu
c2Zvcm0ocHJldlRyYW5zZm9ybSwgZmFsc2UpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6
ZW5kQ2xpcCgpCi17Ci0gICAgY3VycmVudFBhaW50ZXIoKS0+cmVzdG9yZSgpOwotfQotCi1JbnRT
aXplIFRleHR1cmVNYXBwZXJRdDo6dmlld3BvcnRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SW50U2l6ZShtX3BhaW50ZXItPmRldmljZSgpLT53aWR0aCgpLCBtX3BhaW50ZXItPmRldmljZSgp
LT5oZWlnaHQoKSk7Ci19Ci0KLQotVGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoKQot
ICAgIDogbV9jdXJyZW50U3VyZmFjZSgwKQotewotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6
c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBtX2Nv
bnRleHQgPSBjb250ZXh0OwotICAgIG1fcGFpbnRlciA9IGNvbnRleHQgPyBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSA6IDA7Ci0gICAgaW5pdGlhbGl6ZShtX3BhaW50ZXIpOwotfQotCi1HcmFw
aGljc0NvbnRleHQqIFRleHR1cmVNYXBwZXJRdDo6Z3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2Uo
Qml0bWFwVGV4dHVyZSogc3VyZmFjZSkKLXsKLSAgICBpZiAobV9jdXJyZW50U3VyZmFjZSA9PSBz
dXJmYWNlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fY3VycmVudFN1cmZhY2UpCi0gICAg
ICAgIG1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlci5lbmQoKTsKLSAgICBpZiAoIXN1cmZhY2Up
IHsKLSAgICAgICAgbV9jdXJyZW50U3VyZmFjZSA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgQml0bWFwVGV4dHVyZVF0KiBzdXJmYWNlUXQgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0
dXJlUXQqPihzdXJmYWNlKTsKLSAgICBpZiAoIXN1cmZhY2VRdC0+bV9wYWludGVyLmlzQWN0aXZl
KCkpCi0gICAgICAgIHN1cmZhY2VRdC0+bV9wYWludGVyLmJlZ2luKCZzdXJmYWNlUXQtPm1fcGl4
bWFwKTsKLSAgICBtX2N1cnJlbnRTdXJmYWNlID0gc3VyZmFjZVF0OwotfQotCi0KLXZvaWQgVGV4
dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQot
ewotICAgIGNvbnN0IEJpdG1hcFRleHR1cmVRdCYgdGV4dHVyZVF0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQml0bWFwVGV4dHVyZVF0Jj4odGV4dHVyZSk7Ci0gICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBt
X3BhaW50ZXI7Ci0gICAgUVBpeG1hcCBwaXhtYXAgPSB0ZXh0dXJlUXQubV9waXhtYXA7Ci0gICAg
aWYgKG1fY3VycmVudFN1cmZhY2UpCi0gICAgICAgIHBhaW50ZXIgPSAmbV9jdXJyZW50U3VyZmFj
ZS0+bV9wYWludGVyOwotCi0gICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZVF0KiBtYXNrID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQml0bWFwVGV4dHVyZVF0Kj4obWFza1RleHR1cmUpOwotICAgICAgICBRUGl4bWFw
IGludGVybWVkaWF0ZVBpeG1hcChwaXhtYXAuc2l6ZSgpKTsKLSAgICAgICAgaW50ZXJtZWRpYXRl
UGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50ZXIgbWFza1BhaW50
ZXIoJmludGVybWVkaWF0ZVBpeG1hcCk7Ci0gICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0
aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgIG1hc2tQ
YWludGVyLmRyYXdQaXhtYXAoMCwgMCwgcGl4bWFwKTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0
Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7
Ci0gICAgICAgIG1hc2tQYWludGVyLmRyYXdQaXhtYXAoUVJlY3QoMCwgMCwgcGl4bWFwLndpZHRo
KCksIHBpeG1hcC5oZWlnaHQoKSksIG1hc2stPm1fcGl4bWFwLCBtYXNrLT5zb3VyY2VSZWN0KCkp
OwotICAgICAgICBtYXNrUGFpbnRlci5lbmQoKTsKLSAgICAgICAgcGl4bWFwID0gaW50ZXJtZWRp
YXRlUGl4bWFwOwotICAgIH0KLQotICAgIGNvbnN0IHFyZWFsIHByZXZPcGFjaXR5ID0gcGFpbnRl
ci0+b3BhY2l0eSgpOwotICAgIGNvbnN0IFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50
ZXItPnRyYW5zZm9ybSgpOwotICAgIHBhaW50ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAg
cGFpbnRlci0+c2V0VHJhbnNmb3JtKG1hdHJpeCwgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+ZHJhd1Bp
eG1hcCh0YXJnZXRSZWN0LCBwaXhtYXAsIEZsb2F0UmVjdCh0ZXh0dXJlUXQuc291cmNlUmVjdCgp
KSk7Ci0gICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0pOwotICAgIHBhaW50
ZXItPnNldE9wYWNpdHkocHJldk9wYWNpdHkpOwotfQotCi1QYXNzT3duUHRyPFRleHR1cmVNYXBw
ZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0j
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5wYWludEVuZ2luZSgpLT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpP
cGVuR0wyKQotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJRdCk7Ci19Ci0KLVBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlclF0OjpjcmVhdGVUZXh0dXJlKCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVRdCgpKTsKLX0KLQotQml0
bWFwVGV4dHVyZVF0OjpCaXRtYXBUZXh0dXJlUXQoKQotICAgIDogbV9pc1BhY2tlZChmYWxzZSkK
LXsKLQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5QYWludGluZygpCi17Ci0gICAg
bV9wYWludGVyLT5zYXZlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclF0OjplbmRQYWludGlu
ZygpCi17Ci0gICAgbV9wYWludGVyLT5yZXN0b3JlKCk7Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCi1jbGFzcyBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlclF0IDogcHVibGljIEJH
UkEzMlByZW11bHRpbXBsaWVkQnVmZmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgb3Bh
cXVlKQotICAgIHsKLSAgICAgICAgLy8gbV9pbWFnZSBpcyBvbmx5IHVzaW5nIGR1cmluZyBwYWlu
dCwgaXQncyBzYWZlIHRvIG92ZXJyaWRlIGl0LgotICAgICAgICBtX2ltYWdlID0gUUltYWdlKHJl
Y3Quc2l6ZSgpLndpZHRoKCksIHJlY3Quc2l6ZSgpLmhlaWdodCgpLCBvcGFxdWUgPyBRSW1hZ2U6
OkZvcm1hdF9SR0IzMiA6IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAg
ICAgICAgaWYgKCFvcGFxdWUpCi0gICAgICAgICAgICBtX2ltYWdlLmZpbGwoMCk7Ci0gICAgICAg
IG1fcGFpbnRlci5iZWdpbigmbV9pbWFnZSk7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJRdDo6aW5p
dGlhbGl6ZSgmbV9wYWludGVyKTsKLSAgICAgICAgbV9wYWludGVyLnRyYW5zbGF0ZSgtcmVjdC54
KCksIC1yZWN0LnkoKSk7Ci0gICAgICAgIHJldHVybiAmbV9wYWludGVyOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBlbmRQYWludCgpIHsgbV9wYWludGVyLmVuZCgpOyB9Ci0gICAgdmlydHVh
bCB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9pbWFnZS5iaXRzKCk7IH0KLQotcHJpdmF0ZToKLSAg
ICBRUGFpbnRlciBtX3BhaW50ZXI7Ci0gICAgUUltYWdlIG1faW1hZ2U7Ci19OwotCi1QYXNzT3du
UHRyPEJHUkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZl
cjo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJHUkEzMlByZW11bHRpbXBs
aWVkQnVmZmVyUXQoKSk7Ci19Ci0KLXVpbnQ2NF90IHVpZEZvckltYWdlKEltYWdlKiBpbWFnZSkK
LXsKLSAgICByZXR1cm4gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPnNlcmlh
bE51bWJlcigpOwotfQotI2VuZGlmCi19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDhmZWUwMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAg
QEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAidGV4
bWFwL1RleHR1cmVNYXBwZXIuaCIKLQotI2lmbmRlZiBUZXh0dXJlTWFwcGVyUXRfaAotI2RlZmlu
ZSBUZXh0dXJlTWFwcGVyUXRfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1h
cFRleHR1cmVRdCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4
dHVyZU1hcHBlclF0OwotcHVibGljOgotICAgIEJpdG1hcFRleHR1cmVRdCgpOwotICAgIH5CaXRt
YXBUZXh0dXJlUXQoKSB7IGRlc3Ryb3koKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fcGl4
bWFwLndpZHRoKCksIG1fcGl4bWFwLmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXNl
dChjb25zdCBJbnRTaXplJiwgYm9vbCBvcGFxdWUpOwotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2
aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKik7Ci0gICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJiBwYXRoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BpeG1hcC5pc051
bGwoKSB8fCAhbV9pbWFnZS5pc051bGwoKTsgfQotICAgIEludFJlY3Qgc291cmNlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIEludFJlY3QoMCwgMCwgY29udGVudFNpemUoKS53aWR0aCgpLCBjb250ZW50
U2l6ZSgpLmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWNrKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHVucGFjaygpOwotICAgIHZpcnR1YWwgYm9vbCBpc1BhY2tlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNQYWNrZWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxG
b3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKTsKLQotICAgIFFQYWludGVyKiBwYWlu
dGVyKCkgeyByZXR1cm4gJm1fcGFpbnRlcjsgfQotCi1wcml2YXRlOgotICAgIFFQYWludGVyIG1f
cGFpbnRlcjsKLSAgICBRUGl4bWFwIG1fcGl4bWFwOwotICAgIFFJbWFnZSBtX2ltYWdlOwotICAg
IGJvb2wgbV9pc1BhY2tlZDsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJRdCA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyIHsKLXB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyUXQoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJl
Z2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNz
Q29udGV4dChHcmFwaGljc0NvbnRleHQqKTsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3Qo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCBJbnRTaXplIHZpZXdwb3J0U2l6
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGVuZFBhaW50aW5nKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFFQYWlu
dGVyKiBwYWludGVyKQotICAgIHsKLSAgICAgICAgaWYgKHBhaW50ZXIpCi0gICAgICAgICAgICBw
YWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nIHwgUVBhaW50ZXI6
OlNtb290aFBpeG1hcFRyYW5zZm9ybSwgZmFsc2UpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0
dXJlTWFwcGVyUXQpOyB9Ci1wcml2YXRlOgotICAgIGlubGluZSBRUGFpbnRlciogY3VycmVudFBh
aW50ZXIoKSB7IHJldHVybiBtX2N1cnJlbnRTdXJmYWNlID8gbV9jdXJyZW50U3VyZmFjZS0+cGFp
bnRlcigpIDogbV9wYWludGVyOyB9Ci0KLSAgICBRUGFpbnRlciogbV9wYWludGVyOwotICAgIEdy
YXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlUXQ+IG1f
Y3VycmVudFN1cmZhY2U7Ci19OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAppbmRleCBk
ZDMzZjBkLi41ZTUyOGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCkBAIC0yMCw2ICsyMCw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgiCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNzEsNSArNzMsMTMgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVy
OjphY3F1aXJlVGV4dHVyZUZyb21Qb29sKGNvbnN0IEludFNpemUmIHMKICAgICByZXR1cm4gc2Vs
ZWN0ZWRUZXh0dXJlOwogfQogCisKK1Bhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1h
cHBlcjo6Y3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBT
b2Z0d2FyZU1vZGUpCisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmNy
ZWF0ZSgpOworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZUFjY2VsZXJhdGVkKCk7Cit9CisKIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggZDY2ZmUyZi4uOGUyZTlmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oCkBAIC00Nyw0NiArNDcsMzEgQEAgY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIEJpdG1h
cFRleHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgog
ICAgIGVudW0gUGl4ZWxGb3JtYXQgeyBCR1JBRm9ybWF0LCBSR0JBRm9ybWF0LCBCR1JGb3JtYXQs
IFJHQkZvcm1hdCB9OwotICAgIEJpdG1hcFRleHR1cmUoKSA6IG1fbG9ja0NvdW50KDApIHt9Cisg
ICAgQml0bWFwVGV4dHVyZSgpCisgICAgICAgIDogbV9pc09wYXF1ZSh0cnVlKQorICAgIHsKKyAg
ICB9CisKICAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBhbGxvd09mZmxpbmVUZXh0dXJlVXBs
b2FkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBicHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGlu
dCBicHAoKSBjb25zdCB7IHJldHVybiAzMjsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSA9IGZhbHNlKQogICAgIHsKICAgICAgICAgbV9p
c09wYXF1ZSA9IG9wYXF1ZTsKICAgICAgICAgbV9jb250ZW50U2l6ZSA9IHNpemU7CiAgICAgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHBhY2soKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCkg
eyB9Ci0gICAgdmlydHVhbCBib29sIGlzUGFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAw
OwotCi0gICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIEJpdG1hcFRleHR1cmUgbWlnaHQg
bW9kaWZ5IHRoZSBiaXRzIGRpcmVjdGx5IChzd2l6emxlKS4KLSAgICAvLyBUaHVzLCB0aGlzIG1l
dGhvZCBpcyBvbmx5IHJlY29tbWVuZGVkIGZvciBidWZmZXIgdXBkYXRlLCBzdWNoIGFzIHVzZWQg
YnkgV2ViS2l0Mi4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQs
IGNvbnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVJhd0NvbnRlbnRzKGNvbnN0IEludFJlY3QmLCBjb25zdCB2b2lkKiBiaXRzKSB7IH0KLSAgICB2
aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50TWVkaWEoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJlZ2luUGFpbnQoSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwg
c2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
SW1hZ2UoSW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJikg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGlubGluZSB2b2lkIGxvY2soKSB7ICsrbV9sb2NrQ291
bnQ7IH0KLSAgICBpbmxpbmUgdm9pZCB1bmxvY2soKSB7IC0tbV9sb2NrQ291bnQ7IH0KLSAgICBp
bmxpbmUgYm9vbCBpc0xvY2tlZCgpIHsgcmV0dXJuIG1fbG9ja0NvdW50OyB9CiAgICAgaW5saW5l
IEludFNpemUgY29udGVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CiAg
ICAgaW5saW5lIGludCBudW1iZXJPZkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRo
KCkgKiBzaXplKCkuaGVpZ2h0KCkgKiBicHAoKSA+PiAzOyB9CisgICAgaW5saW5lIGJvb2wgaXNP
cGFxdWUoKSBjb25zdCB7IHJldHVybiBtX2lzT3BhcXVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBp
bnQgbV9sb2NrQ291bnQ7CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOwogICAgIGJvb2wgbV9p
c09wYXF1ZTsKIH07CkBAIC05NywzMiArODIsMjYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlciB7CiAg
ICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQgPSAwKTsKKyAgICBlbnVtIEFjY2VsZXJhdGlvbk1vZGUgeyBTb2Z0d2FyZU1vZGUsIE9w
ZW5HTE1vZGUgfTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUo
QWNjZWxlcmF0aW9uTW9kZSBuZXdNb2RlID0gU29mdHdhcmVNb2RlKTsKICAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3Qg
Qml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxv
YXQgb3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkg
PSAwOwogCiAgICAgLy8gbWFrZXMgYSBzdXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dp
bmcgZHJhd1RleHR1cmUgY2FsbHMuCiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1h
cFRleHR1cmUqIHN1cmZhY2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250
ZXh0KEdyYXBoaWNzQ29udGV4dCopID0gMDsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0KKyAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9j
b250ZXh0OyB9CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xp
cCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgp
ID0gMDsKLSAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3Bv
cnRTaXplOyB9Ci0gICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBt
X3ZpZXdwb3J0U2l6ZSA9IHM7IH0KIAogICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW50ZXJwb2xhdGlvblF1YWxp
dHkgPSBxdWFsaXR5OyB9CiAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdN
b2RlRmxhZ3MgbW9kZSkgeyBtX3RleHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KIAogICAgIEludGVy
cG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVy
biBtX2ludGVycG9sYXRpb25RdWFsaXR5OyB9CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4
dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dQYXJ0aWFsVXBkYXRlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgpIHsgbV90cmFuc2Zvcm0gPSBtYXRyaXg7IH0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwg
QWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgPSAwOwogCiAgICAgdmly
dHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRp
bmcoKSB7IH0KQEAgLTEzMCw3ICsxMDksNiBAQCBwdWJsaWM6CiAgICAgLy8gQSBzdXJmYWNlIGlz
IHJlbGVhc2VkIGltcGxpY2l0bHkgd2hlbiBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IGFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6
ZSYpOwogCi0KIHByb3RlY3RlZDoKICAgICBUZXh0dXJlTWFwcGVyKCkKICAgICAgICAgOiBtX2lu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25EZWZhdWx0KQpAQCAtMTM4LDE0ICsxMTYs
MjEgQEAgcHJvdGVjdGVkOgogICAgIHt9CiAKIHByaXZhdGU6CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IHBsYXRmb3JtQ3Jl
YXRlQWNjZWxlcmF0ZWQoKTsKKyNlbHNlCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1h
cHBlcj4gcGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisjZW5kaWYKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVy
cG9sYXRpb25RdWFsaXR5OwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdN
b2RlOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIEludFNpemUg
bV92aWV3cG9ydFNpemU7CiAgICAgVmVjdG9yPFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IG1fdGV4
dHVyZVBvb2w7CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7CiB9OwogCi19OworfQog
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBkMjc4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFn
ZUJ1ZmZlci5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckltYWdlQnVmZmVyLmgiCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhj
b25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworI2lmIFBMQVRG
T1JNKFFUKQorICAgIFFJbWFnZSBpbWFnZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4o
ZGF0YSksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgdGFyZ2V0UmVj
dC53aWR0aCgpICogNCwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAg
IFFQYWludGVyKiBwYWludGVyID0gbV9pbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBwYWludGVyLT5zYXZlKCk7CisgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2Rl
KFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICBwYWludGVyLT5kcmF3SW1h
Z2UodGFyZ2V0UmVjdCwgaW1hZ2UpOworICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKKyNlbmRpZgor
fQorCit2b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoSW1hZ2Uq
IGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBQaXhlbEZvcm1hdCkKK3sKKyAgICBtX2ltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShp
bWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgdGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgQ29tcG9z
aXRlQ29weSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKDNEX1JFTkRFUklO
RykKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcmV2aW91c1RyYW5zZm9ybSA9IGNvbnRleHQt
PmdldDNEVHJhbnNmb3JtKCk7CisjZWxzZQorICAgIEFmZmluZVRyYW5zZm9ybSBwcmV2aW91c1Ry
YW5zZm9ybSA9IGNvbnRleHQtPmdldENUTSgpOworI2VuZGlmCisgICAgY29udGV4dC0+c2F2ZSgp
OworCisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAgICBjb250ZXh0LT5jb25jYXQzRFRyYW5z
Zm9ybShtYXRyaXgpOworI2Vsc2UKKyAgICBjb250ZXh0LT5jb25jYXRDVE0obWF0cml4LnRvQWZm
aW5lVHJhbnNmb3JtKCkpOworI2VuZGlmCisKKyAgICBjb250ZXh0LT5jbGlwKHJlY3QpOworCisj
aWYgRU5BQkxFKDNEX1JFTkRFUklORykKKyAgICBjb250ZXh0LT5zZXQzRFRyYW5zZm9ybShwcmV2
aW91c1RyYW5zZm9ybSk7CisjZWxzZQorICAgIGNvbnRleHQtPnNldENUTShwcmV2aW91c1RyYW5z
Zm9ybSk7CisjZW5kaWYKK30KKwordm9pZCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmRyYXdU
ZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0
eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0ID0gY3VycmVudENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNvbnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciYgdGV4dHVy
ZUltYWdlQnVmZmVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVy
Jj4odGV4dHVyZSk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlID0gdGV4dHVyZUltYWdlQnVmZmVy
Lm1faW1hZ2UuZ2V0KCk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrZWRJbWFnZTsKKwor
ICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAg
IGNvbnN0IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciogbWFzayA9IHN0YXRpY19jYXN0PGNvbnN0
IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcio+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgbWFza2Vk
SW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tUZXh0dXJlLT5jb250ZW50U2l6ZSgpKTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrQ29udGV4dCA9IG1hc2tlZEltYWdlLT5jb250
ZXh0KCk7CisgICAgICAgIG1hc2tDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCksIENvbXBvc2l0ZUNvcHkpOworICAgICAg
ICBpZiAob3BhY2l0eSA8IDEpIHsKKyAgICAgICAgICAgIG1hc2tDb250ZXh0LT5zZXRBbHBoYShv
cGFjaXR5KTsKKyAgICAgICAgICAgIG9wYWNpdHkgPSAxOworICAgICAgICB9CisgICAgICAgIG1h
c2tDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobWFzay0+bV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UG9pbnQ6Onplcm8oKSwgQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7Cisg
ICAgICAgIGltYWdlID0gbWFza2VkSW1hZ2UuZ2V0KCk7CisgICAgfQorCisgICAgY29udGV4dC0+
c2F2ZSgpOworICAgIGNvbnRleHQtPnNldEFscGhhKG9wYWNpdHkpOworI2lmIEVOQUJMRSgzRF9S
RU5ERVJJTkcpCisgICAgY29udGV4dC0+Y29uY2F0M0RUcmFuc2Zvcm0obWF0cml4KTsKKyNlbHNl
CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKG1hdHJpeC50b0FmZmluZVRyYW5zZm9ybSgpKTsKKyNl
bmRpZgorICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgdGFyZ2V0UmVjdCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCit9CisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44NDExMjA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCkBA
IC0wLDAgKzEsNzQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcl9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJJ
bWFnZUJ1ZmZlcl9oCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXIuaCIKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyIDogcHVibGljIEJpdG1hcFRleHR1
cmUgeworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcik7IH0KKyAgICB+Qml0bWFwVGV4
dHVyZUltYWdlQnVmZmVyKCkgeyBkZXN0cm95KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpIHsgbV9pbWFnZS5jbGVhcigpOyB9CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2ltYWdlLT5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUpCisgICAgeworICAgICAgICBCaXRtYXBUZXh0
dXJlOjpyZXNldChzaXplLCBvcGFxdWUpOworICAgICAgICBtX2ltYWdlID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICBpbmxpbmUgR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQoKSB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS0+Y29udGV4dCgpIDogMDsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRSZWN0JiwgUGl4ZWxGb3JtYXQpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29u
c3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCk7Citwcml2YXRlOgorICAg
IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcigpIHsgfQorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
bV9pbWFnZTsKK307CisKKworY2xhc3MgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyIDogcHVibGlj
IFRleHR1cmVNYXBwZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShj
b25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUq
IG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGJpbmRT
dXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpIHsgbV9jdXJyZW50U3VyZmFjZSA9IHN1cmZh
Y2U7fQorICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCkgeyBncmFwaGljc0NvbnRleHQoKS0+cmVz
dG9yZSgpOyB9CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcik7IH0KKyAgICBQ
YXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSB7IHJldHVybiBCaXRtYXBU
ZXh0dXJlSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpOyB9CisgICAgaW5saW5lIEdyYXBoaWNzQ29udGV4
dCogY3VycmVudENvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudFN1cmZh
Y2UgPyBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIqPihtX2N1cnJlbnRTdXJm
YWNlLmdldCgpKS0+Z3JhcGhpY3NDb250ZXh0KCkgOiBncmFwaGljc0NvbnRleHQoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIFNvZnR3YXJlTW9kZTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBtX2N1cnJlbnRTdXJmYWNlOworfTsKKworfQorI2VuZGlmIC8vIFVTRShURVhUVVJF
X01BUFBFUikKKworI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmNwcAppbmRleCBjY2Y0OWJjLi42ODY2YzQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTm9kZS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogCiBuYW1lc3BhY2Ug
ewpAQCAtMTU2LDEyICsxNTcsMTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29u
dGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWUKICAgICBpZiAo
IXRleHR1cmVNYXBwZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBBZGQgZGly
ZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMuCi0gICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IG1fY3Vy
cmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29udGVu
dC5uZWVkc0Rpc3BsYXlSZWN0OworICAgIEludFJlY3QgZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6IG1fY3Vy
cmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CiAKICAgICBmb3IgKHNpemVfdCB0aWxlSW5k
ZXggPSAwOyB0aWxlSW5kZXggPCBtX293bmVkVGlsZXMuc2l6ZSgpOyArK3RpbGVJbmRleCkgewog
ICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZUluZGV4XTsKLSAgICAg
ICAgRmxvYXRSZWN0IHJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgICAgIGlmICghdGlsZS50ZXh0dXJl
KQogICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVy
ZSgpOwogICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4mIHRleHR1cmUgPSB0aWxlLnRleHR1
cmU7CkBAIC0xNjksMzEgKzE2OCw0MyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJD
b250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZQogCiAgICAg
ICAgIGlmICh0aWxlLm5lZWRzUmVzZXQgfHwgdGV4dHVyZS0+Y29udGVudFNpemUoKSAhPSB0aWxl
U2l6ZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICB0aWxlLm5lZWRzUmVz
ZXQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KHRpbGVTaXplLCBtX2N1cnJl
bnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUgPyBmYWxzZSA6
IG1fc3RhdGUuY29udGVudHNPcGFxdWUpOwotICAgICAgICAgICAgcmVjdCA9IHRpbGUucmVjdDsK
KyAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KHRpbGVTaXplLCBtX3N0YXRlLmNvbnRlbnRzT3Bh
cXVlKTsKKyAgICAgICAgICAgIGRpcnR5UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHRpbGUu
cmVjdCkpOwogICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKIAotICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdCh0aWxlLnJlY3QpOwotICAgICAgICBjb250ZW50UmVjdC5pbnRlcnNlY3QoZW5j
bG9zaW5nSW50UmVjdChyZWN0KSk7Ci0gICAgICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkp
CisgICAgLy8gUGFpbnQgdGhlIGVudGlyZSBkaXJ0eSByZWN0IGludG8gYW4gaW1hZ2UgYnVmZmVy
LiBUaGlzIGVuc3VyZXMgd2Ugb25seSBwYWludCBvbmNlLgorICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGRpcnR5UmVjdC5zaXplKCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7Cisg
ICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5n
TW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgY29udGV4dC0+dHJh
bnNsYXRlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7CisgICAgbGF5ZXItPnBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgIGlmIChtX2N1
cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpCisgICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCk7CisKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IEltYWdlQnVmZmVyOjpEb250Q29weUJhY2tpbmdTdG9yZSBpbiBRdC9HVEsgcG9y
dHMsIGFuZCB0aGVuIGNoYW5nZSB0aGlzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2ODkKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gaW1h
Z2VCdWZmZXItPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKworICAgIC8vIERpdmlkZSB0
aGUgaW1hZ2UgdG8gdGlsZXMuCisgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUlu
ZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKKyAgICAgICAgT3duZWRU
aWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRleF07CisgICAgICAgIEludFJlY3QgdGFy
Z2V0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KTsKKyAgICAgICAgdGFyZ2V0UmVj
dC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgp
KQogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRh
cmdldFJlY3Q7CiAKLSAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0
ZXMgPSBjb250ZW50UmVjdDsKLSAgICAgICAgRmxvYXRQb2ludCBvZmZzZXQoLXRpbGUucmVjdC54
KCksIC10aWxlLnJlY3QueSgpKTsKLSAgICAgICAgY29udGVudFJlY3RJblRpbGVDb29yZGluYXRl
cy5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHRleHR1cmUtPmJlZ2luUGFpbnQoZW5jbG9zaW5nSW50
UmVjdChjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzKSkpOwotICAgICAgICAgICAgY29udGV4
dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1cmVNYXBwZXItPmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9k
ZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKLSAgICAgICAgICAgIEZsb2F0UmVj
dCBzY2FsZWRDb250ZW50UmVjdChjb250ZW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAobV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKQotICAgICAg
ICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCks
IENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4
dCwgZW5jbG9zaW5nSW50UmVjdChzY2FsZWRDb250ZW50UmVjdCkpOwotICAgICAgICAgICAgdGV4
dHVyZS0+ZW5kUGFpbnQoKTsKLSAgICAgICAgfQorICAgICAgICAvLyBOb3JtYWxpemUgc291cmNl
UmVjdCB0byB0aGUgYnVmZmVyJ3MgY29vcmRpbmF0ZXMuCisgICAgICAgIHNvdXJjZVJlY3QubW92
ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworCisgICAgICAgIC8vIE5vcm1hbGl6
ZSB0YXJnZXRSZWN0IHRvIHRoZSB0ZXh0dXJlJ3MgY29vcmRpbnFhdGVzLgorICAgICAgICB0YXJn
ZXRSZWN0Lm1vdmUoLXRpbGUucmVjdC54KCksIC10aWxlLnJlY3QueSgpKTsKKyAgICAgICAgdGls
ZS50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5nZXQoKSwgdGFyZ2V0UmVjdCwgc291cmNl
UmVjdCwgQml0bWFwVGV4dHVyZTo6UkdCQUZvcm1hdCk7CiAgICAgfQogCiAgICAgbV9jdXJyZW50
Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKQEAgLTQ4MSw3ICs0OTIsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKQog
ICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1
ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IHZvaWQqIGJpdHMpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRD
b250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBBU1NF
UlQobV90ZXh0dXJlTWFwcGVyKTsKIApAQCAtNDk4LDcgKzUwOSw3IEBAIHZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSCiAgICAgaWYgKCF0aWxlLmJhY2tCdWZmZXIudGV4dHVyZSkKICAgICAgICAgdGls
ZS5iYWNrQnVmZmVyLnRleHR1cmUgPSBtX3RleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsK
ICAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZS0+cmVzZXQoc291cmNlUmVjdC5zaXplKCksIGZh
bHNlKTsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZS0+dXBkYXRlUmF3Q29udGVudHMoc291
cmNlUmVjdCwgYml0cyk7CisgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZUNvbnRl
bnRzKGRhdGEsIHNvdXJjZVJlY3QpOwogICAgIHRpbGUuaXNCYWNrQnVmZmVyVXBkYXRlZCA9IHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKaW5kZXggZmU0YjE0Yy4uMjMwYzllMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmgKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRUaWxlT3duZXJzaGlwKFRpbGVPd25lcnNoaXAgb3duZXJzaGlwKSB7IG1fc3RhdGUudGls
ZU93bmVyc2hpcCA9IG93bmVyc2hpcDsgfQogICAgIGludCBjcmVhdGVDb250ZW50c1RpbGUoZmxv
YXQgc2NhbGUpOwogICAgIHZvaWQgcmVtb3ZlQ29udGVudHNUaWxlKGludCBpZCk7Ci0gICAgdm9p
ZCBzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qgdm9pZCogYml0cyk7CisgICAg
dm9pZCBzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qgdm9pZCopOwogICAgIHZv
aWQgc2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50
IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIEJpdG1hcFRleHR1cmUqKTsKICAgICB2b2lkIGNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VUaWxlcygpOwogICAgIHZvaWQgcHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmluZGV4IGM4ZThkYWQuLjc0MTg4MjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmZyYW1lLmNwcApAQCAtMzM2LDcgKzMzNiw2IEBAIHZvaWQgUVdlYkZyYW1l
UHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEluCiAgICAgdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OwogICAgIHRleHR1cmVNYXBwZXItPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4
dC0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRU
ZXh0RHJhd2luZ01vZGUoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkpOwotICAgIHRleHR1cmVN
YXBwZXItPnNldFZpZXdwb3J0U2l6ZShmcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXplKCkp
OwogICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgY29uc3QgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBwYWludGVyLT53b3JsZFRyYW5zZm9ybSgp
OwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5k
ZXggMGI4NTRmOS4uMWJjMzkxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAx
Mi0wMi0wMiAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisg
ICAgICAgIFtRdF1bVGV4bWFwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyIEFQSSB0byB1c2UgSW1h
Z2VCdWZmZXJzIHdoZW4gcG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NzE0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2Jp
bnNvbi4KKworICAgICAgICBVc2UgVGV4dHVyZU1hcHBlcjo6Y3JlYXRlIGluc3RlYWQgb2YgY3Jl
YXRpbmcgVGV4dHVyZU1hcHBlckdML1RleHR1cmVNYXBwZXJRdCBkaXJlY3RseS4KKworICAgICAg
ICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVy
Q29tcG9zaXRlZExheWVycyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhp
Y3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpz
ZXRSb290R3JhcGhpY3NMYXllcik6CisKIDIwMTItMDItMDEgIENhaW8gTWFyY2VsbyBkZSBPbGl2
ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBBdm9p
ZCBjcmVhdGluZyBOYW1lZE5vZGVNYXAgdW5uZWNlc3NhcmlseQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDQwZTZiMTQuLjQ1ZGNm
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVu
dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRR
dC5jcHAKQEAgLTI4LDEyICsyOCw4IEBACiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJRdC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJ0ZXhtYXAvVGV4
dHVyZU1hcHBlck5vZGUuaCIKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSNpbmNsdWRl
ICJvcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgiCi0jZW5kaWYKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC03Niw3ICs3Miw3IEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldFJv
b3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikg
ewogICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJl
TWFwcGVyTm9kZUNsaWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcikpOwotICAgICAgICB0
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihhZG9wdFB0cihuZXcgVGV4
dHVyZU1hcHBlclF0KSk7CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0
dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsKICAgICAgICAgdGV4dHVyZU1hcHBl
ck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTI2NywxMSArMjYzLDExIEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQogICAgICAgICBRR3JhcGhpY3NWaWV3KiBncmFwaGljc1ZpZXcgPSB2aWV3LT5zY2Vu
ZSgpLT52aWV3cygpWzBdOwogICAgICAgICBpZiAoZ3JhcGhpY3NWaWV3ICYmIGdyYXBoaWNzVmll
dy0+dmlld3BvcnQoKSAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCktPmluaGVyaXRzKCJRR0xX
aWRnZXQiKSkgewotICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7CisgICAgICAgICAgICB0ZXh0dXJl
TWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
VGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAjZW5kaWYKLSAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlclF0OjpjcmVhdGUoKSk7CisgICAgICAgIHRleHR1cmVNYXBwZXJO
b2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC5jbGVhcigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGM1NTk4NDIuLjlkOGU2NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAxMi0wMi0wMiAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgorCisgICAgICAgIFtRdF1bVGV4bWFwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyIEFQSSB0
byB1c2UgSW1hZ2VCdWZmZXJzIHdoZW4gcG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzE0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE1h
cnRpbiBSb2JpbnNvbi4KKworICAgICAgICBVc2UgVGV4dHVyZU1hcHBlcjo6Y3JlYXRlIGluc3Rl
YWQgb2YgY3JlYXRpbmcgVGV4dHVyZU1hcHBlckdML1RleHR1cmVNYXBwZXJRdCBkaXJlY3RseS4K
KyAgICAgICAgUmVtb3ZlIGNhbGxzIHRvIHVudXNlZCBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVyKToKKwogMjAxMi0wMi0wMiAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIE5QQVBJIHdpbGwg
bm90IHNlbmQgbW91c2UgdXAgZXZlbnRzIHdoZW4gbW91c2UgaXMgb3V0c2lkZSBwbHVnaW4gYXJl
YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQ
cm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJv
eHlRdC5jcHAKaW5kZXggODk2OWJiYi4uYzdjYTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCkBAIC0yNiw4ICsyNiw3
IEBACiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgot
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIK
ICNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgpAQCAtMTcxLDggKzE3MCw4IEBAIExh
eWVyVHJlZUhvc3RQcm94eTo6fkxheWVyVHJlZUhvc3RQcm94eSgpCiB2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsK
ICAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKLSAgICBBU1NFUlQoZHluYW1pY19jYXN0PFRleHR1cmVN
YXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSkpOworICAgICAgICBtX3RleHR1cmVNYXBw
ZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Cisg
ICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVN
YXBwZXI6Ok9wZW5HTE1vZGUpOwogCiAgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKICAgICBHcmFw
aGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CkBAIC0xODQsOSArMTgz
LDYgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXQKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIGdsR2V0SW50ZWdlcnYoR0xfVklF
V1BPUlQsIHZpZXdwb3J0KTsKLSAgICBtX3RleHR1cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShJ
bnRTaXplKHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSkpOwogICAgIG5vZGUtPnNldFRleHR1cmVN
YXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2lu
UGFpbnRpbmcoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOwpAQCAtMjEx
LDkgKzIwNyw4IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29u
dGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiB2b2lkIExheWVyVHJlZUhvc3RQ
cm94eTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciogcGFpbnRlcikKIHsKICAgICBp
ZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1h
cHBlclF0OjpjcmVhdGUoKTsKLSAgICBBU1NFUlQoZHluYW1pY19jYXN0PFRleHR1cmVNYXBwZXJR
dCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSkpOwotCisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9
IFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpOworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFj
Y2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOwogICAgIHN5
bmNSZW1vdGVDb250ZW50KCk7CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1
cmVNYXBwZXJOb2RlKHJvb3RMYXllcigpKTsKIApAQCAtNDEwLDcgKzQwNSw3IEBAIHZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFNoYXJlYWJsZUJp
dG1hcCogYml0bWFwKQogICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2UuY29weShyZWN0
KTsKICAgICAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJl
TWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChyZWN0
LnNpemUoKSwgIWltYWdlSGFzQWxwaGEpOwotICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRlUmF3
Q29udGVudHMoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSksIHN1YkltYWdl
LmNvbnN0Qml0cygpKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHN1Yklt
YWdlLmNvbnN0Qml0cygpLCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSk7
CiAgICAgICAgICAgICB0aWxlZEltYWdlLmFkZChyZWN0LmxvY2F0aW9uKCksIHRleHR1cmUpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtNDczLDcgKzQ2OCw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjplbnN1cmVSb290TGF5ZXIoKQogICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3Qg
aGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCiAgICAgbV9yb290
TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7CiAgICAgaWYgKCFtX3RleHR1cmVN
YXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRl
KCk7CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0
dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKICAgICB0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdExh
eWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogfQog
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>