<?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>108610</bug_id>
          
          <creation_ts>2013-02-01 03:45:36 -0800</creation_ts>
          <short_desc>[TexMap] Remove Animation in GraphicsLayerAnimation.</short_desc>
          <delta_ts>2013-02-14 00:34:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          
          <blocked>103854</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Changwan Hong">cwhong893</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>cwhong893</cc>
    
    <cc>hyatt</cc>
    
    <cc>jaepark</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>822585</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-01 03:45:36 -0800</bug_when>
    <thetext>GraphicsLayerAnimation uses Animation just for some members.
It is more succinct to have the internal type for this purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826973</commentid>
    <comment_count>1</comment_count>
      <attachid>186974</attachid>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-06 18:41:48 -0800</bug_when>
    <thetext>Created attachment 186974
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826976</commentid>
    <comment_count>2</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-06 18:42:48 -0800</bug_when>
    <thetext>After this patch, I will refactor some static methods (e.g. normalizedAnimationValue, normalizedAnimationValueForFillsForwards ..) as GraphicsLayerAnimation::Animation has them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827066</commentid>
    <comment_count>3</comment_count>
      <attachid>186974</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-06 22:57:13 -0800</bug_when>
    <thetext>Comment on attachment 186974
Patch

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

Hmm... looking at what it takes to move away from WebCore::Animation I&apos;m not sure it&apos;s very succinct. I originally thought it would be.
Is there any other value in doing this? Seems like the code duplication makes it to not be the best idea :)

&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:35
&gt; +    class Animation {
&gt; +    public:

I don&apos;t see the point in the inner class; why not just have those be members of GraphicsLayerAnimation?

&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:45
&gt; +        enum AnimationDirection {
&gt; +            AnimationDirectionNormal,
&gt; +            AnimationDirectionAlternate,
&gt; +            AnimationDirectionReverse,
&gt; +            AnimationDirectionAlternateReverse
&gt; +        };

I think we should move AnimationDirection to</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827117</commentid>
    <comment_count>4</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-07 00:39:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 186974 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186974&amp;action=review
&gt; 
&gt; Hmm... looking at what it takes to move away from WebCore::Animation I&apos;m not sure it&apos;s very succinct. I originally thought it would be.
&gt; Is there any other value in doing this? Seems like the code duplication makes it to not be the best idea :)

Thanks for your review, noam.

I tried to remove unnecessary data passing.
After CoordinatedGraphicsLayer passes WebCore::Animation to its GraphicsLayerAnimation, only five members(m_direction, m_duration, m_iterationCount, m_fillMode and m_timingFunction) are ever used.

You can see encoding/decoding of WebCore::Animation in CoordinatedGraphicsArgumentCoders.cpp.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:35
&gt; &gt; +    class Animation {
&gt; &gt; +    public:
&gt; 
&gt; I don&apos;t see the point in the inner class; why not just have those be members of GraphicsLayerAnimation?
&gt; 
I wanted to show that the inner class is originated from Animation, but I don&apos;t want it to be mixed up with GraphicsLayerAnimation.
Please suggest a better name for this class if you are okay with the inner class. :)
&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:45
&gt; &gt; +        enum AnimationDirection {
&gt; &gt; +            AnimationDirectionNormal,
&gt; &gt; +            AnimationDirectionAlternate,
&gt; &gt; +            AnimationDirectionReverse,
&gt; &gt; +            AnimationDirectionAlternateReverse
&gt; &gt; +        };
&gt; 
&gt; I think we should move AnimationDirection to
How about RenderStyleConstants.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827126</commentid>
    <comment_count>5</comment_count>
      <attachid>186974</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-07 00:48:51 -0800</bug_when>
    <thetext>Comment on attachment 186974
Patch

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

OK, let&apos;s move forward but remove the inner class, move AnimationDirection to RenderStyleConstants (need to see if dhyatt/smfr are ok with that), and use setters instead of a huge constructor.

&gt;&gt;&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:35
&gt;&gt;&gt; +    public:
&gt;&gt; 
&gt;&gt; I don&apos;t see the point in the inner class; why not just have those be members of GraphicsLayerAnimation?
&gt; 
&gt; I wanted to show that the inner class is originated from Animation, but I don&apos;t want it to be mixed up with GraphicsLayerAnimation.
&gt; Please suggest a better name for this class if you are okay with the inner class. :)

I don&apos;t see why it matters that it came from WebCore::Animation. Maybe in the future we&apos;d want to set those directly...
Let&apos;s get rid of the inner class :)

&gt;&gt;&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:45
&gt;&gt;&gt; +        };
&gt;&gt; 
&gt;&gt; I think we should move AnimationDirection to
&gt; 
&gt; How about RenderStyleConstants.h?

Yes, completed my sentence :)

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:754
&gt; -    animation = GraphicsLayerAnimation(name, keyframes, boxSize, animationObject.get(), startTime, listsMatch);
&gt; +    animation = GraphicsLayerAnimation(name, keyframes, boxSize, animationObject, startTime, listsMatch);

I think it would be better here if instead of passing the &quot;animationObject&quot; in the constructor, we pass that information as set*** functions, e.g. setFillMode().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827166</commentid>
    <comment_count>6</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-07 01:25:34 -0800</bug_when>
    <thetext>Thanks for your reply!

&gt; OK, let&apos;s move forward but remove the inner class, move AnimationDirection to RenderStyleConstants (need to see if dhyatt/smfr are ok with that), and use setters instead of a huge constructor.

Got it :)

&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:35
&gt; &gt;&gt;&gt; +    public:
&gt; &gt;&gt; 
&gt; &gt;&gt; I don&apos;t see the point in the inner class; why not just have those be members of GraphicsLayerAnimation?
&gt; &gt; 
&gt; &gt; I wanted to show that the inner class is originated from Animation, but I don&apos;t want it to be mixed up with GraphicsLayerAnimation.
&gt; &gt; Please suggest a better name for this class if you are okay with the inner class. :)
&gt; 
&gt; I don&apos;t see why it matters that it came from WebCore::Animation. Maybe in the future we&apos;d want to set those directly...
&gt; Let&apos;s get rid of the inner class :)

Firstly, I&apos;m not good at writing english, so I was late when you ask me on IRC. Sorry for waiting me. :(
I think it again, there are no reason to know it came from WebCore::Animation. I agree with you. 

&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:754
&gt; &gt; -    animation = GraphicsLayerAnimation(name, keyframes, boxSize, animationObject.get(), startTime, listsMatch);
&gt; &gt; +    animation = GraphicsLayerAnimation(name, keyframes, boxSize, animationObject, startTime, listsMatch);
&gt; 
&gt; I think it would be better here if instead of passing the &quot;animationObject&quot; in the constructor, we pass that information as set*** functions, e.g. setFillMode().

Got it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827195</commentid>
    <comment_count>7</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-07 02:02:03 -0800</bug_when>
    <thetext>&gt; &gt; OK, let&apos;s move forward but remove the inner class, move AnimationDirection to RenderStyleConstants (need to see if dhyatt/smfr are ok with that), and use setters instead of a huge constructor.
&gt; 
&gt; Got it :)
&gt; 

Sorry, I didn&apos;t catch your last sentence. (&quot;use setters instead of a huge constructor.&quot;)
If we use setters instead of a some huge constructor, GraphicsLayerAnimation must have many setters name, boxSize, keyFrames.. even they will not be used after GraphicsLayerAnimation is constructed.
I think GraphicsLayerAnimation should have only setState() as setter. Because state is only one that will be changed. I prefer the huge constructor instead of many setters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827298</commentid>
    <comment_count>8</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-07 04:15:37 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; OK, let&apos;s move forward but remove the inner class, move AnimationDirection to RenderStyleConstants (need to see if dhyatt/smfr are ok with that), and use setters instead of a huge constructor.
&gt; &gt; 
&gt; &gt; Got it :)
&gt; &gt; 
&gt; 
&gt; Sorry, I didn&apos;t catch your last sentence. (&quot;use setters instead of a huge constructor.&quot;)
&gt; If we use setters instead of a some huge constructor, GraphicsLayerAnimation must have many setters name, boxSize, keyFrames.. even they will not be used after GraphicsLayerAnimation is constructed.
&gt; I think GraphicsLayerAnimation should have only setState() as setter. Because state is only one that will be changed. I prefer the huge constructor instead of many setters.

Ok, how about a struct GraphicsLayerAnimation::Atributes, same as GraphicsContext3D::Attributes, which is only used for construction, and later everything is a regular member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827321</commentid>
    <comment_count>9</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-07 04:39:59 -0800</bug_when>
    <thetext>&gt; &gt; OK, let&apos;s move forward but remove the inner class, move AnimationDirection to RenderStyleConstants (need to see if dhyatt/smfr are ok with that), and use setters instead of a huge constructor.
&gt; 
&gt; Got it :)
&gt; 

Sorry, I didn&apos;t catch your last sentence. (&quot;use setters instead of a huge constructor.&quot;)
If we use setters instead of a some huge constructor, GraphicsLayerAnimation must have many setters name, boxSize, keyFrames.. even they will not be used after GraphicsLayerAnimation is constructed.
I think GraphicsLayerAnimation should have only setState() as setter. Because state is only one that will be changed. I prefer the huge constructor instead of many setters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827334</commentid>
    <comment_count>10</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-07 04:52:21 -0800</bug_when>
    <thetext>oops. comment#9 is collision.

&gt; &gt; 
&gt; &gt; Sorry, I didn&apos;t catch your last sentence. (&quot;use setters instead of a huge constructor.&quot;)
&gt; &gt; If we use setters instead of a some huge constructor, GraphicsLayerAnimation must have many setters name, boxSize, keyFrames.. even they will not be used after GraphicsLayerAnimation is constructed.
&gt; &gt; I think GraphicsLayerAnimation should have only setState() as setter. Because state is only one that will be changed. I prefer the huge constructor instead of many setters.
&gt; 
&gt; Ok, how about a struct GraphicsLayerAnimation::Atributes, same as GraphicsContext3D::Attributes, which is only used for construction, and later everything is a regular member.

It makes sense completly! :)
I will fix it like that. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828068</commentid>
    <comment_count>11</comment_count>
      <attachid>187211</attachid>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-07 18:04:54 -0800</bug_when>
    <thetext>Created attachment 187211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828073</commentid>
    <comment_count>12</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-07 18:10:40 -0800</bug_when>
    <thetext>For the meantime, leave AnimationDirection at that first. I should changes more than 5 files if I move AnimationDirection at this patch. After this patch, I will move AnimationDirection to RenderStyleConstants.h if dhyatt/smfr accept with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829031</commentid>
    <comment_count>13</comment_count>
      <attachid>187211</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-09 08:26:07 -0800</bug_when>
    <thetext>Comment on attachment 187211
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        GraphicsLayerAnimation uses Animation just for some members. It is more
&gt; +        succinct to have the internal type for this purpose. Extracting some members
&gt; +        from Animation, I create GraphicsLayerAnimation::Animation.

&quot;More succinct&quot; is not a good enough argument for this patch... We&apos;re duplicating several things from WebCore::Animation, like fillsForwards() etc. We need a better argument for this.

&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.cpp:156
&gt; +GraphicsLayerAnimation::GraphicsLayerAnimation(const String&amp; name, const KeyframeValueList&amp; keyframes, const IntSize&amp; boxSize, const Attributes&amp; animAttrs, double startTime, bool listsMatch)

animAttr -&gt; attributes

&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:55
&gt; +        Attributes(unsigned _direction, double _duration, double _iterationCount, double _fillMode, PassRefPtr&lt;TimingFunction&gt; _timingFunction)

Don&apos;t use _ please... 
: direction(direction) should be ok, also : direction(newDirection).

&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:91
&gt; +    Attributes attributes() const { return m_attributes; }

const Attributes&amp; attributes() const

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:614
&gt; +    m_animations.add(GraphicsLayerAnimation(keyframesName, valueList, boxSize, animAttrs, WTF::currentTime() - timeOffset, listsMatch));

animAttr -&gt; attributes

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:1027
&gt; +    const GraphicsLayerAnimation::Attributes animAttrs(anim-&gt;direction(), anim-&gt;duration(), anim-&gt;iterationCount(), anim-&gt;fillMode(), anim-&gt;timingFunction());

No need for const.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:1029
&gt; +    m_animations.add(GraphicsLayerAnimation(keyframesName, valueList, boxSize, animAttrs, m_lastAnimationStartTime, listsMatch));

Ditto

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:749
&gt; +    const GraphicsLayerAnimation::Attributes animAttrs(direction, duration, iterationCount, fillMode, timingFunction);

No need for const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831482</commentid>
    <comment_count>14</comment_count>
      <attachid>187980</attachid>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-12 17:50:22 -0800</bug_when>
    <thetext>Created attachment 187980
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831484</commentid>
    <comment_count>15</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-12 17:53:02 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 187211 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187211&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        GraphicsLayerAnimation uses Animation just for some members. It is more
&gt; &gt; +        succinct to have the internal type for this purpose. Extracting some members
&gt; &gt; +        from Animation, I create GraphicsLayerAnimation::Animation.
&gt; 
&gt; &quot;More succinct&quot; is not a good enough argument for this patch... We&apos;re duplicating several things from WebCore::Animation, like fillsForwards() etc. We need a better argument for this.
&gt;
I changed comment. How about that argument?

&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.cpp:156
&gt; &gt; +GraphicsLayerAnimation::GraphicsLayerAnimation(const String&amp; name, const KeyframeValueList&amp; keyframes, const IntSize&amp; boxSize, const Attributes&amp; animAttrs, double startTime, bool listsMatch)
&gt; 
&gt; animAttr -&gt; attributes
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:55
&gt; &gt; +        Attributes(unsigned _direction, double _duration, double _iterationCount, double _fillMode, PassRefPtr&lt;TimingFunction&gt; _timingFunction)
&gt; 
&gt; Don&apos;t use _ please... 

Done.


