<?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>85084</bug_id>
          
          <creation_ts>2012-04-27 11:15:37 -0700</creation_ts>
          <short_desc>[chromium] Create LinkHighlightLayerChromium class to provide link-highlight preview animations for GraphicsLayerChromium.</short_desc>
          <delta_ts>2012-05-11 07:12:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>85816</dependson>
          <blocked>84487</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="W. James MacLean">wjmaclean</reporter>
          <assigned_to name="W. James MacLean">wjmaclean</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>rjkroege</cc>
    
    <cc>tdanderson</cc>
    
    <cc>varunjain</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>611703</commentid>
    <comment_count>0</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-04-27 11:15:37 -0700</bug_when>
    <thetext>[chromium] Create LinkHighlightLayerChromium class to provide link-highlight preview animations for GraphicsLayerChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611713</commentid>
    <comment_count>1</comment_count>
      <attachid>139239</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-04-27 11:21:03 -0700</bug_when>
    <thetext>Created attachment 139239
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612716</commentid>
    <comment_count>2</comment_count>
      <attachid>139239</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-30 09:59:51 -0700</bug_when>
    <thetext>Comment on attachment 139239
Patch

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

I like this in general.  It seems a little bit wasteful of texture memory to use a content layer for a link highlight, but on the other hand we won&apos;t have many of them at once, they&apos;re small, and it&apos;s so much simpler to just draw the path into a GraphicsContext then to try to draw it behind and not use texture memory.

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerChromium.cpp:76
&gt; +    OwnPtr&lt;CCActiveAnimation&gt; animation(CCActiveAnimation::create(curve.release(), ++id, 0, CCActiveAnimation::Opacity));

How do the animation ids here work with other ids that are potentially conflicting in the animation system? If somebody removed an animation in css by name that mapped to a conflicting id, it looks like both would get removed by CCLayerAnimationController::removeAnimation.

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerChromium.cpp:114
&gt; +    if (m_parent)
&gt; +        static_cast&lt;GraphicsLayerChromium*&gt;(m_parent)-&gt;didFinishLinkHighlightLayer();

I think you should just use GraphicsLayerChromium as the type here all the way through and not static cast.  This is a LinkHilighterLayerChromium, so it&apos;s not like other GraphicsLayer types will work here.

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerChromium.h:38
&gt; +class LinkHighlightLayerChromium : public RefCounted&lt;LinkHighlightLayerChromium&gt;, public ContentLayerDelegate, public CCLayerAnimationDelegate {

It&apos;s really confusing to suffix this with &quot;LayerChromium&quot; when it&apos;s really a layer delegate and not actually a layer itself.  Even LinkHighlighter on its own would be clearer to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612723</commentid>
    <comment_count>3</comment_count>
      <attachid>139239</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-04-30 10:19:49 -0700</bug_when>
    <thetext>Comment on attachment 139239
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerChromium.cpp:76
&gt;&gt; +    OwnPtr&lt;CCActiveAnimation&gt; animation(CCActiveAnimation::create(curve.release(), ++id, 0, CCActiveAnimation::Opacity));
&gt; 
&gt; How do the animation ids here work with other ids that are potentially conflicting in the animation system? If somebody removed an animation in css by name that mapped to a conflicting id, it looks like both would get removed by CCLayerAnimationController::removeAnimation.

I will check with Ian and fix this. Perhaps the static animation/group ids in GLC.cpp could be used?

&gt;&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerChromium.cpp:114
&gt;&gt; +        static_cast&lt;GraphicsLayerChromium*&gt;(m_parent)-&gt;didFinishLinkHighlightLayer();
&gt; 
&gt; I think you should just use GraphicsLayerChromium as the type here all the way through and not static cast.  This is a LinkHilighterLayerChromium, so it&apos;s not like other GraphicsLayer types will work here.

OK, will do!

&gt;&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerChromium.h:38
&gt;&gt; +class LinkHighlightLayerChromium : public RefCounted&lt;LinkHighlightLayerChromium&gt;, public ContentLayerDelegate, public CCLayerAnimationDelegate {
&gt; 
&gt; It&apos;s really confusing to suffix this with &quot;LayerChromium&quot; when it&apos;s really a layer delegate and not actually a layer itself.  Even LinkHighlighter on its own would be clearer to me.

Oops, that&apos;s a legacy thing. I will revise in the new patch. To keep the name shorter, I&apos;ll use &quot;LinkHighlightLayerDelegate&quot; without the Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612796</commentid>
    <comment_count>4</comment_count>
      <attachid>139491</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-04-30 11:35:14 -0700</bug_when>
    <thetext>Created attachment 139491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612803</commentid>
    <comment_count>5</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-04-30 11:37:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=139491) [details]
&gt; Patch

I spoke to Ian, and he says it&apos;s OK to &quot;reserve&quot; an animation id. To avoid conflicts, I&apos;ve encapsulated doling out animation/group ids in a function that centralizes any special rules, like &quot;reservations&quot;.

I think I&apos;ve deal with all the other items ... let me know if I misunderstood on any of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612810</commentid>
    <comment_count>6</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-04-30 11:40:50 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Created an attachment (id=139491) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; I spoke to Ian, and he says it&apos;s OK to &quot;reserve&quot; an animation id. To avoid conflicts, I&apos;ve encapsulated doling out animation/group ids in a function that centralizes any special rules, like &quot;reservations&quot;.
&gt; 
&gt; I think I&apos;ve deal with all the other items ... let me know if I misunderstood on any of them.

Thank you for wrapping up the code for incrementing group id and animation id - that section looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612978</commentid>
    <comment_count>7</comment_count>
      <attachid>139524</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-04-30 14:50:37 -0700</bug_when>
    <thetext>Created attachment 139524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612991</commentid>
    <comment_count>8</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-04-30 15:03:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=139524) [details]
&gt; Patch

Rebased so patch will apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616550</commentid>
    <comment_count>9</comment_count>
      <attachid>139524</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-04 12:54:19 -0700</bug_when>
    <thetext>Comment on attachment 139524
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:67
&gt;  static int s_nextGroupId = 1;
&gt; -static int s_nextAnimationId = 1;
&gt; +static int s_nextAnimationId = 2;

Whoa, magic numbers.  Is it possible to put an enum for animations (e.g. { DontUse, LinkHighlight, FirstAvailable }) on an animation class like CCActiveAnimation? That&apos;d make it easier to reserve more numbers in the future if needed.

&gt; Source/WebKit/chromium/tests/LinkHighlightLayerDelegateTest.cpp:80
&gt; +    // Do we need to give it a contents layer?
&gt; +

Can you verify this and then remove this comment if so?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617612</commentid>
    <comment_count>10</comment_count>
      <attachid>140530</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-05-07 08:23:56 -0700</bug_when>
    <thetext>Created attachment 140530
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617613</commentid>
    <comment_count>11</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-05-07 08:25:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 139524 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=139524&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:67
&gt; &gt;  static int s_nextGroupId = 1;
&gt; &gt; -static int s_nextAnimationId = 1;
&gt; &gt; +static int s_nextAnimationId = 2;
&gt; 
&gt; Whoa, magic numbers.  Is it possible to put an enum for animations (e.g. { DontUse, LinkHighlight, FirstAvailable }) on an animation class like CCActiveAnimation? That&apos;d make it easier to reserve more numbers in the future if needed.

Done. I put it into it&apos;s own class on Ian&apos;s suggestion, to try and keep CCActiveAnimation free from this sort of implementation detail.

&gt; &gt; Source/WebKit/chromium/tests/LinkHighlightLayerDelegateTest.cpp:80
&gt; &gt; +    // Do we need to give it a contents layer?
&gt; &gt; +
&gt; 
&gt; Can you verify this and then remove this comment if so?

Done (the comment was out of date).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617722</commentid>
    <comment_count>12</comment_count>
      <attachid>140530</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-07 10:57:06 -0700</bug_when>
    <thetext>Comment on attachment 140530
Patch

Thanks! R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617792</commentid>
    <comment_count>13</comment_count>
      <attachid>140530</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-07 11:57:03 -0700</bug_when>
    <thetext>Comment on attachment 140530
Patch

Clearing flags on attachment: 140530

Committed r116334: &lt;http://trac.webkit.org/changeset/116334&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617793</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-07 11:57:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617834</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-07 12:40:19 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 85816</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617964</commentid>
    <comment_count>16</comment_count>
      <attachid>140596</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-05-07 14:49:14 -0700</bug_when>
    <thetext>Created attachment 140596
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617972</commentid>
    <comment_count>17</comment_count>
      <attachid>140596</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-07 15:01:50 -0700</bug_when>
    <thetext>Comment on attachment 140596
Patch for landing

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

Sorry to nit on your already-nitted patch but I&apos;m a bit worried about the LayerAnimationDelegate pointer - it&apos;s a weak pointer and nobody is clearing it.

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.cpp:61
&gt; +    m_contentLayer-&gt;setLayerAnimationDelegate(this);

who is clearing this? this is cleared in GLC::willBeDestroyed() for other types but nothing here nulls it out that I can see.

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.cpp:91
&gt; +void LinkHighlightLayerDelegate::paintContents(GraphicsContext&amp; gc, const IntRect&amp; clipRect)

if you aren&apos;t going to use the parameter the omit the name.  same goes for functions below

