<?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>77229</bug_id>
          
          <creation_ts>2012-01-27 10:25:39 -0800</creation_ts>
          <short_desc>[chromium] Implement keyframed animations for the cc thread.</short_desc>
          <delta_ts>2012-02-23 21:31: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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>75874</dependson>
          <blocked>76468</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>544163</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-01-27 10:25:39 -0800</bug_when>
    <thetext>Subclasses of CCFloatAnimationCurve and CCTransformAnimationCurve need to be implemented. These curves need to be created in CCLayerAnimationController in response to a call to GraphicsLayer::addAnimation and passed to the cc thread animation kernel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544170</commentid>
    <comment_count>1</comment_count>
      <attachid>124333</attachid>
    <who name="">vollick</who>
    <bug_when>2012-01-27 10:31:48 -0800</bug_when>
    <thetext>Created attachment 124333
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552442</commentid>
    <comment_count>2</comment_count>
      <attachid>126142</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-08 13:30:34 -0800</bug_when>
    <thetext>Created attachment 126142
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553804</commentid>
    <comment_count>3</comment_count>
      <attachid>126142</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-09 21:32:07 -0800</bug_when>
    <thetext>Comment on attachment 126142
Patch

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

Unit Tests?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:37
&gt; +////////////////////////////////////////////////////////////////////////////////

not sure we do this ///////// stuff in the CC code.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:42
&gt; +{

Ugh, really? Is there a way for this to be less dynamic? E.g. you construct a curve with all its keyframes instead of piecemeal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554373</commentid>
    <comment_count>4</comment_count>
      <attachid>126579</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-10 14:03:42 -0800</bug_when>
    <thetext>Created attachment 126579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554419</commentid>
    <comment_count>5</comment_count>
      <attachid>126589</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-10 15:03:02 -0800</bug_when>
    <thetext>Created attachment 126589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554423</commentid>
    <comment_count>6</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-10 15:04:41 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 126142 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126142&amp;action=review
&gt; 
&gt; Unit Tests?
Added.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:37
&gt; &gt; +////////////////////////////////////////////////////////////////////////////////
&gt; 
&gt; not sure we do this ///////// stuff in the CC code.
Removed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:42
&gt; &gt; +{
&gt; 
&gt; Ugh, really? Is there a way for this to be less dynamic? E.g. you construct a curve with all its keyframes instead of piecemeal?
Fixed. They now take keyframes as constructor arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558851</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-16 20:20:17 -0800</bug_when>
    <thetext>This appears to depend on top of https://bugs.webkit.org/show_bug.cgi?id=75874, marking it as dependent (feel free to undo if I&apos;ve got the relationship incorrect).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558874</commentid>
    <comment_count>8</comment_count>
      <attachid>126589</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-16 20:56:30 -0800</bug_when>
    <thetext>Comment on attachment 126589
Patch

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

Some more comments, sorry.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

Remove this line

&gt; Source/WebCore/ChangeLog:63
&gt; +        No new tests. (OOPS!)

Looks like you&apos;ve duped the changelog somehow.

&gt; Source/WebKit/chromium/ChangeLog:17
&gt; +2012-02-08  Ian Vollick  &lt;vollick@chromium.org&gt;

duped changelog

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:70
&gt; +    const Vector&lt;CCFloatKeyframe&gt;&amp; keyframes() const { return m_keyframes; }

Lets remove this accessor since its not used

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:88
&gt; +    // True if keyframes are sorted and there is at least one keyframe.

Dumb question, should ::create() just validate the keyframes and return nullptr? That way you can&apos;t even get an invalid curve in the first place?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:102
&gt; +    const Vector&lt;CCTransformKeyframe&gt;&amp; keyframes() const { return m_keyframes; }

remove since unused?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:166
&gt; +    if (animation-&gt;isDirectionSet() &amp;&amp; animation-&gt;direction() == Animation::AnimationDirectionAlternate)

can we get some of the common code between the crateXXX shared?

Would this help?
template &lt;class T&gt; bool prepareKeyframes(vector&lt;T&gt;&amp; keyframes);// return false if preparation failed

This could cover lines 163-190 ish, I think.

A similar technique might work for the code after the curve construction, too.

Or you might even be able to reduce this to do a template &lt;KEYFRAME_TYPE, CURVE_TYPE&gt; createAnimation()

Also, its probalby bad that the create function also appends to active animations. It should either return as a PassOwnPtr, or be changed to be more like activateXAnimation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558884</commentid>
    <comment_count>9</comment_count>
      <attachid>126589</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-16 21:26:19 -0800</bug_when>
    <thetext>Comment on attachment 126589
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:118
&gt; +    OwnPtr&lt;CCActiveAnimation&gt; toReturn(adoptPtr(new CCActiveAnimation(m_animationCurve-&gt;clone(), m_name, m_group, m_targetProperty)));

I&apos;m pretty sure this is buggy - you can&apos;t simply copy a WTF::String from one thread to another.  I believe you need to use isolatedCopy().

I&apos;m not really thrilled with the idea of using strings cross-thread.  I believe GraphicsLayer uses strings because they map naturally to CoreAnimation&apos;s addAnimation: forKey: / removeAnimation: forKey: APIs: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1.  However I think we should think of staying close to that for our main-thread API (LayerChromium, effectively) and something something less foot-gunny in our implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559701</commentid>
    <comment_count>10</comment_count>
      <attachid>127686</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-17 19:56:49 -0800</bug_when>
    <thetext>Created attachment 127686
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559703</commentid>
    <comment_count>11</comment_count>
      <attachid>127688</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-17 20:21:41 -0800</bug_when>
    <thetext>Created attachment 127688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559704</commentid>
    <comment_count>12</comment_count>
      <attachid>127689</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-17 20:28:24 -0800</bug_when>
    <thetext>Created attachment 127689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559711</commentid>
    <comment_count>13</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-17 20:44:36 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 126589 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126589&amp;action=review
&gt; 
&gt; Some more comments, sorry.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:70
&gt; &gt; +    const Vector&lt;CCFloatKeyframe&gt;&amp; keyframes() const { return m_keyframes; }
&gt; 
&gt; Lets remove this accessor since its not used
&gt;
Done. 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:88
&gt; &gt; +    // True if keyframes are sorted and there is at least one keyframe.
&gt; 
&gt; Dumb question, should ::create() just validate the keyframes and return nullptr? That way you can&apos;t even get an invalid curve in the first place?
&gt; 
Love it. Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:102
&gt; &gt; +    const Vector&lt;CCTransformKeyframe&gt;&amp; keyframes() const { return m_keyframes; }
&gt; 
&gt; remove since unused?
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:166
&gt; &gt; +    if (animation-&gt;isDirectionSet() &amp;&amp; animation-&gt;direction() == Animation::AnimationDirectionAlternate)
&gt; 
&gt; can we get some of the common code between the crateXXX shared?
&gt; 
&gt; Would this help?
&gt; template &lt;class T&gt; bool prepareKeyframes(vector&lt;T&gt;&amp; keyframes);// return false if preparation failed
&gt; 
&gt; This could cover lines 163-190 ish, I think.
&gt; 
&gt; A similar technique might work for the code after the curve construction, too.
&gt; 
&gt; Or you might even be able to reduce this to do a template &lt;KEYFRAME_TYPE, CURVE_TYPE&gt; createAnimation()
&gt; 
Done.
&gt; Also, its probalby bad that the create function also appends to active animations. It should either return as a PassOwnPtr, or be changed to be more like activateXAnimation
Functions have renamed and are, hopefully, clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559713</commentid>
    <comment_count>14</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-17 20:47:29 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 126589 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126589&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:118
&gt; &gt; +    OwnPtr&lt;CCActiveAnimation&gt; toReturn(adoptPtr(new CCActiveAnimation(m_animationCurve-&gt;clone(), m_name, m_group, m_targetProperty)));
&gt; 
&gt; I&apos;m pretty sure this is buggy - you can&apos;t simply copy a WTF::String from one thread to another.  I believe you need to use isolatedCopy().
&gt; 
&gt; I&apos;m not really thrilled with the idea of using strings cross-thread.  I believe GraphicsLayer uses strings because they map naturally to CoreAnimation&apos;s addAnimation: forKey: / removeAnimation: forKey: APIs: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1.  However I think we should think of staying close to that for our main-thread API (LayerChromium, effectively) and something something less foot-gunny in our implementation.

Thank you for catching this. I now pass ids rather than strings. There will need to be a mapping between names and ids, but the mapping cannot be maintained without plumbing back to GraphicsLayerChromium to tell it when animations finish. This will be coming in 77646.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559720</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-17 22:16:08 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 126589 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126589&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:118
&gt; &gt; &gt; +    OwnPtr&lt;CCActiveAnimation&gt; toReturn(adoptPtr(new CCActiveAnimation(m_animationCurve-&gt;clone(), m_name, m_group, m_targetProperty)));
&gt; &gt; 
&gt; &gt; I&apos;m pretty sure this is buggy - you can&apos;t simply copy a WTF::String from one thread to another.  I believe you need to use isolatedCopy().
&gt; &gt; 
&gt; &gt; I&apos;m not really thrilled with the idea of using strings cross-thread.  I believe GraphicsLayer uses strings because they map naturally to CoreAnimation&apos;s addAnimation: forKey: / removeAnimation: forKey: APIs: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1.  However I think we should think of staying close to that for our main-thread API (LayerChromium, effectively) and something something less foot-gunny in our implementation.
&gt; 
&gt; Thank you for catching this. I now pass ids rather than strings. There will need to be a mapping between names and ids, but the mapping cannot be maintained without plumbing back to GraphicsLayerChromium to tell it when animations finish. This will be coming in 77646.

That&apos;s a good plan but it unfortunately creates a bad dependency cycle in the current patch order.  This patch doesn&apos;t appear to apply cleanly without bug 75874 which still uses strings.  I would suggest breaking the cycle in one of two ways:

1.) Modify this patch so that it can apply and be tested independently of bug 75874 - it appears that there are merge conflicts in some test code, but I think logically the bulk of this patch is independent of the way it&apos;s tied in to GraphicsLayerChromium. This seems slightly easier to me

2.) Implement whatever part of 77646 is needed for the string switchover as a bug blocking this one and wait for that before going to land this.  That seems less ideal unless it&apos;s very difficult to do one.  In general, I think it&apos;s better to land pieces of logic independently if they can be well-tested in isolation and we&apos;re pretty confident in how the bits will glue together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563221</commentid>
    <comment_count>16</comment_count>
      <attachid>128495</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-23 10:29:41 -0800</bug_when>
    <thetext>Created attachment 128495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563225</commentid>
    <comment_count>17</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-23 10:31:35 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (From update of attachment 126589 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126589&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:118
&gt; &gt; &gt; &gt; +    OwnPtr&lt;CCActiveAnimation&gt; toReturn(adoptPtr(new CCActiveAnimation(m_animationCurve-&gt;clone(), m_name, m_group, m_targetProperty)));
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m pretty sure this is buggy - you can&apos;t simply copy a WTF::String from one thread to another.  I believe you need to use isolatedCopy().
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not really thrilled with the idea of using strings cross-thread.  I believe GraphicsLayer uses strings because they map naturally to CoreAnimation&apos;s addAnimation: forKey: / removeAnimation: forKey: APIs: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1.  However I think we should think of staying close to that for our main-thread API (LayerChromium, effectively) and something something less foot-gunny in our implementation.
&gt; &gt; 
&gt; &gt; Thank you for catching this. I now pass ids rather than strings. There will need to be a mapping between names and ids, but the mapping cannot be maintained without plumbing back to GraphicsLayerChromium to tell it when animations finish. This will be coming in 77646.
&gt; 
&gt; That&apos;s a good plan but it unfortunately creates a bad dependency cycle in the current patch order.  This patch doesn&apos;t appear to apply cleanly without bug 75874 which still uses strings.  I would suggest breaking the cycle in one of two ways:
&gt; 
&gt; 1.) Modify this patch so that it can apply and be tested independently of bug 75874 - it appears that there are merge conflicts in some test code, but I think logically the bulk of this patch is independent of the way it&apos;s tied in to GraphicsLayerChromium. This seems slightly easier to me
&gt; 
&gt; 2.) Implement whatever part of 77646 is needed for the string switchover as a bug blocking this one and wait for that before going to land this.  That seems less ideal unless it&apos;s very difficult to do one.  In general, I think it&apos;s better to land pieces of logic independently if they can be well-tested in isolation and we&apos;re pretty confident in how the bits will glue together.

I think that this has been sorted out -- this patch can now be applied cleanly on master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563382</commentid>
    <comment_count>18</comment_count>
      <attachid>128495</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-23 12:59:21 -0800</bug_when>
    <thetext>Comment on attachment 128495
Patch

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

Looks great R=me.  A few naming nits to address before landing, just to stay consistent.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:48
&gt; +    CCTransformKeyframe(double time)

nit: explicit

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:40
&gt; +template &lt;typename KEYFRAME, typename VALUE&gt;

style nit (here and elsewhere): we reserve ALLCAPS style for macros in WebKit and typically just use normal type names for template parameters. So this would be &quot;Keyframe&quot; and &quot;Value&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563422</commentid>
    <comment_count>19</comment_count>
      <attachid>128547</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-23 13:42:54 -0800</bug_when>
    <thetext>Created attachment 128547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563423</commentid>
    <comment_count>20</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-23 13:44:23 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 128495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128495&amp;action=review
&gt; 
&gt; Looks great R=me.  A few naming nits to address before landing, just to stay consistent.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:48
&gt; &gt; +    CCTransformKeyframe(double time)
&gt; 
&gt; nit: explicit
&gt; 
Fixed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:40
&gt; &gt; +template &lt;typename KEYFRAME, typename VALUE&gt;
&gt; 
&gt; style nit (here and elsewhere): we reserve ALLCAPS style for macros in WebKit and typically just use normal type names for template parameters. So this would be &quot;Keyframe&quot; and &quot;Value&quot;
Fixed. Affected files: CCKeyframedAnimationCurve.cpp, CCAnimationTestCommon.cpp, CCLayerAnimationController.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563907</commentid>
    <comment_count>21</comment_count>
      <attachid>128547</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 21:30:54 -0800</bug_when>
    <thetext>Comment on attachment 128547
Patch

Clearing flags on attachment: 128547

Committed r108727: &lt;http://trac.webkit.org/changeset/108727&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563909</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 21:31:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124333</attachid>
            <date>2012-01-27 10:31:48 -0800</date>
            <delta_ts>2012-02-08 13:30:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77229-20120127133147.patch</filename>
            <type>text/plain</type>
            <size>32857</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggY2NkYTI5ZDY3
YjlkZDVjOGFiODViYmEyMGVkMmMyZGZhODU4YWVkMS4uNGUzNzA2M2VlOWM3ZWQ4NTRlMGIwNTU5
N2YwYzFjM2I4ZTRlMWY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzIzNSw2ICszMjM1LDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcAppbmRleCA5NTU2YmEwYjVm
ZjAzZmM3NmZiODg2ZjVlODYxNjkwMTI3YTRmNTMzLi4xMzM4NmVlODdiNjY3MmM5MWZhMTRmOTMz
MDhiZmE0MGI1NDNiYjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCkBA
IC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NBY3RpdmVBbmltYXRp
b246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUs
IEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorQ0NBY3RpdmVB
bmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4g
Y3VydmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkg
dGFyZ2V0UHJvcGVydHkpCiAgICAgOiBtX2FuaW1hdGlvbkN1cnZlKGN1cnZlKQorICAgICwgbV9u
YW1lKG5hbWUpCiAgICAgLCBtX2dyb3VwKGdyb3VwKQogICAgICwgbV90YXJnZXRQcm9wZXJ0eSh0
YXJnZXRQcm9wZXJ0eSkKICAgICAsIG1fcnVuU3RhdGUoV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSkKQEAgLTk3LDcgKzk4LDcgQEAgZG91YmxlIENDQWN0aXZlQW5pbWF0aW9uOjp0cmltVGlt
ZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25zdAogCiBQYXNzT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFkKCkKIHsK
LSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKGFkb3B0UHRyKG5ldyBDQ0Fj
dGl2ZUFuaW1hdGlvbihtX2FuaW1hdGlvbkN1cnZlLnJlbGVhc2UoKSwgbV9ncm91cCwgbV90YXJn
ZXRQcm9wZXJ0eSkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKGFk
b3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihtX2FuaW1hdGlvbkN1cnZlLnJlbGVhc2UoKSwg
bV9uYW1lLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOwogICAgIHRvUmV0dXJuLT5tX3J1
blN0YXRlID0gbV9ydW5TdGF0ZTsKICAgICB0b1JldHVybi0+bV9pdGVyYXRpb25zID0gbV9pdGVy
YXRpb25zOwogICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3Rp
dmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggNWZmZTU1MWE3OGVhNGYzMmFjMjM4ZjRhYmZh
NjgzODdjZmNiZjc0Zi4uMDIzMjdhYWNkNGQ5NmNjODM0MjJlMTE2YjU5MzgxNmFlM2JiMzNhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC0yNSw4ICsyNSwxMCBAQAogI2lm
bmRlZiBDQ0FjdGl2ZUFuaW1hdGlvbl9oCiAjZGVmaW5lIENDQWN0aXZlQW5pbWF0aW9uX2gKIAor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDEzICszOCwxNCBAQCBjbGFzcyBDQ0Fu
aW1hdGlvbkN1cnZlOwogLy8gU3BlY2lmaWNhbGx5LCB0aGUgYWZmZWN0ZWQgcHJvcGVydHksIHRo
ZSBydW4gc3RhdGUgKHBhdXNlZCwgZmluaXNoZWQsIGV0Yy4pLAogLy8gbG9vcCBjb3VudCwgbGFz
dCBwYXVzZSB0aW1lLCBhbmQgdGhlIHRvdGFsIHRpbWUgc3BlbnQgcGF1c2VkLgogY2xhc3MgQ0NB
Y3RpdmVBbmltYXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDQWN0aXZlQW5pbWF0
aW9uKTsKIHB1YmxpYzoKICAgICAvLyBBbmltYXRpb25zIHRoYXQgbXVzdCBiZSBydW4gdG9nZXRo
ZXIgYXJlIGNhbGxlZCAnZ3JvdXBlZCcgYW5kIGhhdmUgdGhlIHNhbWUgR3JvdXBJRAogICAgIC8v
IEdyb3VwZWQgYW5pbWF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBzdGFydCBhdCB0aGUgc2FtZSB0
aW1lIGFuZCBubyBvdGhlciBhbmltYXRpb25zCiAgICAgLy8gbWF5IGFuaW1hdGUgYW55IG9mIHRo
ZSBncm91cCdzIHRhcmdldCBwcm9wZXJ0aWVzIHVudGlsIGFsbCBhbmltYXRpb25zIGluIHRoZQog
ICAgIC8vIGdyb3VwIGhhdmUgZmluaXNoZWQgYW5pbWF0aW5nLiBOb3RlOiBhbiBhY3RpdmUgYW5p
bWF0aW9uJ3MgZ3JvdXAgaWQgYW5kIHRhcmdldAogICAgIC8vIHByb3BlcnR5IHVuaXF1ZWx5IGlk
ZW50aWZ5IHRoYXQgYW5pbWF0aW9uLgotICAgIHR5cGVkZWYgaW50IEdyb3VwSUQ7CisgICAgdHlw
ZWRlZiBzaXplX3QgR3JvdXBJRDsKIAogICAgIC8vIEFuaW1hdGlvbnMgYmVnaW4gaW4gb25lIG9m
IHRoZSAnd2FpdGluZycgc3RhdGVzLiBBbmltYXRpb25zIHdhaXRpbmcgZm9yIHRoZSBuZXh0IHRp
Y2sKICAgICAvLyB3aWxsIHN0YXJ0IHRoZSBuZXh0IHRpbWUgdGhlIGNvbnRyb2xsZXIgYW5pbWF0
ZXMuIEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGFyZ2V0CkBAIC02OCwxMyArNzEsMTQgQEAgcHVi
bGljOgogICAgICAgICBPcGFjaXR5CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2
ZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZShQYXNzT3duUHRyPENDQW5p
bWF0aW9uQ3VydmU+IGN1cnZlLCBjb25zdCBTdHJpbmcmIG5hbWUsIEdyb3VwSUQgZ3JvdXAsIFRh
cmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihjdXJ2ZSwgZ3JvdXAsIHRhcmdldFByb3BlcnR5KSk7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24oY3VydmUsIG5h
bWUsIGdyb3VwLCB0YXJnZXRQcm9wZXJ0eSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkNDQWN0
aXZlQW5pbWF0aW9uKCkgeyB9CiAKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCAgeyBy
ZXR1cm4gbV9uYW1lOyB9CiAgICAgR3JvdXBJRCBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3Jv
dXA7IH0KICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0UHJvcGVydHk7IH0KIApAQCAtMTA2LDkgKzExMCwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwdXNoUHJvcGVydGllc1RvKENDQWN0aXZlQW5pbWF0aW9uKikgY29uc3Q7CiAKIHByaXZh
dGU6Ci0gICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwg
R3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25DdXJ2ZT4sIGNvbnN0IFN0cmluZyYsIEdyb3VwSUQsIFRhcmdldFByb3Bl
cnR5KTsKIAogICAgIE93blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBtX2FuaW1hdGlvbkN1cnZlOwor
ICAgIFN0cmluZyBtX25hbWU7CiAgICAgR3JvdXBJRCBtX2dyb3VwOwogICAgIFRhcmdldFByb3Bl
cnR5IG1fdGFyZ2V0UHJvcGVydHk7CiAgICAgUnVuU3RhdGUgbV9ydW5TdGF0ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0
aW9uQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uQ3VydmUuaAppbmRleCBkZTk3ZTM4YzBhMjRlNzc3OGI4ZDk2ZGM5MGZlZjZl
Yzk5MzliYWUzLi44ZGUwYjQ0NWYyMGNjMWIzZTkwNTQ2Mjk2YTE0MzZmN2M5NDgyYTRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkN1cnZlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCkBAIC0yNSw2ICsyNSw5IEBACiAjaWZuZGVmIEND
QW5pbWF0aW9uQ3VydmVfaAogI2RlZmluZSBDQ0FuaW1hdGlvbkN1cnZlX2gKIAorLy8jaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlOwpAQCAtNjAsNyAr
NjMsNyBAQCBjbGFzcyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0
aW9uQ3VydmUgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUoKSB7IH0KIAotICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9ucyBnZXRWYWx1ZShkb3Vi
bGUgdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFs
dWUoZG91YmxlIHQsIGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkgY29uc3QgPSAwOwogCiAgICAg
Ly8gUGFydGlhbCBDQ0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRyYW5zZm9ybTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDFkMWQ1MzE4ZjNkMWE1N2I3MWQ3
ODE3MzQ4ZDdmNjMxYTdjZDNjNDEuLjRmYzY0MWFhMGYzZWZmZWVhMGRiZDg0NzM4NTM2YzhkMDI3
ZGQ1MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAKQEAgLTI4LDE1ICsyOCw1MCBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIiAv
LyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
IgotI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1ib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmlt
YXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZU9mZnNldCkKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBzaXplX3QgZ3JvdXBfaWQgPSAwOworCitz
dGF0aWMgU3RyaW5nIHByb3BlcnR5SWRUb1N0cmluZyhBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVy
dHkpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudC4KLSAgICByZXR1cm4gZmFsc2U7CisgICAg
c3dpdGNoIChwcm9wZXJ0eSkgeworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5z
Zm9ybToKKyAgICAgICAgcmV0dXJuICJ0cmFuc2Zvcm0iOworICAgIGNhc2UgQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHk6CisgICAgICAgIHJldHVybiAib3BhY2l0eSI7CisgICAgY2FzZSBBbmltYXRl
ZFByb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgICAgICByZXR1cm4gImJhY2tncm91bmRDb2xv
ciI7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5SW52YWxpZDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biAiIjsKK30KKworfSAvLyBuYW1lc3BhY2UKKworYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6
ZSYgLypib3hTaXplKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aW1lT2Zm
c2V0KQoreworICAgIGlmICghYW5pbWF0aW9uIHx8IGFuaW1hdGlvbi0+aXNFbXB0eU9yWmVyb0R1
cmF0aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGJvb2wgY3JlYXRlZEFuaW1hdGlvbnMgPSBmYWxzZTsKKyAgICBpZiAodmFsdWVMaXN0
LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKKyAgICAgIGNy
ZWF0ZWRBbmltYXRpb25zID0gY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uKHZhbHVlTGlzdCwgYW5p
bWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKyAgICBlbHNlIGlmICh2YWx1ZUxp
c3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkKKyAgICAgIGNyZWF0ZWRB
bmltYXRpb25zID0gY3JlYXRlT3BhY2l0eUFuaW1hdGlvbih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwg
YW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CisKKyAgICByZXR1cm4gY3JlYXRlZEFuaW1hdGlv
bnM7CiB9CiAKIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCkBAIC05Myw2
ICsxMjgsODYgQEAgYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlv
bnNUbyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwKICAgICByZXR1cm4gYWRkZWRBbmlt
YXRpb247CiB9CiAKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZVRyYW5z
Zm9ybUFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBB
bmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZU9mZnNldCkKK3sKKyAgICBBU1NFUlQodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisgICAgLy8gRklYTUU6IGhvdyBkbyB3ZSBkbyB0
aGlzIGlzIGNocm9taXVtPyBUTE9HKCJjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb24sIG5hbWUoJXMp
IGJlZ2luVGltZSglLjJmKSIsIGFuaW1hdGlvbk5hbWUubGF0aW4xKCkuZGF0YSgpLCB0aW1lT2Zm
c2V0KTsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IGRpcmVjdGlv
bnMuCisgICAgaWYgKGFuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb25BbHRlcm5hdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJ
WE1FOiBhZGQgc3VwcG9ydCBmb3IgZGVsYXkKKyAgICBpZiAoYW5pbWF0aW9uLT5kZWxheSgpID4g
MC4wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQg
Zm9yIGZpbGxzIGZvcndhcmRzIGFuZCBmaWxscyBiYWNrd2FyZHMKKyAgICBpZiAoYW5pbWF0aW9u
LT5maWxsc0ZvcndhcmRzKCkgfHwgYW5pbWF0aW9uLT5maWxsc0JhY2t3YXJkcygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gY3VydmUgPSBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVh
dGUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgKytp
KSB7CisgICAgICAgIFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBvcmlnaW5hbFZhbHVlID0gKFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlKil2YWx1ZUxpc3QuYXQoaSk7CisKKyAgICAgICAgLy8gRklY
TUU6IGFkZCBzdXBwb3J0IGZvciB0aW1pbmcgZnVuY3Rpb25zLgorICAgICAgICBpZiAob3JpZ2lu
YWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBjdXJ2ZS0+YWRkKENDVHJhbnNmb3JtS2V5ZnJhbWUob3JpZ2luYWxWYWx1ZS0+a2V5
VGltZSgpLCAqb3JpZ2luYWxWYWx1ZS0+dmFsdWUoKSkpOworICAgIH0KKworICAgIFN0cmluZyBu
YW1lID0gYW5pbWF0aW9uTmFtZS5pc0VtcHR5KCkgPyBwcm9wZXJ0eUlkVG9TdHJpbmcodmFsdWVM
aXN0LnByb3BlcnR5KCkpIDogYW5pbWF0aW9uTmFtZTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IGFuaW0gPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwg
bmFtZSwgZ3JvdXBfaWQrKywgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7CisKKyAgICBh
bmltLT5zZXRJdGVyYXRpb25zKGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSk7CisKKyAgICBt
X2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0ucmVsZWFzZSgpKTsKKworICAgIC8vIG5lZWRz
Tm90aWZ5Q2xpZW50KCk7IEZJWE1FOiAvLyB3aGF0IGlzIHRoaXMgZm9yPworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGVPcGFjaXR5
QW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
T2Zmc2V0KQoreworICAgIEFTU0VSVCh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFBy
b3BlcnR5T3BhY2l0eSk7CisgICAgLy8gRklYTUU6IGhvdyBkbyB3ZSBkbyB0aGlzIGlzIGNocm9t
aXVtPyBUTE9HKCJjcmVhdGVPcGFjaXR5QW5pbWF0aW9uLCBuYW1lKCVzKSBiZWdpblRpbWUoJS4y
ZikiLCBhbmltYXRpb25OYW1lLmxhdGluMSgpLmRhdGEoKSwgdGltZU9mZnNldCk7CisKKyAgICAv
LyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLgorICAgIGlmIChh
bmltYXRpb24tPmRpcmVjdGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0
ZXJuYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogYWRkIHN1cHBv
cnQgZm9yIGRlbGF5CisgICAgaWYgKGFuaW1hdGlvbi0+ZGVsYXkoKSA+IDAuMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBmaWxscyBmb3J3
YXJkcyBhbmQgZmlsbHMgYmFja3dhcmRzCisgICAgaWYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJk
cygpIHx8IGFuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgRmxvYXRBbmlt
YXRpb25WYWx1ZSogb3JpZ2luYWxWYWx1ZSA9IChGbG9hdEFuaW1hdGlvblZhbHVlKil2YWx1ZUxp
c3QuYXQoaSk7CisKKyAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciB0aW1pbmcgZnVu
Y3Rpb25zLgorICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjdXJ2ZS0+YWRkKENDRmxvYXRLZXlm
cmFtZShvcmlnaW5hbFZhbHVlLT5rZXlUaW1lKCksIG9yaWdpbmFsVmFsdWUtPnZhbHVlKCkpKTsK
KyAgICB9CisKKyAgICBTdHJpbmcgbmFtZSA9IGFuaW1hdGlvbk5hbWUuaXNFbXB0eSgpID8gcHJv
cGVydHlJZFRvU3RyaW5nKHZhbHVlTGlzdC5wcm9wZXJ0eSgpKSA6IGFuaW1hdGlvbk5hbWU7Cisg
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltID0gQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIG5hbWUsIGdyb3VwX2lkKyssIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0pOworCisgICAgYW5pbS0+c2V0SXRlcmF0aW9ucyhhbmltYXRpb24tPml0ZXJh
dGlvbkNvdW50KCkpOworCisgICAgbV9hY3RpdmVBbmltYXRpb25zLmFwcGVuZChhbmltLnJlbGVh
c2UoKSk7CisKKyAgICAvLyBuZWVkc05vdGlmeUNsaWVudCgpOyBGSVhNRTogLy8gd2hhdCBpcyB0
aGlzIGZvcj8KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRp
b246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJn
ZXRQcm9wZXJ0eSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oCmluZGV4IDUzYTlhNzk3MDk3ODk4ZWIzYjkzOGI5ZjEyMzRmMTZiYTAzMDA4NmIu
LjE5Yzk2MDE5NmYxODVjZmIxZmI2Y2U4OWYxOGNmNmYxMjA2ODVkNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtNDEsNiArNDEsNyBAQCBz
dHJ1Y3QgSW50U2l6ZTsKIGNsYXNzIEtleWZyYW1lVmFsdWVMaXN0OwogCiBjbGFzcyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIpOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoKQogICAgIHsKQEAgLTY2LDYgKzY3LDkgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpIHsgfQog
CisgICAgYm9vbCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBk
b3VibGUgLyp0aW1lT2Zmc2V0Ki8pOworICAgIGJvb2wgY3JlYXRlT3BhY2l0eUFuaW1hdGlvbihj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYg
LyphbmltYXRpb25OYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLyk7CisKICAgICBDQ0FjdGl2
ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElE
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwogICAgIHZvaWQgcmVtb3ZlKEND
QWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVy
dHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmNwcAppbmRleCA3YTAyYTVhNjg1YTVlNDY1ZTUzNDAwZWVkMGZiM2Q1MTc3NmIzZjVj
Li5lZTdlZWIxN2E3OWM3NGI5ODFiYjc0ZmI2NWI2ZWY5ZjBkMTRiMTQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKQEAgLTI2
LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5oIgogCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFu
c2Zvcm1PcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE5MywxNCArMTk0
LDExIEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9u
cyhkb3VibGUgbm93KQogCiAgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm06IHsKICAgICAgICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
KiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+YW5pbWF0
aW9uQ3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgICAgICAgICAgICAg
IGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtYXRyaXggPSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUo
dHJpbW1lZCwgbV9jbGllbnQtPmJvdW5kcygpKTsKICAgICAgICAgICAgICAgICBpZiAobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobm93KSkKICAgICAgICAgICAgICAgICAgICAg
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6Rmlu
aXNoZWQsIG5vdyk7CiAKLSAgICAgICAgICAgICAgICAvLyBEZWNpZGUgaGVyZSBpZiBhYnNvbHV0
ZSBvciByZWxhdGl2ZS4gQWJzb2x1dGUgZm9yIG5vdy4KLSAgICAgICAgICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0b0FwcGx5OwotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwbHko
RmxvYXRTaXplKCksIHRvQXBwbHkpOwotICAgICAgICAgICAgICAgIG1fY2xpZW50LT5zZXRUcmFu
c2Zvcm0odG9BcHBseSk7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldFRyYW5zZm9ybSht
YXRyaXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oCmluZGV4IGFl
NzA0ZDA0NzdlYmQxNzczMTc4YzFkNTJjMWQ3NDcxNGMxOGY2ZWIuLjc4YTU5ZmFlYmNkN2U5MDQ3
MWE1YWQzODE0ZWQzYmI0ZTIzOWZiNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
Y2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00OCw5ICs0
OSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpID0gMDsK
ICAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0
ID0gMDsKIH07CiAKIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKTsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw+IGNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKaW5kZXggNDhmODNkYjA1Zjg2NjZjMDQ2ZmVlMjU0Yjc1Njg5ZDA5ZWU5
MDhmOC4uNzNjMzNjOWE2NWU4NTdiMGU2ZTE0Njk5OTg0ZmM2OTc4NmIxNjg4NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oCkBAIC0xNTMsNyArMTUzLDggQEAgcHVibGljOgogICAgIENDUmVuZGVyU3Vy
ZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVy
U3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZh
Y2UqIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQogCi0gICAg
Y29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KKyAgICAv
LyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgaW1wbGVtZW50YXRpb24KKyAg
ICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRz
OyB9CiAgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgY29uc3QgSW50
U2l6ZSYgY29udGVudEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudEJvdW5kczsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlv
blRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlv
blRlc3QuY3BwCmluZGV4IDI2MWVkZmZmODUyZjMzYzEzYjQ5MjFiZTcwZTYwOWU0MmY1ZTJiOTMu
LjM2MzJmYWE3ZDBhYWZlYjJiYzZjZWIxYzExZTE0NWJhYzM0ZmQ1ZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAK
QEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3Vy
dmUpLCAiIiwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b1JldHVybi0+
c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlv
blRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25U
ZXN0Q29tbW9uLmgKaW5kZXggZjY1MTE3YmFmMGEwNTUyZjhiYTlmM2I0YTE2MzY3N2M2ZTk0OTBh
My4uZjY4MmViZWEyZDczMzQ0MmI3MTljNmY5YzYwYzcwNDIzNzkxMjc3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCkBA
IC0yNSw3ICsyNSw2IEBACiAjaWZuZGVmIENDQW5pbWF0aW9uVGVzdENvbW1vbl9oCiAjZGVmaW5l
IENDQW5pbWF0aW9uVGVzdENvbW1vbl9oCiAKLSNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0
VGVzdHMgewpAQCAtNDAsOSArMzksOSBAQCBjbGFzcyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbiA6
IHB1YmxpYyBXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKIHB1YmxpYzoKICAg
ICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJhdGlvbihk
dXJhdGlvbikgeyB9CiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25z
IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAorICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNpemUpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV2ViQ29yZTo6VHJhbnNmb3Jt
T3BlcmF0aW9ucygpOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgoKTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LmNwcAppbmRleCA2ZjI4NWYzNTIzMDViMmVjYTg2Y2JjMmNlMDkyOWFkMzY4MGYwMDJlLi5mYmZm
YjI2ODFmMjdiODJmYjRhMTYzNjkzNGVmNzBkMGUzMzdhMThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsVGVzdC5jcHAKQEAgLTQ1LDEyICs0NSwxOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5
OyB9CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0g
PSB0cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKIHByaXZhdGU6CiAgICAgZmxvYXQgbV9vcGFjaXR5Owog
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgIEludFNpemUgbV9ib3Vu
ZHM7CiB9OwogCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmlt
YXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50IGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCit7CisgICAgcmV0dXJuIENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsICIiLCBpZCwgcHJvcGVydHkpOworfQorCiAvLyBU
ZXN0cyB0aGF0IHRyYW5zaXRpb25pbmcgb3BhY2l0eSBmcm9tIDAgdG8gMSB3b3JrcyBhcyBleHBl
Y3RlZC4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFRy
YW5zaXRpb24pCiB7CkBAIC01OCw3ICs2NSw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgVHJpdmlhbFRyYW5zaXRpb24pCiAgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5y
ZWxlYXNlKCkpOwogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CkBAIC03Niw4ICs4Myw4IEBA
IFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVpbmcp
CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigK
ICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7
CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwg
MC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CkBAIC05NiwxMiArMTAzLDEyIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15
OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIo
CiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkp
OwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOwogICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEo
MCwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1h
dGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQu
cmVsZWFzZSgpKTsKIApAQCAtMTIwLDkgKzEyNyw5IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2NrZWQp
CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigK
ICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7
CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwg
MiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigx
KSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9s
bGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7CkBAIC0xNDYsOSArMTUzLDkgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiAgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9s
bGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0g
ICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEs
IDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIC8vIEFuaW1z
IHdpdGggaWQgMSBzaG91bGQgYm90aCBzdGFydCBub3cuCiAgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwKTsKQEAgLTE3Niw3ICsxODMsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1l
KDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwpAQCAtMTk5LDkgKzIw
Niw5IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVk
QW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigy
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0Fk
ZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDAp
OwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRk
LnJlbGVhc2UoKSk7CkBAIC0yMjksMTQgKzIzNiwxNCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5p
bQogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIo
CiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkp
OwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDIsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0
aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEp
OwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxl
ci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0
YXJ0IGltbWVkaWF0ZWx5LgogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CkBAIC0yNjQsNyAr
MjcxLDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFs
TG9vcGluZykKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250
cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgm
ZHVtbXkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAx
KSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OwogICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKDMpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0Fk
ZC5yZWxlYXNlKCkpOwogCkBAIC0zMDAsNyArMzA3LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCiAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlk
ID0gMTsKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
ICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQu
cmVsZWFzZSgpKTsKIApAQCAtMzM1LDcgKzM0Miw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsVGVzdCwgUGF1c2VSZXN1bWUpCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsK
LSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtMzY5LDkgKzM3
Niw5IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgQWJvcnRBR3Jv
dXBlZEFuaW1hdGlvbikKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpj
cmVhdGUoJmR1bW15KSk7CiAKICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAg
Y29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwg
aWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAx
LCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Ry
ZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJl
ZVN5bmNocm9uaXplclRlc3QuY3BwCmluZGV4IDE3Y2RmYzIxYzIzOGNmM2ZlMTAyOTQzMGRjY2Uz
MDQ1YmY2MWNiNmYuLjRhZjVkZmZjNGZhY2FiMTJlMjhjNGFiMWJiMTMzN2RhNDFhNDRmOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXpl
clRlc3QuY3BwCkBAIC0zMzMsNyArMzMzLDcgQEAgVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jTmV3QW5pbWF0aW9uKQogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVS
b290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290Lmdl
dCgpLCAwKTsKIAogICAgIC8vIEFkZCBhbmltYXRpb24gdG8gbWFpbiB0aHJlYWQgY29udHJvbGxl
ci4KLSAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3Rp
dmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSkt
PmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksICIiLCAwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOwogICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290Lmdl
dCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKQEAgLTM0Niw3ICszNDYsNyBAQCBURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNB
bmltYXRpb25Qcm9wZXJ0aWVzKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVS
b290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAKICAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5
ZXJUcmVlUm9vdC5nZXQoKSwgMCk7Ci0gICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRy
ZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlv
bjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxh
eWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAi
IiwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjY0xheWVyVHJlZVJvb3Qg
PSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCks
IGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJv
b3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CkBAIC0zNjcsNyArMzY3LDcgQEAgVEVTVF9GKFRyZWVTeW5j
aHJvbml6ZXJUZXN0LCBzeW5jQWJvcnRlZEFuaW1hdGlvbikKIAogICAgIC8vIFN5bmMgd2l0aCBu
byBhbmltYXRpb25zLgogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0g
VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAw
KTsKLSAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3Rp
dmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSkt
PmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksICIiLCAwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOwogICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290Lmdl
dCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKQEAgLTM4Niw3ICszODYsNyBAQCBURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmND
b21wbGV0ZWRBbmltYXRpb24pCiAKICAgICAvLyBTeW5jIHdpdGggbm8gYW5pbWF0aW9ucy4KICAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7Ci0gICAgZ2V0QW5pbWF0
aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFw
cGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmlt
YXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBnZXRB
bmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25z
KCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dEFuaW1hdGlvbkN1cnZlKCkpLCAiIiwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
ICAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0
KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJl
ZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126142</attachid>
            <date>2012-02-08 13:30:34 -0800</date>
            <delta_ts>2012-02-10 14:03:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77229-20120208163033.patch</filename>
            <type>text/plain</type>
            <size>28464</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2ODAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYzE4YTEwZmU4
ZmZiZGFiNjAzODg3ZDFmODQ4OGZmYzQwYmNlOTFlYS4uNTJjMjEwOWJiMTFmZTAzNTVhOWE2NjU5
ZGVkMWZjNGMyZDU5NTI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzI0MSw2ICszMjQxLDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcAppbmRleCAwMDA5Y2M4ODk4
M2EwNjU5YjM4YTY5M2E5NjljYTRjMDc3NjY1N2ExLi5kNjQ3NTVkZGNmOTA0ZDQ3ZGE5YmU4M2Q5
YTA0NzU2YWM1NmI1MjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCkBA
IC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NBY3RpdmVBbmltYXRp
b246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUs
IEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorQ0NBY3RpdmVB
bmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4g
Y3VydmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkg
dGFyZ2V0UHJvcGVydHkpCiAgICAgOiBtX2FuaW1hdGlvbkN1cnZlKGN1cnZlKQorICAgICwgbV9u
YW1lKG5hbWUpCiAgICAgLCBtX2dyb3VwKGdyb3VwKQogICAgICwgbV90YXJnZXRQcm9wZXJ0eSh0
YXJnZXRQcm9wZXJ0eSkKICAgICAsIG1fcnVuU3RhdGUoV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSkKQEAgLTExNCw3ICsxMTUsNyBAQCBkb3VibGUgQ0NBY3RpdmVBbmltYXRpb246OnRyaW1U
aW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0CiAKIFBhc3NPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IENDQWN0aXZlQW5pbWF0aW9uOjpjbG9uZUZvckltcGxUaHJlYWQoKSBj
b25zdAogewotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oYWRvcHRQdHIo
bmV3IENDQWN0aXZlQW5pbWF0aW9uKG1fYW5pbWF0aW9uQ3VydmUtPmNsb25lKCksIG1fZ3JvdXAs
IG1fdGFyZ2V0UHJvcGVydHkpKSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1Jl
dHVybihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9hbmltYXRpb25DdXJ2ZS0+Y2xv
bmUoKSwgbV9uYW1lLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOwogICAgIHRvUmV0dXJu
LT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKICAgICB0b1JldHVybi0+bV9pdGVyYXRpb25zID0g
bV9pdGVyYXRpb25zOwogICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggNjk0NDhlNTNiMjk1ZWViNDhkODEw
MzJhMzQ5ODNiNmYwN2U4NDAzZS4uZTFmMjViZTY0ZTY3ZjhhMTRhMjZlNTY4MmJhZjA5YjFkNjI2
NTRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTc5LDEzICs3OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIFRhcmdldFByb3BlcnR5IHRhcmdldFBy
b3BlcnR5OwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIEdyb3VwSUQgZ3Jv
dXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBj
dXJ2ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBHcm91cElEIGdyb3VwLCBUYXJnZXRQcm9wZXJ0eSB0
YXJnZXRQcm9wZXJ0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBY3Rp
dmVBbmltYXRpb24oY3VydmUsIGdyb3VwLCB0YXJnZXRQcm9wZXJ0eSkpOworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZlLCBuYW1lLCBncm91cCwgdGFy
Z2V0UHJvcGVydHkpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigp
OwogCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgIHsgcmV0dXJuIG1fbmFtZTsgfQog
ICAgIEdyb3VwSUQgZ3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwOyB9CiAgICAgVGFyZ2V0
UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFByb3BlcnR5
OyB9CiAKQEAgLTEyMSw5ICsxMjIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3luY2hyb25pemVQ
cm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0aW9uKik7CiAKIHByaXZhdGU6Ci0gICAgQ0NBY3RpdmVB
bmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwgR3JvdXBJRCwgVGFyZ2V0UHJv
cGVydHkpOworICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2
ZT4sIGNvbnN0IFN0cmluZyYsIEdyb3VwSUQsIFRhcmdldFByb3BlcnR5KTsKIAogICAgIE93blB0
cjxDQ0FuaW1hdGlvbkN1cnZlPiBtX2FuaW1hdGlvbkN1cnZlOworICAgIFN0cmluZyBtX25hbWU7
CiAgICAgR3JvdXBJRCBtX2dyb3VwOwogICAgIFRhcmdldFByb3BlcnR5IG1fdGFyZ2V0UHJvcGVy
dHk7CiAgICAgUnVuU3RhdGUgbV9ydW5TdGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU3Zjc4MzEzYmVkMThhYWZkNmQ4
ZWU3MzY0Nzc5MDUxMWRiNDIzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3Bw
CkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSB7CisKK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENDS2V5ZnJhbWVkRmxv
YXRBbmltYXRpb25DdXJ2ZQorLy8KKwordm9pZCBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmU6OmFkZChjb25zdCBDQ0Zsb2F0S2V5ZnJhbWUmIGtleWZyYW1lKQoreworICAgIHNpemVfdCBp
ID0gMDsKKyAgICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChrZXlmcmFtZS50aW1lID09IG1fa2V5ZnJhbWVzW2ldLnRpbWUpIHsKKyAgICAgICAgICAg
IC8vIHJlcGxhY2UgdGhlIGtleWZyYW1lLgorICAgICAgICAgICAgbV9rZXlmcmFtZXNbaV0gPSBr
ZXlmcmFtZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChr
ZXlmcmFtZS50aW1lIDwgbV9rZXlmcmFtZXNbaV0udGltZSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBtX2tleWZyYW1lcy5pbnNlcnQoaSwga2V5ZnJhbWUpOworfQorCitkb3VibGUg
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2tleWZyYW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBt
X2tleWZyYW1lcy5sYXN0KCkudGltZSAtIG1fa2V5ZnJhbWVzLmZpcnN0KCkudGltZTsKK30KKwor
UGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmU6OmNsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZSgqdGhpcykpOworfQorCitmbG9hdCBDQ0tleWZyYW1lZEZsb2F0
QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0KSBjb25zdAoreworICAgIGlmICghbV9r
ZXlmcmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICh0IDw9IG1fa2V5
ZnJhbWVzLmZpcnN0KCkudGltZSkKKyAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmZpcnN0KCku
dmFsdWU7CisKKyAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCkudGltZSkKKyAgICAgICAg
cmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS52YWx1ZTsKKworICAgIHNpemVfdCBpID0gMDsKKyAg
ICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBpZiAo
dCA8IG1fa2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGZsb2F0IHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCh0IC0gbV9rZXlmcmFtZXNb
aV0udGltZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFtZXNbaV0udGltZSkp
OworICAgIC8vIEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rpb24gaGVyZS4KKyAgICByZXR1cm4g
bV9rZXlmcmFtZXNbaV0udmFsdWUgKyAobV9rZXlmcmFtZXNbaSsxXS52YWx1ZSAtIG1fa2V5ZnJh
bWVzW2ldLnZhbHVlKSAqIHByb2dyZXNzOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZQorLy8KKwordm9pZCBDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgQ0NUcmFuc2Zvcm1LZXlmcmFt
ZSYga2V5ZnJhbWUpCit7CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoOyBpIDwgbV9rZXlm
cmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGtleWZyYW1lLnRpbWUgPT0gbV9rZXlm
cmFtZXNbaV0udGltZSkgeworICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUga2V5ZnJhbWUuCisg
ICAgICAgICAgICBtX2tleWZyYW1lc1tpXSA9IGtleWZyYW1lOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleWZyYW1lLnRpbWUgPCBtX2tleWZyYW1lc1tp
XS50aW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fa2V5ZnJhbWVzLmluc2Vy
dChpLCBrZXlmcmFtZSk7Cit9CisKK2RvdWJsZSBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2tleWZyYW1lcy5zaXplKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0KCkudGltZSAt
IG1fa2V5ZnJhbWVzLmZpcnN0KCkudGltZTsKK30KKworUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1
cnZlPiBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjbG9uZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKCp0aGlzKSk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJhbWVkVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBsYXll
clNpemUpIGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtTWF0cml4
OworCisgICAgaWYgKCFtX2tleWZyYW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiB0cmFuc2Zv
cm1NYXRyaXg7CisKKyAgICBpZiAodCA8PSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWUpIHsKKyAg
ICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS52YWx1ZS5hcHBseShsYXllclNpemUsIHRyYW5zZm9y
bU1hdHJpeCk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm1NYXRyaXg7CisgICAgfQorCisgICAg
aWYgKHQgPj0gbV9rZXlmcmFtZXMubGFzdCgpLnRpbWUpIHsKKyAgICAgICAgbV9rZXlmcmFtZXMu
bGFzdCgpLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAg
cmV0dXJuIHRyYW5zZm9ybU1hdHJpeDsKKyAgICB9CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAg
Zm9yICg7IGkgPCBtX2tleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgaWYgKHQg
PCBtX2tleWZyYW1lc1tpKzFdLnRpbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogYXBwbHkgdGltaW5nIGZ1bmN0aW9uIGhlcmUuCisgICAgZG91YmxlIHByb2dy
ZXNzID0gKHQgLSBtX2tleWZyYW1lc1tpXS50aW1lKSAvIChtX2tleWZyYW1lc1tpKzFdLnRpbWUg
LSBtX2tleWZyYW1lc1tpXS50aW1lKTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYWRhcHRl
ZCBmcm9tIEFuZHJvaWRBbmltYXRpb24KKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBzaXpl
X3QgZnJvbVNpemUgPSBtX2tleWZyYW1lc1tpXS52YWx1ZS5zaXplKCk7CisgICAgaWYgKGZyb21T
aXplKSB7CisgICAgICAgIGlmIChtX2tleWZyYW1lc1tpKzFdLnZhbHVlLnNpemUoKSAhPSBmcm9t
U2l6ZSkKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBmcm9tU2l6ZSAmJiB2YWxpZDsgaisrKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0t
PmlzU2FtZVR5cGUoKm1fa2V5ZnJhbWVzW2krMV0udmFsdWUub3BlcmF0aW9ucygpW2pdKSkKKyAg
ICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICh2YWxpZCkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsg
aSA8IG1fa2V5ZnJhbWVzW2krMV0udmFsdWUuc2l6ZSgpOyArK2opCisgICAgICAgICAgICBtX2tl
eWZyYW1lc1tpKzFdLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS0+YmxlbmQobV9rZXlmcmFtZXNbaV0u
dmFsdWUuYXQoaiksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3JtTWF0cml4LCBsYXllclNpemUp
OworICAgIH0gZWxzZSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNvdXJjZTsKKwor
ICAgICAgICBtX2tleWZyYW1lc1tpXS52YWx1ZS5hcHBseShsYXllclNpemUsIHNvdXJjZSk7Cisg
ICAgICAgIG1fa2V5ZnJhbWVzW2krMV0udmFsdWUuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1N
YXRyaXgpOworCisgICAgICAgIHRyYW5zZm9ybU1hdHJpeC5ibGVuZChzb3VyY2UsIHByb2dyZXNz
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTJkMzEwYzU4NjNkNmQ0MTNhNjA0YjI1YWYyNWM2MzQ0MGU5NjA3MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaApAQCAtMCwwICsxLDExNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKKyNkZWZpbmUg
Q0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RydWN0IENDRmxvYXRLZXlmcmFtZSB7CisgICAgQ0NGbG9hdEtleWZyYW1lKGRv
dWJsZSB0aW1lLCBmbG9hdCB2YWx1ZSkKKyAgICAgICAgOiB0aW1lKHRpbWUpCisgICAgICAgICwg
dmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICBkb3VibGUgdGltZTsKKyAgICBmbG9hdCB2
YWx1ZTsKK307CisKK3N0cnVjdCBDQ1RyYW5zZm9ybUtleWZyYW1lIHsKKyAgICBDQ1RyYW5zZm9y
bUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSkK
KyAgICAgICAgOiB0aW1lKHRpbWUpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKyAgICBkb3VibGUgdGltZTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHZhbHVlOworfTsK
KworY2xhc3MgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDRmxvYXRB
bmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUpOworICAgIH0KKworICAg
IHZpcnR1YWwgfkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgfQorCisgICAgdm9p
ZCBhZGQoY29uc3QgQ0NGbG9hdEtleWZyYW1lJik7CisgICAgdm9pZCBjbGVhcigpIHsgbV9rZXlm
cmFtZXMuY2xlYXIoKTsgfQorCisgICAgY29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4mIGtl
eWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzOyB9CisKKyAgICAvLyBDQ0FuaW1h
dGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBj
b25zdDsKKworICAgIC8vIENDRmxvYXRBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlvbgorICAg
IHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0OworCitwcml2YXRlOgorICAg
IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgfQorCisgICAgLy8gQWx3YXlzIHNv
cnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHRpbWUuIE5vIHR3byBrZXlmcmFtZXMgaGF2ZSB0
aGUKKyAgICAvLyBzYW1lIHRpbWUuCisgICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4gbV9rZXlm
cmFtZXM7Cit9OworCitjbGFzcyBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDog
cHVibGljIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUoKSB7IH0KKworICAgIHZvaWQgYWRkKGNvbnN0IENDVHJhbnNmb3JtS2V5
ZnJhbWUmKTsKKyAgICB2b2lkIGNsZWFyKCkgeyBtX2tleWZyYW1lcy5jbGVhcigpOyB9CisKKyAg
ICBjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcygpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5ZnJhbWVzOyB9CisKKyAgICAvLyBDQ0FuaW1hdGlvbkN1cnZlIGltcGxlbWVu
dGF0aW9uCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKKworICAgIC8vIEND
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIHsg
fQorCisgICAgLy8gQWx3YXlzIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHRpbWUuIE5v
IHR3byBrZXlmcmFtZXMgaGF2ZSB0aGUKKyAgICAvLyBzYW1lIHRpbWUuCisgICAgVmVjdG9yPEND
VHJhbnNmb3JtS2V5ZnJhbWU+IG1fa2V5ZnJhbWVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYWJhNTUwMzg3
ZTE2NzU4ZWYyMTg0ZTRlMjI3YTU4MGM4MjI2MDJmNi4uZjczZDBhNDk1ZjhiNTlkNjNhZWEwNzVk
MTFlYWJlOGY1ZTU1MDk2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmNwcApAQCAtMjgsMTggKzI4LDUwIEBACiAKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiIC8vIGZvciBLZXlmcmFtZVZhbHVlTGlzdAogI2luY2x1ZGUgImNjL0NDQWN0aXZl
QW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKwor
c3RhdGljIHNpemVfdCBncm91cElEID0gMDsKKworc3RhdGljIFN0cmluZyBwcm9wZXJ0eUlkVG9T
dHJpbmcoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KQoreworICAgIHN3aXRjaCAocHJvcGVy
dHkpIHsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06CisgICAgICAg
IHJldHVybiAidHJhbnNmb3JtIjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5Ogor
ICAgICAgICByZXR1cm4gIm9wYWNpdHkiOworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvcjoKKyAgICAgICAgcmV0dXJuICJiYWNrZ3JvdW5kQ29sb3IiOworICAgIGNhc2Ug
QW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7Cit9CisKK30g
Ly8gbmFtZXNwYWNlCisKIGJvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIC8qYm94U2l6ZSov
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFhbmltYXRpb24gfHwgYW5pbWF0aW9uLT5pc0VtcHR5T3Ja
ZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYm9vbCBjcmVhdGVkQW5pbWF0aW9ucyA9IGZhbHNlOworICAgIGlmICh2YWx1
ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAg
ICAgY3JlYXRlZEFuaW1hdGlvbnMgPSBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb24odmFsdWVMaXN0
LCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAgIGVsc2UgaWYgKHZh
bHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQorICAgICAgY3Jl
YXRlZEFuaW1hdGlvbnMgPSBjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKHZhbHVlTGlzdCwgYW5pbWF0
aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKworICAgIHJldHVybiBjcmVhdGVkQW5p
bWF0aW9uczsKIH0KIAogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmlt
YXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKQEAg
LTExMyw2ICsxNDUsODYgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFu
aW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2wKICAgICB9CiB9CiAKK2Jv
b2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbihj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sK
KyAgICBBU1NFUlQodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSk7CisgICAgLy8gRklYTUU6IGhvdyBkbyB3ZSBkbyB0aGlzIGlzIGNocm9taXVt
PyBUTE9HKCJjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb24sIG5hbWUoJXMpIGJlZ2luVGltZSglLjJm
KSIsIGFuaW1hdGlvbk5hbWUubGF0aW4xKCkuZGF0YSgpLCB0aW1lT2Zmc2V0KTsKKworICAgIC8v
IEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMuCisgICAgaWYgKGFu
aW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRl
cm5hdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9y
dCBmb3IgZGVsYXkKKyAgICBpZiAoYW5pbWF0aW9uLT5kZWxheSgpID4gMC4wKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGZpbGxzIGZvcndh
cmRzIGFuZCBmaWxscyBiYWNrd2FyZHMKKyAgICBpZiAoYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRz
KCkgfHwgYW5pbWF0aW9uLT5maWxsc0JhY2t3YXJkcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUg
PSBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlKiBvcmlnaW5hbFZhbHVlID0gKFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKil2YWx1ZUxpc3QuYXQoaSk7CisKKyAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0
IGZvciB0aW1pbmcgZnVuY3Rpb25zLgorICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZS0+dGltaW5n
RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjdXJ2ZS0+
YWRkKENDVHJhbnNmb3JtS2V5ZnJhbWUob3JpZ2luYWxWYWx1ZS0+a2V5VGltZSgpLCAqb3JpZ2lu
YWxWYWx1ZS0+dmFsdWUoKSkpOworICAgIH0KKworICAgIFN0cmluZyBuYW1lID0gYW5pbWF0aW9u
TmFtZS5pc0VtcHR5KCkgPyBwcm9wZXJ0eUlkVG9TdHJpbmcodmFsdWVMaXN0LnByb3BlcnR5KCkp
IDogYW5pbWF0aW9uTmFtZTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0gPSBD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgbmFtZSwgZ3JvdXBJRCsr
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKKworICAgIGFuaW0tPnNldEl0ZXJhdGlv
bnMoYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKKworICAgIG1fYWN0aXZlQW5pbWF0aW9u
cy5hcHBlbmQoYW5pbS5yZWxlYXNlKCkpOworCisgICAgLy8gbmVlZHNOb3RpZnlDbGllbnQoKTsg
RklYTUU6IC8vIHdoYXQgaXMgdGhpcyBmb3I/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZU9wYWNpdHlBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24s
IGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAg
QVNTRVJUKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsK
KyAgICAvLyBGSVhNRTogaG93IGRvIHdlIGRvIHRoaXMgaXMgY2hyb21pdW0/IFRMT0coImNyZWF0
ZU9wYWNpdHlBbmltYXRpb24sIG5hbWUoJXMpIGJlZ2luVGltZSglLjJmKSIsIGFuaW1hdGlvbk5h
bWUubGF0aW4xKCkuZGF0YSgpLCB0aW1lT2Zmc2V0KTsKKworICAgIC8vIEZJWE1FOiBhZGQgc3Vw
cG9ydCBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMuCisgICAgaWYgKGFuaW1hdGlvbi0+ZGlyZWN0
aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGVsYXkKKyAg
ICBpZiAoYW5pbWF0aW9uLT5kZWxheSgpID4gMC4wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGZpbGxzIGZvcndhcmRzIGFuZCBmaWxscyBi
YWNrd2FyZHMKKyAgICBpZiAoYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkgfHwgYW5pbWF0aW9u
LT5maWxsc0JhY2t3YXJkcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBPd25QdHI8
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IENDS2V5ZnJhbWVkRmxvYXRB
bmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZh
bHVlTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICBGbG9hdEFuaW1hdGlvblZhbHVlKiBvcmln
aW5hbFZhbHVlID0gKEZsb2F0QW5pbWF0aW9uVmFsdWUqKXZhbHVlTGlzdC5hdChpKTsKKworICAg
ICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHRpbWluZyBmdW5jdGlvbnMuCisgICAgICAg
IGlmIChvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGN1cnZlLT5hZGQoQ0NGbG9hdEtleWZyYW1lKG9yaWdpbmFsVmFs
dWUtPmtleVRpbWUoKSwgb3JpZ2luYWxWYWx1ZS0+dmFsdWUoKSkpOworICAgIH0KKworICAgIFN0
cmluZyBuYW1lID0gYW5pbWF0aW9uTmFtZS5pc0VtcHR5KCkgPyBwcm9wZXJ0eUlkVG9TdHJpbmco
dmFsdWVMaXN0LnByb3BlcnR5KCkpIDogYW5pbWF0aW9uTmFtZTsKKyAgICBPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+IGFuaW0gPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVh
c2UoKSwgbmFtZSwgZ3JvdXBJRCsrLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKKwor
ICAgIGFuaW0tPnNldEl0ZXJhdGlvbnMoYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKKwor
ICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbS5yZWxlYXNlKCkpOworCisgICAgLy8g
bmVlZHNOb3RpZnlDbGllbnQoKTsgRklYTUU6IC8vIHdoYXQgaXMgdGhpcyBmb3I/CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3Vw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiB7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAppbmRleCBk
Y2E5NjA3ZTk4MTQ2YTZiZDY1NTAzZTc0ZjEwNGVhMzgwYzQxODc5Li42YzM5YTgwMWJlMTZkNTk5
OTM1N2M0OTU3Y2U4NWNkODNkNzVjOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmgKQEAgLTczLDYgKzczLDkgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKik7CiAgICAgdm9pZCBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKIAorICAgIGJvb2wgY3JlYXRlVHJhbnNmb3JtQW5p
bWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgYm9vbCBjcmVh
dGVPcGFjaXR5QW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0
aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7CisK
ICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0
aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwogICAgIHZv
aWQgcmVtb3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CmluZGV4IDk2MTcyNzMyNzFiMjg4YzIxOWQ0MWE3MGZlOWVmNjhkNmFlOGU0ZjYuLjk3YWYwOGRl
ZGI2YzhjMjI3MThhMzc1ODUzZThjMjllZmY4ZTcxMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC01NzYsOSArNTc2LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjphbmltYXRlTGF5ZXJzKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpCiAgICAgbV9u
ZWVkc0FuaW1hdGVMYXllcnMgPSBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVySW1w
bC5nZXQoKSwgZnJhbWVCZWdpblRpbWVTZWNzLCByZXN1bHRzLmdldCgpKTsKICAgICBpZiAoIXJl
c3VsdHMtPnN0YXJ0ZWRBbmltYXRpb25zKCkuaXNFbXB0eSgpKQogICAgICAgICBtX2NsaWVudC0+
cHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChyZXN1bHRzLnJlbGVh
c2UoKSk7CisKICAgICBpZiAobV9uZWVkc0FuaW1hdGVMYXllcnMpCiAgICAgICAgIG1fY2xpZW50
LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVB
bmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVB
bmltYXRpb25UZXN0LmNwcAppbmRleCAyNjFlZGZmZjg1MmYzM2MxM2I0OTIxYmU3MGU2MDllNDJm
NWUyYjkzLi4zNjMyZmFhN2QwYWFmZWIyYmM2Y2ViMWMxMWUxNDViYWMzNGZkNWQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRl
c3QuY3BwCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSB7CiAKIFBhc3NPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihpbnQgaXRlcmF0aW9ucykKIHsKLSAg
ICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0
dXJuKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1h
dGlvbkN1cnZlKSwgIiIsIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9S
ZXR1cm4tPnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRvUmV0dXJuLnJl
bGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCmluZGV4IDUy
YWMzOWY0NWRhNjBmNGMwY2E5MjRmZTUyZWU3MTk2YTI3MDViMDEuLjlkYjllNDJiYTg4ZmQ5ZjQz
MzE4NWFhNzY5MWY5YjNkNGY4ODhjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LmNwcApAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogCiBQYXNzT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1
cnZlPiBjdXJ2ZSwgaW50IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJv
cGVydHkpCiB7Ci0gICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIGlk
LCBwcm9wZXJ0eSk7CisgICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUs
ICIiLCBpZCwgcHJvcGVydHkpOwogfQogCiAvLyBUZXN0cyB0aGF0IHRyYW5zaXRpb25pbmcgb3Bh
Y2l0eSBmcm9tIDAgdG8gMSB3b3JrcyBhcyBleHBlY3RlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGRmZDE1MzQx
YTZhYzVhMjQ5ZTE0OGE5MTdmMjNkZDU5NWE5NWExNWUuLjJmOTgzY2JjYThkMDQwZWMxNDUxNTc0
OThjZjFhZmY5NjQ4N2M2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtNjYsNiArNjYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYsIGZsb2F0
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdp
blRpbWUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KIH07CiAKIC8vIEFkYXB0cyBDQ0xheWVyVHJlZUhv
c3RJbXBsIGZvciB0ZXN0LiBSdW5zIHJlYWwgY29kZSwgdGhlbiBpbnZva2VzIHRlc3QgaG9va3Mu
CkBAIC0xNTMsNyArMTU0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94
U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgdGltZU9mZnNldCkKICAgICB7Ci0gICAgICAgIGFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLjAsIDEuMGYsIDAuMGYpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICAgICAgYWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEuMCwgMS4wZiwgMC4wZikpLCAiIiwg
MCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5
bmNocm9uaXplclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3lu
Y2hyb25pemVyVGVzdC5jcHAKaW5kZXggODgzOGJlOTY3MTE5ZGI1YmUyN2Y1ZThlZGYxNGJjNTE5
NWFmNjE1NC4uZDUyZjhhNTdlOTkwYzUyM2E3NTk2YzIzZWY2ZWRiMjRlNWNlOTllOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVz
dC5jcHAKQEAgLTMzNCw3ICszMzQsNyBAQCBURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5
bmNOZXdBbmltYXRpb24pCiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3Qg
PSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCks
IDApOwogCiAgICAgLy8gQWRkIGFuaW1hdGlvbiB0byBtYWluIHRocmVhZCBjb250cm9sbGVyLgot
ICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFu
aW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0
aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgIiIsIDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkp
OwogCiAgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVy
KCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwpA
QCAtMzQ3LDcgKzM0Nyw3IEBAIFRFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0FuaW1h
dGlvblByb3BlcnRpZXMpCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3Qg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKIAogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NM
YXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRy
ZWVSb290LmdldCgpLCAwKTsKLSAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJv
b3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJU
cmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksICIiLCAw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NM
YXllclRyZWVSb290LmdldCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKQEAgLTM2OCw3ICszNjgsNyBAQCBURVNUX0YoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNBYm9ydGVkQW5pbWF0aW9uKQogCiAgICAgLy8gU3luYyB3aXRoIG5vIGFu
aW1hdGlvbnMuCiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOwot
ICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFu
aW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0
aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgIiIsIDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkp
OwogCiAgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVy
KCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwpA
QCAtMzg3LDcgKzM4Nyw3IEBAIFRFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0NvbXBs
ZXRlZEFuaW1hdGlvbikKIAogICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgogICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKLSAgICBnZXRBbmltYXRpb25D
b250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5k
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlv
bkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGdldEFuaW1h
dGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5h
cHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5p
bWF0aW9uQ3VydmUoKSksICIiLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAg
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwg
Y2NMYXllclRyZWVSb290LmdldCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9v
dC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126579</attachid>
            <date>2012-02-10 14:03:42 -0800</date>
            <delta_ts>2012-02-10 15:02:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77229-20120210170341.patch</filename>
            <type>text/plain</type>
            <size>46508</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM1NTg5MTgyZThlOTIw
MjUxNGEwMDQzZWJiMDM2ZGRiNGFlZGM4Ni4uYmEwMzFmNGMzNTJmZmYxZmNlOTcxYjg1OTBkNmZj
YTliNjcwMzEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0wMi0wOCAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIElt
cGxlbWVudCBrZXlmcmFtZWQgYW5pbWF0aW9ucyBmb3IgdGhlIGNjIHRocmVhZC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09Q
UyEpCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NBY3RpdmVBbmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDQWN0aXZlQW5pbWF0aW9uOjpjbG9uZUZvckltcGxUaHJlYWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
QWN0aXZlQW5pbWF0aW9uOjpuYW1lKToKKyAgICAgICAgKENDQWN0aXZlQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjbG9uZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpkdXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpjbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpnZXRWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEtleWZyYW1lOjpDQ0Zsb2F0S2V5ZnJhbWUp
OgorICAgICAgICAoQ0NGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtS2V5ZnJhbWU6OkNDVHJhbnNmb3JtS2V5ZnJhbWUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSk6CisgICAgICAgIChDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjp+Q0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjprZXlmcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmUpOgorICAgICAgICAoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
fkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6a2V5ZnJhbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5
ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZVRyYW5zZm9y
bUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5oOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisKKzIw
MTItMDItMDggIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBJbXBsZW1lbnQga2V5ZnJhbWVkIGFuaW1hdGlvbnMgZm9yIHRoZSBjYyB0aHJl
YWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIy
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6bmFtZSk6CisgICAgICAgIChDQ0FjdGl2ZUFu
aW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmFkZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpnZXRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6Q0NG
bG9hdEtleWZyYW1lKToKKyAgICAgICAgKENDRmxvYXRLZXlmcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAgICAg
KENDVHJhbnNmb3JtS2V5ZnJhbWUpOgorICAgICAgICAoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6fkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6a2V5ZnJhbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6Omtl
eWZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpj
cmVhdGVUcmFuc2Zvcm1BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlT3BhY2l0eUFuaW1hdGlv
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVM
YXllcnMpOgorCiAyMDEyLTAyLTAzICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtjaHJvbWl1bV0gUGx1bWIgZnJvbSBHcmFwaGljc0xheWVyIHRvIHRoZSBj
YyB0aHJlYWQgYW5pbWF0aW9uIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGIy
ZTc3MWMyMmU4NGE0MTBlZmEwYmFmODkyOGFjYTdhMWQ1ZTRhNi4uYTMzNmNkNTI5MjkxZjRiYTYy
ODk0Njk3ZWYxOWQ4ZGRkNDhkMmQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxMi0wMi0wOCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBrZXlmcmFtZWQgYW5pbWF0aW9ucyBm
b3IgdGhlIGNjIHRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc3MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVh
dGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEhvb2tzOjpzY2hlZHVsZUNvbXBvc2l0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRp
b24pOgorICAgICAgICAqIHRlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKworMjAxMi0w
Mi0wOCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEltcGxlbWVudCBrZXlmcmFtZWQgYW5pbWF0aW9ucyBmb3IgdGhlIGNjIHRocmVhZC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9D
Q0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWN0aXZl
QW5pbWF0aW9uKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3RpdmVBbmltYXRpb24p
OgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdEhvb2tzOjpzY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAqIHRl
c3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKwogMjAxMi0wMi0wMyAgSWFuIFZvbGxpY2sg
IDx2b2xsaWNrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFBsdW1iIGZyb20g
R3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNzgyNGRkMWIyZjNiNzM5M2ZlNWM1Y2M5NzEwM2IyZGEyNDA3NTBmZi4uMDBjMjg5
ZjNiNDg1NzRmMjBlMjkyOWY2ODAwOWRhNjY4ZjAwZjYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzI0Myw2ICszMjQzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNw
cAppbmRleCAwMDA5Y2M4ODk4M2EwNjU5YjM4YTY5M2E5NjljYTRjMDc3NjY1N2ExLi5kNjQ3NTVk
ZGNmOTA0ZDQ3ZGE5YmU4M2Q5YTA0NzU2YWM1NmI1MjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3Rp
dmVBbmltYXRpb24uY3BwCkBAIC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotQ0NBY3RpdmVBbmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmlt
YXRpb25DdXJ2ZT4gY3VydmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFBy
b3BlcnR5KQorQ0NBY3RpdmVBbmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8
Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgR3JvdXBJRCBncm91
cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiAgICAgOiBtX2FuaW1hdGlvbkN1cnZl
KGN1cnZlKQorICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2dyb3VwKGdyb3VwKQogICAgICwg
bV90YXJnZXRQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0eSkKICAgICAsIG1fcnVuU3RhdGUoV2FpdGlu
Z0ZvclRhcmdldEF2YWlsYWJpbGl0eSkKQEAgLTExNCw3ICsxMTUsNyBAQCBkb3VibGUgQ0NBY3Rp
dmVBbmltYXRpb246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0
CiAKIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IENDQWN0aXZlQW5pbWF0aW9uOjpjbG9u
ZUZvckltcGxUaHJlYWQoKSBjb25zdAogewotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9SZXR1cm4oYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKG1fYW5pbWF0aW9uQ3VydmUt
PmNsb25lKCksIG1fZ3JvdXAsIG1fdGFyZ2V0UHJvcGVydHkpKSk7CisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b1JldHVybihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9h
bmltYXRpb25DdXJ2ZS0+Y2xvbmUoKSwgbV9uYW1lLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5
KSkpOwogICAgIHRvUmV0dXJuLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKICAgICB0b1JldHVy
bi0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOwogICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGlt
ZSA9IG1fc3RhcnRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggNjk0
NDhlNTNiMjk1ZWViNDhkODEwMzJhMzQ5ODNiNmYwN2U4NDAzZS4uZTFmMjViZTY0ZTY3ZjhhMTRh
MjZlNTY4MmJhZjA5YjFkNjI2NTRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTc5LDEzICs3OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIFRhcmdl
dFByb3BlcnR5IHRhcmdldFByb3BlcnR5OwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4g
Y3VydmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBHcm91cElEIGdyb3Vw
LCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24oY3VydmUsIGdyb3VwLCB0YXJnZXRQcm9wZXJ0
eSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZl
LCBuYW1lLCBncm91cCwgdGFyZ2V0UHJvcGVydHkpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5D
Q0FjdGl2ZUFuaW1hdGlvbigpOwogCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgIHsg
cmV0dXJuIG1fbmFtZTsgfQogICAgIEdyb3VwSUQgZ3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2dy
b3VwOyB9CiAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkoKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldFByb3BlcnR5OyB9CiAKQEAgLTEyMSw5ICsxMjIsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0aW9uKik7CiAKIHByaXZh
dGU6Ci0gICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwg
R3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25DdXJ2ZT4sIGNvbnN0IFN0cmluZyYsIEdyb3VwSUQsIFRhcmdldFByb3Bl
cnR5KTsKIAogICAgIE93blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBtX2FuaW1hdGlvbkN1cnZlOwor
ICAgIFN0cmluZyBtX25hbWU7CiAgICAgR3JvdXBJRCBtX2dyb3VwOwogICAgIFRhcmdldFByb3Bl
cnR5IG1fdGFyZ2V0UHJvcGVydHk7CiAgICAgUnVuU3RhdGUgbV9ydW5TdGF0ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjc3
YWMzYWNlYzA4NDcwZjBmNWQ4YTQ3MjUyMWJhY2RkOGVhZDk3MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVk
QW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmUoY29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4mIGtleWZyYW1lcykKKyAgICA6IG1f
a2V5ZnJhbWVzKGtleWZyYW1lcykKK3sKKyAgICBtX3ZhbGlkID0ga2V5ZnJhbWVzQXJlU29ydGVk
KCkgJiYgbV9rZXlmcmFtZXMuc2l6ZSgpOworICAgIEFTU0VSVChtX3ZhbGlkKTsKK30KKworQ0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjp+Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlKCkgeyB9CisKK2RvdWJsZSBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmR1cmF0
aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdmFsaWQpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS50aW1lIC0gbV9rZXlmcmFtZXMuZmlyc3QoKS50
aW1lOworfQorCitQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxvYXRB
bmltYXRpb25DdXJ2ZTo6Y2xvbmUoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCp0aGlzKSk7Cit9CisKK2Zsb2F0IENDS2V5
ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX3ZhbGlkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICh0IDw9IG1fa2V5
ZnJhbWVzLmZpcnN0KCkudGltZSkKKyAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmZpcnN0KCku
dmFsdWU7CisKKyAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCkudGltZSkKKyAgICAgICAg
cmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS52YWx1ZTsKKworICAgIHNpemVfdCBpID0gMDsKKyAg
ICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBpZiAo
dCA8IG1fa2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGZsb2F0IHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCh0IC0gbV9rZXlmcmFtZXNb
aV0udGltZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFtZXNbaV0udGltZSkp
OworICAgIC8vIEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rpb24gaGVyZS4KKyAgICByZXR1cm4g
bV9rZXlmcmFtZXNbaV0udmFsdWUgKyAobV9rZXlmcmFtZXNbaSsxXS52YWx1ZSAtIG1fa2V5ZnJh
bWVzW2ldLnZhbHVlKSAqIHByb2dyZXNzOworfQorCitib29sIENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6a2V5ZnJhbWVzQXJlU29ydGVkKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBpZiAo
bV9rZXlmcmFtZXNbaV0udGltZSA+IG1fa2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUoY29uc3QgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+JiBrZXlmcmFtZXMpCisgICAgOiBt
X2tleWZyYW1lcyhrZXlmcmFtZXMpCit7CisgICAgbV92YWxpZCA9IGtleWZyYW1lc0FyZVNvcnRl
ZCgpICYmIG1fa2V5ZnJhbWVzLnNpemUoKTsKKyAgICBBU1NFUlQobV92YWxpZCk7Cit9CisKK0ND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZFRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlKCkgeyB9CisKK2RvdWJsZSBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZhbGlkKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0KCkudGltZSAtIG1fa2V5ZnJh
bWVzLmZpcnN0KCkudGltZTsKK30KKworUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCp0aGlz
KSk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBsYXllclNpemUpIGNv
bnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtTWF0cml4OworCisgICAg
aWYgKCFtX3ZhbGlkKQorICAgICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OworCisgICAgaWYg
KHQgPD0gbV9rZXlmcmFtZXMuZmlyc3QoKS50aW1lKSB7CisgICAgICAgIG1fa2V5ZnJhbWVzLmZp
cnN0KCkudmFsdWUuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOworICAgICAgICBy
ZXR1cm4gdHJhbnNmb3JtTWF0cml4OworICAgIH0KKworICAgIGlmICh0ID49IG1fa2V5ZnJhbWVz
Lmxhc3QoKS50aW1lKSB7CisgICAgICAgIG1fa2V5ZnJhbWVzLmxhc3QoKS52YWx1ZS5hcHBseShs
YXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm1NYXRy
aXg7CisgICAgfQorCisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoOyBpIDwgbV9rZXlmcmFt
ZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGlmICh0IDwgbV9rZXlmcmFtZXNbaSsxXS50
aW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gRklYTUU6IGFwcGx5IHRp
bWluZyBmdW5jdGlvbiBoZXJlLgorICAgIGRvdWJsZSBwcm9ncmVzcyA9ICh0IC0gbV9rZXlmcmFt
ZXNbaV0udGltZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFtZXNbaV0udGlt
ZSk7CisKKyAgICBpZiAobV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9uc01hdGNoKG1fa2V5
ZnJhbWVzW2krMV0udmFsdWUpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9r
ZXlmcmFtZXNbaSsxXS52YWx1ZS5zaXplKCk7ICsraikKKyAgICAgICAgICAgIG1fa2V5ZnJhbWVz
W2krMV0udmFsdWUub3BlcmF0aW9ucygpW2pdLT5ibGVuZChtX2tleWZyYW1lc1tpXS52YWx1ZS5h
dChqKSwgcHJvZ3Jlc3MpLT5hcHBseSh0cmFuc2Zvcm1NYXRyaXgsIGxheWVyU2l6ZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc291cmNlOworCisgICAgICAg
IG1fa2V5ZnJhbWVzW2ldLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwgc291cmNlKTsKKyAgICAgICAg
bV9rZXlmcmFtZXNbaSsxXS52YWx1ZS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7
CisKKyAgICAgICAgdHJhbnNmb3JtTWF0cml4LmJsZW5kKHNvdXJjZSwgcHJvZ3Jlc3MpOworICAg
IH0KKworICAgIHJldHVybiB0cmFuc2Zvcm1NYXRyaXg7Cit9CisKK2Jvb2wgQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6a2V5ZnJhbWVzQXJlU29ydGVkKCkgY29uc3QKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgewor
ICAgICAgICBpZiAobV9rZXlmcmFtZXNbaV0udGltZSA+IG1fa2V5ZnJhbWVzW2krMV0udGltZSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5p
bWF0aW9uQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTgzM2VmN2QwZjcxMWVkNTcxY2UwNzJmNDg5NjA5
MWFkODg1ZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCkBAIC0wLDAgKzEs
MTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVf
aAorI2RlZmluZSBDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKKworI2luY2x1ZGUgIlRyYW5z
Zm9ybU9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQ0NGbG9hdEtleWZyYW1lIHsKKyAgICBDQ0Zsb2F0
S2V5ZnJhbWUoZG91YmxlIHRpbWUsIGZsb2F0IHZhbHVlKQorICAgICAgICA6IHRpbWUodGltZSkK
KyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIGRvdWJsZSB0aW1lOwor
ICAgIGZsb2F0IHZhbHVlOworfTsKKworc3RydWN0IENDVHJhbnNmb3JtS2V5ZnJhbWUgeworICAg
IENDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
bnMmIHZhbHVlKQorICAgICAgICA6IHRpbWUodGltZSkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkK
KyAgICB7CisgICAgfQorICAgIGRvdWJsZSB0aW1lOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
dmFsdWU7Cit9OworCitjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJs
aWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICAvLyBJdCBpcyByZXF1aXJl
ZCB0aGF0IHRoZSBrZXlmcmFtZXMgYmUgc29ydGVkIGJ5IHRpbWUuCisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjcmVhdGUoY29uc3QgVmVjdG9y
PENDRmxvYXRLZXlmcmFtZT4mIGtleWZyYW1lcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKGtleWZyYW1lcykpOworICAg
IH0KKworICAgIHZpcnR1YWwgfkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSgpOworCisg
ICAgY29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4mIGtleWZyYW1lcygpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5ZnJhbWVzOyB9CisKKyAgICAvLyBDQ0FuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0
aW9uCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKKworICAgIC8vIENDRmxv
YXRBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFs
dWUoZG91YmxlIHQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiYpOworCisg
ICAgYm9vbCBrZXlmcmFtZXNBcmVTb3J0ZWQoKSBjb25zdDsKKworICAgIC8vIEFsd2F5cyBzb3J0
ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyB0aW1lLiBObyB0d28ga2V5ZnJhbWVzIGhhdmUgdGhl
CisgICAgLy8gc2FtZSB0aW1lLgorICAgIFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IG1fa2V5ZnJh
bWVzOworCisgICAgLy8gVHJ1ZSBpZiBrZXlmcmFtZXMgYXJlIHNvcnRlZCBhbmQgdGhlcmUgaXMg
YXQgbGVhc3Qgb25lIGtleWZyYW1lLgorICAgIGJvb2wgbV92YWxpZDsKK307CisKK2NsYXNzIEND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgLy8gSXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUga2V5
ZnJhbWVzIGJlIHNvcnRlZCBieSB0aW1lLgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zv
cm1LZXlmcmFtZT4mIGtleWZyYW1lcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShrZXlmcmFtZXMpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIH5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisK
KyAgICBjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcygpIGNvbnN0
IHsgcmV0dXJuIG1fa2V5ZnJhbWVzOyB9CisKKyAgICAvLyBDQ0FuaW1hdGlvbkN1cnZlIGltcGxl
bWVudGF0aW9uCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKKworICAgIC8v
IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mKTsKKworICAgIGJvb2wg
a2V5ZnJhbWVzQXJlU29ydGVkKCkgY29uc3Q7CisKKyAgICAvLyBBbHdheXMgc29ydGVkIGluIG9y
ZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdvIGtleWZyYW1lcyBoYXZlIHRoZQorICAgIC8v
IHNhbWUgdGltZS4KKyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gbV9rZXlmcmFtZXM7
CisKKyAgICAvLyBUcnVlIGlmIGtleWZyYW1lcyBhcmUgc29ydGVkIGFuZCB0aGVyZSBpcyBhdCBs
ZWFzdCBvbmUga2V5ZnJhbWUuCisgICAgYm9vbCBtX3ZhbGlkOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYWJh
NTUwMzg3ZTE2NzU4ZWYyMTg0ZTRlMjI3YTU4MGM4MjI2MDJmNi4uMzM1ZjYxMjk5NmJmY2VlODM3
Mzk3MGRlZWQ2ZDBiZDA3OTg5ZjQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMjgsMTggKzI4LDUwIEBACiAKICNpbmNsdWRlICJH
cmFwaGljc0xheWVyLmgiIC8vIGZvciBLZXlmcmFtZVZhbHVlTGlzdAogI2luY2x1ZGUgImNjL0ND
QWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2
ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNl
IHsKKworc3RhdGljIHNpemVfdCBncm91cElEID0gMDsKKworc3RhdGljIFN0cmluZyBwcm9wZXJ0
eUlkVG9TdHJpbmcoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KQoreworICAgIHN3aXRjaCAo
cHJvcGVydHkpIHsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06Cisg
ICAgICAgIHJldHVybiAidHJhbnNmb3JtIjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFj
aXR5OgorICAgICAgICByZXR1cm4gIm9wYWNpdHkiOworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcjoKKyAgICAgICAgcmV0dXJuICJiYWNrZ3JvdW5kQ29sb3IiOworICAg
IGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7Cit9
CisKK30gLy8gbmFtZXNwYWNlCisKIGJvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIC8qYm94
U2l6ZSovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZU9mZnNldCkKIHsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFhbmltYXRpb24gfHwgYW5pbWF0aW9uLT5pc0Vt
cHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYm9vbCBjcmVhdGVkQW5pbWF0aW9ucyA9IGZhbHNlOworICAgIGlm
ICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KQorICAgICAgY3JlYXRlZEFuaW1hdGlvbnMgPSBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb24odmFs
dWVMaXN0LCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAgIGVsc2Ug
aWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQorICAg
ICAgY3JlYXRlZEFuaW1hdGlvbnMgPSBjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKHZhbHVlTGlzdCwg
YW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKworICAgIHJldHVybiBjcmVh
dGVkQW5pbWF0aW9uczsKIH0KIAogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1
c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNl
dCkKQEAgLTExMyw2ICsxNDUsOTEgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
cHVzaEFuaW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2wKICAgICB9CiB9
CiAKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZVRyYW5zZm9ybUFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24q
IGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNl
dCkKK3sKKyAgICBBU1NFUlQodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0
eVdlYmtpdFRyYW5zZm9ybSk7CisgICAgLy8gRklYTUU6IGhvdyBkbyB3ZSBkbyB0aGlzIGlzIGNo
cm9taXVtPyBUTE9HKCJjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb24sIG5hbWUoJXMpIGJlZ2luVGlt
ZSglLjJmKSIsIGFuaW1hdGlvbk5hbWUubGF0aW4xKCkuZGF0YSgpLCB0aW1lT2Zmc2V0KTsKKwor
ICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMuCisgICAg
aWYgKGFuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25BbHRlcm5hdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBhZGQg
c3VwcG9ydCBmb3IgZGVsYXkKKyAgICBpZiAoYW5pbWF0aW9uLT5kZWxheSgpID4gMC4wKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGZpbGxz
IGZvcndhcmRzIGFuZCBmaWxscyBiYWNrd2FyZHMKKyAgICBpZiAoYW5pbWF0aW9uLT5maWxsc0Zv
cndhcmRzKCkgfHwgYW5pbWF0aW9uLT5maWxsc0JhY2t3YXJkcygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC5zaXplKCk7ICsraSkgeworICAg
ICAgICBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogb3JpZ2luYWxWYWx1ZSA9IChUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZSopdmFsdWVMaXN0LmF0KGkpOworCisgICAgICAgIC8vIEZJWE1FOiBhZGQg
c3VwcG9ydCBmb3IgdGltaW5nIGZ1bmN0aW9ucy4KKyAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUt
PnRpbWluZ0Z1bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
a2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKG9yaWdpbmFsVmFsdWUtPmtleVRp
bWUoKSwgKm9yaWdpbmFsVmFsdWUtPnZhbHVlKCkpKTsKKyAgICB9CisKKyAgICBPd25QdHI8Q0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBDQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKTsKKworICAgIFN0cmluZyBuYW1l
ID0gYW5pbWF0aW9uTmFtZS5pc0VtcHR5KCkgPyBwcm9wZXJ0eUlkVG9TdHJpbmcodmFsdWVMaXN0
LnByb3BlcnR5KCkpIDogYW5pbWF0aW9uTmFtZTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+IGFuaW0gPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgbmFt
ZSwgZ3JvdXBJRCsrLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKKworICAgIGFuaW0t
PnNldEl0ZXJhdGlvbnMoYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKKworICAgIG1fYWN0
aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbS5yZWxlYXNlKCkpOworCisgICAgLy8gbmVlZHNOb3Rp
ZnlDbGllbnQoKTsgRklYTUU6IC8vIHdoYXQgaXMgdGhpcyBmb3I/CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZU9wYWNpdHlBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9u
KiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZz
ZXQpCit7CisgICAgQVNTRVJUKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVy
dHlPcGFjaXR5KTsKKyAgICAvLyBGSVhNRTogaG93IGRvIHdlIGRvIHRoaXMgaXMgY2hyb21pdW0/
IFRMT0coImNyZWF0ZU9wYWNpdHlBbmltYXRpb24sIG5hbWUoJXMpIGJlZ2luVGltZSglLjJmKSIs
IGFuaW1hdGlvbk5hbWUubGF0aW4xKCkuZGF0YSgpLCB0aW1lT2Zmc2V0KTsKKworICAgIC8vIEZJ
WE1FOiBhZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMuCisgICAgaWYgKGFuaW1h
dGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgZGVsYXkKKyAgICBpZiAoYW5pbWF0aW9uLT5kZWxheSgpID4gMC4wKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGZpbGxzIGZvcndhcmRz
IGFuZCBmaWxscyBiYWNrd2FyZHMKKyAgICBpZiAoYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkg
fHwgYW5pbWF0aW9uLT5maWxsc0JhY2t3YXJkcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBrZXlmcmFtZXM7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICBGbG9hdEFuaW1h
dGlvblZhbHVlKiBvcmlnaW5hbFZhbHVlID0gKEZsb2F0QW5pbWF0aW9uVmFsdWUqKXZhbHVlTGlz
dC5hdChpKTsKKworICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHRpbWluZyBmdW5j
dGlvbnMuCisgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9h
dEtleWZyYW1lKG9yaWdpbmFsVmFsdWUtPmtleVRpbWUoKSwgb3JpZ2luYWxWYWx1ZS0+dmFsdWUo
KSkpOworICAgIH0KKworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+
IGN1cnZlID0gQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVz
KTsKKworICAgIFN0cmluZyBuYW1lID0gYW5pbWF0aW9uTmFtZS5pc0VtcHR5KCkgPyBwcm9wZXJ0
eUlkVG9TdHJpbmcodmFsdWVMaXN0LnByb3BlcnR5KCkpIDogYW5pbWF0aW9uTmFtZTsKKyAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0gPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGN1cnZlLnJlbGVhc2UoKSwgbmFtZSwgZ3JvdXBJRCsrLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJh
bnNmb3JtKTsKKworICAgIGFuaW0tPnNldEl0ZXJhdGlvbnMoYW5pbWF0aW9uLT5pdGVyYXRpb25D
b3VudCgpKTsKKworICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbS5yZWxlYXNlKCkp
OworCisgICAgLy8gbmVlZHNOb3RpZnlDbGllbnQoKTsgRklYTUU6IC8vIHdoYXQgaXMgdGhpcyBm
b3I/CisgICAgcmV0dXJuIHRydWU7Cit9CisKIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpH
cm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJv
cGVydHkpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuaAppbmRleCBkY2E5NjA3ZTk4MTQ2YTZiZDY1NTAzZTc0ZjEwNGVhMzgwYzQxODc5Li42YzM5
YTgwMWJlMTZkNTk5OTM1N2M0OTU3Y2U4NWNkODNkNzVjOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTczLDYgKzczLDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CiAgICAgdm9pZCBwdXNoQW5pbWF0aW9uUHJvcGVy
dGllcyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKIAorICAgIGJvb2wgY3JlYXRl
VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0
aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7Cisg
ICAgYm9vbCBjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jiwg
Y29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZU9mZnNldCk7CisKICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKEND
QWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVy
dHkpOwogICAgIHZvaWQgcmVtb3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQppbmRleCBlODgyMzkyOTI4MDYwYWIyNWUxZGEyZTcwNzgyOGQ1ZmY2N2M1NDY2Li4yODU1NDQ0
N2YzZGJmZDc3NGQ0OWYyZTE5Nzk0ZDk5MmUyZmFkNWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKQEAgLTY1LDYgKzY1LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0RhbWFnZVRy
YWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJj
ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0
LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCmluZGV4
IDI2MWVkZmZmODUyZjMzYzEzYjQ5MjFiZTcwZTYwOWU0MmY1ZTJiOTMuLjM2MzJmYWE3ZDBhYWZl
YjJiYzZjZWIxYzExZTE0NWJhYzM0ZmQ1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTM4LDcgKzM4LDcg
QEAgbmFtZXNwYWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAiIiwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b1JldHVybi0+c2V0SXRlcmF0aW9ucyhp
dGVyYXRpb25zKTsKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTM0MWJjZjhhNmE3MTBmMTdjNzE5Zjg0ZTAy
ZTQzNTQ0NDZhOTQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwyMTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUg
IlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2su
aD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgeworCit2b2lkIGV4cGVjdFRyYW5zbGF0ZVgoZG91YmxlIHRyYW5zbGF0ZVgsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXg6OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zZWRUeXBlOworICAgIG1hdHJpeC5kZWNvbXBvc2Uo
ZGVjb21wb3NlZFR5cGUpOworICAgIEVYUEVDVF9GTE9BVF9FUSh0cmFuc2xhdGVYLCBkZWNvbXBv
c2VkVHlwZS50cmFuc2xhdGVYKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlv
biB3aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZVRlc3QsIE9uZUZsb2F0S2V5ZnJhbWUpCit7CisgICAgVmVjdG9yPENDRmxv
YXRLZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZy
YW1lKDAsIDIpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBj
dXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIs
IGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdl
dFZhbHVlKDEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDIpKTsK
K30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFtZXMg
d29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBU
d29GbG9hdEtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1l
czsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCAyKSk7CisgICAga2V5
ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgNCkpOworICAgIE93blB0cjxDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDAp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5p
bWF0aW9uIHdpdGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVGbG9hdEtleWZyYW1lKQoreworICAgIFZl
Y3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKEND
RmxvYXRLZXlmcmFtZSgwLCAyKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJh
bWUoMSwgNCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDIsIDgpKTsK
KyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIs
IGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRW
YWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4
LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0
aW9uIHdpdGggbXVsdGlwbGUga2V5cyBhdCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgorVEVT
VChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRGbG9hdEtleVRpbWVzKQor
eworICAgIFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICAvLyBBIHN0ZXAg
ZnVuY3Rpb24uCisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgNCkpOwor
ICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDEsIDQpKTsKKyAgICBrZXlmcmFt
ZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgxLCA2KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChD
Q0Zsb2F0S2V5ZnJhbWUoMiwgNikpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtl
eWZyYW1lcykpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgtMSkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisKKyAgICAvLyBUaGVyZSBpcyBh
IGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4K
KyAgICBmbG9hdCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxKTsKKyAgICBFWFBFQ1RfVFJVRSh2
YWx1ZSA+PSA0ICYmIHZhbHVlIDw9IDYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZl
LT5nZXRWYWx1ZSgxLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVl
KDIpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDMpKTsKK30KKwor
CisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3
b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIE9u
ZVRyYW5zZm9ybUtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBr
ZXlmcmFtZXM7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURV9YKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZy
YW1lKDAsIG9wZXJhdGlvbnMpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKGtleWZyYW1lcykpOworICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCisgICAg
ZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOworICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOworICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7Cit9
CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1l
cyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3Qs
IFR3b1RyYW5zZm9ybUtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1l
PiBrZXlmcmFtZXM7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBv
cGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwg
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQo
Q0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAgIGtleWZyYW1lcy5hcHBl
bmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOworICAgIE93blB0cjxDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgSW50U2l6ZSBsYXllclNp
emU7IC8vIGlnbm9yZWQKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgt
MSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
MCwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUo
MC41LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1
ZSgxLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1
ZSgyLCBsYXllclNpemUpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRp
b24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZVRyYW5zZm9ybUtleWZyYW1lKQoreworICAgIFZl
Y3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMu
b3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShM
ZW5ndGgoOCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV9YKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAs
IG9wZXJhdGlvbnMxKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1l
KDEsIG9wZXJhdGlvbnMyKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZy
YW1lKDIsIG9wZXJhdGlvbnMzKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNy
ZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAorICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKKyAg
ICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKKyAg
ICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkpOwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSkpOwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5ZXJTaXplKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5ZXJTaXplKSk7
Cit9CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUg
a2V5cyBhdCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgorVEVTVChDQ0tleWZyYW1lZEFuaW1h
dGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFuc2Zvcm1LZXlUaW1lcykKK3sKKyAgICBWZWN0b3I8
Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4K
KyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWCkpOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3Bl
cmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVy
YXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MzsKKyAgICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg2LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRy
YW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnM0OworICAgIG9wZXJhdGlvbnM0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAs
IEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIGtleWZyYW1l
cy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAgIGtleWZy
YW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOworICAgIGtl
eWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMykpOworICAg
IGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zNCkpOwor
ICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisKKyAg
ICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAorCisgICAgZXhwZWN0VHJhbnNsYXRlWCg0
LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
NCwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
NCwgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7CisKKyAgICAvLyBUaGVyZSBpcyBh
IGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4K
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXll
clNpemUpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBv
c2VkVHlwZTsKKyAgICB2YWx1ZS5kZWNvbXBvc2UoZGVjb21wb3NlZFR5cGUpOworICAgIEVYUEVD
VF9UUlVFKGRlY29tcG9zZWRUeXBlLnRyYW5zbGF0ZVggPj0gNCAmJiBkZWNvbXBvc2VkVHlwZS50
cmFuc2xhdGVYIDw9IDYpOworCisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFs
dWUoMS41LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRW
YWx1ZSgyLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRW
YWx1ZSgzLCBsYXllclNpemUpKTsKK30KKworCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKaW5kZXggOTE0MGQ3ZTE5OWU1Y2I3ZmZjZDNjNTExNjdm
ZWZjMTYyN2E3ZTk5OS4uZTRhM2RhZjYyM2UyNmUwZWZlMmZhMTExNDBmOTBmMjRhNzI4ZDI4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCkBAIC01Nyw3ICs1Nyw3IEBA
IHByaXZhdGU6CiAKIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKIHsKLSAgICByZXR1cm4gQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgaWQsIHByb3BlcnR5KTsKKyAgICByZXR1cm4g
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgIiIsIGlkLCBwcm9wZXJ0eSk7CiB9CiAK
IC8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdvcmtzIGFz
IGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMjBiZjI3NzMzZDBlNTQ3N2QzNTE3YWUyMGI5Yjg2YTMy
YTNjZGFlMS4uMmY2N2E0NWVhYjU0MTMzMWQ4N2U3NzM0YWEzZDNjYjE4NGZlZTVhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3Qu
Y3BwCkBAIC02Niw2ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3Jv
bGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiwgZmxvYXQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsg
fQogfTsKIAogLy8gQWRhcHRzIENDTGF5ZXJUcmVlSG9zdEltcGwgZm9yIHRlc3QuIFJ1bnMgcmVh
bCBjb2RlLCB0aGVuIGludm9rZXMgdGVzdCBob29rcy4KQEAgLTE1Myw3ICsxNTQsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogICAgIHsKLSAg
ICAgICAgYWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEuMCwgMS4wZiwgMC4wZikpLCAwLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgICAgICBhY3RpdmVBbmltYXRpb25zKCku
YXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMS4wLCAxLjBmLCAwLjBmKSksICIiLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRleCBm
OWI4ODFlMjY5NGE4ZjYwMGQ4Y2MzMDVjMTM4ZDFhYzE5OGNlODFjLi40NzEyMzA4ZWIwODY1MWQ0
ODljNTVlODI3MDM5Njg5YWEyNDIyNmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtMzM0LDcgKzMzNCw3IEBA
IFRFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY05ld0FuaW1hdGlvbikKICAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CiAKICAgICAvLyBBZGQgYW5pbWF0
aW9uIHRvIG1haW4gdGhyZWFkIGNvbnRyb2xsZXIuCi0gICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxl
cihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2
ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgp
KSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBnZXRBbmltYXRpb25Db250
cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1
cnZlKCkpLCAiIiwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjY0xheWVy
VHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjY0xh
eWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CkBAIC0zNDcsNyArMzQ3LDcgQEAgVEVTVF9G
KFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGllcykKICAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OwogCiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hy
b25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOwotICAgIGdl
dEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlv
bnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Cisg
ICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5p
bWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgIiIsIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CiAgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25p
emVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogCiAg
ICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdl
dEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwpAQCAtMzY4
LDcgKzM2OCw3IEBAIFRFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0Fib3J0ZWRBbmlt
YXRpb24pCiAKICAgICAvLyBTeW5jIHdpdGggbm8gYW5pbWF0aW9ucy4KICAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7Ci0gICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxl
cihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2
ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgp
KSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBnZXRBbmltYXRpb25Db250
cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1
cnZlKCkpLCAiIiwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjY0xheWVy
VHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjY0xh
eWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CkBAIC0zODcsNyArMzg3LDcgQEAgVEVTVF9G
KFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jQ29tcGxldGVkQW5pbWF0aW9uKQogCiAgICAgLy8g
U3luYyB3aXRoIG5vIGFuaW1hdGlvbnMuCiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVy
VHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIDApOwotICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5n
ZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVS
b290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgIiIsIDAsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hy
b25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwog
CiAgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCkt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126589</attachid>
            <date>2012-02-10 15:03:02 -0800</date>
            <delta_ts>2012-02-17 19:56:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77229-20120210180258.patch</filename>
            <type>text/plain</type>
            <size>52024</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM1NTg5MTgyZThlOTIw
MjUxNGEwMDQzZWJiMDM2ZGRiNGFlZGM4Ni4uYmEwMzFmNGMzNTJmZmYxZmNlOTcxYjg1OTBkNmZj
YTliNjcwMzEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0wMi0wOCAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIElt
cGxlbWVudCBrZXlmcmFtZWQgYW5pbWF0aW9ucyBmb3IgdGhlIGNjIHRocmVhZC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09Q
UyEpCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NBY3RpdmVBbmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDQWN0aXZlQW5pbWF0aW9uOjpjbG9uZUZvckltcGxUaHJlYWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
QWN0aXZlQW5pbWF0aW9uOjpuYW1lKToKKyAgICAgICAgKENDQWN0aXZlQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjbG9uZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpkdXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpjbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpnZXRWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEtleWZyYW1lOjpDQ0Zsb2F0S2V5ZnJhbWUp
OgorICAgICAgICAoQ0NGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtS2V5ZnJhbWU6OkNDVHJhbnNmb3JtS2V5ZnJhbWUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSk6CisgICAgICAgIChDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjp+Q0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjprZXlmcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmUpOgorICAgICAgICAoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
fkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6a2V5ZnJhbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5
ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZVRyYW5zZm9y
bUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5oOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisKKzIw
MTItMDItMDggIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBJbXBsZW1lbnQga2V5ZnJhbWVkIGFuaW1hdGlvbnMgZm9yIHRoZSBjYyB0aHJl
YWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIy
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6bmFtZSk6CisgICAgICAgIChDQ0FjdGl2ZUFu
aW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmFkZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpnZXRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6Q0NG
bG9hdEtleWZyYW1lKToKKyAgICAgICAgKENDRmxvYXRLZXlmcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAgICAg
KENDVHJhbnNmb3JtS2V5ZnJhbWUpOgorICAgICAgICAoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6fkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6a2V5ZnJhbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6Omtl
eWZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpj
cmVhdGVUcmFuc2Zvcm1BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlT3BhY2l0eUFuaW1hdGlv
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVM
YXllcnMpOgorCiAyMDEyLTAyLTAzICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtjaHJvbWl1bV0gUGx1bWIgZnJvbSBHcmFwaGljc0xheWVyIHRvIHRoZSBj
YyB0aHJlYWQgYW5pbWF0aW9uIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGIy
ZTc3MWMyMmU4NGE0MTBlZmEwYmFmODkyOGFjYTdhMWQ1ZTRhNi4uYTMzNmNkNTI5MjkxZjRiYTYy
ODk0Njk3ZWYxOWQ4ZGRkNDhkMmQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxMi0wMi0wOCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBrZXlmcmFtZWQgYW5pbWF0aW9ucyBm
b3IgdGhlIGNjIHRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc3MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVh
dGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEhvb2tzOjpzY2hlZHVsZUNvbXBvc2l0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRp
b24pOgorICAgICAgICAqIHRlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKworMjAxMi0w
Mi0wOCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEltcGxlbWVudCBrZXlmcmFtZWQgYW5pbWF0aW9ucyBmb3IgdGhlIGNjIHRocmVhZC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9D
Q0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWN0aXZl
QW5pbWF0aW9uKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3RpdmVBbmltYXRpb24p
OgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdEhvb2tzOjpzY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAqIHRl
c3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKwogMjAxMi0wMi0wMyAgSWFuIFZvbGxpY2sg
IDx2b2xsaWNrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFBsdW1iIGZyb20g
R3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNzgyNGRkMWIyZjNiNzM5M2ZlNWM1Y2M5NzEwM2IyZGEyNDA3NTBmZi4uMDBjMjg5
ZjNiNDg1NzRmMjBlMjkyOWY2ODAwOWRhNjY4ZjAwZjYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzI0Myw2ICszMjQzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNw
cAppbmRleCAwMDA5Y2M4ODk4M2EwNjU5YjM4YTY5M2E5NjljYTRjMDc3NjY1N2ExLi5kNjQ3NTVk
ZGNmOTA0ZDQ3ZGE5YmU4M2Q5YTA0NzU2YWM1NmI1MjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3Rp
dmVBbmltYXRpb24uY3BwCkBAIC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotQ0NBY3RpdmVBbmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmlt
YXRpb25DdXJ2ZT4gY3VydmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFBy
b3BlcnR5KQorQ0NBY3RpdmVBbmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8
Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgR3JvdXBJRCBncm91
cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiAgICAgOiBtX2FuaW1hdGlvbkN1cnZl
KGN1cnZlKQorICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2dyb3VwKGdyb3VwKQogICAgICwg
bV90YXJnZXRQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0eSkKICAgICAsIG1fcnVuU3RhdGUoV2FpdGlu
Z0ZvclRhcmdldEF2YWlsYWJpbGl0eSkKQEAgLTExNCw3ICsxMTUsNyBAQCBkb3VibGUgQ0NBY3Rp
dmVBbmltYXRpb246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0
CiAKIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IENDQWN0aXZlQW5pbWF0aW9uOjpjbG9u
ZUZvckltcGxUaHJlYWQoKSBjb25zdAogewotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9SZXR1cm4oYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKG1fYW5pbWF0aW9uQ3VydmUt
PmNsb25lKCksIG1fZ3JvdXAsIG1fdGFyZ2V0UHJvcGVydHkpKSk7CisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b1JldHVybihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9h
bmltYXRpb25DdXJ2ZS0+Y2xvbmUoKSwgbV9uYW1lLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5
KSkpOwogICAgIHRvUmV0dXJuLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKICAgICB0b1JldHVy
bi0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOwogICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGlt
ZSA9IG1fc3RhcnRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggNjk0
NDhlNTNiMjk1ZWViNDhkODEwMzJhMzQ5ODNiNmYwN2U4NDAzZS4uZTFmMjViZTY0ZTY3ZjhhMTRh
MjZlNTY4MmJhZjA5YjFkNjI2NTRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTc5LDEzICs3OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIFRhcmdl
dFByb3BlcnR5IHRhcmdldFByb3BlcnR5OwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4g
Y3VydmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBHcm91cElEIGdyb3Vw
LCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24oY3VydmUsIGdyb3VwLCB0YXJnZXRQcm9wZXJ0
eSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZl
LCBuYW1lLCBncm91cCwgdGFyZ2V0UHJvcGVydHkpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5D
Q0FjdGl2ZUFuaW1hdGlvbigpOwogCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgIHsg
cmV0dXJuIG1fbmFtZTsgfQogICAgIEdyb3VwSUQgZ3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2dy
b3VwOyB9CiAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkoKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldFByb3BlcnR5OyB9CiAKQEAgLTEyMSw5ICsxMjIsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0aW9uKik7CiAKIHByaXZh
dGU6Ci0gICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwg
R3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25DdXJ2ZT4sIGNvbnN0IFN0cmluZyYsIEdyb3VwSUQsIFRhcmdldFByb3Bl
cnR5KTsKIAogICAgIE93blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBtX2FuaW1hdGlvbkN1cnZlOwor
ICAgIFN0cmluZyBtX25hbWU7CiAgICAgR3JvdXBJRCBtX2dyb3VwOwogICAgIFRhcmdldFByb3Bl
cnR5IG1fdGFyZ2V0UHJvcGVydHk7CiAgICAgUnVuU3RhdGUgbV9ydW5TdGF0ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzcy
ZTg3MmUyYjY2YTg0YzNmOGVmOTgxOTkzNzBkZDAyZjMxMzA4NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVk
QW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmgiCisKKyNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUg
Ik1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
KyNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
KyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8
Q0NGbG9hdEtleWZyYW1lPiYga2V5ZnJhbWVzKQorICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVz
KQoreworICAgIG1fdmFsaWQgPSBrZXlmcmFtZXNBcmVTb3J0ZWQoKSAmJiBtX2tleWZyYW1lcy5z
aXplKCk7CisgICAgQVNTRVJUKG1fdmFsaWQpOworfQorCitDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmU6On5DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoKSB7IH0KKworZG91Ymxl
IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6ZHVyYXRpb24oKSBjb25zdAoreworICAg
IGlmICghbV92YWxpZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9rZXlmcmFt
ZXMubGFzdCgpLnRpbWUgLSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWU7Cit9CisKK1Bhc3NPd25Q
dHI8Q0NBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjbG9u
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmUoKnRoaXMpKTsKK30KKworZmxvYXQgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdmFsaWQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHQgPD0gbV9rZXlmcmFtZXMuZmlyc3QoKS50aW1l
KQorICAgICAgICByZXR1cm4gbV9rZXlmcmFtZXMuZmlyc3QoKS52YWx1ZTsKKworICAgIGlmICh0
ID49IG1fa2V5ZnJhbWVzLmxhc3QoKS50aW1lKQorICAgICAgICByZXR1cm4gbV9rZXlmcmFtZXMu
bGFzdCgpLnZhbHVlOworCisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoOyBpIDwgbV9rZXlm
cmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGlmICh0IDwgbV9rZXlmcmFtZXNbaSsx
XS50aW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZmxvYXQgcHJvZ3Jlc3Mg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oKHQgLSBtX2tleWZyYW1lc1tpXS50aW1lKSAvIChtX2tleWZy
YW1lc1tpKzFdLnRpbWUgLSBtX2tleWZyYW1lc1tpXS50aW1lKSk7CisgICAgLy8gRklYTUU6IGFw
cGx5IHRpbWluZyBmdW5jdGlvbiBoZXJlLgorICAgIHJldHVybiBtX2tleWZyYW1lc1tpXS52YWx1
ZSArIChtX2tleWZyYW1lc1tpKzFdLnZhbHVlIC0gbV9rZXlmcmFtZXNbaV0udmFsdWUpICogcHJv
Z3Jlc3M7Cit9CisKK2Jvb2wgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjprZXlmcmFt
ZXNBcmVTb3J0ZWQoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlm
cmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGlmIChtX2tleWZyYW1lc1tpXS50aW1l
ID4gbV9rZXlmcmFtZXNbaSsxXS50aW1lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NU
cmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcykKKyAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1l
cykKK3sKKyAgICBtX3ZhbGlkID0ga2V5ZnJhbWVzQXJlU29ydGVkKCkgJiYgbV9rZXlmcmFtZXMu
c2l6ZSgpOworICAgIEFTU0VSVChtX3ZhbGlkKTsKK30KKworQ0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZTo6fkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0K
KworZG91YmxlIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fdmFsaWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS50aW1lIC0gbV9rZXlmcmFtZXMuZmlyc3QoKS50aW1lOwor
fQorCitQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmNsb25lKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlm
cmFtZT4ga2V5ZnJhbWVzOworICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgb2YgYWxs
IG9mIHRoZSBrZXlmcmFtZXMgc2luY2UgdGhleSBjb250YWluIHJlZgorICAgIC8vIHBvaW50ZXJz
IHRvIFRyYW5zZm9ybU9wZXJhdGlvbiBvYmplY3RzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9rZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ0NUcmFuc2Zvcm1LZXlmcmFt
ZSBrZXlmcmFtZShtX2tleWZyYW1lc1tpXS50aW1lKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCBtX2tleWZyYW1lc1tpXS52YWx1ZS5zaXplKCk7ICsraikgeworICAgICAgICAgICAg
VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBtX2tleWZy
YW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0tPmdldE9wZXJhdGlvblR5cGUoKTsKKyAgICAg
ICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNDQUxFX1g6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6U0NBTEVfWToKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9a
OgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgorICAgICAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOiB7CisgICAgICAgICAgICAgICAg
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5k
KFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9y
bS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURV9YOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV9ZOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9aOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoK
KyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6IHsKKyAgICAg
ICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVl
Lm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUu
b3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0
cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCBvcGVyYXRpb25U
eXBlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CisgICAgICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFXzNEOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlJPVEFURTogeworICAgICAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJh
bnNmb3JtID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFt
ZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBrZXlm
cmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRy
YW5zZm9ybS0+YW5nbGUoKSwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNL
RVdfWDoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6CisgICAg
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogeworICAgICAgICAgICAgICAg
IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0
KCkpOworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQo
U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5z
Zm9ybS0+YW5nbGVZKCksIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRS
SVg6IHsKKyAgICAgICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ld
LnZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7CisgICAgICAgICAgICAgICAga2V5
ZnJhbWUudmFsdWUub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShtLmEoKSwgbS5iKCksIG0uYygpLCBtLmQoKSwgbS5lKCksIG0uZigpKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOiB7CisgICAgICAgICAgICAgICAgTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5tYXRyaXgoKSkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOiB7CisgICAgICAgICAgICAgICAgUGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pd
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBw
ZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5wZXJz
cGVjdGl2ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6IHsKKyAgICAgICAgICAg
ICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKElkZW50aXR5VHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKKyAgICAgICAg
ICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRpb24KKyAgICAgICAg
a2V5ZnJhbWVzLmFwcGVuZChrZXlmcmFtZSk7CisgICAgfQorICAgIHJldHVybiBDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKTsKK30KKworVHJhbnNm
b3JtYXRpb25NYXRyaXggQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFs
dWUoZG91YmxlIHQsIGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkgY29uc3QKK3sKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1NYXRyaXg7CisKKyAgICBpZiAoIW1fdmFsaWQpCisg
ICAgICAgIHJldHVybiB0cmFuc2Zvcm1NYXRyaXg7CisKKyAgICBpZiAodCA8PSBtX2tleWZyYW1l
cy5maXJzdCgpLnRpbWUpIHsKKyAgICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS52YWx1ZS5hcHBs
eShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm1N
YXRyaXg7CisgICAgfQorCisgICAgaWYgKHQgPj0gbV9rZXlmcmFtZXMubGFzdCgpLnRpbWUpIHsK
KyAgICAgICAgbV9rZXlmcmFtZXMubGFzdCgpLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNm
b3JtTWF0cml4KTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybU1hdHJpeDsKKyAgICB9CisKKyAg
ICBzaXplX3QgaSA9IDA7CisgICAgZm9yICg7IGkgPCBtX2tleWZyYW1lcy5zaXplKCkgLSAxOyAr
K2kpIHsKKyAgICAgICAgaWYgKHQgPCBtX2tleWZyYW1lc1tpKzFdLnRpbWUpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogYXBwbHkgdGltaW5nIGZ1bmN0aW9uIGhl
cmUuCisgICAgZG91YmxlIHByb2dyZXNzID0gKHQgLSBtX2tleWZyYW1lc1tpXS50aW1lKSAvICht
X2tleWZyYW1lc1tpKzFdLnRpbWUgLSBtX2tleWZyYW1lc1tpXS50aW1lKTsKKworICAgIGlmICht
X2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zTWF0Y2gobV9rZXlmcmFtZXNbaSsxXS52YWx1
ZSkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2tleWZyYW1lc1tpKzFdLnZh
bHVlLnNpemUoKTsgKytqKQorICAgICAgICAgICAgbV9rZXlmcmFtZXNbaSsxXS52YWx1ZS5vcGVy
YXRpb25zKClbal0tPmJsZW5kKG1fa2V5ZnJhbWVzW2ldLnZhbHVlLmF0KGopLCBwcm9ncmVzcykt
PmFwcGx5KHRyYW5zZm9ybU1hdHJpeCwgbGF5ZXJTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzb3VyY2U7CisKKyAgICAgICAgbV9rZXlmcmFtZXNbaV0u
dmFsdWUuYXBwbHkobGF5ZXJTaXplLCBzb3VyY2UpOworICAgICAgICBtX2tleWZyYW1lc1tpKzFd
LnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKKworICAgICAgICB0cmFu
c2Zvcm1NYXRyaXguYmxlbmQoc291cmNlLCBwcm9ncmVzcyk7CisgICAgfQorCisgICAgcmV0dXJu
IHRyYW5zZm9ybU1hdHJpeDsKK30KKworYm9vbCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjprZXlmcmFtZXNBcmVTb3J0ZWQoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGlmIChtX2tl
eWZyYW1lc1tpXS50aW1lID4gbV9rZXlmcmFtZXNbaSsxXS50aW1lKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA1NjQ2NzNmYjkxMjkwNzQ3MzA2OGQxMWM2NDg1MWZjMTJkM2EwZWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCisjZGVmaW5lIENDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5o
IgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0cnVjdCBDQ0Zsb2F0S2V5ZnJhbWUgeworICAgIENDRmxvYXRLZXlmcmFtZShkb3VibGUg
dGltZSwgZmxvYXQgdmFsdWUpCisgICAgICAgIDogdGltZSh0aW1lKQorICAgICAgICAsIHZhbHVl
KHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgZG91YmxlIHRpbWU7CisgICAgZmxvYXQgdmFsdWU7
Cit9OworCitzdHJ1Y3QgQ0NUcmFuc2Zvcm1LZXlmcmFtZSB7CisgICAgQ0NUcmFuc2Zvcm1LZXlm
cmFtZShkb3VibGUgdGltZSkKKyAgICAgICAgOiB0aW1lKHRpbWUpCisgICAgeworICAgIH0KKyAg
ICBDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiB2YWx1ZSkKKyAgICAgICAgOiB0aW1lKHRpbWUpCisgICAgICAgICwgdmFsdWUodmFsdWUp
CisgICAgeworICAgIH0KKyAgICBkb3VibGUgdGltZTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IHZhbHVlOworfTsKKworY2xhc3MgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVi
bGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgLy8gSXQgaXMgcmVxdWly
ZWQgdGhhdCB0aGUga2V5ZnJhbWVzIGJlIHNvcnRlZCBieSB0aW1lLgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3JlYXRlKGNvbnN0IFZlY3Rv
cjxDQ0Zsb2F0S2V5ZnJhbWU+JiBrZXlmcmFtZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZShrZXlmcmFtZXMpKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoKTsKKwor
ICAgIGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJl
dHVybiBtX2tleWZyYW1lczsgfQorCisgICAgLy8gQ0NBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRh
dGlvbgorICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBQ
YXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3Q7CisKKyAgICAvLyBDQ0Zs
b2F0QW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZh
bHVlKGRvdWJsZSB0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmUoY29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4mKTsKKwor
ICAgIGJvb2wga2V5ZnJhbWVzQXJlU29ydGVkKCkgY29uc3Q7CisKKyAgICAvLyBBbHdheXMgc29y
dGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdvIGtleWZyYW1lcyBoYXZlIHRo
ZQorICAgIC8vIHNhbWUgdGltZS4KKyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBtX2tleWZy
YW1lczsKKworICAgIC8vIFRydWUgaWYga2V5ZnJhbWVzIGFyZSBzb3J0ZWQgYW5kIHRoZXJlIGlz
IGF0IGxlYXN0IG9uZSBrZXlmcmFtZS4KKyAgICBib29sIG1fdmFsaWQ7Cit9OworCitjbGFzcyBD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIC8vIEl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIGtl
eWZyYW1lcyBiZSBzb3J0ZWQgYnkgdGltZS4KKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjcmVhdGUoY29uc3QgVmVjdG9yPENDVHJhbnNm
b3JtS2V5ZnJhbWU+JiBrZXlmcmFtZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoa2V5ZnJhbWVzKSk7CisgICAg
fQorCisgICAgdmlydHVhbCB+Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwor
CisgICAgY29uc3QgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+JiBrZXlmcmFtZXMoKSBjb25z
dCB7IHJldHVybiBtX2tleWZyYW1lczsgfQorCisgICAgLy8gQ0NBbmltYXRpb25DdXJ2ZSBpbXBs
ZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3Q7CisgICAgdmly
dHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3Q7CisKKyAgICAv
LyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUoY29uc3QgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+Jik7CisKKyAgICBib29s
IGtleWZyYW1lc0FyZVNvcnRlZCgpIGNvbnN0OworCisgICAgLy8gQWx3YXlzIHNvcnRlZCBpbiBv
cmRlciBvZiBpbmNyZWFzaW5nIHRpbWUuIE5vIHR3byBrZXlmcmFtZXMgaGF2ZSB0aGUKKyAgICAv
LyBzYW1lIHRpbWUuCisgICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IG1fa2V5ZnJhbWVz
OworCisgICAgLy8gVHJ1ZSBpZiBrZXlmcmFtZXMgYXJlIHNvcnRlZCBhbmQgdGhlcmUgaXMgYXQg
bGVhc3Qgb25lIGtleWZyYW1lLgorICAgIGJvb2wgbV92YWxpZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGFi
YTU1MDM4N2UxNjc1OGVmMjE4NGU0ZTIyN2E1ODBjODIyNjAyZjYuLjcwZGExNjIwNjYwYTVhZTVj
ZDdiMDU1MmYxY2FmMDlmNGE1YmVkY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTI4LDMyICsyOCw3NyBAQAogCiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKICNpbmNsdWRlICJjYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3Vy
dmUuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBzaXplX3QgZ3JvdXBJ
RCA9IDA7CisKK3N0YXRpYyBTdHJpbmcgcHJvcGVydHlJZFRvU3RyaW5nKEFuaW1hdGVkUHJvcGVy
dHlJRCBwcm9wZXJ0eSkKK3sKKyAgICBzd2l0Y2ggKHByb3BlcnR5KSB7CisgICAgY2FzZSBBbmlt
YXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgorICAgICAgICByZXR1cm4gInRyYW5zZm9ybSI7
CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKKyAgICAgICAgcmV0dXJuICJvcGFj
aXR5IjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CisgICAgICAg
IHJldHVybiAiYmFja2dyb3VuZENvbG9yIjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlJbnZh
bGlkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCit9IC8vIG5hbWVzcGFjZQorCiBib29s
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnRTaXplJiAvKmJveFNpemUqLywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghYW5pbWF0aW9uIHx8IGFuaW1hdGlvbi0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkgfHwgdmFs
dWVMaXN0LnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgY3Jl
YXRlZEFuaW1hdGlvbnMgPSBmYWxzZTsKKyAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0g
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKKyAgICAgIGNyZWF0ZWRBbmltYXRpb25z
ID0gY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uKHZhbHVlTGlzdCwgYW5pbWF0aW9uLCBhbmltYXRp
b25OYW1lLCB0aW1lT2Zmc2V0KTsKKyAgICBlbHNlIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9
PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkKKyAgICAgIGNyZWF0ZWRBbmltYXRpb25zID0gY3Jl
YXRlT3BhY2l0eUFuaW1hdGlvbih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgYW5pbWF0aW9uTmFtZSwg
dGltZU9mZnNldCk7CisKKyAgICByZXR1cm4gY3JlYXRlZEFuaW1hdGlvbnM7CiB9CiAKIHZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+bmFtZSgpID09IGFuaW1hdGlvbk5hbWUpCisgICAgICAgICAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQ
YXVzZWQsIHRpbWVPZmZzZXQpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7KSB7
CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPm5hbWUoKSA9PSBhbmltYXRpb25O
YW1lKQorICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaSsrOworICAgIH0KIH0KIAorLy8gQWNjb3JkaW5nIHRvIHJlbmRl
ciBsYXllciBiYWNraW5nLCB0aGVzZSBhcmUgZm9yIHRlc3Rpbmcgb25seS4KIHZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQogewog
fQogCisvLyBMb29raW5nIGF0IEdyYXBoaWNzTGF5ZXJDQSwgdGhpcyBhcHBlYXJzIHRvIGJlIHRo
ZSBhbmFsb2cgdG8gc3VzcGVuZEFuaW1hdGlvbnMsIHdoaWNoIGlzIGZvciB0ZXN0aW5nLgogdm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCiB7CiB9CkBA
IC0xMTMsNiArMTU4LDg4IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hB
bmltYXRpb25Qcm9wZXJ0aWVzKENDTGF5ZXJBbmltYXRpb25Db250cm9sCiAgICAgfQogfQogCiti
b29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmlt
YXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7
CisgICAgQVNTRVJUKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm0pOworCisgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBkaWZmZXJlbnQg
ZGlyZWN0aW9ucy4KKyAgICBpZiAoYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNldCgpICYmIGFuaW1h
dGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgZGVsYXkKKyAgICBpZiAoYW5pbWF0aW9uLT5pc0RlbGF5U2V0KCkgJiYgYW5pbWF0aW9uLT5k
ZWxheSgpID4gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IGFkZCBz
dXBwb3J0IGZvciBmaWxscyBmb3J3YXJkcyBhbmQgZmlsbHMgYmFja3dhcmRzCisgICAgaWYgKGFu
aW1hdGlvbi0+aXNGaWxsTW9kZVNldCgpICYmIChhbmltYXRpb24tPmZpbGxzRm9yd2FyZHMoKSB8
fCBhbmltYXRpb24tPmZpbGxzQmFja3dhcmRzKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWVzOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUqIG9yaWdpbmFsVmFsdWUgPSAoVHJhbnNmb3JtQW5pbWF0aW9uVmFs
dWUqKXZhbHVlTGlzdC5hdChpKTsKKworICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9y
IHRpbWluZyBmdW5jdGlvbnMuCisgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5j
dGlvbigpICYmIG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCktPnR5cGUoKSAhPSBUaW1p
bmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gYW5pbWF0aW9uLT5pc0R1cmF0aW9uU2V0KCkgPyBh
bmltYXRpb24tPmR1cmF0aW9uKCkgOiAxOworICAgICAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJh
bnNmb3JtS2V5ZnJhbWUob3JpZ2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb24sICpvcmln
aW5hbFZhbHVlLT52YWx1ZSgpKSk7CisgICAgfQorCisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcyk7CisKKyAgICBTdHJpbmcgbmFtZSA9IGFuaW1hdGlv
bk5hbWUuaXNFbXB0eSgpID8gcHJvcGVydHlJZFRvU3RyaW5nKHZhbHVlTGlzdC5wcm9wZXJ0eSgp
KSA6IGFuaW1hdGlvbk5hbWU7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltID0g
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIG5hbWUsIGdyb3VwSUQr
KywgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7CisKKyAgICBhbmltLT5zZXRJdGVyYXRp
b25zKGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSk7CisKKyAgICBtX2FjdGl2ZUFuaW1hdGlv
bnMuYXBwZW5kKGFuaW0ucmVsZWFzZSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9u
LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAg
IEFTU0VSVCh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7
CisKKyAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLgor
ICAgIGlmIChhbmltYXRpb24tPmlzRGlyZWN0aW9uU2V0KCkgJiYgYW5pbWF0aW9uLT5kaXJlY3Rp
b24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBkZWxheQorICAg
IGlmIChhbmltYXRpb24tPmlzRGVsYXlTZXQoKSAmJiBhbmltYXRpb24tPmRlbGF5KCkgPiAwKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGZp
bGxzIGZvcndhcmRzIGFuZCBmaWxscyBiYWNrd2FyZHMKKyAgICBpZiAoYW5pbWF0aW9uLT5pc0Zp
bGxNb2RlU2V0KCkgJiYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpIHx8IGFuaW1hdGlvbi0+
ZmlsbHNCYWNrd2FyZHMoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxD
Q0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1lczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgIEZsb2F0QW5pbWF0aW9uVmFsdWUqIG9y
aWdpbmFsVmFsdWUgPSAoRmxvYXRBbmltYXRpb25WYWx1ZSopdmFsdWVMaXN0LmF0KGkpOworCisg
ICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgdGltaW5nIGZ1bmN0aW9ucy4KKyAgICAg
ICAgaWYgKG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkgJiYgb3JpZ2luYWxWYWx1ZS0+
dGltaW5nRnVuY3Rpb24oKS0+dHlwZSgpICE9IFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlv
bikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBkb3VibGUgZHVyYXRpb24g
PSBhbmltYXRpb24tPmlzRHVyYXRpb25TZXQoKSA/IGFuaW1hdGlvbi0+ZHVyYXRpb24oKSA6IDE7
CisgICAgICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKG9yaWdpbmFsVmFsdWUt
PmtleVRpbWUoKSAqIGR1cmF0aW9uLCBvcmlnaW5hbFZhbHVlLT52YWx1ZSgpKSk7CisgICAgfQor
CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBDQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpOworCisgICAgU3Ry
aW5nIG5hbWUgPSBhbmltYXRpb25OYW1lLmlzRW1wdHkoKSA/IHByb3BlcnR5SWRUb1N0cmluZyh2
YWx1ZUxpc3QucHJvcGVydHkoKSkgOiBhbmltYXRpb25OYW1lOworICAgIE93blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gYW5pbSA9IENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFz
ZSgpLCBuYW1lLCBncm91cElEKyssIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOworCisg
ICAgYW5pbS0+c2V0SXRlcmF0aW9ucyhhbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpOworCisg
ICAgbV9hY3RpdmVBbmltYXRpb25zLmFwcGVuZChhbmltLnJlbGVhc2UoKSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAs
IENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IGRj
YTk2MDdlOTgxNDZhNmJkNjU1MDNlNzRmMTA0ZWEzODBjNDE4NzkuLjZjMzlhODAxYmUxNmQ1OTk5
MzU3YzQ5NTdjZTg1Y2Q4M2Q3NWM4Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtNzMsNiArNzMsOSBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwqKTsKICAgICB2b2lkIHB1c2hBbmltYXRpb25Qcm9wZXJ0aWVzKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCopOwogCisgICAgYm9vbCBjcmVhdGVUcmFuc2Zvcm1Bbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICBib29sIGNyZWF0
ZU9wYWNpdHlBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRp
b24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKwog
ICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRp
b246Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAgICAgdm9p
ZCByZW1vdmUoQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGU4ODIz
OTI5MjgwNjBhYjI1ZTFkYTJlNzA3ODI4ZDVmZjY3YzU0NjYuLjI4NTU0NDQ3ZjNkYmZkNzc0ZDQ5
ZjJlMTk3OTRkOTkyZTJmYWQ1YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
NjUsNiArNjUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKKyAgICAg
ICAgICAgICd0ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKaW5kZXggMjYxZWRmZmY4NTJm
MzNjMTNiNDkyMWJlNzBlNjA5ZTQyZjVlMmI5My4uMzYzMmZhYTdkMGFhZmViMmJjNmNlYjFjMTFl
MTQ1YmFjMzRmZDVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2Ug
ewogCiBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24o
aW50IGl0ZXJhdGlvbnMpCiB7Ci0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVy
bihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRp
b25DdXJ2ZSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiB0b1JldHVybihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSksICIiLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogICAgIHRvUmV0dXJuLT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlvbnMpOwog
ICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3Qu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY5MzQxYmNmOGE2YTcxMGYxN2M3MTlmODRlMDJlNDM1NDQ0NmE5NDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcApAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oIgorCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK3Zv
aWQgZXhwZWN0VHJhbnNsYXRlWChkb3VibGUgdHJhbnNsYXRlWCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21wb3Nl
ZFR5cGUgZGVjb21wb3NlZFR5cGU7CisgICAgbWF0cml4LmRlY29tcG9zZShkZWNvbXBvc2VkVHlw
ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHRyYW5zbGF0ZVgsIGRlY29tcG9zZWRUeXBlLnRyYW5z
bGF0ZVgpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggb25lIGtl
eWZyYW1lIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
VGVzdCwgT25lRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBr
ZXlmcmFtZXM7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgMikpOwor
ICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwg
Y3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZh
bHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworfQorCisvLyBUZXN0
cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBl
Y3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b0Zsb2F0S2V5ZnJh
bWUpCit7CisgICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIGtleWZy
YW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDIpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5k
KENDRmxvYXRLZXlmcmFtZSgxLCA0KSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUo
a2V5ZnJhbWVzKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5n
ZXRWYWx1ZSgyKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0
aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmVUZXN0LCBUaHJlZUZsb2F0S2V5ZnJhbWUpCit7CisgICAgVmVjdG9yPENDRmxvYXRL
ZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1l
KDAsIDIpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgxLCA0KSk7Cisg
ICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMiwgOCkpOworICAgIE93blB0cjxD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBj
dXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZh
bHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgs
IGN1cnZlLT5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRW
YWx1ZSgzKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCBtdWx0
aXBsZSBrZXlzIGF0IGEgZ2l2ZW4gdGltZSB3b3JrcyBzYW5lbHkuCitURVNUKENDS2V5ZnJhbWVk
QW5pbWF0aW9uQ3VydmVUZXN0LCBSZXBlYXRlZEZsb2F0S2V5VGltZXMpCit7CisgICAgVmVjdG9y
PENDRmxvYXRLZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KKyAg
ICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCA0KSk7CisgICAga2V5ZnJhbWVz
LmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgNCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NG
bG9hdEtleWZyYW1lKDEsIDYpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFt
ZSgyLCA2KSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3Vy
dmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQs
IGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKworICAgIC8vIFRoZXJlIGlzIGEgZGlzY29udGludWl0
eSBhdCAxLiBBbnkgdmFsdWUgYmV0d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgorICAgIGZsb2F0IHZh
bHVlID0gY3VydmUtPmdldFZhbHVlKDEpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlID49IDQgJiYg
dmFsdWUgPD0gNik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEu
NSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOworfQorCisKKy8vIFRlc3RzIHRo
YXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggb25lIGtleWZyYW1lIHdvcmtzIGFzIGV4cGVj
dGVkLgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lVHJhbnNmb3JtS2V5
ZnJhbWUpCit7CisgICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZyYW1lczsKKyAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgy
LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1gpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0
aW9ucykpOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBj
dXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVz
KSk7CisgICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKKyAgICBleHBlY3RUcmFuc2xh
dGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFu
c2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFu
c2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKK30KKworLy8gVGVzdHMg
dGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtzIGFzIGV4
cGVjdGVkLgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvVHJhbnNmb3Jt
S2V5ZnJhbWUpCit7CisgICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZyYW1lczsK
KyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWCkpOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3Bl
cmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVy
YXRpb246OlRSQU5TTEFURV9YKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtl
eWZyYW1lKDAsIG9wZXJhdGlvbnMxKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9y
bUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3Jl
ZAorICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUp
KTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUp
KTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6
ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6
ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6
ZSkpOworfQorCisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRocmVl
IGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZVRlc3QsIFRocmVlVHJhbnNmb3JtS2V5ZnJhbWUpCit7CisgICAgVmVjdG9yPENDVHJhbnNm
b3JtS2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwg
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgo
MCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCku
YXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg4LCBGaXhl
ZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsK
KyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEp
KTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9u
czIpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0
aW9uczMpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4g
Y3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1l
cykpOworICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCisgICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMywgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RU
cmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RU
cmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgzLCBsYXllclNpemUpKTsKK30KKworLy8gVGVz
dHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlzIGF0IGEgZ2l2
ZW4gdGltZSB3b3JrcyBzYW5lbHkuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0
LCBSZXBlYXRlZFRyYW5zZm9ybUtleVRpbWVzKQoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtl
eWZyYW1lPiBrZXlmcmFtZXM7CisgICAgLy8gQSBzdGVwIGZ1bmN0aW9uLgorICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFw
cGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQp
LCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Cisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVy
YXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJh
dGlvbnMzLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczQ7
CisgICAgb3BlcmF0aW9uczQub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1Ry
YW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChD
Q1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSk7CisgICAga2V5ZnJhbWVzLmFwcGVu
ZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMzKSk7CisgICAga2V5ZnJhbWVzLmFw
cGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlvbnM0KSk7CisgICAgT3duUHRyPEND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKworICAgIEludFNpemUgbGF5
ZXJTaXplOyAvLyBpZ25vcmVkCisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRW
YWx1ZSgtMSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoMCwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoMC41LCBsYXllclNpemUpKTsKKworICAgIC8vIFRoZXJlIGlzIGEgZGlzY29udGludWl0
eSBhdCAxLiBBbnkgdmFsdWUgYmV0d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgorICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHZhbHVlID0gY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSk7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zZWRUeXBlOworICAg
IHZhbHVlLmRlY29tcG9zZShkZWNvbXBvc2VkVHlwZSk7CisgICAgRVhQRUNUX1RSVUUoZGVjb21w
b3NlZFR5cGUudHJhbnNsYXRlWCA+PSA0ICYmIGRlY29tcG9zZWRUeXBlLnRyYW5zbGF0ZVggPD0g
Nik7CisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUsIGxheWVy
U2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVy
U2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDMsIGxheWVy
U2l6ZSkpOworfQorCisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LmNwcAppbmRleCA5MTQwZDdlMTk5ZTVjYjdmZmNkM2M1MTE2N2ZlZmMxNjI3YTdlOTk5
Li5lNGEzZGFmNjIzZTI2ZTBlZmUyZmExMTE0MGY5MGYyNGE3MjhkMjg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKIAog
UGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKFBhc3NP
d25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIGludCBpZCwgQ0NBY3RpdmVBbmltYXRpb246
OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQogewotICAgIHJldHVybiBDQ0FjdGl2ZUFuaW1hdGlv
bjo6Y3JlYXRlKGN1cnZlLCBpZCwgcHJvcGVydHkpOworICAgIHJldHVybiBDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGN1cnZlLCAiIiwgaWQsIHByb3BlcnR5KTsKIH0KIAogLy8gVGVzdHMgdGhh
dCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcAppbmRleCAyMGJmMjc3MzNkMGU1NDc3ZDM1MTdhZTIwYjliODZhMzJhM2NkYWUxLi4yZjY3
YTQ1ZWFiNTQxMzMxZDg3ZTc3MzRhYTNkM2NiMTg0ZmVlNWEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTY2LDYg
KzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNv
bnN0IEludFNpemUmLCBmbG9hdCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlv
bnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9CiB9OwogCiAvLyBB
ZGFwdHMgQ0NMYXllclRyZWVIb3N0SW1wbCBmb3IgdGVzdC4gUnVucyByZWFsIGNvZGUsIHRoZW4g
aW52b2tlcyB0ZXN0IGhvb2tzLgpAQCAtMTUzLDcgKzE1NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYs
IGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiAgICAgewotICAgICAgICBhY3RpdmVB
bmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMS4wLCAxLjBmLCAwLjBmKSksIDAsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgICAgIGFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLjAs
IDEuMGYsIDAuMGYpKSwgIiIsIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCmluZGV4IGY5Yjg4MWUyNjk0YThm
NjAwZDhjYzMwNWMxMzhkMWFjMTk4Y2U4MWMuLjQ3MTIzMDhlYjA4NjUxZDQ4OWM1NWU4MjcwMzk2
ODlhYTI0MjI2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJl
ZVN5bmNocm9uaXplclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC0zMzQsNyArMzM0LDcgQEAgVEVTVF9GKFRyZWVT
eW5jaHJvbml6ZXJUZXN0LCBzeW5jTmV3QW5pbWF0aW9uKQogICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhs
YXllclRyZWVSb290LmdldCgpLCAwKTsKIAogICAgIC8vIEFkZCBhbmltYXRpb24gdG8gbWFpbiB0
aHJlYWQgY29udHJvbGxlci4KLSAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJv
b3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJU
cmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksICIiLCAw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NM
YXllclRyZWVSb290LmdldCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKQEAgLTM0Nyw3ICszNDcsNyBAQCBURVNUX0YoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNBbmltYXRpb25Qcm9wZXJ0aWVzKQogICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAKICAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7Ci0gICAgZ2V0QW5pbWF0aW9uQ29u
dHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25D
dXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBnZXRBbmltYXRp
b25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBw
ZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1h
dGlvbkN1cnZlKCkpLCAiIiwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBj
Y0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJV
RShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CkBAIC0zNjgsNyArMzY4LDcgQEAg
VEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jQWJvcnRlZEFuaW1hdGlvbikKIAogICAg
IC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NM
YXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRy
ZWVSb290LmdldCgpLCAwKTsKLSAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJv
b3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJU
cmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksICIiLCAw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NM
YXllclRyZWVSb290LmdldCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKQEAgLTM4Nyw3ICszODcsNyBAQCBURVNUX0YoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNDb21wbGV0ZWRBbmltYXRpb24pCiAKICAgICAvLyBTeW5jIHdpdGggbm8g
YW5pbWF0aW9ucy4KICAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7
Ci0gICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZl
QW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5h
Y3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAiIiwgMCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKICAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxh
eWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1Rf
VFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5p
bWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127686</attachid>
            <date>2012-02-17 19:56:49 -0800</date>
            <delta_ts>2012-02-17 20:21:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77229-20120217225647.patch</filename>
            <type>text/plain</type>
            <size>149670</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTBhYjY4NGIyMzY3M2I4
M2E3Yjg4OGFiYjVjODIzMzhjYTE3MWI1NC4uYmU1ZDAxMjM3MmY0YzJkZjVlMWVjMjdkZGY5NmQ0
YWE2ODFmNzZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2OCBAQAorMjAxMi0wMi0xNyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIElt
cGxlbWVudCBrZXlmcmFtZWQgYW5pbWF0aW9ucyBmb3IgdGhlIGNjIHRocmVhZC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKHN0ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hy
b21pdW06OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmxheWVyQW5pbWF0aW9uU3RhcnRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
VG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0
ZUxheWVyUHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9t
aXVtOjptYXBBbmltYXRpb25OYW1lVG9JZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAgICAgIChHcmFwaGljc0xheWVy
Q2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYXVzZUFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c3VzcGVuZEFuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpoYXNBY3RpdmVBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0aW9uQ29udHJvbGxlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06Om51bUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OmFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246On5DQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1dh
aXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzUnVubmluZ09y
SGFzUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpjbG9uZUZvcklt
cGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OnN5bmNocm9u
aXplUHJvcGVydGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaDoKKyAgICAgICAgKENDQWN0aXZlQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25TaWduYXR1cmU6OkFuaW1h
dGlvblNpZ25hdHVyZSk6CisgICAgICAgIChBbmltYXRpb25TaWduYXR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FjdGl2ZUFuaW1hdGlvbjo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRp
b246Omdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzaWduYXR1
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
Q3VydmUuaDoKKyAgICAgICAgKENDQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBbmltYXRpb25FdmVudHMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Q0NBbmlt
YXRpb25TdGFydGVkRXZlbnQpOgorICAgICAgICAoQ0NBbmltYXRpb25TdGFydGVkRXZlbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRB
bmltYXRpb25DdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlOjp+Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6ZHVyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjbG9uZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5
ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJh
bWU6OkNDRmxvYXRLZXlmcmFtZSk6CisgICAgICAgIChDQ0Zsb2F0S2V5ZnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZSk6Cisg
ICAgICAgIChDQ1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAgICAgKENDS2V5ZnJhbWVkRmxvYXRB
bmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmlt
YXRpb25zVG9JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uUHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Z2V0QWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpyZW1vdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aGFzQWN0aXZlQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjp+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6Z2V0QWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRB
bmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRB
dmFpbGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25zKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwuaDoKKyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCk6Cisg
ICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6YW5pbWF0aW9uQ29udHJv
bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29t
bWl0T25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0
QW5pbWF0aW9uRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAg
ICAgICAoQ0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2Fs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KToKKyAgICAgICAg
KENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6bmVlZHNBbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldE5lZWRzQW5pbWF0ZUxheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFk
T25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaDoKKyAgICAgICAgKENDU2lu
Z2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWJ1Z1Njb3Bl
ZFNldE1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVidWdTY29wZWRTZXRNYWluVGhy
ZWFkOjpEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVidWdT
Y29wZWRTZXRNYWluVGhyZWFkOjp+RGVidWdTY29wZWRTZXRNYWluVGhyZWFkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJl
YWRPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpzZXRBbmltYXRpb25FdmVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaDoKKyAgICAgICAgKENDVGhyZWFkUHJv
eHkpOgorCiAyMDEyLTAyLTE3ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTA4MDcxLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCBkODczZWE3ZDBiNzQwMTAwYTY0ZmFiMzc4NjIzNTZmMGEwMWUz
ODA4Li4yOWUyOGMyYTA0NjNmM2ZlYTNhMDNkMDVjNzUxZDUwMWYwNTBmNmM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTAyLTE3ICBJYW4gVm9sbGlj
ayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50
IGtleWZyYW1lZCBhbmltYXRpb25zIGZvciB0aGUgY2MgdGhyZWFkLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyMjkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1v
bi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6On5GYWtlRmxvYXRB
bmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5pbWF0aW9u
Q3VydmU6OmNsb25lKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbjo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZh
a2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjp+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24pOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpnZXRWYWx1ZSk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmNsb25lKToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9u
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjp+RmFrZUZsb2F0
VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6
Z2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRpb246OmNs
b25lKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjphZGRPcGFjaXR5VHJhbnNpdGlvbik6CisgICAg
ICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgIChGYWtlRmxvYXRBbmltYXRp
b25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6
OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2
ZTo6Z2V0VmFsdWUpOgorICAgICAgICAoRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24pOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpkdXJhdGlvbik6CisgICAg
ICAgIChGYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxv
YXRUcmFuc2l0aW9uOjpkdXJhdGlvbik6CisgICAgICAgICogdGVzdHMvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6ZXhwZWN0VHJhbnNsYXRlWCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJvbGxlckNsaWVudDo6aWQpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VDb250cm9sbGVyQ2xpZW50Ojpib3VuZHMpOgorICAgICAgICAoRmFr
ZUNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdDo6cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVh
ZCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0SG9va3M6OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGVz
dEhvb2tzOjpzY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAgIChNb2NrTGF5ZXJUcmVlSG9zdElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpzY2hlZHVs
ZUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpwb3N0
QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hBZGRBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0
QWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRB
bmltYXRpb246OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6YmVnaW5UZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb246OmFuaW1hdGVMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6
YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMv
VHJlZVN5bmNocm9uaXplclRlc3QuY3BwOgorCiAyMDEyLTAyLTE3ICBJbHlhIFRpa2hvbm92c2t5
ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTA4MDcxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDhiZTgwZjM2M2JiYmMyNTU0M2E0ZWI4ZTlm
ZTA2NTE0Nzg0ZWI0YTguLjdlMGY4ZDEyZjM4MjhmZDJmYTVjMWE3YjE1YTczNTY3OWY0ODlhNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyMzIsNiArMzIzMiw3IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
Q3VydmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
bmltYXRpb25SZXN1bHRzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCkBAIC0zMjQ5
LDYgKzMyNTAsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTFmMjA0M2ZjNTRiNDVkY2FhNDY0
MzQ4Yzk0NzdmODdhNDYyNGZhNS4uYWI0MWU2MGYzZDAzYmY4N2UwNmY5N2U4Y2M5MzQ1MDcxYWJk
ZWM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC02MSw2ICs2
MSwxMCBAQAogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCituYW1lc3BhY2Ugeworc3RhdGljIHNp
emVfdCBncm91cElkID0gMDsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzT3duUHRy
PEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50
KiBjbGllbnQpCkBAIC0xMjQsNyArMTI4LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQogdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5
ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7Ci0gICAgaWYg
KCFtX2luU2V0Q2hpbGRyZW4pIAorICAgIGlmICghbV9pblNldENoaWxkcmVuKQogICAgICAgICB1
cGRhdGVDaGlsZExpc3QoKTsKIH0KIApAQCAtMzgyLDYgKzM4NiwzNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIAorYm9vbCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVz
LCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1
cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBtYXBB
bmltYXRpb25OYW1lVG9JZChhbmltYXRpb25OYW1lKSwgZ3JvdXBJZCwgdGltZU9mZnNldCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fbGF5ZXItPnBh
dXNlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCB0aW1lT2Zm
c2V0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCit7CisgICAgbV9sYXllci0+cmVtb3ZlQW5pbWF0
aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAg
IG1fbGF5ZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9sYXllci0+cmVzdW1lQW5p
bWF0aW9ucygpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bGF5ZXJBbmltYXRp
b25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICBtX2NsaWVudC0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBzdGFydFRpbWUpOworfQor
CiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3Jt
TGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC0z
OTYsMTIgKzQzMSwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNU
b01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICht
X2NvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7Ci0g
IAorCiAgICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVtb3Zl
ZCB2aWEgdXBkYXRlQ2hpbGRMaXN0LgogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gMDsK
ICAgICAgICAgfQogICAgIH0KLSAgCisKICAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQogICAgICAg
ICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KQEAgLTU1MCw3ICs1ODUsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCiAgICAgICAgIG1fbGF5ZXIt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMC41ZiwgMC41ZikpOwogICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eTsKICAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKGlk
ZW50aXR5KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2V0IHRoZSBvbGQgbGF5ZXIgdG8gb3Bh
Y2l0eSBvZiAxLiBGdXJ0aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhlIG9wYWNpdHkgb24gdGhlIHRy
YW5zZm9ybSBsYXllci4KICAgICAgICAgbV9sYXllci0+c2V0T3BhY2l0eSgxKTsKIApAQCAtNjg5
LDYgKzcyNCwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50cyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlYwogICAgIHBhaW50R3JhcGhpY3NM
YXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOwogfQogCitzaXplX3QgR3JhcGhpY3NMYXllckNo
cm9taXVtOjptYXBBbmltYXRpb25OYW1lVG9JZChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUp
Cit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFpbnRhaW4gYSBuYW1lIHRvIGlkIG1hcHBpbmcg
aW4gdGhpcyBjbGFzcy4KKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBkYmYxNWU1MWRiMTBiN2JkNjUxNTZkZThlN2Q4MDE5
M2ZmODdiMGQzLi4zOGFjNGZiZjIxYzZhMjAyMTBhODIwYjc1NjI4M2UzYjU1YzE2ZTVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtOTUsNiArOTUsMTQgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKIAor
ICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBj
b25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmLCBk
b3VibGUgdGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwg
dm9pZCByZXN1bWVBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIGxheWVyQW5pbWF0aW9uU3RhcnRl
ZChkb3VibGUgc3RhcnRUaW1lKTsKKwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHNldERlYnVnQmFja2dyb3VuZENv
bG9yKGNvbnN0IENvbG9yJik7CkBAIC0xMzIsNiArMTQwLDggQEAgcHJpdmF0ZToKICAgICB2b2lk
IHNldHVwQ29udGVudHNMYXllcihMYXllckNocm9taXVtKik7CiAgICAgZmxvYXQgY29udGVudHNT
Y2FsZSgpIGNvbnN0OwogCisgICAgc2l6ZV90IG1hcEFuaW1hdGlvbk5hbWVUb0lkKGNvbnN0IFN0
cmluZyYgYW5pbWF0aW9uTmFtZSk7CisKICAgICBTdHJpbmcgbV9uYW1lQmFzZTsKIAogICAgIFJl
ZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggNGJjZjI5N2ZmOTI0NjhjOTg0ZjViNGZjYzEyYmZmNTNiMjY2ZDY3NC4uMGNmNDhhMjdl
OTI3ODFhODRlMjAyZjYwZmFhZTQyMWNjMDY1N2U2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTMzLDYgKzMzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdC5oIgogI2lmIFVTRShTS0lBKQpAQCAtNTksNiArNjAsNyBAQCBMYXllckNo
cm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICA6IG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAg
ICwgbV9sYXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDApCisgICAgLCBt
X2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgp
KQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAu
NSkKICAgICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCkBAIC05Miw2ICs5NCw0MyBA
QCBMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4o
KTsKIH0KIAorYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9u
KiBhbmltYXRpb24sIHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRvdWJsZSB0
aW1lT2Zmc2V0KQoreworICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBtX2FuaW1hdGlvbkNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9u
SWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAg
ICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3Zv
aWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oc2l6ZV90IGFuaW1hdGlvbklkLCBkb3Vi
bGUgdGltZU9mZnNldCkKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0
aW9uKGFuaW1hdGlvbklkLCB0aW1lT2Zmc2V0KTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQor
Cit2b2lkIExheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihzaXplX3QgYW5pbWF0aW9uSWQp
Cit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5yZW1vdmVBbmltYXRpb24oYW5pbWF0aW9u
SWQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c3Vz
cGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVy
LT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2
b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fYW5pbWF0aW9u
Q29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9
CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKTsKK30K
Kwogdm9pZCBMYXllckNocm9taXVtOjpzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KGJvb2wgaXNO
b25Db21wb3NpdGVkQ29udGVudCkKIHsKICAgICBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBp
c05vbkNvbXBvc2l0ZWRDb250ZW50OwpAQCAtNTE0LDYgKzU1MywxMSBAQCBib29sIExheWVyQ2hy
b21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
dm9pZCBMYXllckNocm9taXVtOjpzZXRBbmltYXRpb25Db250cm9sbGVyKFBhc3NPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1hdGlvbkNvbnRyb2xsZXIpCit7CisgICAgbV9h
bmltYXRpb25Db250cm9sbGVyID0gYW5pbWF0aW9uQ29udHJvbGxlcjsKK30KKwogdm9pZCBzb3J0
TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKQogewogICAgIC8vIEN1cnJl
bnRseSB3ZSBkb24ndCB1c2Ugei1vcmRlciB0byBkZWNpZGUgd2hhdCB0byBwYWludCwgc28gdGhl
cmUncyBubyBuZWVkIHRvIGFjdHVhbGx5IHNvcnQgTGF5ZXJDaHJvbWl1bXMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmgKaW5kZXggZmYyZTdkMjg2MjYyMmZhZDJjMDY5MzhkNmY1MjU2OTE0MGY4ODNmYS4uMzMy
ZDY3ZWE3N2I2MDY1YzkxZjU1MmEzMTk3MWQ4OTVkZTg4ZmM3NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aApAQCAtNDgsMTAgKzQ4LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFz
cyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwpAQCAtNjEsNyArNjEs
NiBAQCBjbGFzcyBSZWdpb247CiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxheWVycy4g
U3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlzIGNsYXNzLgogY2xh
c3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKLSAg
ICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOwogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpOwogCkBAIC0yMTUsNyArMjE0LDIwIEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldEFsd2F5c1Jlc2VydmVUZXh0dXJlcyhib29sIGFsd2F5c1Jl
c2VydmVUZXh0dXJlcykgeyBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyA9IGFsd2F5c1Jlc2VydmVU
ZXh0dXJlczsgfQogICAgIGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKCkgY29uc3QgeyByZXR1
cm4gbV9hbHdheXNSZXNlcnZlVGV4dHVyZXM7IH0KIAorICAgIGJvb2wgYWRkQW5pbWF0aW9uKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5p
bWF0aW9uKiwgc2l6ZV90IGFuaW1hdGlvbklkLCBzaXplX3QgZ3JvdXBJZCwgZG91YmxlIHRpbWVP
ZmZzZXQpOworICAgIHZvaWQgcGF1c2VBbmltYXRpb24oc2l6ZV90IGFuaW1hdGlvbklkLCBkb3Vi
bGUgdGltZU9mZnNldCk7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24oc2l6ZV90IGFuaW1hdGlv
bklkKTsKKworICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZv
aWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBj
b25zdDsKKwogcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsKKyAgICBm
cmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOworICAgIGZyaWVuZCBjbGFzcyBUcmVlU3lu
Y2hyb25pemVyOworCiAgICAgTGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgYm9vbCBpc1BhaW50ZWRB
eGlzQWxpZ25lZEluU2NyZWVuKCkgY29uc3Q7CkBAIC0yMzMsOCArMjQ1LDYgQEAgcHJvdGVjdGVk
OgogCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fbWFza0xheWVyOwogCi0gICAgZnJpZW5k
IGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7Ci0gICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOwog
ICAgIC8vIENvbnN0cnVjdHMgYSBDQ0xheWVySW1wbCBvZiB0aGUgY29ycmVjdCBydW50aW1lIHR5
cGUgZm9yIHRoaXMgTGF5ZXJDaHJvbWl1bSB0eXBlLgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKICAgICBpbnQgbV9sYXllcklkOwpAQCAt
MjQzLDEwICsyNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0UGFyZW50KExheWVyQ2hyb21p
dW0qKTsKICAgICBib29sIGhhc0FuY2VzdG9yKExheWVyQ2hyb21pdW0qKSBjb25zdDsKIAotICAg
IHNpemVfdCBudW1DaGlsZHJlbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jaGls
ZHJlbi5zaXplKCk7Ci0gICAgfQorICAgIHNpemVfdCBudW1DaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGRyZW4uc2l6ZSgpOyB9CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0
aGUgY2hpbGQgb3IgLTEgaWYgbm90IGZvdW5kLgogICAgIGludCBpbmRleE9mQ2hpbGQoY29uc3Qg
TGF5ZXJDaHJvbWl1bSopOwpAQCAtMjU0LDExICsyNjEsMTYgQEAgcHJpdmF0ZToKICAgICAvLyBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21QYXJlbnQuCiAgICAgdm9p
ZCByZW1vdmVDaGlsZChMYXllckNocm9taXVtKik7CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJv
bGxlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW9uQ29udHJvbGxlcihQYXNzT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPik7CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gbV9jaGlsZHJlbjsKICAgICBMYXllckNocm9taXVtKiBtX3BhcmVudDsKIAog
ICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAorICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOworCiAg
ICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJl
Y3QgbV92aXNpYmxlTGF5ZXJSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCBk
MGZkMGNlNTIzZDYzODg0YmU5MzJlMWJkNDE2NTgyZjI1NzYyZTQwLi5kZTFjZjhhNjk0YmExYjNm
ZjFjYWYxNzg0NmZkYjFkZTU2MjE4NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCkBAIC03NCw2ICs3NSw4IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtCiAgICAgZWxz
ZQogICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVyKDApOwogCisgICAgbGF5ZXIt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+c3luY2hyb25pemVBbmltYXRpb25zKGNjTGF5ZXJJbXBs
LT5hbmltYXRpb25Db250cm9sbGVyKCkpOworCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
Y2NMYXllckltcGwuZ2V0KCkpOwogICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxlYXNlKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKaW5kZXggMjFlNmNjN2E5ZTI0NmVj
MGJlZmFhYTA1ODRmNmQyMjFjNDQ2MjBlYS4uNmE0OGI1ZDg0OThhNDdkYTQ1NWNjNmMxYzQ0YTUy
Y2ZhZWRiNzA2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtMzIs
OCArMzIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDQWN0aXZlQW5pbWF0aW9uOjpD
Q0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBHcm91
cElEIGdyb3VwLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK0NDQWN0aXZlQW5pbWF0
aW9uOjpDQ0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZl
LCBzaXplX3QgaWQsIHNpemVfdCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkp
CiAgICAgOiBtX2FuaW1hdGlvbkN1cnZlKGN1cnZlKQorICAgICwgbV9pZChpZCkKICAgICAsIG1f
Z3JvdXAoZ3JvdXApCiAgICAgLCBtX3RhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KQogICAg
ICwgbV9ydW5TdGF0ZShXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KQpAQCAtNDQsNiArNDUs
OCBAQCBDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRAogewogfQogCitDQ0FjdGl2ZUFuaW1hdGlvbjo6
fkNDQWN0aXZlQW5pbWF0aW9uKCkgeyB9CisKIHZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnNldFJ1
blN0YXRlKFJ1blN0YXRlIHJ1blN0YXRlLCBkb3VibGUgbm93KQogewogICAgIGlmIChydW5TdGF0
ZSA9PSBSdW5uaW5nICYmIG1fcnVuU3RhdGUgPT0gUGF1c2VkKQpAQCAtNjMsNiArNjYsMjEgQEAg
Ym9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0aW1lKSBjb25zdAog
ICAgICAgICAmJiBtX2l0ZXJhdGlvbnMgKiBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpIDw9
IHRpbWUgLSBzdGFydFRpbWUoKSAtIG1fdG90YWxQYXVzZWRUaW1lOwogfQogCitib29sIENDQWN0
aXZlQW5pbWF0aW9uOjppc1dhaXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3J1blN0YXRl
ID09IFdhaXRpbmdGb3JOZXh0VGljaworICAgICAgICB8fCBtX3J1blN0YXRlID09IFdhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHkKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBXYWl0aW5nRm9y
U3RhcnRUaW1lOworfQorCitib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhhc1J1
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcnVuU3RhdGUgPT0gUnVubmluZworICAgICAgICB8
fCBtX3J1blN0YXRlID09IEZpbmlzaGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRl
ZAorICAgICAgICB8fCBtX3J1blN0YXRlID09IFBhdXNlZDsKK30KKwogZG91YmxlIENDQWN0aXZl
QW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25zdAog
ewogICAgIGRvdWJsZSB0cmltbWVkID0gbm93OwpAQCAtOTUsNCArMTEzLDM2IEBAIGRvdWJsZSBD
Q0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykg
Y29uc3QKICAgICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlv
bigpKTsKIH0KIAorUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gQ0NBY3RpdmVBbmltYXRp
b246OmNsb25lRm9ySW1wbFRocmVhZCgpIGNvbnN0Cit7CisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b1JldHVybihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9hbmltYXRp
b25DdXJ2ZS0+Y2xvbmUoKSwgbV9pZCwgbV9ncm91cCwgbV90YXJnZXRQcm9wZXJ0eSkpKTsKKyAg
ICB0b1JldHVybi0+bV9ydW5TdGF0ZSA9IG1fcnVuU3RhdGU7CisgICAgdG9SZXR1cm4tPm1faXRl
cmF0aW9ucyA9IG1faXRlcmF0aW9uczsKKyAgICB0b1JldHVybi0+bV9zdGFydFRpbWUgPSBtX3N0
YXJ0VGltZTsKKyAgICB0b1JldHVybi0+bV9wYXVzZVRpbWUgPSBtX3BhdXNlVGltZTsKKyAgICB0
b1JldHVybi0+bV90b3RhbFBhdXNlZFRpbWUgPSBtX3RvdGFsUGF1c2VkVGltZTsKKyAgICByZXR1
cm4gdG9SZXR1cm4ucmVsZWFzZSgpOworfQorCit2b2lkIENDQWN0aXZlQW5pbWF0aW9uOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXMoQ0NBY3RpdmVBbmltYXRpb24qIG90aGVyKQoreworICAgIC8vIEl0
IGlzIHBvc3NpYmxlIGZvciB0aGUgaW1wbCB0aHJlYWQgdG8gaW5pdGlhdGUgYSBydW4gc3RhdGUg
Y2hhbmdlLgorICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBhbmltYXRpb24gd2FzIHdhaXRp
bmcgZm9yIGEgZnV0dXJlIGV2ZW50IHRvIHRha2UKKyAgICAvLyBwbGFjZSwgYW5kIHRoZSBldmVu
dCBoYXMgdGFrZW4gcGxhY2UuIEluIHRoYXQgY2FzZSwgd2Ugd2FudCAndGhpcycgdG8KKyAgICAv
LyBhc3N1bWUgdGhlIGltcGwgdGhyZWFkJ3MgcnVuIHN0YXRlIGFuZCBzdGFydCB0aW1lLgorICAg
IGlmIChpc1dhaXRpbmcoKSAmJiBvdGhlci0+aXNSdW5uaW5nT3JIYXNSdW4oKSkgeworICAgICAg
ICBtX3J1blN0YXRlID0gb3RoZXItPm1fcnVuU3RhdGU7CisgICAgICAgIG1fc3RhcnRUaW1lID0g
b3RoZXItPm1fc3RhcnRUaW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIG90aGVyLT5tX3J1blN0
YXRlID0gbV9ydW5TdGF0ZTsKKyAgICAgICAgb3RoZXItPm1fc3RhcnRUaW1lID0gbV9zdGFydFRp
bWU7CisgICAgfQorCisgICAgLy8gQ2hhbmdlIGluIHN0YXRlIHJlbGF0ZWQgdG8gaXRlcmF0aW9u
cyBhbmQgcGF1c2UgaXMgYWx3YXlzIGluaXRpYXRlZCBmcm9tCisgICAgLy8gdGhlIG1haW4gdGhy
ZWFkLCBzbyBpdCBpcyBzYWZlIHRvIHB1c2ggcHJvcGVydGllcyBpbiB0aGF0IGRpcmVjdGlvbi4K
KyAgICBvdGhlci0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOworICAgIG90aGVyLT5tX3Bh
dXNlVGltZSA9IG1fcGF1c2VUaW1lOworICAgIG90aGVyLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1f
dG90YWxQYXVzZWRUaW1lOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaAppbmRleCBjMjIyMjc5NDFhM2NlZDEyZDY1OGQ3NmQ2MDRlZWU5
ZmJhZDBhM2QxLi5kZWFhNGMwMWU4MWMzOGEwMDMyOTI4MzE4ZjJiM2FmZWEwZjU2OTc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fj
dGl2ZUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKQEAgLTI1LDI1ICsyNSwyMCBAQAogI2lmbmRl
ZiBDQ0FjdGl2ZUFuaW1hdGlvbl9oCiAjZGVmaW5lIENDQWN0aXZlQW5pbWF0aW9uX2gKIAorI2lu
Y2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENDQW5pbWF0aW9uQ3VydmU7Ci0KIC8v
IEEgQ0NBY3RpdmVBbmltYXRpb24sIGNvbnRhaW5zIGFsbCB0aGUgc3RhdGUgcmVxdWlyZWQgdG8g
cGxheSBhIENDQW5pbWF0aW9uQ3VydmUuCiAvLyBTcGVjaWZpY2FsbHksIHRoZSBhZmZlY3RlZCBw
cm9wZXJ0eSwgdGhlIHJ1biBzdGF0ZSAocGF1c2VkLCBmaW5pc2hlZCwgZXRjLiksCiAvLyBsb29w
IGNvdW50LCBsYXN0IHBhdXNlIHRpbWUsIGFuZCB0aGUgdG90YWwgdGltZSBzcGVudCBwYXVzZWQu
CiBjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NB
Y3RpdmVBbmltYXRpb24pOwogcHVibGljOgotICAgIC8vIEFuaW1hdGlvbnMgdGhhdCBtdXN0IGJl
IHJ1biB0b2dldGhlciBhcmUgY2FsbGVkICdncm91cGVkJyBhbmQgaGF2ZSB0aGUgc2FtZSBHcm91
cElECi0gICAgLy8gR3JvdXBlZCBhbmltYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIHN0YXJ0IGF0
IHRoZSBzYW1lIHRpbWUgYW5kIG5vIG90aGVyIGFuaW1hdGlvbnMKLSAgICAvLyBtYXkgYW5pbWF0
ZSBhbnkgb2YgdGhlIGdyb3VwJ3MgdGFyZ2V0IHByb3BlcnRpZXMgdW50aWwgYWxsIGFuaW1hdGlv
bnMgaW4gdGhlCi0gICAgLy8gZ3JvdXAgaGF2ZSBmaW5pc2hlZCBhbmltYXRpbmcuIE5vdGU6IGFu
IGFjdGl2ZSBhbmltYXRpb24ncyBncm91cCBpZCBhbmQgdGFyZ2V0Ci0gICAgLy8gcHJvcGVydHkg
dW5pcXVlbHkgaWRlbnRpZnkgdGhhdCBhbmltYXRpb24uCi0gICAgdHlwZWRlZiBpbnQgR3JvdXBJ
RDsKLQogICAgIC8vIEFuaW1hdGlvbnMgYmVnaW4gaW4gb25lIG9mIHRoZSAnd2FpdGluZycgc3Rh
dGVzLiBBbmltYXRpb25zIHdhaXRpbmcgZm9yIHRoZSBuZXh0IHRpY2sKICAgICAvLyB3aWxsIHN0
YXJ0IHRoZSBuZXh0IHRpbWUgdGhlIGNvbnRyb2xsZXIgYW5pbWF0ZXMuIEFuaW1hdGlvbnMgd2Fp
dGluZyBmb3IgdGFyZ2V0CiAgICAgLy8gYXZhaWxpYmlsaXR5IHdpbGwgcnVuIGFzIHNvb24gYXMg
dGhlaXIgdGFyZ2V0IHByb3BlcnR5IGlzIGZyZWUgKGFuZCBhbGwgdGhlIGFuaW1hdGlvbnMKQEAg
LTY4LDE0ICs2MywyMyBAQCBwdWJsaWM6CiAgICAgICAgIE9wYWNpdHkKICAgICB9OwogCi0gICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZShQYXNzT3duUHRyPEND
QW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBHcm91cElEIGdyb3VwLCBUYXJnZXRQcm9wZXJ0eSB0YXJn
ZXRQcm9wZXJ0eSkKKyAgICBzdHJ1Y3QgQW5pbWF0aW9uU2lnbmF0dXJlIHsKKyAgICAgICAgQW5p
bWF0aW9uU2lnbmF0dXJlKHNpemVfdCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9w
ZXJ0eSkKKyAgICAgICAgICAgIDogZ3JvdXBJZChncm91cElkKQorICAgICAgICAgICAgLCB0YXJn
ZXRQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0eSkgeyB9CisgICAgICAgIHNpemVfdCBncm91cElkOwor
ICAgICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eTsKKyAgICB9OworCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZShQYXNzT3duUHRyPENDQW5p
bWF0aW9uQ3VydmU+IGN1cnZlLCBzaXplX3QgaWQsIHNpemVfdCBncm91cCwgVGFyZ2V0UHJvcGVy
dHkgdGFyZ2V0UHJvcGVydHkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEND
QWN0aXZlQW5pbWF0aW9uKGN1cnZlLCBncm91cCwgdGFyZ2V0UHJvcGVydHkpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihjdXJ2ZSwgaWQsIGdyb3VwLCB0
YXJnZXRQcm9wZXJ0eSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0aW9u
KCkgeyB9CisgICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRpb24oKTsKIAotICAgIEdyb3VwSUQg
Z3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwOyB9CisgICAgc2l6ZV90IGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQorICAgIHNpemVfdCBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3Jv
dXA7IH0KICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0UHJvcGVydHk7IH0KIAogICAgIFJ1blN0YXRlIHJ1blN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydW5TdGF0ZTsgfQpAQCAtOTMsNiArOTcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0ZpbmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0OwogICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcnVuU3RhdGUgPT0gRmluaXNoZWQgfHwgbV9ydW5TdGF0ZSA9PSBBYm9y
dGVkOyB9CiAKKyAgICBib29sIGlzV2FpdGluZygpIGNvbnN0OworICAgIGJvb2wgaXNSdW5uaW5n
T3JIYXNSdW4oKSBjb25zdDsKKwogICAgIENDQW5pbWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1cnZl
KCkgeyByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS5nZXQoKTsgfQogICAgIGNvbnN0IENDQW5pbWF0
aW9uQ3VydmUqIGFuaW1hdGlvbkN1cnZlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25DdXJ2
ZS5nZXQoKTsgfQogCkBAIC0xMDAsMTEgKzEwNywyNiBAQCBwdWJsaWM6CiAgICAgLy8gb2YgaXRl
cmF0aW9ucywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBpbiB0aGUgY3VycmVudCBpdGVyYXRp
b24uCiAgICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNv
bnN0OwogCisgICAgQW5pbWF0aW9uU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IEFuaW1hdGlvblNpZ25hdHVyZShtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KTsgfQorCisgICAg
UGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3Q7
CisKKyAgICB2b2lkIHN5bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiopOwor
CiBwcml2YXRlOgotICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25D
dXJ2ZT4sIEdyb3VwSUQsIFRhcmdldFByb3BlcnR5KTsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbihQ
YXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBzaXplX3QsIHNpemVfdCwgVGFyZ2V0UHJvcGVy
dHkpOwogCiAgICAgT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IG1fYW5pbWF0aW9uQ3VydmU7Ci0g
ICAgR3JvdXBJRCBtX2dyb3VwOworICAgIC8vIE5vdGUgaWQncyBhcmUgbm90IG5lY2Vzc2FyaWx5
IHVuaXF1ZS4KKyAgICBzaXplX3QgbV9pZDsKKworICAgIC8vIEFuaW1hdGlvbnMgdGhhdCBtdXN0
IGJlIHJ1biB0b2dldGhlciBhcmUgY2FsbGVkICdncm91cGVkJyBhbmQgaGF2ZSB0aGUgc2FtZSBH
cm91cElECisgICAgLy8gR3JvdXBlZCBhbmltYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIHN0YXJ0
IGF0IHRoZSBzYW1lIHRpbWUgYW5kIG5vIG90aGVyIGFuaW1hdGlvbnMKKyAgICAvLyBtYXkgYW5p
bWF0ZSBhbnkgb2YgdGhlIGdyb3VwJ3MgdGFyZ2V0IHByb3BlcnRpZXMgdW50aWwgYWxsIGFuaW1h
dGlvbnMgaW4gdGhlCisgICAgLy8gZ3JvdXAgaGF2ZSBmaW5pc2hlZCBhbmltYXRpbmcuIE5vdGU6
IGFuIGFjdGl2ZSBhbmltYXRpb24ncyBncm91cCBpZCBhbmQgdGFyZ2V0CisgICAgLy8gcHJvcGVy
dHkgdW5pcXVlbHkgaWRlbnRpZnkgdGhhdCBhbmltYXRpb24uCisgICAgc2l6ZV90IG1fZ3JvdXA7
CisKICAgICBUYXJnZXRQcm9wZXJ0eSBtX3RhcmdldFByb3BlcnR5OwogICAgIFJ1blN0YXRlIG1f
cnVuU3RhdGU7CiAgICAgaW50IG1faXRlcmF0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3Vy
dmUuaAppbmRleCBkZTk3ZTM4YzBhMjRlNzc3OGI4ZDk2ZGM5MGZlZjZlYzk5MzliYWUzLi41MzNh
YmFmZWY0NTQ3ZDU0OTNiYTU5NzExYmUxNTUxNjY3ZWUyNGY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oCkBAIC0yNSw2ICsyNSwxMCBAQAogI2lmbmRlZiBDQ0FuaW1hdGlvbkN1cnZl
X2gKICNkZWZpbmUgQ0NBbmltYXRpb25DdXJ2ZV9oCiAKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmU7CkBAIC00MSw2ICs0NSw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0ID0gMDsKIAogICAgIGNvbnN0IENDRmxvYXRB
bmltYXRpb25DdXJ2ZSogdG9GbG9hdEFuaW1hdGlvbkN1cnZlKCkgY29uc3Q7CiAgICAgY29uc3Qg
Q0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIGNv
bnN0OwpAQCAtNjAsNyArNjUsNyBAQCBjbGFzcyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDog
cHVibGljIENDQW5pbWF0aW9uQ3VydmUgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KIAotICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9u
cyBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRp
b25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHQsIGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkgY29u
c3QgPSAwOwogCiAgICAgLy8gUGFydGlhbCBDQ0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KICAg
ICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRyYW5zZm9ybTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25FdmVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIxYTc5ZTMxMzk3ZWM4OGUzZDU5
NGU5MjMyNjNjMWViODAzM2U4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FuaW1hdGlvbkV2ZW50c19oCisjZGVm
aW5lIENDQW5pbWF0aW9uRXZlbnRzX2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbmRpY2F0ZXMgdGhhdCBhbiBhbmltYXRpb24gaGFzIHN0
YXJ0ZWQgb24gYSBwYXJ0aWN1bGFyIGxheWVyLgorc3RydWN0IENDQW5pbWF0aW9uU3RhcnRlZEV2
ZW50IHsKKyAgICBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChpbnQgbGF5ZXJJRCwgZG91YmxlIHRp
bWUpCisgICAgICAgIDogbGF5ZXJJRChsYXllcklEKQorICAgICAgICAsIHRpbWUodGltZSkgeyB9
CisgICAgaW50IGxheWVySUQ7CisgICAgZG91YmxlIHRpbWU7Cit9OworCit0eXBlZGVmIFZlY3Rv
cjxDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudD4gQ0NBbmltYXRpb25FdmVudHNWZWN0b3I7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDQW5pbWF0aW9uRXZlbnRzX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
S2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTgxNGQ0ZGM3YjY2NjAwM2IzOTk5MTZmZDQ0OGE1YWNkOTQzMzRmMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlLmgiCisKKyNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24uaCIKKyNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNrZXdUcmFuc2Zvcm1PcGVyYXRp
b24uaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ugewor
Cit0ZW1wbGF0ZSA8Y2xhc3MgS0VZRlJBTUU+Citib29sIGtleWZyYW1lc0FyZVNvcnRlZChjb25z
dCBWZWN0b3I8S0VZRlJBTUU+JiBrZXlmcmFtZXMpCit7CisgICAgaWYgKCFrZXlmcmFtZXMuc2l6
ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
a2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBpZiAoa2V5ZnJhbWVzW2ldLnRp
bWUgPiBrZXlmcmFtZXNbaSsxXS50aW1lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworUGFzc093blB0cjxD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+JiBrZXlmcmFtZXMpCit7
CisgICAgaWYgKCFrZXlmcmFtZXMuc2l6ZSgpIHx8ICFrZXlmcmFtZXNBcmVTb3J0ZWQoa2V5ZnJh
bWVzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZShrZXlmcmFtZXMpKTsKK30KKworQ0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUo
Y29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4mIGtleWZyYW1lcykKKyAgICA6IG1fa2V5ZnJh
bWVzKGtleWZyYW1lcykKK3sKK30KKworQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjp+
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCkgeyB9CisKK2RvdWJsZSBDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9r
ZXlmcmFtZXMubGFzdCgpLnRpbWUgLSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWU7Cit9CisKK1Bh
c3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZl
OjpjbG9uZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmUoKnRoaXMpKTsKK30KKworZmxvYXQgQ0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QKK3sKKyAgICBpZiAodCA8PSBt
X2tleWZyYW1lcy5maXJzdCgpLnRpbWUpCisgICAgICAgIHJldHVybiBtX2tleWZyYW1lcy5maXJz
dCgpLnZhbHVlOworCisgICAgaWYgKHQgPj0gbV9rZXlmcmFtZXMubGFzdCgpLnRpbWUpCisgICAg
ICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0KCkudmFsdWU7CisKKyAgICBzaXplX3QgaSA9IDA7
CisgICAgZm9yICg7IGkgPCBtX2tleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAg
aWYgKHQgPCBtX2tleWZyYW1lc1tpKzFdLnRpbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBmbG9hdCBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PGZsb2F0PigodCAtIG1fa2V5ZnJh
bWVzW2ldLnRpbWUpIC8gKG1fa2V5ZnJhbWVzW2krMV0udGltZSAtIG1fa2V5ZnJhbWVzW2ldLnRp
bWUpKTsKKyAgICAvLyBGSVhNRTogYXBwbHkgdGltaW5nIGZ1bmN0aW9uIGhlcmUuCisgICAgcmV0
dXJuIG1fa2V5ZnJhbWVzW2ldLnZhbHVlICsgKG1fa2V5ZnJhbWVzW2krMV0udmFsdWUgLSBtX2tl
eWZyYW1lc1tpXS52YWx1ZSkgKiBwcm9ncmVzczsKK30KKworUGFzc093blB0cjxDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoY29uc3QgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+JiBrZXlmcmFtZXMp
Cit7CisgICAgaWYgKCFrZXlmcmFtZXMuc2l6ZSgpIHx8ICFrZXlmcmFtZXNBcmVTb3J0ZWQoa2V5
ZnJhbWVzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoa2V5ZnJhbWVzKSk7Cit9CisK
K0NDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUoY29uc3QgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+JiBrZXlmcmFt
ZXMpCisgICAgOiBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCit7Cit9CisKK0NDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
KCkgeyB9CisKK2RvdWJsZSBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpkdXJh
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS50aW1lIC0gbV9r
ZXlmcmFtZXMuZmlyc3QoKS50aW1lOworfQorCitQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+
IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNsb25lKCkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIC8vIFdlIG5lZWQg
dG8gZG8gYSBkZWVwIGNvcHkgb2YgYWxsIG9mIHRoZSBrZXlmcmFtZXMgc2luY2UgdGhleSBjb250
YWluIHJlZgorICAgIC8vIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9wZXJhdGlvbiBvYmplY3RzLgor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgQ0NUcmFuc2Zvcm1LZXlmcmFtZSBrZXlmcmFtZShtX2tleWZyYW1lc1tpXS50aW1lKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2tleWZyYW1lc1tpXS52YWx1ZS5zaXpl
KCk7ICsraikgeworICAgICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IG9wZXJhdGlvblR5cGUgPSBtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0tPmdl
dE9wZXJhdGlvblR5cGUoKTsKKyAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6CisgICAgICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWToKKyAgICAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlNDQUxFXzNEOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlND
QUxFOiB7CisgICAgICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0u
dmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52
YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
dHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9u
VHlwZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgorICAgICAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9ZOgorICAgICAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV8zRDoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEU6IHsKKyAgICAgICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRy
YW5zZm9ybS0+eigpLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRF
X1g6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6CisgICAg
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgorICAgICAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTogeworICAgICAgICAgICAgICAgIFJvdGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0t
PnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSwgb3BlcmF0aW9uVHlwZSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTS0VXX1k6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
U0tFVzogeworICAgICAgICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihtX2tleWZyYW1lc1tpXS52
YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZh
bHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRy
YW5zZm9ybS0+YW5nbGVYKCksIHRyYW5zZm9ybS0+YW5nbGVZKCksIG9wZXJhdGlvblR5cGUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKKyAgICAgICAgICAgICAgICBNYXRyaXhUcmFu
c2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4
KCk7CisgICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9ucygpLmFwcGVuZChN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtLmEoKSwgbS5iKCksIG0uYygpLCBtLmQo
KSwgbS5lKCksIG0uZigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOiB7CisgICAg
ICAgICAgICAgICAgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUu
b3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5v
cGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJh
bnNmb3JtLT5tYXRyaXgoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOiB7Cisg
ICAgICAgICAgICAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9
IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNb
aV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFt
ZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUodHJhbnNmb3JtLT5wZXJzcGVjdGl2ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
SURFTlRJVFk6IHsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCku
YXBwZW5kKElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Tk9ORToKKyAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgfSAvLyBmb3Ig
ZWFjaCBvcGVyYXRpb24KKyAgICAgICAga2V5ZnJhbWVzLmFwcGVuZChrZXlmcmFtZSk7CisgICAg
fQorICAgIHJldHVybiBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUo
a2V5ZnJhbWVzKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUoZG91YmxlIHQsIGNvbnN0IEludFNpemUmIGxheWVy
U2l6ZSkgY29uc3QKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1NYXRyaXg7
CisKKyAgICBpZiAodCA8PSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWUpIHsKKyAgICAgICAgbV9r
ZXlmcmFtZXMuZmlyc3QoKS52YWx1ZS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7
CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm1NYXRyaXg7CisgICAgfQorCisgICAgaWYgKHQgPj0g
bV9rZXlmcmFtZXMubGFzdCgpLnRpbWUpIHsKKyAgICAgICAgbV9rZXlmcmFtZXMubGFzdCgpLnZh
bHVlLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgcmV0dXJuIHRy
YW5zZm9ybU1hdHJpeDsKKyAgICB9CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAgZm9yICg7IGkg
PCBtX2tleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgaWYgKHQgPCBtX2tleWZy
YW1lc1tpKzFdLnRpbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBGSVhN
RTogYXBwbHkgdGltaW5nIGZ1bmN0aW9uIGhlcmUuCisgICAgZG91YmxlIHByb2dyZXNzID0gKHQg
LSBtX2tleWZyYW1lc1tpXS50aW1lKSAvIChtX2tleWZyYW1lc1tpKzFdLnRpbWUgLSBtX2tleWZy
YW1lc1tpXS50aW1lKTsKKworICAgIGlmIChtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25z
TWF0Y2gobV9rZXlmcmFtZXNbaSsxXS52YWx1ZSkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCBtX2tleWZyYW1lc1tpKzFdLnZhbHVlLnNpemUoKTsgKytqKQorICAgICAgICAgICAg
bV9rZXlmcmFtZXNbaSsxXS52YWx1ZS5vcGVyYXRpb25zKClbal0tPmJsZW5kKG1fa2V5ZnJhbWVz
W2ldLnZhbHVlLmF0KGopLCBwcm9ncmVzcyktPmFwcGx5KHRyYW5zZm9ybU1hdHJpeCwgbGF5ZXJT
aXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzb3VyY2U7
CisKKyAgICAgICAgbV9rZXlmcmFtZXNbaV0udmFsdWUuYXBwbHkobGF5ZXJTaXplLCBzb3VyY2Up
OworICAgICAgICBtX2tleWZyYW1lc1tpKzFdLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNm
b3JtTWF0cml4KTsKKworICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQoc291cmNlLCBwcm9n
cmVzcyk7CisgICAgfQorCisgICAgcmV0dXJuIHRyYW5zZm9ybU1hdHJpeDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVlYWVhYWE3NTUwM2VhMjg3ZjQ1MzhhOTY4MTg4OTMxZDk2OTdk
Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKQEAgLTAsMCArMSwxMDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCisjZGVm
aW5lIENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0cnVjdCBDQ0Zsb2F0S2V5ZnJhbWUgeworICAgIENDRmxvYXRLZXlmcmFt
ZShkb3VibGUgdGltZSwgZmxvYXQgdmFsdWUpCisgICAgICAgIDogdGltZSh0aW1lKQorICAgICAg
ICAsIHZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgZG91YmxlIHRpbWU7CisgICAgZmxv
YXQgdmFsdWU7Cit9OworCitzdHJ1Y3QgQ0NUcmFuc2Zvcm1LZXlmcmFtZSB7CisgICAgQ0NUcmFu
c2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSkKKyAgICAgICAgOiB0aW1lKHRpbWUpCisgICAgewor
ICAgIH0KKyAgICBDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zJiB2YWx1ZSkKKyAgICAgICAgOiB0aW1lKHRpbWUpCisgICAgICAgICwgdmFs
dWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICBkb3VibGUgdGltZTsKKyAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIHZhbHVlOworfTsKKworY2xhc3MgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgLy8gSXQg
aXMgcmVxdWlyZWQgdGhhdCB0aGUga2V5ZnJhbWVzIGJlIHNvcnRlZCBieSB0aW1lLgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3JlYXRlKGNv
bnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+JiBrZXlmcmFtZXMpOworCisgICAgdmlydHVhbCB+
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICAvLyBDQ0FuaW1hdGlvbkN1
cnZlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsK
KworICAgIC8vIENDRmxvYXRBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1
YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxp
Y2l0IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NGbG9hdEtl
eWZyYW1lPiYpOworCisgICAgLy8gQWx3YXlzIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5n
IHRpbWUuIE5vIHR3byBrZXlmcmFtZXMgaGF2ZSB0aGUKKyAgICAvLyBzYW1lIHRpbWUuCisgICAg
VmVjdG9yPENDRmxvYXRLZXlmcmFtZT4gbV9rZXlmcmFtZXM7Cit9OworCitjbGFzcyBDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUgeworcHVibGljOgorICAgIC8vIEl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIGtleWZyYW1l
cyBiZSBzb3J0ZWQgYnkgdGltZS4KKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0tleWZyYW1lZFRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjcmVhdGUoY29uc3QgVmVjdG9yPENDVHJhbnNmb3JtS2V5
ZnJhbWU+JiBrZXlmcmFtZXMpOworCisgICAgdmlydHVhbCB+Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSgpOworCisgICAgLy8gQ0NBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlv
bgorICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNz
T3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3Q7CisKKyAgICAvLyBDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUo
Y29uc3QgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+Jik7CisKKyAgICAvLyBBbHdheXMgc29y
dGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdvIGtleWZyYW1lcyBoYXZlIHRo
ZQorICAgIC8vIHNhbWUgdGltZS4KKyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gbV9r
ZXlmcmFtZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzkxNjE0M2U1NGU4ZTNhZTc5YjRkNjEx
ZTgxNWI3YjQ4NDYyZGNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBA
IC0wLDAgKzEsMjE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKKyNpbmNsdWRlICJjYy9DQ0Fj
dGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKyNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlIDxjbGFzcyBLRVlGUkFN
RSwgY2xhc3MgQ1VSVkU+CitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3Rp
dmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5p
bWF0aW9uKiBhbmltYXRpb24sIHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRv
dWJsZSB0aW1lT2Zmc2V0KQoreworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGlmZmVy
ZW50IGRpcmVjdGlvbnMuCisgICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRGlyZWN0
aW9uU2V0KCkgJiYgYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvbkFsdGVybmF0ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBG
SVhNRTogYWRkIHN1cHBvcnQgZm9yIGRlbGF5CisgICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRp
b24tPmlzRGVsYXlTZXQoKSAmJiBhbmltYXRpb24tPmRlbGF5KCkgPiAwKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZmlsbHMgZm9yd2Fy
ZHMgYW5kIGZpbGxzIGJhY2t3YXJkcworICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5p
c0ZpbGxNb2RlU2V0KCkgJiYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpIHx8IGFuaW1hdGlv
bi0+ZmlsbHNCYWNrd2FyZHMoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVmVj
dG9yPEtFWUZSQU1FPiBrZXlmcmFtZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZh
bHVlTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICBGbG9hdEFuaW1hdGlvblZhbHVlKiBvcmln
aW5hbFZhbHVlID0gKEZsb2F0QW5pbWF0aW9uVmFsdWUqKXZhbHVlTGlzdC5hdChpKTsKKworICAg
ICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHRpbWluZyBmdW5jdGlvbnMuCisgICAgICAg
IGlmIChvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpICYmIG9yaWdpbmFsVmFsdWUtPnRp
bWluZ0Z1bmN0aW9uKCktPnR5cGUoKSAhPSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb24p
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBkb3VibGUgZHVyYXRpb24g
PSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlvblNldCgpKSA/IGFuaW1hdGlvbi0+
ZHVyYXRpb24oKSA6IDE7CisgICAgICAgIGtleWZyYW1lcy5hcHBlbmQoS0VZRlJBTUUob3JpZ2lu
YWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb24sIG9yaWdpbmFsVmFsdWUtPnZhbHVlKCkpKTsK
KyAgICB9CisKKyAgICBPd25QdHI8Q1VSVkU+IGN1cnZlID0gQ1VSVkU6OmNyZWF0ZShrZXlmcmFt
ZXMpOworCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltID0gQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklkLCBncm91cElkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7CisKKyAgICBBU1NFUlQoYW5pbS5nZXQoKSk7CisKKyAg
ICBpZiAoYW5pbS5nZXQoKSkgeworICAgICAgICBpbnQgaXRlcmF0aW9ucyA9IChhbmltYXRpb24g
JiYgYW5pbWF0aW9uLT5pc0l0ZXJhdGlvbkNvdW50U2V0KCkpID8gYW5pbWF0aW9uLT5pdGVyYXRp
b25Db3VudCgpIDogMTsKKyAgICAgICAgYW5pbS0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsK
KyAgICB9CisKKyAgICByZXR1cm4gYW5pbS5yZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXBhY2UK
KworQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KCkKK3sKK30KKworQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6On5DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcigpCit7Cit9CisKK1Bhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI+IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworfQorCitib29sIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBh
bmltYXRpb24sIHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRvdWJsZSB0aW1l
T2Zmc2V0KQoreworICAgIGlmICghYW5pbWF0aW9uIHx8IGFuaW1hdGlvbi0+aXNFbXB0eU9yWmVy
b0R1cmF0aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQ7CisgICAgaWYgKHZhbHVl
TGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAg
ICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPENDVHJhbnNmb3JtS2V5ZnJhbWUsIEND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KHZhbHVlTGlzdCwgYW5pbWF0aW9uLCBh
bmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCk7CisgICAgZWxzZSBpZiAodmFsdWVMaXN0
LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCisgICAgICAgIHRvQWRkID0g
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uPENDRmxvYXRLZXlmcmFtZSwgQ0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlPih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQs
IHRpbWVPZmZzZXQpOworCisgICAgaWYgKHRvQWRkLmdldCgpKSB7CisgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9ucy5hcHBlbmQodG9BZGQucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihzaXplX3QgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1l
T2Zmc2V0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkg
PT0gYW5pbWF0aW9uSWQpCisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIHRpbWVPZmZzZXQpOworICAgIH0KK30K
Kwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKHNpemVf
dCBhbmltYXRpb25JZCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7KSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlk
KCkgPT0gYW5pbWF0aW9uSWQpCisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3Zl
KGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpKys7CisgICAgfQorfQorCisvLyBBY2Nv
cmRpbmcgdG8gcmVuZGVyIGxheWVyIGJhY2tpbmcsIHRoZXNlIGFyZSBmb3IgdGVzdGluZyBvbmx5
Lgordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoZG91
YmxlIHRpbWUpCit7Cit9CisKKy8vIExvb2tpbmcgYXQgR3JhcGhpY3NMYXllckNBLCB0aGlzIGFw
cGVhcnMgdG8gYmUgdGhlIGFuYWxvZyB0byBzdXNwZW5kQW5pbWF0aW9ucywgd2hpY2ggaXMgZm9y
IHRlc3RpbmcuCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmltYXRp
b25zKCkKK3sKK30KKworLy8gRW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9mIGFjdGl2ZSBhbmltYXRp
b25zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIGltcGwgdGhyZWFkCisvLyBhcmUga2VwdCBp
biBzeW5jLgordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hyb25pemVBbmlt
YXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit7
CisgICAgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVhZChjb250cm9sbGVySW1w
bCk7CisgICAgcHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoY29udHJvbGxlckltcGwpOwor
ICAgIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoY29udHJvbGxlckltcGwp
OworICAgIHB1c2hBbmltYXRpb25Qcm9wZXJ0aWVzKGNvbnRyb2xsZXJJbXBsKTsKK30KKwordm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9u
SW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBs
KQoreworICAgIC8vIEFueSBhbmltYXRpb25zIGZpbmlzaGVkIG9uIHRoZSBpbXBsIHRocmVhZCBh
cmUgcmVtb3ZlZCBmcm9tIHRoZSBtYWluIHRocmVhZCdzIGNvbGxlY3Rpb24uCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZShjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1h
dGlvbnNbaV0uZ3JvdXBJZCwgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ld
LnRhcmdldFByb3BlcnR5KTsKKyAgICBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlv
bnMuY2xlYXIoKTsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5l
d0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBj
b250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBBbnkgbmV3IGFuaW1hdGlvbnMgb3duZWQgYnkgdGhl
IG1haW4gdGhyZWFkJ3MgY29udHJvbGxlciBhcmUgY2xvbmVkIGFuZCBhZGRlIHRvIHRoZSBpbXBs
IHRocmVhZCdzIGNvbnRyb2xsZXIuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFjb250cm9sbGVySW1wbC0+
Z2V0QWN0aXZlQW5pbWF0aW9uKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgbV9hY3Rp
dmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSkKKyAgICAgICAgICAgIGNvbnRyb2xs
ZXJJbXBsLT5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT5jbG9uZUZvckltcGxUaHJlYWQoKSk7
CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmlt
YXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bCogY29udHJvbGxlckltcGwpCit7CisgICAgLy8gRGVsZXRlIGFsbCBpbXBsIHRocmVhZCBhbmlt
YXRpb25zIGZvciB3aGljaCB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIG1haW4gdGhyZWFkIGFu
aW1hdGlvbi4KKyAgICAvLyBFYWNoIGl0ZXJhdGlvbiwgY29udHJvbGxlci0+bV9hY3RpdmVBbmlt
YXRpb25zLnNpemUoKSBpcyBkZWNyZW1lbnRlZCBvciBpIGlzIGluY3JlbWVudGVkCisgICAgLy8g
Z3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOykgeworICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudCA9IGdldEFjdGl2ZUFu
aW1hdGlvbihjb250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBj
b250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKTsK
KyAgICAgICAgaWYgKCFjdXJyZW50KQorICAgICAgICAgICAgY29udHJvbGxlckltcGwtPm1fYWN0
aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGkrKzsK
KyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRp
b25Qcm9wZXJ0aWVzKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlcklt
cGwpCit7CisgICAgLy8gRGVsZXRlIGFsbCBpbXBsIHRocmVhZCBhbmltYXRpb25zIGZvciB3aGlj
aCB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIG1haW4gdGhyZWFkIGFuaW1hdGlvbi4KKyAgICAv
LyBFYWNoIGl0ZXJhdGlvbiwgY29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSBp
cyBkZWNyZW1lbnRlZCBvciBpIGlzIGluY3JlbWVudGVkCisgICAgLy8gZ3VhcmFudGVlaW5nIHBy
b2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgQ0NBY3RpdmVBbmltYXRpb24qIGN1cnJlbnRJbXBsID0gY29udHJvbGxlckltcGwtPm1f
YWN0aXZlQW5pbWF0aW9uc1tpXS5nZXQoKTsKKyAgICAgICAgQ0NBY3RpdmVBbmltYXRpb24qIGN1
cnJlbnQgPSBnZXRBY3RpdmVBbmltYXRpb24oY3VycmVudEltcGwtPmdyb3VwKCksIGN1cnJlbnRJ
bXBsLT50YXJnZXRQcm9wZXJ0eSgpKTsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnQpOworICAgICAg
ICBpZiAoY3VycmVudCkKKyAgICAgICAgICAgIGN1cnJlbnQtPnN5bmNocm9uaXplUHJvcGVydGll
cyhjdXJyZW50SW1wbCk7CisgICAgfQorfQorCitDQ0FjdGl2ZUFuaW1hdGlvbiogQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihzaXplX3QgZ3JvdXAsIENDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAg
ICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAg
ICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAw
OworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoc2l6ZV90IGdy
b3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91
cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJv
cGVydHkpIHsKKyAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ0ZmM2ZTgzMTU2NGFjYmY3YWRkOTI0ZmE4MTdjMjdiZjI2ODI0ZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIlZlY3Rvci5oIgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIK
KworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFuaW1hdGlvbjsKK2NsYXNzIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDsKK3N0cnVjdCBJbnRTaXplOworY2xhc3MgS2V5ZnJhbWVW
YWx1ZUxpc3Q7CisKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgp
OworCisgICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKworICAgIC8v
IFRoZXNlIGFyZSB2aXJ0dWFsIGZvciB0ZXN0aW5nLgorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBj
b25zdCBBbmltYXRpb24qLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVfdCBncm91cElkLCBkb3Vi
bGUgdGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKHNpemVfdCBh
bmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
bmltYXRpb24oc2l6ZV90IGFuaW1hdGlvbklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFu
aW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25z
KCk7CisKKyAgICAvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMg
b24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQKKyAgICAvLyBhcmUga2VwdCBp
biBzeW5jLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBpbXBs
IHRocmVhZCBjb250cm9sbGVyLgorICAgIHZvaWQgc3luY2hyb25pemVBbmltYXRpb25zKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworCisgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOworCitwcml2YXRlOgorICAg
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2b2lkIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhy
ZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworICAgIHZvaWQgcmVtb3ZlQW5p
bWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwqKTsKKyAgICB2b2lkIHB1c2hBbmltYXRpb25Qcm9wZXJ0aWVzKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCopOworCisgICAgQ0NBY3RpdmVBbmltYXRpb24qIGdldEFjdGl2ZUFuaW1h
dGlvbihzaXplX3QgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsK
KyAgICB2b2lkIHJlbW92ZShzaXplX3QgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdl
dFByb3BlcnR5KTsKKworICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9h
Y3RpdmVBbmltYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKaW5kZXggYmJjYTljYmQ5MDU1ZTFl
YzEzY2MwYTk3NDYzOWM1Zjk3MDg4MDk5Mi4uN2RkMjgyMWI2YjYyMmViOTE0NGEwMGY3ZTZiZTBj
YmI4NGRjNzM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKIAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00NCwyNSArNDUsMjUgQEAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkMKIHsK
IH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lU2VjcykKK0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCgpIHsgfQorCit2b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzKQogewotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRp
bmdGb3JOZXh0VGljayhmcmFtZUJlZ2luVGltZVNlY3MpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWUoZnJhbWVCZWdpblRpbWVTZWNzKTsKLSAgICBzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAg
c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGZyYW1lQmVnaW5UaW1lU2VjcywgZXZl
bnRzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5U
aW1lU2VjcywgZXZlbnRzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2VjcywgZXZlbnRzKTsKICAgICByZXNvbHZlQ29uZmxp
Y3RzKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CiAgICAgdGlja0FuaW1hdGlvbnMoZnJhbWVCZWdpblRp
bWVTZWNzKTsKICAgICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpOwotICAgIHN0YXJ0QW5pbWF0
aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAg
ICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5U
aW1lU2VjcywgZXZlbnRzKTsKIH0KIAogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKQogewogICAgIG1fYWN0
aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBt
X2NsaWVudC0+YW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0ZSh0aGlzKTsKIH0KIAot
Q0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Z2V0QWN0
aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCitDQ0FjdGl2ZUFuaW1hdGlvbiogQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVBbmltYXRpb24oc2l6ZV90IGdy
b3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gcHJvcGVydHkpCkBAIC04
MCwyNSArODEsMjggQEAgYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0Fj
dGl2ZUFuaW1hdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRU
aWNrKGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3Rh
cnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yJiBldmVudHMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNr
KSB7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwogICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5zZXRTdGFydFRpbWUobm93KTsKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoQ0NB
bmltYXRpb25TdGFydGVkRXZlbnQobV9jbGllbnQtPmlkKCksIG5vdykpOwogICAgICAgICB9CiAg
ICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmlt
YXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93KQordm9pZCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91
YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKIHsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0
aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRU
aW1lKCkgPD0gbm93KQorICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0
ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lICYmIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbm93KSB7CiAgICAgICAgICAgICBtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBu
b3cpOworICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCht
X2NsaWVudC0+aWQoKSwgbm93KSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUg
bm93LCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzKQogewogICAgIC8vIEZpcnN0IGNv
bGxlY3QgcnVubmluZyBwcm9wZXJ0aWVzLgogICAgIFRhcmdldFByb3BlcnRpZXMgYmxvY2tlZFBy
b3BlcnRpZXM7CkBAIC0xMzAsNiArMTM0LDcgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkKICAg
ICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgbV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywg
bm93KTsKICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGlt
ZShub3cpOworICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoQ0NBbmltYXRpb25TdGFydGVk
RXZlbnQobV9jbGllbnQtPmlkKCksIG5vdykpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgewogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0
aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9h
Y3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmlu
Zywgbm93KTsKQEAgLTE3OCw5ICsxODMsMTAgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKCkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFy
ZUZpbmlzaGVkKQorICAgICAgICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpIHsK
KyAgICAgICAgICAgIG1fZmluaXNoZWRBbmltYXRpb25zLmFwcGVuZChtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnNpZ25hdHVyZSgpKTsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1v
dmUoaSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpKys7CiAg
ICAgfQogfQpAQCAtMTk0LDE0ICsyMDAsMTEgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OnRpY2tBbmltYXRpb25zKGRvdWJsZSBub3cpCiAKICAgICAgICAgICAgIGNhc2Ug
Q0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybTogewogICAgICAgICAgICAgICAgIGNvbnN0IEND
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlID0gbV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5hbmltYXRpb25DdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQpOworICAgICAg
ICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOwogICAg
ICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChub3cp
KQogICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbm93KTsKIAotICAgICAgICAgICAgICAgIC8v
IERlY2lkZSBoZXJlIGlmIGFic29sdXRlIG9yIHJlbGF0aXZlLiBBYnNvbHV0ZSBmb3Igbm93Lgot
ICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvQXBwbHk7Ci0gICAgICAgICAg
ICAgICAgb3BlcmF0aW9ucy5hcHBseShGbG9hdFNpemUoKSwgdG9BcHBseSk7Ci0gICAgICAgICAg
ICAgICAgbV9jbGllbnQtPnNldFRyYW5zZm9ybSh0b0FwcGx5KTsKKyAgICAgICAgICAgICAgICBt
X2NsaWVudC0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsLmgKaW5kZXggMWFkMjIzZGJhODIzYTJhMDU3YjEwMmQ5NmFhOTVhZWFiMmQ1
Mjg2NC4uYzk4ZjljYjY3MTBlYTU1MGYyMmRmYWVkNGM4NmY5NTg2OTkzNjdkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKQEAgLTI3
LDggKzI3LDEwIEBACiAKICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1
ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50
cy5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00NCwzNSArNDYsNDEgQEAgY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKSB7IH0KIAorICAgIHZpcnR1
YWwgaW50IGlkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOwogICAgIHZpcnR1
YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25Db250cm9sbGVySW1wbERpZEFjdGl2YXRl
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0
IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKIH07CiAKIGNsYXNzIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxDbGllbnQqKTsKIAotICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRp
bWVTZWNzKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoKTsK
KworICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvciYpOwogCiAgICAgdm9pZCBhZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4pOwogCiAgICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFuaW1hdGlvbiBpbiB0aGUgZ2l2
ZW4gZ3JvdXAsIGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHkgaWYgc3VjaCBhbgogICAgIC8v
IGFuaW1hdGlvbiBleGlzdHMuCi0gICAgQ0NBY3RpdmVBbmltYXRpb24qIGdldEFjdGl2ZUFuaW1h
dGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdl
dFByb3BlcnR5KTsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKHNp
emVfdCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBuZWl0
aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVkLgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOworCiAgICAgLy8gVGhlIGFuaW1hdG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4KICAg
ICBleHBsaWNpdCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7CiAKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRp
bmdGb3JOZXh0VGljayhkb3VibGUgbm93KTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdyk7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0
aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpOworICAgIHZvaWQgc3RhcnRBbmlt
YXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yJik7CisgICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJs
ZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7CisgICAgdm9pZCBzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yJik7CiAgICAgdm9pZCByZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBub3cpOwogICAg
IHZvaWQgcHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoKTsKIApAQCAtODAsNiArODgsNyBAQCBwcml2
YXRlOgogCiAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBtX2NsaWVu
dDsKICAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0
aW9uczsKKyAgICBWZWN0b3I8Q0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblNpZ25hdHVyZT4g
bV9maW5pc2hlZEFuaW1hdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKaW5kZXggYTEzNjE2N2Q3YWZlYzRhNjcxZTdhNjk4MDg1ZDRkZDY2
MGVkYTMxMS4uM2EwMzc0N2UyMjM0MGU1NTM2MjUzZjhlNTY5MmY3MmYwMzI4OTI4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJj
Yy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KQEAgLTYxLDYgKzYyLDcgQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkK
ICAgICAsIG1fZHJhd09wYWNpdHkoMCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAw
LCAwKQogICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRy
b2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCiB7CiAg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IDhmYmFiYWU4NmE2YmQ2YWM4ZDY1Y2I3ZTdlMDZjYTZjOWJlNjkxODAuLmY1ZDRmMTMy
YWU0NTFiNDg3NjBkMzkxYWYxN2QwZmI4YTBmMmRmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3Ry
ZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBh
c3MuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CkBAIC00MSwxNiArNDIsMjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwog
Y2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xh
c3MgQ0NMYXllckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4geworY2xhc3Mg
Q0NMYXllckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4sIHB1YmxpYyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1wbChpZCkpOwogICAgIH0KKworICAgIC8vIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0
dWFsIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRPcGFjaXR5KGZsb2F0KTsKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7
IHJldHVybiBtX29wYWNpdHk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2
aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9
CisKICAgICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwogCiAgICAgLy8gVHJlZSBzdHJ1Y3R1cmUu
CkBAIC02Niw4ICs3Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlcGxpY2FMYXllcihQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPik7CiAgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwbGljYUxheWVyLmdldCgpOyB9CiAKLSAgICBpbnQgaWQoKSBjb25z
dCB7IHJldHVybiBtX2xheWVySWQ7IH0KLQogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdJRDsgfQogI2VuZGlmCkBAIC0xMTEsOSArMTIwLDYg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KIAotICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7
Ci0gICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQotCiAgICAg
dm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKQEAgLTEyOSw5ICsx
MzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJs
YXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIAot
ICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNmb3JtOyB9Ci0KICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1f
bmFtZSA9IG5hbWU7IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KIApAQCAtMTU0LDcgKzE1Nyw2IEBAIHB1YmxpYzoKICAgICBDQ1JlbmRlclN1cmZh
Y2UqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1
cmZhY2U7IH0KICAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNl
KiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIAotICAgIGNv
bnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAgICAgdm9p
ZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgY29uc3QgSW50U2l6ZSYgY29udGVu
dEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudEJvdW5kczsgfQpAQCAtMjAzLDYgKzIw
NSw4IEBAIHB1YmxpYzoKICAgICBib29sIGxheWVyUHJvcGVydHlDaGFuZ2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllclByb3BlcnR5Q2hhbmdlZDsgfQogICAgIHZvaWQgcmVzZXRBbGxDaGFuZ2VU
cmFja2luZ0ZvclN1YnRyZWUoKTsKIAorICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bCogYW5pbWF0aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlci5n
ZXQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIApA
QCAtMzEyLDYgKzMxNiw5IEBAIHByaXZhdGU6CiAgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQg
d2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1cmluZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0aGF0IHBs
dWdpbiBsYXllcnMgYnlwYXNzIHRoaXMgYW5kIGxlYXZlIGl0IGVtcHR5LgogICAgIEZsb2F0UmVj
dCBtX3VwZGF0ZVJlY3Q7CisKKyAgICAvLyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5
ZXIuCisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gbV9hbmltYXRp
b25Db250cm9sbGVyOwogfTsKIAogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXll
ckltcGw+ID46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+Ojpp
dGVyYXRvciBlbmQsIENDTGF5ZXJTb3J0ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCmluZGV4IGU0NjJlNTMxOGJmYzdmMzc5NGRhODY1Y2VmZjMzYmFlYzVkMmU1MDEuLmVhMTdl
OGM5YTk2MTI5ZjZlNTA5YTE5N2JmNjgyMzU5ZjAzMzFkOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcApAQCAtMTcxLDkgKzE3MSwxMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQog
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKICAgICAvLyBTeW5jaHJvbml6
ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwuLi4KLSAgICBpZiAocm9vdExheWVyKCkpCisg
ICAgaWYgKHJvb3RMYXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJv
b3RMYXllcigpKSk7Ci0gICAgZWxzZQorICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhZGRlZCBhbiBh
bmltYXRpb24gZHVyaW5nIHRoZSB0cmVlIHN5bmMuIFRoaXMgd2lsbCBjYXVzZSBob3N0SW1wbCB0
byB2aXNpdCBpdHMgY29udHJvbGxlcnMuCisgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1h
dGVMYXllcnMoKTsKKyAgICB9IGVsc2UKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigw
KTsKIAogICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsK
QEAgLTI1OSw2ICsyNjEsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3
KCkKICAgICAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiB9CiAKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpzZXRBbmltYXRpb25FdmVudHMoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3Rvcj4gZXZlbnRzKQoreworICAgIEFTU0VSVChDQ1RocmVhZFByb3h5Ojppc01haW5U
aHJlYWQoKSk7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gd2FsayB0aGUgdHJlZS4KK30KKwogdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+
IHJvb3RMYXllcikKIHsKICAgICBpZiAobV9yb290TGF5ZXIgPT0gcm9vdExheWVyKQpAQCAtMzM0
LDkgKzM0MiwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25J
bXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbQogICAgICAgICBob3N0SW1wbC0+
c2V0Um9vdExheWVyKDApOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChyb290TGF5
ZXIoKSkKKworICAgIGlmIChyb290TGF5ZXIoKSkgewogICAgICAgICBob3N0SW1wbC0+c2V0Um9v
dExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhv
c3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKKyAgICAgICAgLy8gV2UgbWF5IGhhdmUg
YWRkZWQgYW4gYW5pbWF0aW9uIGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2Ug
aG9zdEltcGwgdG8gdmlzaXQgaXRzIGNvbnRyb2xsZXJzLgorICAgICAgICBob3N0SW1wbC0+c2V0
TmVlZHNBbmltYXRlTGF5ZXJzKCk7CisgICAgfSBlbHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRS
b290TGF5ZXIoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZjVlMTEz
NGM4MWI0M2UyMTg4NmE1ZDkzNTMwZWU4OGYxOWE0MDMyNS4uOTQ4YWQyMDM4N2JiOWMyNTliNTE0
YTMwZDI1MmQ4MzU3MDhmNmMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmF0ZUxp
bWl0ZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNj
L0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogCkBAIC0xNjMsNiArMTY0LDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwogICAgIHZvaWQgc2V0TmVlZHNS
ZWRyYXcoKTsKIAorICAgIHZvaWQgc2V0QW5pbWF0aW9uRXZlbnRzKFBhc3NPd25QdHI8Q0NBbmlt
YXRpb25FdmVudHNWZWN0b3I+KTsKKwogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsg
cmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9v
dExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNl
dFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZTQ2YWUzMjQ5ZjM4MTVjZDliMDE5MWE5Mjg3MWZh
MTdmMmE5ZGI4Ni4uZTIyNjE2YjI5MDM2YzdmYzk4OTViYTgzYzJiMzAwMmI5ZTFkNzM0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTU3LDYgKzU3LDcgQEAg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdz
JiBzZXR0aW5ncywgQ0NMYXllclRyZWUKICAgICAsIG1fc2VudFBhZ2VTY2FsZURlbHRhKDEpCiAg
ICAgLCBtX21pblBhZ2VTY2FsZSgwKQogICAgICwgbV9tYXhQYWdlU2NhbGUoMCkKKyAgICAsIG1f
bmVlZHNBbmltYXRlTGF5ZXJzKHRydWUpCiAgICAgLCBtX3BpbmNoR2VzdHVyZUFjdGl2ZShmYWxz
ZSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwpAQCAtOTcsMjEgKzk4
LDggQEAgR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQoKQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1l
TXMpCiB7Ci0gICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Ny
b2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKLQotICAg
IHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUo
ZnJhbWVCZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7Ci0gICAgSW50U2l6ZSBuZXh0U2Nyb2xs
ID0gbV9wYWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGlt
ZU1zKTsKLSAgICBuZXh0U2Nyb2xsLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKLSAgICBt
X3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKLSAg
ICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKLQotICAgIGlmIChtX3Bh
Z2VTY2FsZUFuaW1hdGlvbi0+aXNBbmltYXRpb25Db21wbGV0ZUF0VGltZShmcmFtZUJlZ2luVGlt
ZU1zKSkgewotICAgICAgICBtX3BhZ2VTY2FsZUFuaW1hdGlvbi5jbGVhcigpOwotICAgICAgICBt
X2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICB9CisgICAgYW5pbWF0
ZVBhZ2VTY2FsZShmcmFtZUJlZ2luVGltZU1zKTsKKyAgICBhbmltYXRlTGF5ZXJzKGZyYW1lQmVn
aW5UaW1lTXMpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxl
QW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50
LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMp
CkBAIC0yNDUsNiArMjMzLDI1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVS
ZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQogICAgICAgICBwYXNzZXNbaV0t
Pm9wdGltaXplUXVhZHMoKTsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRl
TGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJyZW50LCBkb3VibGUgZnJhbWVCZWdpblRp
bWVTZWNzLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzLCBib29sJiBuZWVkc0FuaW1h
dGVMYXllcnMpCit7CisgICAgYm9vbCBzdWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gZmFsc2U7
CisKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGN1cnJlbnRDb250cm9sbGVy
ID0gY3VycmVudC0+YW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgIGN1cnJlbnRDb250cm9sbGVy
LT5hbmltYXRlKGZyYW1lQmVnaW5UaW1lU2VjcywgZXZlbnRzKTsKKyAgICBpZiAoY3VycmVudENv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKQorICAgICAgICBzdWJ0cmVlTmVlZHNBbmlt
YXRlTGF5ZXJzID0gdHJ1ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudC0+
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBib29sIGNoaWxkTmVlZHNBbmltYXRl
TGF5ZXJzID0gZmFsc2U7CisgICAgICAgIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoY3VycmVudC0+
Y2hpbGRyZW4oKVtpXS5nZXQoKSwgZnJhbWVCZWdpblRpbWVTZWNzLCBldmVudHMsIGNoaWxkTmVl
ZHNBbmltYXRlTGF5ZXJzKTsKKyAgICAgICAgaWYgKGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzKQor
ICAgICAgICAgICAgc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisgICAgfQorCisg
ICAgbmVlZHNBbmltYXRlTGF5ZXJzID0gc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVyczsKK30KKwog
SW50U2l6ZSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0CiB7CiAgICAg
Ly8gVE9ETyhhZWxpYXMpOiBIYXJkY29kaW5nIHRoZSBmaXJzdCBjaGlsZCBoZXJlIGlzIHdlaXJk
LiBUaGluayBvZgpAQCAtNTUxLDQgKzU1OCw0NSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjphbmltYXRlUGFnZVNjYWxlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQoreworICAg
IGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEludFNp
emUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9u
KCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisKKyAgICBzZXRQYWdlU2Nh
bGVEZWx0YShtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+cGFnZVNjYWxlQXRUaW1lKGZyYW1lQmVnaW5U
aW1lTXMpIC8gbV9wYWdlU2NhbGUpOworICAgIEludFNpemUgbmV4dFNjcm9sbCA9IG1fcGFnZVNj
YWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZzZXRBdFRpbWUoZnJhbWVCZWdpblRpbWVNcyk7CisgICAg
bmV4dFNjcm9sbC5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisgICAgbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwgLSBzY3JvbGxUb3RhbCk7CisKKyAgICBpZiAobV9w
YWdlU2NhbGVBbmltYXRpb24tPmlzQW5pbWF0aW9uQ29tcGxldGVBdFRpbWUoZnJhbWVCZWdpblRp
bWVNcykpIHsKKyAgICAgICAgbV9wYWdlU2NhbGVBbmltYXRpb24uY2xlYXIoKTsKKyAgICAgICAg
bV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgfQorCisgICAgbV9j
bGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKK3sKKyAg
ICBpZiAoIW1fbmVlZHNBbmltYXRlTGF5ZXJzIHx8ICFtX3Jvb3RMYXllckltcGwuZ2V0KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpOworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXll
cnMiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQobV9uZWVkc0FuaW1hdGVMYXllcnMpOworCisgICAg
T3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yKSk7CisKKyAgICBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9v
dExheWVySW1wbC5nZXQoKSwgZnJhbWVCZWdpblRpbWVNcyAvIDEwMDAsICpldmVudHMsIG1fbmVl
ZHNBbmltYXRlTGF5ZXJzKTsKKworICAgIGlmICghZXZlbnRzLT5pc0VtcHR5KCkpCisgICAgICAg
IG1fY2xpZW50LT5wb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKGV2
ZW50cy5yZWxlYXNlKCkpOworCisgICAgaWYgKG1fbmVlZHNBbmltYXRlTGF5ZXJzKQorICAgICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDVl
ZTAzOTlmNWI0NTcyMjVhOTFkZmY2Yjc3N2NkNWQ4YTc2ZDZhOWYuLjA4Yzk3OTMzYWEyZjk4NDQz
MWQyZTVjZmY1N2E5NDgzMDFjYzA4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKQEAgLTI1LDExICsyNSwxMyBAQAogI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsX2gK
ICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlv
bkV2ZW50cy5oIgogI2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFz
cy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0
cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4pID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9z
dEltcGwgb3ducyB0aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVu
ZGVyaW5nIHN0YXRlCkBAIC02OCw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cGluY2hHZXN0dXJlRW5kKCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0
aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9h
dCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMpOwogCi0g
ICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZworICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCiAg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENv
bXBsZXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lRGlzcGxheVRp
bWVNcyk7CkBAIC0xMTksOCArMTIyLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3RhcnRQYWdl
U2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdHJhZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5j
aG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0aW9uU2VjKTsKIAorICAgIGJvb2wgbmVlZHNB
bmltYXRlTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0FuaW1hdGVMYXllcnM7IH0KKyAg
ICB2b2lkIHNldE5lZWRzQW5pbWF0ZUxheWVycygpIHsgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0
cnVlOyB9CisKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0
dGluZ3MmLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CisKKyAgICB2b2lkIGFuaW1hdGVQ
YWdlU2NhbGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMpOworCisgICAgLy8gVmlydHVhbCBmb3Ig
dGVzdGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdp
blRpbWVNcyk7CisKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAg
ICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKQEAgLTEz
NSw2ICsxNDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNl
cyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVy
UGFzc0xpc3QmKTsKICAgICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xp
c3QmKTsKKyAgICB2b2lkIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqLCBkb3Vi
bGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYsIGJvb2wmIG5l
ZWRzQW5pbWF0ZUxheWVycyk7CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogCiAg
ICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwpAQCAtMTUw
LDYgKzE2Myw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9zZW50UGFnZVNjYWxlRGVsdGE7CiAg
ICAgZmxvYXQgbV9taW5QYWdlU2NhbGUsIG1fbWF4UGFnZVNjYWxlOwogCisgICAgLy8gSWYgdGhp
cyBpcyB0cnVlLCBpdCBpcyBuZWNlc3NhcnkgdG8gdHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgdGlj
a2luZyB0aGUgYW5pbWF0b3JzLgorICAgIGJvb2wgbV9uZWVkc0FuaW1hdGVMYXllcnM7CiAgICAg
Ym9vbCBtX3BpbmNoR2VzdHVyZUFjdGl2ZTsKIAogICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1h
dGlvbj4gbV9wYWdlU2NhbGVBbmltYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuY3BwCmluZGV4IDE3YTY5NTkzYTY0M2NmZmU4MzcxNzYxNDk3ZTRiZWMwYTFjNzFkOTAu
LmVhOGM0MGYxMjU2NWVjNDEzYmFiNTg2YmEyMGU0OWNlZjlmOWRhOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0yMzMsNiArMjMzLDEzIEBAIHZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6c3RvcCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAor
dm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFk
T25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cykK
K3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIERlYnVnU2NvcGVk
U2V0TWFpblRocmVhZCBtYWluOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZl
bnRzKGV2ZW50cyk7Cit9CisKIC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHNjaGVkdWxpbmcgcGF0
aCAoZS5nLiB3aGVyZSByZW5kZXJfd2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcpCiB2b2lkIEND
U2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuaAppbmRleCBhZGRhOWYxNGU5ZTU0ZGJhMDVhZjMwZDU3ODY4
MzhjNDYzZDM0NDQxLi43MWI1ZTk5YjJlZDJhZmY3ODI1MDNiZjM5MzM2Njk4M2ZjNTk0NzFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBAIC0yNSw2ICsyNSw3IEBACiAj
aWZuZGVmIENDU2luZ2xlVGhyZWFkUHJveHlfaAogI2RlZmluZSBDQ1NpbmdsZVRocmVhZFByb3h5
X2gKIAorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAjaW5jbHVkZSAiY2MvQ0ND
b21wbGV0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAj
aW5jbHVkZSAiY2MvQ0NQcm94eS5oIgpAQCAtNjMsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJl
YWQoKSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXQoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIHsgbV9sYXllclRyZWVIb3N0LT5zZXRO
ZWVkc0NvbW1pdCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01h
aW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4p
OwogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgcGF0aCB3aGVyZSBSZW5kZXJXaWRnZXQg
ZG9lcyB0aGUgc2NoZWR1bGluZy4KICAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CkBA
IC0xMTEsNiArMTEzLDI0IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCisvLyBGb3IgdXNlIGluIHRo
ZSBzaW5nbGUtdGhyZWFkZWQgY2FzZS4gSW4gZGVidWcgYnVpbGRzLCBpdCBwcmV0ZW5kcyB0aGF0
IHRoZQorLy8gY29kZSBpcyBydW5uaW5nIG9uIHRoZSBtYWluIHRocmVhZCB0byBzYXRpc2Z5IGFz
c2VydGlvbiBjaGVja3MuCitjbGFzcyBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgeworcHVibGlj
OgorICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCgpCisgICAgeworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICAgICAgQ0NQcm94eTo6c2V0Q3VycmVudFRocmVhZElzSW1wbFRocmVhZChmYWxz
ZSk7CisjZW5kaWYKKyAgICB9CisgICAgfkRlYnVnU2NvcGVkU2V0TWFpblRocmVhZCgpCisgICAg
eworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgQ0NQcm94eTo6c2V0Q3VycmVudFRocmVh
ZElzSW1wbFRocmVhZCh0cnVlKTsKKyNlbmRpZgorICAgIH0KK307CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDNlYTcy
ZTJhMWM3MmZiMzU2OTE0ODkyN2VjYjE1MTA0NzI5ODk0MjYuLjc1ZWYxMzYyM2RlODc2ZjQ0YTJj
YTQ3ZWFkZDgxMjBiMTEwYjIzMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0y
NTksNiArMjU5LDEzIEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkltcGxU
aHJlYWQoKQogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLT5zZXROZWVkc0NvbW1pdCgpOwog
fQogCit2b2lkIENDVGhyZWFkUHJveHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRP
bkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKQor
eworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFk
UHJveHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQiLCB0aGlz
LCAwKTsKKyAgICBtX21haW5UaHJlYWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNr
KHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXRBbmltYXRpb25FdmVudHMsIGV2ZW50cykpOworfQor
CiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwpAQCAtNTYyLDYgKzU2OSwxNCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmRp
ZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQ29tcGxldGVT
d2FwQnVmZmVycygpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnNldEFuaW1hdGlvbkV2ZW50
cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZlbnRzKGV2ZW50cyk7
Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFk
UHJveHk6OmluaXRpYWxpemVJbXBsT25JbXBsVGhyZWFkIiwgdGhpcywgMCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmgKaW5kZXggMjNjMjlmNDhmYTMyYjdhYzQ4ODE1ODAyY2EwMzU4ZWVhMWQ4ODAx
YS4uMzMwZWY1MWNhOThhMTZkMjIzMWUzMzY1NTQwYWMwM2MxNzMzMmEzNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuaApAQCAtMjUsNiArMjUsNyBAQAogI2lmbmRlZiBDQ1RocmVhZFByb3h5X2gK
ICNkZWZpbmUgQ0NUaHJlYWRQcm94eV9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50
cy5oIgogI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKQEAgLTcwLDYgKzcx
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbklt
cGxUaHJlYWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQ
YXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPik7CiAKICAgICAvLyBDQ1NjaGVkdWxl
ckNsaWVudCBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgYm9vbCBjYW5EcmF3KCk7CkBAIC04
Niw2ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBz
ZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW1lLCBQYXNzT3duUHRyPENDU2Nyb2xs
QW5kU2NhbGVTZXQ+KTsKICAgICB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwogICAgIHZv
aWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOworICAgIHZvaWQgc2V0QW5pbWF0aW9uRXZlbnRz
KFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+KTsKIAogICAgIC8vIENhbGxlZCBv
biBpbXBsIHRocmVhZAogICAgIHN0cnVjdCBSZWFkYmFja1JlcXVlc3QgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKaW5kZXggMzVmMmIxOTkwNzc5ZDY2OWVmODA0MDJmYjAwZjJhNTU2MTQ3
YzMyNi4uZWNiZDFmNzc3OTUzNTBmOTQ5OGZlZDliYzYzNTg5ZDQ2ZjM4NTQ0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02MSw5ICs2MSwxMiBAQAogICAgICAgICAgICAgJ3Rl
c3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ2Fu
dmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDQWN0aXZl
QW5pbWF0aW9uVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENv
bW1vbi5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMv
Q0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJh
dG9yVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCmluZGV4IDNlOTNkOTVkZTg2OGEyZjNhMjVhYjAzMDIw
ZWQyNWMxZDBlYzQ5MGEuLmUxNGVmOWJjMDk3MWExMWUyMTRiMzE0ZDc1ODI5MTVlY2M1NmQzNTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRp
b25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5p
bWF0aW9uVGVzdC5jcHAKQEAgLTI1LDI0ICsyNSwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
CiAjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKLQotI2luY2x1ZGUgImNjL0NDQW5p
bWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKIAogI2lu
Y2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXRUZXN0czsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jbGFzcyBGYWtlRmxvYXRB
bmltYXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFs
IGZsb2F0IGdldFZhbHVlKGRvdWJsZSBub3cpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLX07CituYW1l
c3BhY2UgewogCiBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmlt
YXRpb24oaW50IGl0ZXJhdGlvbnMpCiB7Ci0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0
b1JldHVybihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRB
bmltYXRpb24pLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAwLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogICAgIHRvUmV0dXJuLT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlvbnMpOwog
ICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7CiB9CkBAIC0xNjQsNCArMTYwLDQgQEAgVEVT
VChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWQpCiAgICAgRVhQRUNUX1RSVUUoYW5p
bS0+aXNGaW5pc2hlZCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRp
b25UZXN0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRp
b25UZXN0Q29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGFmODBiOGI1ZmE1YjNmNmZiYmEzMmY4MmY1
ZTdjNGFmMTMyZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RD
b21tb24uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
VGVzdHMgeworCitGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6RmFrZUZsb2F0QW5pbWF0aW9uQ3Vy
dmUoKQoreworfQorCitGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6fkZha2VGbG9hdEFuaW1hdGlv
bkN1cnZlKCkKK3sKK30KKworUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBG
YWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUoKSBjb25zdAoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOworfQorCitGYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbjo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uKQorICAgIDog
bV9kdXJhdGlvbihkdXJhdGlvbikKK3sKK30KKworRmFrZVRyYW5zZm9ybVRyYW5zaXRpb246On5G
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbigpCit7Cit9CisKK1dlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpnZXRWYWx1ZShkb3VibGUgdGltZSwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKK30KKworUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1h
dGlvbkN1cnZlPiBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Y2xvbmUoKSBjb25zdAoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKnRoaXMpKTsKK30K
KworCitGYWtlRmxvYXRUcmFuc2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJh
dGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisgICAgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKQor
ICAgICwgbV9mcm9tKGZyb20pCisgICAgLCBtX3RvKHRvKQoreworfQorCitGYWtlRmxvYXRUcmFu
c2l0aW9uOjp+RmFrZUZsb2F0VHJhbnNpdGlvbigpCit7Cit9CisKK2Zsb2F0IEZha2VGbG9hdFRy
YW5zaXRpb246OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAoreworICAgIHRpbWUgLz0gbV9k
dXJhdGlvbjsKKyAgICBpZiAodGltZSA+PSAxKQorICAgICAgICB0aW1lID0gMTsKKyAgICByZXR1
cm4gKDEgLSB0aW1lKSAqIG1fZnJvbSArIHRpbWUgKiBtX3RvOworfQorCitQYXNzT3duUHRyPFdl
YkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IEZha2VGbG9hdFRyYW5zaXRpb246OmNsb25lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oKnRoaXMp
KTsKK30KKwordm9pZCBhZGRPcGFjaXR5VHJhbnNpdGlvbihXZWJDb3JlOjpMYXllckNocm9taXVt
JiBsYXllciwgZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9w
YWNpdHkpCit7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVk
UHJvcGVydHlPcGFjaXR5KTsKKyAgICBpZiAoZHVyYXRpb24gPiAwKQorICAgICAgICB2YWx1ZXMu
aW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIHN0YXJ0T3BhY2l0eSkpOworICAgIHZh
bHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIGVuZE9wYWNpdHkp
KTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRl
KCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbigxKTsKKworICAgIEludFNpemUgYm94U2l6
ZTsKKworICAgIGxheWVyLmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5n
ZXQoKSwgMCwgMCwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kYmRiMmFkNzU2ZmQzMmUzODZkOTdhZjljNGM5MDkxYjhkNjMxNjc3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRl
c3RDb21tb24uaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5p
bWF0aW9uVGVzdENvbW1vbl9oCisjZGVmaW5lIENDQW5pbWF0aW9uVGVzdENvbW1vbl9oCisKKyNp
bmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIExheWVyQ2hyb21pdW07Cit9CisKK25hbWVz
cGFjZSBXZWJLaXRUZXN0cyB7CisKK2NsYXNzIEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVi
bGljIFdlYkNvcmU6OkNDRmxvYXRBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgRmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmUoKTsKKyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRBbmltYXRpb25DdXJ2
ZSgpOworCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxOyB9
CisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNs
b25lKCkgY29uc3Q7Cit9OworCitjbGFzcyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbiA6IHB1Ymxp
YyBXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pOworICAgIHZpcnR1YWwgfkZha2VU
cmFuc2Zvcm1UcmFuc2l0aW9uKCk7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25D
dXJ2ZT4gY2xvbmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsK
K307CisKK2NsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgV2ViQ29yZTo6Q0NGbG9h
dEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJs
ZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pOworICAgIHZpcnR1YWwgfkZha2VGbG9h
dFRyYW5zaXRpb24oKTsKKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRp
bWUpIGNvbnN0OworCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9u
Q3VydmU+IGNsb25lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fZHVyYXRpb247
CisgICAgZmxvYXQgbV9mcm9tOworICAgIGZsb2F0IG1fdG87Cit9OworCit2b2lkIGFkZE9wYWNp
dHlUcmFuc2l0aW9uKFdlYkNvcmU6OkxheWVyQ2hyb21pdW0mLCBkb3VibGUgZHVyYXRpb24sIGZs
b2F0IHN0YXJ0T3BhY2l0eSwgZmxvYXQgZW5kT3BhY2l0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdFRlc3RzCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvblRlc2N0Q29tbW9uX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2
ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1h
dGlvbkN1cnZlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc3MzJhZWFiNzQyN2RlMzhjN2Q3NDdkOTU3
MDE2Njk5ODFlNmZiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwCkBAIC0wLDAgKzEsMjQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRl
ICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2Nr
Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIHsKKwordm9pZCBleHBlY3RUcmFuc2xhdGVYKGRvdWJsZSB0cmFuc2xhdGVYLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHlwZTsKKyAgICBtYXRyaXguZGVjb21wb3Nl
KGRlY29tcG9zZWRUeXBlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEodHJhbnNsYXRlWCwgZGVjb21w
b3NlZFR5cGUudHJhbnNsYXRlWCk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRp
b24gd2l0aCBvbmUga2V5ZnJhbWUgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVk
QW5pbWF0aW9uQ3VydmVUZXN0LCBPbmVGbG9hdEtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ0Zs
b2F0S2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlm
cmFtZSgwLCAyKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4g
Y3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5n
ZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7
Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVz
IHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwg
VHdvRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBrZXlmcmFt
ZXM7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgMikpOworICAgIGtl
eWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDEsIDQpKTsKKyAgICBPd25QdHI8Q0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUt
PmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNCwgY3VydmUtPmdldFZhbHVlKDIpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFu
aW1hdGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBW
ZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAga2V5ZnJhbWVzLmFwcGVuZChD
Q0Zsb2F0S2V5ZnJhbWUoMCwgMikpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZy
YW1lKDEsIDQpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgyLCA4KSk7
CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0
VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDIpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
OCwgY3VydmUtPmdldFZhbHVlKDMpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1h
dGlvbiB3aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KK1RF
U1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxvYXRLZXlUaW1lcykK
K3sKKyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAgLy8gQSBzdGVw
IGZ1bmN0aW9uLgorICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDQpKTsK
KyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgxLCA0KSk7CisgICAga2V5ZnJh
bWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgNikpOworICAgIGtleWZyYW1lcy5hcHBlbmQo
Q0NGbG9hdEtleWZyYW1lKDIsIDYpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShr
ZXlmcmFtZXMpKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworCisgICAgLy8gVGhlcmUgaXMg
YSBkaXNjb250aW51aXR5IGF0IDEuIEFueSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQu
CisgICAgZmxvYXQgdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSk7CisgICAgRVhQRUNUX1RSVUUo
dmFsdWUgPj0gNCAmJiB2YWx1ZSA8PSA2KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2
ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1
ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7Cit9CisK
KworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCBvbmUga2V5ZnJhbWUg
d29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBP
bmVUcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4g
a2V5ZnJhbWVzOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlm
cmFtZSgwLCBvcGVyYXRpb25zKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNy
ZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAorICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKKyAg
ICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKKyAg
ICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkpOwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSkpOwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkpOwor
fQorCisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFt
ZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0
LCBUd29UcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFt
ZT4ga2V5ZnJhbWVzOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAg
b3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCks
IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5k
KENDVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpKTsKKyAgICBrZXlmcmFtZXMuYXBw
ZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpKTsKKyAgICBPd25QdHI8Q0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIEludFNpemUgbGF5ZXJT
aXplOyAvLyBpZ25vcmVkCisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
LTEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KDAsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMywgY3VydmUtPmdldFZhbHVl
KDAuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFs
dWUoMSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFs
dWUoMiwgbGF5ZXJTaXplKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0
aW9uIHdpdGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVUcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBW
ZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIFRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5n
dGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25z
KCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBG
aXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gp
KTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlvbnMz
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
TGVuZ3RoKDgsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEVfWCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgw
LCBvcGVyYXRpb25zMSkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFt
ZSgxLCBvcGVyYXRpb25zMikpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlm
cmFtZSgyLCBvcGVyYXRpb25zMykpOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpj
cmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKKyAg
ICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsK
KyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsK
KyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUsIGxheWVyU2l6ZSkp
OworICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkp
OworICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVlKDMsIGxheWVyU2l6ZSkp
OworfQorCisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxl
IGtleXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KK1RFU1QoQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkVHJhbnNmb3JtS2V5VGltZXMpCit7CisgICAgVmVjdG9y
PENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICAvLyBBIHN0ZXAgZnVuY3Rpb24u
CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5v
cGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExl
bmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9w
ZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czM7CisgICAgb3BlcmF0aW9uczMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zNDsKKyAgICBvcGVyYXRpb25zNC5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg2LCBGaXhlZCksIExlbmd0aCgw
LCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBrZXlmcmFt
ZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpKTsKKyAgICBrZXlm
cmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpKTsKKyAgICBr
ZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczMpKTsKKyAg
ICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczQpKTsK
KyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworCisg
ICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKKworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
NCwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVY
KDQsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVY
KDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkpOworCisgICAgLy8gVGhlcmUgaXMg
YSBkaXNjb250aW51aXR5IGF0IDEuIEFueSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQu
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5
ZXJTaXplKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21wb3NlZFR5cGUgZGVjb21w
b3NlZFR5cGU7CisgICAgdmFsdWUuZGVjb21wb3NlKGRlY29tcG9zZWRUeXBlKTsKKyAgICBFWFBF
Q1RfVFJVRShkZWNvbXBvc2VkVHlwZS50cmFuc2xhdGVYID49IDQgJiYgZGVjb21wb3NlZFR5cGUu
dHJhbnNsYXRlWCA8PSA2KTsKKworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZh
bHVlKDEuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0
VmFsdWUoMiwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0
VmFsdWUoMywgbGF5ZXJTaXplKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgaW52YWxpZCBsaXN0cyBv
ZiBrZXlmcmFtZXMgcmVzdWx0IGluIG5vdGhpbmcgYmVpbmcgcmV0dXJuZWQgZnJvbSA6OmNyZWF0
ZS4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIEludmFsaWRLZXlmcmFtZXMp
Cit7CisgICAgLy8gSXQgaXMgaW52YWxpZCB0byBwYXNzIGFuIGVtcHR5IHZlY3RvciBvZiBrZXlm
cmFtZXMgdG8gY3JlYXRlLgorICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiB0cmFuc2Zv
cm1LZXlmcmFtZXM7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmU+IHRyYW5zZm9ybUN1cnZlID0gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Y3JlYXRlKHRyYW5zZm9ybUtleWZyYW1lcyk7CisgICAgRVhQRUNUX0ZBTFNFKHRyYW5zZm9ybUN1
cnZlLmdldCgpKTsKKworICAgIFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGZsb2F0S2V5ZnJhbWVz
OworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGZsb2F0Q3VydmUg
PSBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShmbG9hdEtleWZyYW1lcyk7
CisgICAgRVhQRUNUX0ZBTFNFKGZsb2F0Q3VydmUuZ2V0KCkpOworCisgICAgLy8gSXQgaXMgaW52
YWxpZCB0byBwYXNzIGEgdmVjdG9yIG9mIHVuc29ydGVkIGtleWZyYW1lcyB0byBjcmVhdGU7Cisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVy
YXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJh
dGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHRyYW5zZm9ybUtleWZyYW1lcy5hcHBlbmQoQ0NUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMSkpOworICAgIHRyYW5zZm9ybUtleWZyYW1lcy5h
cHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMikpOworICAgIHRyYW5zZm9y
bUN1cnZlID0gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKHRyYW5z
Zm9ybUtleWZyYW1lcyk7CisgICAgRVhQRUNUX0ZBTFNFKHRyYW5zZm9ybUN1cnZlLmdldCgpKTsK
KworICAgIGZsb2F0S2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgMikpOworICAg
IGZsb2F0S2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgNCkpOworICAgIGZsb2F0
Q3VydmUgPSBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShmbG9hdEtleWZy
YW1lcyk7CisgICAgRVhQRUNUX0ZBTFNFKGZsb2F0Q3VydmUuZ2V0KCkpOworfQorCisKK30gLy8g
bmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcAppbmRleCAzZDUw
ZDA2ZTYyMzEyMThmMTQwMjEyYjFkZmVkNmU3ODk1YjBmNTNiLi5jMzgwZjY2NTM5NzdiYmRhYzNm
MTM5MjQzZDNhOGE3N2Q4NGMwNDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dC5jcHAKQEAgLTI0LDE2ICsyNCwxNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNs
dWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuaCIKLQotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCi0KKyNpbmNsdWRlICJjYy9DQ0FuaW1h
dGlvbkV2ZW50cy5oIgogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogCiBuYW1lc3BhY2UgewogCkBAIC00
Miw3NCArNDIsMzkgQEAgcHVibGljOgogICAgIEZha2VDb250cm9sbGVyQ2xpZW50KCkgOiBtX29w
YWNpdHkoMCkgeyB9CiAgICAgdmlydHVhbCB+RmFrZUNvbnRyb2xsZXJDbGllbnQoKSB7IH0KIAor
ICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgZmxv
YXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogICAg
IHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNm
b3JtOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZh
dGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVyKQotICAgIHsKLSAg
ICAgICAgbV9hY3RpdmVDb250cm9sbGVycy5hcHBlbmQoY29udHJvbGxlcik7Ci0gICAgfQotCi0g
ICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+JiBhY3RpdmVDb250cm9s
bGVycygpIHsgcmV0dXJuIG1fYWN0aXZlQ29udHJvbGxlcnM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKIHByaXZhdGU6
CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNm
b3JtOwotICAgIFZlY3RvcjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqPiBtX2FjdGl2
ZUNvbnRyb2xsZXJzOwotfTsKLQotY2xhc3MgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24gOiBwdWJs
aWMgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7Ci1wdWJsaWM6Ci0gICAgRmFrZVRyYW5zZm9y
bVRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uKSA6IG1fZHVyYXRpb24oZHVyYXRpb24pIHsgfQot
ICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsg
fQotICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9ucyBnZXRWYWx1ZShkb3VibGUgdGltZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb25zKCk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIEludFNpemUgbV9ib3Vu
ZHM7CiB9OwogCi1jbGFzcyBGYWtlRmxvYXRUcmFuc2l0aW9uIDogcHVibGljIENDRmxvYXRBbmlt
YXRpb25DdXJ2ZSB7Ci1wdWJsaWM6Ci0gICAgRmFrZUZsb2F0VHJhbnNpdGlvbihkb3VibGUgZHVy
YXRpb24sIGZsb2F0IGZyb20sIGZsb2F0IHRvKQotICAgICAgICA6IG1fZHVyYXRpb24oZHVyYXRp
b24pCi0gICAgICAgICwgbV9mcm9tKGZyb20pCi0gICAgICAgICwgbV90byh0bykKLSAgICB7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1
cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHRpbWUgLz0gbV9kdXJhdGlvbjsKLSAgICAgICAgaWYgKHRpbWUgPj0g
MSkKLSAgICAgICAgICAgIHRpbWUgPSAxOwotICAgICAgICByZXR1cm4gKDEgLSB0aW1lKSAqIG1f
ZnJvbSArIHRpbWUgKiBtX3RvOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBkb3VibGUgbV9kdXJh
dGlvbjsKLSAgICBmbG9hdCBtX2Zyb207Ci0gICAgZmxvYXQgbV90bzsKLX07CitQYXNzT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJv
cGVydHkgcHJvcGVydHkpCit7CisgICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
Y3VydmUsIDAsIGlkLCBwcm9wZXJ0eSk7Cit9CiAKIC8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmlu
ZyBvcGFjaXR5IGZyb20gMCB0byAxIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsVHJhbnNpdGlvbikKIHsKKyAgICBPd25Q
dHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRp
b25FdmVudHNWZWN0b3IpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJv
bGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0K
QEAgLTExNywyMCArODIsMjEgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBUcml2aWFsVHJhbnNpdGlvbikKIC8vIFRlc3RzIHRoYXQgdHdvIHF1ZXVlZCBhbmltYXRp
b25zIGFmZmVjdGluZyB0aGUgc2FtZSBwcm9wZXJ0eSBydW4gaW4gc2VxdWVuY2UuCiBURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5nKQogeworICAg
IE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15Owog
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwog
Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAu
NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMiwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0K
QEAgLTEzOCwyMiArMTA0LDIzIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdCwgVHJpdmlhbFF1ZXVpbmcpCiAvLyBUZXN0cyBpbnRlcnJ1cHRpbmcgYSB0cmFuc2l0aW9u
IHdpdGggYW5vdGhlciB0cmFuc2l0aW9uLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxUZXN0LCBJbnRlcnJ1cHQpCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CiAgICAg
RmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwg
MSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQ
RUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3Rp
dmVBbmltYXRpb246OldhaXRpbmdGb3JOZXh0VGljaywgMCk7CiAgICAgY29udHJvbGxlci0+YWRk
KHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7IC8vIHNl
Y29uZCBhbmltIHN0YXJ0cyBOT1cuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVu
dHMpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0
eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLjUsICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkp
OwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9
CkBAIC0xNjEsMjMgKzEyOCwyNCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bFRlc3QsIEludGVycnVwdCkKIC8vIFRlc3RzIHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8g
cnVuIHRvZ2V0aGVyIHdoZW4gb25seSBvbmUgcHJvcGVydHkgaXMgZnJlZS4KIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVy
dHlJc0Jsb2NrZWQpCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVu
dHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CiAgICAgRmFrZUNvbnRy
b2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9u
KDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJh
bnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsK
KyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zv
cm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgp
KTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpl
dmVudHMpOwogICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFydGVkIHRoZSBmbG9hdCB0cmFuc2l0
aW9uIHlldC4KICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgLy8gVGhlIHRoZSBm
bG9hdCBhbmltYXRpb24gc2hvdWxkIGhhdmUgc3RhcnRlZCBhdCB0aW1lIDEgYW5kIHNob3VsZCBi
ZSBkb25lLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgyLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKICAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAt
MTg3LDI5ICsxNTUsMzAgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKIC8vIGZvciBib3RoIHRv
IGZpbmlzaCkuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVk
dWxlVG9nZXRoZXJXaXRoQW5BbmltV2FpdGluZykKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25F
dmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3Ip
KTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFk
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250
cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIpKSwgMSwgQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41Zikp
LCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgLy8gQW5pbXMgd2l0aCBp
ZCAxIHNob3VsZCBib3RoIHN0YXJ0IG5vdy4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwogICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBmaW5p
c2hlZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKICAgICAvLyBvZiBhbmltYXRpb25zIHdpdGgg
aWQgMSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aAogICAg
IC8vIG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
Mik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICAvLyBTaG91bGQg
bm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBk
dW1teS5vcGFjaXR5KCkpOwogCiAgICAgLy8gVGhlIHRoZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRp
b24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQgc2hvdWxkIGJlCiAgICAgLy8gZG9uZSBieSB0
aW1lIDMKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMywgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAg
LTIxNywyMiArMTg2LDIzIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dCwgU2NoZWR1bGVUb2dldGhlcldpdGhBbkFuaW1XYWl0aW5nKQogLy8gVGVzdHMgc2NoZWR1bGlu
ZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZS4KIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVBbmltYXRpb24pCiB7CisgICAgT3duUHRy
PENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQo
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEs
IDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0
UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwogICAg
IHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVh
c2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRz
KTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAg
ICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgyKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwogICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0yNDAsMjggKzIxMCwyOSBAQCBURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQogLy8gVGVzdHMg
c2NoZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZSB0aGF0J3MgaW50
ZXJydXB0aW5nIGEgcnVubmluZyBhbmltYXRpb24uCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0
aW9uKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0
UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3Rh
cnRUaW1lKDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCiAgICAg
Ly8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4K
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwg
KmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgKmV2ZW50cyk7CiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVY
UEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogfQpAQCAtMjcwLDM0ICsyNDEsMzUgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW0KIC8v
IGFuZCB0aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0IGxhdGVy
LgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmlt
YXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5RdWV1ZSkKIHsKKyAgICBP
d25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmlt
YXRpb25FdmVudHNWZWN0b3IpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAot
ICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigy
LCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAg
ICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFk
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDAuNzVmKSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAg
Y29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1ZikpLCAzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwogCiAgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBp
bW1lZGlhdGVseS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwg
KmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSg0LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHko
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
IH0KQEAgLTMwNSw2NCArMjc3LDY2IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltCiAvLyBUZXN0
IHRoYXQgYSBsb29waW5nIGFuaW1hdGlvbiBsb29wcyBhbmQgZm9yIHRoZSBjb3JyZWN0IG51bWJl
ciBvZiBpdGVyYXRpb25zLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBUcml2aWFsTG9vcGluZykKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKICAgICBGYWtl
Q29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKDMpOwogICAgIGNvbnRy
b2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVt
bXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMS4yNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMS43NSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgp
KTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMi4yNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDIuNzUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43
NSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDMpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgKmV2ZW50cyk7
CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAg
ICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIC8vIEp1c3QgYmUgZXh0cmEg
c3VyZS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDQpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoNCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiB9CiAK
IC8vIFRlc3QgdGhhdCBhbiBpbmZpbml0ZWx5IGxvb3BpbmcgYW5pbWF0aW9uIGRvZXMgaW5kZWVk
IGdvIHVudGlsIGFib3J0ZWQuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRl
c3QsIEluZmluaXRlTG9vcGluZykKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0
b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKICAgICBG
YWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+
c2V0SXRlcmF0aW9ucygtMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7
CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMS4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1LCAqZXZlbnRz
KTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAg
ICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMS43NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1LCAqZXZlbnRzKTsKICAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQ
RUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxMDczNzQxODI0LjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuMjUs
ICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEw
NzM3NDE4MjQuNzUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7
CiAKQEAgLTM3NSw4MCArMzQ5LDY2IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsVGVzdCwgSW5maW5pdGVMb29waW5nKQogLy8gVGVzdCB0aGF0IHBhdXNpbmcgYW5kIHJlc3Vt
aW5nIHdvcmsgYXMgZXhwZWN0ZWQuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bFRlc3QsIFBhdXNlUmVzdW1lKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogICAgIEZh
a2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41
LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpQYXVzZWQsIDAuNWYpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0KTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEwMjQsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXku
b3BhY2l0eSgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1h
dGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5n
ZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOwogCi0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxMDI0LjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuMjUsICpl
dmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxMDI0LjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC41LCAqZXZl
bnRzKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwogfQogCiBURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEFib3J0QUdyb3VwZWRBbmltYXRpb24pCiB7Cisg
ICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7
CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigK
ICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7
CiAKICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSks
IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRk
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250
cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
cmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVt
bXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkp
OwogCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFu
aW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMiwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoIWNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7
CiB9CiAKLS8vIFRlc3RzIHRoYXQgYWRkaW5nIGFuIGFuaW1hdGlvbiB0byB0aGUgY29udHJvbGxl
ciBjYWxscyB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2sgb24gdGhlIGNvbnRyb2xsZXIgY2xpZW50
Ci0vLyAoaW4gdGhpcyBjYXNlLCBhZGRpbmcgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIGxpc3Qgb2Yg
YWN0aXZlIGNvbnRyb2xsZXIpLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBEaWRBY3RpdmF0ZSkKLXsKLSAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQot
ICAgIEVYUEVDVF9FUShzaXplX3QoMCksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKCkuc2l6ZSgp
KTsKLQotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKLQotICAgIEVYUEVDVF9FUShzaXplX3QoMSksIGR1bW15LmFjdGl2ZUNv
bnRyb2xsZXJzKCkuc2l6ZSgpKTsKLSAgICBFWFBFQ1RfRVEoY29udHJvbGxlci5nZXQoKSwgZHVt
bXkuYWN0aXZlQ29udHJvbGxlcnMoKVswXSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwCmluZGV4IGY1OTg5M2RlOTA2NDE4ZjhjYmQ3NTc0MGFlMjkzOWUyM2NjMjM1MGEuLmFm
ZDQwNzE5M2I5MWM3MjA2YjkyZTJhOGY3OTNkNWIzYTc0ZjRlYzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3Bw
CkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVy
c0NvbXBsZXRlT25JbXBsVGhyZWFkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVk
cmF3T25JbXBsVGhyZWFkKCkgeyBtX2RpZFJlcXVlc3RSZWRyYXcgPSB0cnVlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgeyBtX2RpZFJlcXVlc3RDb21t
aXQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5U
aHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4pIHsg
fQogCiAgICAgc3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShD
Q0xheWVySW1wbCogbGF5ZXIpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMTYzNzFhMWFlYWVlMGVlN2Ni
NWEyOTU2MWFkOGNlZmYxMjAzMjA0OS4uZDExNmY4MWFlYzM5MDIzMjE4NDhlMTYwMzMzYTkzN2Y0
MDkwMzIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2lu
Y2x1ZGUgIkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJD
b250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKQEAg
LTM1LDYgKzM2LDggQEAKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldl
YkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oIgpAQCAtNDgsMTEg
KzUxLDExIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
LW5hbWVzcGFjZSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFVzZWQgYnkgdGVzdCBzdHVi
cyB0byBub3RpZnkgdGhlIHRlc3Qgd2hlbiBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVucy4K
IGNsYXNzIFRlc3RIb29rcyB7CkBAIC02MCw5ICs2MywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJ
bXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdEltcGwqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVy
VHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUo
Y29uc3QgSW50U2l6ZSYsIGZsb2F0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0
aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KIH07CiAKIC8v
IEFkYXB0cyBDQ0xheWVyVHJlZUhvc3RJbXBsIGZvciB0ZXN0LiBSdW5zIHJlYWwgY29kZSwgdGhl
biBpbnZva2VzIHRlc3QgaG9va3MuCkBAIC05MSw2ICs5NiwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fdGVzdEhvb2tzLT5kcmF3TGF5ZXJzT25DQ1RocmVhZCh0aGlzKTsKICAgICB9CiAKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRp
bWVNcykKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMo
ZnJhbWVCZWdpblRpbWVNcyk7CisgICAgICAgIG1fdGVzdEhvb2tzLT5hbmltYXRlTGF5ZXJzKHRo
aXMpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGwoVGVzdEhv
b2tzKiB0ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50KiBjbGllbnQpCiAgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbChzZXR0
aW5ncywgY2xpZW50KQpAQCAtMjI2LDcgKzIzOCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkKKyAgICB7CisgICAgfQogCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KFRlc3RIb29rcyogdGVzdEhvb2tzKSA6IG1f
dGVzdEhvb2tzKHRlc3RIb29rcykgeyB9CkBAIC0yNTYsNiArMjcwLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldE5l
ZWRzQW5pbWF0ZSwgdGhpcyk7CiAgICAgfQogCisgICAgdm9pZCBwb3N0QWRkQW5pbWF0aW9uVG9N
YWluVGhyZWFkKCkKKyAgICB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVI
b3N0VGVzdDo6ZGlzcGF0Y2hBZGRBbmltYXRpb24sIHRoaXMpOworICAgIH0KKwogICAgIHZvaWQg
cG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCkKICAgICB7CiAgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0NvbW1pdCwgdGhp
cyk7CkBAIC0yNzEsNyArMjkwLDYgQEAgcHVibGljOgogICAgICAgICBjYWxsT25NYWluVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0LCB0
aGlzKTsKICAgICB9CiAKLQogICAgIHZvaWQgcG9zdFNldFZpc2libGVUb01haW5UaHJlYWQoYm9v
bCB2aXNpYmxlKQogICAgIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZCh2aXNpYmxlID8gQ0NM
YXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXRWaXNpYmxlIDogQ0NMYXllclRyZWVIb3N0VGVz
dDo6ZGlzcGF0Y2hTZXRJbnZpc2libGUsIHRoaXMpOwpAQCAtMzE0LDYgKzMzMiwxNSBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0FuaW1hdGUo
KTsKICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEFkZEFuaW1hdGlvbih2b2lkKiBz
ZWxmKQorICAgIHsKKyAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICBDQ0xheWVy
VHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNl
bGYpOworICAgICAgQVNTRVJUKHRlc3QpOworICAgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9z
dCAmJiB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKQorICAgICAgICAgIGFkZE9w
YWNpdHlUcmFuc2l0aW9uKCp0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLCAwLCAw
LCAxKTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZUFu
ZENvbW1pdCh2b2lkKiBzZWxmKQogICAgIHsKICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CkBAIC03OTAsNiArODE3LDQ3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNB
bmltYXRlSW5zaWRlQW5pbWF0aW9uQ2FsbGJhY2ssIHJ1bk11bHRpVGhyZWFkCiAgICAgcnVuVGVz
dFRocmVhZGVkKCk7CiB9CiAKKy8vIEFkZCBhIGxheWVyIGFuaW1hdGlvbiBhbmQgY29uZmlybSB0
aGF0IENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMgZG9lcyBnZXQKKy8vIGNhbGxl
ZCBhbmQgY29udGludWVzIHRvIGdldCBjYWxsZWQuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0
QWRkQW5pbWF0aW9uIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1
YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uKCkKKyAgICAgICAgOiBt
X251bUFuaW1hdGVzKDApCisgICAgICAgICwgbV9sYXllclRyZWVIb3N0SW1wbCgwKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIHBv
c3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9udW1BbmltYXRlcykgeworICAgICAgICAgICAgLy8gVGhlIGFu
aW1hdGlvbiBoYWQgemVybyBkdXJhdGlvbiBzbyBsYXllclRyZWVIb3N0SW1wbCBzaG91bGQgbm8K
KyAgICAgICAgICAgIC8vIGxvbmdlciBuZWVkIHRvIGFuaW1hdGUgaXRzIGxheWVycy4KKyAgICAg
ICAgICAgIEVYUEVDVF9GQUxTRShsYXllclRyZWVIb3N0SW1wbC0+bmVlZHNBbmltYXRlTGF5ZXJz
KCkpOworICAgICAgICAgICAgbV9udW1BbmltYXRlcysrOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251bUFuaW1h
dGVzOworICAgIENDTGF5ZXJUcmVlSG9zdEltcGwqIG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9Owor
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbiwgcnVuTXVsdGlUaHJlYWQp
Cit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7Cit9CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxTaW1wbGUgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewog
cHVibGljOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApp
bmRleCAxNTU3YTdkOTMyMmNjNmJlMjA2YmY1MGIwMGMwZjQ3MDYzYzU0NzhiLi5kNWM4ZWQzMzk4
NmU1YWRiY2Q4MmE3ZDVhZWY4ODY2M2Y1NTFlOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtMjYsMTMgKzI2
LDE5IEBACiAKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAKKyNpbmNsdWRlICJDQ0Fu
aW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50
cy5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAi
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwordXNp
bmcgdGVzdGluZzo6VGVzdDsKIAogbmFtZXNwYWNlIHsKIApAQCAtMzA3LDUgKzMxMyw4NSBAQCBU
RVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRSZXBsaWNhTWFza0xh
eWVycykKICAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgpLCBj
Y0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogfQogCitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBz
eW5jTmV3QW5pbWF0aW9uKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisKKyAgICAvLyBTeW5jIHdpdGggbm8gYW5pbWF0aW9ucy4KKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9u
aXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisKKyAgICAvLyBBZGQgYW5pbWF0aW9u
IHRvIG1haW4gdGhyZWFkIGNvbnRyb2xsZXIuCisgICAgYWRkT3BhY2l0eVRyYW5zaXRpb24oKmxh
eWVyVHJlZVJvb3QsIDEsIDAsIDEpOworICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVS
b290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9u
Q29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJn
ZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0
ZSgpKTsKK30KKworVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0FuaW1hdGlvblByb3Bl
cnRpZXMpCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9u
aXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBhZGRP
cGFjaXR5VHJhbnNpdGlvbigqbGF5ZXJUcmVlUm9vdCwgMSwgMCwgMSk7CisgICAgY2NMYXllclRy
ZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290
LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXll
clRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1h
dGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmlt
YXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworCisgICAgLy8gUHVzaCBhbiBhbmltYXRpb24gcHJv
cGVydHkgY2hhbmdlIHRvIHRoZSBpbXBsIHRocmVhZCAoc2hvdWxkIG5vdCBjYXVzZSBhbiBhbmlt
YXRpb24gdG8gYmUgYWRkZWQpLgorICAgIGxheWVyVHJlZVJvb3QtPnBhdXNlQW5pbWF0aW9uKDAs
IDApOworICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAg
IEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRB
Y3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBF
Q1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgY2NMYXllclRyZWVSb290LT5hbmltYXRp
b25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSktPnJ1blN0YXRlKCkpOworfQorCitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBz
eW5jQWJvcnRlZEFuaW1hdGlvbikKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworCisgICAgLy8gU3luYyB3aXRoIG5vIGFuaW1hdGlvbnMuCisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworICAgIGFkZE9wYWNpdHlUcmFu
c2l0aW9uKCpsYXllclRyZWVSb290LCAxLCAwLCAxKTsKKyAgICBjY0xheWVyVHJlZVJvb3QgPSBU
cmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNj
TGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3Qt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICAvLyBBYm9ydCBhbiBhbmltYXRpb24gZnJvbSB0aGUg
bWFpbiB0aHJlYWQuCisgICAgbGF5ZXJUcmVlUm9vdC0+cmVtb3ZlQW5pbWF0aW9uKDApOworICAg
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwg
Y2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9GQUxTRShjY0xheWVyVHJlZVJv
b3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7Cit9CisKK1RFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5
bmNDb21wbGV0ZWRBbmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgorICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBhZGRPcGFjaXR5VHJh
bnNpdGlvbigqbGF5ZXJUcmVlUm9vdCwgMSwgMCwgMSk7CisgICAgVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0
KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9s
bGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWls
YWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2
ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOwor
CisgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBhbmltYXRpb24gdW50aWwgaXQgaXMgZmluaXNoZWQu
IEF0IHRoZSBuZXh0IHN5bmMsIHRoZSBtYWluIHRocmVhZCdzIGFuaW1hdGlvbiBzaG91bGQgYmUg
Y2xlYXJlZC4KKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9w
dFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBjY0xheWVyVHJlZVJvb3Qt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKKyAgICBjY0xheWVy
VHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKKwor
ICAgIEVYUEVDVF9GQUxTRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+
Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAg
RVhQRUNUX1RSVUUobGF5ZXJUcmVlUm9vdC0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAg
VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBj
Y0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGxheWVyVHJlZVJvb3Qt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127688</attachid>
            <date>2012-02-17 20:21:41 -0800</date>
            <delta_ts>2012-02-17 20:28:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77229-20120217232139.patch</filename>
            <type>text/plain</type>
            <size>67442</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODViZjAxYmRj
YTgyMWI4NWMyYjdjOWU1MmYyNDZkODE1OWZhMjNmOS4uN2UwZjhkMTJmMzgyOGZkMmZhNWMxYTdi
MTVhNzM1Njc5ZjQ4OWE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzI1MCw2ICszMjUwLDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZiNzMzZmZj
MzI5MjlhMWUyOTdmN2QzNjdkZmJiM2Y3NDJlZjZiODUuLmZhOTU0Mzg3M2JlODQwOGE3NWRiMWVi
OGJkZmJkZDk3MTY5MDcwNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cApAQCAtNjEsNiArNjEsMTAgQEAKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNl
IHsKK3N0YXRpYyBzaXplX3QgZ3JvdXBJZCA9IDA7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhp
Y3NMYXllckNsaWVudCogY2xpZW50KQpAQCAtMzg0LDE3ICszODgsMTcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcikKIAogYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25z
dCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgdGltZU9mZnNldCkKIHsKLSAgICByZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVl
cywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBt
YXBBbmltYXRpb25OYW1lVG9JZChhbmltYXRpb25OYW1lKSwgZ3JvdXBJZCwgdGltZU9mZnNldCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewotICAgIG1fbGF5ZXIt
PnBhdXNlQW5pbWF0aW9uKGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAgIG1fbGF5ZXIt
PnBhdXNlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCB0aW1l
T2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiB7Ci0gICAgbV9sYXllci0+cmVtb3ZlQW5p
bWF0aW9uKGFuaW1hdGlvbk5hbWUpOworICAgIG1fbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihtYXBB
bmltYXRpb25OYW1lVG9JZChhbmltYXRpb25OYW1lKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKQEAgLTcxNCw2ICs3MTgs
MTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWMKICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cyhjb250ZXh0LCBjbGlwKTsKIH0KIAorc2l6ZV90IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworICAg
IC8vIEZJWE1FOiBuZWVkIHRvIG1haW50YWluIGEgbmFtZSB0byBpZCBtYXBwaW5nIGluIHRoaXMg
Y2xhc3MuCisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmgKaW5kZXggNGRiNWIzOTZiMDM0NzAwMTJjNGZlMDVkZTAzZjZjY2Q0ODdlNzg0
Mi4uZTA3NGI3ZWE1MGZlNzNiOTI4YTkwNjBmYzkwODc1ZWVjODQ0OWM0YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTEzOCw2ICsxMzgsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgc2V0dXBDb250ZW50c0xheWVyKExheWVyQ2hyb21pdW0qKTsKICAgICBmbG9hdCBjb250
ZW50c1NjYWxlKCkgY29uc3Q7CiAKKyAgICBzaXplX3QgbWFwQW5pbWF0aW9uTmFtZVRvSWQoY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKwogICAgIFN0cmluZyBtX25hbWVCYXNlOwogCiAg
ICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2xheWVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAppbmRleCBiNjJhMzNlMDg2NzU3Y2U5N2Q2ZjhhMTAzMzU0NTMxOTdjOTMzYjc2Li5iOTY3
MWFiZWY1ZGEyMzU5ZTcyOTQwNzAyMDFkZjQ1MTVlYTBlYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcApAQCAtOTQsMjMgKzk0LDIzIEBAIExheWVyQ2hyb21pdW06On5MYXllckNocm9taXVtKCkK
ICAgICByZW1vdmVBbGxDaGlsZHJlbigpOwogfQogCi1ib29sIExheWVyQ2hyb21pdW06OmFkZEFu
aW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBi
b3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0
aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNp
emUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVf
dCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBib29sIGFkZGVkQW5pbWF0aW9u
ID0gbV9hbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBh
bmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAgIGJvb2wgYWRkZWRBbmlt
YXRpb24gPSBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNp
emUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQpOwogICAgIGlm
IChhZGRlZEFuaW1hdGlvbikKICAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKICAgICByZXR1cm4g
YWRkZWRBbmltYXRpb247CiB9CiAKLXZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24o
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oc2l6ZV90IGFuaW1hdGlvbklkLCBkb3VibGUgdGlt
ZU9mZnNldCkKIHsKLSAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uKGFu
aW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cGF1
c2VBbmltYXRpb24oYW5pbWF0aW9uSWQsIHRpbWVPZmZzZXQpOwogICAgIHNldE5lZWRzQ29tbWl0
KCk7CiB9CiAKLXZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKHNp
emVfdCBhbmltYXRpb25JZCkKIHsKLSAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFu
aW1hdGlvbihhbmltYXRpb25OYW1lKTsKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92
ZUFuaW1hdGlvbihhbmltYXRpb25JZCk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MTI2LDYgKzEyNiwxMSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aGFzQWN0aXZl
QW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRJc05vbkNv
bXBvc2l0ZWRDb250ZW50KGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCkKIHsKICAgICBtX2lz
Tm9uQ29tcG9zaXRlZENvbnRlbnQgPSBpc05vbkNvbXBvc2l0ZWRDb250ZW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IGM4ZjhiZDRkY2UyODg0NjhiNTBkMTA3MTk5ZjA1YmQyYzdjYjFmYzEuLjMz
MmQ2N2VhNzdiNjA2NWM5MWY1NTJhMzE5NzFkODk1ZGU4OGZjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MjE1LDE5ICsyMTQsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWx3YXlzUmVzZXJ2ZVRleHR1
cmVzKGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKSB7IG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVz
ID0gYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAgICAgYm9vbCBhbHdheXNSZXNlcnZlVGV4dHVy
ZXMoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlczsgfQogCi0gICAgYm9v
bCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBi
b3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSB0aW1lT2Zmc2V0KTsKLSAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOwotICAgIHZvaWQgcmVtb3ZlQW5pbWF0
aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CisgICAgYm9vbCBhZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBB
bmltYXRpb24qLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGlt
ZU9mZnNldCk7CisgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihzaXplX3QgYW5pbWF0aW9uSWQsIGRv
dWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbihzaXplX3QgYW5pbWF0
aW9uSWQpOwogCiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSk7CiAgICAg
dm9pZCByZXN1bWVBbmltYXRpb25zKCk7CiAKKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbigp
IGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOwotICAg
IGZyaWVuZCBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0OwogICAgIGZyaWVuZCBjbGFzcyBMYXll
clRpbGVyQ2hyb21pdW07CiAgICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7Ci0gICAg
ZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXJBbmltYXRpb25UZXN0OwogCiAgICAgTGF5ZXJD
aHJvbWl1bSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKaW5kZXggMDAw
OWNjODg5ODNhMDY1OWIzOGE2OTNhOTY5Y2E0YzA3NzY2NTdhMS4uNmE0OGI1ZDg0OThhNDdkYTQ1
NWNjNmMxYzQ0YTUyY2ZhZWRiNzA2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9u
LmNwcApAQCAtMzIsOCArMzIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDQWN0aXZl
QW5pbWF0aW9uOjpDQ0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+
IGN1cnZlLCBHcm91cElEIGdyb3VwLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK0ND
QWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9u
Q3VydmU+IGN1cnZlLCBzaXplX3QgaWQsIHNpemVfdCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFy
Z2V0UHJvcGVydHkpCiAgICAgOiBtX2FuaW1hdGlvbkN1cnZlKGN1cnZlKQorICAgICwgbV9pZChp
ZCkKICAgICAsIG1fZ3JvdXAoZ3JvdXApCiAgICAgLCBtX3RhcmdldFByb3BlcnR5KHRhcmdldFBy
b3BlcnR5KQogICAgICwgbV9ydW5TdGF0ZShXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KQpA
QCAtMTE0LDcgKzExNSw3IEBAIGRvdWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1
cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gQ0NBY3RpdmVBbmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCgpIGNvbnN0CiB7
Ci0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVybihhZG9wdFB0cihuZXcgQ0NB
Y3RpdmVBbmltYXRpb24obV9hbmltYXRpb25DdXJ2ZS0+Y2xvbmUoKSwgbV9ncm91cCwgbV90YXJn
ZXRQcm9wZXJ0eSkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKGFk
b3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihtX2FuaW1hdGlvbkN1cnZlLT5jbG9uZSgpLCBt
X2lkLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOwogICAgIHRvUmV0dXJuLT5tX3J1blN0
YXRlID0gbV9ydW5TdGF0ZTsKICAgICB0b1JldHVybi0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRp
b25zOwogICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVB
bmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggNjk0NDhlNTNiMjk1ZWViNDhkODEwMzJhMzQ5ODNi
NmYwN2U4NDAzZS4uZGVhYTRjMDFlODFjMzhhMDAzMjkyODMxOGYyYjNhZmVhMGY1Njk3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
Y3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQwLDEzICszOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IENDQWN0aXZlQW5pbWF0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0FjdGl2ZUFu
aW1hdGlvbik7CiBwdWJsaWM6Ci0gICAgLy8gQW5pbWF0aW9ucyB0aGF0IG11c3QgYmUgcnVuIHRv
Z2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBoYXZlIHRoZSBzYW1lIEdyb3VwSUQKLSAg
ICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQgdGhlIHNh
bWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucwotICAgIC8vIG1heSBhbmltYXRlIGFueSBv
ZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBhbGwgYW5pbWF0aW9ucyBpbiB0
aGUKLSAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZy4gTm90ZTogYW4gYWN0aXZl
IGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKLSAgICAvLyBwcm9wZXJ0eSB1bmlxdWVs
eSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KLSAgICB0eXBlZGVmIHNpemVfdCBHcm91cElEOwot
CiAgICAgLy8gQW5pbWF0aW9ucyBiZWdpbiBpbiBvbmUgb2YgdGhlICd3YWl0aW5nJyBzdGF0ZXMu
IEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGhlIG5leHQgdGljawogICAgIC8vIHdpbGwgc3RhcnQg
dGhlIG5leHQgdGltZSB0aGUgY29udHJvbGxlciBhbmltYXRlcy4gQW5pbWF0aW9ucyB3YWl0aW5n
IGZvciB0YXJnZXQKICAgICAvLyBhdmFpbGliaWxpdHkgd2lsbCBydW4gYXMgc29vbiBhcyB0aGVp
ciB0YXJnZXQgcHJvcGVydHkgaXMgZnJlZSAoYW5kIGFsbCB0aGUgYW5pbWF0aW9ucwpAQCAtNzIs
MjEgKzY0LDIyIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RydWN0IEFuaW1hdGlvblNpZ25h
dHVyZSB7Ci0gICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZShHcm91cElEIGdyb3VwSUQsIFRhcmdl
dFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQotICAgICAgICAgICAgOiBncm91cElEKGdyb3VwSUQp
CisgICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZShzaXplX3QgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVy
dHkgdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICA6IGdyb3VwSWQoZ3JvdXBJZCkKICAgICAg
ICAgICAgICwgdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpIHsgfQotICAgICAgICBHcm91
cElEIGdyb3VwSUQ7CisgICAgICAgIHNpemVfdCBncm91cElkOwogICAgICAgICBUYXJnZXRQcm9w
ZXJ0eSB0YXJnZXRQcm9wZXJ0eTsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IGNyZWF0ZShQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZl
LCBHcm91cElEIGdyb3VwLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKKyAgICBzdGF0
aWMgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NBbmlt
YXRpb25DdXJ2ZT4gY3VydmUsIHNpemVfdCBpZCwgc2l6ZV90IGdyb3VwLCBUYXJnZXRQcm9wZXJ0
eSB0YXJnZXRQcm9wZXJ0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NB
Y3RpdmVBbmltYXRpb24oY3VydmUsIGdyb3VwLCB0YXJnZXRQcm9wZXJ0eSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZlLCBpZCwgZ3JvdXAsIHRh
cmdldFByb3BlcnR5KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRpb24o
KTsKIAotICAgIEdyb3VwSUQgZ3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwOyB9CisgICAg
c2l6ZV90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIHNpemVfdCBncm91cCgpIGNv
bnN0IHsgcmV0dXJuIG1fZ3JvdXA7IH0KICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KIAogICAgIFJ1blN0YXRlIHJ1
blN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9ydW5TdGF0ZTsgfQpAQCAtMTIxLDEwICsxMTQsMTkg
QEAgcHVibGljOgogICAgIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0
aW9uKik7CiAKIHByaXZhdGU6Ci0gICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiwgR3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0aXZlQW5p
bWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4sIHNpemVfdCwgc2l6ZV90LCBUYXJn
ZXRQcm9wZXJ0eSk7CiAKICAgICBPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gbV9hbmltYXRpb25D
dXJ2ZTsKLSAgICBHcm91cElEIG1fZ3JvdXA7CisgICAgLy8gTm90ZSBpZCdzIGFyZSBub3QgbmVj
ZXNzYXJpbHkgdW5pcXVlLgorICAgIHNpemVfdCBtX2lkOworCisgICAgLy8gQW5pbWF0aW9ucyB0
aGF0IG11c3QgYmUgcnVuIHRvZ2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBoYXZlIHRo
ZSBzYW1lIEdyb3VwSUQKKyAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQg
dG8gc3RhcnQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucworICAgIC8v
IG1heSBhbmltYXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBh
bGwgYW5pbWF0aW9ucyBpbiB0aGUKKyAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGlu
Zy4gTm90ZTogYW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKKyAgICAv
LyBwcm9wZXJ0eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KKyAgICBzaXplX3Qg
bV9ncm91cDsKKwogICAgIFRhcmdldFByb3BlcnR5IG1fdGFyZ2V0UHJvcGVydHk7CiAgICAgUnVu
U3RhdGUgbV9ydW5TdGF0ZTsKICAgICBpbnQgbV9pdGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ODE0ZDRkYzdi
NjY2MDAzYjM5OTkxNmZkNDQ4YTVhY2Q5NDMzNGYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5jcHAKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKwor
I2luY2x1ZGUgIklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4
M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRp
b24uaCIKKyNpbmNsdWRlICJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlIDxj
bGFzcyBLRVlGUkFNRT4KK2Jvb2wga2V5ZnJhbWVzQXJlU29ydGVkKGNvbnN0IFZlY3RvcjxLRVlG
UkFNRT4mIGtleWZyYW1lcykKK3sKKyAgICBpZiAoIWtleWZyYW1lcy5zaXplKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6
ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGlmIChrZXlmcmFtZXNbaV0udGltZSA+IGtleWZyYW1l
c1tpKzFdLnRpbWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZQorCitQYXNzT3duUHRyPENDS2V5ZnJhbWVkRmxv
YXRBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUo
Y29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4mIGtleWZyYW1lcykKK3sKKyAgICBpZiAoIWtl
eWZyYW1lcy5zaXplKCkgfHwgIWtleWZyYW1lc0FyZVNvcnRlZChrZXlmcmFtZXMpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NLZXlmcmFtZWRG
bG9hdEFuaW1hdGlvbkN1cnZlKGtleWZyYW1lcykpOworfQorCitDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8
Q0NGbG9hdEtleWZyYW1lPiYga2V5ZnJhbWVzKQorICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVz
KQoreworfQorCitDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmUoKSB7IH0KKworZG91YmxlIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZTo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0
KCkudGltZSAtIG1fa2V5ZnJhbWVzLmZpcnN0KCkudGltZTsKK30KKworUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNsb25lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZSgqdGhpcykpOworfQorCitmbG9hdCBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6
OmdldFZhbHVlKGRvdWJsZSB0KSBjb25zdAoreworICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZp
cnN0KCkudGltZSkKKyAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmZpcnN0KCkudmFsdWU7CisK
KyAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCkudGltZSkKKyAgICAgICAgcmV0dXJuIG1f
a2V5ZnJhbWVzLmxhc3QoKS52YWx1ZTsKKworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKDsg
aSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBpZiAodCA8IG1fa2V5
ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZsb2F0
IHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCh0IC0gbV9rZXlmcmFtZXNbaV0udGltZSkg
LyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFtZXNbaV0udGltZSkpOworICAgIC8v
IEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rpb24gaGVyZS4KKyAgICByZXR1cm4gbV9rZXlmcmFt
ZXNbaV0udmFsdWUgKyAobV9rZXlmcmFtZXNbaSsxXS52YWx1ZSAtIG1fa2V5ZnJhbWVzW2ldLnZh
bHVlKSAqIHByb2dyZXNzOworfQorCitQYXNzT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShj
b25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcykKK3sKKyAgICBpZiAo
IWtleWZyYW1lcy5zaXplKCkgfHwgIWtleWZyYW1lc0FyZVNvcnRlZChrZXlmcmFtZXMpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NLZXlmcmFt
ZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShrZXlmcmFtZXMpKTsKK30KKworQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcykKKyAgICA6IG1f
a2V5ZnJhbWVzKGtleWZyYW1lcykKK3sKK30KKworQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6fkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KKworZG91
YmxlIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLnRpbWUgLSBtX2tleWZyYW1lcy5maXJz
dCgpLnRpbWU7Cit9CisKK1Bhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y2xvbmUoKSBjb25zdAoreworICAgIFZlY3RvcjxDQ1Ry
YW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAgLy8gV2UgbmVlZCB0byBkbyBhIGRlZXAg
Y29weSBvZiBhbGwgb2YgdGhlIGtleWZyYW1lcyBzaW5jZSB0aGV5IGNvbnRhaW4gcmVmCisgICAg
Ly8gcG9pbnRlcnMgdG8gVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2tleWZyYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBDQ1RyYW5z
Zm9ybUtleWZyYW1lIGtleWZyYW1lKG1fa2V5ZnJhbWVzW2ldLnRpbWUpOworICAgICAgICBmb3Ig
KHNpemVfdCBqID0gMDsgaiA8IG1fa2V5ZnJhbWVzW2ldLnZhbHVlLnNpemUoKTsgKytqKSB7Cisg
ICAgICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlw
ZSA9IG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0aW9uVHlw
ZSgpOworICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKSB7CisgICAgICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFX1o6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVf
M0Q6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKKyAgICAg
ICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nh
c3Q8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRp
b25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlv
bnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngo
KSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCBvcGVyYXRpb25UeXBlKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFX1k6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1o6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFXzNEOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RTogeworICAgICAgICAgICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNm
b3JtID0gc3RhdGljX2Nhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFt
ZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBrZXlm
cmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCks
IG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKKyAgICAgICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKKyAgICAgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6Uk9UQVRFOiB7CisgICAgICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24q
PihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAg
ICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zv
cm0tPnooKSwgdHJhbnNmb3JtLT5hbmdsZSgpLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0tFV19YOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNL
RVdfWToKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOiB7CisgICAg
ICAgICAgICAgICAgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nh
c3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlv
bnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9u
cygpLmFwcGVuZChTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5hbmds
ZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246Ok1BVFJJWDogeworICAgICAgICAgICAgICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlv
biogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4obV9r
ZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtID0gdHJhbnNmb3JtLT5tYXRyaXgoKTsKKyAgICAgICAg
ICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKG0uYSgpLCBtLmIoKSwgbS5jKCksIG0uZCgpLCBtLmUoKSwgbS5m
KCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0Q6IHsKKyAgICAgICAgICAgICAgICBN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4
M0RUcmFuc2Zvcm1PcGVyYXRpb24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClb
al0uZ2V0KCkpOworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5h
cHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPm1hdHJp
eCgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKKyAgICAgICAgICAgICAg
ICBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8
UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVy
YXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJh
dGlvbnMoKS5hcHBlbmQoUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFu
c2Zvcm0tPnBlcnNwZWN0aXZlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWTogewor
ICAgICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoSWRlbnRp
dHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05F
OgorICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9IC8vIHN3aXRjaAorICAgICAgICB9IC8vIGZvciBlYWNoIG9wZXJhdGlv
bgorICAgICAgICBrZXlmcmFtZXMuYXBwZW5kKGtleWZyYW1lKTsKKyAgICB9CisgICAgcmV0dXJu
IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpOwor
fQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdAor
eworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybU1hdHJpeDsKKworICAgIGlmICh0
IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCkudGltZSkgeworICAgICAgICBtX2tleWZyYW1lcy5maXJz
dCgpLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgcmV0
dXJuIHRyYW5zZm9ybU1hdHJpeDsKKyAgICB9CisKKyAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5s
YXN0KCkudGltZSkgeworICAgICAgICBtX2tleWZyYW1lcy5sYXN0KCkudmFsdWUuYXBwbHkobGF5
ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOworICAgICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4
OworICAgIH0KKworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVz
LnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBpZiAodCA8IG1fa2V5ZnJhbWVzW2krMV0udGlt
ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIEZJWE1FOiBhcHBseSB0aW1p
bmcgZnVuY3Rpb24gaGVyZS4KKyAgICBkb3VibGUgcHJvZ3Jlc3MgPSAodCAtIG1fa2V5ZnJhbWVz
W2ldLnRpbWUpIC8gKG1fa2V5ZnJhbWVzW2krMV0udGltZSAtIG1fa2V5ZnJhbWVzW2ldLnRpbWUp
OworCisgICAgaWYgKG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnNNYXRjaChtX2tleWZy
YW1lc1tpKzFdLnZhbHVlKSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fa2V5
ZnJhbWVzW2krMV0udmFsdWUuc2l6ZSgpOyArK2opCisgICAgICAgICAgICBtX2tleWZyYW1lc1tp
KzFdLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS0+YmxlbmQobV9rZXlmcmFtZXNbaV0udmFsdWUuYXQo
aiksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3JtTWF0cml4LCBsYXllclNpemUpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNvdXJjZTsKKworICAgICAgICBt
X2tleWZyYW1lc1tpXS52YWx1ZS5hcHBseShsYXllclNpemUsIHNvdXJjZSk7CisgICAgICAgIG1f
a2V5ZnJhbWVzW2krMV0udmFsdWUuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOwor
CisgICAgICAgIHRyYW5zZm9ybU1hdHJpeC5ibGVuZChzb3VyY2UsIHByb2dyZXNzKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWVhZWFhYTc1NTAzZWEyODdmNDUzOGE5NjgxODg5MzFkOTY5N2RjYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
S2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKKyNkZWZpbmUgQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZV9oCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RydWN0IENDRmxvYXRLZXlmcmFtZSB7CisgICAgQ0NGbG9hdEtleWZyYW1lKGRvdWJsZSB0aW1l
LCBmbG9hdCB2YWx1ZSkKKyAgICAgICAgOiB0aW1lKHRpbWUpCisgICAgICAgICwgdmFsdWUodmFs
dWUpCisgICAgeworICAgIH0KKyAgICBkb3VibGUgdGltZTsKKyAgICBmbG9hdCB2YWx1ZTsKK307
CisKK3N0cnVjdCBDQ1RyYW5zZm9ybUtleWZyYW1lIHsKKyAgICBDQ1RyYW5zZm9ybUtleWZyYW1l
KGRvdWJsZSB0aW1lKQorICAgICAgICA6IHRpbWUodGltZSkKKyAgICB7CisgICAgfQorICAgIEND
VHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IHZhbHVlKQorICAgICAgICA6IHRpbWUodGltZSkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAg
ICB7CisgICAgfQorICAgIGRvdWJsZSB0aW1lOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgdmFs
dWU7Cit9OworCitjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMg
Q0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICAvLyBJdCBpcyByZXF1aXJlZCB0
aGF0IHRoZSBrZXlmcmFtZXMgYmUgc29ydGVkIGJ5IHRpbWUuCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjcmVhdGUoY29uc3QgVmVjdG9yPEND
RmxvYXRLZXlmcmFtZT4mIGtleWZyYW1lcyk7CisKKyAgICB2aXJ0dWFsIH5DQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmUoKTsKKworICAgIC8vIENDQW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50
YXRpb24KKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0OworCisgICAgLy8gQ0NG
bG9hdEFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBmbG9hdCBnZXRW
YWx1ZShkb3VibGUgdCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+Jik7CisK
KyAgICAvLyBBbHdheXMgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdv
IGtleWZyYW1lcyBoYXZlIHRoZQorICAgIC8vIHNhbWUgdGltZS4KKyAgICBWZWN0b3I8Q0NGbG9h
dEtleWZyYW1lPiBtX2tleWZyYW1lczsKK307CisKK2NsYXNzIENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7CitwdWJs
aWM6CisgICAgLy8gSXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUga2V5ZnJhbWVzIGJlIHNvcnRlZCBi
eSB0aW1lLgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZy
YW1lcyk7CisKKyAgICB2aXJ0dWFsIH5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
KCk7CisKKyAgICAvLyBDQ0FuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVh
bCBkb3VibGUgZHVyYXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmlt
YXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKKworICAgIC8vIENDVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdl
dFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
ZXhwbGljaXQgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8
Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mKTsKKworICAgIC8vIEFsd2F5cyBzb3J0ZWQgaW4gb3JkZXIg
b2YgaW5jcmVhc2luZyB0aW1lLiBObyB0d28ga2V5ZnJhbWVzIGhhdmUgdGhlCisgICAgLy8gc2Ft
ZSB0aW1lLgorICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBtX2tleWZyYW1lczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCmluZGV4IDM2YmE3NDhlMDE0ZDEzZGVlOGFhM2Y2ZjVmYzMzMGNkOWQyMGZhY2UuLjFj
OTE2MTQzZTU0ZThlM2FlNzliNGQ2MTFlODE1YjdiNDg0NjJkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTI4LDExICsyOCw1OSBA
QAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QK
ICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSB7CisKK3RlbXBs
YXRlIDxjbGFzcyBLRVlGUkFNRSwgY2xhc3MgQ1VSVkU+CitQYXNzT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZh
bHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIHNpemVfdCBhbmltYXRpb25JZCwg
c2l6ZV90IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIC8vIEZJWE1FOiBhZGQg
c3VwcG9ydCBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMuCisgICAgaWYgKGFuaW1hdGlvbiAmJiBh
bmltYXRpb24tPmlzRGlyZWN0aW9uU2V0KCkgJiYgYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBB
bmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGRlbGF5CisgICAgaWYgKGFu
aW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRGVsYXlTZXQoKSAmJiBhbmltYXRpb24tPmRlbGF5KCkg
PiAwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9y
dCBmb3IgZmlsbHMgZm9yd2FyZHMgYW5kIGZpbGxzIGJhY2t3YXJkcworICAgIGlmIChhbmltYXRp
b24gJiYgYW5pbWF0aW9uLT5pc0ZpbGxNb2RlU2V0KCkgJiYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3
YXJkcygpIHx8IGFuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgVmVjdG9yPEtFWUZSQU1FPiBrZXlmcmFtZXM7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICBGbG9hdEFu
aW1hdGlvblZhbHVlKiBvcmlnaW5hbFZhbHVlID0gKEZsb2F0QW5pbWF0aW9uVmFsdWUqKXZhbHVl
TGlzdC5hdChpKTsKKworICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHRpbWluZyBm
dW5jdGlvbnMuCisgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpICYm
IG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCktPnR5cGUoKSAhPSBUaW1pbmdGdW5jdGlv
bjo6TGluZWFyRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBkb3VibGUgZHVyYXRpb24gPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlvblNl
dCgpKSA/IGFuaW1hdGlvbi0+ZHVyYXRpb24oKSA6IDE7CisgICAgICAgIGtleWZyYW1lcy5hcHBl
bmQoS0VZRlJBTUUob3JpZ2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb24sIG9yaWdpbmFs
VmFsdWUtPnZhbHVlKCkpKTsKKyAgICB9CisKKyAgICBPd25QdHI8Q1VSVkU+IGN1cnZlID0gQ1VS
VkU6OmNyZWF0ZShrZXlmcmFtZXMpOworCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBh
bmltID0gQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlv
bklkLCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7CisKKyAgICBBU1NFUlQo
YW5pbS5nZXQoKSk7CisKKyAgICBpZiAoYW5pbS5nZXQoKSkgeworICAgICAgICBpbnQgaXRlcmF0
aW9ucyA9IChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0l0ZXJhdGlvbkNvdW50U2V0KCkpID8g
YW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpIDogMTsKKyAgICAgICAgYW5pbS0+c2V0SXRlcmF0
aW9ucyhpdGVyYXRpb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gYW5pbS5yZWxlYXNlKCk7Cit9
CisKK30gLy8gbmFtZXBhY2UKKwogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCkKIHsKIH0KQEAgLTQ2LDI3ICs5NCw0OSBAQCBQYXNzT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKTsKIH0KIAotYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9u
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgLypib3hTaXplKi8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQW5pbWF0
aW9uKiBhbmltYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aW1lT2Zmc2V0KQorYm9vbCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5p
bWF0aW9uLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9m
ZnNldCkKIHsKKyAgICBpZiAoIWFuaW1hdGlvbiB8fCBhbmltYXRpb24tPmlzRW1wdHlPclplcm9E
dXJhdGlvbigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkOworICAgIGlmICh2YWx1ZUxp
c3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAgICAg
ICB0b0FkZCA9IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbjxDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgYW5p
bWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQpOworICAgIGVsc2UgaWYgKHZhbHVlTGlzdC5w
cm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQorICAgICAgICB0b0FkZCA9IGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbjxDQ0Zsb2F0S2V5ZnJhbWUsIENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZT4odmFsdWVMaXN0LCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0
aW1lT2Zmc2V0KTsKKworICAgIGlmICh0b0FkZC5nZXQoKSkgeworICAgICAgICBtX2FjdGl2ZUFu
aW1hdGlvbnMuYXBwZW5kKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgdGltZU9mZnNldCkKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5p
bWF0aW9uKHNpemVfdCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCkKKyAg
ICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OlBhdXNlZCwgdGltZU9mZnNldCk7CisgICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lKQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKHNp
emVfdCBhbmltYXRpb25JZCkKIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7KSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PmlkKCkgPT0gYW5pbWF0aW9uSWQpCisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVt
b3ZlKGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpKys7CisgICAgfQogfQogCisvLyBB
Y2NvcmRpbmcgdG8gcmVuZGVyIGxheWVyIGJhY2tpbmcsIHRoZXNlIGFyZSBmb3IgdGVzdGluZyBv
bmx5Lgogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMo
ZG91YmxlIHRpbWUpCiB7CiB9CiAKKy8vIExvb2tpbmcgYXQgR3JhcGhpY3NMYXllckNBLCB0aGlz
IGFwcGVhcnMgdG8gYmUgdGhlIGFuYWxvZyB0byBzdXNwZW5kQW5pbWF0aW9ucywgd2hpY2ggaXMg
Zm9yIHRlc3RpbmcuCiB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmlt
YXRpb25zKCkKIHsKIH0KQEAgLTg1LDcgKzE1NSw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQoQ0NMYXllckFu
CiB7CiAgICAgLy8gQW55IGFuaW1hdGlvbnMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFkIGFy
ZSByZW1vdmVkIGZyb20gdGhlIG1haW4gdGhyZWFkJ3MgY29sbGVjdGlvbi4KICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVtb3ZlKGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0
aW9uc1tpXS5ncm91cElELCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnNbaV0u
dGFyZ2V0UHJvcGVydHkpOworICAgICAgICByZW1vdmUoY29udHJvbGxlckltcGwtPm1fZmluaXNo
ZWRBbmltYXRpb25zW2ldLmdyb3VwSWQsIGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0
aW9uc1tpXS50YXJnZXRQcm9wZXJ0eSk7CiAgICAgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRB
bmltYXRpb25zLmNsZWFyKCk7CiB9CiAKQEAgLTEyNiw3ICsxOTYsNyBAQCB2b2lkIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbAogICAgIH0KIH0KIAotQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3Vw
SUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0
aXZlQW5pbWF0aW9uKHNpemVfdCBncm91cCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3Bl
cnR5IHRhcmdldFByb3BlcnR5KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ncm91cCgpID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJv
cGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkKQEAgLTEzNCw3ICsyMDQsNyBAQCBDQ0FjdGl2ZUFu
aW1hdGlvbiogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihD
Q0FjdGl2ZUFuaW1hdAogICAgIHJldHVybiAwOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpyZW1vdmUoQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3ZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZShzaXplX3QgZ3JvdXAsIENDQWN0aXZlQW5pbWF0
aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKIHsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKaW5kZXggNDZkNWMxNmVlOGNl
OTU2OWEzNGRiNTQ5MjM0MTljNjkzZWY5YWZjNS4uNDRmYzZlODMxNTY0YWNiZjdhZGQ5MjRmYTgx
N2MyN2JmMjY4MjRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oCkBAIC00OCw5ICs0OCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcigpOwogCiAgICAgLy8gVGhlc2UgYXJlIHZpcnR1YWwgZm9yIHRl
c3RpbmcuCi0gICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0
cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOwotICAgIHZpcnR1YWwgdm9p
ZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
T2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSk7CisgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbios
IHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oc2l6ZV90IGFuaW1hdGlvbklkLCBkb3Vi
bGUgdGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihzaXplX3Qg
YW5pbWF0aW9uSWQpOwogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUg
dGltZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKIApAQCAtNTgsOCAr
NTgsNyBAQCBwdWJsaWM6CiAgICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBmdW5jdGlvbiBk
b2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJvbGxlci4KICAg
ICB2b2lkIHN5bmNocm9uaXplQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwqKTsKIAotICAgIC8vIFRoaXMgaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KLSAgICBW
ZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+JiBhY3RpdmVBbmltYXRpb25zKCkgeyBy
ZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zOyB9CisgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyB9CiAKIHByb3RlY3Rl
ZDoKICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwpAQCAtNzAsOCArNjksOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKICAgICB2b2lkIHB1c2hBbmltYXRpb25Q
cm9wZXJ0aWVzKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOwogCi0gICAgQ0NBY3Rp
dmVBbmltYXRpb24qIGdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJ
RCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKLSAgICB2b2lkIHJlbW92ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3Bl
cnR5KTsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKHNpemVfdCBn
cm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworICAgIHZvaWQgcmVt
b3ZlKHNpemVfdCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwog
CiAgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2FjdGl2ZUFuaW1hdGlv
bnM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5jcHAKaW5kZXggZWQxZTVlYTAwNzA0ZGY1NjA1MTE3YzBjYTdmODQ2MzI4ZmEyMjlm
Yy4uN2RkMjgyMWI2YjYyMmViOTE0NGEwMGY3ZTZiZTBjYmI4NGRjNzM2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCkBAIC02
Myw3ICs2Myw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQoUGFz
c093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSkKICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMu
YXBwZW5kKGFuaW0pOwogfQogCi1DQ0FjdGl2ZUFuaW1hdGlvbiogQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3Vw
SUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKK0ND
QWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmdldEFjdGl2
ZUFuaW1hdGlvbihzaXplX3QgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSBwcm9wZXJ0eSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5n
cm91cCgpID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHko
KSA9PSBwcm9wZXJ0eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsLmgKaW5kZXggYmZkZWExZjk2MTFlNTNhYTFlZmM1OTllMGQzNzlmODIwODNm
YWVkMC4uYzk4ZjljYjY3MTBlYTU1MGYyMmRmYWVkNGM4NmY5NTg2OTkzNjdkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKQEAgLTY3
LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFuaW1hdGlv
biBpbiB0aGUgZ2l2ZW4gZ3JvdXAsIGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHkgaWYgc3Vj
aCBhbgogICAgIC8vIGFuaW1hdGlvbiBleGlzdHMuCi0gICAgQ0NBY3RpdmVBbmltYXRpb24qIGdl
dEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCwgQ0NBY3RpdmVBbmlt
YXRpb246OlRhcmdldFByb3BlcnR5KTsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZl
QW5pbWF0aW9uKHNpemVfdCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVy
dHkpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0aW9ucyB0
aGF0IGFyZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVkLgogICAgIGJvb2wgaGFzQWN0aXZl
QW5pbWF0aW9uKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBiODNk
Mjg1MGVkZjNlMDlkMzY1YjE3NTI0ZWFjMjI4NWM3YWE2NTU2Li5lY2JkMWY3Nzc5NTM1MGY5NDk4
ZmVkOWJjNjM1ODlkNDZmMzg1NDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAg
LTYxLDEwICs2MSwxMiBAQAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAnLAorICAg
ICAgICAgICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0Rh
bWFnZVRyYWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGlt
ZVNvdXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2
ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3Bw
CmluZGV4IDI2MWVkZmZmODUyZjMzYzEzYjQ5MjFiZTcwZTYwOWU0MmY1ZTJiOTMuLmUxNGVmOWJj
MDk3MWExMWUyMTRiMzE0ZDc1ODI5MTVlY2M1NmQzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTM4LDcg
KzM4LDcgQEAgbmFtZXNwYWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAwLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvUmV0dXJuLT5zZXRJdGVyYXRp
b25zKGl0ZXJhdGlvbnMpOwogICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1v
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1v
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjhhZjgwYjhiNWZhNWIzZjZmYmJhMzJmODJmNWU3YzRhZjEzMmRl
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmlt
YXRpb25UZXN0Q29tbW9uLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKwor
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkKK3sKK30K
KworRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6On5GYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpCit7
Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gRmFrZUZsb2F0QW5p
bWF0aW9uQ3VydmU6OmNsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZh
a2VGbG9hdEFuaW1hdGlvbkN1cnZlKTsKK30KKworRmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OkZh
a2VUcmFuc2Zvcm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikKKyAgICA6IG1fZHVyYXRpb24o
ZHVyYXRpb24pCit7Cit9CisKK0Zha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjp+RmFrZVRyYW5zZm9y
bVRyYW5zaXRpb24oKQoreworfQorCitXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4KCk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4g
RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmNsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCp0aGlzKSk7Cit9CisKKworRmFrZUZs
b2F0VHJhbnNpdGlvbjo6RmFrZUZsb2F0VHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24sIGZsb2F0
IGZyb20sIGZsb2F0IHRvKQorICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikKKyAgICAsIG1fZnJv
bShmcm9tKQorICAgICwgbV90byh0bykKK3sKK30KKworRmFrZUZsb2F0VHJhbnNpdGlvbjo6fkZh
a2VGbG9hdFRyYW5zaXRpb24oKQoreworfQorCitmbG9hdCBGYWtlRmxvYXRUcmFuc2l0aW9uOjpn
ZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKK3sKKyAgICB0aW1lIC89IG1fZHVyYXRpb247Cisg
ICAgaWYgKHRpbWUgPj0gMSkKKyAgICAgICAgdGltZSA9IDE7CisgICAgcmV0dXJuICgxIC0gdGlt
ZSkgKiBtX2Zyb20gKyB0aW1lICogbV90bzsKK30KKworUGFzc093blB0cjxXZWJDb3JlOjpDQ0Fu
aW1hdGlvbkN1cnZlPiBGYWtlRmxvYXRUcmFuc2l0aW9uOjpjbG9uZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKCp0aGlzKSk7Cit9CisKK3Zv
aWQgYWRkT3BhY2l0eVRyYW5zaXRpb24oV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSYgbGF5ZXIsIGRv
dWJsZSBkdXJhdGlvbiwgZmxvYXQgc3RhcnRPcGFjaXR5LCBmbG9hdCBlbmRPcGFjaXR5KQorewor
ICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eSk7CisgICAgaWYgKGR1cmF0aW9uID4gMCkKKyAgICAgICAgdmFsdWVzLmluc2VydChuZXcg
RmxvYXRBbmltYXRpb25WYWx1ZSgwLCBzdGFydE9wYWNpdHkpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0
KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCBlbmRPcGFjaXR5KSk7CisKKyAgICBS
ZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIGFu
aW1hdGlvbi0+c2V0RHVyYXRpb24oMSk7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisKKyAgICBs
YXllci5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAs
IDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXRUZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKaW5kZXggN2JkOGEy
ZmUyMTUxZTY4ZjJkNTZjNmM5YTA0N2I2Y2Q5ODNlZjliOS4uZGJkYjJhZDc1NmZkMzJlMzg2ZDk3
YWY5YzRjOTA5MWI4ZDYzMTY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCkBAIC0yOSwzNSArMjksMzEgQEAKIAogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgTGF5ZXJD
aHJvbWl1bTsKK30KKwogbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKIAogY2xhc3MgRmFrZUZsb2F0
QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsK
IHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5GYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgfQorICAg
IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisgICAgdmlydHVhbCB+RmFrZUZsb2F0QW5pbWF0
aW9uQ3VydmUoKTsKIAogICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gMTsgfQogICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3QgeyBy
ZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1
cnZlPiBjbG9uZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZh
a2VGbG9hdEFuaW1hdGlvbkN1cnZlKTsKLSAgICB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdl
YkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3Q7CiB9OwogCiBjbGFzcyBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlIHsKIHB1YmxpYzoKLSAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVy
YXRpb24pIDogbV9kdXJhdGlvbihkdXJhdGlvbikgeyB9Ci0gICAgdmlydHVhbCB+RmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb24oKSB7IH0KKyAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUg
ZHVyYXRpb24pOworICAgIHZpcnR1YWwgfkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCk7CiAKICAg
ICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0K
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJs
ZSB0aW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Ci0gICAgfQorICAgIHZp
cnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUGFzc093blB0
cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCp0aGlzKSk7Ci0g
ICAgfQorICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBj
bG9uZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGRvdWJsZSBtX2R1cmF0aW9uOwpAQCAtNjUs
MjggKzYxLDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJs
aWMgV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKIHB1YmxpYzoKLSAgICBGYWtlRmxv
YXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCi0gICAg
ICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgLCBtX2Zyb20oZnJvbSkKLSAgICAg
ICAgLCBtX3RvKHRvKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5GYWtlRmxvYXRUcmFu
c2l0aW9uKCkgeyB9CisgICAgRmFrZUZsb2F0VHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24sIGZs
b2F0IGZyb20sIGZsb2F0IHRvKTsKKyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRUcmFuc2l0aW9uKCk7
CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRp
b247IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAotICAg
IHsKLSAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOwotICAgICAgICBpZiAodGltZSA+PSAxKQot
ICAgICAgICAgICAgdGltZSA9IDE7Ci0gICAgICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9mcm9t
ICsgdGltZSAqIG1fdG87Ci0gICAgfQotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6
OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigqdGhpcykpOwotICAgIH0KKyAgICB2aXJ0
dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdDsKKworICAgIHZpcnR1YWwgUGFz
c093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIGRvdWJsZSBtX2R1cmF0aW9uOwpAQCAtOTQsNiArNzUsOCBAQCBwcml2YXRlOgog
ICAgIGZsb2F0IG1fdG87CiB9OwogCit2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW0mLCBkb3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0T3BhY2l0eSwgZmxv
YXQgZW5kT3BhY2l0eSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCiAKICNlbmRpZiAv
LyBDQ0FuaW1hdGlvblRlc2N0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjc3MzJhZWFiNzQyN2RlMzhjN2Q3NDdkOTU3MDE2Njk5ODFlNmZiNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZVRlc3QuY3BwCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmgiCisKKyNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKwordm9pZCBleHBl
Y3RUcmFuc2xhdGVYKGRvdWJsZSB0cmFuc2xhdGVYLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4KQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBk
ZWNvbXBvc2VkVHlwZTsKKyAgICBtYXRyaXguZGVjb21wb3NlKGRlY29tcG9zZWRUeXBlKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEodHJhbnNsYXRlWCwgZGVjb21wb3NlZFR5cGUudHJhbnNsYXRlWCk7
Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCBvbmUga2V5ZnJhbWUg
d29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBP
bmVGbG9hdEtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1l
czsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCAyKSk7CisgICAgT3du
UHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQg
YSBmbG9hdCBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgor
VEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvRmxvYXRLZXlmcmFtZSkKK3sK
KyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAga2V5ZnJhbWVzLmFw
cGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgMikpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9h
dEtleWZyYW1lKDEsIDQpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFt
ZXMpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3Vy
dmUtPmdldFZhbHVlKDEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVl
KDIpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIHRocmVlIGtl
eWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2
ZVRlc3QsIFRocmVlRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1l
PiBrZXlmcmFtZXM7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgMikp
OworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDEsIDQpKTsKKyAgICBrZXlm
cmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgyLCA4KSk7CisgICAgT3duUHRyPENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5n
ZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUt
PmdldFZhbHVlKDIpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDMp
KTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtl
eXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxvYXRLZXlUaW1lcykKK3sKKyAgICBWZWN0b3I8Q0NGbG9h
dEtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAgLy8gQSBzdGVwIGZ1bmN0aW9uLgorICAgIGtleWZy
YW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDQpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5k
KENDRmxvYXRLZXlmcmFtZSgxLCA0KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5
ZnJhbWUoMSwgNikpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDIsIDYp
KTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKworICAgIEVY
UEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNCwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUt
PmdldFZhbHVlKDAuNSkpOworCisgICAgLy8gVGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IDEu
IEFueSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQuCisgICAgZmxvYXQgdmFsdWUgPSBj
dXJ2ZS0+Z2V0VmFsdWUoMSk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUgPj0gNCAmJiB2YWx1ZSA8
PSA2KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7Cit9CisKKworLy8gVGVzdHMgdGhhdCBhIHRy
YW5zZm9ybSBhbmltYXRpb24gd2l0aCBvbmUga2V5ZnJhbWUgd29ya3MgYXMgZXhwZWN0ZWQuCitU
RVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBPbmVUcmFuc2Zvcm1LZXlmcmFtZSkK
K3sKKyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
cHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVk
KSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwor
ICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zKSk7
CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKEND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAg
ICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAorICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwg
Y3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIs
IGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIs
IGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
MiwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
MiwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkpOworfQorCisvLyBUZXN0cyB0aGF0IGEg
dHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQu
CitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUd29UcmFuc2Zvcm1LZXlmcmFt
ZSkKK3sKKyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwg
Rml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
KSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25z
Mi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1gpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUo
MCwgb3BlcmF0aW9uczEpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJh
bWUoMSwgb3BlcmF0aW9uczIpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKGtleWZyYW1lcykpOworICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCisgICAg
ZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOworICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOworICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMywgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7Cit9
CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdGhyZWUga2V5ZnJh
bWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVz
dCwgVGhyZWVUcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlm
cmFtZT4ga2V5ZnJhbWVzOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Cisg
ICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhl
ZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlvbnMzLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDgsIEZpeGVkKSwgTGVu
Z3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIGtl
eWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAg
IGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOwor
ICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zMykp
OworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7Cisg
ICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIs
IGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgz
LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVY
KDQsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVY
KDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoOCwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoOCwgY3VydmUtPmdldFZhbHVlKDMsIGxheWVyU2l6ZSkpOworfQorCisvLyBUZXN0cyB0aGF0
IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZlbiB0aW1l
IHdvcmtzIHNhbmVseS4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVh
dGVkVHJhbnNmb3JtS2V5VGltZXMpCit7CisgICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+
IGtleWZyYW1lczsKKyAgICAvLyBBIHN0ZXAgZnVuY3Rpb24uCisgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMu
b3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShM
ZW5ndGgoNiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zNDsKKyAgICBv
cGVyYXRpb25zNC5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKExlbmd0aCg2LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3Jt
S2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNm
b3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJh
bnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczMpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKEND
VHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczQpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFt
ZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworCisgICAgSW50U2l6ZSBsYXllclNpemU7
IC8vIGlnbm9yZWQKKworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0x
LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgw
LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgw
LjUsIGxheWVyU2l6ZSkpOworCisgICAgLy8gVGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IDEu
IEFueSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQuCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFR5cGU7CisgICAgdmFsdWUu
ZGVjb21wb3NlKGRlY29tcG9zZWRUeXBlKTsKKyAgICBFWFBFQ1RfVFJVRShkZWNvbXBvc2VkVHlw
ZS50cmFuc2xhdGVYID49IDQgJiYgZGVjb21wb3NlZFR5cGUudHJhbnNsYXRlWCA8PSA2KTsKKwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5ZXJTaXplKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5ZXJTaXplKSk7
Cit9CisKKy8vIFRlc3RzIHRoYXQgaW52YWxpZCBsaXN0cyBvZiBrZXlmcmFtZXMgcmVzdWx0IGlu
IG5vdGhpbmcgYmVpbmcgcmV0dXJuZWQgZnJvbSA6OmNyZWF0ZS4KK1RFU1QoQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZVRlc3QsIEludmFsaWRLZXlmcmFtZXMpCit7CisgICAgLy8gSXQgaXMgaW52
YWxpZCB0byBwYXNzIGFuIGVtcHR5IHZlY3RvciBvZiBrZXlmcmFtZXMgdG8gY3JlYXRlLgorICAg
IFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiB0cmFuc2Zvcm1LZXlmcmFtZXM7CisgICAgT3du
UHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IHRyYW5zZm9ybUN1cnZlID0g
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKHRyYW5zZm9ybUtleWZy
YW1lcyk7CisgICAgRVhQRUNUX0ZBTFNFKHRyYW5zZm9ybUN1cnZlLmdldCgpKTsKKworICAgIFZl
Y3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGZsb2F0S2V5ZnJhbWVzOworICAgIE93blB0cjxDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGZsb2F0Q3VydmUgPSBDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU6OmNyZWF0ZShmbG9hdEtleWZyYW1lcyk7CisgICAgRVhQRUNUX0ZBTFNFKGZs
b2F0Q3VydmUuZ2V0KCkpOworCisgICAgLy8gSXQgaXMgaW52YWxpZCB0byBwYXNzIGEgdmVjdG9y
IG9mIHVuc29ydGVkIGtleWZyYW1lcyB0byBjcmVhdGU7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgw
LCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5h
cHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVk
KSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwor
ICAgIHRyYW5zZm9ybUtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVy
YXRpb25zMSkpOworICAgIHRyYW5zZm9ybUtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlm
cmFtZSgwLCBvcGVyYXRpb25zMikpOworICAgIHRyYW5zZm9ybUN1cnZlID0gQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKHRyYW5zZm9ybUtleWZyYW1lcyk7CisgICAg
RVhQRUNUX0ZBTFNFKHRyYW5zZm9ybUN1cnZlLmdldCgpKTsKKworICAgIGZsb2F0S2V5ZnJhbWVz
LmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgMikpOworICAgIGZsb2F0S2V5ZnJhbWVzLmFwcGVu
ZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgNCkpOworICAgIGZsb2F0Q3VydmUgPSBDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShmbG9hdEtleWZyYW1lcyk7CisgICAgRVhQRUNUX0ZB
TFNFKGZsb2F0Q3VydmUuZ2V0KCkpOworfQorCisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcAppbmRleCAyZGM5NmQyYWVlNzZjMmVkMTJiMGJhMjBl
ZjMwMTRiOTY3NDgwOTRlLi5jMzgwZjY2NTM5NzdiYmRhYzNmMTM5MjQzZDNhOGE3N2Q4NGMwNDY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKQEAgLTU3LDcgKzU3LDcg
QEAgcHJpdmF0ZToKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIGludCBpZCwgQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQogewotICAgIHJldHVybiBD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLCBpZCwgcHJvcGVydHkpOworICAgIHJldHVy
biBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLCAwLCBpZCwgcHJvcGVydHkpOwogfQog
CiAvLyBUZXN0cyB0aGF0IHRyYW5zaXRpb25pbmcgb3BhY2l0eSBmcm9tIDAgdG8gMSB3b3JrcyBh
cyBleHBlY3RlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGFkYWVlNzFiMjUxNzY5MTlhNzUwMDljOWUxY2JhY2E0
ZGI4NmNkZTEuLmQxMTZmODFhZWMzOTAyMzIxODQ4ZTE2MDMzM2E5MzdmNDA5MDMyMDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcApAQCAtNjcsNiArNjcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Ny
b2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYsIGZsb2F0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7
IH0KIH07CiAKIC8vIEFkYXB0cyBDQ0xheWVyVHJlZUhvc3RJbXBsIGZvciB0ZXN0LiBSdW5zIHJl
YWwgY29kZSwgdGhlbiBpbnZva2VzIHRlc3QgaG9va3MuCkBAIC0xNDMsMjUgKzE0NCw2IEBAIHBy
aXZhdGU6CiAgICAgVGVzdEhvb2tzKiBtX3Rlc3RIb29rczsKIH07CiAKLS8vIEFkYXB0cyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlciBmb3IgdGVzdC4gQWRkcyBhIGR1bW15IGltcGxlbWVudGF0
aW9uIG9mIGFkZEFuaW1hdGlvbiB0aGF0IGluc2VydHMgYSBmbG9hdCBhbmltYXRpb24uCi0vLyBG
SVhNRTogb25jZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uIGlzIGlt
cGxlbWVudGVkLCB0aGF0IGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZGlyZWN0bHkgYW5kIHRo
aXMKLS8vIGNsYXNzIGNhbiBiZSByZW1vdmVkLgotY2xhc3MgTW9ja0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlciA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRl
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBhZGRBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBj
b25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
T2Zmc2V0KQotICAgIHsKLSAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gMDsKLSAgICAgICAgYWN0
aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKGR1cmF0aW9uLCAxLCAwKSksIDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KIGNs
YXNzIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5n
IDogcHVibGljIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RX
aXRoVGV4dHVyZVRyYWNraW5nPiBjcmVhdGUoQXR0cmlidXRlcyBhdHRycykKQEAgLTM1Niw3ICsz
MzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3Rh
dGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOwogICAgICAgQVNTRVJUKHRlc3Qp
OwogICAgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCAmJiB0ZXN0LT5tX2xheWVyVHJlZUhv
c3QtPnJvb3RMYXllcigpKQotICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExh
eWVyKCktPmFkZEFuaW1hdGlvbihLZXlmcmFtZVZhbHVlTGlzdChBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eSksIEludFNpemUoKSwgMCwgIiIsIDAuMCk7CisgICAgICAgICAgYWRkT3BhY2l0eVRyYW5z
aXRpb24oKnRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCksIDAsIDAsIDEpOwogICAg
IH0KIAogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0KHZv
aWQqIHNlbGYpCkBAIC01MDksNyArNDkxLDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpk
b0JlZ2luVGVzdCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNy
ZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBtX3NldHRpbmdzKTsKICAgICBB
U1NFUlRfVFJVRShtX2xheWVyVHJlZUhvc3QpOwogICAgIHJvb3RMYXllci0+c2V0TGF5ZXJUcmVl
SG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwotICAgIHJvb3RMYXllci0+c2V0QW5pbWF0aW9u
Q29udHJvbGxlcihNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CiAKICAg
ICBtX2JlZ2lubmluZyA9IHRydWU7CiAgICAgYmVnaW5UZXN0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCmluZGV4IDk3
YjIxNWE1M2VmNzBlZTkwZGM3MzA1YTcyYzVlMmJkYzVkYThkY2UuLmQ1YzhlZDMzOTg2ZTVhZGJj
ZDgyYTdkNWFlZjg4NjYzZjU1MWU5ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC00MCwxOCArNDAsNiBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIHVz
aW5nIHRlc3Rpbmc6OlRlc3Q7CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVHJlZVN5
bmNocm9uaXplckFuaW1hdGlvblRlc3QgOiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBnZXRBbmltYXRpb25Db250cm9sbGVyKExh
eWVyQ2hyb21pdW0qIGxheWVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxheWVyLT5hbmltYXRp
b25Db250cm9sbGVyKCk7Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCiBu
YW1lc3BhY2UgewogCiBjbGFzcyBNb2NrQ0NMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwg
ewpAQCAtMzI1LDcgKzMxMyw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNNYXNr
UmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQogICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2Fs
KGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiB9CiAKLVRFU1Rf
RihUcmVlU3luY2hyb25pemVyQW5pbWF0aW9uVGVzdCwgc3luY05ld0FuaW1hdGlvbikKK1RFU1Qo
VHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNOZXdBbmltYXRpb24pCiB7CiAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJl
ZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTMzNCw2MCArMzIyLDYwIEBAIFRF
U1RfRihUcmVlU3luY2hyb25pemVyQW5pbWF0aW9uVGVzdCwgc3luY05ld0FuaW1hdGlvbikKICAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CiAKICAgICAvLyBBZGQg
YW5pbWF0aW9uIHRvIG1haW4gdGhyZWFkIGNvbnRyb2xsZXIuCi0gICAgZ2V0QW5pbWF0aW9uQ29u
dHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25D
dXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBhZGRPcGFjaXR5
VHJhbnNpdGlvbigqbGF5ZXJUcmVlUm9vdCwgMSwgMCwgMSk7CiAgICAgY2NMYXllclRyZWVSb290
ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgp
LCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVS
b290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6
V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25D
b250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSktPnJ1blN0YXRlKCkpOwogfQogCi1URVNUX0YoVHJlZVN5bmNocm9uaXplckFuaW1hdGlv
blRlc3QsIHN5bmNBbmltYXRpb25Qcm9wZXJ0aWVzKQorVEVTVChUcmVlU3luY2hyb25pemVyVGVz
dCwgc3luY0FuaW1hdGlvblByb3BlcnRpZXMpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKIAogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRy
ZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290
LmdldCgpLCAwKTsKLSAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0
KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uKCpsYXllclRyZWVSb290
LCAxLCAwLCAxKTsKICAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7
CiAKICAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAg
ICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmls
aXR5LCBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5p
bWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CiAKICAg
ICAvLyBQdXNoIGFuIGFuaW1hdGlvbiBwcm9wZXJ0eSBjaGFuZ2UgdG8gdGhlIGltcGwgdGhyZWFk
IChzaG91bGQgbm90IGNhdXNlIGFuIGFuaW1hdGlvbiB0byBiZSBhZGRlZCkuCi0gICAgZ2V0QW5p
bWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygp
WzBdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCAwKTsKKyAgICBsYXll
clRyZWVSb290LT5wYXVzZUFuaW1hdGlvbigwLCAwKTsKICAgICBjY0xheWVyVHJlZVJvb3QgPSBU
cmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNj
TGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3Qt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVz
ZWQsIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmlt
YXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKIH0KIAot
VEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJBbmltYXRpb25UZXN0LCBzeW5jQWJvcnRlZEFuaW1hdGlv
bikKK1RFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNBYm9ydGVkQW5pbWF0aW9uKQogewog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAKICAgICAvLyBT
eW5jIHdpdGggbm8gYW5pbWF0aW9ucy4KICAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgMCk7Ci0gICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290Lmdl
dCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKKyAgICBhZGRPcGFjaXR5VHJhbnNpdGlvbigqbGF5ZXJUcmVlUm9v
dCwgMSwgMCwgMSk7CiAgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkp
OwogCiAgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVy
KCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
CiAgICAgLy8gQWJvcnQgYW4gYW5pbWF0aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkLgotICAgIGdl
dEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlv
bnMoKS5jbGVhcigpOworICAgIGxheWVyVHJlZVJvb3QtPnJlbW92ZUFuaW1hdGlvbigwKTsKICAg
ICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCks
IGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfRkFMU0UoY2NMYXllclRyZWVS
b290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogfQogCi1URVNUX0YoVHJlZVN5bmNocm9uaXplckFuaW1h
dGlvblRlc3QsIHN5bmNDb21wbGV0ZWRBbmltYXRpb24pCitURVNUKFRyZWVTeW5jaHJvbml6ZXJU
ZXN0LCBzeW5jQ29tcGxldGVkQW5pbWF0aW9uKQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAKICAgICAvLyBTeW5jIHdpdGggbm8gYW5pbWF0aW9ucy4K
ICAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7Ci0gICAgZ2V0QW5p
bWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygp
LmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRB
bmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBh
ZGRPcGFjaXR5VHJhbnNpdGlvbigqbGF5ZXJUcmVlUm9vdCwgMSwgMCwgMSk7CiAgICAgVHJlZVN5
bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVy
VHJlZVJvb3QuZ2V0KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmlt
YXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwpAQCAtMzk5LDExICszODcsMTEgQEAgVEVTVF9GKFRyZWVTeW5jaHJvbml6
ZXJBbmltYXRpb25UZXN0LCBzeW5jQ29tcGxldGVkQW5pbWF0aW9uKQogICAgIGNjTGF5ZXJUcmVl
Um9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRlKDIsICpldmVudHMpOwogCiAgICAg
RVhQRUNUX0ZBTFNFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRB
Y3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBFWFBF
Q1RfRVEoc2l6ZV90KDEpLCBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0
KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShsYXllclRy
ZWVSb290LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAKICAgICBUcmVlU3luY2hyb25pemVyOjpz
eW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQo
KSk7CiAKLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBnZXRBbmltYXRpb25Db250cm9sbGVyKGxh
eWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UobGF5ZXJUcmVlUm9vdC0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127689</attachid>
            <date>2012-02-17 20:28:24 -0800</date>
            <delta_ts>2012-02-23 10:29:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77229-20120217232823.patch</filename>
            <type>text/plain</type>
            <size>67453</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODViZjAxYmRj
YTgyMWI4NWMyYjdjOWU1MmYyNDZkODE1OWZhMjNmOS4uN2UwZjhkMTJmMzgyOGZkMmZhNWMxYTdi
MTVhNzM1Njc5ZjQ4OWE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzI1MCw2ICszMjUwLDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZiNzMzZmZj
MzI5MjlhMWUyOTdmN2QzNjdkZmJiM2Y3NDJlZjZiODUuLmZhOTU0Mzg3M2JlODQwOGE3NWRiMWVi
OGJkZmJkZDk3MTY5MDcwNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cApAQCAtNjEsNiArNjEsMTAgQEAKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNl
IHsKK3N0YXRpYyBzaXplX3QgZ3JvdXBJZCA9IDA7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhp
Y3NMYXllckNsaWVudCogY2xpZW50KQpAQCAtMzg0LDE3ICszODgsMTcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcikKIAogYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25z
dCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgdGltZU9mZnNldCkKIHsKLSAgICByZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVl
cywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBt
YXBBbmltYXRpb25OYW1lVG9JZChhbmltYXRpb25OYW1lKSwgZ3JvdXBJZCwgdGltZU9mZnNldCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewotICAgIG1fbGF5ZXIt
PnBhdXNlQW5pbWF0aW9uKGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAgIG1fbGF5ZXIt
PnBhdXNlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCB0aW1l
T2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiB7Ci0gICAgbV9sYXllci0+cmVtb3ZlQW5p
bWF0aW9uKGFuaW1hdGlvbk5hbWUpOworICAgIG1fbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihtYXBB
bmltYXRpb25OYW1lVG9JZChhbmltYXRpb25OYW1lKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKQEAgLTcxNCw2ICs3MTgs
MTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWMKICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cyhjb250ZXh0LCBjbGlwKTsKIH0KIAorc2l6ZV90IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworICAg
IC8vIEZJWE1FOiBuZWVkIHRvIG1haW50YWluIGEgbmFtZSB0byBpZCBtYXBwaW5nIGluIHRoaXMg
Y2xhc3MuCisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmgKaW5kZXggNGRiNWIzOTZiMDM0NzAwMTJjNGZlMDVkZTAzZjZjY2Q0ODdlNzg0
Mi4uZTA3NGI3ZWE1MGZlNzNiOTI4YTkwNjBmYzkwODc1ZWVjODQ0OWM0YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTEzOCw2ICsxMzgsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgc2V0dXBDb250ZW50c0xheWVyKExheWVyQ2hyb21pdW0qKTsKICAgICBmbG9hdCBjb250
ZW50c1NjYWxlKCkgY29uc3Q7CiAKKyAgICBzaXplX3QgbWFwQW5pbWF0aW9uTmFtZVRvSWQoY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKwogICAgIFN0cmluZyBtX25hbWVCYXNlOwogCiAg
ICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2xheWVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAppbmRleCBiNjJhMzNlMDg2NzU3Y2U5N2Q2ZjhhMTAzMzU0NTMxOTdjOTMzYjc2Li5iOTY3
MWFiZWY1ZGEyMzU5ZTcyOTQwNzAyMDFkZjQ1MTVlYTBlYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcApAQCAtOTQsMjMgKzk0LDIzIEBAIExheWVyQ2hyb21pdW06On5MYXllckNocm9taXVtKCkK
ICAgICByZW1vdmVBbGxDaGlsZHJlbigpOwogfQogCi1ib29sIExheWVyQ2hyb21pdW06OmFkZEFu
aW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBi
b3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0
aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNp
emUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVf
dCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBib29sIGFkZGVkQW5pbWF0aW9u
ID0gbV9hbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBh
bmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAgIGJvb2wgYWRkZWRBbmlt
YXRpb24gPSBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNp
emUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQpOwogICAgIGlm
IChhZGRlZEFuaW1hdGlvbikKICAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKICAgICByZXR1cm4g
YWRkZWRBbmltYXRpb247CiB9CiAKLXZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24o
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oc2l6ZV90IGFuaW1hdGlvbklkLCBkb3VibGUgdGlt
ZU9mZnNldCkKIHsKLSAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uKGFu
aW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cGF1
c2VBbmltYXRpb24oYW5pbWF0aW9uSWQsIHRpbWVPZmZzZXQpOwogICAgIHNldE5lZWRzQ29tbWl0
KCk7CiB9CiAKLXZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKHNp
emVfdCBhbmltYXRpb25JZCkKIHsKLSAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFu
aW1hdGlvbihhbmltYXRpb25OYW1lKTsKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92
ZUFuaW1hdGlvbihhbmltYXRpb25JZCk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MTI2LDYgKzEyNiwxMSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aGFzQWN0aXZl
QW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRJc05vbkNv
bXBvc2l0ZWRDb250ZW50KGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCkKIHsKICAgICBtX2lz
Tm9uQ29tcG9zaXRlZENvbnRlbnQgPSBpc05vbkNvbXBvc2l0ZWRDb250ZW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IGM4ZjhiZDRkY2UyODg0NjhiNTBkMTA3MTk5ZjA1YmQyYzdjYjFmYzEuLjMz
MmQ2N2VhNzdiNjA2NWM5MWY1NTJhMzE5NzFkODk1ZGU4OGZjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MjE1LDE5ICsyMTQsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWx3YXlzUmVzZXJ2ZVRleHR1
cmVzKGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKSB7IG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVz
ID0gYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAgICAgYm9vbCBhbHdheXNSZXNlcnZlVGV4dHVy
ZXMoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlczsgfQogCi0gICAgYm9v
bCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBi
b3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSB0aW1lT2Zmc2V0KTsKLSAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOwotICAgIHZvaWQgcmVtb3ZlQW5pbWF0
aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CisgICAgYm9vbCBhZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBB
bmltYXRpb24qLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGlt
ZU9mZnNldCk7CisgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihzaXplX3QgYW5pbWF0aW9uSWQsIGRv
dWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbihzaXplX3QgYW5pbWF0
aW9uSWQpOwogCiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSk7CiAgICAg
dm9pZCByZXN1bWVBbmltYXRpb25zKCk7CiAKKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbigp
IGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOwotICAg
IGZyaWVuZCBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0OwogICAgIGZyaWVuZCBjbGFzcyBMYXll
clRpbGVyQ2hyb21pdW07CiAgICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7Ci0gICAg
ZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXJBbmltYXRpb25UZXN0OwogCiAgICAgTGF5ZXJD
aHJvbWl1bSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKaW5kZXggMDAw
OWNjODg5ODNhMDY1OWIzOGE2OTNhOTY5Y2E0YzA3NzY2NTdhMS4uNmE0OGI1ZDg0OThhNDdkYTQ1
NWNjNmMxYzQ0YTUyY2ZhZWRiNzA2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9u
LmNwcApAQCAtMzIsOCArMzIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDQWN0aXZl
QW5pbWF0aW9uOjpDQ0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+
IGN1cnZlLCBHcm91cElEIGdyb3VwLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK0ND
QWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9u
Q3VydmU+IGN1cnZlLCBzaXplX3QgaWQsIHNpemVfdCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFy
Z2V0UHJvcGVydHkpCiAgICAgOiBtX2FuaW1hdGlvbkN1cnZlKGN1cnZlKQorICAgICwgbV9pZChp
ZCkKICAgICAsIG1fZ3JvdXAoZ3JvdXApCiAgICAgLCBtX3RhcmdldFByb3BlcnR5KHRhcmdldFBy
b3BlcnR5KQogICAgICwgbV9ydW5TdGF0ZShXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KQpA
QCAtMTE0LDcgKzExNSw3IEBAIGRvdWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1
cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gQ0NBY3RpdmVBbmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCgpIGNvbnN0CiB7
Ci0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVybihhZG9wdFB0cihuZXcgQ0NB
Y3RpdmVBbmltYXRpb24obV9hbmltYXRpb25DdXJ2ZS0+Y2xvbmUoKSwgbV9ncm91cCwgbV90YXJn
ZXRQcm9wZXJ0eSkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKGFk
b3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihtX2FuaW1hdGlvbkN1cnZlLT5jbG9uZSgpLCBt
X2lkLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOwogICAgIHRvUmV0dXJuLT5tX3J1blN0
YXRlID0gbV9ydW5TdGF0ZTsKICAgICB0b1JldHVybi0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRp
b25zOwogICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVB
bmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggNjk0NDhlNTNiMjk1ZWViNDhkODEwMzJhMzQ5ODNi
NmYwN2U4NDAzZS4uZjA0OGFhNmNlOGZiYmYxNTE5ZjM0MjNhOTk0NjA0MzdkOGI1ZjU5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
Y3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQwLDEzICszOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IENDQWN0aXZlQW5pbWF0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0FjdGl2ZUFu
aW1hdGlvbik7CiBwdWJsaWM6Ci0gICAgLy8gQW5pbWF0aW9ucyB0aGF0IG11c3QgYmUgcnVuIHRv
Z2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBoYXZlIHRoZSBzYW1lIEdyb3VwSUQKLSAg
ICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQgdGhlIHNh
bWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucwotICAgIC8vIG1heSBhbmltYXRlIGFueSBv
ZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBhbGwgYW5pbWF0aW9ucyBpbiB0
aGUKLSAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZy4gTm90ZTogYW4gYWN0aXZl
IGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKLSAgICAvLyBwcm9wZXJ0eSB1bmlxdWVs
eSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KLSAgICB0eXBlZGVmIHNpemVfdCBHcm91cElEOwot
CiAgICAgLy8gQW5pbWF0aW9ucyBiZWdpbiBpbiBvbmUgb2YgdGhlICd3YWl0aW5nJyBzdGF0ZXMu
IEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGhlIG5leHQgdGljawogICAgIC8vIHdpbGwgc3RhcnQg
dGhlIG5leHQgdGltZSB0aGUgY29udHJvbGxlciBhbmltYXRlcy4gQW5pbWF0aW9ucyB3YWl0aW5n
IGZvciB0YXJnZXQKICAgICAvLyBhdmFpbGliaWxpdHkgd2lsbCBydW4gYXMgc29vbiBhcyB0aGVp
ciB0YXJnZXQgcHJvcGVydHkgaXMgZnJlZSAoYW5kIGFsbCB0aGUgYW5pbWF0aW9ucwpAQCAtNzIs
MjEgKzY0LDIyIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RydWN0IEFuaW1hdGlvblNpZ25h
dHVyZSB7Ci0gICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZShHcm91cElEIGdyb3VwSUQsIFRhcmdl
dFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQotICAgICAgICAgICAgOiBncm91cElEKGdyb3VwSUQp
CisgICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZShzaXplX3QgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVy
dHkgdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICA6IGdyb3VwSWQoZ3JvdXBJZCkKICAgICAg
ICAgICAgICwgdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpIHsgfQotICAgICAgICBHcm91
cElEIGdyb3VwSUQ7CisgICAgICAgIHNpemVfdCBncm91cElkOwogICAgICAgICBUYXJnZXRQcm9w
ZXJ0eSB0YXJnZXRQcm9wZXJ0eTsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IGNyZWF0ZShQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZl
LCBHcm91cElEIGdyb3VwLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKKyAgICBzdGF0
aWMgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NBbmlt
YXRpb25DdXJ2ZT4gY3VydmUsIHNpemVfdCBpZCwgc2l6ZV90IGdyb3VwLCBUYXJnZXRQcm9wZXJ0
eSB0YXJnZXRQcm9wZXJ0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NB
Y3RpdmVBbmltYXRpb24oY3VydmUsIGdyb3VwLCB0YXJnZXRQcm9wZXJ0eSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZlLCBpZCwgZ3JvdXAsIHRh
cmdldFByb3BlcnR5KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRpb24o
KTsKIAotICAgIEdyb3VwSUQgZ3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwOyB9CisgICAg
c2l6ZV90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIHNpemVfdCBncm91cCgpIGNv
bnN0IHsgcmV0dXJuIG1fZ3JvdXA7IH0KICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KIAogICAgIFJ1blN0YXRlIHJ1
blN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9ydW5TdGF0ZTsgfQpAQCAtMTIxLDEwICsxMTQsMTkg
QEAgcHVibGljOgogICAgIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0
aW9uKik7CiAKIHByaXZhdGU6Ci0gICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiwgR3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0aXZlQW5p
bWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4sIHNpemVfdCBpZCwgc2l6ZV90IGdy
b3VwSWQsIFRhcmdldFByb3BlcnR5KTsKIAogICAgIE93blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBt
X2FuaW1hdGlvbkN1cnZlOwotICAgIEdyb3VwSUQgbV9ncm91cDsKKyAgICAvLyBOb3RlIGlkJ3Mg
YXJlIG5vdCBuZWNlc3NhcmlseSB1bmlxdWUuCisgICAgc2l6ZV90IG1faWQ7CisKKyAgICAvLyBB
bmltYXRpb25zIHRoYXQgbXVzdCBiZSBydW4gdG9nZXRoZXIgYXJlIGNhbGxlZCAnZ3JvdXBlZCcg
YW5kIGhhdmUgdGhlIHNhbWUgR3JvdXBJRAorICAgIC8vIEdyb3VwZWQgYW5pbWF0aW9ucyBhcmUg
Z3VhcmFudGVlZCB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lIGFuZCBubyBvdGhlciBhbmltYXRp
b25zCisgICAgLy8gbWF5IGFuaW1hdGUgYW55IG9mIHRoZSBncm91cCdzIHRhcmdldCBwcm9wZXJ0
aWVzIHVudGlsIGFsbCBhbmltYXRpb25zIGluIHRoZQorICAgIC8vIGdyb3VwIGhhdmUgZmluaXNo
ZWQgYW5pbWF0aW5nLiBOb3RlOiBhbiBhY3RpdmUgYW5pbWF0aW9uJ3MgZ3JvdXAgaWQgYW5kIHRh
cmdldAorICAgIC8vIHByb3BlcnR5IHVuaXF1ZWx5IGlkZW50aWZ5IHRoYXQgYW5pbWF0aW9uLgor
ICAgIHNpemVfdCBtX2dyb3VwOworCiAgICAgVGFyZ2V0UHJvcGVydHkgbV90YXJnZXRQcm9wZXJ0
eTsKICAgICBSdW5TdGF0ZSBtX3J1blN0YXRlOwogICAgIGludCBtX2l0ZXJhdGlvbnM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk4MTRkNGRjN2I2NjYwMDNiMzk5OTE2ZmQ0NDhhNWFjZDk0MzM0ZjAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlLmNwcApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZS5oIgorCisjaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNs
dWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiU2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKwor
dGVtcGxhdGUgPGNsYXNzIEtFWUZSQU1FPgorYm9vbCBrZXlmcmFtZXNBcmVTb3J0ZWQoY29uc3Qg
VmVjdG9yPEtFWUZSQU1FPiYga2V5ZnJhbWVzKQoreworICAgIGlmICgha2V5ZnJhbWVzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgaWYgKGtleWZyYW1lc1tpXS50aW1l
ID4ga2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK1Bhc3NPd25QdHI8Q0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmU6OmNyZWF0ZShjb25zdCBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiYga2V5ZnJhbWVzKQorewor
ICAgIGlmICgha2V5ZnJhbWVzLnNpemUoKSB8fCAha2V5ZnJhbWVzQXJlU29ydGVkKGtleWZyYW1l
cykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoa2V5ZnJhbWVzKSk7Cit9CisKK0NDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKGNv
bnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+JiBrZXlmcmFtZXMpCisgICAgOiBtX2tleWZyYW1l
cyhrZXlmcmFtZXMpCit7Cit9CisKK0NDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6fkND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgfQorCitkb3VibGUgQ0NLZXlmcmFtZWRG
bG9hdEFuaW1hdGlvbkN1cnZlOjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2V5
ZnJhbWVzLmxhc3QoKS50aW1lIC0gbV9rZXlmcmFtZXMuZmlyc3QoKS50aW1lOworfQorCitQYXNz
T3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6
Y2xvbmUoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlKCp0aGlzKSk7Cit9CisKK2Zsb2F0IENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6Z2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0Cit7CisgICAgaWYgKHQgPD0gbV9r
ZXlmcmFtZXMuZmlyc3QoKS50aW1lKQorICAgICAgICByZXR1cm4gbV9rZXlmcmFtZXMuZmlyc3Qo
KS52YWx1ZTsKKworICAgIGlmICh0ID49IG1fa2V5ZnJhbWVzLmxhc3QoKS50aW1lKQorICAgICAg
ICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLnZhbHVlOworCisgICAgc2l6ZV90IGkgPSAwOwor
ICAgIGZvciAoOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGlm
ICh0IDwgbV9rZXlmcmFtZXNbaSsxXS50aW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgZmxvYXQgcHJvZ3Jlc3MgPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHQgLSBtX2tleWZyYW1l
c1tpXS50aW1lKSAvIChtX2tleWZyYW1lc1tpKzFdLnRpbWUgLSBtX2tleWZyYW1lc1tpXS50aW1l
KSk7CisgICAgLy8gRklYTUU6IGFwcGx5IHRpbWluZyBmdW5jdGlvbiBoZXJlLgorICAgIHJldHVy
biBtX2tleWZyYW1lc1tpXS52YWx1ZSArIChtX2tleWZyYW1lc1tpKzFdLnZhbHVlIC0gbV9rZXlm
cmFtZXNbaV0udmFsdWUpICogcHJvZ3Jlc3M7Cit9CisKK1Bhc3NPd25QdHI8Q0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiYga2V5ZnJhbWVzKQor
eworICAgIGlmICgha2V5ZnJhbWVzLnNpemUoKSB8fCAha2V5ZnJhbWVzQXJlU29ydGVkKGtleWZy
YW1lcykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKGtleWZyYW1lcykpOworfQorCitD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlKGNvbnN0IFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiYga2V5ZnJhbWVz
KQorICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQoreworfQorCitDQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlOjp+Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgp
IHsgfQorCitkb3VibGUgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6ZHVyYXRp
b24oKSBjb25zdAoreworICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0KCkudGltZSAtIG1fa2V5
ZnJhbWVzLmZpcnN0KCkudGltZTsKK30KKworUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjbG9uZSgpIGNvbnN0Cit7CisgICAg
VmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICAvLyBXZSBuZWVkIHRv
IGRvIGEgZGVlcCBjb3B5IG9mIGFsbCBvZiB0aGUga2V5ZnJhbWVzIHNpbmNlIHRoZXkgY29udGFp
biByZWYKKyAgICAvLyBwb2ludGVycyB0byBUcmFuc2Zvcm1PcGVyYXRpb24gb2JqZWN0cy4KKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIENDVHJhbnNmb3JtS2V5ZnJhbWUga2V5ZnJhbWUobV9rZXlmcmFtZXNbaV0udGltZSk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9rZXlmcmFtZXNbaV0udmFsdWUuc2l6ZSgp
OyArK2opIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBv
cGVyYXRpb25UeXBlID0gbV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLT5nZXRP
cGVyYXRpb25UeXBlKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgorICAgICAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6CisgICAgICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEVfWjoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpTQ0FMRV8zRDoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FM
RTogeworICAgICAgICAgICAgICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0g
PSBzdGF0aWNfY2FzdDxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZh
bHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICAgICAga2V5ZnJhbWUudmFs
dWUub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRy
YW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIG9wZXJhdGlvblR5
cGUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKKyAgICAgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKKyAgICAgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfM0Q6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFOiB7CisgICAgICAgICAgICAgICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24q
PihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAg
ICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFu
c2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9Y
OgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgorICAgICAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDoKKyAgICAgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6IHsKKyAgICAgICAgICAgICAgICBSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
CisgICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9ucygpLmFwcGVuZChSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55
KCksIHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0tPmFuZ2xlKCksIG9wZXJhdGlvblR5cGUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0tFV19ZOgorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNL
RVc6IHsKKyAgICAgICAgICAgICAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0g
PSBzdGF0aWNfY2FzdDxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFs
dWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1
ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFu
c2Zvcm0tPmFuZ2xlWCgpLCB0cmFuc2Zvcm0tPmFuZ2xlWSgpLCBvcGVyYXRpb25UeXBlKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOiB7CisgICAgICAgICAgICAgICAgTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAg
ICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgp
OworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobS5hKCksIG0uYigpLCBtLmMoKSwgbS5kKCks
IG0uZSgpLCBtLmYoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDogeworICAgICAg
ICAgICAgICAgIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9w
ZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUub3Bl
cmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5z
Zm9ybS0+bWF0cml4KCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRTogeworICAg
ICAgICAgICAgICAgIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBz
dGF0aWNfY2FzdDxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ld
LnZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICAgICAga2V5ZnJhbWUu
dmFsdWUub3BlcmF0aW9ucygpLmFwcGVuZChQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklE
RU5USVRZOiB7CisgICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9ucygpLmFw
cGVuZChJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246Ok5PTkU6CisgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZy4KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAgICAgIH0gLy8gZm9yIGVh
Y2ggb3BlcmF0aW9uCisgICAgICAgIGtleWZyYW1lcy5hcHBlbmQoa2V5ZnJhbWUpOworICAgIH0K
KyAgICByZXR1cm4gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtl
eWZyYW1lcyk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBsYXllclNp
emUpIGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtTWF0cml4Owor
CisgICAgaWYgKHQgPD0gbV9rZXlmcmFtZXMuZmlyc3QoKS50aW1lKSB7CisgICAgICAgIG1fa2V5
ZnJhbWVzLmZpcnN0KCkudmFsdWUuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOwor
ICAgICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OworICAgIH0KKworICAgIGlmICh0ID49IG1f
a2V5ZnJhbWVzLmxhc3QoKS50aW1lKSB7CisgICAgICAgIG1fa2V5ZnJhbWVzLmxhc3QoKS52YWx1
ZS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIHJldHVybiB0cmFu
c2Zvcm1NYXRyaXg7CisgICAgfQorCisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoOyBpIDwg
bV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGlmICh0IDwgbV9rZXlmcmFt
ZXNbaSsxXS50aW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gRklYTUU6
IGFwcGx5IHRpbWluZyBmdW5jdGlvbiBoZXJlLgorICAgIGRvdWJsZSBwcm9ncmVzcyA9ICh0IC0g
bV9rZXlmcmFtZXNbaV0udGltZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFt
ZXNbaV0udGltZSk7CisKKyAgICBpZiAobV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9uc01h
dGNoKG1fa2V5ZnJhbWVzW2krMV0udmFsdWUpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAw
OyBqIDwgbV9rZXlmcmFtZXNbaSsxXS52YWx1ZS5zaXplKCk7ICsraikKKyAgICAgICAgICAgIG1f
a2V5ZnJhbWVzW2krMV0udmFsdWUub3BlcmF0aW9ucygpW2pdLT5ibGVuZChtX2tleWZyYW1lc1tp
XS52YWx1ZS5hdChqKSwgcHJvZ3Jlc3MpLT5hcHBseSh0cmFuc2Zvcm1NYXRyaXgsIGxheWVyU2l6
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc291cmNlOwor
CisgICAgICAgIG1fa2V5ZnJhbWVzW2ldLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwgc291cmNlKTsK
KyAgICAgICAgbV9rZXlmcmFtZXNbaSsxXS52YWx1ZS5hcHBseShsYXllclNpemUsIHRyYW5zZm9y
bU1hdHJpeCk7CisKKyAgICAgICAgdHJhbnNmb3JtTWF0cml4LmJsZW5kKHNvdXJjZSwgcHJvZ3Jl
c3MpOworICAgIH0KKworICAgIHJldHVybiB0cmFuc2Zvcm1NYXRyaXg7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3Vy
dmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZWFlYWFhNzU1MDNlYTI4N2Y0NTM4YTk2ODE4ODkzMWQ5Njk3ZGNj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCkBAIC0wLDAgKzEsMTA2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVfaAorI2RlZmlu
ZSBDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKKworI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJh
dGlvbnMuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdHJ1Y3QgQ0NGbG9hdEtleWZyYW1lIHsKKyAgICBDQ0Zsb2F0S2V5ZnJhbWUo
ZG91YmxlIHRpbWUsIGZsb2F0IHZhbHVlKQorICAgICAgICA6IHRpbWUodGltZSkKKyAgICAgICAg
LCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIGRvdWJsZSB0aW1lOworICAgIGZsb2F0
IHZhbHVlOworfTsKKworc3RydWN0IENDVHJhbnNmb3JtS2V5ZnJhbWUgeworICAgIENDVHJhbnNm
b3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUpCisgICAgICAgIDogdGltZSh0aW1lKQorICAgIHsKKyAg
ICB9CisgICAgQ0NUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSwgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgdmFsdWUpCisgICAgICAgIDogdGltZSh0aW1lKQorICAgICAgICAsIHZhbHVl
KHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgZG91YmxlIHRpbWU7CisgICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyB2YWx1ZTsKK307CisKK2NsYXNzIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2
ZSA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIC8vIEl0IGlz
IHJlcXVpcmVkIHRoYXQgdGhlIGtleWZyYW1lcyBiZSBzb3J0ZWQgYnkgdGltZS4KKyAgICBzdGF0
aWMgUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGNyZWF0ZShjb25z
dCBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiYga2V5ZnJhbWVzKTsKKworICAgIHZpcnR1YWwgfkND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSgpOworCisgICAgLy8gQ0NBbmltYXRpb25DdXJ2
ZSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3Q7CisK
KyAgICAvLyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFs
IGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoY29uc3QgVmVjdG9yPENDRmxvYXRLZXlm
cmFtZT4mKTsKKworICAgIC8vIEFsd2F5cyBzb3J0ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyB0
aW1lLiBObyB0d28ga2V5ZnJhbWVzIGhhdmUgdGhlCisgICAgLy8gc2FtZSB0aW1lLgorICAgIFZl
Y3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IG1fa2V5ZnJhbWVzOworfTsKKworY2xhc3MgQ0NLZXlmcmFt
ZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlIHsKK3B1YmxpYzoKKyAgICAvLyBJdCBpcyByZXF1aXJlZCB0aGF0IHRoZSBrZXlmcmFtZXMg
YmUgc29ydGVkIGJ5IHRpbWUuCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3JlYXRlKGNvbnN0IFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZy
YW1lPiYga2V5ZnJhbWVzKTsKKworICAgIHZpcnR1YWwgfkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUoKTsKKworICAgIC8vIENDQW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24K
KyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc093
blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0OworCisgICAgLy8gQ0NUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRp
b25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHQsIGNvbnN0IEludFNpemUmKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKGNv
bnN0IFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiYpOworCisgICAgLy8gQWx3YXlzIHNvcnRl
ZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHRpbWUuIE5vIHR3byBrZXlmcmFtZXMgaGF2ZSB0aGUK
KyAgICAvLyBzYW1lIHRpbWUuCisgICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IG1fa2V5
ZnJhbWVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMzZiYTc0OGUwMTRkMTNkZWU4YWEzZjZmNWZjMzMwY2Q5
ZDIwZmFjZS4uMWM5MTYxNDNlNTRlOGUzYWU3OWI0ZDYxMWU4MTViN2I0ODQ2MmRjYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMjgs
MTEgKzI4LDU5IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiIC8vIGZvciBLZXlmcmFt
ZVZhbHVlTGlzdAogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
Y2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNl
IHsKKwordGVtcGxhdGUgPGNsYXNzIEtFWUZSQU1FLCBjbGFzcyBDVVJWRT4KK1Bhc3NPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgc2l6ZV90IGFu
aW1hdGlvbklkLCBzaXplX3QgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgLy8g
RklYTUU6IGFkZCBzdXBwb3J0IGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucy4KKyAgICBpZiAoYW5p
bWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEaXJlY3Rpb25TZXQoKSAmJiBhbmltYXRpb24tPmRpcmVj
dGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGVsYXkK
KyAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEZWxheVNldCgpICYmIGFuaW1hdGlv
bi0+ZGVsYXkoKSA+IDApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gRklYTUU6
IGFkZCBzdXBwb3J0IGZvciBmaWxscyBmb3J3YXJkcyBhbmQgZmlsbHMgYmFja3dhcmRzCisgICAg
aWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRmlsbE1vZGVTZXQoKSAmJiAoYW5pbWF0aW9u
LT5maWxsc0ZvcndhcmRzKCkgfHwgYW5pbWF0aW9uLT5maWxsc0JhY2t3YXJkcygpKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8S0VZRlJBTUU+IGtleWZyYW1lczsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgaSsrKSB7CisgICAg
ICAgIEZsb2F0QW5pbWF0aW9uVmFsdWUqIG9yaWdpbmFsVmFsdWUgPSAoRmxvYXRBbmltYXRpb25W
YWx1ZSopdmFsdWVMaXN0LmF0KGkpOworCisgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgdGltaW5nIGZ1bmN0aW9ucy4KKyAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1
bmN0aW9uKCkgJiYgb3JpZ2luYWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKS0+dHlwZSgpICE9IFRp
bWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5p
c0R1cmF0aW9uU2V0KCkpID8gYW5pbWF0aW9uLT5kdXJhdGlvbigpIDogMTsKKyAgICAgICAga2V5
ZnJhbWVzLmFwcGVuZChLRVlGUkFNRShvcmlnaW5hbFZhbHVlLT5rZXlUaW1lKCkgKiBkdXJhdGlv
biwgb3JpZ2luYWxWYWx1ZS0+dmFsdWUoKSkpOworICAgIH0KKworICAgIE93blB0cjxDVVJWRT4g
Y3VydmUgPSBDVVJWRTo6Y3JlYXRlKGtleWZyYW1lcyk7CisKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGFuaW0gPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2Uo
KSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KTsKKwor
ICAgIEFTU0VSVChhbmltLmdldCgpKTsKKworICAgIGlmIChhbmltLmdldCgpKSB7CisgICAgICAg
IGludCBpdGVyYXRpb25zID0gKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzSXRlcmF0aW9uQ291
bnRTZXQoKSkgPyBhbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgOiAxOworICAgICAgICBhbmlt
LT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlvbnMpOworICAgIH0KKworICAgIHJldHVybiBhbmltLnJl
bGVhc2UoKTsKK30KKworfSAvLyBuYW1lcGFjZQorCiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQogewogfQpAQCAtNDYsMjcgKzk0LDQ5IEBA
IFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpjcmVhdGUoKQogICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIpOwogfQogCi1ib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjph
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiAvKmJv
eFNpemUqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQpCiti
b29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5p
bWF0aW9uKiBhbmltYXRpb24sIHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRv
dWJsZSB0aW1lT2Zmc2V0KQogeworICAgIGlmICghYW5pbWF0aW9uIHx8IGFuaW1hdGlvbi0+aXNF
bXB0eU9yWmVyb0R1cmF0aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQ7CisgICAg
aWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zv
cm0pCisgICAgICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPENDVHJhbnNmb3JtS2V5
ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KHZhbHVlTGlzdCwgYW5p
bWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCk7CisgICAgZWxzZSBpZiAo
dmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCisgICAgICAg
IHRvQWRkID0gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPENDRmxvYXRLZXlmcmFtZSwgQ0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQs
IGdyb3VwSWQsIHRpbWVPZmZzZXQpOworCisgICAgaWYgKHRvQWRkLmdldCgpKSB7CisgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQodG9BZGQucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb24oc2l6ZV90IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCkK
IHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pZCgpID09IGFuaW1h
dGlvbklkKQorICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCB0aW1lT2Zmc2V0KTsKKyAgICB9CiB9CiAKLXZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVB
bmltYXRpb24oc2l6ZV90IGFuaW1hdGlvbklkKQogeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCkKKyAgICAgICAgICAgIG1fYWN0aXZlQW5p
bWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGkrKzsKKyAgICB9
CiB9CiAKKy8vIEFjY29yZGluZyB0byByZW5kZXIgbGF5ZXIgYmFja2luZywgdGhlc2UgYXJlIGZv
ciB0ZXN0aW5nIG9ubHkuCiB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5k
QW5pbWF0aW9ucyhkb3VibGUgdGltZSkKIHsKIH0KIAorLy8gTG9va2luZyBhdCBHcmFwaGljc0xh
eWVyQ0EsIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgYW5hbG9nIHRvIHN1c3BlbmRBbmltYXRpb25z
LCB3aGljaCBpcyBmb3IgdGVzdGluZy4KIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OnJlc3VtZUFuaW1hdGlvbnMoKQogewogfQpAQCAtODUsNyArMTU1LDcgQEAgdm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVh
ZChDQ0xheWVyQW4KIHsKICAgICAvLyBBbnkgYW5pbWF0aW9ucyBmaW5pc2hlZCBvbiB0aGUgaW1w
bCB0aHJlYWQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQncyBjb2xsZWN0aW9uLgog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmlt
YXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICByZW1vdmUoY29udHJvbGxlckltcGwtPm1fZmlu
aXNoZWRBbmltYXRpb25zW2ldLmdyb3VwSUQsIGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5p
bWF0aW9uc1tpXS50YXJnZXRQcm9wZXJ0eSk7CisgICAgICAgIHJlbW92ZShjb250cm9sbGVySW1w
bC0+bV9maW5pc2hlZEFuaW1hdGlvbnNbaV0uZ3JvdXBJZCwgY29udHJvbGxlckltcGwtPm1fZmlu
aXNoZWRBbmltYXRpb25zW2ldLnRhcmdldFByb3BlcnR5KTsKICAgICBjb250cm9sbGVySW1wbC0+
bV9maW5pc2hlZEFuaW1hdGlvbnMuY2xlYXIoKTsKIH0KIApAQCAtMTI2LDcgKzE5Niw3IEBAIHZv
aWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25Qcm9wZXJ0aWVzKEND
TGF5ZXJBbmltYXRpb25Db250cm9sCiAgICAgfQogfQogCi1DQ0FjdGl2ZUFuaW1hdGlvbiogQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1h
dGlvbjo6R3JvdXBJRCBncm91cCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRh
cmdldFByb3BlcnR5KQorQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpnZXRBY3RpdmVBbmltYXRpb24oc2l6ZV90IGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXAgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ld
LT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQpAQCAtMTM0LDcgKzIwNCw3IEBA
IENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZl
QW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCBn
cm91cCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQor
dm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlKHNpemVfdCBncm91cCwgQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQogewogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXAgJiYgbV9h
Y3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAppbmRleCA0
NmQ1YzE2ZWU4Y2U5NTY5YTM0ZGI1NDkyMzQxOWM2OTNlZjlhZmM1Li40NGZjNmU4MzE1NjRhY2Jm
N2FkZDkyNGZhODE3YzI3YmYyNjgyNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmgKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CiAKICAgICAvLyBUaGVzZSBhcmUgdmly
dHVhbCBmb3IgdGVzdGluZy4KLSAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9u
KiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7Ci0gICAg
dmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIHRpbWVPZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9u
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3Qg
QW5pbWF0aW9uKiwgc2l6ZV90IGFuaW1hdGlvbklkLCBzaXplX3QgZ3JvdXBJZCwgZG91YmxlIHRp
bWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihzaXplX3QgYW5pbWF0
aW9uSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0
aW9uKHNpemVfdCBhbmltYXRpb25JZCk7CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRp
b25zKGRvdWJsZSB0aW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwog
CkBAIC01OCw4ICs1OCw3IEBAIHB1YmxpYzoKICAgICAvLyBhcmUga2VwdCBpbiBzeW5jLiBUaGlz
IGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBpbXBsIHRocmVhZCBjb250
cm9sbGVyLgogICAgIHZvaWQgc3luY2hyb25pemVBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCopOwogCi0gICAgLy8gVGhpcyBpcyBmb3IgdGVzdGluZyBwdXJwb3NlcyBv
bmx5LgotICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4mIGFjdGl2ZUFuaW1h
dGlvbnMoKSB7IHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnM7IH0KKyAgICBib29sIGhhc0FjdGl2
ZUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7IH0K
IAogcHJvdGVjdGVkOgogICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CkBAIC03MCw4
ICs2OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25N
YWluVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOwogICAgIHZvaWQgcHVz
aEFuaW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CiAK
LSAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0
aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwotICAgIHZv
aWQgcmVtb3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRp
b24oc2l6ZV90IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7Cisg
ICAgdm9pZCByZW1vdmUoc2l6ZV90IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQ
cm9wZXJ0eSk7CiAKICAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0
aXZlQW5pbWF0aW9uczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmNwcAppbmRleCBlZDFlNWVhMDA3MDRkZjU2MDUxMTdjMGNhN2Y4
NDYzMjhmYTIyOWZjLi43ZGQyODIxYjZiNjIyZWI5MTQ0YTAwZjdlNmJlMGNiYjg0ZGM3MzZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKQogICAgIG1fYWN0aXZl
QW5pbWF0aW9ucy5hcHBlbmQoYW5pbSk7CiB9CiAKLUNDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1h
dGlvbjo6R3JvdXBJRCBncm91cCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHBy
b3BlcnR5KQorQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6Z2V0QWN0aXZlQW5pbWF0aW9uKHNpemVfdCBncm91cCwgQ0NBY3RpdmVBbmltYXRpb246OlRh
cmdldFByb3BlcnR5IHByb3BlcnR5KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9h
Y3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXAgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJn
ZXRQcm9wZXJ0eSgpID09IHByb3BlcnR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAppbmRleCBiZmRlYTFmOTYxMWU1M2FhMWVmYzU5OWUw
ZDM3OWY4MjA4M2ZhZWQwLi5jOThmOWNiNjcxMGVhNTUwZjIyZGZhZWQ0Yzg2Zjk1ODY5OTM2N2Rm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwuaApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRoZSBhY3Rp
dmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9w
ZXJ0eSBpZiBzdWNoIGFuCiAgICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KLSAgICBDQ0FjdGl2ZUFu
aW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0aXZlQW5pbWF0aW9u
KiBnZXRBY3RpdmVBbmltYXRpb24oc2l6ZV90IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGFueSBh
bmltYXRpb25zIHRoYXQgYXJlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQuCiAgICAgYm9v
bCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CmluZGV4IGI4M2QyODUwZWRmM2UwOWQzNjViMTc1MjRlYWMyMjg1YzdhYTY1NTYuLmVjYmQxZjc3
Nzk1MzUwZjk0OThmZWQ5YmM2MzU4OWQ0NmYzODU0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQpAQCAtNjEsMTAgKzYxLDEyIEBACiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRl
ZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0
LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0Rl
bGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVS
YXRlQ29udHJvbGxlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0tleWZyYW1lZEFu
aW1hdGlvbkN1cnZlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1w
bFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0
aW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0
aW9uVGVzdC5jcHAKaW5kZXggMjYxZWRmZmY4NTJmMzNjMTNiNDkyMWJlNzBlNjA5ZTQyZjVlMmI5
My4uZTE0ZWY5YmMwOTcxYTExZTIxNGIzMTRkNzU4MjkxNWVjYzU2ZDM1MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNw
cApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgewogCiBQYXNzT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oaW50IGl0ZXJhdGlvbnMpCiB7Ci0gICAgT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVybihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVybihD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25D
dXJ2ZSksIDAsIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9SZXR1cm4t
PnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRvUmV0dXJuLnJlbGVhc2Uo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRp
b25UZXN0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRp
b25UZXN0Q29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGFmODBiOGI1ZmE1YjNmNmZiYmEzMmY4MmY1
ZTdjNGFmMTMyZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RD
b21tb24uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
VGVzdHMgeworCitGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6RmFrZUZsb2F0QW5pbWF0aW9uQ3Vy
dmUoKQoreworfQorCitGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6fkZha2VGbG9hdEFuaW1hdGlv
bkN1cnZlKCkKK3sKK30KKworUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBG
YWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUoKSBjb25zdAoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOworfQorCitGYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbjo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uKQorICAgIDog
bV9kdXJhdGlvbihkdXJhdGlvbikKK3sKK30KKworRmFrZVRyYW5zZm9ybVRyYW5zaXRpb246On5G
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbigpCit7Cit9CisKK1dlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpnZXRWYWx1ZShkb3VibGUgdGltZSwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKK30KKworUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1h
dGlvbkN1cnZlPiBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Y2xvbmUoKSBjb25zdAoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKnRoaXMpKTsKK30K
KworCitGYWtlRmxvYXRUcmFuc2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJh
dGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisgICAgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKQor
ICAgICwgbV9mcm9tKGZyb20pCisgICAgLCBtX3RvKHRvKQoreworfQorCitGYWtlRmxvYXRUcmFu
c2l0aW9uOjp+RmFrZUZsb2F0VHJhbnNpdGlvbigpCit7Cit9CisKK2Zsb2F0IEZha2VGbG9hdFRy
YW5zaXRpb246OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAoreworICAgIHRpbWUgLz0gbV9k
dXJhdGlvbjsKKyAgICBpZiAodGltZSA+PSAxKQorICAgICAgICB0aW1lID0gMTsKKyAgICByZXR1
cm4gKDEgLSB0aW1lKSAqIG1fZnJvbSArIHRpbWUgKiBtX3RvOworfQorCitQYXNzT3duUHRyPFdl
YkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IEZha2VGbG9hdFRyYW5zaXRpb246OmNsb25lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oKnRoaXMp
KTsKK30KKwordm9pZCBhZGRPcGFjaXR5VHJhbnNpdGlvbihXZWJDb3JlOjpMYXllckNocm9taXVt
JiBsYXllciwgZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9w
YWNpdHkpCit7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVk
UHJvcGVydHlPcGFjaXR5KTsKKyAgICBpZiAoZHVyYXRpb24gPiAwKQorICAgICAgICB2YWx1ZXMu
aW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIHN0YXJ0T3BhY2l0eSkpOworICAgIHZh
bHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIGVuZE9wYWNpdHkp
KTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRl
KCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbigxKTsKKworICAgIEludFNpemUgYm94U2l6
ZTsKKworICAgIGxheWVyLmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5n
ZXQoKSwgMCwgMCwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaApp
bmRleCA3YmQ4YTJmZTIxNTFlNjhmMmQ1NmM2YzlhMDQ3YjZjZDk4M2VmOWI5Li5kYmRiMmFkNzU2
ZmQzMmUzODZkOTdhZjljNGM5MDkxYjhkNjMxNjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKQEAgLTI5LDM1ICsyOSwz
MSBAQAogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBMYXllckNocm9taXVtOworfQorCiBuYW1lc3BhY2UgV2ViS2l0VGVzdHMgewogCiBjbGFz
cyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0
aW9uQ3VydmUgewogcHVibGljOgotICAgIHZpcnR1YWwgfkZha2VGbG9hdEFuaW1hdGlvbkN1cnZl
KCkgeyB9CisgICAgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKTsKKyAgICB2aXJ0dWFsIH5GYWtl
RmxvYXRBbmltYXRpb25DdXJ2ZSgpOwogCiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBj
b25zdCB7IHJldHVybiAxOyB9CiAgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93
KSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkND
QW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOwotICAgIH0KKyAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKIH07CiAK
IGNsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uIDogcHVibGljIFdlYkNvcmU6OkNDVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUgewogcHVibGljOgotICAgIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9u
KGRvdWJsZSBkdXJhdGlvbikgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKSB7IH0KLSAgICB2aXJ0dWFs
IH5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigpIHsgfQorICAgIEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uKGRvdWJsZSBkdXJhdGlvbik7CisgICAgdmlydHVhbCB+RmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24oKTsKIAogICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
dXJhdGlvbjsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0
VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKLSAg
ICB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShk
b3VibGUgdGltZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0OwogCi0gICAgdmlydHVh
bCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24o
KnRoaXMpKTsKLSAgICB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0
aW9uQ3VydmU+IGNsb25lKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZG91YmxlIG1fZHVyYXRp
b247CkBAIC02NSwyOCArNjEsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgRmFrZUZsb2F0VHJhbnNp
dGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgewogcHVibGljOgot
ICAgIEZha2VGbG9hdFRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBmcm9tLCBmbG9h
dCB0bykKLSAgICAgICAgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKQotICAgICAgICAsIG1fZnJvbShm
cm9tKQotICAgICAgICAsIG1fdG8odG8pCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfkZh
a2VGbG9hdFRyYW5zaXRpb24oKSB7IH0KKyAgICBGYWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBk
dXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pOworICAgIHZpcnR1YWwgfkZha2VGbG9hdFRy
YW5zaXRpb24oKTsKIAogICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kdXJhdGlvbjsgfQotICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUp
IGNvbnN0Ci0gICAgewotICAgICAgICB0aW1lIC89IG1fZHVyYXRpb247Ci0gICAgICAgIGlmICh0
aW1lID49IDEpCi0gICAgICAgICAgICB0aW1lID0gMTsKLSAgICAgICAgcmV0dXJuICgxIC0gdGlt
ZSkgKiBtX2Zyb20gKyB0aW1lICogbV90bzsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKCp0aGlzKSk7Ci0gICAg
fQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0OworCisgICAg
dmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgZG91YmxlIG1fZHVyYXRpb247CkBAIC05NCw2ICs3NSw4IEBA
IHByaXZhdGU6CiAgICAgZmxvYXQgbV90bzsKIH07CiAKK3ZvaWQgYWRkT3BhY2l0eVRyYW5zaXRp
b24oV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSYsIGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgc3RhcnRP
cGFjaXR5LCBmbG9hdCBlbmRPcGFjaXR5KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0VGVzdHMK
IAogI2VuZGlmIC8vIENDQW5pbWF0aW9uVGVzY3RDb21tb25faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVU
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNzczMmFlYWI3NDI3ZGUzOGM3ZDc0N2Q5NTcwMTY2OTk4MWU2
ZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5p
bWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgIlRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ugewor
Cit2b2lkIGV4cGVjdFRyYW5zbGF0ZVgoZG91YmxlIHRyYW5zbGF0ZVgsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29t
cG9zZWRUeXBlIGRlY29tcG9zZWRUeXBlOworICAgIG1hdHJpeC5kZWNvbXBvc2UoZGVjb21wb3Nl
ZFR5cGUpOworICAgIEVYUEVDVF9GTE9BVF9FUSh0cmFuc2xhdGVYLCBkZWNvbXBvc2VkVHlwZS50
cmFuc2xhdGVYKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG9u
ZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZVRlc3QsIE9uZUZsb2F0S2V5ZnJhbWUpCit7CisgICAgVmVjdG9yPENDRmxvYXRLZXlmcmFt
ZT4ga2V5ZnJhbWVzOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDIp
KTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5n
ZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDEp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDIpKTsKK30KKworLy8g
VGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFtZXMgd29ya3MgYXMg
ZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUd29GbG9hdEtl
eWZyYW1lKQoreworICAgIFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBr
ZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCAyKSk7CisgICAga2V5ZnJhbWVzLmFw
cGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgNCkpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0
QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKGtleWZyYW1lcykpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
LTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2
ZS0+Z2V0VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdp
dGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZyYW1lZEFu
aW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVGbG9hdEtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ0Zs
b2F0S2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlm
cmFtZSgwLCAyKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgNCkp
OworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDIsIDgpKTsKKyAgICBPd25Q
dHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0
QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5n
ZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+
Z2V0VmFsdWUoMykpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGgg
bXVsdGlwbGUga2V5cyBhdCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgorVEVTVChDQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRGbG9hdEtleVRpbWVzKQoreworICAgIFZl
Y3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICAvLyBBIHN0ZXAgZnVuY3Rpb24u
CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgNCkpOworICAgIGtleWZy
YW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDEsIDQpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5k
KENDRmxvYXRLZXlmcmFtZSgxLCA2KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5
ZnJhbWUoMiwgNikpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+
IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykp
OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisKKyAgICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRp
bnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4KKyAgICBmbG9h
dCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZSA+PSA0
ICYmIHZhbHVlIDw9IDYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1
ZSgxLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDIpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDMpKTsKK30KKworCisvLyBUZXN0
cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBl
eHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIE9uZVRyYW5zZm9y
bUtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7
CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURV9YKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAsIG9w
ZXJhdGlvbnMpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZy
YW1lcykpOworICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCisgICAgZXhwZWN0VHJh
bnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0
VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0
VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7Cit9CisKKy8vIFRl
c3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBh
cyBleHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b1RyYW5z
Zm9ybUtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFt
ZXM7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25z
MS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAg
IG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zv
cm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGln
bm9yZWQKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJT
aXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJT
aXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXll
clNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXll
clNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXll
clNpemUpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0
aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmVUZXN0LCBUaHJlZVRyYW5zZm9ybUtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ1Ry
YW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhl
ZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVu
Z3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoOCwg
Rml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlv
bnMxKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJh
dGlvbnMyKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDIsIG9w
ZXJhdGlvbnMzKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlm
cmFtZXMpKTsKKyAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAorICAgIGV4cGVjdFRy
YW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RU
cmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RU
cmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkpOworICAgIGV4cGVj
dFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVj
dFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhw
ZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7CisgICAgZXhw
ZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5ZXJTaXplKSk7Cit9CisKKy8v
IFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUga2V5cyBhdCBh
IGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
VGVzdCwgUmVwZWF0ZWRUcmFuc2Zvcm1LZXlUaW1lcykKK3sKKyAgICBWZWN0b3I8Q0NUcmFuc2Zv
cm1LZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KKyAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIu
b3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShM
ZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBv
cGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKExlbmd0aCg2LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnM0OworICAgIG9wZXJhdGlvbnM0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwg
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQo
Q0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAgIGtleWZyYW1lcy5hcHBl
bmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOworICAgIGtleWZyYW1lcy5h
cHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMykpOworICAgIGtleWZyYW1l
cy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zNCkpOworICAgIE93blB0
cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisKKyAgICBJbnRTaXpl
IGxheWVyU2l6ZTsgLy8gaWdub3JlZAorCisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+
Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUt
PmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUt
PmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7CisKKyAgICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRp
bnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4KKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpOwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHlwZTsK
KyAgICB2YWx1ZS5kZWNvbXBvc2UoZGVjb21wb3NlZFR5cGUpOworICAgIEVYUEVDVF9UUlVFKGRl
Y29tcG9zZWRUeXBlLnRyYW5zbGF0ZVggPj0gNCAmJiBkZWNvbXBvc2VkVHlwZS50cmFuc2xhdGVY
IDw9IDYpOworCisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41LCBs
YXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgyLCBs
YXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgzLCBs
YXllclNpemUpKTsKK30KKworLy8gVGVzdHMgdGhhdCBpbnZhbGlkIGxpc3RzIG9mIGtleWZyYW1l
cyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZXR1cm5lZCBmcm9tIDo6Y3JlYXRlLgorVEVTVChD
Q0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgSW52YWxpZEtleWZyYW1lcykKK3sKKyAgICAv
LyBJdCBpcyBpbnZhbGlkIHRvIHBhc3MgYW4gZW1wdHkgdmVjdG9yIG9mIGtleWZyYW1lcyB0byBj
cmVhdGUuCisgICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IHRyYW5zZm9ybUtleWZyYW1l
czsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gdHJhbnNm
b3JtQ3VydmUgPSBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUodHJh
bnNmb3JtS2V5ZnJhbWVzKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJhbnNmb3JtQ3VydmUuZ2V0KCkp
OworCisgICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4gZmxvYXRLZXlmcmFtZXM7CisgICAgT3du
UHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gZmxvYXRDdXJ2ZSA9IENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGZsb2F0S2V5ZnJhbWVzKTsKKyAgICBFWFBF
Q1RfRkFMU0UoZmxvYXRDdXJ2ZS5nZXQoKSk7CisKKyAgICAvLyBJdCBpcyBpbnZhbGlkIHRvIHBh
c3MgYSB2ZWN0b3Igb2YgdW5zb3J0ZWQga2V5ZnJhbWVzIHRvIGNyZWF0ZTsKKyAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5h
cHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVk
KSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwor
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3Bl
cmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURV9YKSk7CisgICAgdHJhbnNmb3JtS2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZy
YW1lKDEsIG9wZXJhdGlvbnMxKSk7CisgICAgdHJhbnNmb3JtS2V5ZnJhbWVzLmFwcGVuZChDQ1Ry
YW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMyKSk7CisgICAgdHJhbnNmb3JtQ3VydmUgPSBD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUodHJhbnNmb3JtS2V5ZnJh
bWVzKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJhbnNmb3JtQ3VydmUuZ2V0KCkpOworCisgICAgZmxv
YXRLZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgxLCAyKSk7CisgICAgZmxvYXRLZXlm
cmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCA0KSk7CisgICAgZmxvYXRDdXJ2ZSA9IEND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGZsb2F0S2V5ZnJhbWVzKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoZmxvYXRDdXJ2ZS5nZXQoKSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCmluZGV4IDJkYzk2ZDJhZWU3NmMy
ZWQxMmIwYmEyMGVmMzAxNGI5Njc0ODA5NGUuLmMzODBmNjY1Mzk3N2JiZGFjM2YxMzkyNDNkM2E4
YTc3ZDg0YzA0NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApAQCAt
NTcsNyArNTcsNyBAQCBwcml2YXRlOgogCiBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBj
cmVhdGVBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwg
aW50IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCiB7Ci0g
ICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIGlkLCBwcm9wZXJ0eSk7
CisgICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIDAsIGlkLCBwcm9w
ZXJ0eSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0
byAxIHdvcmtzIGFzIGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggYWRhZWU3MWIyNTE3NjkxOWE3NTAw
OWM5ZTFjYmFjYTRkYjg2Y2RlMS4uZDExNmY4MWFlYzM5MDIzMjE4NDhlMTYwMzMzYTkzN2Y0MDkw
MzIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiwgZmxvYXQpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNv
bXBvc2l0ZSgpIHsgfQogfTsKIAogLy8gQWRhcHRzIENDTGF5ZXJUcmVlSG9zdEltcGwgZm9yIHRl
c3QuIFJ1bnMgcmVhbCBjb2RlLCB0aGVuIGludm9rZXMgdGVzdCBob29rcy4KQEAgLTE0MywyNSAr
MTQ0LDYgQEAgcHJpdmF0ZToKICAgICBUZXN0SG9va3MqIG1fdGVzdEhvb2tzOwogfTsKIAotLy8g
QWRhcHRzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIGZvciB0ZXN0LiBBZGRzIGEgZHVtbXkg
aW1wbGVtZW50YXRpb24gb2YgYWRkQW5pbWF0aW9uIHRoYXQgaW5zZXJ0cyBhIGZsb2F0IGFuaW1h
dGlvbi4KLS8vIEZJWE1FOiBvbmNlIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmlt
YXRpb24gaXMgaW1wbGVtZW50ZWQsIHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBkaXJl
Y3RseSBhbmQgdGhpcwotLy8gY2xhc3MgY2FuIGJlIHJlbW92ZWQuCi1jbGFzcyBNb2NrTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyIDogcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBi
b29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIHRpbWVPZmZzZXQpCi0gICAgewotICAgICAgICBkb3VibGUgZHVyYXRpb24gPSAwOwot
ICAgICAgICBhY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oZHVyYXRpb24sIDEsIDApKSwgMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotfTsKLQogY2xhc3MgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0
dXJlVHJhY2tpbmcgOiBwdWJsaWMgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q29tcG9zaXRvckZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+IGNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJzKQpA
QCAtMzU2LDcgKzMzOCw3IEBAIHByb3RlY3RlZDoKICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3Qq
IHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7CiAgICAgICBB
U1NFUlQodGVzdCk7CiAgICAgICBpZiAodGVzdC0+bV9sYXllclRyZWVIb3N0ICYmIHRlc3QtPm1f
bGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCi0gICAgICAgICAgdGVzdC0+bV9sYXllclRyZWVI
b3N0LT5yb290TGF5ZXIoKS0+YWRkQW5pbWF0aW9uKEtleWZyYW1lVmFsdWVMaXN0KEFuaW1hdGVk
UHJvcGVydHlPcGFjaXR5KSwgSW50U2l6ZSgpLCAwLCAiIiwgMC4wKTsKKyAgICAgICAgICBhZGRP
cGFjaXR5VHJhbnNpdGlvbigqdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSwgMCwg
MCwgMSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVB
bmRDb21taXQodm9pZCogc2VsZikKQEAgLTUwOSw3ICs0OTEsNiBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdFRlc3Q6OmRvQmVnaW5UZXN0KCkKICAgICBtX2xheWVyVHJlZUhvc3QgPSBNb2NrTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlKHRoaXMsIG1fY2xpZW50LmdldCgpLCByb290TGF5ZXIsIG1fc2V0dGlu
Z3MpOwogICAgIEFTU0VSVF9UUlVFKG1fbGF5ZXJUcmVlSG9zdCk7CiAgICAgcm9vdExheWVyLT5z
ZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7Ci0gICAgcm9vdExheWVyLT5z
ZXRBbmltYXRpb25Db250cm9sbGVyKE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSgpKTsKIAogICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKICAgICBiZWdpblRlc3QoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5j
cHAKaW5kZXggOTdiMjE1YTUzZWY3MGVlOTBkYzczMDVhNzJjNWUyYmRjNWRhOGRjZS4uZDVjOGVk
MzM5ODZlNWFkYmNkODJhN2Q1YWVmODg2NjNmNTUxZTk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAKQEAgLTQwLDE4
ICs0MCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dFRlc3RzOwogdXNpbmcgdGVzdGluZzo6VGVzdDsKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBUcmVlU3luY2hyb25pemVyQW5pbWF0aW9uVGVzdCA6IHB1YmxpYyBUZXN0IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGdldEFuaW1hdGlvbkNv
bnRyb2xsZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbGF5
ZXItPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KIG5hbWVzcGFjZSB7CiAKIGNsYXNzIE1vY2tDQ0xheWVySW1wbCA6IHB1YmxpYyBD
Q0xheWVySW1wbCB7CkBAIC0zMjUsNyArMzEzLDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVz
dCwgc3luY01hc2tSZXBsaWNhQW5kUmVwbGljYU1hc2tMYXllcnMpCiAgICAgZXhwZWN0VHJlZXNB
cmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsK
IH0KIAotVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJBbmltYXRpb25UZXN0LCBzeW5jTmV3QW5pbWF0
aW9uKQorVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY05ld0FuaW1hdGlvbikKIHsKICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMzM0LDYwICsz
MjIsNjAgQEAgVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJBbmltYXRpb25UZXN0LCBzeW5jTmV3QW5p
bWF0aW9uKQogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5
bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKIAog
ICAgIC8vIEFkZCBhbmltYXRpb24gdG8gbWFpbiB0aHJlYWQgY29udHJvbGxlci4KLSAgICBnZXRB
bmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25z
KCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IGFkZE9wYWNpdHlUcmFuc2l0aW9uKCpsYXllclRyZWVSb290LCAxLCAwLCAxKTsKICAgICBjY0xh
eWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJl
ZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShj
Y0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9u
KDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgRVhQRUNUX0VRKENDQWN0aXZl
QW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJlZVJvb3Qt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CiB9CiAKLVRFU1RfRihUcmVlU3luY2hyb25p
emVyQW5pbWF0aW9uVGVzdCwgc3luY0FuaW1hdGlvblByb3BlcnRpZXMpCitURVNUKFRyZWVTeW5j
aHJvbml6ZXJUZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGllcykKIHsKICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVl
Um9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogCiAgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxh
eWVyVHJlZVJvb3QuZ2V0KCksIDApOwotICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJU
cmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgYWRkT3BhY2l0eVRyYW5zaXRpb24oKmxh
eWVyVHJlZVJvb3QsIDEsIDAsIDEpOwogICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVS
b290LmdldCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9u
Q29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKICAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJn
ZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0
ZSgpKTsKIAogICAgIC8vIFB1c2ggYW4gYW5pbWF0aW9uIHByb3BlcnR5IGNoYW5nZSB0byB0aGUg
aW1wbCB0aHJlYWQgKHNob3VsZCBub3QgY2F1c2UgYW4gYW5pbWF0aW9uIHRvIGJlIGFkZGVkKS4K
LSAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVB
bmltYXRpb25zKClbMF0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIDAp
OworICAgIGxheWVyVHJlZVJvb3QtPnBhdXNlQW5pbWF0aW9uKDAsIDApOwogICAgIGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNjTGF5
ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmlt
YXRpb246OlBhdXNlZCwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdl
dEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRl
KCkpOwogfQogCi1URVNUX0YoVHJlZVN5bmNocm9uaXplckFuaW1hdGlvblRlc3QsIHN5bmNBYm9y
dGVkQW5pbWF0aW9uKQorVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0Fib3J0ZWRBbmlt
YXRpb24pCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
IAogICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgogICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhs
YXllclRyZWVSb290LmdldCgpLCAwKTsKLSAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVy
VHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uKCps
YXllclRyZWVSb290LCAxLCAwLCAxKTsKICAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hy
b25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVl
Um9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CiAKICAgICAvLyBBYm9ydCBhbiBhbmltYXRpb24gZnJvbSB0aGUgbWFpbiB0aHJl
YWQuCi0gICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0
aXZlQW5pbWF0aW9ucygpLmNsZWFyKCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+cmVtb3ZlQW5pbWF0
aW9uKDApOwogICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVl
Um9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIAogICAgIEVYUEVDVF9GQUxTRShj
Y0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9u
KDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiB9CiAKLVRFU1RfRihUcmVlU3luY2hy
b25pemVyQW5pbWF0aW9uVGVzdCwgc3luY0NvbXBsZXRlZEFuaW1hdGlvbikKK1RFU1QoVHJlZVN5
bmNocm9uaXplclRlc3QsIHN5bmNDb21wbGV0ZWRBbmltYXRpb24pCiB7CiAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJl
ZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKIAogICAgIC8vIFN5bmMgd2l0aCBubyBh
bmltYXRpb25zLgogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsK
LSAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVB
bmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uKCpsYXllclRyZWVSb290LCAxLCAwLCAxKTsK
ICAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0
KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJl
ZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CkBAIC0zOTksMTEgKzM4NywxMSBAQCBURVNUX0YoVHJl
ZVN5bmNocm9uaXplckFuaW1hdGlvblRlc3QsIHN5bmNDb21wbGV0ZWRBbmltYXRpb24pCiAgICAg
Y2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGUoMiwgKmV2ZW50
cyk7CiAKICAgICBFWFBFQ1RfRkFMU0UoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9s
bGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OwotICAgIEVYUEVDVF9FUShzaXplX3QoMSksIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJU
cmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5zaXplKCkpOworICAgIEVYUEVDVF9U
UlVFKGxheWVyVHJlZVJvb3QtPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIAogICAgIFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRy
ZWVSb290LmdldCgpKTsKIAotICAgIEVYUEVDVF9FUShzaXplX3QoMCksIGdldEFuaW1hdGlvbkNv
bnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5zaXplKCkp
OworICAgIEVYUEVDVF9GQUxTRShsYXllclRyZWVSb290LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128495</attachid>
            <date>2012-02-23 10:29:41 -0800</date>
            <delta_ts>2012-02-23 13:42:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77229-20120223132939.patch</filename>
            <type>text/plain</type>
            <size>59243</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTdkNDY4ZDQyODkxMzc5
YjNlNjA3MTU2N2ViMzNhNmYwZTY4ZWM1ZS4uZTBhZmUzMWE2NDY2YmIzZTU3NGEyNWUwNGE5NzM5
NDQ5YzdiYzAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTAyLTIzICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1w
bGVtZW50IGtleWZyYW1lZCBhbmltYXRpb25zIGZvciB0aGUgY2MgdGhyZWFkLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzRmluaXNoZWRBdCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpjdXJ2ZSk6CisgICAgICAg
IChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZl
OjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZTo6fkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6ZHVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6Q0NGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKEND
RmxvYXRLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpD
Q1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAgICAgKENDVHJhbnNmb3JtS2V5ZnJhbWUpOgorICAg
ICAgICAoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKENDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aGFz
QWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyk6CisKIDIwMTItMDItMjIgIElnb3IgT2xpdmVp
cmEgIDxpZ29yLm9Ac2lzYS5zYW1zdW5nLmNvbT4KIAogICAgICAgICBFdmVyeSBjYWxsIHRvIFJl
bmRlck9iamVjdDo6c2V0QW5pbWF0YWJsZVN0eWxlKCkgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgbV9j
b21wb3NpdGVBbmltYXRpb25zOiBwb3RlbnRpYWxseSBPKE5eMikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggZDdiNzQ0ZGZkZjcxOTk3NWI5NTJjOTA5OGQ0OGI1NDY3NjYwNzNlMS4uNzVj
MjBhZDE1OGZkMzExOTlkNmY4YmJmNTI4ODcxODQyNzExOTgzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wMi0yMyAgSWFuIFZvbGxpY2sgIDx2b2xs
aWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBrZXlmcmFt
ZWQgYW5pbWF0aW9ucyBmb3IgdGhlIGNjIHRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9D
Q0FuaW1hdGlvblRlc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjphZGRPcGFjaXR5VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6YWRk
T3BhY2l0eVRyYW5zaXRpb25Ub0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmFk
ZE9wYWNpdHlUcmFuc2l0aW9uVG9MYXllcik6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25U
ZXN0Q29tbW9uLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdFRlc3RzKToK
KyAgICAgICAgKiB0ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpleHBlY3RUcmFuc2xhdGVY
KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6ZXhwZWN0VHJh
bnNsYXRlWCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6
VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoQWRkQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3QpOgorCiAyMDEyLTAyLTIy
ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5PVElG
SUNBVElPTlMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGFzIFBhZ2VTdXBwbGVtZW50CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggZmRjNjBlNDE2OTlkNTBmMGE3N2EwOWNiZmIzMjllY2YyNzNhMjViZS4uZTQz
OGI0YzNkOTgwNTRiMWQ2MjQyYmQzMmI1N2RlODY0ZjQ2ZWQxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzI2NSw2ICszMjY1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTMz
ZDE5YzViMDczM2UwNmI3NGFjNDFjOGFkYWM2YmVkNjVlYTNlMi4uZjcyZDE0MzAzMjA3MzFjNDc4
OWIzY2M3NGM1ZmQ3NTE2ODlhYWM1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEzNSw2
ICsxMzUsMTEgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHIKICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCitib29sIExheWVyQ2hyb21pdW06Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50
KGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCkKIHsKICAgICBtX2lzTm9uQ29tcG9zaXRlZENv
bnRlbnQgPSBpc05vbkNvbXBvc2l0ZWRDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDky
ZmIwMTNmYmI3ZmE3NTk2MjdkNThiZjUxZjMwYjNjZGJiZmZiNzIuLjQ2YWZmMjkzNTVhNDNmNTk3
Mzg4ZDY4YTliNmUzOWE1MDRmMmExY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTIyNCw2ICsy
MjQsNyBAQCBwdWJsaWM6CiAKICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogbGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Z2V0KCk7IH0KICAgICB2b2lkIHNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihQYXNzT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPik7CisgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRp
b24oKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcAppbmRleCA5ZWY1ZmUyNTYyYjZiNDMw
MmQxMWQyYTlkYWFmZDBjMzBjMzI5Zjg4Li44YzAzMDNlZDYyMTBjN2Y0OWJlMWQyZWE1ZWEzMGY5
OGIwNTE5MmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCkBAIC0zOCw3
ICszOCw3IEBAIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1CiB9CiAKIENDQWN0aXZlQW5pbWF0aW9u
OjpDQ0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBp
bnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkKLSAgICA6IG1fYW5pbWF0aW9uQ3VydmUoY3VydmUpCisgICAgOiBtX2N1cnZlKGN1cnZlKQog
ICAgICwgbV9pZChhbmltYXRpb25JZCkKICAgICAsIG1fZ3JvdXAoZ3JvdXBJZCkKICAgICAsIG1f
dGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgQ0NB
Y3RpdmVBbmltYXRpb246OmlzRmluaXNoZWRBdChkb3VibGUgdGltZSkgY29uc3QKIAogICAgIHJl
dHVybiBtX3J1blN0YXRlID09IFJ1bm5pbmcKICAgICAgICAgJiYgbV9pdGVyYXRpb25zID49IDAK
LSAgICAgICAgJiYgbV9pdGVyYXRpb25zICogbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSA8
PSB0aW1lIC0gc3RhcnRUaW1lKCkgLSBtX3RvdGFsUGF1c2VkVGltZTsKKyAgICAgICAgJiYgbV9p
dGVyYXRpb25zICogbV9jdXJ2ZS0+ZHVyYXRpb24oKSA8PSB0aW1lIC0gc3RhcnRUaW1lKCkgLSBt
X3RvdGFsUGF1c2VkVGltZTsKIH0KIAogYm9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0aW5n
KCkgY29uc3QKQEAgLTEwOSwyMCArMTA5LDIwIEBAIGRvdWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICAvLyBJZiBsZXNzIHRoYW4gYW4gaXRlcmF0aW9uIGR1cmF0aW9uLCBqdXN0
IHJldHVybiB0cmltbWVkLgotICAgIGlmICh0cmltbWVkIDwgbV9hbmltYXRpb25DdXJ2ZS0+ZHVy
YXRpb24oKSkKKyAgICBpZiAodHJpbW1lZCA8IG1fY3VydmUtPmR1cmF0aW9uKCkpCiAgICAgICAg
IHJldHVybiB0cmltbWVkOwogCiAgICAgLy8gSWYgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRo
ZSB0b3RhbCBkdXJhdGlvbiwgcmV0dXJuIGl0ZXJhdGlvbiBkdXJhdGlvbi4KLSAgICBpZiAobV9p
dGVyYXRpb25zID49IDAgJiYgdHJpbW1lZCA+PSBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigp
ICogbV9pdGVyYXRpb25zKQotICAgICAgICByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRp
b24oKTsKKyAgICBpZiAobV9pdGVyYXRpb25zID49IDAgJiYgdHJpbW1lZCA+PSBtX2N1cnZlLT5k
dXJhdGlvbigpICogbV9pdGVyYXRpb25zKQorICAgICAgICByZXR1cm4gbV9jdXJ2ZS0+ZHVyYXRp
b24oKTsKIAogICAgIC8vIEZpbmFsbHksIHJldHVybiB4IHdoZXJlIHRyaW1tZWQgPSB4ICsgbiAq
IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIGZvciBzb21lIHBvc2l0aXZlIGludGVnZXIgbi4KLSAg
ICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpKTsKKyAg
ICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2N1cnZlLT5kdXJhdGlvbigpKTsKIH0KIAogUGFzc093
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gQ0NBY3RpdmVBbmltYXRpb246OmNsb25lRm9ySW1wbFRo
cmVhZCgpIGNvbnN0CiB7Ci0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVybihh
ZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9hbmltYXRpb25DdXJ2ZS0+Y2xvbmUoKSwg
bV9pZCwgbV9ncm91cCwgbV90YXJnZXRQcm9wZXJ0eSkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvUmV0dXJuKGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihtX2N1cnZl
LT5jbG9uZSgpLCBtX2lkLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOwogICAgIHRvUmV0
dXJuLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKICAgICB0b1JldHVybi0+bV9pdGVyYXRpb25z
ID0gbV9pdGVyYXRpb25zOwogICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1l
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBY3RpdmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggYWQ5ZTg0ZWU3OTNkZGM3MTc3
Y2VjZmJkMDFlOTVjMTc5ZjdkMjJjOS4uMjA5MzQyMWE3NTA4Zjk1ZmYzNWNjZTEzZjU0NTg2MmYy
NGVkZjNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC05Nyw4ICs5Nyw4
IEBAIHB1YmxpYzoKICAgICBib29sIGlzV2FpdGluZygpIGNvbnN0OwogICAgIGJvb2wgaXNSdW5u
aW5nT3JIYXNSdW4oKSBjb25zdDsKIAotICAgIENDQW5pbWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1
cnZlKCkgeyByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS5nZXQoKTsgfQotICAgIGNvbnN0IENDQW5p
bWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1cnZlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25D
dXJ2ZS5nZXQoKTsgfQorICAgIENDQW5pbWF0aW9uQ3VydmUqIGN1cnZlKCkgeyByZXR1cm4gbV9j
dXJ2ZS5nZXQoKTsgfQorICAgIGNvbnN0IENDQW5pbWF0aW9uQ3VydmUqIGN1cnZlKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJ2ZS5nZXQoKTsgfQogCiAgICAgLy8gVGFrZXMgdGhlIGdpdmVuIGFic29s
dXRlIHRpbWUsIGFuZCB1c2luZyB0aGUgc3RhcnQgdGltZSBhbmQgdGhlIG51bWJlcgogICAgIC8v
IG9mIGl0ZXJhdGlvbnMsIHJldHVybnMgdGhlIHJlbGF0aXZlIHRpbWUgaW4gdGhlIGN1cnJlbnQg
aXRlcmF0aW9uLgpAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ0NB
Y3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwgaW50IGFuaW1hdGlv
bklkLCBpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVydHkpOwogCi0gICAgT3duUHRyPENDQW5pbWF0
aW9uQ3VydmU+IG1fYW5pbWF0aW9uQ3VydmU7CisgICAgT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+
IG1fY3VydmU7CiAKICAgICAvLyBJRHMgYXJlIG5vdCBuZWNlc3NhcmlseSB1bmlxdWUuCiAgICAg
aW50IG1faWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjZlOWUxNzc2NGM1OWMzZmM1ZDZjMTU3ZGIxYTQ0MmQ2YTRmY2MyMzAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcApAQCAtMCwwICsxLDIzNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVy
YXRpb24uaCIKKyNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgi
CisjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIHsKKwordGVtcGxhdGUgPGNsYXNzIEtFWUZSQU1FPgorYm9vbCBrZXlmcmFtZXNB
cmVTb3J0ZWQoY29uc3QgVmVjdG9yPEtFWUZSQU1FPiYga2V5ZnJhbWVzKQoreworICAgIGlmICgh
a2V5ZnJhbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgaWYgKGtl
eWZyYW1lc1tpXS50aW1lID4ga2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UK
KworUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+
JiBrZXlmcmFtZXMpCit7CisgICAgaWYgKCFrZXlmcmFtZXMuc2l6ZSgpIHx8ICFrZXlmcmFtZXNB
cmVTb3J0ZWQoa2V5ZnJhbWVzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZShrZXlmcmFtZXMp
KTsKK30KKworQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpDQ0tleWZyYW1lZEZsb2F0
QW5pbWF0aW9uQ3VydmUoY29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4mIGtleWZyYW1lcykK
KyAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKK3sKK30KKworQ0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlOjp+Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCkKK3sKK30KKwor
ZG91YmxlIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6ZHVyYXRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0KCkudGltZSAtIG1fa2V5ZnJhbWVzLmZpcnN0
KCkudGltZTsKK30KKworUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU6OmNsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSgqdGhpcykpOworfQorCitmbG9hdCBD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0KSBjb25zdAor
eworICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCkudGltZSkKKyAgICAgICAgcmV0dXJu
IG1fa2V5ZnJhbWVzLmZpcnN0KCkudmFsdWU7CisKKyAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5s
YXN0KCkudGltZSkKKyAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS52YWx1ZTsKKwor
ICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7
ICsraSkgeworICAgICAgICBpZiAodCA8IG1fa2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGZsb2F0IHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KCh0IC0gbV9rZXlmcmFtZXNbaV0udGltZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0g
bV9rZXlmcmFtZXNbaV0udGltZSkpOworICAgIC8vIEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rp
b24gaGVyZS4KKyAgICByZXR1cm4gbV9rZXlmcmFtZXNbaV0udmFsdWUgKyAobV9rZXlmcmFtZXNb
aSsxXS52YWx1ZSAtIG1fa2V5ZnJhbWVzW2ldLnZhbHVlKSAqIHByb2dyZXNzOworfQorCitQYXNz
T3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlm
cmFtZT4mIGtleWZyYW1lcykKK3sKKyAgICBpZiAoIWtleWZyYW1lcy5zaXplKCkgfHwgIWtleWZy
YW1lc0FyZVNvcnRlZChrZXlmcmFtZXMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShr
ZXlmcmFtZXMpKTsKK30KKworQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Q0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1L
ZXlmcmFtZT4mIGtleWZyYW1lcykKKyAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKK3sKK30K
KworQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6fkNDS2V5ZnJhbWVkVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KKworZG91YmxlIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlmcmFtZXMu
bGFzdCgpLnRpbWUgLSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWU7Cit9CisKK1Bhc3NPd25QdHI8
Q0NBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y2xv
bmUoKSBjb25zdAoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7
CisgICAgLy8gV2UgbmVlZCB0byBkbyBhIGRlZXAgY29weSBvZiBhbGwgb2YgdGhlIGtleWZyYW1l
cyBzaW5jZSB0aGV5IGNvbnRhaW4gcmVmCisgICAgLy8gcG9pbnRlcnMgdG8gVHJhbnNmb3JtT3Bl
cmF0aW9uIG9iamVjdHMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2tleWZyYW1lcy5z
aXplKCk7ICsraSkgeworICAgICAgICBDQ1RyYW5zZm9ybUtleWZyYW1lIGtleWZyYW1lKG1fa2V5
ZnJhbWVzW2ldLnRpbWUpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fa2V5ZnJh
bWVzW2ldLnZhbHVlLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBUcmFuc2Zvcm1PcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9w
ZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0aW9uVHlwZSgpOworICAgICAgICAgICAgc3dpdGNoIChv
cGVyYXRpb25UeXBlKSB7CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfWDoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgorICAg
ICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6CisgICAgICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6CisgICAgICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKKyAgICAgICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24q
PihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAg
ICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9y
bS0+eigpLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6
CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6CisgICAg
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o6CisgICAgICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgorICAgICAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTogeworICAgICAgICAgICAgICAgIFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8VHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pd
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBw
ZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0
cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEVfWDoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpST1RBVEVfWToKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVf
M0Q6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOiB7CisgICAg
ICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVy
YXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJh
dGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3Jt
LT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgdHJhbnNmb3JtLT5hbmdsZSgp
LCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOgorICAgICAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKKyAgICAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTS0VXOiB7CisgICAgICAgICAgICAgICAgU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbio+
KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9ucygpLmFwcGVuZChTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSwg
b3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDogeworICAgICAgICAg
ICAgICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9u
cygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtID0g
dHJhbnNmb3JtLT5tYXRyaXgoKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVy
YXRpb25zKCkuYXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG0uYSgpLCBt
LmIoKSwgbS5jKCksIG0uZCgpLCBtLmUoKSwgbS5mKCkpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpN
QVRSSVhfM0Q6IHsKKyAgICAgICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiog
dHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qPihtX2tl
eWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgICAg
IGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPm1hdHJpeCgpKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
UEVSU1BFQ1RJVkU6IHsKKyAgICAgICAgICAgICAgICBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoUGVyc3BlY3RpdmVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCkpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWTogeworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZh
bHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgorICAgICAgICAgICAgICAgIC8vIERvIG5v
dGhpbmcuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IC8vIHN3aXRjaAor
ICAgICAgICB9IC8vIGZvciBlYWNoIG9wZXJhdGlvbgorICAgICAgICBrZXlmcmFtZXMuYXBwZW5k
KGtleWZyYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdCwgY29u
c3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdAoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybU1hdHJpeDsKKworICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCkudGlt
ZSkgeworICAgICAgICBtX2tleWZyYW1lcy5maXJzdCgpLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwg
dHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybU1hdHJpeDsKKyAgICB9
CisKKyAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCkudGltZSkgeworICAgICAgICBtX2tl
eWZyYW1lcy5sYXN0KCkudmFsdWUuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOwor
ICAgICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OworICAgIH0KKworICAgIHNpemVfdCBpID0g
MDsKKyAgICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAg
ICBpZiAodCA8IG1fa2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIC8vIEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rpb24gaGVyZS4KKyAgICBkb3Vi
bGUgcHJvZ3Jlc3MgPSAodCAtIG1fa2V5ZnJhbWVzW2ldLnRpbWUpIC8gKG1fa2V5ZnJhbWVzW2kr
MV0udGltZSAtIG1fa2V5ZnJhbWVzW2ldLnRpbWUpOworCisgICAgaWYgKG1fa2V5ZnJhbWVzW2ld
LnZhbHVlLm9wZXJhdGlvbnNNYXRjaChtX2tleWZyYW1lc1tpKzFdLnZhbHVlKSkgeworICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fa2V5ZnJhbWVzW2krMV0udmFsdWUuc2l6ZSgpOyAr
K2opCisgICAgICAgICAgICBtX2tleWZyYW1lc1tpKzFdLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS0+
YmxlbmQobV9rZXlmcmFtZXNbaV0udmFsdWUuYXQoaiksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNm
b3JtTWF0cml4LCBsYXllclNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHNvdXJjZTsKKworICAgICAgICBtX2tleWZyYW1lc1tpXS52YWx1ZS5hcHBseShs
YXllclNpemUsIHNvdXJjZSk7CisgICAgICAgIG1fa2V5ZnJhbWVzW2krMV0udmFsdWUuYXBwbHko
bGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOworCisgICAgICAgIHRyYW5zZm9ybU1hdHJpeC5i
bGVuZChzb3VyY2UsIHByb2dyZXNzKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJhbnNmb3JtTWF0
cml4OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1
cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWIxZjJmYWRjOTU0MWYzMzc1YTlh
MDhlZjlmNDIwOTYyMWVmYzg1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaApA
QCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0tleWZyYW1lZEFuaW1h
dGlvbkN1cnZlX2gKKyNkZWZpbmUgQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCisKKyNpbmNs
dWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2
ZS5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENDRmxvYXRLZXlmcmFtZSB7Cisg
ICAgQ0NGbG9hdEtleWZyYW1lKGRvdWJsZSB0aW1lLCBmbG9hdCB2YWx1ZSkKKyAgICAgICAgOiB0
aW1lKHRpbWUpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIGRv
dWJsZSB0aW1lOworICAgIGZsb2F0IHZhbHVlOworfTsKKworc3RydWN0IENDVHJhbnNmb3JtS2V5
ZnJhbWUgeworICAgIENDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUpCisgICAgICAgIDog
dGltZSh0aW1lKQorICAgIHsKKyAgICB9CisKKyAgICBDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJs
ZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSkKKyAgICAgICAgOiB0aW1l
KHRpbWUpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIGRvdWJs
ZSB0aW1lOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgdmFsdWU7Cit9OworCitjbGFzcyBDQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZl
IHsKK3B1YmxpYzoKKyAgICAvLyBJdCBpcyByZXF1aXJlZCB0aGF0IHRoZSBrZXlmcmFtZXMgYmUg
c29ydGVkIGJ5IHRpbWUuCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlPiBjcmVhdGUoY29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4mIGtleWZy
YW1lcyk7CisKKyAgICB2aXJ0dWFsIH5DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoKTsK
KworICAgIC8vIENDQW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGRv
dWJsZSBkdXJhdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0FuaW1hdGlv
bkN1cnZlPiBjbG9uZSgpIGNvbnN0OworCisgICAgLy8gQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIGlt
cGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZl
KGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+Jik7CisKKyAgICAvLyBBbHdheXMgc29ydGVk
IGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdvIGtleWZyYW1lcyBoYXZlIHRoZQor
ICAgIC8vIHNhbWUgdGltZS4KKyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBtX2tleWZyYW1l
czsKK307CisKK2NsYXNzIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgOiBwdWJs
aWMgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgLy8gSXQgaXMgcmVx
dWlyZWQgdGhhdCB0aGUga2V5ZnJhbWVzIGJlIHNvcnRlZCBieSB0aW1lLgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGNyZWF0ZShjb25z
dCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcyk7CisKKyAgICB2aXJ0dWFs
IH5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICAvLyBDQ0FuaW1h
dGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBj
b25zdDsKKworICAgIC8vIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24K
KyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25z
dCBJbnRTaXplJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4m
KTsKKworICAgIC8vIEFsd2F5cyBzb3J0ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyB0aW1lLiBO
byB0d28ga2V5ZnJhbWVzIGhhdmUgdGhlCisgICAgLy8gc2FtZSB0aW1lLgorICAgIFZlY3RvcjxD
Q1RyYW5zZm9ybUtleWZyYW1lPiBtX2tleWZyYW1lczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDk0NTUxZDlj
MGYyYWFhYTI4NzhmMDZmOWYwYjVjMGM4M2I0YjViNzYuLjRkODk3YjQxZTMxZDJkZmY0YmVhMjlk
ZjdmMzEzM2U2NzQxZmQ5YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKQEAgLTI4LDExICsyOCw3MSBAQAogCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKICNpbmNsdWRlICJjYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLRVlGUkFN
RSwgdHlwZW5hbWUgVkFMVUU+Cit2b2lkIGFwcGVuZEtleWZyYW1lKFZlY3RvcjxLRVlGUkFNRT4m
IGtleWZyYW1lcywgZG91YmxlIGtleVRpbWUsIGNvbnN0IFZBTFVFKiB2YWx1ZSkKK3sKKyAgICBr
ZXlmcmFtZXMuYXBwZW5kKEtFWUZSQU1FKGtleVRpbWUsIHZhbHVlLT52YWx1ZSgpKSk7Cit9CisK
K3RlbXBsYXRlIDw+Cit2b2lkIGFwcGVuZEtleWZyYW1lPENDVHJhbnNmb3JtS2V5ZnJhbWUsIFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlPihWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZy
YW1lcywgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwg
KnZhbHVlLT52YWx1ZSgpKSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBWQUxVRSwgY2xhc3MgS0VZ
RlJBTUUsIGNsYXNzIENVUlZFPgorUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0
IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVfdCBncm91cElk
LCBkb3VibGUgdGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRh
cmdldFByb3BlcnR5KQoreworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50
IGRpcmVjdGlvbnMuCisgICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRGlyZWN0aW9u
U2V0KCkgJiYgYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBGSVhN
RTogYWRkIHN1cHBvcnQgZm9yIGRlbGF5CisgICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24t
PmlzRGVsYXlTZXQoKSAmJiBhbmltYXRpb24tPmRlbGF5KCkgPiAwKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZmlsbHMgZm9yd2FyZHMg
YW5kIGZpbGxzIGJhY2t3YXJkcworICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0Zp
bGxNb2RlU2V0KCkgJiYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpIHx8IGFuaW1hdGlvbi0+
ZmlsbHNCYWNrd2FyZHMoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVmVjdG9y
PEtFWUZSQU1FPiBrZXlmcmFtZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVl
TGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBWQUxVRSogb3JpZ2luYWxWYWx1ZSA9
IHN0YXRpY19jYXN0PGNvbnN0IFZBTFVFKj4odmFsdWVMaXN0LmF0KGkpKTsKKworICAgICAgICAv
LyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHRpbWluZyBmdW5jdGlvbnMuCisgICAgICAgIGlmIChv
cmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpICYmIG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1
bmN0aW9uKCktPnR5cGUoKSAhPSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb24pCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBkb3VibGUgZHVyYXRpb24gPSAoYW5p
bWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlvblNldCgpKSA/IGFuaW1hdGlvbi0+ZHVyYXRp
b24oKSA6IDE7CisgICAgICAgIGFwcGVuZEtleWZyYW1lKGtleWZyYW1lcywgb3JpZ2luYWxWYWx1
ZS0+a2V5VGltZSgpICogZHVyYXRpb24sIG9yaWdpbmFsVmFsdWUpOworICAgIH0KKworICAgIE93
blB0cjxDVVJWRT4gY3VydmUgPSBDVVJWRTo6Y3JlYXRlKGtleWZyYW1lcyk7CisKKyAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0gPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1
cnZlLnJlbGVhc2UoKSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRhcmdldFByb3BlcnR5KTsKKwor
ICAgIEFTU0VSVChhbmltLmdldCgpKTsKKworICAgIGlmIChhbmltLmdldCgpKSB7CisgICAgICAg
IGludCBpdGVyYXRpb25zID0gKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzSXRlcmF0aW9uQ291
bnRTZXQoKSkgPyBhbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgOiAxOworICAgICAgICBhbmlt
LT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlvbnMpOworICAgIH0KKworICAgIHJldHVybiBhbmltLnJl
bGVhc2UoKTsKK30KKworfSAvLyBuYW1lcGFjZQorCiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQogewogfQpAQCAtNDYsMTMgKzEwNiwyMiBA
QCBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKTsKIH0KIAotYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQW5pbWF0
aW9uKiBhbmltYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGFuaW1hdGlvbklkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBncm91cElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSB0aW1lT2Zmc2V0KQorYm9vbCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxp
c3QsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgaW50IGFuaW1h
dGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CisgICAgaWYgKCFhbmlt
YXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gdG9BZGQ7CisgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5pbWF0
aW9uPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgYW5pbWF0
aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0p
OworICAgIGVsc2UgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlP
cGFjaXR5KQorICAgICAgICB0b0FkZCA9IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbjxGbG9hdEFuaW1h
dGlvblZhbHVlLCBDQ0Zsb2F0S2V5ZnJhbWUsIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2
ZT4odmFsdWVMaXN0LCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7CisKKyAgICBpZiAodG9BZGQuZ2V0KCkpIHsK
KyAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLmFwcGVuZCh0b0FkZC5yZWxlYXNlKCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IGVmOGYxYmRi
MWI0ZWRhMTQzNTY3NTIyNTBjN2NiNzZmYjg1ZThmNDguLjA2ODIxMzA0N2Y0MmFjNWIyYTMxYjBi
NjZkZjczNzQ1ZDJjNWYyMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuaApAQCAtNTYsOCArNTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gYXJlIGtlcHQg
aW4gc3luYy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgaW1w
bCB0aHJlYWQgY29udHJvbGxlci4KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVBbmltYXRp
b25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOwogCi0gICAgLy8gVGhpcyBpcyBm
b3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgotICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+ID4mIGFjdGl2ZUFuaW1hdGlvbnMoKSB7IHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnM7
IH0KKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7IH0KKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5p
bWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwog
CiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKQEAgLTY4LDcg
KzY4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1h
aW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CiAgICAgdm9pZCBwdXNo
QW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKIAot
ICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAgICAgdm9pZCByZW1vdmUoaW50IGdy
b3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICBWZWN0b3I8
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCmluZGV4
IDRmNzI3OThjYTljNzc2ZWJiMzJhZjM3MTFlNmU1ZjRjODA3N2ZkZGQuLjIwOTZjZTM5ODJjZTg5
MDUzZjk3YTQzMWNjNDZlNGE5NzI5MzY1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApAQCAtMjAxLDcgKzIwMSw3IEBAIHZv
aWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyhkb3VibGUg
bm93KQogICAgICAgICAgICAgc3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFBy
b3BlcnR5KCkpIHsKIAogICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNm
b3JtOiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSog
dHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmFuaW1hdGlv
bkN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9
IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91
bmRzKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmlu
aXNoZWRBdChub3cpKQogICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbm93KTsKQEAgLTIxMSw3
ICsyMTEsNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1h
dGlvbnMoZG91YmxlIG5vdykKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eTogewotICAgICAgICAgICAgICAgIGNvbnN0IENDRmxvYXRB
bmltYXRpb25DdXJ2ZSogZmxvYXRBbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+YW5pbWF0aW9uQ3VydmUoKS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisgICAgICAgICAg
ICAgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBmbG9hdEFuaW1hdGlvbkN1cnZlID0g
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKTsK
ICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gZmxvYXRBbmltYXRpb25DdXJ2
ZS0+Z2V0VmFsdWUodHJpbW1lZCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG5vdykpCiAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBu
b3cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggYTQyMjQwMTdjMjI2MWFhYjdi
ZWMyMGUyYzg5NTlmMzA0YzZjZWRhMC4uZTkxZTMzNmRiZGIzZWNiZGM5NGE5NGFhMGIwMjQ1OWM3
NDk4ZDQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02Niw2ICs2Niw3IEBA
CiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3Rz
L0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCmluZGV4IDBlMDYxNTczNDE4YTA5
MDFiNTU4MTY5Y2UwMTZjYzM4ZDkwMzgxZWQuLjlhMWU0ZGEyMWI5MjAyMWIzNTczYjMxZWMzZTEw
MzYxOWJjMWM5NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NB
bmltYXRpb25UZXN0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKQEAgLTI4LDkgKzI4LDMwIEBACiAKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3ZvaWQgYWRkT3BhY2l0
eVRyYW5zaXRpb24oVCYgdGFyZ2V0LCBkb3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0T3BhY2l0
eSwgZmxvYXQgZW5kT3BhY2l0eSkKK3sKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2
YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOworICAgIGlmIChkdXJhdGlvbiA+IDApCisg
ICAgICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgc3RhcnRPcGFj
aXR5KSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZShkdXJhdGlv
biwgZW5kT3BhY2l0eSkpOworCisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5p
bWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsK
KworICAgIEludFNpemUgYm94U2l6ZTsKKworICAgIHRhcmdldC5hZGRBbmltYXRpb24odmFsdWVz
LCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAsIDApOworfQorCit9IC8vIG5hbWVzcGFj
ZQorCiBuYW1lc3BhY2UgV2ViS2l0VGVzdHMgewogCiBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKQpAQCAtOTksMTkgKzEyMCwxNCBAQCBQYXNzT3duUHRy
PFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IEZha2VGbG9hdFRyYW5zaXRpb246OmNsb25lKCkg
Y29uc3QKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oKnRoaXMp
KTsKIH0KIAotdm9pZCBhZGRPcGFjaXR5VHJhbnNpdGlvbihXZWJDb3JlOjpMYXllckNocm9taXVt
JiBsYXllciwgZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9w
YWNpdHkpCit2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKFdlYkNvcmU6OkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyJiBjb250cm9sbGVyLCBkb3VibGUgZHVyYXRpb24sIGZs
b2F0IHN0YXJ0T3BhY2l0eSwgZmxvYXQgZW5kT3BhY2l0eSkKIHsKLSAgICBXZWJDb3JlOjpLZXlm
cmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgIGlmIChk
dXJhdGlvbiA+IDApCi0gICAgICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFs
dWUoMCwgc3RhcnRPcGFjaXR5KSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRp
b25WYWx1ZShkdXJhdGlvbiwgZW5kT3BhY2l0eSkpOwotCi0gICAgUmVmUHRyPEFuaW1hdGlvbj4g
YW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0
aW9uKDEpOwotCi0gICAgSW50U2l6ZSBib3hTaXplOworICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9u
KGNvbnRyb2xsZXIsIGR1cmF0aW9uLCBzdGFydE9wYWNpdHksIGVuZE9wYWNpdHkpOworfQogCi0g
ICAgbGF5ZXIuYWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAw
LCAwLCAwKTsKK3ZvaWQgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0xheWVyKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW0mIGxheWVyLCBkb3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0T3BhY2l0eSwgZmxv
YXQgZW5kT3BhY2l0eSkKK3sKKyAgICBhZGRPcGFjaXR5VHJhbnNpdGlvbihsYXllciwgZHVyYXRp
b24sIHN0YXJ0T3BhY2l0eSwgZW5kT3BhY2l0eSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dFRlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0
aW9uVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlv
blRlc3RDb21tb24uaAppbmRleCA5Zjk2NGU0NDJlZGNjNGVkNmYwNTc5NmYwNmMxOGE3OGZmMGFl
ZjljLi5kMTNlNzRjYTE3MWVlOTM5YmM2MTBmOTM0YjAzMzg2ZDE2NzY3ZGNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgTGF5ZXJD
aHJvbWl1bTsKIH0KIApAQCAtOTQsNyArOTUsOSBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6Oklu
dFNpemUgbV9ib3VuZHM7CiB9OwogCi12b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW0mLCBkb3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0T3BhY2l0eSwgZmxv
YXQgZW5kT3BhY2l0eSk7Cit2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyJiwgZG91YmxlIGR1cmF0aW9uLCBmbG9h
dCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9wYWNpdHkpOworCit2b2lkIGFkZE9wYWNpdHlUcmFu
c2l0aW9uVG9MYXllcihXZWJDb3JlOjpMYXllckNocm9taXVtJiwgZG91YmxlIGR1cmF0aW9uLCBm
bG9hdCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9wYWNpdHkpOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXRUZXN0cwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
S2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3NzMy
YWVhYjc0MjdkZTM4YzdkNzQ3ZDk1NzAxNjY5OTgxZTZmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0
LmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVk
ZSAiTGVuZ3RoLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisK
KyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK3ZvaWQgZXhwZWN0VHJhbnNsYXRlWChk
b3VibGUgdHJhbnNsYXRlWCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK3sK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFR5cGU7
CisgICAgbWF0cml4LmRlY29tcG9zZShkZWNvbXBvc2VkVHlwZSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKHRyYW5zbGF0ZVgsIGRlY29tcG9zZWRUeXBlLnRyYW5zbGF0ZVgpOworfQorCisvLyBUZXN0
cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggb25lIGtleWZyYW1lIHdvcmtzIGFzIGV4cGVj
dGVkLgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lRmxvYXRLZXlmcmFt
ZSkKK3sKKyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAga2V5ZnJh
bWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgMikpOworICAgIE93blB0cjxDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2
ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0
VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0
aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b0Zsb2F0S2V5ZnJhbWUpCit7CisgICAgVmVjdG9yPEND
RmxvYXRLZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtl
eWZyYW1lKDAsIDIpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgxLCA0
KSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+
Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgx
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7Cit9CisKKy8v
IFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3Mg
YXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZUZs
b2F0S2V5ZnJhbWUpCit7CisgICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4ga2V5ZnJhbWVzOwor
ICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDIpKTsKKyAgICBrZXlmcmFt
ZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgxLCA0KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChD
Q0Zsb2F0S2V5ZnJhbWUoMiwgOCkpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtl
eWZyYW1lcykpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0
LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0
VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7Cit9CisKKy8vIFRl
c3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlzIGF0IGEgZ2l2ZW4g
dGltZSB3b3JrcyBzYW5lbHkuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBS
ZXBlYXRlZEZsb2F0S2V5VGltZXMpCit7CisgICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4ga2V5
ZnJhbWVzOworICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KKyAgICBrZXlmcmFtZXMuYXBwZW5kKEND
RmxvYXRLZXlmcmFtZSgwLCA0KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJh
bWUoMSwgNCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDEsIDYpKTsK
KyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgyLCA2KSk7CisgICAgT3duUHRy
PENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
NCwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5n
ZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUp
KTsKKworICAgIC8vIFRoZXJlIGlzIGEgZGlzY29udGludWl0eSBhdCAxLiBBbnkgdmFsdWUgYmV0
d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgorICAgIGZsb2F0IHZhbHVlID0gY3VydmUtPmdldFZhbHVl
KDEpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlID49IDQgJiYgdmFsdWUgPD0gNik7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2
ZS0+Z2V0VmFsdWUoMykpOworfQorCisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0
aW9uIHdpdGggb25lIGtleWZyYW1lIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZyYW1l
ZEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lVHJhbnNmb3JtS2V5ZnJhbWUpCit7CisgICAgVmVjdG9y
PENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBrZXlmcmFtZXMu
YXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9ucykpOworICAgIE93blB0cjxD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgSW50U2l6ZSBsYXll
clNpemU7IC8vIGlnbm9yZWQKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1
ZSgtMSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoMCwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoMC41LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRW
YWx1ZSgxLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRW
YWx1ZSgyLCBsYXllclNpemUpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmlt
YXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvVHJhbnNmb3JtS2V5ZnJhbWUpCit7CisgICAgVmVj
dG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3Ro
KDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygp
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4
ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7
CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMx
KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMyKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMp
KTsKKyAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAorICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xh
dGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xh
dGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkpOworfQorCisvLyBUZXN0cyB0
aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3b3JrcyBhcyBl
eHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlVHJhbnNm
b3JtS2V5ZnJhbWUpCit7CisgICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZyYW1l
czsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMx
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
TGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEVfWCkpOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAg
b3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zMzsKKyAgICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg4LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCks
IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5k
KENDVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpKTsKKyAgICBrZXlmcmFtZXMuYXBw
ZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpKTsKKyAgICBrZXlmcmFtZXMu
YXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczMpKTsKKyAgICBPd25QdHI8
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIEludFNpemUgbGF5
ZXJTaXplOyAvLyBpZ25vcmVkCisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoLTEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZh
bHVlKDAsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMywgY3VydmUtPmdldFZh
bHVlKDAuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoMSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0
VmFsdWUoMS41LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5n
ZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5n
ZXRWYWx1ZSgzLCBsYXllclNpemUpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBh
bmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlzIGF0IGEgZ2l2ZW4gdGltZSB3b3JrcyBzYW5lbHku
CitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBSZXBlYXRlZFRyYW5zZm9ybUtl
eVRpbWVzKQoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7Cisg
ICAgLy8gQSBzdGVwIGZ1bmN0aW9uLgorICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgw
LCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlvbnMzLm9wZXJhdGlvbnMoKS5h
cHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZpeGVk
KSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwor
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczQ7CisgICAgb3BlcmF0aW9uczQub3Bl
cmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgoNiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURV9YKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAsIG9w
ZXJhdGlvbnMxKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEs
IG9wZXJhdGlvbnMyKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1l
KDEsIG9wZXJhdGlvbnMzKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZy
YW1lKDIsIG9wZXJhdGlvbnM0KSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNy
ZWF0ZShrZXlmcmFtZXMpKTsKKworICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCisK
KyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUp
KTsKKworICAgIC8vIFRoZXJlIGlzIGEgZGlzY29udGludWl0eSBhdCAxLiBBbnkgdmFsdWUgYmV0
d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlID0g
Y3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6
OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zZWRUeXBlOworICAgIHZhbHVlLmRlY29tcG9zZShkZWNv
bXBvc2VkVHlwZSk7CisgICAgRVhQRUNUX1RSVUUoZGVjb21wb3NlZFR5cGUudHJhbnNsYXRlWCA+
PSA0ICYmIGRlY29tcG9zZWRUeXBlLnRyYW5zbGF0ZVggPD0gNik7CisKKyAgICBleHBlY3RUcmFu
c2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDMsIGxheWVyU2l6ZSkpOworfQorCisvLyBUZXN0
cyB0aGF0IGludmFsaWQgbGlzdHMgb2Yga2V5ZnJhbWVzIHJlc3VsdCBpbiBub3RoaW5nIGJlaW5n
IHJldHVybmVkIGZyb20gOjpjcmVhdGUuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVU
ZXN0LCBJbnZhbGlkS2V5ZnJhbWVzKQoreworICAgIC8vIEl0IGlzIGludmFsaWQgdG8gcGFzcyBh
biBlbXB0eSB2ZWN0b3Igb2Yga2V5ZnJhbWVzIHRvIGNyZWF0ZS4KKyAgICBWZWN0b3I8Q0NUcmFu
c2Zvcm1LZXlmcmFtZT4gdHJhbnNmb3JtS2V5ZnJhbWVzOworICAgIE93blB0cjxDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiB0cmFuc2Zvcm1DdXJ2ZSA9IENDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSh0cmFuc2Zvcm1LZXlmcmFtZXMpOworICAgIEVY
UEVDVF9GQUxTRSh0cmFuc2Zvcm1DdXJ2ZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8Q0NGbG9hdEtl
eWZyYW1lPiBmbG9hdEtleWZyYW1lczsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlPiBmbG9hdEN1cnZlID0gQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpj
cmVhdGUoZmxvYXRLZXlmcmFtZXMpOworICAgIEVYUEVDVF9GQUxTRShmbG9hdEN1cnZlLmdldCgp
KTsKKworICAgIC8vIEl0IGlzIGludmFsaWQgdG8gcGFzcyBhIHZlY3RvciBvZiB1bnNvcnRlZCBr
ZXlmcmFtZXMgdG8gY3JlYXRlOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7
CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB0cmFuc2Zvcm1L
ZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczEpKTsKKyAg
ICB0cmFuc2Zvcm1LZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0
aW9uczIpKTsKKyAgICB0cmFuc2Zvcm1DdXJ2ZSA9IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmNyZWF0ZSh0cmFuc2Zvcm1LZXlmcmFtZXMpOworICAgIEVYUEVDVF9GQUxTRSh0
cmFuc2Zvcm1DdXJ2ZS5nZXQoKSk7CisKKyAgICBmbG9hdEtleWZyYW1lcy5hcHBlbmQoQ0NGbG9h
dEtleWZyYW1lKDEsIDIpKTsKKyAgICBmbG9hdEtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZy
YW1lKDAsIDQpKTsKKyAgICBmbG9hdEN1cnZlID0gQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoZmxvYXRLZXlmcmFtZXMpOworICAgIEVYUEVDVF9GQUxTRShmbG9hdEN1cnZl
LmdldCgpKTsKK30KKworCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3Qu
Y3BwCmluZGV4IDZlY2MxZmZhODJlOGU1YjYyOWQ2ZWMxYmYwNjhiZGNhYWQ1Nzg2NjkuLmM0ZjEw
M2EzY2FmZTQ2OGU0YjhlNzk3ODZkMmIyMTg3ZTQ1ZDdlYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyVGVzdC5jcHAKQEAgLTI3LDYgKzI3LDEyIEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRl
ICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKwogI2luY2x1ZGUg
PGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CkBAIC0zNiwyMiArNDIsOTUgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3Rz
OwogCiBuYW1lc3BhY2UgewogCit2b2lkIGV4cGVjdFRyYW5zbGF0ZVgoZG91YmxlIHRyYW5zbGF0
ZVgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zZWRUeXBlOworICAgIG1hdHJpeC5k
ZWNvbXBvc2UoZGVjb21wb3NlZFR5cGUpOworICAgIEVYUEVDVF9GTE9BVF9FUSh0cmFuc2xhdGVY
LCBkZWNvbXBvc2VkVHlwZS50cmFuc2xhdGVYKTsKK30KKwogUGFzc093blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2
ZT4gY3VydmUsIGludCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3Bl
cnR5KQogewogICAgIHJldHVybiBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLCAwLCBp
ZCwgcHJvcGVydHkpOwogfQogCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwg
Y3JlYXRlT3BhY2l0eUFuaW1hdGlvbikKK3sKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgp
KTsKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1l
VmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CisgICAgdmFsdWVzLmlu
c2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgwLCAwKSk7CisgICAgdmFsdWVzLmluc2VydChu
ZXcgRmxvYXRBbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgMSkpOworCisgICAgUmVmUHRyPEFuaW1h
dGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNl
dER1cmF0aW9uKGR1cmF0aW9uKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBjb250cm9s
bGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAs
IDApOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworCisgICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRyb2xsZXIt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7CisgICAg
RVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKworICAgIEVYUEVDVF9FUSgxLCBhY3RpdmVB
bmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5LCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAgRVhQ
RUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OkZsb2F0LCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCkt
PnR5cGUoKSk7CisKKyAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0
aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBF
Q1RfVFJVRShjdXJ2ZSk7CisKKyAgICBFWFBFQ1RfRVEoMCwgY3VydmUtPmdldFZhbHVlKDApKTsK
KyAgICBFWFBFQ1RfRVEoMSwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uKSk7Cit9CisKK1RFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb24p
Cit7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgY29uc3QgZG91YmxlIGR1
cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZp
eGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNl
cnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOworCisgICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRp
b25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0
LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJh
dGlvbiwgJm9wZXJhdGlvbnMyKSk7CisKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24g
PSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRp
b24pOworCisgICAgSW50U2l6ZSBib3hTaXplOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlv
bih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7CisKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisKKyAgICBDQ0FjdGl2
ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOworICAgIEVYUEVDVF9UUlVFKGFj
dGl2ZUFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVy
YXRpb25zKCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBh
Y3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAgRVhQRUNUX0VRKENDQW5p
bWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkp
OworCisgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVB
bmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBF
Q1RfVFJVRShjdXJ2ZSk7CisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1
ZSgwLCBib3hTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUo
ZHVyYXRpb24sIGJveFNpemUpKTsKK30KKwogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QsIHN5bmNOZXdBbmltYXRpb24pCiB7CiAgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbD4gY29udHJvbGxlckltcGwoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgpKTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBj
b250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVt
bXkpKTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKIAogICAgIEVYUEVDVF9GQUxT
RShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5k
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlv
bkN1cnZlKCkpLCAwLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGFkZE9w
YWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250cm9sbGVyLCAxLCAwLCAxKTsKIAogICAg
IGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7
CiAKQEAgLTYyLDE0ICsxNDEsMTIgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRl
c3QsIHN5bmNOZXdBbmltYXRpb24pCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dCwgc3luY0FuaW1hdGlvblByb3BlcnRpZXMpCiB7CiAgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcj4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSgpKTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
PiBjb250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgm
ZHVtbXkpKTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xs
ZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKIAogICAgIEVYUEVDVF9G
QUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hY3RpdmVBbmltYXRpb25zKCkuYXBw
ZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1h
dGlvbkN1cnZlKCkpLCAwLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGFk
ZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250cm9sbGVyLCAxLCAwLCAxKTsKIAog
ICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQo
KSk7CiAKQEAgLTg3LDE0ICsxNjQsMTIgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QsIHN5bmNBbmltYXRpb25Qcm9wZXJ0aWVzKQogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QsIHN5bmNBYm9ydGVkQW5pbWF0aW9uKQogewogICAgIEZha2VMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKAotICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbD4gY29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpj
cmVhdGUoJmR1bW15KSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBj
b250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CiAKICAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YWN0aXZlQW5pbWF0aW9u
cygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29udHJvbGxlcigqY29udHJvbGxlciwgMSwgMCwg
MSk7CiAKICAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlcklt
cGwuZ2V0KCkpOwogCkBAIC0xMTIsMTQgKzE4NywxMiBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyVGVzdCwgc3luY0Fib3J0ZWRBbmltYXRpb24pCiBURVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyVGVzdCwgc3luY0NvbXBsZXRlZEFuaW1hdGlvbikKIHsKICAgICBGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbCgKLSAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6Y3JlYXRlKCZkdW1teSkpOworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOwog
CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFjdGl2ZUFu
aW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0NvbnRyb2xsZXIoKmNvbnRyb2xsZXIs
IDEsIDAsIDEpOwogCiAgICAgY29udHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRy
b2xsZXJJbXBsLmdldCgpKTsKIApAQCAtMTMyLDExICsyMDUsMTEgQEAgVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNDb21wbGV0ZWRBbmltYXRpb24pCiAgICAgY29udHJv
bGxlckltcGwtPmFuaW1hdGUoMiwgKmV2ZW50cyk7CiAKICAgICBFWFBFQ1RfRkFMU0UoY29udHJv
bGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwotICAgIEVYUEVDVF9FUShzaXplX3QoMSksIGNvbnRyb2xsZXItPmFjdGl2ZUFuaW1hdGlv
bnMoKS5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKIAogICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9s
bGVySW1wbC5nZXQoKSk7CiAKLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBjb250cm9sbGVyLT5h
Y3RpdmVBbmltYXRpb25zKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXgg
ODI2MDk4OWE1NGJmMDViMDQwMzMwYWMzZDQ5NDM4MjQ3NzNmOWZlYy4uNjI2NDcwYTM2OGYyN2Jh
MGI0OWNmNGU5ZDdiNzIxZTVjMDQzOTVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0xNTEsMjUgKzE1MSw2IEBA
IHByaXZhdGU6CiAgICAgVGVzdEhvb2tzKiBtX3Rlc3RIb29rczsKIH07CiAKLS8vIEFkYXB0cyBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciBmb3IgdGVzdC4gQWRkcyBhIGR1bW15IGltcGxlbWVu
dGF0aW9uIG9mIGFkZEFuaW1hdGlvbiB0aGF0IGluc2VydHMgYSBmbG9hdCBhbmltYXRpb24uCi0v
LyBGSVhNRTogb25jZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uIGlz
IGltcGxlbWVudGVkLCB0aGF0IGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZGlyZWN0bHkgYW5k
IHRoaXMKLS8vIGNsYXNzIGNhbiBiZSByZW1vdmVkLgotY2xhc3MgTW9ja0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlciA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBhZGRB
bmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXpl
LCBjb25zdCBBbmltYXRpb24qLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUg
dGltZU9mZnNldCkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IDA7Ci0gICAgICAg
IGFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbihkdXJhdGlvbiwgMSwgMCkpLCBhbmltYXRpb25J
ZCwgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotfTsKLQogY2xhc3MgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRFdpdGhUZXh0dXJlVHJhY2tpbmcgOiBwdWJsaWMgQ29tcG9zaXRvckZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q29tcG9zaXRvckZh
a2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+IGNyZWF0ZShBdHRyaWJ1
dGVzIGF0dHJzKQpAQCAtMzY0LDcgKzM0NSw3IEBAIHByb3RlY3RlZDoKICAgICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2Vs
Zik7CiAgICAgICBBU1NFUlQodGVzdCk7CiAgICAgICBpZiAodGVzdC0+bV9sYXllclRyZWVIb3N0
ICYmIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCi0gICAgICAgICAgdGVzdC0+
bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQW5pbWF0aW9uKEtleWZyYW1lVmFsdWVM
aXN0KEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSwgSW50U2l6ZSgpLCAwLCAwLCAwLCAwLjApOwor
ICAgICAgICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9MYXllcigqdGVzdC0+bV9sYXllclRyZWVI
b3N0LT5yb290TGF5ZXIoKSwgMCwgMCwgMSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgZGlz
cGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRDb21taXQodm9pZCogc2VsZikKQEAgLTUxNyw3ICs0OTgs
NiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvQmVnaW5UZXN0KCkKICAgICBtX2xheWVy
VHJlZUhvc3QgPSBNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKHRoaXMsIG1fY2xpZW50LmdldCgp
LCByb290TGF5ZXIsIG1fc2V0dGluZ3MpOwogICAgIEFTU0VSVF9UUlVFKG1fbGF5ZXJUcmVlSG9z
dCk7CiAgICAgcm9vdExheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQo
KSk7Ci0gICAgcm9vdExheWVyLT5zZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoTW9ja0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOwogCiAgICAgbV9iZWdpbm5pbmcgPSB0cnVl
OwogICAgIGJlZ2luVGVzdCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128547</attachid>
            <date>2012-02-23 13:42:54 -0800</date>
            <delta_ts>2012-02-23 21:30:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77229-20120223164253.patch</filename>
            <type>text/plain</type>
            <size>59262</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTdkNDY4ZDQyODkxMzc5
YjNlNjA3MTU2N2ViMzNhNmYwZTY4ZWM1ZS4uZTBhZmUzMWE2NDY2YmIzZTU3NGEyNWUwNGE5NzM5
NDQ5YzdiYzAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTAyLTIzICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1w
bGVtZW50IGtleWZyYW1lZCBhbmltYXRpb25zIGZvciB0aGUgY2MgdGhyZWFkLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzRmluaXNoZWRBdCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpjdXJ2ZSk6CisgICAgICAg
IChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZl
OjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZTo6fkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6ZHVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6Q0NGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKEND
RmxvYXRLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpD
Q1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAgICAgKENDVHJhbnNmb3JtS2V5ZnJhbWUpOgorICAg
ICAgICAoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKENDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aGFz
QWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyk6CisKIDIwMTItMDItMjIgIElnb3IgT2xpdmVp
cmEgIDxpZ29yLm9Ac2lzYS5zYW1zdW5nLmNvbT4KIAogICAgICAgICBFdmVyeSBjYWxsIHRvIFJl
bmRlck9iamVjdDo6c2V0QW5pbWF0YWJsZVN0eWxlKCkgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgbV9j
b21wb3NpdGVBbmltYXRpb25zOiBwb3RlbnRpYWxseSBPKE5eMikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggZDdiNzQ0ZGZkZjcxOTk3NWI5NTJjOTA5OGQ0OGI1NDY3NjYwNzNlMS4uNzVj
MjBhZDE1OGZkMzExOTlkNmY4YmJmNTI4ODcxODQyNzExOTgzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wMi0yMyAgSWFuIFZvbGxpY2sgIDx2b2xs
aWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBrZXlmcmFt
ZWQgYW5pbWF0aW9ucyBmb3IgdGhlIGNjIHRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9D
Q0FuaW1hdGlvblRlc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjphZGRPcGFjaXR5VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6YWRk
T3BhY2l0eVRyYW5zaXRpb25Ub0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmFk
ZE9wYWNpdHlUcmFuc2l0aW9uVG9MYXllcik6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25U
ZXN0Q29tbW9uLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdFRlc3RzKToK
KyAgICAgICAgKiB0ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpleHBlY3RUcmFuc2xhdGVY
KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6ZXhwZWN0VHJh
bnNsYXRlWCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6
VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoQWRkQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3QpOgorCiAyMDEyLTAyLTIy
ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5PVElG
SUNBVElPTlMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGFzIFBhZ2VTdXBwbGVtZW50CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggZmRjNjBlNDE2OTlkNTBmMGE3N2EwOWNiZmIzMjllY2YyNzNhMjViZS4uZTQz
OGI0YzNkOTgwNTRiMWQ2MjQyYmQzMmI1N2RlODY0ZjQ2ZWQxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzI2NSw2ICszMjY1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTMz
ZDE5YzViMDczM2UwNmI3NGFjNDFjOGFkYWM2YmVkNjVlYTNlMi4uZjcyZDE0MzAzMjA3MzFjNDc4
OWIzY2M3NGM1ZmQ3NTE2ODlhYWM1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEzNSw2
ICsxMzUsMTEgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHIKICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCitib29sIExheWVyQ2hyb21pdW06Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50
KGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCkKIHsKICAgICBtX2lzTm9uQ29tcG9zaXRlZENv
bnRlbnQgPSBpc05vbkNvbXBvc2l0ZWRDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDky
ZmIwMTNmYmI3ZmE3NTk2MjdkNThiZjUxZjMwYjNjZGJiZmZiNzIuLjQ2YWZmMjkzNTVhNDNmNTk3
Mzg4ZDY4YTliNmUzOWE1MDRmMmExY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTIyNCw2ICsy
MjQsNyBAQCBwdWJsaWM6CiAKICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogbGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Z2V0KCk7IH0KICAgICB2b2lkIHNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihQYXNzT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPik7CisgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRp
b24oKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcAppbmRleCA5ZWY1ZmUyNTYyYjZiNDMw
MmQxMWQyYTlkYWFmZDBjMzBjMzI5Zjg4Li44YzAzMDNlZDYyMTBjN2Y0OWJlMWQyZWE1ZWEzMGY5
OGIwNTE5MmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCkBAIC0zOCw3
ICszOCw3IEBAIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1CiB9CiAKIENDQWN0aXZlQW5pbWF0aW9u
OjpDQ0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBp
bnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkKLSAgICA6IG1fYW5pbWF0aW9uQ3VydmUoY3VydmUpCisgICAgOiBtX2N1cnZlKGN1cnZlKQog
ICAgICwgbV9pZChhbmltYXRpb25JZCkKICAgICAsIG1fZ3JvdXAoZ3JvdXBJZCkKICAgICAsIG1f
dGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgQ0NB
Y3RpdmVBbmltYXRpb246OmlzRmluaXNoZWRBdChkb3VibGUgdGltZSkgY29uc3QKIAogICAgIHJl
dHVybiBtX3J1blN0YXRlID09IFJ1bm5pbmcKICAgICAgICAgJiYgbV9pdGVyYXRpb25zID49IDAK
LSAgICAgICAgJiYgbV9pdGVyYXRpb25zICogbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSA8
PSB0aW1lIC0gc3RhcnRUaW1lKCkgLSBtX3RvdGFsUGF1c2VkVGltZTsKKyAgICAgICAgJiYgbV9p
dGVyYXRpb25zICogbV9jdXJ2ZS0+ZHVyYXRpb24oKSA8PSB0aW1lIC0gc3RhcnRUaW1lKCkgLSBt
X3RvdGFsUGF1c2VkVGltZTsKIH0KIAogYm9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0aW5n
KCkgY29uc3QKQEAgLTEwOSwyMCArMTA5LDIwIEBAIGRvdWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICAvLyBJZiBsZXNzIHRoYW4gYW4gaXRlcmF0aW9uIGR1cmF0aW9uLCBqdXN0
IHJldHVybiB0cmltbWVkLgotICAgIGlmICh0cmltbWVkIDwgbV9hbmltYXRpb25DdXJ2ZS0+ZHVy
YXRpb24oKSkKKyAgICBpZiAodHJpbW1lZCA8IG1fY3VydmUtPmR1cmF0aW9uKCkpCiAgICAgICAg
IHJldHVybiB0cmltbWVkOwogCiAgICAgLy8gSWYgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRo
ZSB0b3RhbCBkdXJhdGlvbiwgcmV0dXJuIGl0ZXJhdGlvbiBkdXJhdGlvbi4KLSAgICBpZiAobV9p
dGVyYXRpb25zID49IDAgJiYgdHJpbW1lZCA+PSBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigp
ICogbV9pdGVyYXRpb25zKQotICAgICAgICByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRp
b24oKTsKKyAgICBpZiAobV9pdGVyYXRpb25zID49IDAgJiYgdHJpbW1lZCA+PSBtX2N1cnZlLT5k
dXJhdGlvbigpICogbV9pdGVyYXRpb25zKQorICAgICAgICByZXR1cm4gbV9jdXJ2ZS0+ZHVyYXRp
b24oKTsKIAogICAgIC8vIEZpbmFsbHksIHJldHVybiB4IHdoZXJlIHRyaW1tZWQgPSB4ICsgbiAq
IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIGZvciBzb21lIHBvc2l0aXZlIGludGVnZXIgbi4KLSAg
ICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpKTsKKyAg
ICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2N1cnZlLT5kdXJhdGlvbigpKTsKIH0KIAogUGFzc093
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gQ0NBY3RpdmVBbmltYXRpb246OmNsb25lRm9ySW1wbFRo
cmVhZCgpIGNvbnN0CiB7Ci0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVybihh
ZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9hbmltYXRpb25DdXJ2ZS0+Y2xvbmUoKSwg
bV9pZCwgbV9ncm91cCwgbV90YXJnZXRQcm9wZXJ0eSkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvUmV0dXJuKGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihtX2N1cnZl
LT5jbG9uZSgpLCBtX2lkLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOwogICAgIHRvUmV0
dXJuLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKICAgICB0b1JldHVybi0+bV9pdGVyYXRpb25z
ID0gbV9pdGVyYXRpb25zOwogICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1l
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBY3RpdmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggYWQ5ZTg0ZWU3OTNkZGM3MTc3
Y2VjZmJkMDFlOTVjMTc5ZjdkMjJjOS4uMjA5MzQyMWE3NTA4Zjk1ZmYzNWNjZTEzZjU0NTg2MmYy
NGVkZjNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC05Nyw4ICs5Nyw4
IEBAIHB1YmxpYzoKICAgICBib29sIGlzV2FpdGluZygpIGNvbnN0OwogICAgIGJvb2wgaXNSdW5u
aW5nT3JIYXNSdW4oKSBjb25zdDsKIAotICAgIENDQW5pbWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1
cnZlKCkgeyByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS5nZXQoKTsgfQotICAgIGNvbnN0IENDQW5p
bWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1cnZlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25D
dXJ2ZS5nZXQoKTsgfQorICAgIENDQW5pbWF0aW9uQ3VydmUqIGN1cnZlKCkgeyByZXR1cm4gbV9j
dXJ2ZS5nZXQoKTsgfQorICAgIGNvbnN0IENDQW5pbWF0aW9uQ3VydmUqIGN1cnZlKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJ2ZS5nZXQoKTsgfQogCiAgICAgLy8gVGFrZXMgdGhlIGdpdmVuIGFic29s
dXRlIHRpbWUsIGFuZCB1c2luZyB0aGUgc3RhcnQgdGltZSBhbmQgdGhlIG51bWJlcgogICAgIC8v
IG9mIGl0ZXJhdGlvbnMsIHJldHVybnMgdGhlIHJlbGF0aXZlIHRpbWUgaW4gdGhlIGN1cnJlbnQg
aXRlcmF0aW9uLgpAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ0NB
Y3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwgaW50IGFuaW1hdGlv
bklkLCBpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVydHkpOwogCi0gICAgT3duUHRyPENDQW5pbWF0
aW9uQ3VydmU+IG1fYW5pbWF0aW9uQ3VydmU7CisgICAgT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+
IG1fY3VydmU7CiAKICAgICAvLyBJRHMgYXJlIG5vdCBuZWNlc3NhcmlseSB1bmlxdWUuCiAgICAg
aW50IG1faWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI2MTVjNzM2Y2MwM2YwOTc4OTc3MzVjNGY5MDRjNjc5M2M5OWY4MGYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcApAQCAtMCwwICsxLDIzNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVy
YXRpb24uaCIKKyNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgi
CisjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIHsKKwordGVtcGxhdGUgPGNsYXNzIEtleWZyYW1lPgorYm9vbCBrZXlmcmFtZXNB
cmVTb3J0ZWQoY29uc3QgVmVjdG9yPEtleWZyYW1lPiYga2V5ZnJhbWVzKQoreworICAgIGlmICgh
a2V5ZnJhbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgaWYgKGtl
eWZyYW1lc1tpXS50aW1lID4ga2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UK
KworUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+
JiBrZXlmcmFtZXMpCit7CisgICAgaWYgKCFrZXlmcmFtZXMuc2l6ZSgpIHx8ICFrZXlmcmFtZXNB
cmVTb3J0ZWQoa2V5ZnJhbWVzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZShrZXlmcmFtZXMp
KTsKK30KKworQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpDQ0tleWZyYW1lZEZsb2F0
QW5pbWF0aW9uQ3VydmUoY29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4mIGtleWZyYW1lcykK
KyAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKK3sKK30KKworQ0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlOjp+Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCkKK3sKK30KKwor
ZG91YmxlIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6ZHVyYXRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0KCkudGltZSAtIG1fa2V5ZnJhbWVzLmZpcnN0
KCkudGltZTsKK30KKworUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU6OmNsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSgqdGhpcykpOworfQorCitmbG9hdCBD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0KSBjb25zdAor
eworICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCkudGltZSkKKyAgICAgICAgcmV0dXJu
IG1fa2V5ZnJhbWVzLmZpcnN0KCkudmFsdWU7CisKKyAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5s
YXN0KCkudGltZSkKKyAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS52YWx1ZTsKKwor
ICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7
ICsraSkgeworICAgICAgICBpZiAodCA8IG1fa2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGZsb2F0IHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KCh0IC0gbV9rZXlmcmFtZXNbaV0udGltZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0g
bV9rZXlmcmFtZXNbaV0udGltZSkpOworICAgIC8vIEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rp
b24gaGVyZS4KKyAgICByZXR1cm4gbV9rZXlmcmFtZXNbaV0udmFsdWUgKyAobV9rZXlmcmFtZXNb
aSsxXS52YWx1ZSAtIG1fa2V5ZnJhbWVzW2ldLnZhbHVlKSAqIHByb2dyZXNzOworfQorCitQYXNz
T3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlm
cmFtZT4mIGtleWZyYW1lcykKK3sKKyAgICBpZiAoIWtleWZyYW1lcy5zaXplKCkgfHwgIWtleWZy
YW1lc0FyZVNvcnRlZChrZXlmcmFtZXMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShr
ZXlmcmFtZXMpKTsKK30KKworQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Q0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1L
ZXlmcmFtZT4mIGtleWZyYW1lcykKKyAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKK3sKK30K
KworQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6fkNDS2V5ZnJhbWVkVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KKworZG91YmxlIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlmcmFtZXMu
bGFzdCgpLnRpbWUgLSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWU7Cit9CisKK1Bhc3NPd25QdHI8
Q0NBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y2xv
bmUoKSBjb25zdAoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7
CisgICAgLy8gV2UgbmVlZCB0byBkbyBhIGRlZXAgY29weSBvZiBhbGwgb2YgdGhlIGtleWZyYW1l
cyBzaW5jZSB0aGV5IGNvbnRhaW4gcmVmCisgICAgLy8gcG9pbnRlcnMgdG8gVHJhbnNmb3JtT3Bl
cmF0aW9uIG9iamVjdHMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2tleWZyYW1lcy5z
aXplKCk7ICsraSkgeworICAgICAgICBDQ1RyYW5zZm9ybUtleWZyYW1lIGtleWZyYW1lKG1fa2V5
ZnJhbWVzW2ldLnRpbWUpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fa2V5ZnJh
bWVzW2ldLnZhbHVlLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBUcmFuc2Zvcm1PcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9w
ZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0aW9uVHlwZSgpOworICAgICAgICAgICAgc3dpdGNoIChv
cGVyYXRpb25UeXBlKSB7CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfWDoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgorICAg
ICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6CisgICAgICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6CisgICAgICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKKyAgICAgICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24q
PihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAg
ICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9y
bS0+eigpLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6
CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6CisgICAg
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o6CisgICAgICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgorICAgICAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTogeworICAgICAgICAgICAgICAgIFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8VHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pd
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBw
ZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0
cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEVfWDoKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpST1RBVEVfWToKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVf
M0Q6CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOiB7CisgICAg
ICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVy
YXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJh
dGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3Jt
LT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgdHJhbnNmb3JtLT5hbmdsZSgp
LCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOgorICAgICAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKKyAgICAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTS0VXOiB7CisgICAgICAgICAgICAgICAgU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbio+
KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9ucygpLmFwcGVuZChTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSwg
b3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDogeworICAgICAgICAg
ICAgICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9u
cygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtID0g
dHJhbnNmb3JtLT5tYXRyaXgoKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVy
YXRpb25zKCkuYXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG0uYSgpLCBt
LmIoKSwgbS5jKCksIG0uZCgpLCBtLmUoKSwgbS5mKCkpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpN
QVRSSVhfM0Q6IHsKKyAgICAgICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiog
dHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qPihtX2tl
eWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgICAg
IGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPm1hdHJpeCgpKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
UEVSU1BFQ1RJVkU6IHsKKyAgICAgICAgICAgICAgICBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoUGVyc3BlY3RpdmVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCkpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWTogeworICAgICAgICAgICAgICAgIGtleWZyYW1lLnZh
bHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgorICAgICAgICAgICAgICAgIC8vIERvIG5v
dGhpbmcuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IC8vIHN3aXRjaAor
ICAgICAgICB9IC8vIGZvciBlYWNoIG9wZXJhdGlvbgorICAgICAgICBrZXlmcmFtZXMuYXBwZW5k
KGtleWZyYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdCwgY29u
c3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdAoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybU1hdHJpeDsKKworICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCkudGlt
ZSkgeworICAgICAgICBtX2tleWZyYW1lcy5maXJzdCgpLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwg
dHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybU1hdHJpeDsKKyAgICB9
CisKKyAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCkudGltZSkgeworICAgICAgICBtX2tl
eWZyYW1lcy5sYXN0KCkudmFsdWUuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOwor
ICAgICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OworICAgIH0KKworICAgIHNpemVfdCBpID0g
MDsKKyAgICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAg
ICBpZiAodCA8IG1fa2V5ZnJhbWVzW2krMV0udGltZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIC8vIEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rpb24gaGVyZS4KKyAgICBkb3Vi
bGUgcHJvZ3Jlc3MgPSAodCAtIG1fa2V5ZnJhbWVzW2ldLnRpbWUpIC8gKG1fa2V5ZnJhbWVzW2kr
MV0udGltZSAtIG1fa2V5ZnJhbWVzW2ldLnRpbWUpOworCisgICAgaWYgKG1fa2V5ZnJhbWVzW2ld
LnZhbHVlLm9wZXJhdGlvbnNNYXRjaChtX2tleWZyYW1lc1tpKzFdLnZhbHVlKSkgeworICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fa2V5ZnJhbWVzW2krMV0udmFsdWUuc2l6ZSgpOyAr
K2opCisgICAgICAgICAgICBtX2tleWZyYW1lc1tpKzFdLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS0+
YmxlbmQobV9rZXlmcmFtZXNbaV0udmFsdWUuYXQoaiksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNm
b3JtTWF0cml4LCBsYXllclNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHNvdXJjZTsKKworICAgICAgICBtX2tleWZyYW1lc1tpXS52YWx1ZS5hcHBseShs
YXllclNpemUsIHNvdXJjZSk7CisgICAgICAgIG1fa2V5ZnJhbWVzW2krMV0udmFsdWUuYXBwbHko
bGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOworCisgICAgICAgIHRyYW5zZm9ybU1hdHJpeC5i
bGVuZChzb3VyY2UsIHByb2dyZXNzKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJhbnNmb3JtTWF0
cml4OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1
cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM0ZDY0YWRiMTE5N2FhNjc1YTYw
MzA5MjgyZmNhNmE1NmEzNjY2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaApA
QCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0tleWZyYW1lZEFuaW1h
dGlvbkN1cnZlX2gKKyNkZWZpbmUgQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCisKKyNpbmNs
dWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2
ZS5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENDRmxvYXRLZXlmcmFtZSB7Cisg
ICAgQ0NGbG9hdEtleWZyYW1lKGRvdWJsZSB0aW1lLCBmbG9hdCB2YWx1ZSkKKyAgICAgICAgOiB0
aW1lKHRpbWUpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIGRv
dWJsZSB0aW1lOworICAgIGZsb2F0IHZhbHVlOworfTsKKworc3RydWN0IENDVHJhbnNmb3JtS2V5
ZnJhbWUgeworICAgIGV4cGxpY2l0IENDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUpCisg
ICAgICAgIDogdGltZSh0aW1lKQorICAgIHsKKyAgICB9CisKKyAgICBDQ1RyYW5zZm9ybUtleWZy
YW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSkKKyAgICAg
ICAgOiB0aW1lKHRpbWUpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKwor
ICAgIGRvdWJsZSB0aW1lOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgdmFsdWU7Cit9OworCitj
bGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NGbG9hdEFuaW1h
dGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICAvLyBJdCBpcyByZXF1aXJlZCB0aGF0IHRoZSBrZXlm
cmFtZXMgYmUgc29ydGVkIGJ5IHRpbWUuCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjcmVhdGUoY29uc3QgVmVjdG9yPENDRmxvYXRLZXlmcmFt
ZT4mIGtleWZyYW1lcyk7CisKKyAgICB2aXJ0dWFsIH5DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmUoKTsKKworICAgIC8vIENDQW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24KKyAgICB2
aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc093blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0OworCisgICAgLy8gQ0NGbG9hdEFuaW1hdGlv
bkN1cnZlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUg
dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+Jik7CisKKyAgICAvLyBBbHdh
eXMgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdvIGtleWZyYW1lcyBo
YXZlIHRoZQorICAgIC8vIHNhbWUgdGltZS4KKyAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBt
X2tleWZyYW1lczsKK307CisKK2NsYXNzIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUgOiBwdWJsaWMgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgLy8g
SXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUga2V5ZnJhbWVzIGJlIHNvcnRlZCBieSB0aW1lLgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGNy
ZWF0ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcyk7CisKKyAg
ICB2aXJ0dWFsIH5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICAv
LyBDQ0FuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBkb3VibGUgZHVy
YXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4g
Y2xvbmUoKSBjb25zdDsKKworICAgIC8vIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgaW1wbGVt
ZW50YXRpb24KKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJs
ZSB0LCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1L
ZXlmcmFtZT4mKTsKKworICAgIC8vIEFsd2F5cyBzb3J0ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2lu
ZyB0aW1lLiBObyB0d28ga2V5ZnJhbWVzIGhhdmUgdGhlCisgICAgLy8gc2FtZSB0aW1lLgorICAg
IFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBtX2tleWZyYW1lczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4
IDk0NTUxZDljMGYyYWFhYTI4NzhmMDZmOWYwYjVjMGM4M2I0YjViNzYuLmQ5ZTcyZWZjNDg2YmMy
NDRkZTQ0YzFiODQ3NGFjNmQ2N2Y2OTA1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTI4LDExICsyOCw3MSBAQAogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKICNpbmNsdWRlICJj
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9u
Q3VydmUuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIK
KyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBLZXlmcmFtZSwgdHlwZW5hbWUgVmFsdWU+Cit2b2lkIGFwcGVuZEtleWZyYW1lKFZlY3RvcjxL
ZXlmcmFtZT4mIGtleWZyYW1lcywgZG91YmxlIGtleVRpbWUsIGNvbnN0IFZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBrZXlmcmFtZXMuYXBwZW5kKEtleWZyYW1lKGtleVRpbWUsIHZhbHVlLT52YWx1ZSgp
KSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIGFwcGVuZEtleWZyYW1lPENDVHJhbnNmb3JtS2V5
ZnJhbWUsIFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlPihWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFt
ZT4mIGtleWZyYW1lcywgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZh
bHVlKiB2YWx1ZSkKK3sKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUo
a2V5VGltZSwgKnZhbHVlLT52YWx1ZSgpKSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBWYWx1ZSwg
Y2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgorUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxp
c3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVf
dCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFBy
b3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3Ig
ZGlmZmVyZW50IGRpcmVjdGlvbnMuCisgICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlz
RGlyZWN0aW9uU2V0KCkgJiYgYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFu
aW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGRlbGF5CisgICAgaWYgKGFuaW1hdGlvbiAmJiBh
bmltYXRpb24tPmlzRGVsYXlTZXQoKSAmJiBhbmltYXRpb24tPmRlbGF5KCkgPiAwKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZmlsbHMg
Zm9yd2FyZHMgYW5kIGZpbGxzIGJhY2t3YXJkcworICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0
aW9uLT5pc0ZpbGxNb2RlU2V0KCkgJiYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpIHx8IGFu
aW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgVmVjdG9yPEtleWZyYW1lPiBrZXlmcmFtZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBWYWx1ZSogb3JpZ2lu
YWxWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFZhbHVlKj4odmFsdWVMaXN0LmF0KGkpKTsKKwor
ICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHRpbWluZyBmdW5jdGlvbnMuCisgICAg
ICAgIGlmIChvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpICYmIG9yaWdpbmFsVmFsdWUt
PnRpbWluZ0Z1bmN0aW9uKCktPnR5cGUoKSAhPSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rp
b24pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBkb3VibGUgZHVyYXRp
b24gPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlvblNldCgpKSA/IGFuaW1hdGlv
bi0+ZHVyYXRpb24oKSA6IDE7CisgICAgICAgIGFwcGVuZEtleWZyYW1lKGtleWZyYW1lcywgb3Jp
Z2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb24sIG9yaWdpbmFsVmFsdWUpOworICAgIH0K
KworICAgIE93blB0cjxDdXJ2ZT4gY3VydmUgPSBDdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcyk7CisK
KyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0gPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRhcmdldFByb3Bl
cnR5KTsKKworICAgIEFTU0VSVChhbmltLmdldCgpKTsKKworICAgIGlmIChhbmltLmdldCgpKSB7
CisgICAgICAgIGludCBpdGVyYXRpb25zID0gKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzSXRl
cmF0aW9uQ291bnRTZXQoKSkgPyBhbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgOiAxOworICAg
ICAgICBhbmltLT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlvbnMpOworICAgIH0KKworICAgIHJldHVy
biBhbmltLnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lcGFjZQorCiBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQogewogfQpAQCAtNDYsMTMg
KzEwNiwyMiBAQCBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKTsKIH0KIAotYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
U2l6ZSYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQW5pbWF0aW9uKiBhbmltYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGFuaW1hdGlvbklkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBncm91cElkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aW1lT2Zmc2V0KQorYm9vbCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwg
aW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CisgICAg
aWYgKCFhbmltYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE93blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gdG9BZGQ7CisgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFu
aW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIHRvQWRkID0gY3JlYXRlQWN0
aXZlQW5pbWF0aW9uPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1l
LCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3QsIGFuaW1hdGlv
biwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
cmFuc2Zvcm0pOworICAgIGVsc2UgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVk
UHJvcGVydHlPcGFjaXR5KQorICAgICAgICB0b0FkZCA9IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbjxG
bG9hdEFuaW1hdGlvblZhbHVlLCBDQ0Zsb2F0S2V5ZnJhbWUsIENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZT4odmFsdWVMaXN0LCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0
aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7CisKKyAgICBpZiAodG9BZGQu
Z2V0KCkpIHsKKyAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLmFwcGVuZCh0b0FkZC5yZWxlYXNl
KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4
IGVmOGYxYmRiMWI0ZWRhMTQzNTY3NTIyNTBjN2NiNzZmYjg1ZThmNDguLjA2ODIxMzA0N2Y0MmFj
NWIyYTMxYjBiNjZkZjczNzQ1ZDJjNWYyMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtNTYsOCArNTYsOCBAQCBwdWJsaWM6CiAgICAgLy8g
YXJlIGtlcHQgaW4gc3luYy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBv
ZiB0aGUgaW1wbCB0aHJlYWQgY29udHJvbGxlci4KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25p
emVBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOwogCi0gICAgLy8g
VGhpcyBpcyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgotICAgIFZlY3RvcjxPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+ID4mIGFjdGl2ZUFuaW1hdGlvbnMoKSB7IHJldHVybiBtX2FjdGl2ZUFu
aW1hdGlvbnM7IH0KKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7IH0KKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0
QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJv
cGVydHkpOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsK
QEAgLTY4LDcgKzY4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21w
bGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CiAgICAg
dm9pZCBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwqKTsKIAotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdy
b3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAgICAgdm9pZCByZW1v
dmUoaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAKICAg
ICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwu
Y3BwCmluZGV4IDRmNzI3OThjYTljNzc2ZWJiMzJhZjM3MTFlNmU1ZjRjODA3N2ZkZGQuLjIwOTZj
ZTM5ODJjZTg5MDUzZjk3YTQzMWNjNDZlNGE5NzI5MzY1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApAQCAtMjAxLDcgKzIw
MSw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9u
cyhkb3VibGUgbm93KQogICAgICAgICAgICAgc3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnRhcmdldFByb3BlcnR5KCkpIHsKIAogICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtOiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSogdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PmFuaW1hdGlvbkN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkLCBtX2Ns
aWVudC0+Ym91bmRzKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPmlzRmluaXNoZWRBdChub3cpKQogICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbm93KTsK
QEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
dGlja0FuaW1hdGlvbnMoZG91YmxlIG5vdykKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Y2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eTogewotICAgICAgICAgICAgICAgIGNvbnN0
IENDRmxvYXRBbmltYXRpb25DdXJ2ZSogZmxvYXRBbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+YW5pbWF0aW9uQ3VydmUoKS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBmbG9hdEFuaW1hdGlv
bkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9u
Q3VydmUoKTsKICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gZmxvYXRBbmlt
YXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG5vdykpCiAgICAgICAgICAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZp
bmlzaGVkLCBub3cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggYTQyMjQwMTdj
MjI2MWFhYjdiZWMyMGUyYzg5NTlmMzA0YzZjZWRhMC4uZTkxZTMzNmRiZGIzZWNiZGM5NGE5NGFh
MGIwMjQ1OWM3NDk4ZDQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02Niw2
ICs2Niw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAorICAgICAgICAg
ICAgJ3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCmluZGV4IDBlMDYx
NTczNDE4YTA5MDFiNTU4MTY5Y2UwMTZjYzM4ZDkwMzgxZWQuLmM5MjQwZTMxZmNjNmI3ZjAwYzFi
NjkzN2ZhNzY5MWJiMDNiNDVkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKQEAgLTI4LDkgKzI4LDMwIEBACiAK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZSA8Y2xhc3MgVGFyZ2V0Pgor
dm9pZCBhZGRPcGFjaXR5VHJhbnNpdGlvbihUYXJnZXQmIHRhcmdldCwgZG91YmxlIGR1cmF0aW9u
LCBmbG9hdCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9wYWNpdHkpCit7CisgICAgV2ViQ29yZTo6
S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKKyAgICBp
ZiAoZHVyYXRpb24gPiAwKQorICAgICAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlv
blZhbHVlKDAsIHN0YXJ0T3BhY2l0eSkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5p
bWF0aW9uVmFsdWUoZHVyYXRpb24sIGVuZE9wYWNpdHkpKTsKKworICAgIFJlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXRE
dXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisKKyAgICB0YXJnZXQu
YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsK
K30KKworfSAvLyBuYW1lc3BhY2UKKwogbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKIAogRmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmU6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkKQEAgLTk5LDE5ICsx
MjAsMTQgQEAgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBGYWtlRmxvYXRU
cmFuc2l0aW9uOjpjbG9uZSgpIGNvbnN0CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKCp0aGlzKSk7CiB9CiAKLXZvaWQgYWRkT3BhY2l0eVRyYW5zaXRpb24oV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bSYgbGF5ZXIsIGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgc3RhcnRP
cGFjaXR5LCBmbG9hdCBlbmRPcGFjaXR5KQordm9pZCBhZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29u
dHJvbGxlcihXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciYgY29udHJvbGxlciwg
ZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9wYWNpdHkpCiB7
Ci0gICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlP
cGFjaXR5KTsKLSAgICBpZiAoZHVyYXRpb24gPiAwKQotICAgICAgICB2YWx1ZXMuaW5zZXJ0KG5l
dyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIHN0YXJ0T3BhY2l0eSkpOwotICAgIHZhbHVlcy5pbnNl
cnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIGVuZE9wYWNpdHkpKTsKLQotICAg
IFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAg
YW5pbWF0aW9uLT5zZXREdXJhdGlvbigxKTsKLQotICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBh
ZGRPcGFjaXR5VHJhbnNpdGlvbihjb250cm9sbGVyLCBkdXJhdGlvbiwgc3RhcnRPcGFjaXR5LCBl
bmRPcGFjaXR5KTsKK30KIAotICAgIGxheWVyLmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUs
IGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7Cit2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9M
YXllcihXZWJDb3JlOjpMYXllckNocm9taXVtJiBsYXllciwgZG91YmxlIGR1cmF0aW9uLCBmbG9h
dCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9wYWNpdHkpCit7CisgICAgYWRkT3BhY2l0eVRyYW5z
aXRpb24obGF5ZXIsIGR1cmF0aW9uLCBzdGFydE9wYWNpdHksIGVuZE9wYWNpdHkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXRUZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKaW5kZXggOWY5NjRlNDQyZWRjYzRlZDZm
MDU3OTZmMDZjMThhNzhmZjBhZWY5Yy4uZDEzZTc0Y2ExNzFlZTkzOWJjNjEwZjkzNGIwMzM4NmQx
Njc2N2RjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1h
dGlvblRlc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5p
bWF0aW9uVGVzdENvbW1vbi5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiB9CiAKQEAgLTk0LDcgKzk1LDkgQEAgcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fYm91bmRzOwogfTsKIAotdm9pZCBhZGRPcGFjaXR5
VHJhbnNpdGlvbihXZWJDb3JlOjpMYXllckNocm9taXVtJiwgZG91YmxlIGR1cmF0aW9uLCBmbG9h
dCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9wYWNpdHkpOwordm9pZCBhZGRPcGFjaXR5VHJhbnNp
dGlvblRvQ29udHJvbGxlcihXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciYsIGRv
dWJsZSBkdXJhdGlvbiwgZmxvYXQgc3RhcnRPcGFjaXR5LCBmbG9hdCBlbmRPcGFjaXR5KTsKKwor
dm9pZCBhZGRPcGFjaXR5VHJhbnNpdGlvblRvTGF5ZXIoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSYs
IGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgc3RhcnRPcGFjaXR5LCBmbG9hdCBlbmRPcGFjaXR5KTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0VGVzdHMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iNzczMmFlYWI3NDI3ZGUzOGM3ZDc0N2Q5NTcwMTY2OTk4MWU2ZmI1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1l
ZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9u
Q3VydmUuaCIKKworI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCit2b2lk
IGV4cGVjdFRyYW5zbGF0ZVgoZG91YmxlIHRyYW5zbGF0ZVgsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgpCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWRU
eXBlIGRlY29tcG9zZWRUeXBlOworICAgIG1hdHJpeC5kZWNvbXBvc2UoZGVjb21wb3NlZFR5cGUp
OworICAgIEVYUEVDVF9GTE9BVF9FUSh0cmFuc2xhdGVYLCBkZWNvbXBvc2VkVHlwZS50cmFuc2xh
dGVYKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlm
cmFtZSB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRl
c3QsIE9uZUZsb2F0S2V5ZnJhbWUpCit7CisgICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4ga2V5
ZnJhbWVzOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDIpKTsKKyAg
ICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1
cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1
ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDIpKTsKK30KKworLy8gVGVzdHMg
dGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0
ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUd29GbG9hdEtleWZyYW1l
KQoreworICAgIFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBrZXlmcmFt
ZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCAyKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChD
Q0Zsb2F0S2V5ZnJhbWUoMSwgNCkpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtl
eWZyYW1lcykpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0
LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggdGhy
ZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlVGVzdCwgVGhyZWVGbG9hdEtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ0Zsb2F0S2V5
ZnJhbWU+IGtleWZyYW1lczsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgw
LCAyKSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgNCkpOworICAg
IGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDIsIDgpKTsKKyAgICBPd25QdHI8Q0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3Vy
dmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1
ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBj
dXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFs
dWUoMykpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggbXVsdGlw
bGUga2V5cyBhdCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgorVEVTVChDQ0tleWZyYW1lZEFu
aW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRGbG9hdEtleVRpbWVzKQoreworICAgIFZlY3RvcjxD
Q0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICAvLyBBIHN0ZXAgZnVuY3Rpb24uCisgICAg
a2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgNCkpOworICAgIGtleWZyYW1lcy5h
cHBlbmQoQ0NGbG9hdEtleWZyYW1lKDEsIDQpKTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxv
YXRLZXlmcmFtZSgxLCA2KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUo
MiwgNikpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZl
KENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBj
dXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisKKyAgICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkg
YXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4KKyAgICBmbG9hdCB2YWx1
ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZSA+PSA0ICYmIHZh
bHVlIDw9IDYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDIpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDMpKTsKK30KKworCisvLyBUZXN0cyB0aGF0
IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3Rl
ZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIE9uZVRyYW5zZm9ybUtleWZy
YW1lKQoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwg
Rml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlv
bnMpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3Vy
dmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykp
OworICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCisgICAgZXhwZWN0VHJhbnNsYXRl
WCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7Cit9CisKKy8vIFRlc3RzIHRo
YXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBl
Y3RlZC4KK1RFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b1RyYW5zZm9ybUtl
eWZyYW1lKQoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7Cisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVy
YXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJh
dGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlm
cmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQK
KyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUp
KTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUp
KTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUp
KTsKK30KKworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0aHJlZSBr
ZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3Vy
dmVUZXN0LCBUaHJlZVRyYW5zZm9ybUtleWZyYW1lKQoreworICAgIFZlY3RvcjxDQ1RyYW5zZm9y
bUtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRy
YW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAs
IEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMub3BlcmF0aW9ucygpLmFw
cGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoOCwgRml4ZWQp
LCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Cisg
ICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSk7
CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMy
KSk7CisgICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlv
bnMzKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMp
KTsKKyAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAorICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xh
dGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xh
dGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5ZXJTaXplKSk7Cit9CisKKy8vIFRlc3Rz
IHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUga2V5cyBhdCBhIGdpdmVu
IHRpbWUgd29ya3Mgc2FuZWx5LgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwg
UmVwZWF0ZWRUcmFuc2Zvcm1LZXlUaW1lcykKK3sKKyAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlm
cmFtZT4ga2V5ZnJhbWVzOworICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KKyAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBl
bmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwg
TGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0
aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgo
NCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9YKSk7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBvcGVyYXRp
b25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKExlbmd0aCg2LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1gpKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0Owor
ICAgIG9wZXJhdGlvbnM0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFu
c2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NU
cmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOworICAgIGtleWZyYW1lcy5hcHBlbmQo
Q0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMykpOworICAgIGtleWZyYW1lcy5hcHBl
bmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zNCkpOworICAgIE93blB0cjxDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisKKyAgICBJbnRTaXplIGxheWVy
U2l6ZTsgLy8gaWdub3JlZAorCisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFs
dWUoLTEsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZh
bHVlKDAsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZh
bHVlKDAuNSwgbGF5ZXJTaXplKSk7CisKKyAgICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkg
YXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4KKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHlwZTsKKyAgICB2
YWx1ZS5kZWNvbXBvc2UoZGVjb21wb3NlZFR5cGUpOworICAgIEVYUEVDVF9UUlVFKGRlY29tcG9z
ZWRUeXBlLnRyYW5zbGF0ZVggPj0gNCAmJiBkZWNvbXBvc2VkVHlwZS50cmFuc2xhdGVYIDw9IDYp
OworCisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41LCBsYXllclNp
emUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNp
emUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgzLCBsYXllclNp
emUpKTsKK30KKworLy8gVGVzdHMgdGhhdCBpbnZhbGlkIGxpc3RzIG9mIGtleWZyYW1lcyByZXN1
bHQgaW4gbm90aGluZyBiZWluZyByZXR1cm5lZCBmcm9tIDo6Y3JlYXRlLgorVEVTVChDQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgSW52YWxpZEtleWZyYW1lcykKK3sKKyAgICAvLyBJdCBp
cyBpbnZhbGlkIHRvIHBhc3MgYW4gZW1wdHkgdmVjdG9yIG9mIGtleWZyYW1lcyB0byBjcmVhdGUu
CisgICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IHRyYW5zZm9ybUtleWZyYW1lczsKKyAg
ICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gdHJhbnNmb3JtQ3Vy
dmUgPSBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUodHJhbnNmb3Jt
S2V5ZnJhbWVzKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJhbnNmb3JtQ3VydmUuZ2V0KCkpOworCisg
ICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4gZmxvYXRLZXlmcmFtZXM7CisgICAgT3duUHRyPEND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gZmxvYXRDdXJ2ZSA9IENDS2V5ZnJhbWVkRmxv
YXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGZsb2F0S2V5ZnJhbWVzKTsKKyAgICBFWFBFQ1RfRkFM
U0UoZmxvYXRDdXJ2ZS5nZXQoKSk7CisKKyAgICAvLyBJdCBpcyBpbnZhbGlkIHRvIHBhc3MgYSB2
ZWN0b3Igb2YgdW5zb3J0ZWQga2V5ZnJhbWVzIHRvIGNyZWF0ZTsKKyAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVu
Z3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwg
Rml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
KSk7CisgICAgdHJhbnNmb3JtS2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEs
IG9wZXJhdGlvbnMxKSk7CisgICAgdHJhbnNmb3JtS2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9y
bUtleWZyYW1lKDAsIG9wZXJhdGlvbnMyKSk7CisgICAgdHJhbnNmb3JtQ3VydmUgPSBDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUodHJhbnNmb3JtS2V5ZnJhbWVzKTsK
KyAgICBFWFBFQ1RfRkFMU0UodHJhbnNmb3JtQ3VydmUuZ2V0KCkpOworCisgICAgZmxvYXRLZXlm
cmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgxLCAyKSk7CisgICAgZmxvYXRLZXlmcmFtZXMu
YXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCA0KSk7CisgICAgZmxvYXRDdXJ2ZSA9IENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGZsb2F0S2V5ZnJhbWVzKTsKKyAgICBFWFBF
Q1RfRkFMU0UoZmxvYXRDdXJ2ZS5nZXQoKSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJUZXN0LmNwcAppbmRleCA2ZWNjMWZmYTgyZThlNWI2MjlkNmVjMWJmMDY4
YmRjYWFkNTc4NjY5Li5jNGYxMDNhM2NhZmU0NjhlNGI4ZTc5Nzg2ZDJiMjE4N2U0NWQ3ZWExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCkBAIC0yNyw2ICsyNywxMiBAQAogI2luY2x1
ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJDQ0FuaW1h
dGlvblRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAi
TGVuZ3RoLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5j
bHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1
cnZlLmgiCisKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzYsMjIgKzQyLDk1IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXRUZXN0czsKIAogbmFtZXNwYWNlIHsKIAordm9pZCBleHBlY3RUcmFuc2xh
dGVYKGRvdWJsZSB0cmFuc2xhdGVYLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
KQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2Vk
VHlwZTsKKyAgICBtYXRyaXguZGVjb21wb3NlKGRlY29tcG9zZWRUeXBlKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEodHJhbnNsYXRlWCwgZGVjb21wb3NlZFR5cGUudHJhbnNsYXRlWCk7Cit9CisKIFBh
c3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3du
UHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKIHsKICAgICByZXR1cm4gQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShjdXJ2ZSwgMCwgaWQsIHByb3BlcnR5KTsKIH0KIAorVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZU9wYWNpdHlBbmltYXRpb24pCit7CisgICAgT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAg
ICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNp
dHkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOwor
ICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIDEpKTsK
KworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7
CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJv
eFNpemU7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5p
bWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmlt
YXRpb24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpOworICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisKKyAgICBF
WFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9F
UShDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9w
ZXJ0eSgpKTsKKworICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpGbG9hdCwgYWN0aXZl
QW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOworCisgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlv
bkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9GbG9hdEFuaW1hdGlv
bkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUoY3VydmUpOworCisgICAgRVhQRUNUX0VRKDAsIGN1
cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZShkdXJh
dGlvbikpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRl
VHJhbnNmb3JtQW5pbWF0aW9uKQoreworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOwor
ICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1
ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25z
KCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBG
aXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gp
KTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3Bl
cmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAg
b3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOworCisgICAgUmVmUHRyPEFu
aW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24t
PnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBjb250
cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAs
IDAsIDApOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworCisgICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRyb2xs
ZXItPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsK
KyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOworCisgICAgRVhQRUNUX0VRKDEsIGFj
dGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKKwor
ICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlv
bi0+Y3VydmUoKS0+dHlwZSgpKTsKKworICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUoY3VydmUpOworCisgICAgZXhwZWN0VHJhbnNsYXRl
WCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgYm94U2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
NCwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uLCBib3hTaXplKSk7Cit9CisKIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jTmV3QW5pbWF0aW9uKQogewogICAgIEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKAotICAgICAgICBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25QdHI8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7
CiAKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YWN0aXZl
QW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29udHJvbGxlcigqY29udHJvbGxl
ciwgMSwgMCwgMSk7CiAKICAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29u
dHJvbGxlckltcGwuZ2V0KCkpOwogCkBAIC02MiwxNCArMTQxLDEyIEBAIFRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jTmV3QW5pbWF0aW9uKQogVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNBbmltYXRpb25Qcm9wZXJ0aWVzKQogewogICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKAotICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUo
KSk7CiAKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlv
bigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YWN0
aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29udHJvbGxlcigqY29udHJv
bGxlciwgMSwgMCwgMSk7CiAKICAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMo
Y29udHJvbGxlckltcGwuZ2V0KCkpOwogCkBAIC04NywxNCArMTY0LDEyIEBAIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGllcykKIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jQWJvcnRlZEFuaW1hdGlvbikKIHsK
ICAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbCgKLSAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0g
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAotICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworICAgIE93blB0cjxDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKCkpOwogCiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVB
bmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xs
ZXItPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0NvbnRyb2xsZXIo
KmNvbnRyb2xsZXIsIDEsIDAsIDEpOwogCiAgICAgY29udHJvbGxlci0+c3luY2hyb25pemVBbmlt
YXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKIApAQCAtMTEyLDE0ICsxODcsMTIgQEAgVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNBYm9ydGVkQW5pbWF0aW9uKQog
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNDb21wbGV0ZWRBbmltYXRp
b24pCiB7CiAgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7
Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcklt
cGwoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1t
eSkpOwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigK
LSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKKyAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgpKTsKIAogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0
QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBj
b250cm9sbGVyLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCAwLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250
cm9sbGVyKCpjb250cm9sbGVyLCAxLCAwLCAxKTsKIAogICAgIGNvbnRyb2xsZXItPnN5bmNocm9u
aXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7CiAKQEAgLTEzMiwxMSArMjA1LDEx
IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jQ29tcGxldGVkQW5p
bWF0aW9uKQogICAgIGNvbnRyb2xsZXJJbXBsLT5hbmltYXRlKDIsICpldmVudHMpOwogCiAgICAg
RVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBjb250cm9s
bGVyLT5hY3RpdmVBbmltYXRpb25zKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAKICAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6
ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOwogCi0gICAgRVhQRUNUX0VRKHNpemVf
dCgwKSwgY29udHJvbGxlci0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwCmluZGV4IDgyNjA5ODlhNTRiZjA1YjA0MDMzMGFjM2Q0OTQzODI0NzczZjlm
ZWMuLjYyNjQ3MGEzNjhmMjdiYTBiNDljZjRlOWQ3YjcyMWU1YzA0Mzk1YTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApA
QCAtMTUxLDI1ICsxNTEsNiBAQCBwcml2YXRlOgogICAgIFRlc3RIb29rcyogbV90ZXN0SG9va3M7
CiB9OwogCi0vLyBBZGFwdHMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgZm9yIHRlc3QuIEFk
ZHMgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiBvZiBhZGRBbmltYXRpb24gdGhhdCBpbnNlcnRzIGEg
ZmxvYXQgYW5pbWF0aW9uLgotLy8gRklYTUU6IG9uY2UgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmFkZEFuaW1hdGlvbiBpcyBpbXBsZW1lbnRlZCwgdGhhdCBmdW5jdGlvbiBzaG91bGQgYmUg
Y2FsbGVkIGRpcmVjdGx5IGFuZCB0aGlzCi0vLyBjbGFzcyBjYW4gYmUgcmVtb3ZlZC4KLWNsYXNz
IE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29u
c3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBp
bnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCi0gICAgewotICAgICAgICBkb3VibGUgZHVy
YXRpb24gPSAwOwotICAgICAgICBhY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oZHVyYXRpb24s
IDEsIDApKSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KIGNsYXNzIENvbXBvc2l0b3JG
YWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nIDogcHVibGljIENvbXBv
c2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNr
aW5nPiBjcmVhdGUoQXR0cmlidXRlcyBhdHRycykKQEAgLTM2NCw3ICszNDUsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXll
clRyZWVIb3N0VGVzdCo+KHNlbGYpOwogICAgICAgQVNTRVJUKHRlc3QpOwogICAgICAgaWYgKHRl
c3QtPm1fbGF5ZXJUcmVlSG9zdCAmJiB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigp
KQotICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZEFuaW1h
dGlvbihLZXlmcmFtZVZhbHVlTGlzdChBbmltYXRlZFByb3BlcnR5T3BhY2l0eSksIEludFNpemUo
KSwgMCwgMCwgMCwgMC4wKTsKKyAgICAgICAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvTGF5ZXIo
KnRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCksIDAsIDAsIDEpOwogICAgIH0KIAog
ICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0KHZvaWQqIHNl
bGYpCkBAIC01MTcsNyArNDk4LDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2lu
VGVzdCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0
aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBtX3NldHRpbmdzKTsKICAgICBBU1NFUlRf
VFJVRShtX2xheWVyVHJlZUhvc3QpOwogICAgIHJvb3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCht
X2xheWVyVHJlZUhvc3QuZ2V0KCkpOwotICAgIHJvb3RMYXllci0+c2V0TGF5ZXJBbmltYXRpb25D
b250cm9sbGVyKE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKIAogICAg
IG1fYmVnaW5uaW5nID0gdHJ1ZTsKICAgICBiZWdpblRlc3QoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>