&gt; : direction(direction) should be ok, also : direction(newDirection).
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:91
&gt; &gt; +    Attributes attributes() const { return m_attributes; }
&gt; 
&gt; const Attributes&amp; attributes() const
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:614
&gt; &gt; +    m_animations.add(GraphicsLayerAnimation(keyframesName, valueList, boxSize, animAttrs, WTF::currentTime() - timeOffset, listsMatch));
&gt; 
&gt; animAttr -&gt; attributes
&gt; 

Done. 

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:1027
&gt; &gt; +    const GraphicsLayerAnimation::Attributes animAttrs(anim-&gt;direction(), anim-&gt;duration(), anim-&gt;iterationCount(), anim-&gt;fillMode(), anim-&gt;timingFunction());
&gt; 
&gt; No need for const.
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:1029
&gt; &gt; +    m_animations.add(GraphicsLayerAnimation(keyframesName, valueList, boxSize, animAttrs, m_lastAnimationStartTime, listsMatch));
&gt; 
&gt; Ditto
&gt; 

Done.

&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:749
&gt; &gt; +    const GraphicsLayerAnimation::Attributes animAttrs(direction, duration, iterationCount, fillMode, timingFunction);
&gt; 
&gt; No need for const.

Done.

Thanks for kind review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831554</commentid>
    <comment_count>16</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-12 20:02:33 -0800</bug_when>
    <thetext>I discussed with smfr and jamesr about moving enum AnimationDirection.
They said that platform/ files include files in rendering/ is a layering violation. I filed this bug https://bugs.webkit.org/show_bug.cgi?id=109649</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832761</commentid>
    <comment_count>17</comment_count>
    <who name="Changwan Hong">cwhong893</who>
    <bug_when>2013-02-13 23:29:19 -0800</bug_when>
    <thetext>I think it again, leaving GraphicsLayerAnimation as it is would be fine.
Because we use almost everything out of WebCore::Animation and https://bugs.webkit.org/show_bug.cgi?id=103854 will remove WebCore::Animation.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186974</attachid>
            <date>2013-02-06 18:41:48 -0800</date>
            <delta_ts>2013-02-07 18:04:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108610-20130207113822.patch</filename>
            <type>text/plain</type>
            <size>17925</size>
            <attacher name="Changwan Hong">cwhong893</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMDU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWRjNWVlZGU0ODE0NzM4