I think this will cause compile errors on some systems due to unused parameter warnings

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.h:40
&gt; +class LinkHighlightLayerDelegate : public RefCounted&lt;LinkHighlightLayerDelegate&gt;, public ContentLayerDelegate, public CCLayerAnimationDelegate {

this is a bad name for a concrete class - a delegate is something that concrete classes implement, it isn&apos;t itself a concrete class. why isn&apos;t this just LinkHighlight?

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.h:45
&gt; +    ContentLayerChromium* getContentLayer();

in WebKit simple getters are named as the member variable, not with a &quot;get&quot; prefix

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.h:48
&gt; +    virtual void paintContents(GraphicsContext&amp;, const IntRect&amp; clipRect);

OVERRIDE, please

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.h:52
&gt; +    virtual void notifyAnimationStarted(double time);
&gt; +    virtual void notifyAnimationFinished(double time);

OVERRIDEs, please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618475</commentid>
    <comment_count>18</comment_count>
      <attachid>140596</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-05-08 06:49:21 -0700</bug_when>
    <thetext>Comment on attachment 140596
Patch for landing

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.cpp:61
&gt;&gt; +    m_contentLayer-&gt;setLayerAnimationDelegate(this);
&gt; 
&gt; who is clearing this? this is cleared in GLC::willBeDestroyed() for other types but nothing here nulls it out that I can see.

Added to destructor below.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.cpp:91
&gt;&gt; +void LinkHighlightLayerDelegate::paintContents(GraphicsContext&amp; gc, const IntRect&amp; clipRect)
&gt; 
&gt; if you aren&apos;t going to use the parameter the omit the name.  same goes for functions below
&gt; 
&gt; I think this will cause compile errors on some systems due to unused parameter warnings

Good idea ... done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.h:40
&gt;&gt; +class LinkHighlightLayerDelegate : public RefCounted&lt;LinkHighlightLayerDelegate&gt;, public ContentLayerDelegate, public CCLayerAnimationDelegate {
&gt; 
&gt; this is a bad name for a concrete class - a delegate is something that concrete classes implement, it isn&apos;t itself a concrete class. why isn&apos;t this just LinkHighlight?

I would have thought that the concrete class was the true delegate, as it is the one capable of doing the work delegated to it. That being said, renamed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.h:45
&gt;&gt; +    ContentLayerChromium* getContentLayer();
&gt; 
&gt; in WebKit simple getters are named as the member variable, not with a &quot;get&quot; prefix

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.h:48
&gt;&gt; +    virtual void paintContents(GraphicsContext&amp;, const IntRect&amp; clipRect);
&gt; 
&gt; OVERRIDE, please

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LinkHighlightLayerDelegate.h:52
&gt;&gt; +    virtual void notifyAnimationFinished(double time);
&gt; 
&gt; OVERRIDEs, please

Done (and recorded for my checklist on future CLs).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618509</commentid>
    <comment_count>19</comment_count>
      <attachid>140716</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-05-08 07:26:59 -0700</bug_when>
    <thetext>Created attachment 140716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618604</commentid>
    <comment_count>20</comment_count>
      <attachid>140716</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-08 10:27:23 -0700</bug_when>
    <thetext>Comment on attachment 140716
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LinkHighlight.h:43
&gt; +    virtual  ~LinkHighlight();

extra space between &quot;virtual&quot; and &quot;~LinkHighlight&quot;

&gt; Source/WebKit/chromium/tests/LinkHighlightTest.cpp:44
&gt; +

extra newline

&gt; Source/WebKit/chromium/tests/LinkHighlightTest.cpp:49
&gt; +    virtual void notifyAnimationStarted(const GraphicsLayer*, double time) { }
&gt; +    virtual void notifySyncRequired(const GraphicsLayer*) { }
&gt; +    virtual void paintContents(const GraphicsLayer*, GraphicsContext&amp;, GraphicsLayerPaintingPhase, const IntRect&amp; inClip) { }
&gt; +    virtual bool showDebugBorders(const GraphicsLayer*) const { return false; }
&gt; +    virtual bool showRepaintCounter(const GraphicsLayer*) const { return false; }

OVERRIDE please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618655</commentid>
    <comment_count>21</comment_count>
      <attachid>140748</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-05-08 11:26:26 -0700</bug_when>
    <thetext>Created attachment 140748
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618832</commentid>
    <comment_count>22</comment_count>
      <attachid>140748</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-08 14:56:39 -0700</bug_when>
    <thetext>Comment on attachment 140748
Patch for landing

Clearing flags on attachment: 140748

Committed r116456: &lt;http://trac.webkit.org/changeset/116456&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618833</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-08 14:56:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621416</commentid>
    <comment_count>24</comment_count>
      <attachid>140748</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-05-11 02:21:10 -0700</bug_when>
    <thetext>Comment on attachment 140748
Patch for landing

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

&gt; Source/WebKit/chromium/tests/LinkHighlightTest.cpp:83
&gt; +    Path highlightPath;
&gt; +    highlightPath.addRect(FloatRect(5, 5, 10, 8));
&gt; +
&gt; +    // Neither of the following operations should crash.
&gt; +    graphicsLayer-&gt;addLinkHighlight(highlightPath);

FYI, Qt is having some code in the TapHighlighter class (or similar) which creates nice paths for highlighting. Maybe we can share code :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621566</commentid>
    <comment_count>25</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-05-11 06:29:52 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 140748 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140748&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/LinkHighlightTest.cpp:83
&gt; &gt; +    Path highlightPath;
&gt; &gt; +    highlightPath.addRect(FloatRect(5, 5, 10, 8));
&gt; &gt; +
&gt; &gt; +    // Neither of the following operations should crash.
&gt; &gt; +    graphicsLayer-&gt;addLinkHighlight(highlightPath);
&gt; 
&gt; FYI, Qt is having some code in the TapHighlighter class (or similar) which creates nice paths for highlighting. Maybe we can share code :-)

Certainly ... where is the code for creating paths located?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621616</commentid>
    <comment_count>26</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-11 07:12:12 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (From update of attachment 140748 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140748&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/chromium/tests/LinkHighlightTest.cpp:83
&gt; &gt; &gt; +    Path highlightPath;
&gt; &gt; &gt; +    highlightPath.addRect(FloatRect(5, 5, 10, 8));
&gt; &gt; &gt; +
&gt; &gt; &gt; +    // Neither of the following operations should crash.
&gt; &gt; &gt; +    graphicsLayer-&gt;addLinkHighlight(highlightPath);
&gt; &gt; 
&gt; &gt; FYI, Qt is having some code in the TapHighlighter class (or similar) which creates nice paths for highlighting. Maybe we can share code :-)
&gt; 
&gt; Certainly ... where is the code for creating paths located?

Source/WebCore/page/GestureTapHighlighter</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139239</attachid>
            <date>2012-04-27 11:21:03 -0700</date>
            <delta_ts>2012-04-30 11:35:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85084-20120427142101.patch</filename>
            <type>text/plain</type>
            <size>19841</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY3NzU2MWZiZDc1YmFh
Y2NiZDJiOGMxNjFjYTExYzhiYWVjYTFlMi4uNjVkODdkMzA0MGQwMWUxZDQxN2UzMWY5YzEwMDBi
OGQ3ZjNmOWJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTA0LTI3ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bSBjbGFzcyB0byBwcm92aWRlIGxp
bmstaGlnaGxpZ2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3IgR3JhcGhpY3NMYXllckNocm9taXVt
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwODQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0IHRl
c3QgcHJvdmlkZWQuCisKKyAgICAgICAgQ3JlYXRlcyBhIGxheWVyIGRlbGVnYXRlIGNsYXNzIHRv
IHByb3ZpZGUgbGluayBoaWdobGlnaHQgYW5pbWF0aW9ucyBmb3IgbGluay1wcmV2aWV3IGZlYXR1
cmUuCisgICAgICAgIFRoZXNlIGFyZSBhZGRlZCB0byBhIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSB2
aWEgcHJvdmlkZWQgbWV0aG9kcy4gCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTmFtZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRMaW5rSGlnaGxpZ2h0
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2hyb21pdW06OmRpZEZpbmlzaExpbmtIaWdobGlnaHRMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlzdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hp
Z2hsaWdodExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGln
aGxpZ2h0TGF5ZXJDaHJvbWl1bTo6TGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW06On5MaW5rSGlnaGxpZ2h0TGF5
ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1
bTo6Z2V0Q29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRMYXll
ckNocm9taXVtOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGln
aHRMYXllckNocm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hs
aWdodExheWVyQ2hyb21pdW06Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW06Om5vdGlmeUFuaW1hdGlvbkZpbmlzaGVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5
ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGlua0hp
Z2hsaWdodExheWVyQ2hyb21pdW0pOgorCiAyMDEyLTA0LTI3ICBHYXZpbiBQZXRlcnMgIDxnYXZp
bnBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBuZXcgRU5BQkxFX0xJTktfUFJFUkVOREVS
IGRlZmluZSB0byBjb250cm9sIHRoZSBQcmVyZW5kZXJpbmcgQVBJCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDE1MDUyZGJiZDNlYTNkYWIxMDdjMzI5NTQ2Mjc3Y2YzYWViYTBhZDYuLjg1
NjBkMWU0Njg1NDIzMGJiMjEwOWFmMzMxMDJmMGViM2VjYTcwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMDQtMjcgIFcuIEphbWVzIE1hY0xlYW4g
IDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIExp
bmtIaWdobGlnaHRMYXllckNocm9taXVtIGNsYXNzIHRvIHByb3ZpZGUgbGluay1oaWdobGlnaHQg
cHJldmlldyBhbmltYXRpb25zIGZvciBHcmFwaGljc0xheWVyQ2hyb21pdW0uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTA4NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAg
ICAgICogdGVzdHMvTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW1UZXN0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE1vY2tHcmFwaGljc0xheWVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50Ojpub3RpZnlBbmltYXRpb25T
dGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50Ojpub3Rp
ZnlTeW5jUmVxdWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJDbGll
bnQ6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJD
bGllbnQ6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNz
TGF5ZXJDbGllbnQ6OnNob3dSZXBhaW50Q291bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpURVNU
KToKKwogMjAxMi0wNC0yNyAgR2F2aW4gUGV0ZXJzICA8Z2F2aW5wQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBBZGQgbmV3IEVOQUJMRV9MSU5LX1BSRVJFTkRFUiBkZWZpbmUgdG8gY29udHJvbCB0
aGUgUHJlcmVuZGVyaW5nIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGM3ZjY4YTEwNDJmNjcyNGI1
NzMxZDFhMWZjMDkyYTI2NDFjZDE4NWQuLjQzMjJkNTE1MDdkNWY3Y2JmMWMyOTllZWE5Nzc0MWYz
M2Y5ZTBhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NTgsNiArMzU1OCw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJQYWludGVyQ2hyb21pdW0uaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHRMYXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVy
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVTdWJJbWFnZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggN2RkZTQyZTE4N2M5NDdjYWM4NWFkODEzMWJiMzRjZmU1OTk4MGEzMC4uNjM0YzhhZWNjZDI4
YTUyOTM0ZjY2MjFlMWMzMmRjM2ViYmYxMzE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uY3BwCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNs
dWRlICJJbWFnZUxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisj
aW5jbHVkZSAiTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKIApAQCAtMTMwLDYgKzEzMSw4IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVOYW1lcygpCiAgICAgICAgIG1fdHJh
bnNmb3JtTGF5ZXItPnNldERlYnVnTmFtZSgiVHJhbnNmb3JtTGF5ZXIgZm9yICIgKyBtX25hbWVC
YXNlKTsKICAgICBpZiAobV9jb250ZW50c0xheWVyKQogICAgICAgICBtX2NvbnRlbnRzTGF5ZXIt
PnNldERlYnVnTmFtZSgiQ29udGVudHNMYXllciBmb3IgIiArIG1fbmFtZUJhc2UpOworICAgIGlm
IChtX2xpbmtIaWdobGlnaHRMYXllcikKKyAgICAgICAgbV9saW5rSGlnaGxpZ2h0TGF5ZXItPmdl
dENvbnRlbnRMYXllcigpLT5zZXREZWJ1Z05hbWUoIkxpbmtIaWdobGlnaHRMYXllciBmb3IgIiAr
IG1fbmFtZUJhc2UpOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q2hpbGRy
ZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCkBAIC00MzAsNiArNDMz
LDIwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKICAg
ICBwcmltYXJ5TGF5ZXIoKS0+cmVzdW1lQW5pbWF0aW9ucygpOwogfQogCit2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6YWRkTGlua0hpZ2hsaWdodExheWVyKGNvbnN0IFBhdGgmIHBhdGgpCit7
CisgICAgbV9saW5rSGlnaGxpZ2h0TGF5ZXIgPSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKHRoaXMsIHBhdGgpOworICAgIHVwZGF0ZUNoaWxkTGlzdCgpOworfQorCit2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6ZGlkRmluaXNoTGlua0hpZ2hsaWdodExheWVyKCkKK3sKKyAg
ICBpZiAobV9saW5rSGlnaGxpZ2h0TGF5ZXIpCisgICAgICAgIG1fbGlua0hpZ2hsaWdodExheWVy
LT5nZXRDb250ZW50TGF5ZXIoKS0+cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAgbV9saW5rSGln
aGxpZ2h0TGF5ZXIuY2xlYXIoKTsKK30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKIHsKICAgICBib29sIGNoaWxk
cmVuQ2hhbmdlZCA9IGZhbHNlOwpAQCAtNTEwLDYgKzUyNyw5IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjp1cGRhdGVDaGlsZExpc3QoKQogICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQo
Y2hpbGRMYXllcik7CiAgICAgfQogCisgICAgaWYgKG1fbGlua0hpZ2hsaWdodExheWVyKQorICAg
ICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9saW5rSGlnaGxpZ2h0TGF5ZXItPmdldENvbnRlbnRM
YXllcigpKTsKKwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4uc2l6ZSgp
OyArK2kpCiAgICAgICAgIG5ld0NoaWxkcmVuW2ldLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggODgzMzU1ZmY5NTg1YmJiYmNmNzQz
NDU0MjgwMWQ5NWM1OTZmNGI2YS4uNmZmZGFjZGFlYjE2NDQzZDRlZWI3NjMzYmRlZTJhMDQ0Y2Fj
ZGM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTQ0LDYgKzQ0LDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKK2NsYXNzIExp
bmtIaWdobGlnaHRMYXllckNocm9taXVtOwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ2hyb21pdW0g
OiBwdWJsaWMgR3JhcGhpY3NMYXllciwgcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlLCBwdWJs
aWMgQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIHsKIHB1YmxpYzoKQEAgLTEwNSw2ICsxMDYsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1l
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwogCisgICAgdmlydHVhbCB2
b2lkIGFkZExpbmtIaWdobGlnaHRMYXllcihjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExpbmtIaWdobGlnaHRMYXllcigpOworCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVidWdC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKQEAgLTE1OCw2ICsxNjIsNyBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKICAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zvcm1MYXllcjsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbV9jb250ZW50c0xheWVyOworICAgIFJlZlB0cjxMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1
bT4gbV9saW5rSGlnaGxpZ2h0TGF5ZXI7CiAKICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3Nl
IHsKICAgICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdo
bGlnaHRMYXllckNocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTJjNmVmZmM5ZmYzN2RkN2NmNDgy
ZmNjMDQyNGNlMmRhYTIzMDAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0uY3BwCkBA
IC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
TGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc1JlZlB0cjxMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bT4gTGlua0hpZ2hsaWdodExheWVy
Q2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyKiBwYXJlbnQsIGNvbnN0IFBhdGgmIHBhdGgp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bShw
YXJlbnQsIHBhdGgpKTsKK30KKworTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW06OkxpbmtIaWdo
bGlnaHRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXIqIHBhcmVudCwgY29uc3QgUGF0aCYgcGF0
aCkKKyAgICA6IG1fY29udGVudExheWVyKENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUodGhp
cykpCisgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAgLCBtX3BhdGgocGF0aCkKK3sKKyAgICBz
dGF0aWMgaW50IGlkID0gMDsKKworICAgIG1fY29udGVudExheWVyLT5zZXRJc0RyYXdhYmxlKHRy
dWUpOworCisgICAgSW50UmVjdCByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwYXRoLmJvdW5kaW5n
UmVjdCgpKTsKKworICAgIG1fY29udGVudExheWVyLT5zZXRCb3VuZHMocmVjdC5zaXplKCkpOwor
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS50cmFu
c2xhdGUocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLyAyLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkgLyAyKTsKKyAgICBtX2NvbnRlbnRMYXllci0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisK
KyAgICBtX3BhdGgudHJhbnNsYXRlKEZsb2F0U2l6ZSgtcmVjdC54KCksIC1yZWN0LnkoKSkpOwor
CisgICAgbV9jb250ZW50TGF5ZXItPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUodGhpcyk7CisK
KyAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIGJlIGNvbmZpZ3VyYWJsZT8KKyAgICBjb25zdCBm
bG9hdCBzdGFydE9wYWNpdHkgPSAwLjI1OworICAgIGNvbnN0IGZsb2F0IGR1cmF0aW9uID0gMjsK
KworICAgIG1fY29udGVudExheWVyLT5zZXRPcGFjaXR5KHN0YXJ0T3BhY2l0eSk7CisKKyAgICBP
d25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NG
bG9hdEtleWZyYW1lOjpjcmVhdGUoMCwgc3RhcnRPcGFjaXR5LCBudWxscHRyKSk7CisgICAgY3Vy
dmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKGR1cmF0aW9uIC8gMiwgc3Rh
cnRPcGFjaXR5LCBudWxscHRyKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlm
cmFtZTo6Y3JlYXRlKGR1cmF0aW9uLCAwLCBudWxscHRyKSk7CisKKyAgICBPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+IGFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJl
bGVhc2UoKSwgKytpZCwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBhbmlt
YXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOworICAgIG1fY29udGVu
dExheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkKGFuaW1hdGlvbi5yZWxlYXNl
KCkpOworfQorCitMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bTo6fkxpbmtIaWdobGlnaHRMYXll
ckNocm9taXVtKCkKK3sKKyAgICBtX2NvbnRlbnRMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwor
ICAgIG1fY29udGVudExheWVyLT5jbGVhckRlbGVnYXRlKCk7Cit9CisKK0NvbnRlbnRMYXllckNo
cm9taXVtKiBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bTo6Z2V0Q29udGVudExheWVyKCkKK3sK
KyAgICByZXR1cm4gbV9jb250ZW50TGF5ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgTGlua0hpZ2hsaWdo
dExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgLy8gRklYTUU6IG1ha2UgY29sb3VyIGNvbmZpZ3Vy
YWJsZT8KKyAgICBnYy5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUsIDI1NSksIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgIGdjLnNldFN0cm9rZVRoaWNrbmVzcygyKTsKKyAgICBnYy5z
dHJva2VQYXRoKG1fcGF0aCk7CisgICAgZ2Muc2V0RmlsbENvbG9yKENvbG9yKDI1NSwgMCwgMjU1
LCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBnYy5maWxsUGF0aChtX3BhdGgpOwor
fQorCit2b2lkIExpbmtIaWdobGlnaHRMYXllckNocm9taXVtOjpkaWRTY3JvbGwoY29uc3QgSW50
U2l6ZSYpCit7Cit9CisKK3ZvaWQgTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW06Om5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGlua0hpZ2hsaWdodExh
eWVyQ2hyb21pdW06Om5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGRvdWJsZSB0aW1lKQoreworICAg
IC8vIEFsbG93IG51bGwgcGFyZW50IHBvaW50ZXIgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nLgorICAg
IGlmIChtX3BhcmVudCkKKyAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVt
Kj4obV9wYXJlbnQpLT5kaWRGaW5pc2hMaW5rSGlnaGxpZ2h0TGF5ZXIoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHRMYXllckNocm9taXVtLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2I4Njk4YjcwM2E0Y2E2ZmU1ZWQyOTAxZjYxYjVhZDYwMjg3NTQwZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGln
aHRMYXllckNocm9taXVtLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGlua0hp
Z2hsaWdodExheWVyQ2hyb21pdW1faAorI2RlZmluZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1
bV9oCisKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBhdGgu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0gOiBwdWJs
aWMgUmVmQ291bnRlZDxMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bT4sIHB1YmxpYyBDb250ZW50
TGF5ZXJEZWxlZ2F0ZSwgcHVibGljIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0+IGNyZWF0
ZShHcmFwaGljc0xheWVyKiBwYXJlbnQsIGNvbnN0IFBhdGgmKTsKKyAgICB2aXJ0dWFsICB+TGlu
a0hpZ2hsaWdodExheWVyQ2hyb21pdW0oKTsKKworICAgIENvbnRlbnRMYXllckNocm9taXVtKiBn
ZXRDb250ZW50TGF5ZXIoKTsKKworICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVu
dGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsKGNv
bnN0IEludFNpemUmKSBPVkVSUklERTsKKworICAgIC8vIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0
ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVk
KGRvdWJsZSB0aW1lKTsKKworcHJpdmF0ZToKKyAgICBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyKiBwYXJlbnQsIGNvbnN0IFBhdGgmKTsKKworICAgIFJlZlB0cjxDb250
ZW50TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50TGF5ZXI7CisgICAgR3JhcGhpY3NMYXllciogbV9w
YXJlbnQ7CisgICAgUGF0aCBtX3BhdGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMGU4MjI4YTZlODkwZDVmMzc0MDQ3ZmMzYTgxNzFi
ODlkMTM4OWFhOS4uMmNkZTNlMzE4Njg5MDVmNzBiNWRjMDBkYjIyZDRiMGQyMjI5OWI2MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xMTMsNiArMTEzLDcgQEAKICAgICAgICAg
ICAgICd0ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9M
ZXZlbERCVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0xpbmtIaWdobGlnaHRMYXllckNo
cm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xvY2FsaXplZE51bWJlcklDVVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Nb2NrQ0NRdWFkQ3VsbGVyLmgnLAogICAgICAg
ICAgICAgJ3Rlc3RzL1BhaW50QWdncmVnYXRvclRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW1UZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGlua0hpZ2hsaWdodExheWVyQ2hyb21p
dW1UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMThkNWZjZDUyMWJkZmQyYWM0OTgxM2JkYWM5NTdkNTg0
OGI2MWIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9M
aW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0wLDAgKzEsODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxpbmtIaWdobGlnaHRM
YXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1
ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tHcmFwaGljc0xh
eWVyQ2xpZW50IDogcHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorCisgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllcios
IGRvdWJsZSB0aW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhj
b25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50
aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgeyB9CisgICAgdmlydHVhbCBib29sIHNo
b3dEZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBHcmFwaGljc0xh
eWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK307CisKK1RFU1QoTGlua0hpZ2hsaWdodExh
eWVyVGVzdCwgdmVyaWZ5TGlua0hpZ2hsaWdodExheWVyKQoreworICAgIFBhdGggaGlnaGxpZ2h0
UGF0aDsKKyAgICBoaWdobGlnaHRQYXRoLmFkZFJlY3QoRmxvYXRSZWN0KDUsIDYsIDEyLCA4KSk7
CisgICAgSW50UmVjdCBwYXRoQm91bmRpbmdSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChoaWdobGln
aHRQYXRoLmJvdW5kaW5nUmVjdCgpKTsKKworICAgIFJlZlB0cjxMaW5rSGlnaGxpZ2h0TGF5ZXJD
aHJvbWl1bT4gaGlnaGxpZ2h0TGF5ZXIgPSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDAsIGhpZ2hsaWdodFBhdGgpOworICAgIEFTU0VSVF9UUlVFKGhpZ2hsaWdodExheWVyLmdl
dCgpKTsKKyAgICBBU1NFUlRfVFJVRShoaWdobGlnaHRMYXllci0+Z2V0Q29udGVudExheWVyKCkp
OworCisgICAgQ29udGVudExheWVyQ2hyb21pdW0qIGNvbnRlbnRMYXllciA9IGhpZ2hsaWdodExh
eWVyLT5nZXRDb250ZW50TGF5ZXIoKTsKKyAgICBFWFBFQ1RfRVEocGF0aEJvdW5kaW5nUmVjdC5z
aXplKCksIGNvbnRlbnRMYXllci0+Ym91bmRzKCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRM
YXllci0+dHJhbnNmb3JtKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAgRVhQRUNU
X1RSVUUoY29udGVudExheWVyLT50cmFuc2Zvcm0oKS5pc0ludGVnZXJUcmFuc2xhdGlvbigpKTsK
KworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2l0aW9u
OworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRMYXllci0+dHJhbnNmb3JtKCkuZGVjb21wb3NlKGRl
Y29tcG9zaXRpb24pKTsKKworICAgIEZsb2F0UG9pbnQgZXhwZWN0ZWRUcmFuc2xhdGlvbihwYXRo
Qm91bmRpbmdSZWN0LngoKSArIHBhdGhCb3VuZGluZ1JlY3Qud2lkdGgoKSAvIDIsIHBhdGhCb3Vu
ZGluZ1JlY3QueSgpICsgcGF0aEJvdW5kaW5nUmVjdC5oZWlnaHQoKSAvIDIpOworICAgIEVYUEVD
VF9FUShGbG9hdFBvaW50KGRlY29tcG9zaXRpb24udHJhbnNsYXRlWCwgZGVjb21wb3NpdGlvbi50
cmFuc2xhdGVZKSwgZXhwZWN0ZWRUcmFuc2xhdGlvbik7Cit9CisKK1RFU1QoTGlua0hpZ2hsaWdo
dExheWVyVGVzdCwgdmVyaWZ5R3JhcGhpY3NMYXllckNocm9taXVtRW1iZWRkaW5nKQoreworICAg
IE1vY2tHcmFwaGljc0xheWVyQ2xpZW50IGNsaWVudDsKKyAgICBPd25QdHI8R3JhcGhpY3NMYXll
ckNocm9taXVtPiBncmFwaGljc0xheWVyID0gc3RhdGljX3BvaW50ZXJfY2FzdDxHcmFwaGljc0xh
eWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgmY2xpZW50KSk7CisgICAgQVNTRVJU
X1RSVUUoZ3JhcGhpY3NMYXllci5nZXQoKSk7CisKKyAgICAvLyBEbyB3ZSBuZWVkIHRvIGdpdmUg
aXQgYSBjb250ZW50cyBsYXllcj8KKworICAgIFBhdGggaGlnaGxpZ2h0UGF0aDsKKyAgICBoaWdo
bGlnaHRQYXRoLmFkZFJlY3QoRmxvYXRSZWN0KDUsIDUsIDEwLCA4KSk7CisKKyAgICAvLyBOZWl0
aGVyIG9mIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBzaG91bGQgY3Jhc2guCisgICAgZ3JhcGhp
Y3NMYXllci0+YWRkTGlua0hpZ2hsaWdodExheWVyKGhpZ2hsaWdodFBhdGgpOworICAgIGdyYXBo
aWNzTGF5ZXItPmRpZEZpbmlzaExpbmtIaWdobGlnaHRMYXllcigpOworfQorCit9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139491</attachid>
            <date>2012-04-30 11:35:14 -0700</date>
            <delta_ts>2012-04-30 14:50:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85084-20120430143513.patch</filename>
            <type>text/plain</type>
            <size>21924</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY3NzU2MWZiZDc1YmFh
Y2NiZDJiOGMxNjFjYTExYzhiYWVjYTFlMi4uYTU0ZDU5OWEwMjcwNDE5ZjdmOWEwNzczMTdkMjYy
Yjc4MDlhOWMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA0LTMwICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bSBjbGFzcyB0byBwcm92aWRlIGxp
bmstaGlnaGxpZ2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3IgR3JhcGhpY3NMYXllckNocm9taXVt
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwODQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0IHRl
c3QgcHJvdmlkZWQuCisKKyAgICAgICAgQ3JlYXRlcyBhIGxheWVyIGRlbGVnYXRlIGNsYXNzIHRv
IHByb3ZpZGUgbGluayBoaWdobGlnaHQgYW5pbWF0aW9ucyBmb3IgbGluay1wcmV2aWV3IGZlYXR1
cmUuCisgICAgICAgIFRoZXNlIGFyZSBhZGRlZCB0byBhIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSB2
aWEgcHJvdmlkZWQgbWV0aG9kcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoc3RkKToKKyAgICAgICAgKHN0ZDo6Z2V0TmV4dEFuaW1hdGlvbklkKToKKyAgICAg
ICAgKHN0ZDo6Z2V0TmV4dEdyb3VwSWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjp1cGRhdGVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OmFkZExpbmtIaWdobGlnaHRMYXllcik6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6ZGlkRmluaXNoTGlua0hpZ2hs
aWdodExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ2hpbGRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
bWFwQW5pbWF0aW9uTmFtZVRvSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChHcmFwaGljc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6Okxp
bmtIaWdobGlnaHRMYXllckRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGln
aHRMYXllckRlbGVnYXRlOjp+TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6OmdldENvbnRlbnRMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6ZGlkU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRMYXll
ckRlbGVnYXRlOjpub3RpZnlBbmltYXRpb25GaW5pc2hlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlKToK
KwogMjAxMi0wNC0yNyAgR2F2aW4gUGV0ZXJzICA8Z2F2aW5wQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgbmV3IEVOQUJMRV9MSU5LX1BSRVJFTkRFUiBkZWZpbmUgdG8gY29udHJvbCB0aGUg
UHJlcmVuZGVyaW5nIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxNTA1MmRiYmQz
ZWEzZGFiMTA3YzMyOTU0NjI3N2NmM2FlYmEwYWQ2Li4xZjZkZjEyMDRiMGY5OTBlN2JlMzcwYzBj
MDQ1NzkyMmExNDZmZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDEyLTA0LTMwICBXLiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1
bSBjbGFzcyB0byBwcm92aWRlIGxpbmstaGlnaGxpZ2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3Ig
R3JhcGhpY3NMYXllckNocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODUwODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0xpbmtIaWdobGln
aHRMYXllckRlbGVnYXRlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChNb2NrR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3Jh
cGhpY3NMYXllckNsaWVudDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrR3JhcGhpY3NMYXllckNsaWVudDo6bm90aWZ5U3luY1JlcXVpcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpwYWludENvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpzaG93RGVidWdCb3JkZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpzaG93UmVwYWlu
dENvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDQtMjcgIEdhdmlu
IFBldGVycyAgPGdhdmlucEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIG5ldyBFTkFCTEVf
TElOS19QUkVSRU5ERVIgZGVmaW5lIHRvIGNvbnRyb2wgdGhlIFByZXJlbmRlcmluZyBBUEkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBjN2Y2OGExMDQyZjY3MjRiNTczMWQxYTFmYzA5MmEyNjQxY2QxODVk
Li45NzNiNWMwYjQ2MWMwOTA1MDNmZTFkZTg3N2ZkNWMxMTU2ZmRjYTE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0zNTU4LDYgKzM1NTgsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5
ZXJEZWxlZ2F0ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDdkZGU0MmUxODdjOTQ3Y2FjODVh
ZDgxMzFiYjM0Y2ZlNTk5ODBhMzAuLjE3NjBiMDViMTFkYzllZTAzYmY1MGJhOWFmZGIwNmJiMDBh
OWE1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNTIsNiAr
NTIsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxpbmtIaWdobGlnaHRM
YXllckRlbGVnYXRlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJT
eXN0ZW1UaW1lLmgiCiAKQEAgLTYzLDcgKzY0LDI4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
IG5hbWVzcGFjZSB7CiBzdGF0aWMgaW50IHNfbmV4dEdyb3VwSWQgPSAxOwotc3RhdGljIGludCBz
X25leHRBbmltYXRpb25JZCA9IDE7CitzdGF0aWMgaW50IHNfbmV4dEFuaW1hdGlvbklkID0gMjsK
KworaW50IGdldE5leHRBbmltYXRpb25JZCgpCit7CisgICAgaW50IGlkID0gc19uZXh0QW5pbWF0
aW9uSWQrKzsKKyAgICAvLyBOZXZlciBnaXZlIG91dCBhbmltYXRpb25JZCA9IDAsIGFuZCBhbmlt
YXRpb25JZCA9IDEgaXMgcmVzZXJ2ZWQgZm9yIExpbmtIaWdobGlnaHRMYXllcnMuCisgICAgaWYg
KCFzX25leHRBbmltYXRpb25JZCkKKyAgICAgICAgc19uZXh0QW5pbWF0aW9uSWQgPSAyOworCisg
ICAgcmV0dXJuIGlkOworfQorCitpbnQgZ2V0TmV4dEdyb3VwSWQoKQoreworICAgIGludCBpZCA9
IHNfbmV4dEdyb3VwSWQrKzsKKyAgICAvLyBOZXZlciBnaXZlIG91dCBncm91cElkID0gMC4KKyAg
ICBpZiAoIXNfbmV4dEdyb3VwSWQpCisgICAgICAgIHNfbmV4dEdyb3VwSWQgPSAxOworCisgICAg
cmV0dXJuIGlkOworfQorCiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEzMCw2ICsxNTIs
OCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTmFtZXMoKQogICAgICAgICBt
X3RyYW5zZm9ybUxheWVyLT5zZXREZWJ1Z05hbWUoIlRyYW5zZm9ybUxheWVyIGZvciAiICsgbV9u
YW1lQmFzZSk7CiAgICAgaWYgKG1fY29udGVudHNMYXllcikKICAgICAgICAgbV9jb250ZW50c0xh
eWVyLT5zZXREZWJ1Z05hbWUoIkNvbnRlbnRzTGF5ZXIgZm9yICIgKyBtX25hbWVCYXNlKTsKKyAg
ICBpZiAobV9saW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZSkKKyAgICAgICAgbV9saW5rSGlnaGxp
Z2h0TGF5ZXJEZWxlZ2F0ZS0+Z2V0Q29udGVudExheWVyKCktPnNldERlYnVnTmFtZSgiTGlua0hp
Z2hsaWdodExheWVyIGZvciAiICsgbV9uYW1lQmFzZSk7CiB9CiAKIGJvb2wgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGls
ZHJlbikKQEAgLTQwNyw3ICs0MzEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0
Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQogYm9vbCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlv
biwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKICAg
ICBwcmltYXJ5TGF5ZXIoKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKLSAgICBy
ZXR1cm4gcHJpbWFyeUxheWVyKCktPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1h
dGlvbiwgbWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIHNfbmV4dEdyb3VwSWQr
KywgdGltZU9mZnNldCk7CisgICAgcmV0dXJuIHByaW1hcnlMYXllcigpLT5hZGRBbmltYXRpb24o
dmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlv
bk5hbWUpLCBnZXROZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWVPZmZzZXQpCkBAIC00MzAsNiArNDU0LDIwIEBAIHZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBwcmltYXJ5TGF5ZXIoKS0+cmVz
dW1lQW5pbWF0aW9ucygpOwogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkTGlu
a0hpZ2hsaWdodExheWVyKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgbV9saW5rSGlnaGxpZ2h0
TGF5ZXJEZWxlZ2F0ZSA9IExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpjcmVhdGUodGhpcywg
cGF0aCwgZ2V0TmV4dEdyb3VwSWQoKSk7CisgICAgdXBkYXRlQ2hpbGRMaXN0KCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpkaWRGaW5pc2hMaW5rSGlnaGxpZ2h0TGF5ZXIoKQor
eworICAgIGlmIChtX2xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlKQorICAgICAgICBtX2xpbmtI
aWdobGlnaHRMYXllckRlbGVnYXRlLT5nZXRDb250ZW50TGF5ZXIoKS0+cmVtb3ZlRnJvbVBhcmVu
dCgpOworCisgICAgbV9saW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5jbGVhcigpOworfQorCiB2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5
ZXIqIGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC01MTAs
NiArNTQ4LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlzdCgp
CiAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZExheWVyKTsKICAgICB9CiAKKyAgICBp
ZiAobV9saW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZSkKKyAgICAgICAgbmV3Q2hpbGRyZW4uYXBw
ZW5kKG1fbGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUtPmdldENvbnRlbnRMYXllcigpKTsKKwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4uc2l6ZSgpOyArK2kpCiAgICAg
ICAgIG5ld0NoaWxkcmVuW2ldLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAKQEAgLTc0Niw3ICs3ODcs
NyBAQCBpbnQgR3JhcGhpY3NMYXllckNocm9taXVtOjptYXBBbmltYXRpb25OYW1lVG9JZChjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFt
X2FuaW1hdGlvbklkTWFwLmNvbnRhaW5zKGFuaW1hdGlvbk5hbWUpKQotICAgICAgICBtX2FuaW1h
dGlvbklkTWFwLmFkZChhbmltYXRpb25OYW1lLCBzX25leHRBbmltYXRpb25JZCsrKTsKKyAgICAg
ICAgbV9hbmltYXRpb25JZE1hcC5hZGQoYW5pbWF0aW9uTmFtZSwgZ2V0TmV4dEFuaW1hdGlvbklk
KCkpOwogCiAgICAgcmV0dXJuIG1fYW5pbWF0aW9uSWRNYXAuZmluZChhbmltYXRpb25OYW1lKS0+
c2Vjb25kOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCA4ODMzNTVm
Zjk1ODViYmJiY2Y3NDM0NTQyODAxZDk1YzU5NmY0YjZhLi40NjIwNzI0ODcyMmM0ZmU2N2JjMWJi
NDc3ZThhODRlMDQwZTY1Y2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApA
QCAtNDQsNiArNDQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNocm9t
aXVtOworY2xhc3MgTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU7CiAKIGNsYXNzIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgQ29udGVudExheWVy
RGVsZWdhdGUsIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUgewogcHVibGljOgpAQCAt
MTA1LDYgKzEwNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlv
bnMoZG91YmxlIHRpbWUpOwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkTGlua0hpZ2hsaWdodExheWVyKGNvbnN0IFBhdGgmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTGlua0hpZ2hsaWdodExheWVyKCk7CisKICAgICB2aXJ0
dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXREZWJ1Z0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtMTU4LDYgKzE2
Miw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2xheWVy
OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3RyYW5zZm9ybUxheWVyOwogICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBtX2NvbnRlbnRzTGF5ZXI7CisgICAgUmVmUHRyPExpbmtIaWdobGln
aHRMYXllckRlbGVnYXRlPiBtX2xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOwogCiAgICAgZW51
bSBDb250ZW50c0xheWVyUHVycG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5r
SGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWQ2NjJkNTk1M2NkYzU3YjM1MWYzNjM0YTAzZDZmOGM0Yzk4NTY0NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGln
aHRMYXllckRlbGVnYXRlLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1l
ZEFuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGlua0hpZ2hsaWdodExheWVyRGVsZWdh
dGU+IExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9t
aXVtKiBwYXJlbnQsIGNvbnN0IFBhdGgmIHBhdGgsIGludCBncm91cElkKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUocGFyZW50LCBwYXRoLCBn
cm91cElkKSk7Cit9CisKK0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpMaW5rSGlnaGxpZ2h0
TGF5ZXJEZWxlZ2F0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgUGF0aCYg
cGF0aCwgaW50IGdyb3VwSWQpCisgICAgOiBtX2NvbnRlbnRMYXllcihDb250ZW50TGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9wYXRo
KHBhdGgpCit7CisgICAgbV9jb250ZW50TGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisKKyAg
ICBJbnRSZWN0IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHBhdGguYm91bmRpbmdSZWN0KCkpOwor
CisgICAgbV9jb250ZW50TGF5ZXItPnNldEJvdW5kcyhyZWN0LnNpemUoKSk7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShyZWN0
LngoKSArIHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDIpOwor
ICAgIG1fY29udGVudExheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKworICAgIG1fcGF0
aC50cmFuc2xhdGUoRmxvYXRTaXplKC1yZWN0LngoKSwgLXJlY3QueSgpKSk7CisKKyAgICBtX2Nv
bnRlbnRMYXllci0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKKworICAgIC8vIEZJ
WE1FOiBTaG91bGQgdGhlc2UgYmUgY29uZmlndXJhYmxlPworICAgIGNvbnN0IGZsb2F0IHN0YXJ0
T3BhY2l0eSA9IDAuMjU7CisgICAgY29uc3QgZmxvYXQgZHVyYXRpb24gPSAyOworCisgICAgbV9j
b250ZW50TGF5ZXItPnNldE9wYWNpdHkoc3RhcnRPcGFjaXR5KTsKKworICAgIE93blB0cjxDQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJh
bWU6OmNyZWF0ZSgwLCBzdGFydE9wYWNpdHksIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5
ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoZHVyYXRpb24gLyAyLCBzdGFydE9wYWNpdHks
IG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVh
dGUoZHVyYXRpb24sIDAsIG51bGxwdHIpKTsKKworICAgIC8vIGFuaW1hdGlvbklkID0gMSBpcyBy
ZXNlcnZlZCBmb3IgdXMuCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24o
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIDEsIGdyb3VwSWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgYW5pbWF0aW9uLT5zZXROZWVkc1N5bmNo
cm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKKyAgICBtX2NvbnRlbnRMYXllci0+bGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKCktPmFkZChhbmltYXRpb24ucmVsZWFzZSgpKTsKK30KKworTGlua0hpZ2hs
aWdodExheWVyRGVsZWdhdGU6On5MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZSgpCit7CisgICAg
bV9jb250ZW50TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX2NvbnRlbnRMYXllci0+
Y2xlYXJEZWxlZ2F0ZSgpOworfQorCitDb250ZW50TGF5ZXJDaHJvbWl1bSogTGlua0hpZ2hsaWdo
dExheWVyRGVsZWdhdGU6OmdldENvbnRlbnRMYXllcigpCit7CisgICAgcmV0dXJuIG1fY29udGVu
dExheWVyLmdldCgpOworfQorCit2b2lkIExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpwYWlu
dENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQor
eworICAgIC8vIEZJWE1FOiBtYWtlIGNvbG91ciBjb25maWd1cmFibGU/CisgICAgZ2Muc2V0U3Ry
b2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1LCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBnYy5zZXRTdHJva2VUaGlja25lc3MoMik7CisgICAgZ2Muc3Ryb2tlUGF0aChtX3BhdGgpOwor
ICAgIGdjLnNldEZpbGxDb2xvcihDb2xvcigyNTUsIDAsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURl
dmljZVJHQik7CisgICAgZ2MuZmlsbFBhdGgobV9wYXRoKTsKK30KKwordm9pZCBMaW5rSGlnaGxp
Z2h0TGF5ZXJEZWxlZ2F0ZTo6ZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKQoreworfQorCit2b2lk
IExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJs
ZSB0aW1lKQoreworfQorCit2b2lkIExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpub3RpZnlB
bmltYXRpb25GaW5pc2hlZChkb3VibGUgdGltZSkKK3sKKyAgICAvLyBBbGxvdyBudWxsIHBhcmVu
dCBwb2ludGVyIHRvIGZhY2lsaXRhdGUgdGVzdGluZy4KKyAgICBpZiAobV9wYXJlbnQpCisgICAg
ICAgIG1fcGFyZW50LT5kaWRGaW5pc2hMaW5rSGlnaGxpZ2h0TGF5ZXIoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
M2UzOWQyNDZkYzlhODUxYjM4NDIxMGQzZmRjZTQ4MDM4NWRkNmQyOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGln
aHRMYXllckRlbGVnYXRlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGlua0hp
Z2hsaWdodExheWVyRGVsZWdhdGVfaAorI2RlZmluZSBMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0
ZV9oCisKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBhdGgu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NMYXllckNocm9taXVtOworCitjbGFzcyBM
aW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpbmtIaWdobGln
aHRMYXllckRlbGVnYXRlPiwgcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlLCBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxM
aW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
cGFyZW50LCBjb25zdCBQYXRoJiwgaW50IGdyb3VwSWQpOworICAgIHZpcnR1YWwgIH5MaW5rSGln
aGxpZ2h0TGF5ZXJEZWxlZ2F0ZSgpOworCisgICAgQ29udGVudExheWVyQ2hyb21pdW0qIGdldENv
bnRlbnRMYXllcigpOworCisgICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50YXRp
b24uCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3Qg
SW50U2l6ZSYpIE9WRVJSSURFOworCisgICAgLy8gQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIGlt
cGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRv
dWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZG91
YmxlIHRpbWUpOworCitwcml2YXRlOgorICAgIExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogcGFyZW50LCBjb25zdCBQYXRoJiwgaW50IGdyb3VwSWQpOwor
CisgICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2NvbnRlbnRMYXllcjsKKyAgICBH
cmFwaGljc0xheWVyQ2hyb21pdW0qIG1fcGFyZW50OworICAgIFBhdGggbV9wYXRoOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDBlODIy
OGE2ZTg5MGQ1ZjM3NDA0N2ZjM2E4MTcxYjg5ZDEzODlhYTkuLjBmNzIxYjM0M2Q5NTM5ZWY5Y2My
ZGNjY2I3NjhiNWM0OThlYzMyMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
MTEzLDYgKzExMyw3IEBACiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVt
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2ZWxEQlRlc3QuY3BwJywKKyAgICAgICAgICAgICd0
ZXN0cy9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTW9j
a0NDUXVhZEN1bGxlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9QYWludEFnZ3JlZ2F0b3JUZXN0
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xpbmtIaWdo
bGlnaHRMYXllckRlbGVnYXRlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzcwODgwODM5
YzgzMmRkMTM1ODYyYmJiOWE0NDU2ZGVmMGFmM2NmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGVUZXN0LmNw
cApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
eworCitjbGFzcyBNb2NrR3JhcGhpY3NMYXllckNsaWVudCA6IHB1YmxpYyBHcmFwaGljc0xheWVy
Q2xpZW50IHsKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFy
dGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgeyB9CisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29u
dGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXAp
IHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWlu
dENvdW50ZXIoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cit9
OworCitURVNUKExpbmtIaWdobGlnaHRMYXllclRlc3QsIHZlcmlmeUxpbmtIaWdobGlnaHRMYXll
cikKK3sKKyAgICBQYXRoIGhpZ2hsaWdodFBhdGg7CisgICAgaGlnaGxpZ2h0UGF0aC5hZGRSZWN0
KEZsb2F0UmVjdCg1LCA2LCAxMiwgOCkpOworICAgIEludFJlY3QgcGF0aEJvdW5kaW5nUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QoaGlnaGxpZ2h0UGF0aC5ib3VuZGluZ1JlY3QoKSk7CisKKyAgICBS
ZWZQdHI8TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU+IGhpZ2hsaWdodExheWVyRGVsZWdhdGUg
PSBMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6Y3JlYXRlKDAsIGhpZ2hsaWdodFBhdGgsIDAp
OworICAgIEFTU0VSVF9UUlVFKGhpZ2hsaWdodExheWVyRGVsZWdhdGUuZ2V0KCkpOworICAgIENv
bnRlbnRMYXllckNocm9taXVtKiBjb250ZW50TGF5ZXIgPSBoaWdobGlnaHRMYXllckRlbGVnYXRl
LT5nZXRDb250ZW50TGF5ZXIoKTsKKyAgICBBU1NFUlRfVFJVRShjb250ZW50TGF5ZXIpOworCisg
ICAgRVhQRUNUX0VRKHBhdGhCb3VuZGluZ1JlY3Quc2l6ZSgpLCBjb250ZW50TGF5ZXItPmJvdW5k
cygpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZW50TGF5ZXItPnRyYW5zZm9ybSgpLmlzSWRlbnRp
dHlPclRyYW5zbGF0aW9uKCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRMYXllci0+dHJhbnNm
b3JtKCkuaXNJbnRlZ2VyVHJhbnNsYXRpb24oKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NpdGlvbjsKKyAgICBFWFBFQ1RfVFJVRShjb250ZW50
TGF5ZXItPnRyYW5zZm9ybSgpLmRlY29tcG9zZShkZWNvbXBvc2l0aW9uKSk7CisKKyAgICBGbG9h
dFBvaW50IGV4cGVjdGVkVHJhbnNsYXRpb24ocGF0aEJvdW5kaW5nUmVjdC54KCkgKyBwYXRoQm91
bmRpbmdSZWN0LndpZHRoKCkgLyAyLCBwYXRoQm91bmRpbmdSZWN0LnkoKSArIHBhdGhCb3VuZGlu
Z1JlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICBFWFBFQ1RfRVEoRmxvYXRQb2ludChkZWNvbXBvc2l0
aW9uLnRyYW5zbGF0ZVgsIGRlY29tcG9zaXRpb24udHJhbnNsYXRlWSksIGV4cGVjdGVkVHJhbnNs
YXRpb24pOworfQorCitURVNUKExpbmtIaWdobGlnaHRMYXllclRlc3QsIHZlcmlmeUdyYXBoaWNz
TGF5ZXJDaHJvbWl1bUVtYmVkZGluZykKK3sKKyAgICBNb2NrR3JhcGhpY3NMYXllckNsaWVudCBj
bGllbnQ7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4gZ3JhcGhpY3NMYXllciA9
IHN0YXRpY19wb2ludGVyX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtPihHcmFwaGljc0xheWVy
OjpjcmVhdGUoJmNsaWVudCkpOworICAgIEFTU0VSVF9UUlVFKGdyYXBoaWNzTGF5ZXIuZ2V0KCkp
OworCisgICAgLy8gRG8gd2UgbmVlZCB0byBnaXZlIGl0IGEgY29udGVudHMgbGF5ZXI/CisKKyAg
ICBQYXRoIGhpZ2hsaWdodFBhdGg7CisgICAgaGlnaGxpZ2h0UGF0aC5hZGRSZWN0KEZsb2F0UmVj
dCg1LCA1LCAxMCwgOCkpOworCisgICAgLy8gTmVpdGhlciBvZiB0aGUgZm9sbG93aW5nIG9wZXJh
dGlvbnMgc2hvdWxkIGNyYXNoLgorICAgIGdyYXBoaWNzTGF5ZXItPmFkZExpbmtIaWdobGlnaHRM
YXllcihoaWdobGlnaHRQYXRoKTsKKyAgICBncmFwaGljc0xheWVyLT5kaWRGaW5pc2hMaW5rSGln
aGxpZ2h0TGF5ZXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139524</attachid>
            <date>2012-04-30 14:50:37 -0700</date>
            <delta_ts>2012-05-07 08:23:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85084-20120430175036.patch</filename>
            <type>text/plain</type>
            <size>21972</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NjUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDAxYjE1OTA0YmIyNmEy
ZDY0NTQ2OWY5YzVkZDgxMTkzMDk1MGMwYy4uNzIyMzNiNjE5MTNhODk1Y2ZjNzgxMjJiNzQ3NmRl
OGM2ZDc5NDk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA0LTMwICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bSBjbGFzcyB0byBwcm92aWRlIGxp
bmstaGlnaGxpZ2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3IgR3JhcGhpY3NMYXllckNocm9taXVt
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwODQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0IHRl
c3QgcHJvdmlkZWQuCisKKyAgICAgICAgQ3JlYXRlcyBhIGxheWVyIGRlbGVnYXRlIGNsYXNzIHRv
IHByb3ZpZGUgbGluayBoaWdobGlnaHQgYW5pbWF0aW9ucyBmb3IgbGluay1wcmV2aWV3IGZlYXR1
cmUuCisgICAgICAgIFRoZXNlIGFyZSBhZGRlZCB0byBhIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSB2
aWEgcHJvdmlkZWQgbWV0aG9kcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoc3RkKToKKyAgICAgICAgKHN0ZDo6Z2V0TmV4dEFuaW1hdGlvbklkKToKKyAgICAg
ICAgKHN0ZDo6Z2V0TmV4dEdyb3VwSWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjp1cGRhdGVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OmFkZExpbmtIaWdobGlnaHRMYXllcik6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6ZGlkRmluaXNoTGlua0hpZ2hs
aWdodExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ2hpbGRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
bWFwQW5pbWF0aW9uTmFtZVRvSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChHcmFwaGljc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6Okxp
bmtIaWdobGlnaHRMYXllckRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGln
aHRMYXllckRlbGVnYXRlOjp+TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6OmdldENvbnRlbnRMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6ZGlkU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRMYXll
ckRlbGVnYXRlOjpub3RpZnlBbmltYXRpb25GaW5pc2hlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlKToK
KwogMjAxMi0wNC0zMCAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZC4gRml4IHRlc3QgY3Jhc2hlcyBpbiBXaW4vTGludXggZGVidWcgYnVp
bGRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MDk3MjYwMDA2NTgyN2ZlNTIzYmZj
ZjYxNDE0NjFmYzVhNmM0Zjk3Li4wNjQzNDI5MjYwZTQyNmVmNDhlMmU1NTFkYmQwYTdmYjkxNDcw
ZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA0
LTMwICBXLiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIENyZWF0ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bSBjbGFzcyB0byBw
cm92aWRlIGxpbmstaGlnaGxpZ2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3IgR3JhcGhpY3NMYXll
ckNocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODUwODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0xpbmtIaWdobGlnaHRMYXllckRlbGVn
YXRlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNb2NrR3Jh
cGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NMYXllckNs
aWVudDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3Jh
cGhpY3NMYXllckNsaWVudDo6bm90aWZ5U3luY1JlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpzaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpzaG93UmVwYWludENvdW50ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDQtMzAgIE1hcmsgUGlsZ3JpbSAgPHBp
bGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIFBsYXRmb3Jt
U3VwcG9ydDo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZSwgY2FsbCBsb2FkUmVzb3VyY2UgZGly
ZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4MjNmNjgyYTMyNWRlYjUxMTc5NmFiY2I1YzhhZWZm
NThjMzgyZDU4Li4wNTQyYzIwMTRiMjE4YzcyOGNmMzc1YzFjZWUxNzIzZTEwNzA3MWYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0zNTY3LDYgKzM1NjcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxp
Z2h0TGF5ZXJEZWxlZ2F0ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0u
aCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCAzYzZkOTI0YmIy
NDA3NTE3MGNjOTAxODVjYWZiNzJhNTcxYjljYmJlLi4wMTIxNjJhYjdhZGU5NWEyNzM3NDBiMWQw
NzZlYWQ0NmRkOWM0ODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMaW5r
SGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgogCkBAIC02Myw3ICs2NCwyOCBAQCB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2Ugewogc3RhdGljIGludCBzX25leHRHcm91cElkID0gMTsKLXN0
YXRpYyBpbnQgc19uZXh0QW5pbWF0aW9uSWQgPSAxOworc3RhdGljIGludCBzX25leHRBbmltYXRp
b25JZCA9IDI7CisKK2ludCBnZXROZXh0QW5pbWF0aW9uSWQoKQoreworICAgIGludCBpZCA9IHNf
bmV4dEFuaW1hdGlvbklkKys7CisgICAgLy8gTmV2ZXIgZ2l2ZSBvdXQgYW5pbWF0aW9uSWQgPSAw
LCBhbmQgYW5pbWF0aW9uSWQgPSAxIGlzIHJlc2VydmVkIGZvciBMaW5rSGlnaGxpZ2h0TGF5ZXJz
LgorICAgIGlmICghc19uZXh0QW5pbWF0aW9uSWQpCisgICAgICAgIHNfbmV4dEFuaW1hdGlvbklk
ID0gMjsKKworICAgIHJldHVybiBpZDsKK30KKworaW50IGdldE5leHRHcm91cElkKCkKK3sKKyAg
ICBpbnQgaWQgPSBzX25leHRHcm91cElkKys7CisgICAgLy8gTmV2ZXIgZ2l2ZSBvdXQgZ3JvdXBJ
ZCA9IDAuCisgICAgaWYgKCFzX25leHRHcm91cElkKQorICAgICAgICBzX25leHRHcm91cElkID0g
MTsKKworICAgIHJldHVybiBpZDsKK30KKwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0x
MzAsNiArMTUyLDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZU5hbWVzKCkK
ICAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0RGVidWdOYW1lKCJUcmFuc2Zvcm1MYXllciBm
b3IgIiArIG1fbmFtZUJhc2UpOwogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIG1f
Y29udGVudHNMYXllci0+c2V0RGVidWdOYW1lKCJDb250ZW50c0xheWVyIGZvciAiICsgbV9uYW1l
QmFzZSk7CisgICAgaWYgKG1fbGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUpCisgICAgICAgIG1f
bGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUtPmdldENvbnRlbnRMYXllcigpLT5zZXREZWJ1Z05h
bWUoIkxpbmtIaWdobGlnaHRMYXllciBmb3IgIiArIG1fbmFtZUJhc2UpOwogfQogCiBib29sIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5
ZXIqPiYgY2hpbGRyZW4pCkBAIC00MDcsNyArNDMxLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikK
IGJvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9u
KiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZz
ZXQpCiB7CiAgICAgcHJpbWFyeUxheWVyKCktPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUodGhp
cyk7Ci0gICAgcmV0dXJuIHByaW1hcnlMYXllcigpLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hT
aXplLCBhbmltYXRpb24sIG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCBzX25l
eHRHcm91cElkKyssIHRpbWVPZmZzZXQpOworICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKS0+YWRk
QW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBtYXBBbmltYXRpb25OYW1lVG9J
ZChhbmltYXRpb25OYW1lKSwgZ2V0TmV4dEdyb3VwSWQoKSwgdGltZU9mZnNldCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQpAQCAtNDMzLDYgKzQ1NywyMCBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgcHJpbWFyeUxh
eWVyKCktPnJlc3VtZUFuaW1hdGlvbnMobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwog
fQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkTGlua0hpZ2hsaWdodExheWVyKGNv
bnN0IFBhdGgmIHBhdGgpCit7CisgICAgbV9saW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZSA9IExp
bmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpjcmVhdGUodGhpcywgcGF0aCwgZ2V0TmV4dEdyb3Vw
SWQoKSk7CisgICAgdXBkYXRlQ2hpbGRMaXN0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRGaW5pc2hMaW5rSGlnaGxpZ2h0TGF5ZXIoKQoreworICAgIGlmIChtX2xpbmtI
aWdobGlnaHRMYXllckRlbGVnYXRlKQorICAgICAgICBtX2xpbmtIaWdobGlnaHRMYXllckRlbGVn
YXRlLT5nZXRDb250ZW50TGF5ZXIoKS0+cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAgbV9saW5r
SGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5jbGVhcigpOworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogewogICAg
IGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC01MTMsNiArNTUxLDkgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlzdCgpCiAgICAgICAgIG5ld0NoaWxk
cmVuLmFwcGVuZChjaGlsZExheWVyKTsKICAgICB9CiAKKyAgICBpZiAobV9saW5rSGlnaGxpZ2h0
TGF5ZXJEZWxlZ2F0ZSkKKyAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKG1fbGlua0hpZ2hsaWdo
dExheWVyRGVsZWdhdGUtPmdldENvbnRlbnRMYXllcigpKTsKKwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbmV3Q2hpbGRyZW4uc2l6ZSgpOyArK2kpCiAgICAgICAgIG5ld0NoaWxkcmVuW2ld
LT5yZW1vdmVGcm9tUGFyZW50KCk7CiAKQEAgLTc0OSw3ICs3OTAsNyBAQCBpbnQgR3JhcGhpY3NM
YXllckNocm9taXVtOjptYXBBbmltYXRpb25OYW1lVG9JZChjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2FuaW1hdGlvbklkTWFwLmNv
bnRhaW5zKGFuaW1hdGlvbk5hbWUpKQotICAgICAgICBtX2FuaW1hdGlvbklkTWFwLmFkZChhbmlt
YXRpb25OYW1lLCBzX25leHRBbmltYXRpb25JZCsrKTsKKyAgICAgICAgbV9hbmltYXRpb25JZE1h
cC5hZGQoYW5pbWF0aW9uTmFtZSwgZ2V0TmV4dEFuaW1hdGlvbklkKCkpOwogCiAgICAgcmV0dXJu
IG1fYW5pbWF0aW9uSWRNYXAuZmluZChhbmltYXRpb25OYW1lKS0+c2Vjb25kOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBlM2E4MjA5MGRjNjU1ZTJiZWFmMzhkNTcx
MzNjNGJkMGZmZDRiNWY5Li5jYTAxZjcyZGNkMDQxYWI0OTMyYjViMzA1ODI1Y2M2ZTNhNjAxY2Ux
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtNDQsNiArNDQsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNocm9taXVtOworY2xhc3MgTGlua0hp
Z2hsaWdodExheWVyRGVsZWdhdGU7CiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSA6IHB1
YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgQ29udGVudExheWVyRGVsZWdhdGUsIHB1YmxpYyBD
Q0xheWVyQW5pbWF0aW9uRGVsZWdhdGUgewogcHVibGljOgpAQCAtMTA1LDYgKzEwNiw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHdhbGxDbG9j
a1RpbWUpOwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkTGlua0hpZ2hsaWdodExheWVyKGNvbnN0IFBhdGgmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkRmluaXNoTGlua0hpZ2hsaWdodExheWVyKCk7CisKICAgICB2aXJ0dWFsIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRE
ZWJ1Z0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtMTU4LDYgKzE2Miw3IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2xheWVyOwogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBtX3RyYW5zZm9ybUxheWVyOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBtX2NvbnRlbnRzTGF5ZXI7CisgICAgUmVmUHRyPExpbmtIaWdobGlnaHRMYXllckRl
bGVnYXRlPiBtX2xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOwogCiAgICAgZW51bSBDb250ZW50
c0xheWVyUHVycG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0
TGF5ZXJEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ2NjJkNTk1
M2NkYzU3YjM1MWYzNjM0YTAzZDZmOGM0Yzk4NTY0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRl
bGVnYXRlLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU+IExpbmtI
aWdobGlnaHRMYXllckRlbGVnYXRlOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBwYXJl
bnQsIGNvbnN0IFBhdGgmIHBhdGgsIGludCBncm91cElkKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUocGFyZW50LCBwYXRoLCBncm91cElkKSk7
Cit9CisKK0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxl
Z2F0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgUGF0aCYgcGF0aCwgaW50
IGdyb3VwSWQpCisgICAgOiBtX2NvbnRlbnRMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKHRoaXMpKQorICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9wYXRoKHBhdGgpCit7
CisgICAgbV9jb250ZW50TGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisKKyAgICBJbnRSZWN0
IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHBhdGguYm91bmRpbmdSZWN0KCkpOworCisgICAgbV9j
b250ZW50TGF5ZXItPnNldEJvdW5kcyhyZWN0LnNpemUoKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShyZWN0LngoKSArIHJl
Y3Qud2lkdGgoKSAvIDIsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDIpOworICAgIG1fY29u
dGVudExheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKworICAgIG1fcGF0aC50cmFuc2xh
dGUoRmxvYXRTaXplKC1yZWN0LngoKSwgLXJlY3QueSgpKSk7CisKKyAgICBtX2NvbnRlbnRMYXll
ci0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKKworICAgIC8vIEZJWE1FOiBTaG91
bGQgdGhlc2UgYmUgY29uZmlndXJhYmxlPworICAgIGNvbnN0IGZsb2F0IHN0YXJ0T3BhY2l0eSA9
IDAuMjU7CisgICAgY29uc3QgZmxvYXQgZHVyYXRpb24gPSAyOworCisgICAgbV9jb250ZW50TGF5
ZXItPnNldE9wYWNpdHkoc3RhcnRPcGFjaXR5KTsKKworICAgIE93blB0cjxDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6
Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0
ZSgwLCBzdGFydE9wYWNpdHksIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NG
bG9hdEtleWZyYW1lOjpjcmVhdGUoZHVyYXRpb24gLyAyLCBzdGFydE9wYWNpdHksIG51bGxwdHIp
KTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoZHVyYXRp
b24sIDAsIG51bGxwdHIpKTsKKworICAgIC8vIGFuaW1hdGlvbklkID0gMSBpcyByZXNlcnZlZCBm
b3IgdXMuCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24oQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIDEsIGdyb3VwSWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgYW5pbWF0aW9uLT5zZXROZWVkc1N5bmNocm9uaXplZFN0
YXJ0VGltZSh0cnVlKTsKKyAgICBtX2NvbnRlbnRMYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKCktPmFkZChhbmltYXRpb24ucmVsZWFzZSgpKTsKK30KKworTGlua0hpZ2hsaWdodExheWVy
RGVsZWdhdGU6On5MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZSgpCit7CisgICAgbV9jb250ZW50
TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX2NvbnRlbnRMYXllci0+Y2xlYXJEZWxl
Z2F0ZSgpOworfQorCitDb250ZW50TGF5ZXJDaHJvbWl1bSogTGlua0hpZ2hsaWdodExheWVyRGVs
ZWdhdGU6OmdldENvbnRlbnRMYXllcigpCit7CisgICAgcmV0dXJuIG1fY29udGVudExheWVyLmdl
dCgpOworfQorCit2b2lkIExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpwYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQoreworICAgIC8v
IEZJWE1FOiBtYWtlIGNvbG91ciBjb25maWd1cmFibGU/CisgICAgZ2Muc2V0U3Ryb2tlQ29sb3Io
Q29sb3IoMCwgMCwgMjU1LCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBnYy5zZXRT
dHJva2VUaGlja25lc3MoMik7CisgICAgZ2Muc3Ryb2tlUGF0aChtX3BhdGgpOworICAgIGdjLnNl
dEZpbGxDb2xvcihDb2xvcigyNTUsIDAsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgZ2MuZmlsbFBhdGgobV9wYXRoKTsKK30KKwordm9pZCBMaW5rSGlnaGxpZ2h0TGF5ZXJE
ZWxlZ2F0ZTo6ZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKQoreworfQorCit2b2lkIExpbmtIaWdo
bGlnaHRMYXllckRlbGVnYXRlOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKQor
eworfQorCit2b2lkIExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpub3RpZnlBbmltYXRpb25G
aW5pc2hlZChkb3VibGUgdGltZSkKK3sKKyAgICAvLyBBbGxvdyBudWxsIHBhcmVudCBwb2ludGVy
IHRvIGZhY2lsaXRhdGUgdGVzdGluZy4KKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFy
ZW50LT5kaWRGaW5pc2hMaW5rSGlnaGxpZ2h0TGF5ZXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hs
aWdodExheWVyRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2UzOWQyNDZk
YzlhODUxYjM4NDIxMGQzZmRjZTQ4MDM4NWRkNmQyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRl
bGVnYXRlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGlua0hpZ2hsaWdodExh
eWVyRGVsZWdhdGVfaAorI2RlZmluZSBMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZV9oCisKKyNp
bmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR3JhcGhpY3NMYXllckNocm9taXVtOworCitjbGFzcyBMaW5rSGlnaGxp
Z2h0TGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpbmtIaWdobGlnaHRMYXllckRl
bGVnYXRlPiwgcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlLCBwdWJsaWMgQ0NMYXllckFuaW1h
dGlvbkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMaW5rSGlnaGxp
Z2h0TGF5ZXJEZWxlZ2F0ZT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogcGFyZW50LCBj
b25zdCBQYXRoJiwgaW50IGdyb3VwSWQpOworICAgIHZpcnR1YWwgIH5MaW5rSGlnaGxpZ2h0TGF5
ZXJEZWxlZ2F0ZSgpOworCisgICAgQ29udGVudExheWVyQ2hyb21pdW0qIGdldENvbnRlbnRMYXll
cigpOworCisgICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCisgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3QgSW50U2l6ZSYp
IE9WRVJSSURFOworCisgICAgLy8gQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIGltcGxlbWVudGF0
aW9uLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1l
KTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZG91YmxlIHRpbWUp
OworCitwcml2YXRlOgorICAgIExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogcGFyZW50LCBjb25zdCBQYXRoJiwgaW50IGdyb3VwSWQpOworCisgICAgUmVm
UHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2NvbnRlbnRMYXllcjsKKyAgICBHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG1fcGFyZW50OworICAgIFBhdGggbV9wYXRoOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDBlODIyOGE2ZTg5MGQ1
ZjM3NDA0N2ZjM2E4MTcxYjg5ZDEzODlhYTkuLjBmNzIxYjM0M2Q5NTM5ZWY5Y2MyZGNjY2I3Njhi
NWM0OThlYzMyMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTEzLDYgKzEx
Myw3IEBACiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvTGV2ZWxEQlRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9MaW5r
SGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Mb2Nh
bGl6ZWROdW1iZXJJQ1VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTW9ja0NDUXVhZEN1
bGxlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9QYWludEFnZ3JlZ2F0b3JUZXN0LmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xpbmtIaWdobGlnaHRMYXll
ckRlbGVnYXRlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xpbmtIaWdo
bGlnaHRMYXllckRlbGVnYXRlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzcwODgwODM5YzgzMmRkMTM1
ODYyYmJiOWE0NDU2ZGVmMGFmM2NmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGVUZXN0LmNwcApAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckNocm9taXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFz
cyBNb2NrR3JhcGhpY3NMYXllckNsaWVudCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsK
K3B1YmxpYzoKKworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlm
eVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdy
YXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQorICAg
IHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIo
Y29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitURVNU
KExpbmtIaWdobGlnaHRMYXllclRlc3QsIHZlcmlmeUxpbmtIaWdobGlnaHRMYXllcikKK3sKKyAg
ICBQYXRoIGhpZ2hsaWdodFBhdGg7CisgICAgaGlnaGxpZ2h0UGF0aC5hZGRSZWN0KEZsb2F0UmVj
dCg1LCA2LCAxMiwgOCkpOworICAgIEludFJlY3QgcGF0aEJvdW5kaW5nUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoaGlnaGxpZ2h0UGF0aC5ib3VuZGluZ1JlY3QoKSk7CisKKyAgICBSZWZQdHI8TGlu
a0hpZ2hsaWdodExheWVyRGVsZWdhdGU+IGhpZ2hsaWdodExheWVyRGVsZWdhdGUgPSBMaW5rSGln
aGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6Y3JlYXRlKDAsIGhpZ2hsaWdodFBhdGgsIDApOworICAgIEFT
U0VSVF9UUlVFKGhpZ2hsaWdodExheWVyRGVsZWdhdGUuZ2V0KCkpOworICAgIENvbnRlbnRMYXll
ckNocm9taXVtKiBjb250ZW50TGF5ZXIgPSBoaWdobGlnaHRMYXllckRlbGVnYXRlLT5nZXRDb250
ZW50TGF5ZXIoKTsKKyAgICBBU1NFUlRfVFJVRShjb250ZW50TGF5ZXIpOworCisgICAgRVhQRUNU
X0VRKHBhdGhCb3VuZGluZ1JlY3Quc2l6ZSgpLCBjb250ZW50TGF5ZXItPmJvdW5kcygpKTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250ZW50TGF5ZXItPnRyYW5zZm9ybSgpLmlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uKCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRMYXllci0+dHJhbnNmb3JtKCkuaXNJ
bnRlZ2VyVHJhbnNsYXRpb24oKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21w
b3NlZFR5cGUgZGVjb21wb3NpdGlvbjsKKyAgICBFWFBFQ1RfVFJVRShjb250ZW50TGF5ZXItPnRy
YW5zZm9ybSgpLmRlY29tcG9zZShkZWNvbXBvc2l0aW9uKSk7CisKKyAgICBGbG9hdFBvaW50IGV4
cGVjdGVkVHJhbnNsYXRpb24ocGF0aEJvdW5kaW5nUmVjdC54KCkgKyBwYXRoQm91bmRpbmdSZWN0
LndpZHRoKCkgLyAyLCBwYXRoQm91bmRpbmdSZWN0LnkoKSArIHBhdGhCb3VuZGluZ1JlY3QuaGVp
Z2h0KCkgLyAyKTsKKyAgICBFWFBFQ1RfRVEoRmxvYXRQb2ludChkZWNvbXBvc2l0aW9uLnRyYW5z
bGF0ZVgsIGRlY29tcG9zaXRpb24udHJhbnNsYXRlWSksIGV4cGVjdGVkVHJhbnNsYXRpb24pOwor
fQorCitURVNUKExpbmtIaWdobGlnaHRMYXllclRlc3QsIHZlcmlmeUdyYXBoaWNzTGF5ZXJDaHJv
bWl1bUVtYmVkZGluZykKK3sKKyAgICBNb2NrR3JhcGhpY3NMYXllckNsaWVudCBjbGllbnQ7Cisg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4gZ3JhcGhpY3NMYXllciA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtPihHcmFwaGljc0xheWVyOjpjcmVhdGUo
JmNsaWVudCkpOworICAgIEFTU0VSVF9UUlVFKGdyYXBoaWNzTGF5ZXIuZ2V0KCkpOworCisgICAg
Ly8gRG8gd2UgbmVlZCB0byBnaXZlIGl0IGEgY29udGVudHMgbGF5ZXI/CisKKyAgICBQYXRoIGhp
Z2hsaWdodFBhdGg7CisgICAgaGlnaGxpZ2h0UGF0aC5hZGRSZWN0KEZsb2F0UmVjdCg1LCA1LCAx
MCwgOCkpOworCisgICAgLy8gTmVpdGhlciBvZiB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgc2hv
dWxkIGNyYXNoLgorICAgIGdyYXBoaWNzTGF5ZXItPmFkZExpbmtIaWdobGlnaHRMYXllcihoaWdo
bGlnaHRQYXRoKTsKKyAgICBncmFwaGljc0xheWVyLT5kaWRGaW5pc2hMaW5rSGlnaGxpZ2h0TGF5
ZXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140530</attachid>
            <date>2012-05-07 08:23:56 -0700</date>
            <delta_ts>2012-05-07 14:49:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85084-20120507112354.patch</filename>
            <type>text/plain</type>
            <size>27452</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI3MzZkMTEwOWRjNjNh
NjlmNzVhYWEwZWVjNjI5YzdkMTFhMDUyMS4uOGYyYjQ5NDhhNTkzYTA2ZmI4OGZhMDljZWIxMGU0
YWNkNzBmOTU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA1LTA3ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bSBjbGFzcyB0byBwcm92aWRlIGxp
bmstaGlnaGxpZ2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3IgR3JhcGhpY3NMYXllckNocm9taXVt
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwODQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0IHRl
c3QgcHJvdmlkZWQuCisKKyAgICAgICAgQ3JlYXRlcyBhIGxheWVyIGRlbGVnYXRlIGNsYXNzIHRv
IHByb3ZpZGUgbGluayBoaWdobGlnaHQgYW5pbWF0aW9ucyBmb3IgbGluay1wcmV2aWV3IGZlYXR1
cmUuCisgICAgICAgIFRoZXNlIGFyZSBhZGRlZCB0byBhIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSB2
aWEgcHJvdmlkZWQgbWV0aG9kcy4gTW92ZXMgZGlzcGVuc2luZyBvZiBhbmltYXRpb24KKyAgICAg
ICAgaWRzIGludG8gYSBzZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25JZFZlbmRvcjo6Z2V0TmV4dEFuaW1hdGlvbklkKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEFuaW1hdGlvbklkVmVuZG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZExpbmtIaWdobGlnaHRMYXllcik6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6ZGlk
RmluaXNoTGlua0hpZ2hsaWdodExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChHcmFwaGljc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRM
YXllckRlbGVnYXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hsaWdodExh
eWVyRGVsZWdhdGU6OkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjp+TGlua0hpZ2hsaWdodExheWVyRGVsZWdh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6OmdldENv
bnRlbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0
ZTo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJE
ZWxlZ2F0ZTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRMYXll
ckRlbGVnYXRlOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpub3RpZnlBbmltYXRpb25GaW5pc2hlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodExheWVyRGVsZWdh
dGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExpbmtIaWdobGlnaHRM
YXllckRlbGVnYXRlKToKKwogMjAxMi0wNS0wNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkZml4IGZvciBidWdneSBHQ0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggNzczMTY1ZjM0MjhhOTgzODEwYWM5ZTc5ZmIwMjRmMzEyNWJjZmVj
YS4uNDFmN2VkMGJkZjJkNmQzZGY4MmUyYzM1NGUwMjhlMTIwYTk4ODU3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wNS0wNyAgVy4gSmFtZXMgTWFj
TGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVh
dGUgTGlua0hpZ2hsaWdodExheWVyQ2hyb21pdW0gY2xhc3MgdG8gcHJvdmlkZSBsaW5rLWhpZ2hs
aWdodCBwcmV2aWV3IGFuaW1hdGlvbnMgZm9yIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MDg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToK
KyAgICAgICAgKiB0ZXN0cy9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQ6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQ6
Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NMYXll
ckNsaWVudDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NM
YXllckNsaWVudDo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3Jh
cGhpY3NMYXllckNsaWVudDo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRFU1QpOgorCiAyMDEyLTA1LTA3ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkOiB0aGUgc2FtZSBmaXggaW4gYW5vdGhlciBmaWxlIGZv
ciBjaHJvbWl1bSB3aW4gYnVpbGQuICBBZGRpbmcgV2ViQ29yZSBuYW1lc3BhY2UgdG8gRmlsZVN5
c3RlbVR5cGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDY2ZDgxMzRmMjQ1NDcwOThlMjA4NmY0YmU4
MzlmNWQ2YmY1NjQ1MjYuLjAxZWM0NmQ2MWNmODk5NWYzNzEyZDY2MmRlNmFkNzI4ZjA3OWY5MDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1MjQsNiArMzUyNCw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0dGVybkNHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvbklkVmVuZG9yLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAnLApAQCAtMzU3Myw2ICszNTc1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodExheWVy
RGVsZWdhdGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
aW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0
aW9uSWRWZW5kb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQW5pbWF0aW9uSWRWZW5kb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxYWVjZWEwMzA2MGU4YTgwMTFi
YTM5ZjcyMzdjNGQxOGQ4NzZmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5jcHAKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyogIAorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworaW50IEFuaW1hdGlvbklkVmVuZG9yOjpzX25leHRBbmltYXRpb25J
ZCA9IEZpcnN0QXZhaWxhYmxlQW5pbWF0aW9uSWQ7CitpbnQgQW5pbWF0aW9uSWRWZW5kb3I6OnNf
bmV4dEdyb3VwSWQgPSBGaXJzdEF2YWlsYWJsZUdyb3VwSWQ7CisKK2ludCBBbmltYXRpb25JZFZl
bmRvcjo6Z2V0TmV4dEFuaW1hdGlvbklkKCkKK3sKKyAgICBpbnQgaWQgPSBzX25leHRBbmltYXRp
b25JZCsrOworICAgIGlmIChzX25leHRBbmltYXRpb25JZCA9PSBEb250VXNlQW5pbWF0aW9uSWQp
CisgICAgICAgIHNfbmV4dEFuaW1hdGlvbklkID0gRmlyc3RBdmFpbGFibGVBbmltYXRpb25JZDsK
KworICAgIHJldHVybiBpZDsKK30KKworaW50IEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3Jv
dXBJZCgpCit7CisgICAgaW50IGlkID0gc19uZXh0R3JvdXBJZCsrOworICAgIGlmIChzX25leHRH
cm91cElkID09IERvbnRVc2VHcm91cElkKQorICAgICAgICBzX25leHRHcm91cElkID0gRmlyc3RB
dmFpbGFibGVHcm91cElkOworCisgICAgcmV0dXJuIGlkOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9BbmltYXRpb25JZFZlbmRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OWE0MzUzMmVkZGU2
YmM4Mjc2OTU2NWUwYTRlYmY5YTRiMjA0NzRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuaApAQCAt
MCwwICsxLDQ2IEBACisvKgorICAyICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICAzICAqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyog
YXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogIAorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyovCisKKyNpZm5kZWYgQW5pbWF0aW9uSWRWZW5kb3JfaAorI2RlZmluZSBBbmltYXRpb25J
ZFZlbmRvcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQW5pbWF0aW9uSWRWZW5k
b3IgeworcHVibGljOgorICAgIGVudW0gQW5pbWF0aW9uSWRTZXF1ZW5jZSB7IERvbnRVc2VBbmlt
YXRpb25JZCA9IDAsIExpbmtIaWdobGlnaHRBbmltYXRpb25JZCwgRmlyc3RBdmFpbGFibGVBbmlt
YXRpb25JZCB9OworICAgIGVudW0gR3JvdXBJZFNlcXVlbmNlIHsgRG9udFVzZUdyb3VwSWQgPSAw
LCBGaXJzdEF2YWlsYWJsZUdyb3VwSWQgfTsKKworICAgIHN0YXRpYyBpbnQgZ2V0TmV4dEFuaW1h
dGlvbklkKCk7CisgICAgc3RhdGljIGludCBnZXROZXh0R3JvdXBJZCgpOworCitwcml2YXRlOgor
ICAgIHN0YXRpYyBpbnQgc19uZXh0QW5pbWF0aW9uSWQ7CisgICAgc3RhdGljIGludCBzX25leHRH
cm91cElkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDNjNmQ5MjRiYjI0MDc1MTcwY2M5MDE4
NWNhZmI3MmE1NzFiOWNiYmUuLmY0MGQyZjE3OWI1NDdkYTkxY2Y5ZmM2ZjYxM2NhZGViNGY4YWQx
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUs
NyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJB
bmltYXRpb25JZFZlbmRvci5oIgogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCkBAIC01Miw2ICs1Myw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bWFnZUxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKIApAQCAtNjEsMTEgKzYzLDYgQEAKIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAotbmFtZXNwYWNlIHsKLXN0YXRpYyBpbnQgc19uZXh0R3JvdXBJ
ZCA9IDE7Ci1zdGF0aWMgaW50IHNfbmV4dEFuaW1hdGlvbklkID0gMTsKLX0KLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCkBAIC0xMzAsNiArMTI3LDggQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZU5hbWVzKCkKICAgICAgICAgbV90cmFuc2Zv
cm1MYXllci0+c2V0RGVidWdOYW1lKCJUcmFuc2Zvcm1MYXllciBmb3IgIiArIG1fbmFtZUJhc2Up
OwogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0
RGVidWdOYW1lKCJDb250ZW50c0xheWVyIGZvciAiICsgbV9uYW1lQmFzZSk7CisgICAgaWYgKG1f
bGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUpCisgICAgICAgIG1fbGlua0hpZ2hsaWdodExheWVy
RGVsZWdhdGUtPmdldENvbnRlbnRMYXllcigpLT5zZXREZWJ1Z05hbWUoIkxpbmtIaWdobGlnaHRM
YXllciBmb3IgIiArIG1fbmFtZUJhc2UpOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCkBA
IC00MDcsNyArNDA2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
VG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIGJvb2wgR3JhcGhpY3NMYXll
ckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywg
Y29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAgcHJpbWFy
eUxheWVyKCktPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUodGhpcyk7Ci0gICAgcmV0dXJuIHBy
aW1hcnlMYXllcigpLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIG1h
cEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCBzX25leHRHcm91cElkKyssIHRpbWVP
ZmZzZXQpOworICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKS0+YWRkQW5pbWF0aW9uKHZhbHVlcywg
Ym94U2l6ZSwgYW5pbWF0aW9uLCBtYXBBbmltYXRpb25OYW1lVG9JZChhbmltYXRpb25OYW1lKSwg
QW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRHcm91cElkKCksIHRpbWVPZmZzZXQpOwogfQogCiB2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKQEAgLTQzMyw2ICs0MzIsMjAgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgIHByaW1hcnlM
YXllcigpLT5yZXN1bWVBbmltYXRpb25zKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsK
IH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZExpbmtIaWdobGlnaHRMYXllcihj
b25zdCBQYXRoJiBwYXRoKQoreworICAgIG1fbGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUgPSBM
aW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6Y3JlYXRlKHRoaXMsIHBhdGgsIEFuaW1hdGlvbklk
VmVuZG9yOjpMaW5rSGlnaGxpZ2h0QW5pbWF0aW9uSWQsIEFuaW1hdGlvbklkVmVuZG9yOjpnZXRO
ZXh0R3JvdXBJZCgpKTsKKyAgICB1cGRhdGVDaGlsZExpc3QoKTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OmRpZEZpbmlzaExpbmtIaWdobGlnaHRMYXllcigpCit7CisgICAgaWYg
KG1fbGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUpCisgICAgICAgIG1fbGlua0hpZ2hsaWdodExh
eWVyRGVsZWdhdGUtPmdldENvbnRlbnRMYXllcigpLT5yZW1vdmVGcm9tUGFyZW50KCk7CisKKyAg
ICBtX2xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmNsZWFyKCk7Cit9CisKIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciogbGF5ZXIp
CiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKQEAgLTUxMyw2ICs1MjYsOSBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRMaXN0KCkKICAgICAgICAg
bmV3Q2hpbGRyZW4uYXBwZW5kKGNoaWxkTGF5ZXIpOwogICAgIH0KIAorICAgIGlmIChtX2xpbmtI
aWdobGlnaHRMYXllckRlbGVnYXRlKQorICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9saW5r
SGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS0+Z2V0Q29udGVudExheWVyKCkpOworCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuZXdDaGlsZHJlbi5zaXplKCk7ICsraSkKICAgICAgICAgbmV3Q2hp
bGRyZW5baV0tPnJlbW92ZUZyb21QYXJlbnQoKTsKIApAQCAtNzQ5LDcgKzc2NSw3IEBAIGludCBH
cmFwaGljc0xheWVyQ2hyb21pdW06Om1hcEFuaW1hdGlvbk5hbWVUb0lkKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fYW5pbWF0aW9u
SWRNYXAuY29udGFpbnMoYW5pbWF0aW9uTmFtZSkpCi0gICAgICAgIG1fYW5pbWF0aW9uSWRNYXAu
YWRkKGFuaW1hdGlvbk5hbWUsIHNfbmV4dEFuaW1hdGlvbklkKyspOworICAgICAgICBtX2FuaW1h
dGlvbklkTWFwLmFkZChhbmltYXRpb25OYW1lLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEFu
aW1hdGlvbklkKCkpOwogCiAgICAgcmV0dXJuIG1fYW5pbWF0aW9uSWRNYXAuZmluZChhbmltYXRp
b25OYW1lKS0+c2Vjb25kOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRl
eCBiZTJiM2FlNjU3YjU0MmZhYjRjYjU3ZmIzMjBjY2I3NWFhNGE5NzgwLi5lMGUwZWU4YTkyYWEy
YjlkZmRjMzYxMjc5YzYxMWY3ZDM2NWZlNTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaApAQCAtNDQsNiArNDQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBM
YXllckNocm9taXVtOworY2xhc3MgTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU7CiAKIGNsYXNz
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgQ29u
dGVudExheWVyRGVsZWdhdGUsIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUgewogcHVi
bGljOgpAQCAtMTA1LDYgKzEwNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZEFuaW1hdGlvbnMoZG91YmxlIHdhbGxDbG9ja1RpbWUpOwogICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVBbmltYXRpb25zKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTGlua0hpZ2hsaWdodExheWVy
KGNvbnN0IFBhdGgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTGlua0hpZ2hsaWdodExh
eWVyKCk7CisKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xv
ciYpOwpAQCAtMTU3LDYgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENvbnRlbnRMYXll
ckNocm9taXVtPiBtX2xheWVyOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3RyYW5zZm9y
bUxheWVyOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NvbnRlbnRzTGF5ZXI7CisgICAg
UmVmUHRyPExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlPiBtX2xpbmtIaWdobGlnaHRMYXllckRl
bGVnYXRlOwogCiAgICAgZW51bSBDb250ZW50c0xheWVyUHVycG9zZSB7CiAgICAgICAgIE5vQ29u
dGVudHNMYXllciA9IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGE2MTQ2MmY0ZjdmNTcxM2QxMjIyMjU3MGIzNzE5ODliYmQ5NTc2
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmNwcApAQCAtMCwwICsxLDExOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxpbmtIaWdobGlnaHRMYXll
ckRlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGlua0hp
Z2hsaWdodExheWVyRGVsZWdhdGU+IExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpjcmVhdGUo
R3JhcGhpY3NMYXllckNocm9taXVtKiBwYXJlbnQsIGNvbnN0IFBhdGgmIHBhdGgsIGludCBhbmlt
YXRpb25JZCwgaW50IGdyb3VwSWQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMaW5rSGln
aGxpZ2h0TGF5ZXJEZWxlZ2F0ZShwYXJlbnQsIHBhdGgsIGFuaW1hdGlvbklkLCBncm91cElkKSk7
Cit9CisKK0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxl
Z2F0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgUGF0aCYgcGF0aCwgaW50
IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCkKKyAgICA6IG1fY29udGVudExheWVyKENvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGUodGhpcykpCisgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAg
LCBtX3BhdGgocGF0aCkKK3sKKyAgICBtX2NvbnRlbnRMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVl
KTsKKworICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocGF0aC5ib3VuZGluZ1Jl
Y3QoKSk7CisKKyAgICBtX2NvbnRlbnRMYXllci0+c2V0Qm91bmRzKHJlY3Quc2l6ZSgpKTsKKwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlKHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC8gMiwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgp
IC8gMik7CisgICAgbV9jb250ZW50TGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworCisg
ICAgbV9wYXRoLnRyYW5zbGF0ZShGbG9hdFNpemUoLXJlY3QueCgpLCAtcmVjdC55KCkpKTsKKwor
ICAgIG1fY29udGVudExheWVyLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRoaXMpOworCisg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGVzZSBiZSBjb25maWd1cmFibGU/CisgICAgY29uc3QgZmxv
YXQgc3RhcnRPcGFjaXR5ID0gMC4yNTsKKyAgICBjb25zdCBmbG9hdCBkdXJhdGlvbiA9IDI7CisK
KyAgICBtX2NvbnRlbnRMYXllci0+c2V0T3BhY2l0eShzdGFydE9wYWNpdHkpOworCisgICAgT3du
UHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxv
YXRLZXlmcmFtZTo6Y3JlYXRlKDAsIHN0YXJ0T3BhY2l0eSwgbnVsbHB0cikpOworICAgIGN1cnZl
LT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShkdXJhdGlvbiAvIDIsIHN0YXJ0
T3BhY2l0eSwgbnVsbHB0cikpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJh
bWU6OmNyZWF0ZShkdXJhdGlvbiwgMCwgbnVsbHB0cikpOworCisgICAgLy8gYW5pbWF0aW9uSWQg
PSAxIGlzIHJlc2VydmVkIGZvciB1cy4KKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFu
aW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgYW5pbWF0
aW9uSWQsIGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgYW5pbWF0
aW9uLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKKyAgICBtX2NvbnRlbnRM
YXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmFkZChhbmltYXRpb24ucmVsZWFzZSgp
KTsKK30KKworTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6On5MaW5rSGlnaGxpZ2h0TGF5ZXJE
ZWxlZ2F0ZSgpCit7CisgICAgbV9jb250ZW50TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAg
ICBtX2NvbnRlbnRMYXllci0+Y2xlYXJEZWxlZ2F0ZSgpOworfQorCitDb250ZW50TGF5ZXJDaHJv
bWl1bSogTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6OmdldENvbnRlbnRMYXllcigpCit7Cisg
ICAgcmV0dXJuIG1fY29udGVudExheWVyLmdldCgpOworfQorCit2b2lkIExpbmtIaWdobGlnaHRM
YXllckRlbGVnYXRlOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KQoreworICAgIC8vIEZJWE1FOiBtYWtlIGNvbG91ciBjb25maWd1cmFi
bGU/CisgICAgZ2Muc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1LCAyNTUpLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKKyAgICBnYy5zZXRTdHJva2VUaGlja25lc3MoMik7CisgICAgZ2Muc3Ry
b2tlUGF0aChtX3BhdGgpOworICAgIGdjLnNldEZpbGxDb2xvcihDb2xvcigyNTUsIDAsIDI1NSwg
MjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgZ2MuZmlsbFBhdGgobV9wYXRoKTsKK30K
Kwordm9pZCBMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6ZGlkU2Nyb2xsKGNvbnN0IEludFNp
emUmKQoreworfQorCit2b2lkIExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpub3RpZnlBbmlt
YXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKQoreworfQorCit2b2lkIExpbmtIaWdobGlnaHRMYXll
ckRlbGVnYXRlOjpub3RpZnlBbmltYXRpb25GaW5pc2hlZChkb3VibGUgdGltZSkKK3sKKyAgICAv
LyBBbGxvdyBudWxsIHBhcmVudCBwb2ludGVyIHRvIGZhY2lsaXRhdGUgdGVzdGluZy4KKyAgICBp
ZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5kaWRGaW5pc2hMaW5rSGlnaGxpZ2h0TGF5
ZXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVn
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzlkYmMyYTgzOTdhNmExMzY3NWNkYzhiZjIwNjBmOTAxNzNlNTFi
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGVfaAorI2RlZmluZSBMaW5rSGln
aGxpZ2h0TGF5ZXJEZWxlZ2F0ZV9oCisKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdh
dGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NMYXllckNo
cm9taXVtOworCitjbGFzcyBMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBSZWZD
b3VudGVkPExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlPiwgcHVibGljIENvbnRlbnRMYXllckRl
bGVnYXRlLCBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZT4gY3JlYXRlKEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogcGFyZW50LCBjb25zdCBQYXRoJiwgaW50IGFuaW1hdGlvbklkLCBp
bnQgZ3JvdXBJZCk7CisgICAgdmlydHVhbCAgfkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlKCk7
CisKKyAgICBDb250ZW50TGF5ZXJDaHJvbWl1bSogZ2V0Q29udGVudExheWVyKCk7CisKKyAgICAv
LyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7
CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7CisK
KyAgICAvLyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlIHRpbWUpOworICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlBbmltYXRpb25GaW5pc2hlZChkb3VibGUgdGltZSk7CisKK3ByaXZhdGU6
CisgICAgTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBw
YXJlbnQsIGNvbnN0IFBhdGgmLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkKTsKKworICAg
IFJlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50TGF5ZXI7CisgICAgR3JhcGhp
Y3NMYXllckNocm9taXVtKiBtX3BhcmVudDsKKyAgICBQYXRoIG1fcGF0aDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBmODVkOTc5MjA0
MjJiNDc0NDEyM2ZmNDdjZjczOWNiNWE4ZWRjNWMzLi44MTVkMDA0ZWIyZWZlZTQ1NzA2Nzc0YWIx
Y2ZjZjllYzc5YmQ2MTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTExMyw2
ICsxMTMsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMv
TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
TG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tDQ1F1
YWRDdWxsZXIuaCcsCiAgICAgICAgICAgICAndGVzdHMvUGFpbnRBZ2dyZWdhdG9yVGVzdC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MaW5rSGlnaGxpZ2h0
TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MaW5r
SGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkNTQ2NGY5YTA5NDRk
ZTc4NTQ4YWNkMzAzOTY1MGVhMzM1NTZlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlVGVzdC5jcHAKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUuaCIKKworI2luY2x1ZGUgIkFuaW1hdGlv
bklkVmVuZG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJQYXRoLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBNb2NrR3JhcGhpY3NMYXllckNs
aWVudCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKworICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3Vi
bGUgdGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBH
cmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVi
dWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgR3JhcGhpY3NMYXllciop
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitURVNUKExpbmtIaWdobGlnaHRMYXllclRl
c3QsIHZlcmlmeUxpbmtIaWdobGlnaHRMYXllcikKK3sKKyAgICBQYXRoIGhpZ2hsaWdodFBhdGg7
CisgICAgaGlnaGxpZ2h0UGF0aC5hZGRSZWN0KEZsb2F0UmVjdCg1LCA2LCAxMiwgOCkpOworICAg
IEludFJlY3QgcGF0aEJvdW5kaW5nUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoaGlnaGxpZ2h0UGF0
aC5ib3VuZGluZ1JlY3QoKSk7CisKKyAgICBSZWZQdHI8TGlua0hpZ2hsaWdodExheWVyRGVsZWdh
dGU+IGhpZ2hsaWdodExheWVyRGVsZWdhdGUgPSBMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6
Y3JlYXRlKDAsIGhpZ2hsaWdodFBhdGgsIEFuaW1hdGlvbklkVmVuZG9yOjpMaW5rSGlnaGxpZ2h0
QW5pbWF0aW9uSWQsIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpKTsKKyAgICBB
U1NFUlRfVFJVRShoaWdobGlnaHRMYXllckRlbGVnYXRlLmdldCgpKTsKKyAgICBDb250ZW50TGF5
ZXJDaHJvbWl1bSogY29udGVudExheWVyID0gaGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS0+Z2V0Q29u
dGVudExheWVyKCk7CisgICAgQVNTRVJUX1RSVUUoY29udGVudExheWVyKTsKKworICAgIEVYUEVD
VF9FUShwYXRoQm91bmRpbmdSZWN0LnNpemUoKSwgY29udGVudExheWVyLT5ib3VuZHMoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoY29udGVudExheWVyLT50cmFuc2Zvcm0oKS5pc0lkZW50aXR5T3JUcmFu
c2xhdGlvbigpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZW50TGF5ZXItPnRyYW5zZm9ybSgpLmlz
SW50ZWdlclRyYW5zbGF0aW9uKCkpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29t
cG9zZWRUeXBlIGRlY29tcG9zaXRpb247CisgICAgRVhQRUNUX1RSVUUoY29udGVudExheWVyLT50
cmFuc2Zvcm0oKS5kZWNvbXBvc2UoZGVjb21wb3NpdGlvbikpOworCisgICAgRmxvYXRQb2ludCBl
eHBlY3RlZFRyYW5zbGF0aW9uKHBhdGhCb3VuZGluZ1JlY3QueCgpICsgcGF0aEJvdW5kaW5nUmVj
dC53aWR0aCgpIC8gMiwgcGF0aEJvdW5kaW5nUmVjdC55KCkgKyBwYXRoQm91bmRpbmdSZWN0Lmhl
aWdodCgpIC8gMik7CisgICAgRVhQRUNUX0VRKEZsb2F0UG9pbnQoZGVjb21wb3NpdGlvbi50cmFu
c2xhdGVYLCBkZWNvbXBvc2l0aW9uLnRyYW5zbGF0ZVkpLCBleHBlY3RlZFRyYW5zbGF0aW9uKTsK
K30KKworVEVTVChMaW5rSGlnaGxpZ2h0TGF5ZXJUZXN0LCB2ZXJpZnlHcmFwaGljc0xheWVyQ2hy
b21pdW1FbWJlZGRpbmcpCit7CisgICAgTW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQgY2xpZW50Owor
ICAgIE93blB0cjxHcmFwaGljc0xheWVyQ2hyb21pdW0+IGdyYXBoaWNzTGF5ZXIgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4oR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KCZjbGllbnQpKTsKKyAgICBBU1NFUlRfVFJVRShncmFwaGljc0xheWVyLmdldCgpKTsKKworICAg
IFBhdGggaGlnaGxpZ2h0UGF0aDsKKyAgICBoaWdobGlnaHRQYXRoLmFkZFJlY3QoRmxvYXRSZWN0
KDUsIDUsIDEwLCA4KSk7CisKKyAgICAvLyBOZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgb3BlcmF0
aW9ucyBzaG91bGQgY3Jhc2guCisgICAgZ3JhcGhpY3NMYXllci0+YWRkTGlua0hpZ2hsaWdodExh
eWVyKGhpZ2hsaWdodFBhdGgpOworICAgIGdyYXBoaWNzTGF5ZXItPmRpZEZpbmlzaExpbmtIaWdo
bGlnaHRMYXllcigpOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140596</attachid>
            <date>2012-05-07 14:49:14 -0700</date>
            <delta_ts>2012-05-08 07:26:55 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-85084-20120507174912.patch</filename>
            <type>text/plain</type>
            <size>27273</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI3MzZkMTEwOWRjNjNh
NjlmNzVhYWEwZWVjNjI5YzdkMTFhMDUyMS4uMjdkNjUwNjM3ZjQ0NmIyNzk2YWU5ZWFkNmZhYjAx
ODAzYjYzN2Y4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA1LTA3ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bSBjbGFzcyB0byBwcm92aWRlIGxp
bmstaGlnaGxpZ2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3IgR3JhcGhpY3NMYXllckNocm9taXVt
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwODQK
KworICAgICAgICBSZXZpZXdlZCBieSBBZHJpZW5uZSBXYWxrZXIuCisKKyAgICAgICAgVW5pdCB0
ZXN0IHByb3ZpZGVkLgorCisgICAgICAgIENyZWF0ZXMgYSBsYXllciBkZWxlZ2F0ZSBjbGFzcyB0
byBwcm92aWRlIGxpbmsgaGlnaGxpZ2h0IGFuaW1hdGlvbnMgZm9yIGxpbmstcHJldmlldyBmZWF0
dXJlLgorICAgICAgICBUaGVzZSBhcmUgYWRkZWQgdG8gYSBHcmFwaGljc0xheWVyQ2hyb21pdW0g
dmlhIHByb3ZpZGVkIG1ldGhvZHMuIE1vdmVzIGRpc3BlbnNpbmcgb2YgYW5pbWF0aW9uCisgICAg
ICAgIGlkcyBpbnRvIGEgc2VwYXJhdGUgY2xhc3MuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3Iu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0
aW9uSWRWZW5kb3I6OmdldE5leHRBbmltYXRpb25JZCk6CisgICAgICAgIChXZWJDb3JlOjpBbmlt
YXRpb25JZFZlbmRvcjo6Z2V0TmV4dEdyb3VwSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0FuaW1hdGlvbklkVmVuZG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChBbmltYXRpb25JZFZlbmRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTmFtZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRMaW5rSGlnaGxpZ2h0TGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmRp
ZEZpbmlzaExpbmtIaWdobGlnaHRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06Om1hcEFuaW1hdGlvbk5hbWVUb0lkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0
TGF5ZXJEZWxlZ2F0ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRM
YXllckRlbGVnYXRlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6fkxpbmtIaWdobGlnaHRMYXllckRlbGVn
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpnZXRD
b250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hsaWdodExheWVyRGVsZWdh
dGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hsaWdodExheWVy
RGVsZWdhdGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGlu
a0hpZ2hsaWdodExheWVyRGVsZWdhdGU6Om5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGlua0hpZ2hsaWdodExh
eWVyRGVsZWdhdGUpOgorCiAyMDEyLTA1LTA3ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGRmaXggZm9yIGJ1Z2d5IEdDQwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA3NzMxNjVmMzQyOGE5ODM4MTBhYzllNzlmYjAyNGYzMTI1YmNmZWNh
Li5hZmI2ZmE0MjJlNGY5ZDUwOGU2Nzk4ZjE5NGQ1OGY2ZDI1NTJkMGJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA1LTA3ICBXLiBKYW1lcyBNYWNM
ZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0
ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bSBjbGFzcyB0byBwcm92aWRlIGxpbmstaGlnaGxp
Z2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3IgR3JhcGhpY3NMYXllckNocm9taXVtLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBBZHJpZW5uZSBXYWxrZXIuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToK
KyAgICAgICAgKiB0ZXN0cy9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQ6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQ6
Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NMYXll
ckNsaWVudDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NM
YXllckNsaWVudDo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3Jh
cGhpY3NMYXllckNsaWVudDo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRFU1QpOgorCiAyMDEyLTA1LTA3ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkOiB0aGUgc2FtZSBmaXggaW4gYW5vdGhlciBmaWxlIGZv
ciBjaHJvbWl1bSB3aW4gYnVpbGQuICBBZGRpbmcgV2ViQ29yZSBuYW1lc3BhY2UgdG8gRmlsZVN5
c3RlbVR5cGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDY2ZDgxMzRmMjQ1NDcwOThlMjA4NmY0YmU4
MzlmNWQ2YmY1NjQ1MjYuLjAxZWM0NmQ2MWNmODk5NWYzNzEyZDY2MmRlNmFkNzI4ZjA3OWY5MDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1MjQsNiArMzUyNCw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0dGVybkNHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvbklkVmVuZG9yLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAnLApAQCAtMzU3Myw2ICszNTc1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodExheWVy
RGVsZWdhdGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
aW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0
aW9uSWRWZW5kb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQW5pbWF0aW9uSWRWZW5kb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxYWVjZWEwMzA2MGU4YTgwMTFi
YTM5ZjcyMzdjNGQxOGQ4NzZmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5jcHAKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyogIAorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworaW50IEFuaW1hdGlvbklkVmVuZG9yOjpzX25leHRBbmltYXRpb25J
ZCA9IEZpcnN0QXZhaWxhYmxlQW5pbWF0aW9uSWQ7CitpbnQgQW5pbWF0aW9uSWRWZW5kb3I6OnNf
bmV4dEdyb3VwSWQgPSBGaXJzdEF2YWlsYWJsZUdyb3VwSWQ7CisKK2ludCBBbmltYXRpb25JZFZl
bmRvcjo6Z2V0TmV4dEFuaW1hdGlvbklkKCkKK3sKKyAgICBpbnQgaWQgPSBzX25leHRBbmltYXRp
b25JZCsrOworICAgIGlmIChzX25leHRBbmltYXRpb25JZCA9PSBEb250VXNlQW5pbWF0aW9uSWQp
CisgICAgICAgIHNfbmV4dEFuaW1hdGlvbklkID0gRmlyc3RBdmFpbGFibGVBbmltYXRpb25JZDsK
KworICAgIHJldHVybiBpZDsKK30KKworaW50IEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3Jv
dXBJZCgpCit7CisgICAgaW50IGlkID0gc19uZXh0R3JvdXBJZCsrOworICAgIGlmIChzX25leHRH
cm91cElkID09IERvbnRVc2VHcm91cElkKQorICAgICAgICBzX25leHRHcm91cElkID0gRmlyc3RB
dmFpbGFibGVHcm91cElkOworCisgICAgcmV0dXJuIGlkOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9BbmltYXRpb25JZFZlbmRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OWE0MzUzMmVkZGU2
YmM4Mjc2OTU2NWUwYTRlYmY5YTRiMjA0NzRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuaApAQCAt
MCwwICsxLDQ2IEBACisvKgorICAyICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICAzICAqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyog
YXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogIAorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyovCisKKyNpZm5kZWYgQW5pbWF0aW9uSWRWZW5kb3JfaAorI2RlZmluZSBBbmltYXRpb25J
ZFZlbmRvcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQW5pbWF0aW9uSWRWZW5k
b3IgeworcHVibGljOgorICAgIGVudW0gQW5pbWF0aW9uSWRTZXF1ZW5jZSB7IERvbnRVc2VBbmlt
YXRpb25JZCA9IDAsIExpbmtIaWdobGlnaHRBbmltYXRpb25JZCwgRmlyc3RBdmFpbGFibGVBbmlt
YXRpb25JZCB9OworICAgIGVudW0gR3JvdXBJZFNlcXVlbmNlIHsgRG9udFVzZUdyb3VwSWQgPSAw
LCBGaXJzdEF2YWlsYWJsZUdyb3VwSWQgfTsKKworICAgIHN0YXRpYyBpbnQgZ2V0TmV4dEFuaW1h
dGlvbklkKCk7CisgICAgc3RhdGljIGludCBnZXROZXh0R3JvdXBJZCgpOworCitwcml2YXRlOgor
ICAgIHN0YXRpYyBpbnQgc19uZXh0QW5pbWF0aW9uSWQ7CisgICAgc3RhdGljIGludCBzX25leHRH
cm91cElkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDNjNmQ5MjRiYjI0MDc1MTcwY2M5MDE4
NWNhZmI3MmE1NzFiOWNiYmUuLmY0MGQyZjE3OWI1NDdkYTkxY2Y5ZmM2ZjYxM2NhZGViNGY4YWQx
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUs
NyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJB
bmltYXRpb25JZFZlbmRvci5oIgogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCkBAIC01Miw2ICs1Myw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bWFnZUxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKIApAQCAtNjEsMTEgKzYzLDYgQEAKIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAotbmFtZXNwYWNlIHsKLXN0YXRpYyBpbnQgc19uZXh0R3JvdXBJ
ZCA9IDE7Ci1zdGF0aWMgaW50IHNfbmV4dEFuaW1hdGlvbklkID0gMTsKLX0KLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCkBAIC0xMzAsNiArMTI3LDggQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZU5hbWVzKCkKICAgICAgICAgbV90cmFuc2Zv
cm1MYXllci0+c2V0RGVidWdOYW1lKCJUcmFuc2Zvcm1MYXllciBmb3IgIiArIG1fbmFtZUJhc2Up
OwogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0
RGVidWdOYW1lKCJDb250ZW50c0xheWVyIGZvciAiICsgbV9uYW1lQmFzZSk7CisgICAgaWYgKG1f
bGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUpCisgICAgICAgIG1fbGlua0hpZ2hsaWdodExheWVy
RGVsZWdhdGUtPmdldENvbnRlbnRMYXllcigpLT5zZXREZWJ1Z05hbWUoIkxpbmtIaWdobGlnaHRM
YXllciBmb3IgIiArIG1fbmFtZUJhc2UpOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCkBA
IC00MDcsNyArNDA2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
VG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIGJvb2wgR3JhcGhpY3NMYXll
ckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywg
Y29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAgcHJpbWFy
eUxheWVyKCktPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUodGhpcyk7Ci0gICAgcmV0dXJuIHBy
aW1hcnlMYXllcigpLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIG1h
cEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCBzX25leHRHcm91cElkKyssIHRpbWVP
ZmZzZXQpOworICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKS0+YWRkQW5pbWF0aW9uKHZhbHVlcywg
Ym94U2l6ZSwgYW5pbWF0aW9uLCBtYXBBbmltYXRpb25OYW1lVG9JZChhbmltYXRpb25OYW1lKSwg
QW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRHcm91cElkKCksIHRpbWVPZmZzZXQpOwogfQogCiB2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKQEAgLTQzMyw2ICs0MzIsMjAgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgIHByaW1hcnlM
YXllcigpLT5yZXN1bWVBbmltYXRpb25zKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsK
IH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZExpbmtIaWdobGlnaHRMYXllcihj
b25zdCBQYXRoJiBwYXRoKQoreworICAgIG1fbGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUgPSBM
aW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6Y3JlYXRlKHRoaXMsIHBhdGgsIEFuaW1hdGlvbklk
VmVuZG9yOjpMaW5rSGlnaGxpZ2h0QW5pbWF0aW9uSWQsIEFuaW1hdGlvbklkVmVuZG9yOjpnZXRO
ZXh0R3JvdXBJZCgpKTsKKyAgICB1cGRhdGVDaGlsZExpc3QoKTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OmRpZEZpbmlzaExpbmtIaWdobGlnaHRMYXllcigpCit7CisgICAgaWYg
KG1fbGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUpCisgICAgICAgIG1fbGlua0hpZ2hsaWdodExh
eWVyRGVsZWdhdGUtPmdldENvbnRlbnRMYXllcigpLT5yZW1vdmVGcm9tUGFyZW50KCk7CisKKyAg
ICBtX2xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmNsZWFyKCk7Cit9CisKIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciogbGF5ZXIp
CiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKQEAgLTUxMyw2ICs1MjYsOSBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRMaXN0KCkKICAgICAgICAg
bmV3Q2hpbGRyZW4uYXBwZW5kKGNoaWxkTGF5ZXIpOwogICAgIH0KIAorICAgIGlmIChtX2xpbmtI
aWdobGlnaHRMYXllckRlbGVnYXRlKQorICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9saW5r
SGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS0+Z2V0Q29udGVudExheWVyKCkpOworCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuZXdDaGlsZHJlbi5zaXplKCk7ICsraSkKICAgICAgICAgbmV3Q2hp
bGRyZW5baV0tPnJlbW92ZUZyb21QYXJlbnQoKTsKIApAQCAtNzQ5LDcgKzc2NSw3IEBAIGludCBH
cmFwaGljc0xheWVyQ2hyb21pdW06Om1hcEFuaW1hdGlvbk5hbWVUb0lkKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fYW5pbWF0aW9u
SWRNYXAuY29udGFpbnMoYW5pbWF0aW9uTmFtZSkpCi0gICAgICAgIG1fYW5pbWF0aW9uSWRNYXAu
YWRkKGFuaW1hdGlvbk5hbWUsIHNfbmV4dEFuaW1hdGlvbklkKyspOworICAgICAgICBtX2FuaW1h
dGlvbklkTWFwLmFkZChhbmltYXRpb25OYW1lLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEFu
aW1hdGlvbklkKCkpOwogCiAgICAgcmV0dXJuIG1fYW5pbWF0aW9uSWRNYXAuZmluZChhbmltYXRp
b25OYW1lKS0+c2Vjb25kOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRl
eCBiZTJiM2FlNjU3YjU0MmZhYjRjYjU3ZmIzMjBjY2I3NWFhNGE5NzgwLi5lMGUwZWU4YTkyYWEy
YjlkZmRjMzYxMjc5YzYxMWY3ZDM2NWZlNTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaApAQCAtNDQsNiArNDQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBM
YXllckNocm9taXVtOworY2xhc3MgTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU7CiAKIGNsYXNz
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgQ29u
dGVudExheWVyRGVsZWdhdGUsIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUgewogcHVi
bGljOgpAQCAtMTA1LDYgKzEwNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZEFuaW1hdGlvbnMoZG91YmxlIHdhbGxDbG9ja1RpbWUpOwogICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVBbmltYXRpb25zKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTGlua0hpZ2hsaWdodExheWVy
KGNvbnN0IFBhdGgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTGlua0hpZ2hsaWdodExh
eWVyKCk7CisKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xv
ciYpOwpAQCAtMTU3LDYgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENvbnRlbnRMYXll
ckNocm9taXVtPiBtX2xheWVyOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3RyYW5zZm9y
bUxheWVyOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NvbnRlbnRzTGF5ZXI7CisgICAg
UmVmUHRyPExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlPiBtX2xpbmtIaWdobGlnaHRMYXllckRl
bGVnYXRlOwogCiAgICAgZW51bSBDb250ZW50c0xheWVyUHVycG9zZSB7CiAgICAgICAgIE5vQ29u
dGVudHNMYXllciA9IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2NjOTVkOWZlMjNlNzdhZmUxMjFiMTNhZmE1Mzc0YmEzZTM4YzMx
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmNwcApAQCAtMCwwICsxLDExNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxpbmtIaWdobGlnaHRMYXll
ckRlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGlua0hp
Z2hsaWdodExheWVyRGVsZWdhdGU+IExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpjcmVhdGUo
R3JhcGhpY3NMYXllckNocm9taXVtKiBwYXJlbnQsIGNvbnN0IFBhdGgmIHBhdGgsIGludCBhbmlt
YXRpb25JZCwgaW50IGdyb3VwSWQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMaW5rSGln
aGxpZ2h0TGF5ZXJEZWxlZ2F0ZShwYXJlbnQsIHBhdGgsIGFuaW1hdGlvbklkLCBncm91cElkKSk7
Cit9CisKK0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlOjpMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxl
Z2F0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgUGF0aCYgcGF0aCwgaW50
IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCkKKyAgICA6IG1fY29udGVudExheWVyKENvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGUodGhpcykpCisgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAg
LCBtX3BhdGgocGF0aCkKK3sKKyAgICBtX2NvbnRlbnRMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVl
KTsKKworICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocGF0aC5ib3VuZGluZ1Jl
Y3QoKSk7CisKKyAgICBtX2NvbnRlbnRMYXllci0+c2V0Qm91bmRzKHJlY3Quc2l6ZSgpKTsKKwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlKHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC8gMiwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgp
IC8gMik7CisgICAgbV9jb250ZW50TGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworCisg
ICAgbV9wYXRoLnRyYW5zbGF0ZShGbG9hdFNpemUoLXJlY3QueCgpLCAtcmVjdC55KCkpKTsKKwor
ICAgIG1fY29udGVudExheWVyLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRoaXMpOworCisg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGVzZSBiZSBjb25maWd1cmFibGU/CisgICAgY29uc3QgZmxv
YXQgc3RhcnRPcGFjaXR5ID0gMC4yNTsKKyAgICBjb25zdCBmbG9hdCBkdXJhdGlvbiA9IDI7CisK
KyAgICBtX2NvbnRlbnRMYXllci0+c2V0T3BhY2l0eShzdGFydE9wYWNpdHkpOworCisgICAgT3du
UHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxv
YXRLZXlmcmFtZTo6Y3JlYXRlKDAsIHN0YXJ0T3BhY2l0eSwgbnVsbHB0cikpOworICAgIGN1cnZl
LT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShkdXJhdGlvbiAvIDIsIHN0YXJ0
T3BhY2l0eSwgbnVsbHB0cikpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJh
bWU6OmNyZWF0ZShkdXJhdGlvbiwgMCwgbnVsbHB0cikpOworCisgICAgLy8gYW5pbWF0aW9uSWQg
PSAxIGlzIHJlc2VydmVkIGZvciB1cy4KKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFu
aW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgYW5pbWF0
aW9uSWQsIGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgYW5pbWF0
aW9uLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKKyAgICBtX2NvbnRlbnRM
YXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmFkZChhbmltYXRpb24ucmVsZWFzZSgp
KTsKK30KKworTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6On5MaW5rSGlnaGxpZ2h0TGF5ZXJE
ZWxlZ2F0ZSgpCit7CisgICAgbV9jb250ZW50TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAg
ICBtX2NvbnRlbnRMYXllci0+Y2xlYXJEZWxlZ2F0ZSgpOworfQorCitDb250ZW50TGF5ZXJDaHJv
bWl1bSogTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6OmdldENvbnRlbnRMYXllcigpCit7Cisg
ICAgcmV0dXJuIG1fY29udGVudExheWVyLmdldCgpOworfQorCit2b2lkIExpbmtIaWdobGlnaHRM
YXllckRlbGVnYXRlOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KQoreworICAgIC8vIEZJWE1FOiBtYWtlIGNvbG91ciBjb25maWd1cmFi
bGU/CisgICAgZ2Muc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1LCAyNTUpLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKKyAgICBnYy5zZXRTdHJva2VUaGlja25lc3MoMik7CisgICAgZ2Muc3Ry
b2tlUGF0aChtX3BhdGgpOworICAgIGdjLnNldEZpbGxDb2xvcihDb2xvcigyNTUsIDAsIDI1NSwg
MjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgZ2MuZmlsbFBhdGgobV9wYXRoKTsKK30K
Kwordm9pZCBMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6bm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBMaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZTo6
bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZG91YmxlIHRpbWUpCit7CisgICAgLy8gQWxsb3cgbnVs
bCBwYXJlbnQgcG9pbnRlciB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCisgICAgaWYgKG1fcGFyZW50
KQorICAgICAgICBtX3BhcmVudC0+ZGlkRmluaXNoTGlua0hpZ2hsaWdodExheWVyKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjIyOTIxOTc0YmRlZmY3MjUzZWRjOWE2ZmFlZDJkZWExYTlhZTE4NTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5r
SGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlX2gKKyNkZWZpbmUgTGlua0hpZ2hsaWdodExheWVy
RGVsZWdhdGVfaAorCisjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJQYXRoLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlLmgiCisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTsKKwor
Y2xhc3MgTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxMaW5r
SGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZT4sIHB1YmxpYyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSwgcHVi
bGljIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hy
b21pdW0qIHBhcmVudCwgY29uc3QgUGF0aCYsIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQp
OworICAgIHZpcnR1YWwgIH5MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZSgpOworCisgICAgQ29u
dGVudExheWVyQ2hyb21pdW0qIGdldENvbnRlbnRMYXllcigpOworCisgICAgLy8gQ29udGVudExh
eWVyRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVu
dHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOworCisgICAgLy8g
Q0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZG91YmxlIHRpbWUpOworCitwcml2YXRlOgorICAgIExp
bmtIaWdobGlnaHRMYXllckRlbGVnYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogcGFyZW50LCBj
b25zdCBQYXRoJiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCk7CisKKyAgICBSZWZQdHI8
Q29udGVudExheWVyQ2hyb21pdW0+IG1fY29udGVudExheWVyOworICAgIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogbV9wYXJlbnQ7CisgICAgUGF0aCBtX3BhdGg7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZjg1ZDk3OTIwNDIyYjQ3NDQx
MjNmZjQ3Y2Y3MzljYjVhOGVkYzVjMy4uODE1ZDAwNGViMmVmZWU0NTcwNjc3NGFiMWNmY2Y5ZWM3
OWJkNjEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xMTMsNiArMTEzLDcg
QEAKICAgICAgICAgICAgICd0ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0xpbmtIaWdo
bGlnaHRMYXllckRlbGVnYXRlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xvY2FsaXpl
ZE51bWJlcklDVVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Nb2NrQ0NRdWFkQ3VsbGVy
LmgnLAogICAgICAgICAgICAgJ3Rlc3RzL1BhaW50QWdncmVnYXRvclRlc3QuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGlua0hpZ2hsaWdodExheWVyRGVs
ZWdhdGVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGlua0hpZ2hsaWdo
dExheWVyRGVsZWdhdGVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDU0NjRmOWEwOTQ0ZGU3ODU0OGFj
ZDMwMzk2NTBlYTMzNTU2ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9MaW5rSGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZVRlc3QuY3BwCkBAIC0wLDAgKzEs
ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxp
bmtIaWdobGlnaHRMYXllckRlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJBbmltYXRpb25JZFZlbmRv
ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGF0aC5o
IgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQgOiBw
dWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NM
YXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29u
c3QgSW50UmVjdCYgaW5DbGlwKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVy
cyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorfTsKKworVEVTVChMaW5rSGlnaGxpZ2h0TGF5ZXJUZXN0LCB2ZXJp
ZnlMaW5rSGlnaGxpZ2h0TGF5ZXIpCit7CisgICAgUGF0aCBoaWdobGlnaHRQYXRoOworICAgIGhp
Z2hsaWdodFBhdGguYWRkUmVjdChGbG9hdFJlY3QoNSwgNiwgMTIsIDgpKTsKKyAgICBJbnRSZWN0
IHBhdGhCb3VuZGluZ1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGhpZ2hsaWdodFBhdGguYm91bmRp
bmdSZWN0KCkpOworCisgICAgUmVmUHRyPExpbmtIaWdobGlnaHRMYXllckRlbGVnYXRlPiBoaWdo
bGlnaHRMYXllckRlbGVnYXRlID0gTGlua0hpZ2hsaWdodExheWVyRGVsZWdhdGU6OmNyZWF0ZSgw
LCBoaWdobGlnaHRQYXRoLCBBbmltYXRpb25JZFZlbmRvcjo6TGlua0hpZ2hsaWdodEFuaW1hdGlv
bklkLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEdyb3VwSWQoKSk7CisgICAgQVNTRVJUX1RS
VUUoaGlnaGxpZ2h0TGF5ZXJEZWxlZ2F0ZS5nZXQoKSk7CisgICAgQ29udGVudExheWVyQ2hyb21p
dW0qIGNvbnRlbnRMYXllciA9IGhpZ2hsaWdodExheWVyRGVsZWdhdGUtPmdldENvbnRlbnRMYXll
cigpOworICAgIEFTU0VSVF9UUlVFKGNvbnRlbnRMYXllcik7CisKKyAgICBFWFBFQ1RfRVEocGF0
aEJvdW5kaW5nUmVjdC5zaXplKCksIGNvbnRlbnRMYXllci0+Ym91bmRzKCkpOworICAgIEVYUEVD
VF9UUlVFKGNvbnRlbnRMYXllci0+dHJhbnNmb3JtKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24o
KSk7CisgICAgRVhQRUNUX1RSVUUoY29udGVudExheWVyLT50cmFuc2Zvcm0oKS5pc0ludGVnZXJU
cmFuc2xhdGlvbigpKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlw
ZSBkZWNvbXBvc2l0aW9uOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRMYXllci0+dHJhbnNmb3Jt
KCkuZGVjb21wb3NlKGRlY29tcG9zaXRpb24pKTsKKworICAgIEZsb2F0UG9pbnQgZXhwZWN0ZWRU
cmFuc2xhdGlvbihwYXRoQm91bmRpbmdSZWN0LngoKSArIHBhdGhCb3VuZGluZ1JlY3Qud2lkdGgo
KSAvIDIsIHBhdGhCb3VuZGluZ1JlY3QueSgpICsgcGF0aEJvdW5kaW5nUmVjdC5oZWlnaHQoKSAv
IDIpOworICAgIEVYUEVDVF9FUShGbG9hdFBvaW50KGRlY29tcG9zaXRpb24udHJhbnNsYXRlWCwg
ZGVjb21wb3NpdGlvbi50cmFuc2xhdGVZKSwgZXhwZWN0ZWRUcmFuc2xhdGlvbik7Cit9CisKK1RF
U1QoTGlua0hpZ2hsaWdodExheWVyVGVzdCwgdmVyaWZ5R3JhcGhpY3NMYXllckNocm9taXVtRW1i
ZWRkaW5nKQoreworICAgIE1vY2tHcmFwaGljc0xheWVyQ2xpZW50IGNsaWVudDsKKyAgICBPd25Q
dHI8R3JhcGhpY3NMYXllckNocm9taXVtPiBncmFwaGljc0xheWVyID0gc3RhdGljX3BvaW50ZXJf
Y2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgmY2xpZW50
KSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NMYXllci5nZXQoKSk7CisKKyAgICBQYXRoIGhp
Z2hsaWdodFBhdGg7CisgICAgaGlnaGxpZ2h0UGF0aC5hZGRSZWN0KEZsb2F0UmVjdCg1LCA1LCAx
MCwgOCkpOworCisgICAgLy8gTmVpdGhlciBvZiB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgc2hv
dWxkIGNyYXNoLgorICAgIGdyYXBoaWNzTGF5ZXItPmFkZExpbmtIaWdobGlnaHRMYXllcihoaWdo
bGlnaHRQYXRoKTsKKyAgICBncmFwaGljc0xheWVyLT5kaWRGaW5pc2hMaW5rSGlnaGxpZ2h0TGF5
ZXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140716</attachid>
            <date>2012-05-08 07:26:59 -0700</date>
            <delta_ts>2012-05-08 11:26:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85084-20120508102658.patch</filename>
            <type>text/plain</type>
            <size>26721</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDA0ZjI0YTI3N2U5OTUx
Zjc0YmU4ZWEwOTBiYzE0ZDQ1MTQ0Yjk4Yy4uZTJjMjMxZTQ1MTI0YTg0MTFhZGRlZWQxNGIwZmJi
YTkwNjIxYzUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA1LTA4ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bSBjbGFzcyB0byBwcm92aWRlIGxp
bmstaGlnaGxpZ2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3IgR3JhcGhpY3NMYXllckNocm9taXVt
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwODQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0IHRl
c3QgcHJvdmlkZWQuCisKKyAgICAgICAgQ3JlYXRlcyBhIGxheWVyIGRlbGVnYXRlIGNsYXNzIHRv
IHByb3ZpZGUgbGluayBoaWdobGlnaHQgYW5pbWF0aW9ucyBmb3IgbGluay1wcmV2aWV3IGZlYXR1
cmUuCisgICAgICAgIFRoZXNlIGFyZSBhZGRlZCB0byBhIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSB2
aWEgcHJvdmlkZWQgbWV0aG9kcy4gTW92ZXMgZGlzcGVuc2luZyBvZiBhbmltYXRpb24KKyAgICAg
ICAgaWRzIGludG8gYSBzZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25JZFZlbmRvcjo6Z2V0TmV4dEFuaW1hdGlvbklkKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEFuaW1hdGlvbklkVmVuZG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZExpbmtIaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmRpZEZp
bmlzaExpbmtIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVDaGlsZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjptYXBBbmltYXRpb25OYW1lVG9JZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGlua0hpZ2hsaWdodDo6TGlua0hpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5rSGlnaGxpZ2h0Ojp+TGlua0hpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5r
SGlnaGxpZ2h0Ojpjb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hsaWdo
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0Ojpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHQ6Om5v
dGlmeUFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MaW5rSGlnaGxpZ2h0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMaW5rSGlnaGxpZ2h0KToKKwogMjAxMi0wNS0wMyAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZs
b3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEV4dHJhIGxpbmUtYnJlYWtzIGFkZGVkIHdoZW4g
Y29weWluZyBmcm9tIHNvdXJjZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMWNmNjNk
ODI4NzRlYzlmYjMzOWRiZTA4MjVhZjRmZTM4NDI2ZGVmOC4uZmFmZmYwMzg0YTQ3MGE2M2EzYWRk
ODUyM2U5ZGI0NzkzMmU4YzE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMSBAQAorMjAxMi0wNS0wOCAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgTGlua0hpZ2hsaWdodExheWVyQ2hy
b21pdW0gY2xhc3MgdG8gcHJvdmlkZSBsaW5rLWhpZ2hsaWdodCBwcmV2aWV3IGFuaW1hdGlvbnMg
Zm9yIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg1MDg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9MaW5rSGln
aGxpZ2h0VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNb2Nr
R3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NMYXll
ckNsaWVudDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
R3JhcGhpY3NMYXllckNsaWVudDo6bm90aWZ5U3luY1JlcXVpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpzaG93RGVidWdCb3JkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpzaG93UmVwYWludENvdW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDUtMDcgIEtpbnVrbyBZYXN1ZGEg
IDxraW51a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4OiBk
aWRPcGVuRmlsZVN5c3RlbSBoaWRlcyBvdmVybG9hZGVkIHZpcnR1YWwgZnVuY3Rpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA0NTE3NWJjZWFiMmNmMDBiZDBiMmZlM2M3OWJlYWY4Yzc1NGUxNGUyLi43
NjMwYWJmMWM5ZTUxNTMwZDA3OWUxMmFiODU0Njk0NTc3MGU0YmM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0zNTI5LDYgKzM1MjksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BhdGhDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9u
TWF0cml4Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9B
bmltYXRpb25JZFZlbmRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0FuaW1hdGlvbklkVmVuZG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKQEAgLTM1NzgsNiAr
MzU4MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlU3ViSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hy
b21pdW0uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDFhZWNl
YTAzMDYwZThhODAxMWJhMzlmNzIzN2M0ZDE4ZDg3NmYwZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvbklkVmVuZG9y
LmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBh
cmUgbWV0OgorKgorKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKiAgCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5k
b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbnQgQW5pbWF0aW9uSWRWZW5kb3I6OnNf
bmV4dEFuaW1hdGlvbklkID0gRmlyc3RBdmFpbGFibGVBbmltYXRpb25JZDsKK2ludCBBbmltYXRp
b25JZFZlbmRvcjo6c19uZXh0R3JvdXBJZCA9IEZpcnN0QXZhaWxhYmxlR3JvdXBJZDsKKworaW50
IEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0QW5pbWF0aW9uSWQoKQoreworICAgIGludCBpZCA9
IHNfbmV4dEFuaW1hdGlvbklkKys7CisgICAgaWYgKHNfbmV4dEFuaW1hdGlvbklkID09IERvbnRV
c2VBbmltYXRpb25JZCkKKyAgICAgICAgc19uZXh0QW5pbWF0aW9uSWQgPSBGaXJzdEF2YWlsYWJs
ZUFuaW1hdGlvbklkOworCisgICAgcmV0dXJuIGlkOworfQorCitpbnQgQW5pbWF0aW9uSWRWZW5k
b3I6OmdldE5leHRHcm91cElkKCkKK3sKKyAgICBpbnQgaWQgPSBzX25leHRHcm91cElkKys7Cisg
ICAgaWYgKHNfbmV4dEdyb3VwSWQgPT0gRG9udFVzZUdyb3VwSWQpCisgICAgICAgIHNfbmV4dEdy
b3VwSWQgPSBGaXJzdEF2YWlsYWJsZUdyb3VwSWQ7CisKKyAgICByZXR1cm4gaWQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvbklkVmVuZG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY5YTQzNTMyZWRkZTZiYzgyNzY5NTY1ZTBhNGViZjlhNGIyMDQ3NGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25J
ZFZlbmRvci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgIDIgICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIDMgICoKKyogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworKiBhcmUgbWV0OgorKgorKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKiAgCisqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBBbmltYXRpb25JZFZlbmRvcl9oCisjZGVm
aW5lIEFuaW1hdGlvbklkVmVuZG9yX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
bmltYXRpb25JZFZlbmRvciB7CitwdWJsaWM6CisgICAgZW51bSBBbmltYXRpb25JZFNlcXVlbmNl
IHsgRG9udFVzZUFuaW1hdGlvbklkID0gMCwgTGlua0hpZ2hsaWdodEFuaW1hdGlvbklkLCBGaXJz
dEF2YWlsYWJsZUFuaW1hdGlvbklkIH07CisgICAgZW51bSBHcm91cElkU2VxdWVuY2UgeyBEb250
VXNlR3JvdXBJZCA9IDAsIEZpcnN0QXZhaWxhYmxlR3JvdXBJZCB9OworCisgICAgc3RhdGljIGlu
dCBnZXROZXh0QW5pbWF0aW9uSWQoKTsKKyAgICBzdGF0aWMgaW50IGdldE5leHRHcm91cElkKCk7
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBzX25leHRBbmltYXRpb25JZDsKKyAgICBzdGF0
aWMgaW50IHNfbmV4dEdyb3VwSWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2M2ZDkyNGJi
MjQwNzUxNzBjYzkwMTg1Y2FmYjcyYTU3MWI5Y2JiZS4uOWVmMzFiMjViYzNmYzE2MGJiZGMwOTY5
MmI3Mjk1ZDNkOTY5MDRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3Bw
CkBAIC00NSw2ICs0NSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIK
IAorI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKQEAgLTUyLDYgKzUzLDcgQEAKICNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJMaW5rSGlnaGxpZ2h0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKQEAgLTYxLDExICs2Myw2IEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKLW5hbWVzcGFjZSB7Ci1zdGF0aWMgaW50IHNfbmV4dEdyb3Vw
SWQgPSAxOwotc3RhdGljIGludCBzX25leHRBbmltYXRpb25JZCA9IDE7Ci19Ci0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpj
cmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQpAQCAtMTExLDYgKzEwOCw5IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp3aWxsQmVEZXN0cm95ZWQoKQogICAgICAgICBtX3Ry
YW5zZm9ybUxheWVyLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKDApOwogICAgIH0KIAorICAg
IGlmIChtX2xpbmtIaWdobGlnaHQpCisgICAgICAgIG1fbGlua0hpZ2hsaWdodC5jbGVhcigpOwor
CiAgICAgR3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKQEAgLTEzMCw2ICsx
MzAsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTmFtZXMoKQogICAgICAg
ICBtX3RyYW5zZm9ybUxheWVyLT5zZXREZWJ1Z05hbWUoIlRyYW5zZm9ybUxheWVyIGZvciAiICsg
bV9uYW1lQmFzZSk7CiAgICAgaWYgKG1fY29udGVudHNMYXllcikKICAgICAgICAgbV9jb250ZW50
c0xheWVyLT5zZXREZWJ1Z05hbWUoIkNvbnRlbnRzTGF5ZXIgZm9yICIgKyBtX25hbWVCYXNlKTsK
KyAgICBpZiAobV9saW5rSGlnaGxpZ2h0KQorICAgICAgICBtX2xpbmtIaWdobGlnaHQtPmNvbnRl
bnRMYXllcigpLT5zZXREZWJ1Z05hbWUoIkxpbmtIaWdobGlnaHQgZm9yICIgKyBtX25hbWVCYXNl
KTsKIH0KIAogYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQpAQCAtNDA3LDcgKzQwOSw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIpCiBib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9u
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUs
IGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUs
IGRvdWJsZSB0aW1lT2Zmc2V0KQogewogICAgIHByaW1hcnlMYXllcigpLT5zZXRMYXllckFuaW1h
dGlvbkRlbGVnYXRlKHRoaXMpOwotICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKS0+YWRkQW5pbWF0
aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBtYXBBbmltYXRpb25OYW1lVG9JZChhbmlt
YXRpb25OYW1lKSwgc19uZXh0R3JvdXBJZCsrLCB0aW1lT2Zmc2V0KTsKKyAgICByZXR1cm4gcHJp
bWFyeUxheWVyKCktPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFw
QW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXRO
ZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWVPZmZzZXQpCkBAIC00MzMsNiArNDM1LDIwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
OjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBwcmltYXJ5TGF5ZXIoKS0+cmVzdW1lQW5pbWF0aW9u
cyhtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjphZGRMaW5rSGlnaGxpZ2h0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgbV9s
aW5rSGlnaGxpZ2h0ID0gTGlua0hpZ2hsaWdodDo6Y3JlYXRlKHRoaXMsIHBhdGgsIEFuaW1hdGlv
bklkVmVuZG9yOjpMaW5rSGlnaGxpZ2h0QW5pbWF0aW9uSWQsIEFuaW1hdGlvbklkVmVuZG9yOjpn
ZXROZXh0R3JvdXBJZCgpKTsKKyAgICB1cGRhdGVDaGlsZExpc3QoKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OmRpZEZpbmlzaExpbmtIaWdobGlnaHQoKQoreworICAgIGlmICht
X2xpbmtIaWdobGlnaHQpCisgICAgICAgIG1fbGlua0hpZ2hsaWdodC0+Y29udGVudExheWVyKCkt
PnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIG1fbGlua0hpZ2hsaWdodC5jbGVhcigpOworfQor
CiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3Jt
TGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC01
MTMsNiArNTI5LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlz
dCgpCiAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZExheWVyKTsKICAgICB9CiAKKyAg
ICBpZiAobV9saW5rSGlnaGxpZ2h0KQorICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9saW5r
SGlnaGxpZ2h0LT5jb250ZW50TGF5ZXIoKSk7CisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5ld0NoaWxkcmVuLnNpemUoKTsgKytpKQogICAgICAgICBuZXdDaGlsZHJlbltpXS0+cmVtb3Zl
RnJvbVBhcmVudCgpOwogCkBAIC03NDksNyArNzY4LDcgQEAgaW50IEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9hbmltYXRpb25JZE1hcC5jb250YWlucyhh
bmltYXRpb25OYW1lKSkKLSAgICAgICAgbV9hbmltYXRpb25JZE1hcC5hZGQoYW5pbWF0aW9uTmFt
ZSwgc19uZXh0QW5pbWF0aW9uSWQrKyk7CisgICAgICAgIG1fYW5pbWF0aW9uSWRNYXAuYWRkKGFu
aW1hdGlvbk5hbWUsIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0QW5pbWF0aW9uSWQoKSk7CiAK
ICAgICByZXR1cm4gbV9hbmltYXRpb25JZE1hcC5maW5kKGFuaW1hdGlvbk5hbWUpLT5zZWNvbmQ7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJlMmIzYWU2NTdiNTQy
ZmFiNGNiNTdmYjMyMGNjYjc1YWE0YTk3ODAuLjhjZTFmYzQ4ZTcxZGU2ZDkyMzRjNmY4MjgxZmM4
ZGNkMzA2ZTc4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC00NCw2
ICs0NCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hyb21pdW07Citj
bGFzcyBMaW5rSGlnaGxpZ2h0OwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ2hyb21pdW0gOiBwdWJs
aWMgR3JhcGhpY3NMYXllciwgcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlLCBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkRlbGVnYXRlIHsKIHB1YmxpYzoKQEAgLTEwNSw2ICsxMDYsOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB3YWxsQ2xvY2tU
aW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwogCisgICAgdmlydHVh
bCB2b2lkIGFkZExpbmtIaWdobGlnaHQoY29uc3QgUGF0aCYpOworICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMaW5rSGlnaGxpZ2h0KCk7CisKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JhY2tncm91
bmRDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtMTU3LDYgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2xheWVyOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBtX3RyYW5zZm9ybUxheWVyOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2Nv
bnRlbnRzTGF5ZXI7CisgICAgUmVmUHRyPExpbmtIaWdobGlnaHQ+IG1fbGlua0hpZ2hsaWdodDsK
IAogICAgIGVudW0gQ29udGVudHNMYXllclB1cnBvc2UgewogICAgICAgICBOb0NvbnRlbnRzTGF5
ZXIgPSAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGlua0hpZ2hsaWdodC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzUzNmIzMmNlMGFkNzA3
MjYxMzI1NDMyYTBhMTUxNWExNmUwNDg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAKQEAgLTAsMCAr
MSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMaW5rSGln
aGxpZ2h0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGlua0hpZ2hs
aWdodD4gTGlua0hpZ2hsaWdodDo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogcGFyZW50
LCBjb25zdCBQYXRoJiBwYXRoLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTGlua0hpZ2hsaWdodChwYXJlbnQsIHBhdGgsIGFuaW1hdGlv
bklkLCBncm91cElkKSk7Cit9CisKK0xpbmtIaWdobGlnaHQ6OkxpbmtIaWdobGlnaHQoR3JhcGhp
Y3NMYXllckNocm9taXVtKiBwYXJlbnQsIGNvbnN0IFBhdGgmIHBhdGgsIGludCBhbmltYXRpb25J
ZCwgaW50IGdyb3VwSWQpCisgICAgOiBtX2NvbnRlbnRMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9wYXRoKHBh
dGgpCit7CisgICAgbV9jb250ZW50TGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisKKyAgICBJ
bnRSZWN0IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHBhdGguYm91bmRpbmdSZWN0KCkpOworCisg
ICAgbV9jb250ZW50TGF5ZXItPnNldEJvdW5kcyhyZWN0LnNpemUoKSk7CisKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShyZWN0Lngo
KSArIHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDIpOworICAg
IG1fY29udGVudExheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKworICAgIG1fcGF0aC50
cmFuc2xhdGUoRmxvYXRTaXplKC1yZWN0LngoKSwgLXJlY3QueSgpKSk7CisKKyAgICBtX2NvbnRl
bnRMYXllci0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKKworICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhlc2UgYmUgY29uZmlndXJhYmxlPworICAgIGNvbnN0IGZsb2F0IHN0YXJ0T3Bh
Y2l0eSA9IDAuMjU7CisgICAgY29uc3QgZmxvYXQgZHVyYXRpb24gPSAyOworCisgICAgbV9jb250
ZW50TGF5ZXItPnNldE9wYWNpdHkoc3RhcnRPcGFjaXR5KTsKKworICAgIE93blB0cjxDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6
OmNyZWF0ZSgwLCBzdGFydE9wYWNpdHksIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJh
bWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoZHVyYXRpb24gLyAyLCBzdGFydE9wYWNpdHksIG51
bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUo
ZHVyYXRpb24sIDAsIG51bGxwdHIpKTsKKworICAgIC8vIGFuaW1hdGlvbklkID0gMSBpcyByZXNl
cnZlZCBmb3IgdXMuCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24oQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklkLCBncm91
cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGFuaW1hdGlvbi0+c2V0TmVl
ZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7CisgICAgbV9jb250ZW50TGF5ZXItPmxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGQoYW5pbWF0aW9uLnJlbGVhc2UoKSk7Cit9CisKK0xp
bmtIaWdobGlnaHQ6On5MaW5rSGlnaGxpZ2h0KCkKK3sKKyAgICBtX2NvbnRlbnRMYXllci0+cmVt
b3ZlRnJvbVBhcmVudCgpOworICAgIG1fY29udGVudExheWVyLT5jbGVhckRlbGVnYXRlKCk7Cisg
ICAgbV9jb250ZW50TGF5ZXItPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUoMCk7Cit9CisKK0Nv
bnRlbnRMYXllckNocm9taXVtKiBMaW5rSGlnaGxpZ2h0Ojpjb250ZW50TGF5ZXIoKQoreworICAg
IHJldHVybiBtX2NvbnRlbnRMYXllci5nZXQoKTsKK30KKwordm9pZCBMaW5rSGlnaGxpZ2h0Ojpw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmKQoreworICAg
IC8vIEZJWE1FOiBtYWtlIGNvbG91ciBjb25maWd1cmFibGU/CisgICAgZ2Muc2V0U3Ryb2tlQ29s
b3IoQ29sb3IoMCwgMCwgMjU1LCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBnYy5z
ZXRTdHJva2VUaGlja25lc3MoMik7CisgICAgZ2Muc3Ryb2tlUGF0aChtX3BhdGgpOworICAgIGdj
LnNldEZpbGxDb2xvcihDb2xvcigyNTUsIDAsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CisgICAgZ2MuZmlsbFBhdGgobV9wYXRoKTsKK30KKwordm9pZCBMaW5rSGlnaGxpZ2h0Ojpu
b3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSkKK3sKK30KKwordm9pZCBMaW5rSGlnaGxpZ2h0
Ojpub3RpZnlBbmltYXRpb25GaW5pc2hlZChkb3VibGUpCit7CisgICAgLy8gQWxsb3cgbnVsbCBw
YXJlbnQgcG9pbnRlciB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCisgICAgaWYgKG1fcGFyZW50KQor
ICAgICAgICBtX3BhcmVudC0+ZGlkRmluaXNoTGlua0hpZ2hsaWdodCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
aW5rSGlnaGxpZ2h0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MaW5rSGlnaGxpZ2h0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDEzMjQwZDdkNWE4MTQ4MDQwYTAxMGFlZDIy
ZmE2OWY1NjEyZmJkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuaApAQCAtMCwwICsxLDY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBMaW5rSGlnaGxpZ2h0X2gKKyNkZWZpbmUgTGlua0hpZ2hsaWdodF9oCisKKyNp
bmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR3JhcGhpY3NMYXllckNocm9taXVtOworCitjbGFzcyBMaW5rSGlnaGxp
Z2h0IDogcHVibGljIFJlZkNvdW50ZWQ8TGlua0hpZ2hsaWdodD4sIHB1YmxpYyBDb250ZW50TGF5
ZXJEZWxlZ2F0ZSwgcHVibGljIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGlua0hpZ2hsaWdodD4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogcGFyZW50LCBjb25zdCBQYXRoJiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJ
ZCk7CisgICAgdmlydHVhbCAgfkxpbmtIaWdobGlnaHQoKTsKKworICAgIENvbnRlbnRMYXllckNo
cm9taXVtKiBjb250ZW50TGF5ZXIoKTsKKworICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGlt
cGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBPVkVSUklERTsKKworICAgIC8vIENDTGF5
ZXJBbmltYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGRvdWJsZSB0aW1lKSBPVkVSUklERTsKKworcHJp
dmF0ZToKKyAgICBMaW5rSGlnaGxpZ2h0KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogcGFyZW50LCBj
b25zdCBQYXRoJiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCk7CisKKyAgICBSZWZQdHI8
Q29udGVudExheWVyQ2hyb21pdW0+IG1fY29udGVudExheWVyOworICAgIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogbV9wYXJlbnQ7CisgICAgUGF0aCBtX3BhdGg7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggY2YwYTQ2MDBiZGQ3OTgyYjk3
Yjk1ZjY0NDNlMmVjNDM0YmU2MjFkOC4uZjk4NzNlZmZjMWFjNWUyZjI4YWRjMjlhNDJkMzlmMDhi
MWM4YjQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xMTMsNiArMTEzLDcg
QEAKICAgICAgICAgICAgICd0ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0xpbmtIaWdo
bGlnaHRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tDQ1F1YWRDdWxsZXIuaCcsCiAgICAgICAg
ICAgICAndGVzdHMvUGFpbnRBZ2dyZWdhdG9yVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MaW5rSGlnaGxpZ2h0VGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0xpbmtIaWdobGlnaHRUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Yzdl
NGZjOTY3MmE5OGY5OGZlOGNjZTFlNjViZGVkZjRhNjhhNDQ2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MaW5rSGlnaGxpZ2h0VGVzdC5jcHAKQEAgLTAs
MCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiTGlua0hpZ2hsaWdodC5oIgorCisjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
Q2xpZW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tHcmFwaGljc0xheWVyQ2xpZW50IDogcHVibGljIEdy
YXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJl
Y3QmIGluQ2xpcCkgeyB9CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3Qg
R3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IHNob3dSZXBhaW50Q291bnRlcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KK307CisKK1RFU1QoTGlua0hpZ2hsaWdodFRlc3QsIHZlcmlmeUxpbmtIaWdobGln
aHRMYXllcikKK3sKKyAgICBQYXRoIGhpZ2hsaWdodFBhdGg7CisgICAgaGlnaGxpZ2h0UGF0aC5h
ZGRSZWN0KEZsb2F0UmVjdCg1LCA2LCAxMiwgOCkpOworICAgIEludFJlY3QgcGF0aEJvdW5kaW5n
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoaGlnaGxpZ2h0UGF0aC5ib3VuZGluZ1JlY3QoKSk7CisK
KyAgICBSZWZQdHI8TGlua0hpZ2hsaWdodD4gaGlnaGxpZ2h0ID0gTGlua0hpZ2hsaWdodDo6Y3Jl
YXRlKDAsIGhpZ2hsaWdodFBhdGgsIEFuaW1hdGlvbklkVmVuZG9yOjpMaW5rSGlnaGxpZ2h0QW5p
bWF0aW9uSWQsIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpKTsKKyAgICBBU1NF
UlRfVFJVRShoaWdobGlnaHQuZ2V0KCkpOworICAgIENvbnRlbnRMYXllckNocm9taXVtKiBjb250
ZW50TGF5ZXIgPSBoaWdobGlnaHQtPmNvbnRlbnRMYXllcigpOworICAgIEFTU0VSVF9UUlVFKGNv
bnRlbnRMYXllcik7CisKKyAgICBFWFBFQ1RfRVEocGF0aEJvdW5kaW5nUmVjdC5zaXplKCksIGNv
bnRlbnRMYXllci0+Ym91bmRzKCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRMYXllci0+dHJh
bnNmb3JtKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAgRVhQRUNUX1RSVUUoY29u
dGVudExheWVyLT50cmFuc2Zvcm0oKS5pc0ludGVnZXJUcmFuc2xhdGlvbigpKTsKKworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2l0aW9uOworICAgIEVY
UEVDVF9UUlVFKGNvbnRlbnRMYXllci0+dHJhbnNmb3JtKCkuZGVjb21wb3NlKGRlY29tcG9zaXRp
b24pKTsKKworICAgIEZsb2F0UG9pbnQgZXhwZWN0ZWRUcmFuc2xhdGlvbihwYXRoQm91bmRpbmdS
ZWN0LngoKSArIHBhdGhCb3VuZGluZ1JlY3Qud2lkdGgoKSAvIDIsIHBhdGhCb3VuZGluZ1JlY3Qu
eSgpICsgcGF0aEJvdW5kaW5nUmVjdC5oZWlnaHQoKSAvIDIpOworICAgIEVYUEVDVF9FUShGbG9h
dFBvaW50KGRlY29tcG9zaXRpb24udHJhbnNsYXRlWCwgZGVjb21wb3NpdGlvbi50cmFuc2xhdGVZ
KSwgZXhwZWN0ZWRUcmFuc2xhdGlvbik7Cit9CisKK1RFU1QoTGlua0hpZ2hsaWdodFRlc3QsIHZl
cmlmeUdyYXBoaWNzTGF5ZXJDaHJvbWl1bUVtYmVkZGluZykKK3sKKyAgICBNb2NrR3JhcGhpY3NM
YXllckNsaWVudCBjbGllbnQ7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4gZ3Jh
cGhpY3NMYXllciA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtPihH
cmFwaGljc0xheWVyOjpjcmVhdGUoJmNsaWVudCkpOworICAgIEFTU0VSVF9UUlVFKGdyYXBoaWNz
TGF5ZXIuZ2V0KCkpOworCisgICAgUGF0aCBoaWdobGlnaHRQYXRoOworICAgIGhpZ2hsaWdodFBh
dGguYWRkUmVjdChGbG9hdFJlY3QoNSwgNSwgMTAsIDgpKTsKKworICAgIC8vIE5laXRoZXIgb2Yg
dGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIHNob3VsZCBjcmFzaC4KKyAgICBncmFwaGljc0xheWVy
LT5hZGRMaW5rSGlnaGxpZ2h0KGhpZ2hsaWdodFBhdGgpOworICAgIGdyYXBoaWNzTGF5ZXItPmRp
ZEZpbmlzaExpbmtIaWdobGlnaHQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140748</attachid>
            <date>2012-05-08 11:26:26 -0700</date>
            <delta_ts>2012-05-11 02:21:10 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-85084-20120508142624.patch</filename>
            <type>text/plain</type>
            <size>26763</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDA0ZjI0YTI3N2U5OTUx
Zjc0YmU4ZWEwOTBiYzE0ZDQ1MTQ0Yjk4Yy4uNWM0MDI1MjE4NTkzNTk5N2U3ZWY4ZTNmMDFhNDU1
NjkwYTEzOTE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA1LTA4ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBMaW5rSGlnaGxpZ2h0TGF5ZXJDaHJvbWl1bSBjbGFzcyB0byBwcm92aWRlIGxp
bmstaGlnaGxpZ2h0IHByZXZpZXcgYW5pbWF0aW9ucyBmb3IgR3JhcGhpY3NMYXllckNocm9taXVt
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwODQK
KworICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAgICBVbml0IHRl
c3QgcHJvdmlkZWQuCisKKyAgICAgICAgQ3JlYXRlcyBhIGxheWVyIGRlbGVnYXRlIGNsYXNzIHRv
IHByb3ZpZGUgbGluayBoaWdobGlnaHQgYW5pbWF0aW9ucyBmb3IgbGluay1wcmV2aWV3IGZlYXR1
cmUuCisgICAgICAgIFRoZXNlIGFyZSBhZGRlZCB0byBhIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSB2
aWEgcHJvdmlkZWQgbWV0aG9kcy4gTW92ZXMgZGlzcGVuc2luZyBvZiBhbmltYXRpb24KKyAgICAg
ICAgaWRzIGludG8gYSBzZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25JZFZlbmRvcjo6Z2V0TmV4dEFuaW1hdGlvbklkKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEFuaW1hdGlvbklkVmVuZG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZExpbmtIaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmRpZEZp
bmlzaExpbmtIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVDaGlsZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjptYXBBbmltYXRpb25OYW1lVG9JZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGlua0hpZ2hsaWdodDo6TGlua0hpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5rSGlnaGxpZ2h0Ojp+TGlua0hpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5r
SGlnaGxpZ2h0Ojpjb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0hpZ2hsaWdo
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSGlnaGxpZ2h0Ojpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdobGlnaHQ6Om5v
dGlmeUFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MaW5rSGlnaGxpZ2h0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMaW5rSGlnaGxpZ2h0KToKKwogMjAxMi0wNS0wMyAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZs
b3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEV4dHJhIGxpbmUtYnJlYWtzIGFkZGVkIHdoZW4g
Y29weWluZyBmcm9tIHNvdXJjZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMWNmNjNk
ODI4NzRlYzlmYjMzOWRiZTA4MjVhZjRmZTM4NDI2ZGVmOC4uY2Y0MWJkNmEwNTkxZmI1NTkyZjNi
NmQ3NWU2YmUxNzBlNDU2YmMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMSBAQAorMjAxMi0wNS0wOCAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgTGlua0hpZ2hsaWdodExheWVyQ2hy
b21pdW0gY2xhc3MgdG8gcHJvdmlkZSBsaW5rLWhpZ2hsaWdodCBwcmV2aWV3IGFuaW1hdGlvbnMg
Zm9yIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg1MDg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9i
aW5zb24uCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9MaW5rSGln
aGxpZ2h0VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNb2Nr
R3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NMYXll
ckNsaWVudDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
R3JhcGhpY3NMYXllckNsaWVudDo6bm90aWZ5U3luY1JlcXVpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpzaG93RGVidWdCb3JkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50OjpzaG93UmVwYWludENvdW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDUtMDcgIEtpbnVrbyBZYXN1ZGEg
IDxraW51a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4OiBk
aWRPcGVuRmlsZVN5c3RlbSBoaWRlcyBvdmVybG9hZGVkIHZpcnR1YWwgZnVuY3Rpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA0NTE3NWJjZWFiMmNmMDBiZDBiMmZlM2M3OWJlYWY4Yzc1NGUxNGUyLi43
NjMwYWJmMWM5ZTUxNTMwZDA3OWUxMmFiODU0Njk0NTc3MGU0YmM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0zNTI5LDYgKzM1MjksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BhdGhDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9u
TWF0cml4Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9B
bmltYXRpb25JZFZlbmRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0FuaW1hdGlvbklkVmVuZG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKQEAgLTM1NzgsNiAr
MzU4MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlU3ViSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hy
b21pdW0uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDFhZWNl
YTAzMDYwZThhODAxMWJhMzlmNzIzN2M0ZDE4ZDg3NmYwZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvbklkVmVuZG9y
LmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBh
cmUgbWV0OgorKgorKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKiAgCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5k
b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbnQgQW5pbWF0aW9uSWRWZW5kb3I6OnNf
bmV4dEFuaW1hdGlvbklkID0gRmlyc3RBdmFpbGFibGVBbmltYXRpb25JZDsKK2ludCBBbmltYXRp
b25JZFZlbmRvcjo6c19uZXh0R3JvdXBJZCA9IEZpcnN0QXZhaWxhYmxlR3JvdXBJZDsKKworaW50
IEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0QW5pbWF0aW9uSWQoKQoreworICAgIGludCBpZCA9
IHNfbmV4dEFuaW1hdGlvbklkKys7CisgICAgaWYgKHNfbmV4dEFuaW1hdGlvbklkID09IERvbnRV
c2VBbmltYXRpb25JZCkKKyAgICAgICAgc19uZXh0QW5pbWF0aW9uSWQgPSBGaXJzdEF2YWlsYWJs
ZUFuaW1hdGlvbklkOworCisgICAgcmV0dXJuIGlkOworfQorCitpbnQgQW5pbWF0aW9uSWRWZW5k
b3I6OmdldE5leHRHcm91cElkKCkKK3sKKyAgICBpbnQgaWQgPSBzX25leHRHcm91cElkKys7Cisg
ICAgaWYgKHNfbmV4dEdyb3VwSWQgPT0gRG9udFVzZUdyb3VwSWQpCisgICAgICAgIHNfbmV4dEdy
b3VwSWQgPSBGaXJzdEF2YWlsYWJsZUdyb3VwSWQ7CisKKyAgICByZXR1cm4gaWQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvbklkVmVuZG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY5YTQzNTMyZWRkZTZiYzgyNzY5NTY1ZTBhNGViZjlhNGIyMDQ3NGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25J
ZFZlbmRvci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgIDIgICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIDMgICoKKyogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworKiBhcmUgbWV0OgorKgorKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKiAgCisqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBBbmltYXRpb25JZFZlbmRvcl9oCisjZGVm
aW5lIEFuaW1hdGlvbklkVmVuZG9yX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
bmltYXRpb25JZFZlbmRvciB7CitwdWJsaWM6CisgICAgZW51bSBBbmltYXRpb25JZFNlcXVlbmNl
IHsgRG9udFVzZUFuaW1hdGlvbklkID0gMCwgTGlua0hpZ2hsaWdodEFuaW1hdGlvbklkLCBGaXJz
dEF2YWlsYWJsZUFuaW1hdGlvbklkIH07CisgICAgZW51bSBHcm91cElkU2VxdWVuY2UgeyBEb250
VXNlR3JvdXBJZCA9IDAsIEZpcnN0QXZhaWxhYmxlR3JvdXBJZCB9OworCisgICAgc3RhdGljIGlu
dCBnZXROZXh0QW5pbWF0aW9uSWQoKTsKKyAgICBzdGF0aWMgaW50IGdldE5leHRHcm91cElkKCk7
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBzX25leHRBbmltYXRpb25JZDsKKyAgICBzdGF0
aWMgaW50IHNfbmV4dEdyb3VwSWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2M2ZDkyNGJi
MjQwNzUxNzBjYzkwMTg1Y2FmYjcyYTU3MWI5Y2JiZS4uOWVmMzFiMjViYzNmYzE2MGJiZGMwOTY5
MmI3Mjk1ZDNkOTY5MDRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3Bw
CkBAIC00NSw2ICs0NSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIK
IAorI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKQEAgLTUyLDYgKzUzLDcgQEAKICNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJMaW5rSGlnaGxpZ2h0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKQEAgLTYxLDExICs2Myw2IEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKLW5hbWVzcGFjZSB7Ci1zdGF0aWMgaW50IHNfbmV4dEdyb3Vw
SWQgPSAxOwotc3RhdGljIGludCBzX25leHRBbmltYXRpb25JZCA9IDE7Ci19Ci0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpj
cmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQpAQCAtMTExLDYgKzEwOCw5IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp3aWxsQmVEZXN0cm95ZWQoKQogICAgICAgICBtX3Ry
YW5zZm9ybUxheWVyLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKDApOwogICAgIH0KIAorICAg
IGlmIChtX2xpbmtIaWdobGlnaHQpCisgICAgICAgIG1fbGlua0hpZ2hsaWdodC5jbGVhcigpOwor
CiAgICAgR3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKQEAgLTEzMCw2ICsx
MzAsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTmFtZXMoKQogICAgICAg
ICBtX3RyYW5zZm9ybUxheWVyLT5zZXREZWJ1Z05hbWUoIlRyYW5zZm9ybUxheWVyIGZvciAiICsg
bV9uYW1lQmFzZSk7CiAgICAgaWYgKG1fY29udGVudHNMYXllcikKICAgICAgICAgbV9jb250ZW50
c0xheWVyLT5zZXREZWJ1Z05hbWUoIkNvbnRlbnRzTGF5ZXIgZm9yICIgKyBtX25hbWVCYXNlKTsK
KyAgICBpZiAobV9saW5rSGlnaGxpZ2h0KQorICAgICAgICBtX2xpbmtIaWdobGlnaHQtPmNvbnRl
bnRMYXllcigpLT5zZXREZWJ1Z05hbWUoIkxpbmtIaWdobGlnaHQgZm9yICIgKyBtX25hbWVCYXNl
KTsKIH0KIAogYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQpAQCAtNDA3LDcgKzQwOSw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIpCiBib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9u
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUs
IGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUs
IGRvdWJsZSB0aW1lT2Zmc2V0KQogewogICAgIHByaW1hcnlMYXllcigpLT5zZXRMYXllckFuaW1h
dGlvbkRlbGVnYXRlKHRoaXMpOwotICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKS0+YWRkQW5pbWF0
aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBtYXBBbmltYXRpb25OYW1lVG9JZChhbmlt
YXRpb25OYW1lKSwgc19uZXh0R3JvdXBJZCsrLCB0aW1lT2Zmc2V0KTsKKyAgICByZXR1cm4gcHJp
bWFyeUxheWVyKCktPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFw
QW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXRO
ZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWVPZmZzZXQpCkBAIC00MzMsNiArNDM1LDIwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
OjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBwcmltYXJ5TGF5ZXIoKS0+cmVzdW1lQW5pbWF0aW9u
cyhtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjphZGRMaW5rSGlnaGxpZ2h0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgbV9s
aW5rSGlnaGxpZ2h0ID0gTGlua0hpZ2hsaWdodDo6Y3JlYXRlKHRoaXMsIHBhdGgsIEFuaW1hdGlv
bklkVmVuZG9yOjpMaW5rSGlnaGxpZ2h0QW5pbWF0aW9uSWQsIEFuaW1hdGlvbklkVmVuZG9yOjpn
ZXROZXh0R3JvdXBJZCgpKTsKKyAgICB1cGRhdGVDaGlsZExpc3QoKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OmRpZEZpbmlzaExpbmtIaWdobGlnaHQoKQoreworICAgIGlmICht
X2xpbmtIaWdobGlnaHQpCisgICAgICAgIG1fbGlua0hpZ2hsaWdodC0+Y29udGVudExheWVyKCkt
PnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIG1fbGlua0hpZ2hsaWdodC5jbGVhcigpOworfQor
CiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3Jt
TGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC01
MTMsNiArNTI5LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkTGlz
dCgpCiAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZExheWVyKTsKICAgICB9CiAKKyAg
ICBpZiAobV9saW5rSGlnaGxpZ2h0KQorICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQobV9saW5r
SGlnaGxpZ2h0LT5jb250ZW50TGF5ZXIoKSk7CisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5ld0NoaWxkcmVuLnNpemUoKTsgKytpKQogICAgICAgICBuZXdDaGlsZHJlbltpXS0+cmVtb3Zl
RnJvbVBhcmVudCgpOwogCkBAIC03NDksNyArNzY4LDcgQEAgaW50IEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9hbmltYXRpb25JZE1hcC5jb250YWlucyhh
bmltYXRpb25OYW1lKSkKLSAgICAgICAgbV9hbmltYXRpb25JZE1hcC5hZGQoYW5pbWF0aW9uTmFt
ZSwgc19uZXh0QW5pbWF0aW9uSWQrKyk7CisgICAgICAgIG1fYW5pbWF0aW9uSWRNYXAuYWRkKGFu
aW1hdGlvbk5hbWUsIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0QW5pbWF0aW9uSWQoKSk7CiAK
ICAgICByZXR1cm4gbV9hbmltYXRpb25JZE1hcC5maW5kKGFuaW1hdGlvbk5hbWUpLT5zZWNvbmQ7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJlMmIzYWU2NTdiNTQy
ZmFiNGNiNTdmYjMyMGNjYjc1YWE0YTk3ODAuLjhjZTFmYzQ4ZTcxZGU2ZDkyMzRjNmY4MjgxZmM4
ZGNkMzA2ZTc4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC00NCw2
ICs0NCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hyb21pdW07Citj
bGFzcyBMaW5rSGlnaGxpZ2h0OwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ2hyb21pdW0gOiBwdWJs
aWMgR3JhcGhpY3NMYXllciwgcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlLCBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkRlbGVnYXRlIHsKIHB1YmxpYzoKQEAgLTEwNSw2ICsxMDYsOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB3YWxsQ2xvY2tU
aW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwogCisgICAgdmlydHVh
bCB2b2lkIGFkZExpbmtIaWdobGlnaHQoY29uc3QgUGF0aCYpOworICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMaW5rSGlnaGxpZ2h0KCk7CisKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JhY2tncm91
bmRDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtMTU3LDYgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2xheWVyOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBtX3RyYW5zZm9ybUxheWVyOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2Nv
bnRlbnRzTGF5ZXI7CisgICAgUmVmUHRyPExpbmtIaWdobGlnaHQ+IG1fbGlua0hpZ2hsaWdodDsK
IAogICAgIGVudW0gQ29udGVudHNMYXllclB1cnBvc2UgewogICAgICAgICBOb0NvbnRlbnRzTGF5
ZXIgPSAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGlua0hpZ2hsaWdodC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzUzNmIzMmNlMGFkNzA3
MjYxMzI1NDMyYTBhMTUxNWExNmUwNDg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAKQEAgLTAsMCAr
MSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMaW5rSGln
aGxpZ2h0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGlua0hpZ2hs
aWdodD4gTGlua0hpZ2hsaWdodDo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogcGFyZW50
LCBjb25zdCBQYXRoJiBwYXRoLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTGlua0hpZ2hsaWdodChwYXJlbnQsIHBhdGgsIGFuaW1hdGlv
bklkLCBncm91cElkKSk7Cit9CisKK0xpbmtIaWdobGlnaHQ6OkxpbmtIaWdobGlnaHQoR3JhcGhp
Y3NMYXllckNocm9taXVtKiBwYXJlbnQsIGNvbnN0IFBhdGgmIHBhdGgsIGludCBhbmltYXRpb25J
ZCwgaW50IGdyb3VwSWQpCisgICAgOiBtX2NvbnRlbnRMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9wYXRoKHBh
dGgpCit7CisgICAgbV9jb250ZW50TGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisKKyAgICBJ
bnRSZWN0IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHBhdGguYm91bmRpbmdSZWN0KCkpOworCisg
ICAgbV9jb250ZW50TGF5ZXItPnNldEJvdW5kcyhyZWN0LnNpemUoKSk7CisKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShyZWN0Lngo
KSArIHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDIpOworICAg
IG1fY29udGVudExheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKworICAgIG1fcGF0aC50
cmFuc2xhdGUoRmxvYXRTaXplKC1yZWN0LngoKSwgLXJlY3QueSgpKSk7CisKKyAgICBtX2NvbnRl
bnRMYXllci0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKKworICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhlc2UgYmUgY29uZmlndXJhYmxlPworICAgIGNvbnN0IGZsb2F0IHN0YXJ0T3Bh
Y2l0eSA9IDAuMjU7CisgICAgY29uc3QgZmxvYXQgZHVyYXRpb24gPSAyOworCisgICAgbV9jb250
ZW50TGF5ZXItPnNldE9wYWNpdHkoc3RhcnRPcGFjaXR5KTsKKworICAgIE93blB0cjxDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6
OmNyZWF0ZSgwLCBzdGFydE9wYWNpdHksIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJh
bWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoZHVyYXRpb24gLyAyLCBzdGFydE9wYWNpdHksIG51
bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUo
ZHVyYXRpb24sIDAsIG51bGxwdHIpKTsKKworICAgIC8vIGFuaW1hdGlvbklkID0gMSBpcyByZXNl
cnZlZCBmb3IgdXMuCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24oQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklkLCBncm91
cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGFuaW1hdGlvbi0+c2V0TmVl
ZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7CisgICAgbV9jb250ZW50TGF5ZXItPmxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGQoYW5pbWF0aW9uLnJlbGVhc2UoKSk7Cit9CisKK0xp
bmtIaWdobGlnaHQ6On5MaW5rSGlnaGxpZ2h0KCkKK3sKKyAgICBtX2NvbnRlbnRMYXllci0+cmVt
b3ZlRnJvbVBhcmVudCgpOworICAgIG1fY29udGVudExheWVyLT5jbGVhckRlbGVnYXRlKCk7Cisg
ICAgbV9jb250ZW50TGF5ZXItPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUoMCk7Cit9CisKK0Nv
bnRlbnRMYXllckNocm9taXVtKiBMaW5rSGlnaGxpZ2h0Ojpjb250ZW50TGF5ZXIoKQoreworICAg
IHJldHVybiBtX2NvbnRlbnRMYXllci5nZXQoKTsKK30KKwordm9pZCBMaW5rSGlnaGxpZ2h0Ojpw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmKQoreworICAg
IC8vIEZJWE1FOiBtYWtlIGNvbG91ciBjb25maWd1cmFibGU/CisgICAgZ2Muc2V0U3Ryb2tlQ29s
b3IoQ29sb3IoMCwgMCwgMjU1LCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBnYy5z
ZXRTdHJva2VUaGlja25lc3MoMik7CisgICAgZ2Muc3Ryb2tlUGF0aChtX3BhdGgpOworICAgIGdj
LnNldEZpbGxDb2xvcihDb2xvcigyNTUsIDAsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CisgICAgZ2MuZmlsbFBhdGgobV9wYXRoKTsKK30KKwordm9pZCBMaW5rSGlnaGxpZ2h0Ojpu
b3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSkKK3sKK30KKwordm9pZCBMaW5rSGlnaGxpZ2h0
Ojpub3RpZnlBbmltYXRpb25GaW5pc2hlZChkb3VibGUpCit7CisgICAgLy8gQWxsb3cgbnVsbCBw
YXJlbnQgcG9pbnRlciB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCisgICAgaWYgKG1fcGFyZW50KQor
ICAgICAgICBtX3BhcmVudC0+ZGlkRmluaXNoTGlua0hpZ2hsaWdodCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
aW5rSGlnaGxpZ2h0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MaW5rSGlnaGxpZ2h0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQ3ODg5ZmNlNzIwNTlmOTgxYTg5NzYyMTZk
ZGFlZWVlMzE5ZGI4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuaApAQCAtMCwwICsxLDY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBMaW5rSGlnaGxpZ2h0X2gKKyNkZWZpbmUgTGlua0hpZ2hsaWdodF9oCisKKyNp
bmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR3JhcGhpY3NMYXllckNocm9taXVtOworCitjbGFzcyBMaW5rSGlnaGxp
Z2h0IDogcHVibGljIFJlZkNvdW50ZWQ8TGlua0hpZ2hsaWdodD4sIHB1YmxpYyBDb250ZW50TGF5
ZXJEZWxlZ2F0ZSwgcHVibGljIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGlua0hpZ2hsaWdodD4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogcGFyZW50LCBjb25zdCBQYXRoJiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJ
ZCk7CisgICAgdmlydHVhbCB+TGlua0hpZ2hsaWdodCgpOworCisgICAgQ29udGVudExheWVyQ2hy
b21pdW0qIGNvbnRlbnRMYXllcigpOworCisgICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUgaW1w
bGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIE9WRVJSSURFOworCisgICAgLy8gQ0NMYXll
ckFuaW1hdGlvbkRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZG91YmxlIHRpbWUpIE9WRVJSSURFOworCitwcml2
YXRlOgorICAgIExpbmtIaWdobGlnaHQoR3JhcGhpY3NMYXllckNocm9taXVtKiBwYXJlbnQsIGNv
bnN0IFBhdGgmLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkKTsKKworICAgIFJlZlB0cjxD
b250ZW50TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50TGF5ZXI7CisgICAgR3JhcGhpY3NMYXllckNo
cm9taXVtKiBtX3BhcmVudDsKKyAgICBQYXRoIG1fcGF0aDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBjZjBhNDYwMGJkZDc5ODJiOTdi
OTVmNjQ0M2UyZWM0MzRiZTYyMWQ4Li5mOTg3M2VmZmMxYWM1ZTJmMjhhZGMyOWE0MmQzOWYwOGIx
YzhiNDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTExMyw2ICsxMTMsNyBA
QAogICAgICAgICAgICAgJ3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTGlua0hpZ2hs
aWdodFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTW9ja0NDUXVhZEN1bGxlci5oJywKICAgICAgICAg
ICAgICd0ZXN0cy9QYWludEFnZ3JlZ2F0b3JUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xpbmtIaWdobGlnaHRUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTGlua0hpZ2hsaWdodFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkY2Zk
NGE2Mzc4MTA4NjVlNzVjNDFhYjM5M2U3MTQ3OTM2NDIxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xpbmtIaWdobGlnaHRUZXN0LmNwcApAQCAtMCww
ICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJMaW5rSGlnaGxpZ2h0LmgiCisKKyNpbmNsdWRlICJBbmltYXRpb25JZFZlbmRvci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJD
bGllbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQgOiBwdWJsaWMgR3Jh
cGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBPVkVSUklERSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBH
cmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhh
c2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBib29s
IHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25z
dCBHcmFwaGljc0xheWVyKikgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KK307CisK
K1RFU1QoTGlua0hpZ2hsaWdodFRlc3QsIHZlcmlmeUxpbmtIaWdobGlnaHRMYXllcikKK3sKKyAg
ICBQYXRoIGhpZ2hsaWdodFBhdGg7CisgICAgaGlnaGxpZ2h0UGF0aC5hZGRSZWN0KEZsb2F0UmVj
dCg1LCA2LCAxMiwgOCkpOworICAgIEludFJlY3QgcGF0aEJvdW5kaW5nUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoaGlnaGxpZ2h0UGF0aC5ib3VuZGluZ1JlY3QoKSk7CisKKyAgICBSZWZQdHI8TGlu
a0hpZ2hsaWdodD4gaGlnaGxpZ2h0ID0gTGlua0hpZ2hsaWdodDo6Y3JlYXRlKDAsIGhpZ2hsaWdo
dFBhdGgsIEFuaW1hdGlvbklkVmVuZG9yOjpMaW5rSGlnaGxpZ2h0QW5pbWF0aW9uSWQsIEFuaW1h
dGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpKTsKKyAgICBBU1NFUlRfVFJVRShoaWdobGln
aHQuZ2V0KCkpOworICAgIENvbnRlbnRMYXllckNocm9taXVtKiBjb250ZW50TGF5ZXIgPSBoaWdo
bGlnaHQtPmNvbnRlbnRMYXllcigpOworICAgIEFTU0VSVF9UUlVFKGNvbnRlbnRMYXllcik7CisK
KyAgICBFWFBFQ1RfRVEocGF0aEJvdW5kaW5nUmVjdC5zaXplKCksIGNvbnRlbnRMYXllci0+Ym91
bmRzKCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRMYXllci0+dHJhbnNmb3JtKCkuaXNJZGVu
dGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAgRVhQRUNUX1RSVUUoY29udGVudExheWVyLT50cmFu
c2Zvcm0oKS5pc0ludGVnZXJUcmFuc2xhdGlvbigpKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2l0aW9uOworICAgIEVYUEVDVF9UUlVFKGNvbnRl
bnRMYXllci0+dHJhbnNmb3JtKCkuZGVjb21wb3NlKGRlY29tcG9zaXRpb24pKTsKKworICAgIEZs
b2F0UG9pbnQgZXhwZWN0ZWRUcmFuc2xhdGlvbihwYXRoQm91bmRpbmdSZWN0LngoKSArIHBhdGhC
b3VuZGluZ1JlY3Qud2lkdGgoKSAvIDIsIHBhdGhCb3VuZGluZ1JlY3QueSgpICsgcGF0aEJvdW5k
aW5nUmVjdC5oZWlnaHQoKSAvIDIpOworICAgIEVYUEVDVF9FUShGbG9hdFBvaW50KGRlY29tcG9z
aXRpb24udHJhbnNsYXRlWCwgZGVjb21wb3NpdGlvbi50cmFuc2xhdGVZKSwgZXhwZWN0ZWRUcmFu
c2xhdGlvbik7Cit9CisKK1RFU1QoTGlua0hpZ2hsaWdodFRlc3QsIHZlcmlmeUdyYXBoaWNzTGF5
ZXJDaHJvbWl1bUVtYmVkZGluZykKK3sKKyAgICBNb2NrR3JhcGhpY3NMYXllckNsaWVudCBjbGll
bnQ7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4gZ3JhcGhpY3NMYXllciA9IHN0
YXRpY19wb2ludGVyX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtPihHcmFwaGljc0xheWVyOjpj
cmVhdGUoJmNsaWVudCkpOworICAgIEFTU0VSVF9UUlVFKGdyYXBoaWNzTGF5ZXIuZ2V0KCkpOwor
CisgICAgUGF0aCBoaWdobGlnaHRQYXRoOworICAgIGhpZ2hsaWdodFBhdGguYWRkUmVjdChGbG9h
dFJlY3QoNSwgNSwgMTAsIDgpKTsKKworICAgIC8vIE5laXRoZXIgb2YgdGhlIGZvbGxvd2luZyBv
cGVyYXRpb25zIHNob3VsZCBjcmFzaC4KKyAgICBncmFwaGljc0xheWVyLT5hZGRMaW5rSGlnaGxp
Z2h0KGhpZ2hsaWdodFBhdGgpOworICAgIGdyYXBoaWNzTGF5ZXItPmRpZEZpbmlzaExpbmtIaWdo
bGlnaHQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>