NzIyMzM5MDliZjNkODRkOTQ4NzE3ZWVjMC4uZjg2Zjc4MTliNTIxYTlmZGY1Y2E2NjM4N2YzZDBl
YzExNDkyYTI0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEzLTAyLTA2ICBDaGFu
ZyBXYW4gSG9uZyAgPGpvdXJtb29uQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIEdyYXBoaWNz
TGF5ZXJBbmltYXRpb24gdXNlcyBBbmltYXRpb24ganVzdCBmb3Igc29tZSBtZW1iZXJzLiBJdCBp
cyBtb3JlCisgICAgICAgIHN1Y2NpbmN0IHRvIGhhdmUgdGhlIGludGVybmFsIHR5cGUgZm9yIHRo
aXMgcHVycG9zZS4gRXh0cmFjdGluZyBzb21lIG1lbWJlcnMKKyAgICAgICAgZnJvbSBBbmltYXRp
b24sIEkgY3JlYXRlIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkFuaW1hdGlvbi4KKworICAgICAg
ICBbVGV4TWFwXSBSZW1vdmUgQW5pbWF0aW9uIGluIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg2MTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJB
bmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6QW5pbWF0aW9uOjpBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJBbmltYXRpb246OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJBbmltYXRpb246OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyQW5pbWF0aW9uLmg6CisgICAgICAgIChBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6QW5pbWF0aW9uOjpBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6QW5pbWF0aW9uOjpkaXJl
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6QW5pbWF0
aW9uOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9u
OjpBbmltYXRpb246Oml0ZXJhdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJBbmltYXRpb246OkFuaW1hdGlvbjo6ZmlsbHNGb3J3YXJkcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmltYXRpb246OmZpbGxNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkFuaW1hdGlvbjo6dGltaW5nRnVu
Y3Rpb24pOgorICAgICAgICAoR3JhcGhpY3NMYXllckFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjphbmltYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmlt
YXRpb24pOgorCiAyMDEzLTAyLTA2ICBUZXJyeSBBbmRlcnNvbiAgPHRkYW5kZXJzb25AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBnZXN0dXJlIHNjcm9sbCBldmVudHMg
dGhhdCBkbyBub3QgcHJvcGFnYXRlIHRvIGVuY2xvc2luZyBzY3JvbGxhYmxlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGRkYzRhZDkxOTUyNGQwMTIwYjZmNTQ1OWI2NDJhMzJmMDRiZDNhZDUuLmFiYTc1ODQ3ZjY3
YTNlNzFkMDdkODc2ODZiOGYzMmQ2ZGFhMzlmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBA
QAorMjAxMy0wMi0wNiAgQ2hhbmcgV2FuIEhvbmcgIDxqb3VybW9vbkBjb21wYW55MTAwLm5ldD4K
KworICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uIHVzZXMgQW5pbWF0aW9uIGp1c3QgZm9y
IHNvbWUgbWVtYmVycy4gSXQgaXMgbW9yZQorICAgICAgICBzdWNjaW5jdCB0byBoYXZlIHRoZSBp
bnRlcm5hbCB0eXBlIGZvciB0aGlzIHB1cnBvc2UuIEV4dHJhY3Rpbmcgc29tZSBtZW1iZXJzCisg
ICAgICAgIGZyb20gQW5pbWF0aW9uLCBJIGNyZWF0ZSBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpB
bmltYXRpb24uCisKKyAgICAgICAgW1RleE1hcF0gUmVtb3ZlIEFuaW1hdGlvbiBpbiBHcmFwaGlj
c0xheWVyQW5pbWF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA4NjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
QXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOgorICAgICAg
ICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorCiAyMDEzLTAyLTA2ICBFbnJpY2EgQ2FzdWNjaSAgPGVu
cmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgQVNTRVJUKCFtX2ZpbmRQYWdlT3ZlcmxheSkgaW4g
RmluZENvbnRyb2xsZXIuY3BwIGFmdGVyIHIxNDA3NjkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwCmlu
ZGV4IDE2NzEwYjYyOTQ3MWZmOTMyMGUwZjY0ZjlmY2E4OWQwMWE5NDZjODMuLjM2NGI2ODBmNmMz
NDkwODk4OTFhODRmNzk0YjNkN2E5NmIxMWNjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwCkBA
IC03NiwxNiArNzYsMTYgQEAgc3RhdGljIEZpbHRlck9wZXJhdGlvbnMgYXBwbHlGaWx0ZXJBbmlt
YXRpb24oY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogZnJvbSwgY29uc3QKIH0KICNlbmRpZgogCi1z
dGF0aWMgYm9vbCBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoQW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbG9vcENvdW50KQorc3RhdGljIGJvb2wgc2hvdWxk
UmV2ZXJzZUFuaW1hdGlvblZhbHVlKEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkFuaW1hdGlvbjo6
QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgaW50IGxvb3BDb3VudCkKIHsKLSAgICBpZiAo
KChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpICYm
IChsb29wQ291bnQgJiAxKSkKLSAgICAgICAgfHwgKChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKSAmJiAhKGxvb3BDb3VudCAmIDEpKQot
ICAgICAgICB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZl
cnNlKQorICAgIGlmICgoKGRpcmVjdGlvbiA9PSBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmlt
YXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkgJiYgKGxvb3BDb3VudCAmIDEpKQor
ICAgICAgICB8fCAoKGRpcmVjdGlvbiA9PSBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmltYXRp
b246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpICYmICEobG9vcENvdW50ICYg
MSkpCisgICAgICAgIHx8IGRpcmVjdGlvbiA9PSBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmlt
YXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9u
VmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1lLCBkb3VibGUgZHVyYXRpb24sIEFuaW1hdGlvbjo6QW5p
bWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgZG91YmxlIGl0ZXJhdGlvbkNvdW50KQorc3RhdGlj
IGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1lLCBkb3Vi
bGUgZHVyYXRpb24sIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkFuaW1hdGlvbjo6QW5pbWF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbiwgZG91YmxlIGl0ZXJhdGlvbkNvdW50KQogewogICAgIGlmICgh
ZHVyYXRpb24pCiAgICAgICAgIHJldHVybiAwOwpAQCAtOTUsMTUgKzk1LDE0IEBAIHN0YXRpYyBk
b3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSwgZG91Ymxl
IGR1cmF0aW9uLCBBbmltCiAgICAgY29uc3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1l
IC0gbGFzdEZ1bGxMb29wOwogICAgIC8vIElnbm9yZSByZW1haW5kZXIgd2hlbiB3ZSd2ZSByZWFj
aGVkIHRoZSBlbmQgb2YgYW5pbWF0aW9uLgogICAgIGNvbnN0IGRvdWJsZSBub3JtYWxpemVkID0g
KGxvb3BDb3VudCA9PSBpdGVyYXRpb25Db3VudCkgPyAxLjAgOiAocmVtYWluZGVyIC8gZHVyYXRp
b24pOwotCiAgICAgcmV0dXJuIHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShkaXJlY3Rpb24s
IGxvb3BDb3VudCkgPyAxIC0gbm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQ7CiB9CiAKLXN0YXRpYyBk
b3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyhkb3VibGUgaXRl
cmF0aW9uQ291bnQsIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3N0
YXRpYyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyhkb3Vi
bGUgaXRlcmF0aW9uQ291bnQsIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkFuaW1hdGlvbjo6QW5p
bWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1h
dGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsKQorICAgIGlmIChkaXJlY3Rpb24gPT0gR3Jh
cGhpY3NMYXllckFuaW1hdGlvbjo6QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWwp
CiAgICAgICAgIHJldHVybiAxOwotICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb25SZXZlcnNlKQorICAgIGlmIChkaXJlY3Rpb24gPT0gR3JhcGhpY3NMYXll
ckFuaW1hdGlvbjo6QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gc2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKGRpcmVj
dGlvbiwgaXRlcmF0aW9uQ291bnQpID8gMSA6IDA7CiB9CkBAIC0yMDMsMjAgKzIwMiwzOCBAQCBz
dGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9ucyogZgogICAgIHJldHVybiBtYXRyaXg7CiB9CiAKLXN0YXRpYyBj
b25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25z
dCBBbmltYXRpb25WYWx1ZSogYW5pbVZhbHVlLCBjb25zdCBBbmltYXRpb24qIGFuaW0pCitzdGF0
aWMgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUo
Y29uc3QgQW5pbWF0aW9uVmFsdWUqIGFuaW1WYWx1ZSwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1h
dGlvbjo6QW5pbWF0aW9uJiBhbmltKQogewogICAgIGlmIChhbmltVmFsdWUtPnRpbWluZ0Z1bmN0
aW9uKCkpCiAgICAgICAgIHJldHVybiBhbmltVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAg
aWYgKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiBhbmltLT50aW1pbmdG
dW5jdGlvbigpLmdldCgpOworICAgIGlmIChhbmltLnRpbWluZ0Z1bmN0aW9uKCkpCisgICAgICAg
IHJldHVybiBhbmltLnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCk7CiAKICAgICByZXR1cm4gQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvbjo6ZGVmYXVsdFRpbWluZ0Z1bmN0aW9uKCk7CiB9CiAKLUdyYXBo
aWNzTGF5ZXJBbmltYXRpb246OkdyYXBoaWNzTGF5ZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzLCBjb25zdCBJbnRTaXplJiBi
b3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgZG91YmxlIHN0YXJ0VGltZSwgYm9v
bCBsaXN0c01hdGNoKQorR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6QW5pbWF0aW9uOjpBbmltYXRp
b24oY29uc3QgV2ViQ29yZTo6QW5pbWF0aW9uKiBhbmltKQorICAgIDogbV9kaXJlY3Rpb24oYW5p
bS0+ZGlyZWN0aW9uKCkpCisgICAgLCBtX2R1cmF0aW9uKGFuaW0tPmR1cmF0aW9uKCkpCisgICAg
LCBtX2l0ZXJhdGlvbkNvdW50KGFuaW0tPml0ZXJhdGlvbkNvdW50KCkpCisgICAgLCBtX2ZpbGxN
b2RlKGFuaW0tPmZpbGxNb2RlKCkpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKGFuaW0tPnRpbWlu
Z0Z1bmN0aW9uKCkpCit7Cit9CisKK0dyYXBoaWNzTGF5ZXJBbmltYXRpb246OkFuaW1hdGlvbjo6
QW5pbWF0aW9uKHVuc2lnbmVkIGRpcmVjdGlvbiwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgaXRl
cmF0aW9uQ291bnQsIHVuc2lnbmVkIGZpbGxNb2RlLCBQYXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9u
PiB0aW1pbmdGdW5jdGlvbikKKyAgICA6IG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKKyAgICAsIG1f
ZHVyYXRpb24oZHVyYXRpb24pCisgICAgLCBtX2l0ZXJhdGlvbkNvdW50KGl0ZXJhdGlvbkNvdW50
KQorICAgICwgbV9maWxsTW9kZShmaWxsTW9kZSkKKyAgICAsIG1fdGltaW5nRnVuY3Rpb24odGlt
aW5nRnVuY3Rpb24pCit7Cit9CisKK0dyYXBoaWNzTGF5ZXJBbmltYXRpb246OkdyYXBoaWNzTGF5
ZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
a2V5ZnJhbWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBHcmFwaGljc0xheWVyQW5p
bWF0aW9uOjpBbmltYXRpb24mIGFuaW1hdGlvbiwgZG91YmxlIHN0YXJ0VGltZSwgYm9vbCBsaXN0
c01hdGNoKQogICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQogICAgICwgbV9ib3hTaXplKGJv
eFNpemUpCi0gICAgLCBtX2FuaW1hdGlvbihBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24pKQor
ICAgICwgbV9hbmltYXRpb24oYW5pbWF0aW9uKQogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBt
X2xpc3RzTWF0Y2gobGlzdHNNYXRjaCkKICAgICAsIG1fc3RhcnRUaW1lKHN0YXJ0VGltZSkKQEAg
LTI1MSw3ICsyNjgsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OmlzQWN0aXZlKCkg
Y29uc3QKICAgICBpZiAoc3RhdGUoKSAhPSBTdG9wcGVkU3RhdGUpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCk7CisgICAgcmV0
dXJuIG1fYW5pbWF0aW9uLmZpbGxzRm9yd2FyZHMoKTsKIH0KIAogYm9vbCBHcmFwaGljc0xheWVy
QW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQg
dHlwZSkgY29uc3QKQEAgLTI3OSwxMiArMjk2LDEyIEBAIHZvaWQgR3JhcGhpY3NMYXllckFuaW1h
dGlvbjo6YXBwbHkoQ2xpZW50KiBjbGllbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGRvdWJs
ZSB0b3RhbFJ1bm5pbmdUaW1lID0gY29tcHV0ZVRvdGFsUnVubmluZ1RpbWUoKTsKLSAgICBkb3Vi
bGUgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKHRvdGFsUnVubmlu
Z1RpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpLCBtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCks
IG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKKyAgICBkb3VibGUgbm9ybWFsaXplZFZh
bHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKHRvdGFsUnVubmluZ1RpbWUsIG1fYW5pbWF0
aW9uLmR1cmF0aW9uKCksIG1fYW5pbWF0aW9uLmRpcmVjdGlvbigpLCBtX2FuaW1hdGlvbi5pdGVy
YXRpb25Db3VudCgpKTsKIAotICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAh
PSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5nVGltZSA+
PSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
KSB7CisgICAgaWYgKG1fYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50KCkgIT0gR3JhcGhpY3NMYXll
ckFuaW1hdGlvbjo6QW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlICYmIHRvdGFsUnVu
bmluZ1RpbWUgPj0gbV9hbmltYXRpb24uZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLml0ZXJhdGlv
bkNvdW50KCkpIHsKICAgICAgICAgc2V0U3RhdGUoU3RvcHBlZFN0YXRlKTsKLSAgICAgICAgaWYg
KG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkpCi0gICAgICAgICAgICBub3JtYWxpemVkVmFs
dWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKG1fYW5pbWF0aW9u
LT5pdGVyYXRpb25Db3VudCgpLCBtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkpOworICAgICAgICBp
ZiAobV9hbmltYXRpb24uZmlsbHNGb3J3YXJkcygpKQorICAgICAgICAgICAgbm9ybWFsaXplZFZh
bHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyhtX2FuaW1hdGlv
bi5pdGVyYXRpb25Db3VudCgpLCBtX2FuaW1hdGlvbi5kaXJlY3Rpb24oKSk7CiAgICAgfQogCiAg
ICAgaWYgKCFub3JtYWxpemVkVmFsdWUpIHsKQEAgLTI5Nyw4ICszMTQsOCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJBbmltYXRpb246OmFwcGx5KENsaWVudCogY2xpZW50KQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkgPT0gMikgewotICAgICAgICBjb25z
dCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdGdW5jdGlvbkZvckFuaW1h
dGlvblZhbHVlKG1fa2V5ZnJhbWVzLmF0KDApLCBtX2FuaW1hdGlvbi5nZXQoKSk7Ci0gICAgICAg
IG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24sIG5v
cm1hbGl6ZWRWYWx1ZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBjb25zdCBU
aW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlv
blZhbHVlKG1fa2V5ZnJhbWVzLmF0KDApLCBtX2FuaW1hdGlvbik7CisgICAgICAgIG5vcm1hbGl6
ZWRWYWx1ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24sIG5vcm1hbGl6ZWRW
YWx1ZSwgbV9hbmltYXRpb24uZHVyYXRpb24oKSk7CiAgICAgICAgIGFwcGx5SW50ZXJuYWwoY2xp
ZW50LCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMTAsOCArMzI3LDggQEAgdm9pZCBHcmFw
aGljc0xheWVyQW5pbWF0aW9uOjphcHBseShDbGllbnQqIGNsaWVudCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBm
cm9tLT5rZXlUaW1lKCkpIC8gKHRvLT5rZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1lKCkpOwotICAg
ICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdGdW5jdGlv
bkZvckFuaW1hdGlvblZhbHVlKGZyb20sIG1fYW5pbWF0aW9uLmdldCgpKTsKLSAgICAgICAgbm9y
bWFsaXplZFZhbHVlID0gYXBwbHlUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbiwgbm9ybWFs
aXplZFZhbHVlLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgIGNvbnN0IFRpbWlu
Z0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiA9IHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFs
dWUoZnJvbSwgbV9hbmltYXRpb24pOworICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBhcHBseVRp
bWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uLCBub3JtYWxpemVkVmFsdWUsIG1fYW5pbWF0aW9u
LmR1cmF0aW9uKCkpOwogICAgICAgICBhcHBseUludGVybmFsKGNsaWVudCwgZnJvbSwgdG8sIG5v
cm1hbGl6ZWRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaApp
bmRleCA5ZjBiNWM1MmFiZDk4MmQ3YmRjNDY4ODI3ZTNkOGY5MGQ2NWJhMWRiLi5jMWY5YWNhZWZk
OTFiYjQ0ZWRjNDA2ZGNkYmVjNmRlMzBmNWQ3ZmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oCkBAIC0z
MSw2ICszMSwzNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJB
bmltYXRpb24gewogcHVibGljOgorICAgIGNsYXNzIEFuaW1hdGlvbiB7CisgICAgcHVibGljOgor
ICAgICAgICBBbmltYXRpb24oKSB7IH07CisgICAgICAgIEFuaW1hdGlvbihjb25zdCBXZWJDb3Jl
OjpBbmltYXRpb24qKTsKKyAgICAgICAgQW5pbWF0aW9uKHVuc2lnbmVkIGRpcmVjdGlvbiwgZG91
YmxlIGR1cmF0aW9uLCBkb3VibGUgaXRlcmF0aW9uQ291bnQsIHVuc2lnbmVkIGZpbGxNb2RlLCBQ
YXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPik7CisKKyAgICAgICAgZW51bSBBbmltYXRpb25EaXJl
Y3Rpb24geworICAgICAgICAgICAgQW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsLAorICAgICAgICAg
ICAgQW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlLAorICAgICAgICAgICAgQW5pbWF0aW9uRGly
ZWN0aW9uUmV2ZXJzZSwKKyAgICAgICAgICAgIEFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJl
dmVyc2UKKyAgICAgICAgfTsKKyAgICAgICAgQW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFuaW1hdGlvbkRpcmVjdGlvbj4obV9kaXJlY3Rp
b24pOyB9CisgICAgICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRp
b247IH0KKworICAgICAgICBlbnVtIHsgSXRlcmF0aW9uQ291bnRJbmZpbml0ZSA9IC0xIH07Cisg
ICAgICAgIGRvdWJsZSBpdGVyYXRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0aW9u
Q291bnQ7IH0KKyAgICAgICAgYm9vbCBmaWxsc0ZvcndhcmRzKCkgY29uc3QgeyByZXR1cm4gbV9m
aWxsTW9kZSA9PSBBbmltYXRpb25GaWxsTW9kZUZvcndhcmRzIHx8IG1fZmlsbE1vZGUgPT0gQW5p
bWF0aW9uRmlsbE1vZGVCb3RoOyB9CisgICAgICAgIHVuc2lnbmVkIGZpbGxNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxsTW9kZTsgfQorICAgICAgICBjb25zdCBQYXNzUmVmUHRyPFRpbWluZ0Z1
bmN0aW9uPiB0aW1pbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb247
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1fZGlyZWN0aW9uOworICAgICAg
ICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICAgICAgZG91YmxlIG1faXRlcmF0aW9uQ291bnQ7Cisg
ICAgICAgIHVuc2lnbmVkIG1fZmlsbE1vZGU7CisgICAgICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlv
bj4gbV90aW1pbmdGdW5jdGlvbjsKKyAgICB9OworCiAgICAgZW51bSBBbmltYXRpb25TdGF0ZSB7
IFBsYXlpbmdTdGF0ZSwgUGF1c2VkU3RhdGUsIFN0b3BwZWRTdGF0ZSB9OwogICAgIGNsYXNzIENs
aWVudCB7CiAgICAgcHVibGljOgpAQCAtNDQsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbigpCiAgICAgICAgIDogbV9rZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0
eUludmFsaWQpCiAgICAgeyB9Ci0gICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbihjb25zdCBTdHJp
bmcmLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmlt
YXRpb24qLCBkb3VibGUsIGJvb2wpOworICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24oY29uc3Qg
U3RyaW5nJiwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3Qg
R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6QW5pbWF0aW9uJiAsIGRvdWJsZSwgYm9vbCk7CiAgICAg
dm9pZCBhcHBseShDbGllbnQqKTsKICAgICB2b2lkIHBhdXNlKGRvdWJsZSk7CiAgICAgdm9pZCBy
ZXN1bWUoKTsKQEAgLTYxLDcgKzkwLDcgQEAgcHVibGljOgogICAgIEludFNpemUgYm94U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYm94U2l6ZTsgfQogICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQogICAgIGRvdWJsZSBwYXVzZVRpbWUoKSBjb25zdCB7
IHJldHVybiBtX3BhdXNlVGltZTsgfQotICAgIFBhc3NSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbi5nZXQoKTsgfQorICAgIEdyYXBoaWNzTGF5
ZXJBbmltYXRpb246OkFuaW1hdGlvbiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1h
dGlvbjsgfQogICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7
IHJldHVybiBtX2tleWZyYW1lczsgfQogICAgIGJvb2wgbGlzdHNNYXRjaCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdHNNYXRjaDsgfQogCkBAIC02OSw3ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBhcHBseUludGVybmFsKENsaWVudCosIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBjb25z
dCBBbmltYXRpb25WYWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKTsKICAgICBLZXlmcmFtZVZhbHVl
TGlzdCBtX2tleWZyYW1lczsKICAgICBJbnRTaXplIG1fYm94U2l6ZTsKLSAgICBSZWZQdHI8QW5p
bWF0aW9uPiBtX2FuaW1hdGlvbjsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmltYXRp
b24gbV9hbmltYXRpb247CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBib29sIG1fbGlzdHNNYXRj
aDsKICAgICBkb3VibGUgbV9zdGFydFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDM3MzZmMjYwNGMwYzEwNDM5
OTk1N2I5OGEyNTI1ZWU3ZGJjZGQ5YmIuLjM5MWE1NzQ5NzcyMjNmNDIzYjY0MDY5NDNkNDEwYTgw
NDM5MTFlZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBib29sIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsCiAgICAgICAgIGxpc3RzTWF0Y2ggPSB2YWxpZGF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMo
dmFsdWVMaXN0LCBpZ25vcmVkSGFzQmlnUm90YXRpb24pID49IDA7CiAKICAgICBtX2xhc3RBbmlt
YXRpb25TdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSBkZWxheUFzTmVnYXRpdmVUaW1l
T2Zmc2V0OwotICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhpY3NMYXllckFuaW1hdGlvbihrZXlm
cmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0sIG1fbGFzdEFuaW1hdGlvblN0YXJ0
VGltZSwgbGlzdHNNYXRjaCkpOworICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhpY3NMYXllckFu
aW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIEdyYXBoaWNzTGF5ZXJB
bmltYXRpb246OkFuaW1hdGlvbihhbmltKSwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lLCBsaXN0
c01hdGNoKSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOwog
ICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDVh
MDZkMTE2OGMyMjc2MDJjYTIwYzFiYzI4MGQxNzY5NzI2YTA1ODguLjYyZTU5ODIzMGFkMmU5ZWYy
MzkxNTk2ZmY4YjRjZTg2YmM5ZDJjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtNjM1LDEyICs2MzUsMTIgQEAgdm9p
ZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+OjplbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiBlbmNvZGVyLCBjb24KICAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5wYXVzZVRpbWUo
KTsKICAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5saXN0c01hdGNoKCk7CiAKLSAgICBSZWZQdHI8
QW5pbWF0aW9uPiBhbmltYXRpb25PYmplY3QgPSBhbmltYXRpb24uYW5pbWF0aW9uKCk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVFbnVtKGFuaW1hdGlvbk9iamVjdC0+ZGlyZWN0aW9uKCkpOwotICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFuaW1hdGlvbk9iamVjdC0+ZmlsbE1vZGUo
KSk7Ci0gICAgZW5jb2RlciA8PCBhbmltYXRpb25PYmplY3QtPmR1cmF0aW9uKCk7Ci0gICAgZW5j
b2RlciA8PCBhbmltYXRpb25PYmplY3QtPml0ZXJhdGlvbkNvdW50KCk7Ci0gICAgZW5jb2RlVGlt
aW5nRnVuY3Rpb24oZW5jb2RlciwgYW5pbWF0aW9uT2JqZWN0LT50aW1pbmdGdW5jdGlvbigpLmdl
dCgpKTsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmltYXRpb24gYW5pbWF0aW9uT2Jq
ZWN0ID0gYW5pbWF0aW9uLmFuaW1hdGlvbigpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShhbmlt
YXRpb25PYmplY3QuZGlyZWN0aW9uKCkpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGFuaW1hdGlvbk9iamVjdC5maWxsTW9kZSgpKTsKKyAgICBlbmNvZGVyIDw8IGFuaW1h
dGlvbk9iamVjdC5kdXJhdGlvbigpOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uT2JqZWN0Lml0
ZXJhdGlvbkNvdW50KCk7CisgICAgZW5jb2RlVGltaW5nRnVuY3Rpb24oZW5jb2RlciwgYW5pbWF0
aW9uT2JqZWN0LnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCkpOwogCiAgICAgY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbi5rZXlmcmFtZXMoKTsKICAgICBlbmNvZGVy
LmVuY29kZUVudW0oa2V5ZnJhbWVzLnByb3BlcnR5KCkpOwpAQCAtNjc2LDEyICs2NzYsMTEgQEAg
Ym9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+OjpkZWNvZGUoQXJndW1l
bnREZWNvZGVyJiBkZWNvZGVyLCBHcmEKICAgICBkb3VibGUgcGF1c2VUaW1lOwogICAgIGJvb2wg
bGlzdHNNYXRjaDsKIAotICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
bjsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmltYXRpb246OkFuaW1hdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb247CiAgICAgdW5zaWduZWQgZmlsbE1vZGU7CiAgICAgZG91YmxlIGR1cmF0
aW9uOwogICAgIGRvdWJsZSBpdGVyYXRpb25Db3VudDsKICAgICBSZWZQdHI8VGltaW5nRnVuY3Rp
b24+IHRpbWluZ0Z1bmN0aW9uOwotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbk9iamVj
dDsKIAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTcwNiwxMyArNzA1LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJB
bmltYXRpb24+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBHcmEKICAgICBpZiAo
IWRlY29kZVRpbWluZ0Z1bmN0aW9uKGRlY29kZXIsIHRpbWluZ0Z1bmN0aW9uKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYW5pbWF0aW9uT2JqZWN0ID0gQW5pbWF0aW9uOjpjcmVhdGUo
KTsKLSAgICBhbmltYXRpb25PYmplY3QtPnNldERpcmVjdGlvbihkaXJlY3Rpb24pOwotICAgIGFu
aW1hdGlvbk9iamVjdC0+c2V0RmlsbE1vZGUoZmlsbE1vZGUpOwotICAgIGFuaW1hdGlvbk9iamVj
dC0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0SXRlcmF0
aW9uQ291bnQoaXRlcmF0aW9uQ291bnQpOwotICAgIGlmICh0aW1pbmdGdW5jdGlvbikKLSAgICAg
ICAgYW5pbWF0aW9uT2JqZWN0LT5zZXRUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbik7Cisg
ICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6QW5pbWF0aW9uIGFuaW1hdGlvbk9iamVjdChkaXJl
Y3Rpb24sIGR1cmF0aW9uLCBpdGVyYXRpb25Db3VudCwgZmlsbE1vZGUsIHRpbWluZ0Z1bmN0aW9u
KTsKIAogICAgIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eTsKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRW51bShwcm9wZXJ0eSkpCkBAIC03NTgsNyArNzUxLDcgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNv
ZGVyLCBHcmEKICAgICAgICAgfQogICAgIH0KIAotICAgIGFuaW1hdGlvbiA9IEdyYXBoaWNzTGF5
ZXJBbmltYXRpb24obmFtZSwga2V5ZnJhbWVzLCBib3hTaXplLCBhbmltYXRpb25PYmplY3QuZ2V0
KCksIHN0YXJ0VGltZSwgbGlzdHNNYXRjaCk7CisgICAgYW5pbWF0aW9uID0gR3JhcGhpY3NMYXll
ckFuaW1hdGlvbihuYW1lLCBrZXlmcmFtZXMsIGJveFNpemUsIGFuaW1hdGlvbk9iamVjdCwgc3Rh
cnRUaW1lLCBsaXN0c01hdGNoKTsKICAgICBhbmltYXRpb24uc2V0U3RhdGUoc3RhdGUsIHBhdXNl
VGltZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187211</attachid>
            <date>2013-02-07 18:04:54 -0800</date>
            <delta_ts>2013-02-12 17:50:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108610-20130208110126.patch</filename>
            <type>text/plain</type>
            <size>20632</size>
            <attacher name="Changwan Hong">cwhong893</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzQ1YzliNmIwNGE4ZmM2
NmZhNjYyN2MyNDE4MGZhMDUwZGZmZTNjZi4uYTY2NjY5ODk5ODY5MGY1ZjVhYTBlNTE4OTU2NDU4
NmI4OTA1YmQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAyLTA3ICBDaGFu
ZyBXYW4gSG9uZyAgPGpvdXJtb29uQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFtUZXhNYXBd
IFJlbW92ZSBBbmltYXRpb24gaW4gR3JhcGhpY3NMYXllckFuaW1hdGlvbi4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODYxMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRp
b24gdXNlcyBBbmltYXRpb24ganVzdCBmb3Igc29tZSBtZW1iZXJzLiBJdCBpcyBtb3JlCisgICAg
ICAgIHN1Y2NpbmN0IHRvIGhhdmUgdGhlIGludGVybmFsIHR5cGUgZm9yIHRoaXMgcHVycG9zZS4g
RXh0cmFjdGluZyBzb21lIG1lbWJlcnMKKyAgICAgICAgZnJvbSBBbmltYXRpb24sIEkgY3JlYXRl
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkFuaW1hdGlvbi4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb246OnNo
b3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQW5pbWF0aW9uOjpub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6bm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmls
bHNGb3J3YXJkcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpu
b3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JUaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckFuaW1hdGlvbjo6QXR0cmlidXRlczo6QXR0cmlidXRlcyk6CisgICAgICAgIChBdHRy
aWJ1dGVzKToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6YXR0cmlidXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpmaWxsc0ZvcndhcmRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlv
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OmFkZEFuaW1hdGlvbik6CisKIDIwMTMtMDItMDcgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIGNvbW1lbnQgYWJvdXQgaG93IHRoZSBT
UUxUcmFuc2FjdGlvbiBzdGF0ZSBtYWNoaW5lIHdvcmtzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDNjMTU4YmFi
Y2RiNWUyYTY0OWU1YjlhYzg3ZGE4MTNiZWY4YmI0YWYuLjk3MGIwNGExZTA4MjM2YmQ3Yzc3OWYz
ZWM5MGI5ODM3MTFhOGI5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wMi0w
NyAgQ2hhbmcgV2FuIEhvbmcgIDxqb3VybW9vbkBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBb
VGV4TWFwXSBSZW1vdmUgQW5pbWF0aW9uIGluIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg2MTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHcmFwaGljc0xheWVy
QW5pbWF0aW9uIHVzZXMgQW5pbWF0aW9uIGp1c3QgZm9yIHNvbWUgbWVtYmVycy4gSXQgaXMgbW9y
ZQorICAgICAgICBzdWNjaW5jdCB0byBoYXZlIHRoZSBpbnRlcm5hbCB0eXBlIGZvciB0aGlzIHB1
cnBvc2UuIEV4dHJhY3Rpbmcgc29tZSBtZW1iZXJzCisgICAgICAgIGZyb20gQW5pbWF0aW9uLCBJ
IGNyZWF0ZSBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmltYXRpb24uCisKKyAgICAgICAgKiBT
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2Rl
cnMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOgorICAgICAgICAoQ29yZUlQQzo6
OjpkZWNvZGUpOgorCiAyMDEzLTAyLTA2ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdo
QGFwcGxlLmNvbT4KIAogICAgICAgICBQbHVnaW5Qcm9jZXNzIHNob3VsZCBxdWl0IGltbWVkaWF0
ZWx5IGlmIGlkbGUgaW4gcmVzcG9uc2UgdG8gbG93LW1lbW9yeSBub3RpZmljYXRpb25zCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5p
bWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXJBbmltYXRpb24uY3BwCmluZGV4IDE2NzEwYjYyOTQ3MWZmOTMyMGUwZjY0ZjlmY2E4OWQwMWE5
NDZjODMuLjBlY2I4ZTA4NmE1ODBkNmU3NmQ1MTk5ZDQ0NTFkZGNmYWE5YjVlMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXJBbmltYXRpb24uY3BwCkBAIC03NiwzOCArNzYsNiBAQCBzdGF0aWMgRmlsdGVyT3BlcmF0aW9u
cyBhcHBseUZpbHRlckFuaW1hdGlvbihjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBmcm9tLCBjb25z
dAogfQogI2VuZGlmCiAKLXN0YXRpYyBib29sIHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShB
bmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGludCBsb29wQ291bnQpCi17
Ci0gICAgaWYgKCgoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0
ZXJuYXRlKSAmJiAobG9vcENvdW50ICYgMSkpCi0gICAgICAgIHx8ICgoZGlyZWN0aW9uID09IEFu
aW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkgJiYgIShsb29wQ291
bnQgJiAxKSkKLSAgICAgICAgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGly
ZWN0aW9uUmV2ZXJzZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1zdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUgcnVubmlu
Z1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uLCBkb3VibGUgaXRlcmF0aW9uQ291bnQpCi17Ci0gICAgaWYgKCFkdXJhdGlvbikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCBpbnQgbG9vcENvdW50ID0gcnVubmluZ1RpbWUg
LyBkdXJhdGlvbjsKLSAgICBjb25zdCBkb3VibGUgbGFzdEZ1bGxMb29wID0gZHVyYXRpb24gKiBk
b3VibGUobG9vcENvdW50KTsKLSAgICBjb25zdCBkb3VibGUgcmVtYWluZGVyID0gcnVubmluZ1Rp
bWUgLSBsYXN0RnVsbExvb3A7Ci0gICAgLy8gSWdub3JlIHJlbWFpbmRlciB3aGVuIHdlJ3ZlIHJl
YWNoZWQgdGhlIGVuZCBvZiBhbmltYXRpb24uCi0gICAgY29uc3QgZG91YmxlIG5vcm1hbGl6ZWQg
PSAobG9vcENvdW50ID09IGl0ZXJhdGlvbkNvdW50KSA/IDEuMCA6IChyZW1haW5kZXIgLyBkdXJh
dGlvbik7Ci0KLSAgICByZXR1cm4gc2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKGRpcmVjdGlv
biwgbG9vcENvdW50KSA/IDEgLSBub3JtYWxpemVkIDogbm9ybWFsaXplZDsKLX0KLQotc3RhdGlj
IGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKGRvdWJsZSBp
dGVyYXRpb25Db3VudCwgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQot
ewotICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25Ob3Jt
YWwpCi0gICAgICAgIHJldHVybiAxOwotICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
c2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKGRpcmVjdGlvbiwgaXRlcmF0aW9uQ291bnQpID8g
MSA6IDA7Ci19Ci0KIHN0YXRpYyBmbG9hdCBhcHBseU9wYWNpdHlBbmltYXRpb24oZmxvYXQgZnJv
bU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0eSwgZG91YmxlIHByb2dyZXNzKQogewogICAgIC8vIE9w
dGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCkBAIC0x
MzcsMjQgKzEwNSw2IEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbihp
bnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0CiAgICAgcmV0dXJuIGZsb29y
KG51bVN0ZXBzICogdCkgLyBudW1TdGVwczsKIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBhcHBs
eVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiwgZmxv
YXQgcHJvZ3Jlc3MsIGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBpZiAoIXRpbWluZ0Z1bmN0aW9u
KQotICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7Ci0KLSAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlz
Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvbnN0IEN1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb24qIGN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBzb2x2ZUN1YmljQmV6
aWVyRnVuY3Rpb24oY3RmLT54MSgpLCBjdGYtPnkxKCksIGN0Zi0+eDIoKSwgY3RmLT55MigpLCBw
cm9ncmVzcywgZHVyYXRpb24pOwotICAgIH0KLQotICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+aXNT
dGVwc1RpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgY29uc3QgU3RlcHNUaW1pbmdGdW5jdGlv
biogc3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1
bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlU3RlcHNGdW5jdGlvbihzdGYtPm51bWJlck9m
U3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBkb3VibGUocHJvZ3Jlc3MpKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcHJvZ3Jlc3M7Ci19Ci0KIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBh
cHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmcm9tLCBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0bywgZG91YmxlIHByb2dyZXNzLCBjb25zdCBJbnRT
aXplJiBib3hTaXplLCBib29sIGxpc3RzTWF0Y2gpCiB7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbWF0cml4OwpAQCAtMjAzLDIwICsxNTMsMTAgQEAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGYK
ICAgICByZXR1cm4gbWF0cml4OwogfQogCi1zdGF0aWMgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRp
bWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFsdWUqIGFuaW1W
YWx1ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltKQotewotICAgIGlmIChhbmltVmFsdWUtPnRpbWlu
Z0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiBhbmltVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCk7
Ci0gICAgaWYgKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiBhbmltLT50
aW1pbmdGdW5jdGlvbigpLmdldCgpOwotCi0gICAgcmV0dXJuIEN1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb246OmRlZmF1bHRUaW1pbmdGdW5jdGlvbigpOwotfQotCi1HcmFwaGljc0xheWVyQW5pbWF0
aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3Qg
QW5pbWF0aW9uKiBhbmltYXRpb24sIGRvdWJsZSBzdGFydFRpbWUsIGJvb2wgbGlzdHNNYXRjaCkK
K0dyYXBoaWNzTGF5ZXJBbmltYXRpb246OkdyYXBoaWNzTGF5ZXJBbmltYXRpb24oY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzLCBjb25zdCBJbnRT
aXplJiBib3hTaXplLCBjb25zdCBBdHRyaWJ1dGVzJiBhbmltQXR0cnMsIGRvdWJsZSBzdGFydFRp
bWUsIGJvb2wgbGlzdHNNYXRjaCkKICAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKICAgICAs
IG1fYm94U2l6ZShib3hTaXplKQotICAgICwgbV9hbmltYXRpb24oQW5pbWF0aW9uOjpjcmVhdGUo
YW5pbWF0aW9uKSkKKyAgICAsIG1fYXR0cmlidXRlcyhhbmltQXR0cnMpCiAgICAgLCBtX25hbWUo
bmFtZSkKICAgICAsIG1fbGlzdHNNYXRjaChsaXN0c01hdGNoKQogICAgICwgbV9zdGFydFRpbWUo
c3RhcnRUaW1lKQpAQCAtMjI3LDYgKzE2Nyw2MSBAQCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpH
cmFwaGljc0xheWVyQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS2V5ZnJhbQog
ewogfQogCitib29sIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OnNob3VsZFJldmVyc2VBbmltYXRp
b25WYWx1ZShpbnQgbG9vcENvdW50KQoreworICAgIGlmICgoKG1fYXR0cmlidXRlcy5kaXJlY3Rp
b24gPT0gQW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKSAmJiAobG9vcENvdW50ICYgMSkpCisg
ICAgICAgIHx8ICgobV9hdHRyaWJ1dGVzLmRpcmVjdGlvbiA9PSBBbmltYXRpb25EaXJlY3Rpb25B
bHRlcm5hdGVSZXZlcnNlKSAmJiAhKGxvb3BDb3VudCAmIDEpKQorICAgICAgICB8fCBtX2F0dHJp
YnV0ZXMuZGlyZWN0aW9uID09IEFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworZG91YmxlIEdyYXBoaWNzTGF5ZXJB
bmltYXRpb246Om5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUgcnVubmluZ1RpbWUpCit7
CisgICAgaWYgKCFtX2F0dHJpYnV0ZXMuZHVyYXRpb24pCisgICAgICAgIHJldHVybiAwOworCisg
ICAgY29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gbV9hdHRyaWJ1dGVzLmR1cmF0
aW9uOworICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBtX2F0dHJpYnV0ZXMuZHVyYXRp
b24gKiBkb3VibGUobG9vcENvdW50KTsKKyAgICBjb25zdCBkb3VibGUgcmVtYWluZGVyID0gcnVu
bmluZ1RpbWUgLSBsYXN0RnVsbExvb3A7CisgICAgLy8gSWdub3JlIHJlbWFpbmRlciB3aGVuIHdl
J3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiBhbmltYXRpb24uCisgICAgY29uc3QgZG91YmxlIG5vcm1h
bGl6ZWQgPSAobG9vcENvdW50ID09IG1fYXR0cmlidXRlcy5pdGVyYXRpb25Db3VudCkgPyAxLjAg
OiAocmVtYWluZGVyIC8gbV9hdHRyaWJ1dGVzLmR1cmF0aW9uKTsKKyAgICByZXR1cm4gc2hvdWxk
UmV2ZXJzZUFuaW1hdGlvblZhbHVlKGxvb3BDb3VudCkgPyAxIC0gbm9ybWFsaXplZCA6IG5vcm1h
bGl6ZWQ7Cit9CisKK2RvdWJsZSBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpub3JtYWxpemVkQW5p
bWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKCkKK3sKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRp
cmVjdGlvbiA9PSBBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWwpCisgICAgICAgIHJldHVybiAxOwor
ICAgIGlmIChtX2F0dHJpYnV0ZXMuZGlyZWN0aW9uID09IEFuaW1hdGlvbkRpcmVjdGlvblJldmVy
c2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzaG91bGRSZXZlcnNlQW5pbWF0aW9u
VmFsdWUobV9hdHRyaWJ1dGVzLml0ZXJhdGlvbkNvdW50KSA/IDEgOiAwOworfQorCitkb3VibGUg
R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6bm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yVGltaW5n
RnVuY3Rpb24oY29uc3QgQW5pbWF0aW9uVmFsdWUqIGFuaW1WYWx1ZSwgZG91YmxlIHByb2dyZXNz
KQoreworICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbjsKKworICAgIGlm
IChhbmltVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpCisgICAgICAgIHRpbWluZ0Z1bmN0aW9uID0g
YW5pbVZhbHVlLT50aW1pbmdGdW5jdGlvbigpOworICAgIGVsc2UgaWYgKG1fYXR0cmlidXRlcy50
aW1pbmdGdW5jdGlvbikKKyAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBtX2F0dHJpYnV0ZXMudGlt
aW5nRnVuY3Rpb24uZ2V0KCk7CisgICAgZWxzZQorICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IEN1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmRlZmF1bHRUaW1pbmdGdW5jdGlvbigpOworCisgICAg
aWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgeworICAg
ICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdGYgPSBzdGF0aWNfY2FzdDxj
b25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOworICAgICAg
ICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+eDEoKSwgY3RmLT55MSgpLCBj
dGYtPngyKCksIGN0Zi0+eTIoKSwgcHJvZ3Jlc3MsIG1fYXR0cmlidXRlcy5kdXJhdGlvbik7Cisg
ICAgfQorCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVuY3Rpb24oKSkg
eworICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGYgPSBzdGF0aWNfY2FzdDxj
b25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOworICAgICAgICByZXR1
cm4gc29sdmVTdGVwc0Z1bmN0aW9uKHN0Zi0+bnVtYmVyT2ZTdGVwcygpLCBzdGYtPnN0ZXBBdFN0
YXJ0KCksIGRvdWJsZShwcm9ncmVzcykpOworICAgIH0KKworICAgIHJldHVybiBwcm9ncmVzczsK
K30KKwogdm9pZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjphcHBseUludGVybmFsKENsaWVudCog
Y2xpZW50LCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUq
IHRvLCBmbG9hdCBwcm9ncmVzcykKIHsKICAgICBzd2l0Y2ggKG1fa2V5ZnJhbWVzLnByb3BlcnR5
KCkpIHsKQEAgLTI1MSw3ICsyNDYsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246Omlz
QWN0aXZlKCkgY29uc3QKICAgICBpZiAoc3RhdGUoKSAhPSBTdG9wcGVkU3RhdGUpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCk7
CisgICAgcmV0dXJuIGZpbGxzRm9yd2FyZHMoKTsKIH0KIAogYm9vbCBHcmFwaGljc0xheWVyQW5p
bWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlw
ZSkgY29uc3QKQEAgLTI3OSwxMiArMjc0LDEyIEBAIHZvaWQgR3JhcGhpY3NMYXllckFuaW1hdGlv
bjo6YXBwbHkoQ2xpZW50KiBjbGllbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGRvdWJsZSB0
b3RhbFJ1bm5pbmdUaW1lID0gY29tcHV0ZVRvdGFsUnVubmluZ1RpbWUoKTsKLSAgICBkb3VibGUg
bm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKHRvdGFsUnVubmluZ1Rp
bWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpLCBtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCksIG1f
YW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKKyAgICBkb3VibGUgbm9ybWFsaXplZFZhbHVl
ID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKHRvdGFsUnVubmluZ1RpbWUpOwogCi0gICAgaWYg
KG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291
bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lID49IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigp
ICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpIHsKKyAgICBpZiAobV9hdHRyaWJ1dGVz
Lml0ZXJhdGlvbkNvdW50ICE9IEl0ZXJhdGlvbkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5n
VGltZSA+PSBtX2F0dHJpYnV0ZXMuZHVyYXRpb24gKiBtX2F0dHJpYnV0ZXMuaXRlcmF0aW9uQ291
bnQpIHsKICAgICAgICAgc2V0U3RhdGUoU3RvcHBlZFN0YXRlKTsKLSAgICAgICAgaWYgKG1fYW5p
bWF0aW9uLT5maWxsc0ZvcndhcmRzKCkpCi0gICAgICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBu
b3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKG1fYW5pbWF0aW9uLT5pdGVy
YXRpb25Db3VudCgpLCBtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAoZmls
bHNGb3J3YXJkcygpKQorICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFu
aW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcygpOwogICAgIH0KIAogICAgIGlmICghbm9ybWFs
aXplZFZhbHVlKSB7CkBAIC0yOTcsOCArMjkyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQW5pbWF0
aW9uOjphcHBseShDbGllbnQqIGNsaWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAobV9rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgY29uc3QgVGltaW5nRnVuY3Rp
b24qIHRpbWluZ0Z1bmN0aW9uID0gdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShtX2tl
eWZyYW1lcy5hdCgwKSwgbV9hbmltYXRpb24uZ2V0KCkpOwotICAgICAgICBub3JtYWxpemVkVmFs
dWUgPSBhcHBseVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uLCBub3JtYWxpemVkVmFsdWUs
IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gbm9y
bWFsaXplZEFuaW1hdGlvblZhbHVlRm9yVGltaW5nRnVuY3Rpb24obV9rZXlmcmFtZXMuYXQoMCks
IG5vcm1hbGl6ZWRWYWx1ZSk7CiAgICAgICAgIGFwcGx5SW50ZXJuYWwoY2xpZW50LCBtX2tleWZy
YW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0zMTAsOCArMzA0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQW5p
bWF0aW9uOjphcHBseShDbGllbnQqIGNsaWVudCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlUaW1l
KCkpIC8gKHRvLT5rZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1lKCkpOwotICAgICAgICBjb25zdCBU
aW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlv
blZhbHVlKGZyb20sIG1fYW5pbWF0aW9uLmdldCgpKTsKLSAgICAgICAgbm9ybWFsaXplZFZhbHVl
ID0gYXBwbHlUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbiwgbm9ybWFsaXplZFZhbHVlLCBt
X2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1h
bGl6ZWRBbmltYXRpb25WYWx1ZUZvclRpbWluZ0Z1bmN0aW9uKGZyb20sIG5vcm1hbGl6ZWRWYWx1
ZSk7CiAgICAgICAgIGFwcGx5SW50ZXJuYWwoY2xpZW50LCBmcm9tLCB0bywgbm9ybWFsaXplZFZh
bHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oCmluZGV4IDlmMGI1
YzUyYWJkOTgyZDdiZGM0Njg4MjdlM2Q4ZjkwZDY1YmExZGIuLjc3NGM4YTdkYmE1MDJmM2U0ZTU1
ZWY1ZjJjMmZiNzhhNjUzZWQ4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmgKQEAgLTQxLDEwICs0MSwz
NyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9OwogCisgICAgZW51bSBBbmltYXRpb25EaXJlY3Rp
b24geworICAgICAgICBBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWwsCisgICAgICAgIEFuaW1hdGlv
bkRpcmVjdGlvbkFsdGVybmF0ZSwKKyAgICAgICAgQW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSwK
KyAgICAgICAgQW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZQorICAgIH07CisgICAg
ZW51bSB7IEl0ZXJhdGlvbkNvdW50SW5maW5pdGUgPSAtMSB9OworCisgICAgLy8gR3JhcGhpY3NM
YXllckFuaW1hdGlvbiBjcmVhdGlvbiBhdHRyaWJ1dGVzLgorICAgIHN0cnVjdCBBdHRyaWJ1dGVz
IHsKKyAgICAgICAgQXR0cmlidXRlcygpIHsgfQorICAgICAgICBBdHRyaWJ1dGVzKHVuc2lnbmVk
IF9kaXJlY3Rpb24sIGRvdWJsZSBfZHVyYXRpb24sIGRvdWJsZSBfaXRlcmF0aW9uQ291bnQsIGRv
dWJsZSBfZmlsbE1vZGUsIFBhc3NSZWZQdHI8VGltaW5nRnVuY3Rpb24+IF90aW1pbmdGdW5jdGlv
bikKKyAgICAgICAgICAgIDogZGlyZWN0aW9uKF9kaXJlY3Rpb24pCisgICAgICAgICAgICAsIGR1
cmF0aW9uKF9kdXJhdGlvbikKKyAgICAgICAgICAgICwgaXRlcmF0aW9uQ291bnQoX2l0ZXJhdGlv
bkNvdW50KQorICAgICAgICAgICAgLCBmaWxsTW9kZShfZmlsbE1vZGUpCisgICAgICAgICAgICAs
IHRpbWluZ0Z1bmN0aW9uKF90aW1pbmdGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgdW5zaWduZWQgZGlyZWN0aW9uOworICAgICAgICBkb3VibGUgZHVyYXRpb247Cisg
ICAgICAgIGRvdWJsZSBpdGVyYXRpb25Db3VudDsKKyAgICAgICAgdW5zaWduZWQgZmlsbE1vZGU7
CisgICAgICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb247CisgICAgfTsK
KwogICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24oKQogICAgICAgICA6IG1fa2V5ZnJhbWVzKEFu
aW1hdGVkUHJvcGVydHlJbnZhbGlkKQogICAgIHsgfQotICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRp
b24oY29uc3QgU3RyaW5nJiwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgQW5pbWF0aW9uKiwgZG91YmxlLCBib29sKTsKKyAgICBHcmFwaGljc0xheWVyQW5p
bWF0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50
U2l6ZSYsIGNvbnN0IEF0dHJpYnV0ZXMmLCBkb3VibGUsIGJvb2wpOwogICAgIHZvaWQgYXBwbHko
Q2xpZW50Kik7CiAgICAgdm9pZCBwYXVzZShkb3VibGUpOwogICAgIHZvaWQgcmVzdW1lKCk7CkBA
IC02MSwxNSArODgsMjEgQEAgcHVibGljOgogICAgIEludFNpemUgYm94U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYm94U2l6ZTsgfQogICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0VGltZTsgfQogICAgIGRvdWJsZSBwYXVzZVRpbWUoKSBjb25zdCB7IHJldHVybiBt
X3BhdXNlVGltZTsgfQotICAgIFBhc3NSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2FuaW1hdGlvbi5nZXQoKTsgfQorICAgIEF0dHJpYnV0ZXMgYXR0cmlidXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgIGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lczsgfQogICAgIGJv
b2wgbGlzdHNNYXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdHNNYXRjaDsgfQorICAgIGJvb2wg
ZmlsbHNGb3J3YXJkcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5maWxsTW9kZSA9PSBB
bmltYXRpb25GaWxsTW9kZUZvcndhcmRzIHx8IG1fYXR0cmlidXRlcy5maWxsTW9kZSA9PSBBbmlt
YXRpb25GaWxsTW9kZUJvdGg7IH0KIAogcHJpdmF0ZToKKyAgICBib29sIHNob3VsZFJldmVyc2VB
bmltYXRpb25WYWx1ZShpbnQgbG9vcENvdW50KTsKKyAgICBkb3VibGUgbm9ybWFsaXplZEFuaW1h
dGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSk7CisgICAgZG91YmxlIG5vcm1hbGl6ZWRBbmlt
YXRpb25WYWx1ZUZvckZpbGxzRm9yd2FyZHMoKTsKKyAgICBkb3VibGUgbm9ybWFsaXplZEFuaW1h
dGlvblZhbHVlRm9yVGltaW5nRnVuY3Rpb24oY29uc3QgQW5pbWF0aW9uVmFsdWUqLCBkb3VibGUg
cHJvZ3Jlc3MpOwogICAgIHZvaWQgYXBwbHlJbnRlcm5hbChDbGllbnQqLCBjb25zdCBBbmltYXRp
b25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9ncmVzcyk7
CisKICAgICBLZXlmcmFtZVZhbHVlTGlzdCBtX2tleWZyYW1lczsKICAgICBJbnRTaXplIG1fYm94
U2l6ZTsKLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKKyAgICBBdHRyaWJ1dGVz
IG1fYXR0cmlidXRlczsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIGJvb2wgbV9saXN0c01hdGNo
OwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwCmluZGV4IDkxNmNmY2U5NTc3OGQxNGFlODBlMTQzMTkwOGU5YWNkYmEwMjQx
NTYuLmM5YzcyYjFmNmU1OWU4YWZmM2Y5YTEwNjdkNjlkZjRhY2EzZGFiOTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtNjEwLDcgKzYxMCw4IEBAIGJv
b2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFt
ZVZhbHVlTGlzdCYgdmFsdWVMaXN0CiAgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFu
aW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCiAgICAgICAgIGxpc3RzTWF0Y2ggPSB2YWxp
ZGF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVMaXN0LCBoYXNCaWdSb3RhdGlvbikgPj0gMDsK
IAotICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhpY3NMYXllckFuaW1hdGlvbihrZXlmcmFtZXNO
YW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0sIFdURjo6Y3VycmVudFRpbWUoKSAtIHRpbWVP
ZmZzZXQsIGxpc3RzTWF0Y2gpKTsKKyAgICBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpB
dHRyaWJ1dGVzIGFuaW1BdHRycyhhbmltLT5kaXJlY3Rpb24oKSwgYW5pbS0+ZHVyYXRpb24oKSwg
YW5pbS0+aXRlcmF0aW9uQ291bnQoKSwgYW5pbS0+ZmlsbE1vZGUoKSwgYW5pbS0+dGltaW5nRnVu
Y3Rpb24oKSk7CisgICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9uKGtl
eWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbUF0dHJzLCBXVEY6OmN1cnJlbnRU
aW1lKCkgLSB0aW1lT2Zmc2V0LCBsaXN0c01hdGNoKSk7CiAgICAgbm90aWZ5Q2hhbmdlKEFuaW1h
dGlvbkNoYW5nZSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDAp
OwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCAwZWU5N2NkYzAwYmFlNTllZTg0ZGViNjk2
NDRlNDViYjM3MTIxM2IyLi4xM2RmNDdmZTY0MzM3NjhhOTA2MDRiYjhmZGQ5ZGNjODRkMmFhMDFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcApAQCAtMTAyNCw4ICsxMDI0LDkgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAog
ICAgIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJh
bnNmb3JtKQogICAgICAgICBsaXN0c01hdGNoID0gdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25z
KHZhbHVlTGlzdCwgaWdub3JlZEhhc0JpZ1JvdGF0aW9uKSA+PSAwOwogCisgICAgY29uc3QgR3Jh
cGhpY3NMYXllckFuaW1hdGlvbjo6QXR0cmlidXRlcyBhbmltQXR0cnMoYW5pbS0+ZGlyZWN0aW9u
KCksIGFuaW0tPmR1cmF0aW9uKCksIGFuaW0tPml0ZXJhdGlvbkNvdW50KCksIGFuaW0tPmZpbGxN
b2RlKCksIGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwogICAgIG1fbGFzdEFuaW1hdGlvblN0YXJ0
VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQ7Ci0g
ICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUs
IHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lLCBsaXN0
c01hdGNoKSk7CisgICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9uKGtl
eWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbUF0dHJzLCBtX2xhc3RBbmltYXRp
b25TdGFydFRpbWUsIGxpc3RzTWF0Y2gpKTsKICAgICBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5z
dGFydE9uZVNob3QoMCk7CiAgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwogICAgIHJldHVybiB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVycy5jcHAKaW5kZXggNWEwNmQxMTY4YzIyNzYwMmNhMjBjMWJjMjgwZDE3Njk3MjZhMDU4OC4u
MWI5Mzg3MzIzZTQxYWUwMjkwNTYzYjE3NDkzZTk1NTRlNTFiN2IyOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0FyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCkBAIC02MzQs
MTMgKzYzNCwxMSBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46
OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbgogICAgIGVuY29kZXIgPDwgYW5p
bWF0aW9uLnN0YXJ0VGltZSgpOwogICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLnBhdXNlVGltZSgp
OwogICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLmxpc3RzTWF0Y2goKTsKLQotICAgIFJlZlB0cjxB
bmltYXRpb24+IGFuaW1hdGlvbk9iamVjdCA9IGFuaW1hdGlvbi5hbmltYXRpb24oKTsKLSAgICBl
bmNvZGVyLmVuY29kZUVudW0oYW5pbWF0aW9uT2JqZWN0LT5kaXJlY3Rpb24oKSk7Ci0gICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYW5pbWF0aW9uT2JqZWN0LT5maWxsTW9kZSgp
KTsKLSAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbk9iamVjdC0+ZHVyYXRpb24oKTsKLSAgICBlbmNv
ZGVyIDw8IGFuaW1hdGlvbk9iamVjdC0+aXRlcmF0aW9uQ291bnQoKTsKLSAgICBlbmNvZGVUaW1p
bmdGdW5jdGlvbihlbmNvZGVyLCBhbmltYXRpb25PYmplY3QtPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0
KCkpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShhbmltYXRpb24uYXR0cmlidXRlcygpLmRpcmVj
dGlvbik7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYW5pbWF0aW9uLmF0
dHJpYnV0ZXMoKS5maWxsTW9kZSk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb24uYXR0cmlidXRl
cygpLmR1cmF0aW9uOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLmF0dHJpYnV0ZXMoKS5pdGVy
YXRpb25Db3VudDsKKyAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihlbmNvZGVyLCBhbmltYXRpb24u
YXR0cmlidXRlcygpLnRpbWluZ0Z1bmN0aW9uLmdldCgpKTsKIAogICAgIGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb24ua2V5ZnJhbWVzKCk7CiAgICAgZW5jb2Rl
ci5lbmNvZGVFbnVtKGtleWZyYW1lcy5wcm9wZXJ0eSgpKTsKQEAgLTY3NiwxMiArNjc0LDExIEBA
IGJvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPjo6ZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciYgZGVjb2RlciwgR3JhCiAgICAgZG91YmxlIHBhdXNlVGltZTsKICAgICBib29s
IGxpc3RzTWF0Y2g7CiAKLSAgICBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b247CisgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbjsKICAgICB1bnNpZ25lZCBmaWxsTW9kZTsKICAgICBkb3VibGUgZHVyYXRpb247CiAgICAg
ZG91YmxlIGl0ZXJhdGlvbkNvdW50OwogICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gdGltaW5n
RnVuY3Rpb247Ci0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uT2JqZWN0OwogCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzA2
LDE0ICs3MDMsNiBAQCBib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46
OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEdyYQogICAgIGlmICghZGVjb2RlVGlt
aW5nRnVuY3Rpb24oZGVjb2RlciwgdGltaW5nRnVuY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBhbmltYXRpb25PYmplY3QgPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFu
aW1hdGlvbk9iamVjdC0+c2V0RGlyZWN0aW9uKGRpcmVjdGlvbik7Ci0gICAgYW5pbWF0aW9uT2Jq
ZWN0LT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7Ci0gICAgYW5pbWF0aW9uT2JqZWN0LT5zZXREdXJh
dGlvbihkdXJhdGlvbik7Ci0gICAgYW5pbWF0aW9uT2JqZWN0LT5zZXRJdGVyYXRpb25Db3VudChp
dGVyYXRpb25Db3VudCk7Ci0gICAgaWYgKHRpbWluZ0Z1bmN0aW9uKQotICAgICAgICBhbmltYXRp
b25PYmplY3QtPnNldFRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKTsKLQogICAgIEFuaW1h
dGVkUHJvcGVydHlJRCBwcm9wZXJ0eTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShwcm9w
ZXJ0eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc1Nyw4ICs3NDYsOCBAQCBib29sIEFy
Z3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46OmRlY29kZShBcmd1bWVudERlY29k
ZXImIGRlY29kZXIsIEdyYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0K
LSAgICBhbmltYXRpb24gPSBHcmFwaGljc0xheWVyQW5pbWF0aW9uKG5hbWUsIGtleWZyYW1lcywg
Ym94U2l6ZSwgYW5pbWF0aW9uT2JqZWN0LmdldCgpLCBzdGFydFRpbWUsIGxpc3RzTWF0Y2gpOwor
ICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkF0dHJpYnV0ZXMgYW5pbUF0dHJzKGRp
cmVjdGlvbiwgZHVyYXRpb24sIGl0ZXJhdGlvbkNvdW50LCBmaWxsTW9kZSwgdGltaW5nRnVuY3Rp
b24pOworICAgIGFuaW1hdGlvbiA9IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24obmFtZSwga2V5ZnJh
bWVzLCBib3hTaXplLCBhbmltQXR0cnMsIHN0YXJ0VGltZSwgbGlzdHNNYXRjaCk7CiAgICAgYW5p
bWF0aW9uLnNldFN0YXRlKHN0YXRlLCBwYXVzZVRpbWUpOwogCiAgICAgcmV0dXJuIHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187980</attachid>
            <date>2013-02-12 17:50:22 -0800</date>
            <delta_ts>2013-02-14 00:34:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108610-20130213104645.patch</filename>
            <type>text/plain</type>
            <size>20521</size>
            <attacher name="Changwan Hong">cwhong893</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDBhMGYxNWVhMmU2YTE3
N2Q3MzI1OGI1ZDVkZDA0MDQ1MzEwMjEwNi4uODYwMTdhYmI5YmFlZmM5ZGM0NzQ5ZWZkMzY0NWI1
NzBkYTVlMjJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAyLTEyICBDaGFu
ZyBXYW4gSG9uZyAgPGpvdXJtb29uQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFtUZXhNYXBd
IFJlbW92ZSBBbmltYXRpb24gaW4gR3JhcGhpY3NMYXllckFuaW1hdGlvbi4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODYxMAorCisgICAgICAgIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24gdXNlcyBBbmltYXRpb24ganVzdCBmb3Igc29tZSBtZW1iZXJz
LgorICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBdHRyaWJ1dGVzIGhhcyB1c2VkIG1l
bWJlcnMuIEl0IGNhbiBtYWtlIHRoZQorICAgICAgICBjb2RlIG1vcmUgY2xlYXIgYW5kIHJlbW92
ZSB1bm5lY2Vzc2FyeSBkYXRhIHBhc3NpbmcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5p
bWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckFuaW1hdGlvbjo6R3JhcGhpY3NMYXllckFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6bm9ybWFsaXplZEFu
aW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb246
Om5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZUZvckZpbGxzRm9yd2FyZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6bm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9y
VGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlv
bjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6
YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkF0dHJpYnV0
ZXM6OkF0dHJpYnV0ZXMpOgorICAgICAgICAoQXR0cmlidXRlcyk6CisgICAgICAgIChHcmFwaGlj
c0xheWVyQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRp
b246OmF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlv
bjo6ZmlsbHNGb3J3YXJkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmltYXRpb24p
OgorCiAyMDEzLTAyLTEyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIENyYXNoIHdoZW4gc2Nyb2xsaW5nIHNvb24gYWZ0ZXIgcGFnZSBzdGFydHMgbG9h
ZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDc1NDE3Yzg4MGU1ZTFmYWE3OTA2N2RiNWFjODhiMGRjZTk4Nzhj
MWYuLmFmZTZiNTdjNDc1NGVlOGQ0MDMwMmE3NWExMGM5MzczNjgzMjNhY2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAxMy0wMi0xMiAgQ2hhbmcgV2FuIEhvbmcgIDxqb3VybW9vbkBj
b21wYW55MTAwLm5ldD4KKworICAgICAgICBbVGV4TWFwXSBSZW1vdmUgQW5pbWF0aW9uIGluIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDg2MTAKKworICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uIHVz
ZXMgQW5pbWF0aW9uIGp1c3QgZm9yIHNvbWUgbWVtYmVycy4KKyAgICAgICAgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbjo6QXR0cmlidXRlcyBoYXMgdXNlZCBtZW1iZXJzLiBJdCBjYW4gbWFrZSB0aGUK
KyAgICAgICAgY29kZSBtb3JlIGNsZWFyIGFuZCByZW1vdmUgdW5uZWNlc3NhcnkgZGF0YSBwYXNz
aW5nLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29k
ZXJzLmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgKENvcmVJUEM6
Ojo6ZGVjb2RlKToKKwogMjAxMy0wMi0xMiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgogCiAgICAgICAgIFNlY0l0ZW1TaGltIHNob3VsZCBiZSBhIFdvcmtRdWV1ZU1lc3Nh
Z2VSZWNlaXZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcAppbmRleCAxNjcxMGI2Mjk0NzFmZjkzMjBl
MGY2NGY5ZmNhODlkMDFhOTQ2YzgzLi43ZDM5Yzc0ZGU1NGNhYmI2MTE5NTNlMGJkOTQ4MWZlYjg3
MGFlYjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcApAQCAtNzYsMzggKzc2LDYgQEAgc3RhdGlj
IEZpbHRlck9wZXJhdGlvbnMgYXBwbHlGaWx0ZXJBbmltYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyogZnJvbSwgY29uc3QKIH0KICNlbmRpZgogCi1zdGF0aWMgYm9vbCBzaG91bGRSZXZlcnNl
QW5pbWF0aW9uVmFsdWUoQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBp
bnQgbG9vcENvdW50KQotewotICAgIGlmICgoKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1h
dGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkgJiYgKGxvb3BDb3VudCAmIDEpKQotICAgICAgICB8fCAo
KGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVy
c2UpICYmICEobG9vcENvdW50ICYgMSkpCi0gICAgICAgIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRp
b246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFs
dWUoZG91YmxlIHJ1bm5pbmdUaW1lLCBkb3VibGUgZHVyYXRpb24sIEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgZG91YmxlIGl0ZXJhdGlvbkNvdW50KQotewotICAgIGlm
ICghZHVyYXRpb24pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgaW50IGxvb3BDb3Vu
dCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247Ci0gICAgY29uc3QgZG91YmxlIGxhc3RGdWxsTG9v
cCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7Ci0gICAgY29uc3QgZG91YmxlIHJlbWFp
bmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29wOwotICAgIC8vIElnbm9yZSByZW1haW5k
ZXIgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgYW5pbWF0aW9uLgotICAgIGNvbnN0IGRv
dWJsZSBub3JtYWxpemVkID0gKGxvb3BDb3VudCA9PSBpdGVyYXRpb25Db3VudCkgPyAxLjAgOiAo
cmVtYWluZGVyIC8gZHVyYXRpb24pOwotCi0gICAgcmV0dXJuIHNob3VsZFJldmVyc2VBbmltYXRp
b25WYWx1ZShkaXJlY3Rpb24sIGxvb3BDb3VudCkgPyAxIC0gbm9ybWFsaXplZCA6IG5vcm1hbGl6
ZWQ7Ci19Ci0KLXN0YXRpYyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNG
b3J3YXJkcyhkb3VibGUgaXRlcmF0aW9uQ291bnQsIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbikKLXsKLSAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uTm9ybWFsKQotICAgICAgICByZXR1cm4gMTsKLSAgICBpZiAoZGlyZWN0aW9u
ID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShkaXJlY3Rpb24sIGl0
ZXJhdGlvbkNvdW50KSA/IDEgOiAwOwotfQotCiBzdGF0aWMgZmxvYXQgYXBwbHlPcGFjaXR5QW5p
bWF0aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBmbG9hdCB0b09wYWNpdHksIGRvdWJsZSBwcm9ncmVz
cykKIHsKICAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMg
KDAgYW5kIDEpLgpAQCAtMTM3LDI0ICsxMDUsNiBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2
ZVN0ZXBzRnVuY3Rpb24oaW50IG51bVN0ZXBzLCBib29sIHN0ZXBBdFN0YXJ0LCBkb3VibGUgdAog
ICAgIHJldHVybiBmbG9vcihudW1TdGVwcyAqIHQpIC8gbnVtU3RlcHM7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgZmxvYXQgYXBwbHlUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdGlt
aW5nRnVuY3Rpb24sIGZsb2F0IHByb2dyZXNzLCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgaWYg
KCF0aW1pbmdGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzOwotCi0gICAgaWYgKHRp
bWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICBj
b25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICByZXR1
cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+eDEoKSwgY3RmLT55MSgpLCBjdGYtPngy
KCksIGN0Zi0+eTIoKSwgcHJvZ3Jlc3MsIGR1cmF0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAodGlt
aW5nRnVuY3Rpb24tPmlzU3RlcHNUaW1pbmdGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvbnN0IFN0
ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVu
Y3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBzb2x2ZVN0ZXBzRnVuY3Rp
b24oc3RmLT5udW1iZXJPZlN0ZXBzKCksIHN0Zi0+c3RlcEF0U3RhcnQoKSwgZG91YmxlKHByb2dy
ZXNzKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHByb2dyZXNzOwotfQotCiBzdGF0aWMgVHJhbnNm
b3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdG8sIGRvdWJsZSBwcm9n
cmVzcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgYm9vbCBsaXN0c01hdGNoKQogewogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKQEAgLTIwMywyMCArMTUzLDEwIEBAIHN0YXRpYyBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zKiBmCiAgICAgcmV0dXJuIG1hdHJpeDsKIH0KIAotc3RhdGljIGNvbnN0IFRp
bWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1h
dGlvblZhbHVlKiBhbmltVmFsdWUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSkKLXsKLSAgICBpZiAo
YW5pbVZhbHVlLT50aW1pbmdGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gYW5pbVZhbHVlLT50
aW1pbmdGdW5jdGlvbigpOwotICAgIGlmIChhbmltLT50aW1pbmdGdW5jdGlvbigpKQotICAgICAg
ICByZXR1cm4gYW5pbS0+dGltaW5nRnVuY3Rpb24oKS5nZXQoKTsKLQotICAgIHJldHVybiBDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5nRnVuY3Rpb24oKTsKLX0KLQotR3Jh
cGhpY3NMYXllckFuaW1hdGlvbjo6R3JhcGhpY3NMYXllckFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMsIGNvbnN0IEludFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBkb3VibGUgc3RhcnRUaW1lLCBi
b29sIGxpc3RzTWF0Y2gpCitHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5p
bWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZy
YW1lcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQXR0cmlidXRlcyYgYXR0cmlidXRl
cywgZG91YmxlIHN0YXJ0VGltZSwgYm9vbCBsaXN0c01hdGNoKQogICAgIDogbV9rZXlmcmFtZXMo
a2V5ZnJhbWVzKQogICAgICwgbV9ib3hTaXplKGJveFNpemUpCi0gICAgLCBtX2FuaW1hdGlvbihB
bmltYXRpb246OmNyZWF0ZShhbmltYXRpb24pKQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0
ZXMpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fbGlzdHNNYXRjaChsaXN0c01hdGNoKQog
ICAgICwgbV9zdGFydFRpbWUoc3RhcnRUaW1lKQpAQCAtMjI3LDYgKzE2Nyw2MSBAQCBHcmFwaGlj
c0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgS2V5ZnJhbQogewogfQogCitib29sIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OnNo
b3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShpbnQgbG9vcENvdW50KQoreworICAgIGlmICgoKG1f
YXR0cmlidXRlcy5kaXJlY3Rpb24gPT0gQW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKSAmJiAo
bG9vcENvdW50ICYgMSkpCisgICAgICAgIHx8ICgobV9hdHRyaWJ1dGVzLmRpcmVjdGlvbiA9PSBB
bmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKSAmJiAhKGxvb3BDb3VudCAmIDEpKQor
ICAgICAgICB8fCBtX2F0dHJpYnV0ZXMuZGlyZWN0aW9uID09IEFuaW1hdGlvbkRpcmVjdGlvblJl
dmVyc2UpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworZG91
YmxlIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246Om5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3Vi
bGUgcnVubmluZ1RpbWUpCit7CisgICAgaWYgKCFtX2F0dHJpYnV0ZXMuZHVyYXRpb24pCisgICAg
ICAgIHJldHVybiAwOworCisgICAgY29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8g
bV9hdHRyaWJ1dGVzLmR1cmF0aW9uOworICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBt
X2F0dHJpYnV0ZXMuZHVyYXRpb24gKiBkb3VibGUobG9vcENvdW50KTsKKyAgICBjb25zdCBkb3Vi
bGUgcmVtYWluZGVyID0gcnVubmluZ1RpbWUgLSBsYXN0RnVsbExvb3A7CisgICAgLy8gSWdub3Jl
IHJlbWFpbmRlciB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiBhbmltYXRpb24uCisgICAg
Y29uc3QgZG91YmxlIG5vcm1hbGl6ZWQgPSAobG9vcENvdW50ID09IG1fYXR0cmlidXRlcy5pdGVy
YXRpb25Db3VudCkgPyAxLjAgOiAocmVtYWluZGVyIC8gbV9hdHRyaWJ1dGVzLmR1cmF0aW9uKTsK
KyAgICByZXR1cm4gc2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKGxvb3BDb3VudCkgPyAxIC0g
bm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQ7Cit9CisKK2RvdWJsZSBHcmFwaGljc0xheWVyQW5pbWF0
aW9uOjpub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKCkKK3sKKyAgICBp
ZiAobV9hdHRyaWJ1dGVzLmRpcmVjdGlvbiA9PSBBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWwpCisg
ICAgICAgIHJldHVybiAxOworICAgIGlmIChtX2F0dHJpYnV0ZXMuZGlyZWN0aW9uID09IEFuaW1h
dGlvbkRpcmVjdGlvblJldmVyc2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzaG91
bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUobV9hdHRyaWJ1dGVzLml0ZXJhdGlvbkNvdW50KSA/IDEg
OiAwOworfQorCitkb3VibGUgR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6bm9ybWFsaXplZEFuaW1h
dGlvblZhbHVlRm9yVGltaW5nRnVuY3Rpb24oY29uc3QgQW5pbWF0aW9uVmFsdWUqIGFuaW1WYWx1
ZSwgZG91YmxlIHByb2dyZXNzKQoreworICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdG
dW5jdGlvbjsKKworICAgIGlmIChhbmltVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpCisgICAgICAg
IHRpbWluZ0Z1bmN0aW9uID0gYW5pbVZhbHVlLT50aW1pbmdGdW5jdGlvbigpOworICAgIGVsc2Ug
aWYgKG1fYXR0cmlidXRlcy50aW1pbmdGdW5jdGlvbikKKyAgICAgICAgdGltaW5nRnVuY3Rpb24g
PSBtX2F0dHJpYnV0ZXMudGltaW5nRnVuY3Rpb24uZ2V0KCk7CisgICAgZWxzZQorICAgICAgICB0
aW1pbmdGdW5jdGlvbiA9IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmRlZmF1bHRUaW1pbmdG
dW5jdGlvbigpOworCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBj
dGYgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGltaW5n
RnVuY3Rpb24pOworICAgICAgICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+
eDEoKSwgY3RmLT55MSgpLCBjdGYtPngyKCksIGN0Zi0+eTIoKSwgcHJvZ3Jlc3MsIG1fYXR0cmli
dXRlcy5kdXJhdGlvbik7CisgICAgfQorCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0ZXBz
VGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBz
dGYgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rp
b24pOworICAgICAgICByZXR1cm4gc29sdmVTdGVwc0Z1bmN0aW9uKHN0Zi0+bnVtYmVyT2ZTdGVw
cygpLCBzdGYtPnN0ZXBBdFN0YXJ0KCksIGRvdWJsZShwcm9ncmVzcykpOworICAgIH0KKworICAg
IHJldHVybiBwcm9ncmVzczsKK30KKwogdm9pZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjphcHBs
eUludGVybmFsKENsaWVudCogY2xpZW50LCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29u
c3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9ncmVzcykKIHsKICAgICBzd2l0Y2ggKG1f
a2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKQEAgLTI1MSw3ICsyNDYsNyBAQCBib29sIEdyYXBoaWNz
TGF5ZXJBbmltYXRpb246OmlzQWN0aXZlKCkgY29uc3QKICAgICBpZiAoc3RhdGUoKSAhPSBTdG9w
cGVkU3RhdGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIG1fYW5pbWF0aW9u
LT5maWxsc0ZvcndhcmRzKCk7CisgICAgcmV0dXJuIGZpbGxzRm9yd2FyZHMoKTsKIH0KIAogYm9v
bCBHcmFwaGljc0xheWVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmlt
YXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3QKQEAgLTI3OSwxMiArMjc0LDEyIEBAIHZvaWQgR3Jh
cGhpY3NMYXllckFuaW1hdGlvbjo6YXBwbHkoQ2xpZW50KiBjbGllbnQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gY29tcHV0ZVRvdGFsUnVubmluZ1Rp
bWUoKTsKLSAgICBkb3VibGUgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZh
bHVlKHRvdGFsUnVubmluZ1RpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpLCBtX2FuaW1hdGlv
bi0+ZGlyZWN0aW9uKCksIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKKyAgICBkb3Vi
bGUgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKHRvdGFsUnVubmlu
Z1RpbWUpOwogCi0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1h
dGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lID49IG1fYW5p
bWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpIHsKKyAg
ICBpZiAobV9hdHRyaWJ1dGVzLml0ZXJhdGlvbkNvdW50ICE9IEl0ZXJhdGlvbkNvdW50SW5maW5p
dGUgJiYgdG90YWxSdW5uaW5nVGltZSA+PSBtX2F0dHJpYnV0ZXMuZHVyYXRpb24gKiBtX2F0dHJp
YnV0ZXMuaXRlcmF0aW9uQ291bnQpIHsKICAgICAgICAgc2V0U3RhdGUoU3RvcHBlZFN0YXRlKTsK
LSAgICAgICAgaWYgKG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkpCi0gICAgICAgICAgICBu
b3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRz
KG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpLCBtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkp
OworICAgICAgICBpZiAoZmlsbHNGb3J3YXJkcygpKQorICAgICAgICAgICAgbm9ybWFsaXplZFZh
bHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcygpOwogICAgIH0K
IAogICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7CkBAIC0yOTcsOCArMjkyLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQW5pbWF0aW9uOjphcHBseShDbGllbnQqIGNsaWVudCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAg
Y29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uID0gdGltaW5nRnVuY3Rpb25Gb3JB
bmltYXRpb25WYWx1ZShtX2tleWZyYW1lcy5hdCgwKSwgbV9hbmltYXRpb24uZ2V0KCkpOwotICAg
ICAgICBub3JtYWxpemVkVmFsdWUgPSBhcHBseVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9u
LCBub3JtYWxpemVkVmFsdWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAgbm9y
bWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yVGltaW5nRnVuY3Rpb24o
bV9rZXlmcmFtZXMuYXQoMCksIG5vcm1hbGl6ZWRWYWx1ZSk7CiAgICAgICAgIGFwcGx5SW50ZXJu
YWwoY2xpZW50LCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6
ZWRWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMTAsOCArMzA0LDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjphcHBseShDbGllbnQqIGNsaWVudCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFs
dWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8gKHRvLT5rZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1lKCkp
OwotICAgICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdG
dW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGZyb20sIG1fYW5pbWF0aW9uLmdldCgpKTsKLSAgICAg
ICAgbm9ybWFsaXplZFZhbHVlID0gYXBwbHlUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbiwg
bm9ybWFsaXplZFZhbHVlLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgIG5vcm1h
bGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZUZvclRpbWluZ0Z1bmN0aW9uKGZy
b20sIG5vcm1hbGl6ZWRWYWx1ZSk7CiAgICAgICAgIGFwcGx5SW50ZXJuYWwoY2xpZW50LCBmcm9t
LCB0bywgbm9ybWFsaXplZFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1h
dGlvbi5oCmluZGV4IDlmMGI1YzUyYWJkOTgyZDdiZGM0Njg4MjdlM2Q4ZjkwZDY1YmExZGIuLjg1
ZjM3MTllMmQ4ZDNlMDk1NzU4OTQzYjc3NzQyZDY0NjlkOWIyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9u
LmgKQEAgLTQxLDEwICs0MSwzNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9OwogCisgICAgZW51
bSBBbmltYXRpb25EaXJlY3Rpb24geworICAgICAgICBBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWws
CisgICAgICAgIEFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSwKKyAgICAgICAgQW5pbWF0aW9u
RGlyZWN0aW9uUmV2ZXJzZSwKKyAgICAgICAgQW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2
ZXJzZQorICAgIH07CisgICAgZW51bSB7IEl0ZXJhdGlvbkNvdW50SW5maW5pdGUgPSAtMSB9Owor
CisgICAgLy8gR3JhcGhpY3NMYXllckFuaW1hdGlvbiBjcmVhdGlvbiBhdHRyaWJ1dGVzLgorICAg
IHN0cnVjdCBBdHRyaWJ1dGVzIHsKKyAgICAgICAgQXR0cmlidXRlcygpIHsgfQorICAgICAgICBB
dHRyaWJ1dGVzKHVuc2lnbmVkIGRpcmVjdGlvbiwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgaXRl
cmF0aW9uQ291bnQsIGRvdWJsZSBmaWxsTW9kZSwgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4g
dGltaW5nRnVuY3Rpb24pCisgICAgICAgICAgICA6IGRpcmVjdGlvbihkaXJlY3Rpb24pCisgICAg
ICAgICAgICAsIGR1cmF0aW9uKGR1cmF0aW9uKQorICAgICAgICAgICAgLCBpdGVyYXRpb25Db3Vu
dChpdGVyYXRpb25Db3VudCkKKyAgICAgICAgICAgICwgZmlsbE1vZGUoZmlsbE1vZGUpCisgICAg
ICAgICAgICAsIHRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCBkaXJlY3Rpb247CisgICAgICAgIGRvdWJsZSBkdXJh
dGlvbjsKKyAgICAgICAgZG91YmxlIGl0ZXJhdGlvbkNvdW50OworICAgICAgICB1bnNpZ25lZCBm
aWxsTW9kZTsKKyAgICAgICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsK
KyAgICB9OworCiAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbigpCiAgICAgICAgIDogbV9rZXlm
cmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCiAgICAgeyB9Ci0gICAgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0
IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qLCBkb3VibGUsIGJvb2wpOworICAgIEdyYXBoaWNz
TGF5ZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBj
b25zdCBJbnRTaXplJiwgY29uc3QgQXR0cmlidXRlcyYsIGRvdWJsZSwgYm9vbCk7CiAgICAgdm9p
ZCBhcHBseShDbGllbnQqKTsKICAgICB2b2lkIHBhdXNlKGRvdWJsZSk7CiAgICAgdm9pZCByZXN1
bWUoKTsKQEAgLTYxLDE1ICs4OCwyMSBAQCBwdWJsaWM6CiAgICAgSW50U2l6ZSBib3hTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3hTaXplOyB9CiAgICAgZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CiAgICAgZG91YmxlIHBhdXNlVGltZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF1c2VUaW1lOyB9Ci0gICAgUGFzc1JlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uLmdldCgpOyB9CisgICAgY29uc3QgQXR0cmli
dXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgIGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZy
YW1lczsgfQogICAgIGJvb2wgbGlzdHNNYXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdHNNYXRj
aDsgfQorICAgIGJvb2wgZmlsbHNGb3J3YXJkcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
cy5maWxsTW9kZSA9PSBBbmltYXRpb25GaWxsTW9kZUZvcndhcmRzIHx8IG1fYXR0cmlidXRlcy5m
aWxsTW9kZSA9PSBBbmltYXRpb25GaWxsTW9kZUJvdGg7IH0KIAogcHJpdmF0ZToKKyAgICBib29s
IHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShpbnQgbG9vcENvdW50KTsKKyAgICBkb3VibGUg
bm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSk7CisgICAgZG91Ymxl
IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZUZvckZpbGxzRm9yd2FyZHMoKTsKKyAgICBkb3VibGUg
bm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yVGltaW5nRnVuY3Rpb24oY29uc3QgQW5pbWF0aW9u
VmFsdWUqLCBkb3VibGUgcHJvZ3Jlc3MpOwogICAgIHZvaWQgYXBwbHlJbnRlcm5hbChDbGllbnQq
LCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBm
bG9hdCBwcm9ncmVzcyk7CisKICAgICBLZXlmcmFtZVZhbHVlTGlzdCBtX2tleWZyYW1lczsKICAg
ICBJbnRTaXplIG1fYm94U2l6ZTsKLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsK
KyAgICBBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIGJv
b2wgbV9saXN0c01hdGNoOwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDkxNmNmY2U5NTc3OGQxNGFlODBlMTQz
MTkwOGU5YWNkYmEwMjQxNTYuLmY0MmU3YWM0OTVjNGY3OGYxMmZkZWIxODI5NzQ0OTY3YjIwNTk4
ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtNjEw
LDcgKzYxMCw4IEBAIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0CiAgICAgaWYgKHZhbHVlTGlzdC5w
cm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCiAgICAgICAgIGxp
c3RzTWF0Y2ggPSB2YWxpZGF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVMaXN0LCBoYXNCaWdS
b3RhdGlvbikgPj0gMDsKIAotICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhpY3NMYXllckFuaW1h
dGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0sIFdURjo6Y3VycmVu
dFRpbWUoKSAtIHRpbWVPZmZzZXQsIGxpc3RzTWF0Y2gpKTsKKyAgICBHcmFwaGljc0xheWVyQW5p
bWF0aW9uOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMoYW5pbS0+ZGlyZWN0aW9uKCksIGFuaW0tPmR1
cmF0aW9uKCksIGFuaW0tPml0ZXJhdGlvbkNvdW50KCksIGFuaW0tPmZpbGxNb2RlKCksIGFuaW0t
PnRpbWluZ0Z1bmN0aW9uKCkpOworICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhpY3NMYXllckFu
aW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGF0dHJpYnV0ZXMsIFdU
Rjo6Y3VycmVudFRpbWUoKSAtIHRpbWVPZmZzZXQsIGxpc3RzTWF0Y2gpKTsKICAgICBub3RpZnlD
aGFuZ2UoQW5pbWF0aW9uQ2hhbmdlKTsKICAgICBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFy
dE9uZVNob3QoMCk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDBlZTk3Y2RjMDBiYWU1
OWVlODRkZWI2OTY0NGU0NWJiMzcxMjEzYjIuLjg3YTg2ZGYyY2E5YmQ5Y2IzMGFjM2ZkMTJkNWU3
ZmQ4YmZkMjk0NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0xMDI0LDggKzEwMjQsOSBAQCBib29sIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsCiAgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVy
dHlXZWJraXRUcmFuc2Zvcm0pCiAgICAgICAgIGxpc3RzTWF0Y2ggPSB2YWxpZGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbnModmFsdWVMaXN0LCBpZ25vcmVkSGFzQmlnUm90YXRpb24pID49IDA7CiAKKyAg
ICBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMoYW5pbS0+ZGly
ZWN0aW9uKCksIGFuaW0tPmR1cmF0aW9uKCksIGFuaW0tPml0ZXJhdGlvbkNvdW50KCksIGFuaW0t
PmZpbGxNb2RlKCksIGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwogICAgIG1fbGFzdEFuaW1hdGlv
blN0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZz
ZXQ7Ci0gICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9uKGtleWZyYW1l
c05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1l
LCBsaXN0c01hdGNoKSk7CisgICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0
aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYXR0cmlidXRlcywgbV9sYXN0
QW5pbWF0aW9uU3RhcnRUaW1lLCBsaXN0c01hdGNoKSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVk
VGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJn
dW1lbnRDb2RlcnMuY3BwCmluZGV4IDVhMDZkMTE2OGMyMjc2MDJjYTIwYzFiYzI4MGQxNzY5NzI2
YTA1ODguLjFmOTEwMjMzYTczYmY4OTlkOTcwY2NkNmE5OWU4YzlmN2JkZDljNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApA
QCAtNjM0LDEzICs2MzQsMTEgQEAgdm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb24+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb24KICAgICBlbmNvZGVy
IDw8IGFuaW1hdGlvbi5zdGFydFRpbWUoKTsKICAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5wYXVz
ZVRpbWUoKTsKICAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5saXN0c01hdGNoKCk7Ci0KLSAgICBS
ZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb25PYmplY3QgPSBhbmltYXRpb24uYW5pbWF0aW9uKCk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKGFuaW1hdGlvbk9iamVjdC0+ZGlyZWN0aW9uKCkpOwot
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFuaW1hdGlvbk9iamVjdC0+Zmls
bE1vZGUoKSk7Ci0gICAgZW5jb2RlciA8PCBhbmltYXRpb25PYmplY3QtPmR1cmF0aW9uKCk7Ci0g
ICAgZW5jb2RlciA8PCBhbmltYXRpb25PYmplY3QtPml0ZXJhdGlvbkNvdW50KCk7Ci0gICAgZW5j
b2RlVGltaW5nRnVuY3Rpb24oZW5jb2RlciwgYW5pbWF0aW9uT2JqZWN0LT50aW1pbmdGdW5jdGlv
bigpLmdldCgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0oYW5pbWF0aW9uLmF0dHJpYnV0ZXMo
KS5kaXJlY3Rpb24pOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFuaW1h
dGlvbi5hdHRyaWJ1dGVzKCkuZmlsbE1vZGUpOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLmF0
dHJpYnV0ZXMoKS5kdXJhdGlvbjsKKyAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5hdHRyaWJ1dGVz
KCkuaXRlcmF0aW9uQ291bnQ7CisgICAgZW5jb2RlVGltaW5nRnVuY3Rpb24oZW5jb2RlciwgYW5p
bWF0aW9uLmF0dHJpYnV0ZXMoKS50aW1pbmdGdW5jdGlvbi5nZXQoKSk7CiAKICAgICBjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYW5pbWF0aW9uLmtleWZyYW1lcygpOwogICAg
IGVuY29kZXIuZW5jb2RlRW51bShrZXlmcmFtZXMucHJvcGVydHkoKSk7CkBAIC02NzYsMTIgKzY3
NCwxMSBAQCBib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46OmRlY29k
ZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEdyYQogICAgIGRvdWJsZSBwYXVzZVRpbWU7CiAg
ICAgYm9vbCBsaXN0c01hdGNoOwogCi0gICAgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uOworICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb247CiAgICAgdW5zaWduZWQgZmlsbE1vZGU7CiAgICAgZG91YmxlIGR1cmF0aW9u
OwogICAgIGRvdWJsZSBpdGVyYXRpb25Db3VudDsKICAgICBSZWZQdHI8VGltaW5nRnVuY3Rpb24+
IHRpbWluZ0Z1bmN0aW9uOwotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbk9iamVjdDsK
IAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTcwNiwxNCArNzAzLDYgQEAgYm9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb24+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBHcmEKICAgICBpZiAoIWRl
Y29kZVRpbWluZ0Z1bmN0aW9uKGRlY29kZXIsIHRpbWluZ0Z1bmN0aW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYW5pbWF0aW9uT2JqZWN0ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsK
LSAgICBhbmltYXRpb25PYmplY3QtPnNldERpcmVjdGlvbihkaXJlY3Rpb24pOwotICAgIGFuaW1h
dGlvbk9iamVjdC0+c2V0RmlsbE1vZGUoZmlsbE1vZGUpOwotICAgIGFuaW1hdGlvbk9iamVjdC0+
c2V0RHVyYXRpb24oZHVyYXRpb24pOwotICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0SXRlcmF0aW9u
Q291bnQoaXRlcmF0aW9uQ291bnQpOwotICAgIGlmICh0aW1pbmdGdW5jdGlvbikKLSAgICAgICAg
YW5pbWF0aW9uT2JqZWN0LT5zZXRUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbik7Ci0KICAg
ICBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHk7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVu
dW0ocHJvcGVydHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NTcsOCArNzQ2LDggQEAg
Ym9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+OjpkZWNvZGUoQXJndW1l
bnREZWNvZGVyJiBkZWNvZGVyLCBHcmEKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQotCi0gICAgYW5pbWF0aW9uID0gR3JhcGhpY3NMYXllckFuaW1hdGlvbihuYW1lLCBrZXlm
cmFtZXMsIGJveFNpemUsIGFuaW1hdGlvbk9iamVjdC5nZXQoKSwgc3RhcnRUaW1lLCBsaXN0c01h
dGNoKTsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMo
ZGlyZWN0aW9uLCBkdXJhdGlvbiwgaXRlcmF0aW9uQ291bnQsIGZpbGxNb2RlLCB0aW1pbmdGdW5j
dGlvbik7CisgICAgYW5pbWF0aW9uID0gR3JhcGhpY3NMYXllckFuaW1hdGlvbihuYW1lLCBrZXlm
cmFtZXMsIGJveFNpemUsIGF0dHJpYnV0ZXMsIHN0YXJ0VGltZSwgbGlzdHNNYXRjaCk7CiAgICAg
YW5pbWF0aW9uLnNldFN0YXRlKHN0YXRlLCBwYXVzZVRpbWUpOwogCiAgICAgcmV0dXJuIHRydWU7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>