<?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>93606</bug_id>
          
          <creation_ts>2012-08-09 05:20:26 -0700</creation_ts>
          <short_desc>[Qt] UpdateAtlas is wasting memory</short_desc>
          <delta_ts>2012-08-22 15:21:05 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>691405</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-09 05:20:26 -0700</bug_when>
    <thetext>After spending some time reading the code of UpdateAtlas and trying to understand it I have added some printf&apos;s because my suspicion was that it don&apos;t use the whole surface it allocates. The suspicion has been trusted. I am going to upload the debug code and the results and the patches I made and the results with them. Actually I made two and I&apos;m not sure which is the better :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691418</commentid>
    <comment_count>1</comment_count>
      <attachid>157444</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-09 05:25:36 -0700</bug_when>
    <thetext>Created attachment 157444
debug code

With this patch I see that:
Atlas cache fail; requiredDim=512, bufsize=4000000, usedBytes=1572864
a lot of times. So if I&apos;m not wrong we use only ~1.5 MB from the ~4 MB surface we allocate (maybe a bit more for smaller tiles but those are rare so it does not make it much better).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691431</commentid>
    <comment_count>2</comment_count>
      <attachid>157449</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-09 05:33:36 -0700</bug_when>
    <thetext>Created attachment 157449
fix candidate 1

This is a fix for the original logic (at least what I get from it). I believe we can possibly use the whole surface area with this.
This is the output with the patch:
&quot;Atlas cache fail; Atlas cache fail; requiredDim=512, bufsize=4000000, usedBytes=2359296&quot;
a lot of times, but less than before. What makes me worry is that we still use only about the half of the surface.
The use case I do is simple: just loading google.com, zooming as possible and scrolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691442</commentid>
    <comment_count>3</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-08-09 05:42:38 -0700</bug_when>
    <thetext>Allan did some work and had a pretty efficiently working patch using existing Qt code.
I looked at it briefly before, and the problem as it seemed to me is that we ONLY use a layouted sub-area of the atlas for an update size that fits in the chunk.

So while doing full page renderings (e.g. when loading), if my atlas is 2048x2048 and I need to send over 4 tiles of 512x512, then only 2 of them will be successfully allocated. The other half of the buffer is reserved for smaller updates, which won&apos;t happen for this frame and the space is wasted.

I didn&apos;t look at it very deeply so I might be wrong about this, but I at least did observe wasted space too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691455</commentid>
    <comment_count>4</comment_count>
      <attachid>157457</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-09 05:51:03 -0700</bug_when>
    <thetext>Created attachment 157457
fix candidate 2

This one divides the surface to equal size sub-buffers, so we can effectively use the whole surface. Atlases are created with a size class, so there can be an atlas for 512x512 requests, one for 256x256, and so on. I did not add the debug code here because it is evident that if there is a cache fail than the whole atlas is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691457</commentid>
    <comment_count>5</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-09 05:53:42 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Allan did some work and had a pretty efficiently working patch using existing Qt code.
&gt; I looked at it briefly before, and the problem as it seemed to me is that we ONLY use a layouted sub-area of the atlas for an update size that fits in the chunk.
&gt; 
&gt; So while doing full page renderings (e.g. when loading), if my atlas is 2048x2048 and I need to send over 4 tiles of 512x512, then only 2 of them will be successfully allocated. The other half of the buffer is reserved for smaller updates, which won&apos;t happen for this frame and the space is wasted.
&gt; 
&gt; I didn&apos;t look at it very deeply so I might be wrong about this, but I at least did observe wasted space too.

Yes. This is the problem I am trying to solve in candidate 2. (The other problem is that the current code is just buggy, candidate 1 if fixing it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691478</commentid>
    <comment_count>6</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-09 09:07:00 -0700</bug_when>
    <thetext>story continues as bugzilla resurrected...

Let&apos;s see how many atlases are allocated. For this reason I printed in the update atlas ctor with the dimension (which is contant in trunk and candidate 1). Results (all of them with simply zooming in google.com and scrolling):

ref
UpdateAtlas: 2000
UpdateAtlas: 2000
UpdateAtlas: 2000
UpdateAtlas: 2000
UpdateAtlas: 2000
UpdateAtlas: 2000
UpdateAtlas: 2000
UpdateAtlas: 2000
UpdateAtlas: 2000

candidate 1
UpdateAtlas: 2000
UpdateAtlas: 2000
UpdateAtlas: 2000
UpdateAtlas: 2000

candidate 2
UpdateAtlas: 2048
UpdateAtlas: 1024
UpdateAtlas: 128
UpdateAtlas: 512
UpdateAtlas: 2048
UpdateAtlas: 2048
UpdateAtlas: 128
UpdateAtlas: 512
UpdateAtlas: 1024

So, candidate 1 needs less allocation, but according to my calculation it still use 2.5Mb more memory.

Allan, could you upload your work, so we can compare with these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691488</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-09 09:15:45 -0700</bug_when>
    <thetext>I&apos;m good with either direction - the original UpdateAtlas was supposed to make memory allocations more predictable, but it can be fine tuned in many ways and we should pick one :)

I think I like (2) better because the smaller atlases allow us to lock GraphicsSurfaces, e.g. on Mac, without locking everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691509</commentid>
    <comment_count>8</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-09 09:36:58 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; 
&gt; Allan, could you upload your work, so we can compare with these?

I will try to find it, but essentially it was just an experiment, moving the textureatlas from qt3d and hooking it in as replacement for the existing atlas. It worked just fine, but I never got around to reformating the textureatlas to WebKit style, or make qt3d export it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691597</commentid>
    <comment_count>9</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-09 10:57:03 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I&apos;m good with either direction - the original UpdateAtlas was supposed to make memory allocations more predictable, but it can be fine tuned in many ways and we should pick one :)
&gt; 
&gt; I think I like (2) better because the smaller atlases allow us to lock GraphicsSurfaces, e.g. on Mac, without locking everything.

Cool. However, Jocelyn mentioned that we could probably stay in one simple atlas with a dynamic layout, so now I&apos;m investigating with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692453</commentid>
    <comment_count>10</comment_count>
      <attachid>157705</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-10 04:51:21 -0700</bug_when>
    <thetext>Created attachment 157705
QAreaAllocator-Experiment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692455</commentid>
    <comment_count>11</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-10 04:52:46 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=157705) [details]
&gt; QAreaAllocator-Experiment

This replaces updateatlas with hooks to QAreaAllocator which has been imported from Qt3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692466</commentid>
    <comment_count>12</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-10 05:02:47 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; story continues as bugzilla resurrected...
&gt; 
&gt; Let&apos;s see how many atlases are allocated. For this reason I printed in the update atlas ctor with the dimension (which is contant in trunk and candidate 1). Results (all of them with simply zooming in google.com and scrolling):
&gt; 
&gt; ref
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; 
&gt; candidate 1
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; UpdateAtlas: 2000
&gt; 
&gt; candidate 2
&gt; UpdateAtlas: 2048
&gt; UpdateAtlas: 1024
&gt; UpdateAtlas: 128
&gt; UpdateAtlas: 512
&gt; UpdateAtlas: 2048
&gt; UpdateAtlas: 2048
&gt; UpdateAtlas: 128
&gt; UpdateAtlas: 512
&gt; UpdateAtlas: 1024
&gt; 
&gt; So, candidate 1 needs less allocation, but according to my calculation it still use 2.5Mb more memory.
&gt; 
&gt; Allan, could you upload your work, so we can compare with these?

Apparently only two allocations:

WebKit::UpdateAtlas::UpdateAtlas(int, WebKit::ShareableBitmap::Flags) 2048 
WebKit::UpdateAtlas::UpdateAtlas(int, WebKit::ShareableBitmap::Flags) 2048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692485</commentid>
    <comment_count>13</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-10 05:28:47 -0700</bug_when>
    <thetext>I&apos;m working on something like QGeneralAllocator, but maybe it will be never be as complete. In this case the best solution could be to convert this code to webkit style and using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692488</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-10 05:35:34 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I&apos;m working on something like QGeneralAllocator, but maybe it will be never be as complete. In this case the best solution could be to convert this code to webkit style and using it.

It might be better to commit it as it is and then do the clean ups in separate patches which are easier to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692494</commentid>
    <comment_count>15</comment_count>
      <attachid>157705</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-10 05:43:15 -0700</bug_when>
    <thetext>Comment on attachment 157705
QAreaAllocator-Experiment

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

&gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp:53
&gt; +    delete m_areaAllocator;
&gt; +    m_areaAllocator = 0;

OwnPtr? it has a clear() ? no?

&gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp:76
&gt; +   IntRect intrect(IntPoint::zero(), size);
&gt; +   if (flags() &amp; ShareableBitmap::SupportsAlpha) {
&gt;          graphicsContext-&gt;setCompositeOperation(CompositeCopy);
&gt; -        graphicsContext-&gt;fillRect(rect, Color::transparent, ColorSpaceDeviceRGB);
&gt; +        graphicsContext-&gt;fillRect(intrect, Color::transparent, ColorSpaceDeviceRGB);

wrong indentation,

Why not just fillRect(IntRect(IntPoint::zero(), size)), ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692550</commentid>
    <comment_count>16</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-10 08:21:00 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; I&apos;m working on something like QGeneralAllocator, but maybe it will be never be as complete. In this case the best solution could be to convert this code to webkit style and using it.
&gt; 
&gt; It might be better to commit it as it is and then do the clean ups in separate patches which are easier to review

That would probably break EFL, if they already use COORDINATED_GRAPHICS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692581</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-10 09:00:40 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; I&apos;m working on something like QGeneralAllocator, but maybe it will be never be as complete. In this case the best solution could be to convert this code to webkit style and using it.
&gt; &gt; 
&gt; &gt; It might be better to commit it as it is and then do the clean ups in separate patches which are easier to review
&gt; 
&gt; That would probably break EFL, if they already use COORDINATED_GRAPHICS.

The class can be added without being enabled for that reason</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692596</commentid>
    <comment_count>18</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-10 09:19:10 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; &gt; I&apos;m working on something like QGeneralAllocator, but maybe it will be never be as complete. In this case the best solution could be to convert this code to webkit style and using it.
&gt; &gt; &gt; 
&gt; &gt; &gt; It might be better to commit it as it is and then do the clean ups in separate patches which are easier to review
&gt; &gt; 
&gt; &gt; That would probably break EFL, if they already use COORDINATED_GRAPHICS.
&gt; 
&gt; The class can be added without being enabled for that reason

OK then :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693506</commentid>
    <comment_count>19</comment_count>
      <attachid>157952</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-13 03:44:44 -0700</bug_when>
    <thetext>Created attachment 157952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693510</commentid>
    <comment_count>20</comment_count>
      <attachid>157953</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-13 03:55:13 -0700</bug_when>
    <thetext>Created attachment 157953
Patch

Fix a couple of leftover Qtisms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693525</commentid>
    <comment_count>21</comment_count>
      <attachid>157953</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-08-13 04:09:55 -0700</bug_when>
    <thetext>Comment on attachment 157953
Patch

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

I didn&apos;t look at the AreaAllocator code, but here are some comments for the rest.

&gt; Source/WebKit2/Target.pri:706
&gt; +    WebProcess/WebPage/AreaAllocator.cpp \

Are we still the only ones building LayerTreeCoordinator? It seems so in my tree but it&apos;s quite old.

&gt; Source/WebKit2/WebProcess/WebPage/AreaAllocator.cpp:97
&gt; +void GeneralAreaAllocator::expand(const WebCore::IntSize&amp; size)
&gt; +{

I&apos;m wondering if it&apos;s better to keep the code as similar to the original as possible, or to remove code that we&apos;re not using?
I&apos;d be more in favor of the later personally.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:636
&gt; -    static const int ScratchBufferDimension = 2000;
&gt; -    m_updateAtlases.append(UpdateAtlas(ScratchBufferDimension, flags));
&gt; -    return m_updateAtlases.last().beginPaintingOnAvailableBuffer(handle, size, offset);
&gt; +    m_updateAtlases.append(adoptPtr(new UpdateAtlas(size, flags)));
&gt; +    return m_updateAtlases.last()-&gt;beginPaintingOnAvailableBuffer(handle, size, offset);

You&apos;re now using the size of the needed update to determine the size of the constructed atlas, is this intended?
Maybe it would be nice not to change the behavior of the size used for the atlas in this patch to segment possible regressions. You could keep the hard-coded value to 2000 or 2048 for now.

&gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp:43
&gt; +UpdateAtlas::~UpdateAtlas()
&gt;  {

It&apos;s empty, please check if it&apos;s necessary. If it&apos;s just so that the OwnPtr destructor knows its type, then you can remove the AreaAllocator.h include from UpdateAtlas.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693686</commentid>
    <comment_count>22</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-13 08:41:38 -0700</bug_when>
    <thetext>
&gt; I&apos;m wondering if it&apos;s better to keep the code as similar to the original as possible, or to remove code that we&apos;re not using?
&gt; I&apos;d be more in favor of the later personally.


I would go with the latter. But I suggest doing these cleans up in future patches to avoid regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693690</commentid>
    <comment_count>23</comment_count>
      <attachid>157953</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-13 08:45:23 -0700</bug_when>
    <thetext>Comment on attachment 157953
Patch

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

&gt; Source/WebKit2/WebProcess/WebPage/AreaAllocator.cpp:102
&gt; +    if (m_root-&gt;rect.size() == m_size)
&gt; +        return; // No change.
&gt; +    if (!m_root-&gt;left &amp;&amp; m_root-&gt;largestFree.width() &gt; 0) {

I would suggest a newline after the return

&gt; Source/WebKit2/WebProcess/WebPage/AreaAllocator.cpp:116
&gt; +    if (m_size.width() &gt;= m_size.height())
&gt; +        split = SplitOnX;
&gt; +    else
&gt; +        split = SplitOnY;
&gt; +    while (m_root-&gt;rect.size() != m_size) {

also here a newline before while

&gt; Source/WebKit2/WebProcess/WebPage/AreaAllocator.cpp:150
&gt; +static inline bool fitsWithin(const WebCore::IntSize &amp;size1, const WebCore::IntSize &amp;size2)

source, target?

&gt; Source/WebKit2/WebProcess/WebPage/AreaAllocator.h:104
&gt; +    Node *splitNode(Node*, Split);

style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694326</commentid>
    <comment_count>24</comment_count>
      <attachid>157953</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-13 18:05:24 -0700</bug_when>
    <thetext>Comment on attachment 157953
Patch

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

&gt;&gt; Source/WebKit2/Target.pri:706
&gt;&gt; +    WebProcess/WebPage/AreaAllocator.cpp \
&gt; 
&gt; Are we still the only ones building LayerTreeCoordinator? It seems so in my tree but it&apos;s quite old.

EFL are building LayerTreeCoordinator as well.

&gt; Source/WebKit2/WebProcess/WebPage/AreaAllocator.cpp:39
&gt; +    m_size.expandedTo(size);

This statement would have no effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694690</commentid>
    <comment_count>25</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-14 02:02:06 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; Source/WebKit2/WebProcess/WebPage/AreaAllocator.cpp:39
&gt; &gt; +    m_size.expandedTo(size);
&gt; 
&gt; This statement would have no effect.

Are you sure? I thought it would expand m_size to the minimum of m_size and size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694713</commentid>
    <comment_count>26</comment_count>
      <attachid>158265</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-14 02:19:18 -0700</bug_when>
    <thetext>Created attachment 158265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694773</commentid>
    <comment_count>27</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-14 03:49:02 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/AreaAllocator.cpp:39
&gt; &gt; &gt; +    m_size.expandedTo(size);
&gt; &gt; 
&gt; &gt; This statement would have no effect.
&gt; 
&gt; Are you sure? I thought it would expand m_size to the minimum of m_size and size.

Yes, if I read the code correctly you need to assign the result, e.g. m_size = m_size.expandedTo(size). IntSize::expandedTo is const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694795</commentid>
    <comment_count>28</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-14 04:22:24 -0700</bug_when>
    <thetext>Committed r125540: &lt;http://trac.webkit.org/changeset/125540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702405</commentid>
    <comment_count>29</comment_count>
      <attachid>158265</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-22 15:21:05 -0700</bug_when>
    <thetext>Comment on attachment 158265
Patch

Cleared review? from attachment 158265 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157444</attachid>
            <date>2012-08-09 05:25:36 -0700</date>
            <delta_ts>2012-08-13 03:44:13 -0700</delta_ts>
            <desc>debug code</desc>
            <filename>log.diff</filename>
            <type>text/plain</type>
            <size>1267</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxh
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3Bw
CmluZGV4IDU4ODY5ZjMuLjMxOWI0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcApAQCAtNjksNiArNjksOCBAQCB2b2lkIFVwZGF0
ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKICAgICAgICAgbV9idWZmZXJTdGF0ZXNbaV0g
PSBBdmFpbGFibGU7CiB9CiAKKyNkZWZpbmUgTE9HX0JVRkZFUl9VU0FHRSAxCisKIGludCBVcGRh
dGVBdGxhczo6ZmluZEF2YWlsYWJsZUluZGV4KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUp
CiB7CiAgICAgaW50IGRpbWVuc2lvbiA9IG1fbGF5b3V0LnNpemUoKTsKQEAgLTg5LDYgKzkxLDIy
IEBAIGludCBVcGRhdGVBdGxhczo6ZmluZEF2YWlsYWJsZUluZGV4KGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpCiAgICAgICAgIH0KICAgICB9CiAKKyNpZiBMT0dfQlVGRkVSX1VTQUdFCisg
ICAgaW50IHVzZWRCeXRlcyA9IDA7CisgICAgc3RyaWRlID0gZGltZW5zaW9uOworICAgIGZvciAo
aW50IGkgPSBtX2J1ZmZlclN0YXRlcy5zaXplKCkgLSAxOyBpID49IDA7IGkgLT0gKGRpbWVuc2lv
biArIDEpLCAtLXN0cmlkZSkgeworICAgICAgICBmb3IgKGludCBvZmZzZXQgPSAwOyBvZmZzZXQg
PCBzdHJpZGU7ICsrb2Zmc2V0KSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpIC0gb2Zmc2V0
OworICAgICAgICAgICAgaWYgKG1fYnVmZmVyU3RhdGVzW2luZGV4XSA9PSBUYWtlbikgeworICAg
ICAgICAgICAgICAgIGludCBidWZEaW1lbnNpb24gPSBtX2xheW91dFtpIC8gZGltZW5zaW9uXTsK
KyAgICAgICAgICAgICAgICB1c2VkQnl0ZXMgKz0gYnVmRGltZW5zaW9uICogYnVmRGltZW5zaW9u
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAi
QXRsYXMgY2FjaGUgZmFpbDsgcmVxdWlyZWREaW09JWQsIGJ1ZnNpemU9JWQsIHVzZWRCeXRlcz0l
ZFxuIiwKKyAgICAgICAgICAgIHJlcXVpcmVkRGltZW5zaW9uLCB0aGlzLT5zaXplKCkud2lkdGgo
KSAqIHRoaXMtPnNpemUoKS5oZWlnaHQoKSwgdXNlZEJ5dGVzKTsKKyNlbmRpZgorCiAgICAgcmV0
dXJuIC0xOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157449</attachid>
            <date>2012-08-09 05:33:36 -0700</date>
            <delta_ts>2012-08-13 03:44:19 -0700</delta_ts>
            <desc>fix candidate 1</desc>
            <filename>fix1.diff</filename>
            <type>text/plain</type>
            <size>5511</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxh
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3Bw
CmluZGV4IDU4ODY5ZjMuLmIyODRkZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcApAQCAtNjIsNTcgKzYyLDcxIEBAIHZvaWQgVXBk
YXRlQXRsYXM6OmJ1aWxkTGF5b3V0SWZOZWVkZWQoKQogICAgICAgICBpbnQgZGltZW5zaW9uID0g
c3RkOjptaW4ocmVtYWluZGVyLCBzdGQ6Om1pbihNYXhUaWxlU2l6ZSwgc3RkOjptYXgoTWluVGls
ZVNpemUsIG5leHRQb3dlck9mVHdvKHJlbWFpbmRlciAvIDIpKSkpOwogICAgICAgICBjdXJzb3Ig
Kz0gZGltZW5zaW9uOwogICAgICAgICBtX2xheW91dC5hcHBlbmQoZGltZW5zaW9uKTsKLSAgICB9
CiAKLSAgICBtX2J1ZmZlclN0YXRlcy5yZXNpemUobV9sYXlvdXQuc2l6ZSgpICogbV9sYXlvdXQu
c2l6ZSgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYnVmZmVyU3RhdGVzLnNpemUoKTsg
KytpKQotICAgICAgICBtX2J1ZmZlclN0YXRlc1tpXSA9IEF2YWlsYWJsZTsKKyAgICAgICAgdW5z
aWduZWQgbnVtQnVmZmVycyA9IHNpemUoKS5oZWlnaHQoKSAvIGRpbWVuc2lvbjsKKyAgICAgICAg
VmVjdG9yPFN0YXRlPiBidWZmZXJTdGF0ZXMobnVtQnVmZmVycyk7CisgICAgICAgIGJ1ZmZlclN0
YXRlcy5maWxsKEF2YWlsYWJsZSk7CisgICAgICAgIG1fYnVmZmVyU3RhdGVzLmdyb3cobV9idWZm
ZXJTdGF0ZXMuc2l6ZSgpICsgMSk7CisgICAgICAgIG1fYnVmZmVyU3RhdGVzLmxhc3QoKS5zd2Fw
KGJ1ZmZlclN0YXRlcyk7CisgICAgfQogfQogCi1pbnQgVXBkYXRlQXRsYXM6OmZpbmRBdmFpbGFi
bGVJbmRleChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQorI2RlZmluZSBMT0dfQlVGRkVS
X1VTQUdFIDEKKworYm9vbCBVcGRhdGVBdGxhczo6ZmluZEF2YWlsYWJsZUluZGV4KGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUsIHN0ZDo6cGFpcjxpbnQsIGludD4mIGluZGV4KQogewotICAg
IGludCBkaW1lbnNpb24gPSBtX2xheW91dC5zaXplKCk7Ci0gICAgaW50IHN0cmlkZSA9IGRpbWVu
c2lvbjsKICAgICBpbnQgcmVxdWlyZWREaW1lbnNpb24gPSBzdGQ6Om1heChzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gQmVnaW4gZnJvbSB0aGUgc21hbGxlc3QgYnVmZmVy
LCB1bnRpbCB3ZSByZWFjaCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGJ1ZmZlciB0aGF0J3MgYmln
IGVub3VnaCB0byBjb250YWluIG91ciByZWN0LgotICAgIGZvciAoaW50IGkgPSBtX2J1ZmZlclN0
YXRlcy5zaXplKCkgLSAxOyBpID49IDA7IGkgLT0gKGRpbWVuc2lvbiArIDEpLCAtLXN0cmlkZSkg
ewotICAgICAgICAvLyBOZWVkIGEgYmlnZ2VyIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1fbGF5b3V0
W2kgLyBkaW1lbnNpb25dIDwgcmVxdWlyZWREaW1lbnNpb24pCisgICAgZm9yIChpbnQgbGluZUlu
ZGV4ID0gbV9sYXlvdXQuc2l6ZSgpIC0gMTsgIGxpbmVJbmRleCA+PSAwOyAtLWxpbmVJbmRleCkg
eworICAgICAgICBpZiAobV9sYXlvdXRbbGluZUluZGV4XSA8IHJlcXVpcmVkRGltZW5zaW9uKQog
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFZlY3RvcjxTdGF0ZT4mIHN0YXRlcyA9IG1f
YnVmZmVyU3RhdGVzW2xpbmVJbmRleF07CisgICAgICAgIGZvciAoaW50IGkgPSBzdGF0ZXMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZXNbaV0gPT0gQXZh
aWxhYmxlKSB7CisgICAgICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1ha2VfcGFpcihsaW5lSW5k
ZXgsIGkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQogCi0gICAgICAgIC8vIENoZWNrIGFsbCBidWZmZXJzIG9mIGN1cnJlbnQg
c2l6ZSwgdG8gZmluZCBhbiBhdmFpbGFibGUgb25lLgotICAgICAgICBmb3IgKGludCBvZmZzZXQg
PSAwOyBvZmZzZXQgPCBzdHJpZGU7ICsrb2Zmc2V0KSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXgg
PSBpIC0gb2Zmc2V0OwotICAgICAgICAgICAgaWYgKG1fYnVmZmVyU3RhdGVzW2luZGV4XSA9PSBB
dmFpbGFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworI2lmIExPR19CVUZGRVJf
VVNBR0UKKyAgICBpbnQgdXNlZEJ5dGVzID0gMDsKKyAgICBmb3IgKGludCBsaW5lSW5kZXggPSBt
X2J1ZmZlclN0YXRlcy5zaXplKCkgLSAxOyBsaW5lSW5kZXggPj0gMDsgLS1saW5lSW5kZXgpIHsK
KyAgICAgICAgY29uc3QgVmVjdG9yPFN0YXRlPiYgc3RhdGVzID0gbV9idWZmZXJTdGF0ZXNbbGlu
ZUluZGV4XTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHN0YXRlcy5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgaWYgKHN0YXRlc1tpXSA9PSBUYWtlbikgeworICAgICAgICAg
ICAgICAgIHVzZWRCeXRlcyArPSBtX2xheW91dFtsaW5lSW5kZXhdICogbV9sYXlvdXRbbGluZUlu
ZGV4XTsKKyAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIGZwcmludGYoc3RkZXJy
LCAiQXRsYXMgY2FjaGUgZmFpbDsgcmVxdWlyZWREaW09JWQsIGJ1ZnNpemU9JWQsIHVzZWRCeXRl
cz0lZFxuIiwKKyAgICAgICAgICAgIHJlcXVpcmVkRGltZW5zaW9uLCB0aGlzLT5zaXplKCkud2lk
dGgoKSAqIHRoaXMtPnNpemUoKS5oZWlnaHQoKSwgdXNlZEJ5dGVzKTsKKyNlbmRpZgogCi0gICAg
cmV0dXJuIC0xOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBVcGRhdGVBdGxhczo6ZGlk
U3dhcEJ1ZmZlcnMoKQogewogICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1fYnVmZmVyU3RhdGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX2J1ZmZl
clN0YXRlc1tpXSA9IEF2YWlsYWJsZTsKKyAgICAgICAgbV9idWZmZXJTdGF0ZXNbaV0uZmlsbChB
dmFpbGFibGUpOwogfQogCiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gVXBkYXRlQXRsYXM6
OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUm
IGhhbmRsZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgSW50UG9pbnQmIG9mZnNldCkK
IHsKICAgICBidWlsZExheW91dElmTmVlZGVkKCk7Ci0gICAgaW50IGluZGV4ID0gZmluZEF2YWls
YWJsZUluZGV4KHNpemUpOworICAgIHN0ZDo6cGFpcjxpbnQsIGludD4gaW5kZXg7CisgICAgYm9v
bCBmb3VuZCA9IGZpbmRBdmFpbGFibGVJbmRleChzaXplLCBpbmRleCk7CiAKICAgICAvLyBObyBh
dmFpbGFibGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCi0gICAgaWYgKGluZGV4
IDwgMCkKKyAgICBpZiAoIWZvdW5kKQogICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHQ+KCk7CiAKICAgICBpZiAoIW1fc3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkp
CiAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4oKTsK
IAogICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1
cGRhdGVzLgotICAgIG1fYnVmZmVyU3RhdGVzW2luZGV4XSA9IFRha2VuOworICAgIG1fYnVmZmVy
U3RhdGVzW2luZGV4LmZpcnN0XVtpbmRleC5zZWNvbmRdID0gVGFrZW47CiAgICAgb2Zmc2V0ID0g
b2Zmc2V0Rm9ySW5kZXgoaW5kZXgpOwogICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygp
LCBzaXplKTsKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBt
X3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChJbnRSZWN0KG9mZnNldCwgc2l6ZSkpOwpA
QCAtMTI2LDE1ICsxNDAsMTQgQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0
bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoU2hhcmVhYmwKICAgICByZXR1cm4g
Z3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKIH0KIAotSW50UG9pbnQgVXBkYXRlQXRsYXM6Om9m
ZnNldEZvckluZGV4KGludCBpbmRleCkgY29uc3QKK0ludFBvaW50IFVwZGF0ZUF0bGFzOjpvZmZz
ZXRGb3JJbmRleChjb25zdCBzdGQ6OnBhaXI8aW50LCBpbnQ+JiBpbmRleCkgY29uc3QKIHsKLSAg
ICBJbnRQb2ludCBjb29yZChpbmRleCAlIG1fbGF5b3V0LnNpemUoKSwgaW5kZXggLyBtX2xheW91
dC5zaXplKCkpOwogICAgIGludCB4ID0gMDsKICAgICBpbnQgeSA9IDA7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb29yZC54KCk7ICsraSkKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZGV4
LmZpcnN0OyArK2kpCiAgICAgICAgIHggKz0gbV9sYXlvdXRbaV07Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb29yZC55KCk7ICsraSkKLSAgICAgICAgeSArPSBtX2xheW91dFtpXTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGluZGV4LnNlY29uZDsgKytpKQorICAgICAgICB5ICs9IG1fbGF5
b3V0W2luZGV4LmZpcnN0ICAgXTsKIAogICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKaW5kZXgg
N2QyMjIzNy4uNWJmYWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1VwZGF0ZUF0bGFzLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1VwZGF0ZUF0bGFzLmgKQEAgLTQzLDggKzQzLDggQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwotICAgIFdlYkNvcmU6OkludFBvaW50IG9m
ZnNldEZvckluZGV4KGludCkgY29uc3Q7Ci0gICAgaW50IGZpbmRBdmFpbGFibGVJbmRleChjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0Rm9ySW5k
ZXgoY29uc3Qgc3RkOjpwYWlyPGludCwgaW50PiYpIGNvbnN0OworICAgIGJvb2wgZmluZEF2YWls
YWJsZUluZGV4KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBzdGQ6OnBhaXI8aW50LCBpbnQ+Jik7
CiAKIHByaXZhdGU6CiAgICAgZW51bSBTdGF0ZSB7CkBAIC01Miw3ICs1Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgIFRha2VuCiAgICAgfTsKIAotICAgIFZlY3RvcjxTdGF0ZT4gbV9idWZmZXJTdGF0
ZXM7CisgICAgVmVjdG9yPFZlY3RvcjxTdGF0ZT4gPiBtX2J1ZmZlclN0YXRlczsKICAgICBWZWN0
b3I8aW50PiBtX2xheW91dDsKICAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIG1fZmxhZ3M7CiAg
ICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IG1fc3VyZmFjZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157457</attachid>
            <date>2012-08-09 05:51:03 -0700</date>
            <delta_ts>2012-08-13 03:44:24 -0700</delta_ts>
            <desc>fix candidate 2</desc>
            <filename>fix2.diff</filename>
            <type>text/plain</type>
            <size>10810</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNw
cAppbmRleCA3MDk1YzQzLi5hZDU2MTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC02Nyw4ICs2NywxNSBAQCBMYXllclRy
ZWVDb29yZGluYXRvcjo6fkxheWVyVHJlZUNvb3JkaW5hdG9yKCkKICAgICAgICAgKCppdCktPnNl
dENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCgwKTsKIH0KIAorLy8gUG93ZXItb2YtdHdv
IHNpemUgY2xhc3Nlcy4gVGhlIGJpZ2dlc3QgaXMgdGhlIG1heGltdW0gdGlsZSBzaXplLgorc3Rh
dGljIGNvbnN0IGludCBrQnVmZmVyU2l6ZUNsYXNzZXNbXSA9IHsKKyAgICA1MTIsIDI1NiwgMTI4
LCA2NCwgMzIKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQga051bWJlck9mU2l6ZUNsYXNzZXMg
PSBzaXplb2Yoa0J1ZmZlclNpemVDbGFzc2VzKSAvIHNpemVvZihpbnQpOworCiBMYXllclRyZWVD
b29yZGluYXRvcjo6TGF5ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSogd2ViUGFnZSkKICAgICA6
IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKKyAgICAsIG1fYXRsYXNDbGFzc2VzKGtOdW1iZXJPZlNp
emVDbGFzc2VzKQogICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2Up
CiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKICAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVl
KQpAQCAtNjAwLDggKzYwNywxMSBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJO
ZXh0RnJhbWUoKQogewogICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOwogICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxh
c2VzLnNpemUoKTsgKytpKQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0uZGlkU3dhcEJ1ZmZl
cnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXRsYXNDbGFzc2VzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIFZlY3RvcjxVcGRhdGVBdGxhcz4mIGF0bGFzQ2xhc3MgPSBtX2F0bGFz
Q2xhc3Nlc1tpXTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBhdGxhc0NsYXNzLnNp
emUoKTsgKytqKQorICAgICAgICAgICAgYXRsYXNDbGFzc1tqXS5kaWRTd2FwQnVmZmVycygpOwor
ICAgIH0KIH0KIAogYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVwZGF0
ZXNBbGxvd2VkKCkgY29uc3QKQEAgLTYxNiwyNSArNjI2LDUxIEBAIHZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCiAgICAgICAgICgqaXQpLT5wdXJnZUJhY2tp
bmdTdG9yZXMoKTsKIAogICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNv
dW50cy5zaXplKCkpOwotICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2F0bGFzQ2xhc3Nlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9h
dGxhc0NsYXNzZXNbaV0uY2xlYXIoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmV4dFBvd2Vy
T2ZUd28oaW50IG51bWJlcikKK3sKKyAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQg
bmV4dFBvd2VyT2ZUd28gZm9yIGFuIGludGVnZXIuCisgICAgLS1udW1iZXI7CisgICAgbnVtYmVy
IHw9IG51bWJlciA+PiAxOworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsKKyAgICBudW1iZXIg
fD0gbnVtYmVyID4+IDQ7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiA4OworICAgIG51bWJlciB8
PSBudW1iZXIgPj4gMTY7CisgICAgbnVtYmVyKys7CisgICAgcmV0dXJuIG51bWJlcjsKK30KKwor
dW5zaWduZWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmF0bGFzQ2xhc3NJbmRleEZvclNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgcmVxdWlyZWREaW1lbnNpb24gPSBzdGQ6Om1h
eChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgIEFTU0VSVChyZXF1aXJlZERpbWVu
c2lvbiA8PSBTaXplQ2xhc3Nlc1swXSk7CisKKyAgICBpbnQgcm91bmRlZCA9IG5leHRQb3dlck9m
VHdvKHJlcXVpcmVkRGltZW5zaW9uKTsKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7
IGkgPCBrTnVtYmVyT2ZTaXplQ2xhc3NlcyAmJiByb3VuZGVkIDw9IGtCdWZmZXJTaXplQ2xhc3Nl
c1tpXTsgKytpKSB7IH0KKyAgICByZXR1cm4gaSAtIDE7CiB9CiAKIFBhc3NPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0PiBMYXllclRyZWVDb29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBk
YXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3Mg
ZmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2lu
dCYgb2Zmc2V0KQogewotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBVcGRhdGVBdGxhcyYgYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNb
aV07CisgICAgdW5zaWduZWQgY2xhc3NJbmRleCA9IGF0bGFzQ2xhc3NJbmRleEZvclNpemUoc2l6
ZSk7CisgICAgVmVjdG9yPFVwZGF0ZUF0bGFzPiYgYXRsYXNlcyA9IG1fYXRsYXNDbGFzc2VzW2Ns
YXNzSW5kZXhdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXRsYXNlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBVcGRhdGVBdGxhcyYgYXRsYXMgPSBhdGxhc2VzW2ldOwogICAgICAgICBp
ZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgewogICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJl
dHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZm
ZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOworICAgICAgICAgICAgT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYXRsYXMuYmVnaW5QYWludGluZ09uQXZh
aWxhYmxlQnVmZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChncmFw
aGljc0NvbnRleHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxl
YXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IFNjcmF0Y2hC
dWZmZXJEaW1lbnNpb24gPSAyMDAwOwotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoVXBkYXRl
QXRsYXMoU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKTsKLSAgICByZXR1cm4gbV91cGRh
dGVBdGxhc2VzLmxhc3QoKS5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBz
aXplLCBvZmZzZXQpOworICAgIGF0bGFzZXMuYXBwZW5kKFVwZGF0ZUF0bGFzKGtCdWZmZXJTaXpl
Q2xhc3Nlc1tjbGFzc0luZGV4XSwgZmxhZ3MpKTsKKyAgICByZXR1cm4gYXRsYXNlcy5sYXN0KCku
YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCAzZmQ1OWQyLi5hZjI2YmYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKQEAgLTExMyw2
ICsxMTMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1
c2goKTsKICAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsKIAorICAgIHVuc2lnbmVkIGF0bGFz
Q2xhc3NJbmRleEZvclNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworCiAgICAgT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogCiAgICAgLy8gVGhlIGxheWVy
IHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgpAQCAtMTIzLDcgKzEy
NSw4IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKICAgICBIYXNoTWFwPGludDY0X3QsIGludD4g
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKLSAgICBWZWN0b3I8VXBkYXRlQXRs
YXM+IG1fdXBkYXRlQXRsYXNlczsKKworICAgIFZlY3RvcjxWZWN0b3I8VXBkYXRlQXRsYXM+ID4g
bV9hdGxhc0NsYXNzZXM7CiAKICAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoOwogICAgIGJvb2wgbV9pc1ZhbGlkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKaW5kZXggNTg4NjlmMy4uOWI1M2EyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCkBA
IC0yOSw4NyArMjksMzcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1VcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVh
YmxlQml0bWFwOjpGbGFncyBmbGFncykKLSAgICA6IG1fZmxhZ3MoZmxhZ3MpCi17Ci0gICAgbV9z
dXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKEludFNpemUoZGltZW5zaW9uLCBkaW1l
bnNpb24pLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3VwcG9ydHNHcmFwaGljc1N1cmZhY2Up
OwotfQotCi1zdGF0aWMgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1iZXIpCi17Ci0gICAgLy8g
VGhpcyBpcyBhIGZhc3QgdHJpY2sgdG8gZ2V0IG5leHRQb3dlck9mVHdvIGZvciBhbiBpbnRlZ2Vy
LgotICAgIC0tbnVtYmVyOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTsKLSAgICBudW1iZXIg
fD0gbnVtYmVyID4+IDI7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiA0OwotICAgIG51bWJlciB8
PSBudW1iZXIgPj4gODsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE2OwotICAgIG51bWJlcisr
OwotICAgIHJldHVybiBudW1iZXI7Ci19Ci0KLXZvaWQgVXBkYXRlQXRsYXM6OmJ1aWxkTGF5b3V0
SWZOZWVkZWQoKQotewotICAgIGlmICghbV9sYXlvdXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IE1pblRpbGVTaXplID0gMzI7Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBNYXhUaWxlU2l6ZSA9IDUxMjsKLQotICAgIC8vIERpdmlkZSBvdXIgc3F1YXJl
IHRvIHNxdWFyZSBwb3dlci1vZi10d28gYm94ZXMuCi0gICAgZm9yIChpbnQgY3Vyc29yID0gMDsg
Y3Vyc29yIDwgc2l6ZSgpLndpZHRoKCk7ICkgewotICAgICAgICBpbnQgcmVtYWluZGVyID0gc2l6
ZSgpLndpZHRoKCkgLSBjdXJzb3I7Ci0gICAgICAgIGludCBkaW1lbnNpb24gPSBzdGQ6Om1pbihy
ZW1haW5kZXIsIHN0ZDo6bWluKE1heFRpbGVTaXplLCBzdGQ6Om1heChNaW5UaWxlU2l6ZSwgbmV4
dFBvd2VyT2ZUd28ocmVtYWluZGVyIC8gMikpKSk7Ci0gICAgICAgIGN1cnNvciArPSBkaW1lbnNp
b247Ci0gICAgICAgIG1fbGF5b3V0LmFwcGVuZChkaW1lbnNpb24pOwotICAgIH0KK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBrQnVmZmVyc1BlckF0bGFzID0gMTY7CitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQga051bWJlck9mUm93cyA9IDQ7CiAKLSAgICBtX2J1ZmZlclN0YXRlcy5yZXNpemUobV9sYXlv
dXQuc2l6ZSgpICogbV9sYXlvdXQuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
YnVmZmVyU3RhdGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX2J1ZmZlclN0YXRlc1tpXSA9IEF2
YWlsYWJsZTsKLX0KLQotaW50IFVwZGF0ZUF0bGFzOjpmaW5kQXZhaWxhYmxlSW5kZXgoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhpbnQgYnVm
ZmVyRGltZW5zaW9uLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQorICAgIDogbV9idWZm
ZXJEaW1lbnNpb24oYnVmZmVyRGltZW5zaW9uKQorICAgICwgbV9idWZmZXJTdGF0ZXMoa0J1ZmZl
cnNQZXJBdGxhcykKKyAgICAsIG1fZmxhZ3MoZmxhZ3MpCiB7Ci0gICAgaW50IGRpbWVuc2lvbiA9
IG1fbGF5b3V0LnNpemUoKTsKLSAgICBpbnQgc3RyaWRlID0gZGltZW5zaW9uOwotICAgIGludCBy
ZXF1aXJlZERpbWVuc2lvbiA9IHN0ZDo6bWF4KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICAvLyBCZWdpbiBmcm9tIHRoZSBzbWFsbGVzdCBidWZmZXIsIHVudGlsIHdlIHJlYWNo
IHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgYnVmZmVyIHRoYXQncyBiaWcgZW5vdWdoIHRvIGNvbnRh
aW4gb3VyIHJlY3QuCi0gICAgZm9yIChpbnQgaSA9IG1fYnVmZmVyU3RhdGVzLnNpemUoKSAtIDE7
IGkgPj0gMDsgaSAtPSAoZGltZW5zaW9uICsgMSksIC0tc3RyaWRlKSB7Ci0gICAgICAgIC8vIE5l
ZWQgYSBiaWdnZXIgYnVmZmVyLgotICAgICAgICBpZiAobV9sYXlvdXRbaSAvIGRpbWVuc2lvbl0g
PCByZXF1aXJlZERpbWVuc2lvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8v
IENoZWNrIGFsbCBidWZmZXJzIG9mIGN1cnJlbnQgc2l6ZSwgdG8gZmluZCBhbiBhdmFpbGFibGUg
b25lLgotICAgICAgICBmb3IgKGludCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdHJpZGU7ICsrb2Zm
c2V0KSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBpIC0gb2Zmc2V0OwotICAgICAgICAgICAg
aWYgKG1fYnVmZmVyU3RhdGVzW2luZGV4XSA9PSBBdmFpbGFibGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOworICAgIC8v
ZnByaW50ZihzdGRlcnIsICJVcGRhdGVBdGxhczogJWRcbiIsIGJ1ZmZlckRpbWVuc2lvbik7Cisg
ICAgdW5zaWduZWQgZGltZW5zaW9uID0ga051bWJlck9mUm93cyAqIG1fYnVmZmVyRGltZW5zaW9u
OworICAgIG1fc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShJbnRTaXplKGRpbWVu
c2lvbiwgZGltZW5zaW9uKSwgZmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OlN1cHBvcnRzR3JhcGhp
Y3NTdXJmYWNlKTsKKyAgICBtX2J1ZmZlclN0YXRlcy5maWxsKEF2YWlsYWJsZSk7CiB9CiAKIHZv
aWQgVXBkYXRlQXRsYXM6OmRpZFN3YXBCdWZmZXJzKCkKIHsKLSAgICBidWlsZExheW91dElmTmVl
ZGVkKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2J1ZmZlclN0YXRlcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV9idWZmZXJTdGF0ZXNbaV0gPSBBdmFpbGFibGU7CisgICAgbV9idWZmZXJT
dGF0ZXMuZmlsbChBdmFpbGFibGUpOwogfQogCisjZGVmaW5lIExPR19CVUZGRVJfVVNBR0UKKwog
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25B
dmFpbGFibGVCdWZmZXIoU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUsIEludFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgYnVpbGRMYXlv
dXRJZk5lZWRlZCgpOwotICAgIGludCBpbmRleCA9IGZpbmRBdmFpbGFibGVJbmRleChzaXplKTsK
LQotICAgIC8vIE5vIGF2YWlsYWJsZSBidWZmZXIgd2FzIGZvdW5kLCByZXR1cm5pbmcgbnVsbC4K
LSAgICBpZiAoaW5kZXggPCAwKQorICAgIHNpemVfdCBpbmRleCA9IG1fYnVmZmVyU3RhdGVzLmZp
bmQoQXZhaWxhYmxlKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKKyAgICAgICAgLy8g
Tm8gYXZhaWxhYmxlIGJ1ZmZlciB3YXMgZm91bmQsIHJldHVybmluZyBudWxsLgogICAgICAgICBy
ZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7CisgICAgfQogCiAgICAgaWYgKCFt
X3N1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQotICAgICAgICByZXR1cm4gUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KCk7CisgICAgICAgIHJldHVybiBQYXNzT3duUHRy
PEdyYXBoaWNzQ29udGV4dD4oKTsKIAogICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZl
cnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgogICAgIG1fYnVmZmVyU3RhdGVzW2luZGV4XSA9
IFRha2VuOwpAQCAtMTI4LDEzICs3OCwxMyBAQCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
VXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihTaGFyZWFibAogCiBJ
bnRQb2ludCBVcGRhdGVBdGxhczo6b2Zmc2V0Rm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAogewot
ICAgIEludFBvaW50IGNvb3JkKGluZGV4ICUgbV9sYXlvdXQuc2l6ZSgpLCBpbmRleCAvIG1fbGF5
b3V0LnNpemUoKSk7CisgICAgSW50UG9pbnQgY29vcmQoaW5kZXggJSBrTnVtYmVyT2ZSb3dzLCBp
bmRleCAvIGtOdW1iZXJPZlJvd3MpOwogICAgIGludCB4ID0gMDsKICAgICBpbnQgeSA9IDA7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb29yZC54KCk7ICsraSkKLSAgICAgICAgeCArPSBtX2xh
eW91dFtpXTsKKyAgICAgICAgeCArPSBtX2J1ZmZlckRpbWVuc2lvbjsKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvb3JkLnkoKTsgKytpKQotICAgICAgICB5ICs9IG1fbGF5b3V0W2ldOworICAg
ICAgICB5ICs9IG1fYnVmZmVyRGltZW5zaW9uOwogCiAgICAgcmV0dXJuIEludFBvaW50KHgsIHkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0
ZUF0bGFzLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMu
aAppbmRleCA3ZDIyMjM3Li5lZmM3YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaApAQCAtMzIsMTkgKzMyLDE3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBVcGRhdGVBdGxhcyB7CiBwdWJsaWM6Ci0gICAgVXBkYXRlQXRsYXMo
aW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyk7CisgICAgVXBkYXRlQXRsYXMo
aW50IGJ1ZmZlckRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyk7CiAKLSAgICBpbmxp
bmUgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLT5zaXpl
KCk7IH0KKyAgICB1bnNpZ25lZCBidWZmZXJEaW1lbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2J1
ZmZlckRpbWVuc2lvbjsgfQogCiAgICAgLy8gUmV0dXJucyBhIG51bGwgcG9pbnRlciBvZiB0aGVy
ZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyLgotICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoU2hhcmVhYmxlU3VyZmFj
ZTo6SGFuZGxlJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkludFBvaW50JiBv
ZmZzZXQpOworICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpblBh
aW50aW5nT25BdmFpbGFibGVCdWZmZXIoU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCk7CiAgICAg
dm9pZCBkaWRTd2FwQnVmZmVycygpOwogICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3Mo
KSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBidWlsZExh
eW91dElmTmVlZGVkKCk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0Rm9ySW5kZXgoaW50
KSBjb25zdDsKLSAgICBpbnQgZmluZEF2YWlsYWJsZUluZGV4KGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKTsKIAogcHJpdmF0ZToKICAgICBlbnVtIFN0YXRlIHsKQEAgLTUyLDggKzUwLDggQEAgcHJp
dmF0ZToKICAgICAgICAgVGFrZW4KICAgICB9OwogCisgICAgdW5zaWduZWQgbV9idWZmZXJEaW1l
bnNpb247CiAgICAgVmVjdG9yPFN0YXRlPiBtX2J1ZmZlclN0YXRlczsKLSAgICBWZWN0b3I8aW50
PiBtX2xheW91dDsKICAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIG1fZmxhZ3M7CiAgICAgUmVm
UHRyPFNoYXJlYWJsZVN1cmZhY2U+IG1fc3VyZmFjZTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157705</attachid>
            <date>2012-08-10 04:51:21 -0700</date>
            <delta_ts>2012-08-13 03:44:30 -0700</delta_ts>
            <desc>QAreaAllocator-Experiment</desc>
            <filename>QAreaAllocator.diff</filename>
            <type>text/plain</type>
            <size>40411</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">Y29tbWl0IDQ1MWI3NGM1ZjBhMTA0ZjVmMzA3YzUxZGI2NmMyY2MzMDE5MWVmNDQKQXV0aG9yOiBB
bGxhbiBTYW5kZmVsZCBKZW5zZW4gPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CkRhdGU6ICAgRnJp
IEF1ZyAxMCAxMzo0OTo0MiAyMDEyICswMjAwCgogICAgUUFyZWFBbGxvY2F0b3IgZXhwZXJpbWVu
dC4KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaQppbmRleCBlMGZhNmVhLi40OGNiYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM2
MSw2ICszNjEsNyBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5k
b1N0ZXAuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MuaCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9B
cmVhQWxsb2NhdG9yLmggXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlLmggXAog
ICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5oIFwKICAgICBXZWJQcm9jZXNz
L3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCBcCkBAIC03MjYsNiArNzI3LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViVW5kb1N0ZXAuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvQXJlYUFsbG9j
YXRvci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJJbnNwZWN0b3JRdC5jcHAg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL1dlYkNvbm5lY3Rpb25Ub1VJUHJvY2Vzcy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IDcwOTVjNDMuLmRhNzYx
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvci5jcHAKQEAgLTYzMiw3ICs2MzIsNyBAQCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShjbwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5z
aW9uID0gMjAwMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24g
PSAyMDQ4OyAvLyBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgogICAgIG1fdXBkYXRlQXRsYXNlcy5h
cHBlbmQoVXBkYXRlQXRsYXMoU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKTsKICAgICBy
ZXR1cm4gbV91cGRhdGVBdGxhc2VzLmxhc3QoKS5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZm
ZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKaW5kZXggNTg4NjlmMy4uZWZiZGVlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3Bw
CkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVcGRh
dGVBdGxhcy5oIgorI2luY2x1ZGUgInF0L0FyZWFBbGxvY2F0b3IuaCIKIAogI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKIApAQCAtMzAsMTE0ICszMSw1NCBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMo
aW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncykKLSAgICA6IG1fZmxh
Z3MoZmxhZ3MpCisgICAgOiBtX2FyZWFBbGxvY2F0b3IoMCksIG1fZmxhZ3MoZmxhZ3MpCiB7CiAg
ICAgbV9zdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKEludFNpemUoZGltZW5zaW9u
LCBkaW1lbnNpb24pLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3VwcG9ydHNHcmFwaGljc1N1
cmZhY2UpOwogfQogCi1zdGF0aWMgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1iZXIpCitVcGRh
dGVBdGxhczo6flVwZGF0ZUF0bGFzKCkKIHsKLSAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0
byBnZXQgbmV4dFBvd2VyT2ZUd28gZm9yIGFuIGludGVnZXIuCi0gICAgLS1udW1iZXI7Ci0gICAg
bnVtYmVyIHw9IG51bWJlciA+PiAxOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsKLSAgICBu
dW1iZXIgfD0gbnVtYmVyID4+IDQ7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiA4OwotICAgIG51
bWJlciB8PSBudW1iZXIgPj4gMTY7Ci0gICAgbnVtYmVyKys7Ci0gICAgcmV0dXJuIG51bWJlcjsK
KyAgICBkZWxldGUgbV9hcmVhQWxsb2NhdG9yOwogfQogCiB2b2lkIFVwZGF0ZUF0bGFzOjpidWls
ZExheW91dElmTmVlZGVkKCkKIHsKLSAgICBpZiAoIW1fbGF5b3V0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBNaW5UaWxlU2l6ZSA9IDMyOwotICAg
IHN0YXRpYyBjb25zdCBpbnQgTWF4VGlsZVNpemUgPSA1MTI7Ci0KLSAgICAvLyBEaXZpZGUgb3Vy
IHNxdWFyZSB0byBzcXVhcmUgcG93ZXItb2YtdHdvIGJveGVzLgotICAgIGZvciAoaW50IGN1cnNv
ciA9IDA7IGN1cnNvciA8IHNpemUoKS53aWR0aCgpOyApIHsKLSAgICAgICAgaW50IHJlbWFpbmRl
ciA9IHNpemUoKS53aWR0aCgpIC0gY3Vyc29yOwotICAgICAgICBpbnQgZGltZW5zaW9uID0gc3Rk
OjptaW4ocmVtYWluZGVyLCBzdGQ6Om1pbihNYXhUaWxlU2l6ZSwgc3RkOjptYXgoTWluVGlsZVNp
emUsIG5leHRQb3dlck9mVHdvKHJlbWFpbmRlciAvIDIpKSkpOwotICAgICAgICBjdXJzb3IgKz0g
ZGltZW5zaW9uOwotICAgICAgICBtX2xheW91dC5hcHBlbmQoZGltZW5zaW9uKTsKLSAgICB9Ci0K
LSAgICBtX2J1ZmZlclN0YXRlcy5yZXNpemUobV9sYXlvdXQuc2l6ZSgpICogbV9sYXlvdXQuc2l6
ZSgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYnVmZmVyU3RhdGVzLnNpemUoKTsgKytp
KQotICAgICAgICBtX2J1ZmZlclN0YXRlc1tpXSA9IEF2YWlsYWJsZTsKLX0KLQotaW50IFVwZGF0
ZUF0bGFzOjpmaW5kQXZhaWxhYmxlSW5kZXgoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICBpbnQgZGltZW5zaW9uID0gbV9sYXlvdXQuc2l6ZSgpOwotICAgIGludCBzdHJpZGUg
PSBkaW1lbnNpb247Ci0gICAgaW50IHJlcXVpcmVkRGltZW5zaW9uID0gc3RkOjptYXgoc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEJlZ2luIGZyb20gdGhlIHNtYWxsZXN0
IGJ1ZmZlciwgdW50aWwgd2UgcmVhY2ggdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBidWZmZXIgdGhh
dCdzIGJpZyBlbm91Z2ggdG8gY29udGFpbiBvdXIgcmVjdC4KLSAgICBmb3IgKGludCBpID0gbV9i
dWZmZXJTdGF0ZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpIC09IChkaW1lbnNpb24gKyAxKSwgLS1z
dHJpZGUpIHsKLSAgICAgICAgLy8gTmVlZCBhIGJpZ2dlciBidWZmZXIuCi0gICAgICAgIGlmICht
X2xheW91dFtpIC8gZGltZW5zaW9uXSA8IHJlcXVpcmVkRGltZW5zaW9uKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgLy8gQ2hlY2sgYWxsIGJ1ZmZlcnMgb2YgY3VycmVudCBzaXpl
LCB0byBmaW5kIGFuIGF2YWlsYWJsZSBvbmUuCi0gICAgICAgIGZvciAoaW50IG9mZnNldCA9IDA7
IG9mZnNldCA8IHN0cmlkZTsgKytvZmZzZXQpIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGkg
LSBvZmZzZXQ7Ci0gICAgICAgICAgICBpZiAobV9idWZmZXJTdGF0ZXNbaW5kZXhdID09IEF2YWls
YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gLTE7CisgICAgaWYgKCFtX2FyZWFBbGxvY2F0b3IpCisgICAgICAgIG1fYXJl
YUFsbG9jYXRvciA9IG5ldyBRR2VuZXJhbEFyZWFBbGxvY2F0b3Ioc2l6ZSgpKTsKIH0KIAogdm9p
ZCBVcGRhdGVBdGxhczo6ZGlkU3dhcEJ1ZmZlcnMoKQogeworICAgIGRlbGV0ZSBtX2FyZWFBbGxv
Y2F0b3I7CisgICAgbV9hcmVhQWxsb2NhdG9yID0gMDsKICAgICBidWlsZExheW91dElmTmVlZGVk
KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2J1ZmZlclN0YXRlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV9idWZmZXJTdGF0ZXNbaV0gPSBBdmFpbGFibGU7CiB9CiAKIFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVm
ZmVyKFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQo
KTsKLSAgICBpbnQgaW5kZXggPSBmaW5kQXZhaWxhYmxlSW5kZXgoc2l6ZSk7CisgICAgUVJlY3Qg
cmVjdCA9IG1fYXJlYUFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZSk7CiAKICAgICAvLyBObyBhdmFp
bGFibGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCi0gICAgaWYgKGluZGV4IDwg
MCkKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dD4oKTsKIAogICAgIGlmICghbV9zdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFu
ZGxlKSkKICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PigpOwogCiAgICAgLy8gRklYTUU6IFVzZSB0cmktc3RhdGUgYnVmZmVycywgdG8gYWxsb3cgZmFz
dGVyIHVwZGF0ZXMuCi0gICAgbV9idWZmZXJTdGF0ZXNbaW5kZXhdID0gVGFrZW47Ci0gICAgb2Zm
c2V0ID0gb2Zmc2V0Rm9ySW5kZXgoaW5kZXgpOwotICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6
emVybygpLCBzaXplKTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRl
eHQgPSBtX3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChJbnRSZWN0KG9mZnNldCwgc2l6
ZSkpOworICAgIG9mZnNldCA9IHJlY3QudG9wTGVmdCgpOworICAgIE93blB0cjxHcmFwaGljc0Nv
bnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fc3VyZmFjZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KHJlY3QpOwogCi0gICAgaWYgKGZsYWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEpIHsKKyAgIEludFJlY3QgaW50cmVjdChJbnRQb2ludDo6emVybygpLCBzaXplKTsKKyAgIGlm
IChmbGFncygpICYgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKSB7CiAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAg
ICAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0KHJlY3QsIENvbG9yOjp0cmFuc3BhcmVudCwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3Qo
aW50cmVjdCwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNl
T3Zlcik7CiAgICAgfQogCiAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7CiB9
CiAKLUludFBvaW50IFVwZGF0ZUF0bGFzOjpvZmZzZXRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0
Ci17Ci0gICAgSW50UG9pbnQgY29vcmQoaW5kZXggJSBtX2xheW91dC5zaXplKCksIGluZGV4IC8g
bV9sYXlvdXQuc2l6ZSgpKTsKLSAgICBpbnQgeCA9IDA7Ci0gICAgaW50IHkgPSAwOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY29vcmQueCgpOyArK2kpCi0gICAgICAgIHggKz0gbV9sYXlvdXRb
aV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb29yZC55KCk7ICsraSkKLSAgICAgICAgeSAr
PSBtX2xheW91dFtpXTsKLQotICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsKLX0KLQogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRl
QXRsYXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5o
CmluZGV4IDdkMjIyMzcuLjlkMDVmNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFVwZGF0
ZUF0bGFzX2gKIAogI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKKyNpbmNsdWRlICJxdC9B
cmVhQWxsb2NhdG9yLmgiCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zMyw2ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
VXBkYXRlQXRsYXMgewogcHVibGljOgogICAgIFVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNo
YXJlYWJsZUJpdG1hcDo6RmxhZ3MpOworICAgIH5VcGRhdGVBdGxhcygpOwogCiAgICAgaW5saW5l
IFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgp
OyB9CiAKQEAgLTQzLDE3ICs0NSw5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGJ1
aWxkTGF5b3V0SWZOZWVkZWQoKTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBvZmZzZXRGb3JJbmRl
eChpbnQpIGNvbnN0OwotICAgIGludCBmaW5kQXZhaWxhYmxlSW5kZXgoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOwogCiBwcml2YXRlOgotICAgIGVudW0gU3RhdGUgewotICAgICAgICBBdmFpbGFi
bGUsCi0gICAgICAgIFRha2VuCi0gICAgfTsKLQotICAgIFZlY3RvcjxTdGF0ZT4gbV9idWZmZXJT
dGF0ZXM7Ci0gICAgVmVjdG9yPGludD4gbV9sYXlvdXQ7CisgICAgUUFyZWFBbGxvY2F0b3IqIG1f
YXJlYUFsbG9jYXRvcjsKICAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIG1fZmxhZ3M7CiAgICAg
UmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IG1fc3VyZmFjZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvQXJlYUFsbG9jYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvQXJlYUFsbG9jYXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyMTA1YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9BcmVhQWxsb2NhdG9yLmNwcApA
QCAtMCwwICsxLDg3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqCisqKiBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
KiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy8KKyoqCisqKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgUXQzRCBtb2R1bGUgb2YgdGhlIFF0IFRvb2xraXQuCisqKgorKiogJFFU
X0JFR0lOX0xJQ0VOU0U6TEdQTCQKKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBVc2FnZQorKiogVGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQKKyoqIGFwcGVhcmluZyBp
biB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2luZyBvZiB0aGlz
CisqKiBmaWxlLiBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8gZW5z
dXJlIHRoZSBHTlUgTGVzc2VyCisqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4x
IHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldDoKKyoqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl
cy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKyoqCisqKiBJbiBhZGRpdGlvbiwgYXMgYSBz
cGVjaWFsIGV4Y2VwdGlvbiwgTm9raWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKiog
cmlnaHRzLiBUaGVzZSByaWdodHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgTm9raWEgUXQgTEdQTCBF
eGNlcHRpb24KKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BMX0VYQ0VQ
VElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKioKKyoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFVzYWdlCisqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorKiogUHVibGljIExpY2Vuc2UgdmVyc2lvbiAz
LjAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyoqIGFuZCBh
cHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5HUEwgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2lu
ZyBvZiB0aGlzCisqKiBmaWxlLiBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRp
b24gdG8gZW5zdXJlIHRoZSBHTlUgR2VuZXJhbAorKiogUHVibGljIExpY2Vuc2UgdmVyc2lvbiAz
LjAgcmVxdWlyZW1lbnRzIHdpbGwgYmUgbWV0OgorKiogaHR0cDovL3d3dy5nbnUub3JnL2NvcHls
ZWZ0L2dwbC5odG1sLgorKioKKyoqIE90aGVyIFVzYWdlCisqKiBBbHRlcm5hdGl2ZWx5LCB0aGlz
IGZpbGUgbWF5IGJlIHVzZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQKKyoqIGNv
bmRpdGlvbnMgY29udGFpbmVkIGluIGEgc2lnbmVkIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4g
eW91IGFuZCBOb2tpYS4KKyoqCisqKgorKioKKyoqCisqKgorKioKKyoqICRRVF9FTkRfTElDRU5T
RSQKKyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIlF0M0QvcWdsbmFtZXNwYWNlLmgiCisKKy8vUVRfQkVHSU5fTkFNRVNQQUNF
CisKKy8qIQorICAgIFxjbGFzcyBRQXJlYUFsbG9jYXRvcgorICAgIFxicmllZiBUaGUgUUFyZWFB
bGxvY2F0b3IgY2xhc3MgcHJvdmlkZXMgZmFjaWxpdGllcyBmb3IgYWxsb2NhdGluZyBzdWItcmVn
aW9ucyBmcm9tIGEgcmVjdGFuZ3VsYXIgaW1hZ2UuCisgICAgXHNpbmNlIDQuOAorICAgIFxpbmdy
b3VwIHF0M2QKKyAgICBcaW5ncm91cCBxdDNkOjp0ZXh0dXJlcworICAgIFxpbnRlcm5hbAorCisg
ICAgUGVyZm9ybWFuY2Ugb24gYSBzeXN0ZW0gY2FuIHNvbWV0aW1lcyBiZSBpbXByb3ZlZCBieSBz
dG9yaW5nCisgICAgbXVsdGlwbGUgc21hbGwgaW1hZ2VzIGluIGEgc2luZ2xlIGxhcmdlIGltYWdl
LiAgVGhpcyByZWR1Y2VzCisgICAgbWVtb3J5IGFsbG9jYXRpb24gb3ZlcmhlYWQgYW5kIEdQVSBz
dGF0ZSBzd2l0Y2hpbmcgY29zdHMuCisKKyAgICBRQXJlYUFsbG9jYXRvciBhbmQgaXRzIHN1YmNs
YXNzZXMgaW1wbGVtZW50IHN0YW5kYXJkIHN0cmF0ZWdpZXMKKyAgICBmb3Igc3ViLXJlZ2lvbiBh
bGxvY2F0aW9uIGluIGltYWdlcyB3aXRob3V0IHR5aW5nIHRob3NlIHN0cmF0ZWdpZXMKKyAgICB0
byBzcGVjaWZpYyB0ZWNobm9sb2dpZXMgc3VjaCBhcyByYXN0ZXIsIE9wZW5HTCwgZXRjLgorCisg
ICAgQWxsb2NhdGlvbnMgYXJlIG1hbmFnZWQgaW4gYSB2aXJ0dWFsIHR3by1kaW1lbnNpb25hbCBz
cGFjZS4KKyAgICBUaGUgY2FsbGVyIHBlcmZvcm1zIHRoZSBhY3R1YWwgdGV4dHVyZSB1cGxvYWQg
YmFzZWQgb24gdGhlIHN1Yi1yZWdpb24KKyAgICB0aGF0IGFsbG9jYXRlKCkgcmV0dXJucy4KKwor
ICAgIFRoZSBjYWxsZXIgY2FuIHJldHVybiBhIHN1Yi1yZWdpb24gdG8gdGhlIGFsbG9jYXRpb24g
cG9vbCB3aXRoCisgICAgcmVsZWFzZSgpLiAgTm90ZSB0aGF0IG5vdCBhbGwgc3RyYXRlZ2llcyBz
dXBwb3J0IHJlbGVhc2UoKS4KKworICAgIFxzYSBRU2ltcGxlQXJlYUFsbG9jYXRvciwgUUdlbmVy
YWxBcmVhQWxsb2NhdG9yLCBRVW5pZm9ybUFyZWFBbGxvY2F0b3IKKyovCisKKy8qIQorICAgIFxj
bGFzcyBRU2ltcGxlQXJlYUFsbG9jYXRvcgorICAgIFxicmllZiBUaGUgUVNpbXBsZUFyZWFBbGxv
Y2F0b3IgY2xhc3MgcHJvdmlkZXMgYSBzaW1wbGUgYWxsb2NhdGlvbiBwb2xpY3kgZm9yIHNpbXBs
ZS1zaXplZCBzdWItYWxsb2NhdGlvbnMuCisgICAgXHNpbmNlIDQuOAorICAgIFxpbmdyb3VwIHF0
M2QKKyAgICBcaW5ncm91cCBxdDNkOjp0ZXh0dXJlcworICAgIFxpbnRlcm5hbAorCisgICAgUVNp
bXBsZUFyZWFBbGxvY2F0b3IgdXNlcyBhIHRyaXZpYWwgYWxsb2NhdGlvbiBzdHJhdGVneSB3aGVy
ZWJ5CisgICAgc3ViLXJlZ2lvbnMgYXJlIGFsbG9jYXRlZCBpbiByb3dzLCB3aXRoIGEgbmV3IHJv
dyBzdGFydGVkIGVhY2gKKyAgICB0aW1lIHRoZSBwcmV2aW91cyByb3cgZmlsbHMgdXAuICBTcGFj
ZSBpcyBuZXZlciByZWNsYWltZWQgYnkKKyAgICByZWxlYXNlKCkuCisKKyAgICBUaGlzIGFsbG9j
YXRvciBpcyBzdWl0YWJsZSBmb3IgdXNlIHdoZW4gdGhlIGFsbG9jYXRpb25zIHdpbGwgYWxsCisg
ICAgYmUgb2YgYSBzaW1pbGFyIHNpemUgYW5kIGFsbCByZWdpb25zIHdpbGwgYmUgZGlzY2FyZGVk
IGF0CisgICAgdGhlIHNhbWUgdGltZSB3aGVuIHRoZSBhbGxvY2F0b3IgaXMgZGVzdHJveWVkLiAg
QW4gZXhhbXBsZSB3b3VsZAorICAgIGJlIGEgZm9udCBnbHlwaCBtYW5hZ2VyLgorCisgICAgXHNh
IFFBcmVhQWxsb2NhdG9yLCBRR2VuZXJhbEFyZWFBbGxvY2F0b3IKKyovCisKKy8qIQorICAgIFxj
bGFzcyBRR2VuZXJhbEFyZWFBbGxvY2F0b3IKKyAgICBcYnJpZWYgVGhlIFFHZW5lcmFsQXJlYUFs
bG9jYXRvciBjbGFzcyBwcm92aWRlcyBhIGdlbmVyYWwgYWxsb2NhdGlvbiBwb2xpY3kgZm9yIHN1
Yi1yZWdpb25zIGluIGFuIGltYWdlLgorICAgIFxzaW5jZSA0LjgKKyAgICBcaW5ncm91cCBxdDNk
CisgICAgXGluZ3JvdXAgcXQzZDo6dGV4dHVyZXMKKyAgICBcaW50ZXJuYWwKKworICAgIFFHZW5l
cmFsQXJlYUFsbG9jYXRvciBjYW4gaGFuZGxlIGFyYml0cmFyeS1zaXplZCBhbGxvY2F0aW9ucyB1
cCB0bworICAgIHNpemUoKSwgaW4gYW55IG9yZGVyLCBhbmQgY2FuIHJlbGVhc2UoKSBwcmV2aW91
c2x5IGFsbG9jYXRlZCByZWdpb25zLgorICAgIEl0IHVzZXMgYSBiaW5hcnkgc3ViZGl2aXNpb24g
YWxnb3JpdGhtIG9uIHRoZSBpbWFnZSwgd2hpY2ggbWF5IHJlc3VsdAorICAgIGluIGZyYWdtZW50
YXRpb24gdW5kZXIgaGVhdnkgbG9hZC4KKworICAgIFdoaWxlIHRlY2huaWNhbGx5IGFueSBzaXpl
IHN1Yi1yZWdpb24gdXAgdG8gc2l6ZSgpIGNhbiBiZSBhbGxvY2F0ZWQsCisgICAgb25jZSBzdWJk
aXZpc2lvbiBiZWdpbnMsIHRoZSBzaXplcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgd2lsbCByZWR1
Y2UKKyAgICBzdWJzdGFudGlhbGx5LiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpbmNvbWluZyBy
ZXF1ZXN0cyBiZSBzaXplKCkgLyA0CisgICAgb3IgbGVzcyBmb3IgYmVzdCBwZXJmb3JtYW5jZS4K
KworICAgIElmIHRoZSBzdWItcmVnaW9uIHNpemVzIHRvIGJlIGFsbG9jYXRlZCBhcmUgdmVyeSBz
aW1pbGFyLCBhbmQgcmVsZWFzZSgpCisgICAgaXMgbm90IG5lY2Vzc2FyeSwgdGhlbiBRU2ltcGxl
QXJlYUFsbG9jYXRvciBtYXkgd29yayBiZXR0ZXIgdGhhbgorICAgIFFHZW5lcmFsQXJlYUFsbG9j
YXRvci4gIElmIHRoZSBzaXplcyBhcmUgdmVyeSBzaW1pbGFyLCBhbmQKKyAgICByZWxlYXNlKCkg
aXMgbmVjZXNzYXJ5LCB0aGVuIFFVbmlmb3JtQXJlYUFsbG9jYXRvciBtYXkgd29yayBiZXR0ZXIK
KyAgICB0aGFuIFFHZW5lcmFsQXJlYUFsbG9jYXRvci4KKworICAgIFxzYSBRQXJlYUFsbG9jYXRv
ciwgUVNpbXBsZUFyZWFBbGxvY2F0b3IsIFFVbmlmb3JtQXJlYUFsbG9jYXRvcgorKi8KKworLyoh
CisgICAgXGNsYXNzIFFVbmlmb3JtQXJlYUFsbG9jYXRvcgorICAgIFxicmllZiBUaGUgUVVuaWZv
cm1BcmVhQWxsb2NhdG9yIGNsYXNzIHByb3ZpZGVzIGFuIGFsbG9jYXRpb24gcG9saWN5IGZvciB1
bmlmb3JtLXNpemVkIGFyZWFzLgorICAgIFxzaW5jZSA0LjgKKyAgICBcaW5ncm91cCBxdDNkCisg
ICAgXGluZ3JvdXAgcXQzZDo6dGV4dHVyZXMKKyAgICBcaW50ZXJuYWwKKworICAgIFFVbmlmb3Jt
QXJlYUFsbG9jYXRvciBhbGxvY2F0ZXMgYW55IHNpemUgdXAgdG8gdW5pZm9ybVNpemUoKQorICAg
IGJ5IGRpdmlkaW5nIHNpemUoKSB1cCBpbnRvIGEgZ3JpZCBvZiB1bmlmb3JtU2l6ZSgpIGFyZWFz
LgorICAgIEFyZWFzIGNhbiBiZSBkZWFsbG9jYXRlZCB3aXRoIHJlbGVhc2UoKSBhbmQgcmV0dXJu
ZWQgdG8gdGhlIHBvb2wuCisKKyAgICBUaGlzIGFsbG9jYXRvciBpcyBzdWl0YWJsZSBmb3IgdXNl
IHdoZW4gdGhlIGFsbG9jYXRpb25zIHdpbGwgYWxsCisgICAgYmUgb2YgYSBzaW1pbGFyIHNpemUu
ICBVbmxpa2UgUVNpbXBsZUFyZWFBbGxvY2F0b3IsIHRoaXMgY2xhc3MKKyAgICBjYW4gcmVsZWFz
ZSBhbGxvY2F0aW9ucy4KKworICAgIFxzYSBRQXJlYUFsbG9jYXRvciwgUVNpbXBsZUFyZWFBbGxv
Y2F0b3IsIFFHZW5lcmFsQXJlYUFsbG9jYXRvcgorKi8KKworLyohCisgICAgXGludGVybmFsCisK
KyAgICBDb25zdHJ1Y3RzIGEgbmV3IGFyZWEgYWxsb2NhdG9yIHRoYXQgaXMgaW5pdGlhbGx5IFxh
IHNpemUgcGl4ZWxzCisgICAgaW4gc2l6ZS4KKworICAgIFxzYSBleHBhbmQoKQorKi8KK1FBcmVh
QWxsb2NhdG9yOjpRQXJlYUFsbG9jYXRvcihjb25zdCBRU2l6ZSAmc2l6ZSkKKyAgICA6IG1fc2l6
ZShzaXplKQorICAgICwgbV9taW5BbGxvYygxLCAxKQorICAgICwgbV9tYXJnaW4oMCwgMCkKK3sK
K30KKworLyohCisgICAgXGludGVybmFsCisKKyAgICBEZXN0cm95cyB0aGlzIGFyZWEgYWxsb2Nh
dG9yLgorKi8KK1FBcmVhQWxsb2NhdG9yOjp+UUFyZWFBbGxvY2F0b3IoKQoreworfQorCisvKiEK
KyAgICBcZm4gUVNpemUgUUFyZWFBbGxvY2F0b3I6OnNpemUoKSBjb25zdAorICAgIFxpbnRlcm5h
bAorCisgICAgUmV0dXJucyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBhcmVhIGJlaW5nIHVzZWQg
YnkgdGhpcyBhbGxvY2F0b3IuCisqLworCisvKiEKKyAgICBcZm4gUVNpemUgUUFyZWFBbGxvY2F0
b3I6Om1pbmltdW1BbGxvY2F0aW9uKCkgY29uc3QKKyAgICBcaW50ZXJuYWwKKworICAgIFJldHVy
bnMgdGhlIG1pbmltdW0gYWxsb2NhdGlvbiBzaXplIGluIHRoZSB4IGFuZCB5IGRpcmVjdGlvbnMK
KyAgICBmb3IgYXJlYXMgcmV0dXJuZWQgYnkgYWxsb2NhdGUoKS4gIFRoZSBkZWZhdWx0IGlzICgx
LCAxKS4KKworICAgIFxzYSBzZXRNaW5pbXVtQWxsb2NhdGlvbigpCisqLworCisvKiEKKyAgICBc
Zm4gdm9pZCBRQXJlYUFsbG9jYXRvcjo6c2V0TWluaW11bUFsbG9jYXRpb24oY29uc3QgUVNpemUg
JnNpemUpCisgICAgXGludGVybmFsCisKKyAgICBTZXRzIHRoZSBtaW5pbXVtIGFsbG9jYXRpb24g
XGEgc2l6ZSBpbiB0aGUgeCBhbmQgeSBkaXJlY3Rpb25zCisgICAgZm9yIGFyZWFzIHJldHVybmVk
IGJ5IGFsbG9jYXRlKCkuCisKKyAgICBGb3IgZXhhbXBsZSwgc2V0dGluZyB0aGUgbWluaW11bSBh
bGxvY2F0aW9uIHRvICg4LCA4KSB3aWxsIGZvcmNlCisgICAgYWxsIGFsbG9jYXRpb25zIHRvIGJl
IGFsaWduZWQgb24gYW4gOC1waXhlbCBib3VuZGFyeS4KKworICAgIFxzYSBtaW5pbXVtQWxsb2Nh
dGlvbigpCisqLworCisvKiEKKyAgICBcZm4gUVNpemUgUUFyZWFBbGxvY2F0b3I6Om1hcmdpbigp
IGNvbnN0CisgICAgXGludGVybmFsCisKKyAgICBSZXR1cm5zIHRoZSBtYXJnaW4gdGhhdCBzaG91
bGQgYmUgbGVmdCBiZXR3ZWVuIGFsbG9jYXRlZCBpdGVtcworICAgIGluIHRoZSB4IGFuZCB5IGRp
cmVjdGlvbnMuICBUaGUgZGVmYXVsdCBpcyAoMCwgMCkuCisKKyAgICBUaGlzIG1heSBiZSBuZWVk
ZWQgd2hlbiB1c2luZyBPcGVuR0wgdGV4dHVyZXMgYmVjYXVzZSBvZgorICAgIHJvdW5kaW5nIGVy
cm9ycyBpbiB0aGUgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gb2YKKyAgICB0ZXh0dXJl
IGNvLW9yZGluYXRlcy4gIExlYXZpbmcgYSBzbWFsbCBtYXJnaW4gYmV0d2VlbiBhbGxvY2F0aW9u
cworICAgIGNhbiBoZWxwIGF2b2lkIGFkamFjZW50IGltYWdlcyBmcm9tIGJsZWVkaW5nIGludG8g
ZWFjaCBvdGhlci4KKworICAgIFxzYSBzZXRNYXJnaW4oKQorKi8KKworLyohCisgICAgXGZuIHZv
aWQgUUFyZWFBbGxvY2F0b3I6OnNldE1hcmdpbihjb25zdCBRU2l6ZSAmbWFyZ2luKQorICAgIFxp
bnRlcm5hbAorCisgICAgU2V0cyB0aGUgXGEgbWFyZ2luIHRoYXQgc2hvdWxkIGJlIGxlZnQgYmV0
d2VlbiBhbGxvY2F0ZWQgaXRlbXMKKyAgICBpbiB0aGUgeCBhbmQgeSBkaXJlY3Rpb25zLgorCisg
ICAgXHNhIG1hcmdpbigpCisqLworCisvKiEKKyAgICBcaW50ZXJuYWwKKworICAgIEV4cGFuZHMg
dGhpcyBhbGxvY2F0b3IgdG8gZW5jb21wYXNzIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIFxhIHNp
emUuCisgICAgSWYgdGhlIGFyZWEgaXMgYWxyZWFkeSBsYXJnZXIsIHRoaXMgZnVuY3Rpb24gZG9l
cyBub3RoaW5nLgorCisgICAgVGhlIHJlY3RhbmdsZXMgdGhhdCB3ZXJlIHJldHVybmVkIGZvciBw
cmV2aW91cyBhbGxvY2F0aW9ucyB3aWxsCisgICAgcmVtYWluIHZhbGlkLgorCisgICAgXHNhIGV4
cGFuZEJ5KCkKKyovCit2b2lkIFFBcmVhQWxsb2NhdG9yOjpleHBhbmQoY29uc3QgUVNpemUgJnNp
emUpCit7CisgICAgaW50IG5ld1dpZHRoID0gcU1heChtX3NpemUud2lkdGgoKSwgc2l6ZS53aWR0
aCgpKTsKKyAgICBpbnQgbmV3SGVpZ2h0ID0gcU1heChtX3NpemUuaGVpZ2h0KCksIHNpemUuaGVp
Z2h0KCkpOworICAgIG1fc2l6ZSA9IFFTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworfQorCisv
KiEKKyAgICBcaW50ZXJuYWwKKworICAgIEV4cGFuZHMgdGhpcyBhbGxvY2F0b3IgYnkgXGEgc2l6
ZSBwaXhlbHMgaW4gdGhlIHggYW5kIHkgZGlyZWN0aW9ucy4KKworICAgIEZvciBleGFtcGxlLCBl
eHBhbmRpbmcgYnkgKDAsIDEyOCkgd2lsbCBhZGQgMTI4IGFkZGl0aW9uYWwgcGl4ZWxzCisgICAg
b2YgaGVpZ2h0IGJ1dCB3aWxsIGxlYXZlIHRoZSB3aWR0aCB1bmNoYW5nZWQuCisKKyAgICBcc2Eg
ZXhwYW5kKCkKKyovCit2b2lkIFFBcmVhQWxsb2NhdG9yOjpleHBhbmRCeShjb25zdCBRU2l6ZSAm
c2l6ZSkKK3sKKyAgICBleHBhbmQobV9zaXplICsgc2l6ZSk7Cit9CisKKy8qIQorICAgIFxmbiBR
UmVjdCBRQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgUVNpemUgJnNpemUpCisgICAgXGlu
dGVybmFsCisKKyAgICBBbGxvY2F0ZXMgXGEgc2l6ZSBwaXhlbHMgZnJvbSB0aGlzIGFsbG9jYXRv
ciBhbmQgcmV0dXJucyB0aGUgcmVjdGFuZ2xlCisgICAgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB0
aGUgY2FsbGVyLiAgUmV0dXJucyBhIG51bGwgcmVjdGFuZ2xlIGlmCisgICAgdGhpcyBhbGxvY2F0
b3IgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIFxhIHNpemUu
CisKKyAgICBcc2EgcmVsZWFzZSgpCisqLworCisvKiEKKyAgICBcaW50ZXJuYWwKKworICAgIEFs
bG9jYXRlcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgcmVjdGFuZ2xlcyBjb3JyZXNwb25kaW5nIHRv
IHRoZQorICAgIGVsZW1lbnRzIG9mIFxhIHNpemVzLiAgVGhlIHJldHVybmVkIGxpc3Qgd2lsbCBo
YXZlIGxlc3MgZWxlbWVudHMKKyAgICB0aGFuIFxhIHNpemVzIGlmIHRoZXJlIGlzIGluc3VmZmlj
aWVudCBzcGFjZSB0byBhY2NvbW1vZGF0ZQorICAgIGFsbCBvZiB0aGUgYWxsb2NhdGlvbiByZXF1
ZXN0cy4gIFRoZSB2YWx1ZXMgdGhhdCBhcmUgaW4gdGhlIHJldHVybmVkCisgICAgbGlzdCB3aWxs
IGJlIGFsbG9jYXRlZCBhbmQgbmVlZCB0byBiZSBwYXNzZWQgdG8gcmVsZWFzZSgpIHRvCisgICAg
ZGVhbGxvY2F0ZSB0aGVtLgorCisgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBj
YWxsIHRoZSBzdWJjbGFzcyBhbGxvY2F0ZSgpIG9uY2UKKyAgICBmb3IgZWFjaCBzaXplIHVudGls
IGFsbCBcYSBzaXplcyBoYXZlIGJlZW4gYWxsb2NhdGVkIG9yIGFuCisgICAgYWxsb2NhdGlvbiBm
YWlscy4gIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvCisgICAgcmVvcmRl
ciB0aGUgYWxsb2NhdGlvbnMgZm9yIGJlc3QtZml0LgorCisgICAgXHNhIHJlbGVhc2UoKQorKi8K
K1FMaXN0PFFSZWN0PiBRQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgUUxpc3Q8UVNpemU+
ICZzaXplcykKK3sKKyAgICBRTGlzdDxRUmVjdD4gcmVjdHM7CisgICAgUVJlY3QgcmVjdDsKKyAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZXMuY291bnQoKTsgKytpbmRleCkgewor
ICAgICAgICByZWN0ID0gYWxsb2NhdGUoc2l6ZXNbaW5kZXhdKTsKKyAgICAgICAgaWYgKHJlY3Qu
aXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmVjdHMuYXBwZW5kKHJlY3Qp
OworICAgIH0KKyAgICByZXR1cm4gcmVjdHM7Cit9CisKKy8qIQorICAgIFxpbnRlcm5hbAorCisg
ICAgUmVsZWFzZXMgdGhlIHNwYWNlIG9jY3VwaWVkIGJ5IFxhIHJlY3QgYmFjayB0byB0aGUgYWxs
b2NhdG9yLgorICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KKwor
ICAgIFRoZSBcYSByZWN0IG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2Fs
bCB0byBhbGxvY2F0ZSgpLgorICAgIE90aGVyd2lzZSB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5l
ZC4KKworICAgIFxzYSBhbGxvY2F0ZSgpCisqLwordm9pZCBRQXJlYUFsbG9jYXRvcjo6cmVsZWFz
ZShjb25zdCBRUmVjdCAmcmVjdCkKK3sKKyAgICBRX1VOVVNFRChyZWN0KTsKK30KKworLyohCisg
ICAgXGludGVybmFsCisKKyAgICBSZWxlYXNlcyB0aGUgc3BhY2Ugb2NjdXBpZWQgYnkgdGhlIG1l
bWJlcnMgb2YgXGEgcmVjdHMgYmFjayB0bworICAgIHRoZSBhbGxvY2F0b3IuICBUaGUgZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbiBjYWxscyByZWxlYXNlKCkgZm9yCisgICAgZWFjaCByZWN0YW5nbGUg
aW4gdGhlIGxpc3QuCisKKyAgICBUaGUgbWVtYmVycyBvZiBcYSByZWN0cyBtdXN0IGhhdmUgYmVl
biByZXR1cm5lZCBieSBwcmV2aW91cyBjYWxscworICAgIHRvIGFsbG9jYXRlKCkuICBPdGhlcndp
c2UgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuCisKKyAgICBcc2EgYWxsb2NhdGUoKQorKi8K
K3ZvaWQgUUFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgUUxpc3Q8UVJlY3Q+ICZyZWN0cykK
K3sKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgcmVjdHMuY291bnQoKTsgKytpbmRl
eCkKKyAgICAgICAgcmVsZWFzZShyZWN0c1tpbmRleF0pOworfQorCisvKiEKKyAgICBcaW50ZXJu
YWwKKworICAgIFJldHVybnMgYSByb3VnaCBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVz
IG9mIG92ZXJoZWFkIHRoYXQKKyAgICBhcmUgY3VycmVudGx5IGluIHVzZSB0byBzdG9yZSB0aGUg
aG91c2Uta2VlcGluZyBkYXRhIHN0cnVjdHVyZXMKKyAgICBmb3IgdGhpcyBhcmVhIGFsbG9jYXRv
ci4gIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgemVyby4KKyovCitpbnQgUUFy
ZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworLyoh
CisgICAgXGludGVybmFsCisKKyAgICBSZXR1cm5zIFxhIHNpemUsIGFmdGVyIHJvdW5kaW5nIGl0
IHVwIHRvIGFjY291bnQgZm9yCisgICAgbWluaW11bUFsbG9jYXRpb24oKSBhbmQgbWFyZ2luKCku
CisKKyAgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24sIHByb3ZpZGVkIGZvciBzdWJj
bGFzcyBvdmVycmlkZXMKKyAgICBvZiBhbGxvY2F0ZSgpLgorCisgICAgXHNhIGFsbG9jYXRlKCkK
KyovCitRU2l6ZSBRQXJlYUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0aW9uKGNvbnN0IFFTaXplICZz
aXplKSBjb25zdAoreworICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndp
ZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQo
KTsKKyAgICBpbnQgZXh0cmEgPSB3aWR0aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKKyAgICBpZiAo
ZXh0cmEpCisgICAgICAgIHdpZHRoICs9IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOworICAg
IGV4dHJhID0gaGVpZ2h0ICUgbV9taW5BbGxvYy5oZWlnaHQoKTsKKyAgICBpZiAoZXh0cmEpCisg
ICAgICAgIGhlaWdodCArPSBtX21pbkFsbG9jLmhlaWdodCgpIC0gZXh0cmE7CisgICAgcmV0dXJu
IFFTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCisvKiEKKyAgICBcaW50ZXJuYWwKKworICAgIENv
bnN0cnVjdHMgYSBzaW1wbGUgYXJlYSBhbGxvY2F0b3IgdGhhdCBpcyBpbml0aWFsbHkgXGEgc2l6
ZSBwaXhlbHMKKyAgICBpbiBzaXplLgorKi8KK1FTaW1wbGVBcmVhQWxsb2NhdG9yOjpRU2ltcGxl
QXJlYUFsbG9jYXRvcihjb25zdCBRU2l6ZSAmc2l6ZSkKKyAgICA6IFFBcmVhQWxsb2NhdG9yKHNp
emUpCisgICAgLCBtX3JvdygwKQorICAgICwgbV9jb2x1bW4oMCkKKyAgICAsIG1fcm93SGVpZ2h0
KDApCit7Cit9CisKKy8qIQorICAgIFxpbnRlcm5hbAorCisgICAgRGVzdHJveXMgdGhpcyBzaW1w
bGUgYXJlYSBhbGxvY2F0b3IuCisqLworUVNpbXBsZUFyZWFBbGxvY2F0b3I6On5RU2ltcGxlQXJl
YUFsbG9jYXRvcigpCit7Cit9CisKKy8qIQorICAgIFxpbnRlcm5hbAorKi8KK1FSZWN0IFFTaW1w
bGVBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBRU2l6ZSAmc2l6ZSkKK3sKKyAgICAvLyBS
b3VuZCB1cCB0aGUgYWxsb2NhdGlvbiBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBtYXJnaW4gYW5k
CisgICAgLy8gbWluaW11bSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMuCisgICAgUVNpemUgcm91bmRl
ZCA9IHJvdW5kQWxsb2NhdGlvbihzaXplKTsKKyAgICBpbnQgd2lkdGggPSByb3VuZGVkLndpZHRo
KCk7CisgICAgaW50IGhlaWdodCA9IHJvdW5kZWQuaGVpZ2h0KCk7CisKKyAgICAvLyBCYWlsIG91
dCBpZiB0aGUgc2l6ZSBpcyBvYnZpb3VzbHkgdG9vIHNtYWxsIG9yIHRvbyBiaWcuCisgICAgaWYg
KHdpZHRoIDw9IDAgfHwgd2lkdGggPiBtX3NpemUud2lkdGgoKSkKKyAgICAgICAgcmV0dXJuIFFS
ZWN0KCk7CisgICAgaWYgKGhlaWdodCA8PSAwIHx8IGhlaWdodCA+IChtX3NpemUuaGVpZ2h0KCkg
LSBtX3JvdykpCisgICAgICAgIHJldHVybiBRUmVjdCgpOworCisgICAgLy8gRG8gd2UgbmVlZCB0
byBwbGFjZSB0aGlzIGFsbG9jYXRpb24gb24gYSBuZXcgcm93PworICAgIGludCByb3cgPSBtX3Jv
dzsKKyAgICBpbnQgY29sdW1uID0gbV9jb2x1bW47CisgICAgaW50IHJvd0hlaWdodCA9IG1fcm93
SGVpZ2h0OworICAgIGlmICgoY29sdW1uICsgd2lkdGgpID4gbV9zaXplLndpZHRoKCkpIHsKKyAg
ICAgICAgcm93ICs9IG1fcm93SGVpZ2h0OworICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICBy
b3dIZWlnaHQgPSAwOworICAgICAgICBpZiAoaGVpZ2h0ID4gKG1fc2l6ZS5oZWlnaHQoKSAtIHJv
dykpCisgICAgICAgICAgICByZXR1cm4gUVJlY3QoKTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUg
dGhlIGN1cnJlbnQgYWxsb2NhdGlvbiBwb3NpdGlvbi4KKyAgICBtX3JvdyA9IHJvdzsKKyAgICBt
X2NvbHVtbiA9IGNvbHVtbiArIHdpZHRoOworICAgIG1fcm93SGVpZ2h0ID0gcU1heChyb3dIZWln
aHQsIGhlaWdodCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGFsbG9jYXRpb24sIHVzaW5nIHRoZSBv
cmlnaW5hbCBzaXplIHdpdGhvdXQgcm91bmRpbmcuCisgICAgcmV0dXJuIFFSZWN0KGNvbHVtbiwg
cm93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCisvKiEKKyAgICBcaW50ZXJu
YWwKKworICAgIENvbnN0cnVjdHMgYSBnZW5lcmFsIGFyZWEgYWxsb2NhdG9yIHRoYXQgaXMgaW5p
dGlhbGx5IFxhIHNpemUgcGl4ZWxzCisgICAgaW4gc2l6ZS4gIFRoZSBcYSBzaXplIHdpbGwgYmUg
cm91bmRlZCB1cCB0byB0aGUgbmV4dCBwb3dlciBvZiB0d28sCisgICAgdG8gc2ltcGxpZnkgdGhl
IGludGVybmFsIGFsbG9jYXRpb24gcG9saWN5LgorCisgICAgVGhpcyBjb25zdHJ1Y3RvciBzZXRz
IG1pbmltdW1BbGxvY2F0aW9uKCkgdG8gKDgsIDgpIHRvIHJlZHVjZSB0aGUKKyAgICBob3VzZWtl
ZXBpbmcgb3ZlcmhlYWQgb2YgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy4KKyovCitRR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OlFHZW5lcmFsQXJlYUFsbG9jYXRvcihjb25zdCBRU2l6ZSAmc2l6
ZSkKKyAgICA6IFFBcmVhQWxsb2NhdG9yKFFHTDo6bmV4dFBvd2VyT2ZUd28oc2l6ZSkpCit7Cisg
ICAgbV9yb290ID0gbmV3IE5vZGUoKTsKKyAgICBtX3Jvb3QtPnJlY3QgPSBRUmVjdCgwLCAwLCBt
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBtX3Jvb3QtPmxhcmdlc3RGcmVl
ID0gbV9zaXplOworICAgIG1fcm9vdC0+cGFyZW50ID0gMDsKKyAgICBtX3Jvb3QtPmxlZnQgPSAw
OworICAgIG1fcm9vdC0+cmlnaHQgPSAwOworICAgIG1fbm9kZUNvdW50ID0gMTsKKyAgICBzZXRN
aW5pbXVtQWxsb2NhdGlvbihRU2l6ZSg4LCA4KSk7Cit9CisKKy8qIQorICAgIFxpbnRlcm5hbAor
CisgICAgRGVzdHJveXMgdGhpcyBnZW5lcmFsIGFyZWEgYWxsb2NhdG9yLgorKi8KK1FHZW5lcmFs
QXJlYUFsbG9jYXRvcjo6flFHZW5lcmFsQXJlYUFsbG9jYXRvcigpCit7CisgICAgZnJlZU5vZGUo
bV9yb290KTsKK30KKworLyohCisgICAgXGludGVybmFsCisqLwordm9pZCBRR2VuZXJhbEFyZWFB
bGxvY2F0b3I6OmZyZWVOb2RlKE5vZGUgKm5vZGUpCit7CisgICAgaWYgKG5vZGUpIHsKKyAgICAg
ICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPnJpZ2h0KTsK
KyAgICB9CisgICAgZGVsZXRlIG5vZGU7Cit9CisKKy8qIQorICAgIFxpbnRlcm5hbAorCisgICAg
VGhlIFxhIHNpemUgd2lsbCBiZSByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IHBvd2VyIG9mIHR3by4K
KyAgICBVc2Ugc2l6ZSgpIHRvIGRldGVybWluZSB0aGUgYWN0dWFsIHNpemUgYWZ0ZXIgZXhwYW5z
aW9uLgorKi8KK3ZvaWQgUUdlbmVyYWxBcmVhQWxsb2NhdG9yOjpleHBhbmQoY29uc3QgUVNpemUg
JnNpemUpCit7CisgICAgUUFyZWFBbGxvY2F0b3I6OmV4cGFuZChRR0w6Om5leHRQb3dlck9mVHdv
KHNpemUpKTsKKworICAgIGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6ZSkKKyAgICAg
ICAgcmV0dXJuOyAgICAgLy8gTm8gY2hhbmdlLgorICAgIGlmICghbV9yb290LT5sZWZ0ICYmIG1f
cm9vdC0+bGFyZ2VzdEZyZWUud2lkdGgoKSA+IDApIHsKKyAgICAgICAgLy8gTm8gYWxsb2NhdGlv
bnMgaGF2ZSBvY2N1cnJlZCwgc28ganVzdCBhZGp1c3QgdGhlIHJvb3Qgc2l6ZS4KKyAgICAgICAg
bV9yb290LT5yZWN0ID0gUVJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBBZGQgZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1cnJlbnQgcm9v
dCB0byBleHBhbmQgdGhlIHRyZWUuCisgICAgTm9kZSAqb2xkUm9vdCA9IG1fcm9vdDsKKyAgICBT
cGxpdCBzcGxpdDsKKyAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9zaXplLmhlaWdodCgpKQor
ICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgIGVsc2UKKyAgICAgICAgc3BsaXQgPSBTcGxp
dE9uWTsKKyAgICB3aGlsZSAobV9yb290LT5yZWN0LnNpemUoKSAhPSBtX3NpemUpIHsKKyAgICAg
ICAgaWYgKG1fcm9vdC0+cmVjdC53aWR0aCgpID09IG1fc2l6ZS53aWR0aCgpKQorICAgICAgICAg
ICAgc3BsaXQgPSBTcGxpdE9uWTsKKyAgICAgICAgZWxzZSBpZiAobV9yb290LT5yZWN0LmhlaWdo
dCgpID09IG1fc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7Cisg
ICAgICAgIE5vZGUgKnBhcmVudCA9IG5ldyBOb2RlKCk7CisgICAgICAgIE5vZGUgKnJpZ2h0ID0g
bmV3IE5vZGUoKTsKKyAgICAgICAgbV9ub2RlQ291bnQgKz0gMjsKKyAgICAgICAgbV9yb290LT5w
YXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHBhcmVudC0+cGFyZW50ID0gMDsKKyAgICAgICAgcGFy
ZW50LT5sZWZ0ID0gbV9yb290OworICAgICAgICBwYXJlbnQtPnJpZ2h0ID0gcmlnaHQ7CisgICAg
ICAgIHBhcmVudC0+bGFyZ2VzdEZyZWUgPSBtX3Jvb3QtPnJlY3Quc2l6ZSgpOworICAgICAgICBy
aWdodC0+cGFyZW50ID0gcGFyZW50OworICAgICAgICByaWdodC0+bGVmdCA9IDA7CisgICAgICAg
IHJpZ2h0LT5yaWdodCA9IDA7CisgICAgICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+
cmVjdC5zaXplKCk7CisgICAgICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgeworICAgICAgICAg
ICAgcGFyZW50LT5yZWN0ID0gUVJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0Lnko
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgp
ICogMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC5oZWln
aHQoKSk7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9IFFSZWN0KG1fcm9vdC0+cmVjdC54KCkg
KyBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290
LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBwYXJlbnQtPnJlY3QgPSBRUmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jv
b3QtPnJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290LT5y
ZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Jvb3QtPnJl
Y3QuaGVpZ2h0KCkgKiAyKTsKKyAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gUVJlY3QobV9yb290
LT5yZWN0LngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0
LnkoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKKyAgICAg
ICAgfQorICAgICAgICBzcGxpdCA9IChzcGxpdCA9PSBTcGxpdE9uWCA/IFNwbGl0T25ZIDogU3Bs
aXRPblgpOworICAgICAgICBtX3Jvb3QgPSBwYXJlbnQ7CisgICAgfQorICAgIHVwZGF0ZUxhcmdl
c3RGcmVlKG9sZFJvb3QpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZml0c1dpdGhpbihjb25z
dCBRU2l6ZSAmc2l6ZTEsIGNvbnN0IFFTaXplICZzaXplMikKK3sKKyAgICByZXR1cm4gc2l6ZTEu
d2lkdGgoKSA8PSBzaXplMi53aWR0aCgpICYmIHNpemUxLmhlaWdodCgpIDw9IHNpemUyLmhlaWdo
dCgpOworfQorCisvKiEKKyAgICBcaW50ZXJuYWwKKyovCitRUmVjdCBRR2VuZXJhbEFyZWFBbGxv
Y2F0b3I6OmFsbG9jYXRlKGNvbnN0IFFTaXplICZzaXplKQoreworICAgIFFTaXplIHJvdW5kZWQg
PSByb3VuZEFsbG9jYXRpb24oc2l6ZSk7CisgICAgcm91bmRlZCA9IFFHTDo6bmV4dFBvd2VyT2ZU
d28ocm91bmRlZCk7CisgICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAwIHx8IHJvdW5kZWQud2lk
dGgoKSA+IG1fc2l6ZS53aWR0aCgpIHx8CisgICAgICAgICAgICByb3VuZGVkLmhlaWdodCgpIDw9
IDAgfHwgcm91bmRlZC5oZWlnaHQoKSA+IG1fc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJu
IFFSZWN0KCk7CisgICAgUVBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShyb3VuZGVkLCBt
X3Jvb3QpOworICAgIGlmIChwb2ludC54KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuIFFSZWN0KHBv
aW50LCBzaXplKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBRUmVjdCgpOworfQorCisvKiEK
KyAgICBcaW50ZXJuYWwKKyovCitRUG9pbnQgUUdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0
ZUZyb21Ob2RlKGNvbnN0IFFTaXplICZzaXplLCBOb2RlICpub2RlKQoreworICAgIC8vIEZpbmQg
dGhlIGJlc3Qgbm9kZSB0byBpbnNlcnQgaW50bywgd2hpY2ggc2hvdWxkIGJlCisgICAgLy8gYSBu
b2RlIHdpdGggdGhlIGxlYXN0IGFtb3VudCBvZiB1bnVzZWQgc3BhY2UgdGhhdCBpcworICAgIC8v
IGJpZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgcmVxdWVzdGVkIHNpemUuCisgICAgd2hpbGUgKG5v
ZGUgIT0gMCkgeworICAgICAgICAvLyBHbyBkb3duIGEgbGV2ZWwgYW5kIGRldGVybWluZSBpZiB0
aGUgbGVmdCBvciByaWdodAorICAgICAgICAvLyBzdWItdHJlZSBjb250YWlucyB0aGUgYmVzdCBj
aGFuY2Ugb2YgYWxsb2NhdGlvbi4KKyAgICAgICAgTm9kZSAqbGVmdCA9IG5vZGUtPmxlZnQ7Cisg
ICAgICAgIE5vZGUgKnJpZ2h0ID0gbm9kZS0+cmlnaHQ7CisgICAgICAgIGlmIChsZWZ0ICYmIGZp
dHNXaXRoaW4oc2l6ZSwgbGVmdC0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICBpZiAocmln
aHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCkgPCByaWdodC0+bGFyZ2VzdEZyZWUu
d2lkdGgoKSB8fAorICAgICAgICAgICAgICAgICAgICBsZWZ0LT5sYXJnZXN0RnJlZS5oZWlnaHQo
KSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgbGFyZ2VzdEZyZWUgdmFsdWVzIG1heSBiZSBhIGxpdHRsZSBvdmVyc2l6ZWQsCisgICAg
ICAgICAgICAgICAgICAgIC8vIHNvIHRyeSB0aGUgbGVmdCBzdWItdHJlZSBhbmQgdGhlbiB0aGUg
cmlnaHQgc3ViLXRyZWUuCisgICAgICAgICAgICAgICAgICAgIFFQb2ludCBwb2ludCA9IGFsbG9j
YXRlRnJvbU5vZGUoc2l6ZSwgbGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludC54
KCkgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
RnJvbU5vZGUoc2l6ZSwgcmlnaHQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSByaWdodDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5vZGUgPSBsZWZ0OworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQtPmxhcmdl
c3RGcmVlKSkgeworICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OworICAgICAgICB9IGVsc2UgaWYg
KGxlZnQgfHwgcmlnaHQpIHsKKyAgICAgICAgICAgIC8vIE5laXRoZXIgc3ViLW5vZGUgaGFzIGVu
b3VnaCBzcGFjZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgICAgICAgICAgcmV0dXJuIFFQb2ludCgt
MSwgLTEpOworICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oc2l6ZSwgbm9kZS0+bGFyZ2Vz
dEZyZWUpKSB7CisgICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHNwbGl0IHRoaXMgbm9kZSBp
bnRvIHNtYWxsZXIgcGllY2VzPworICAgICAgICAgICAgU3BsaXQgc3BsaXQ7CisgICAgICAgICAg
ICBpZiAoZml0c1dpdGhpbihRU2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpICog
MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBTcGxpdCBpbiBlaXRoZXIgZGlyZWN0aW9uOiBjaG9vc2UgdGhlIGlu
dmVyc2Ugb2YKKyAgICAgICAgICAgICAgICAvLyB0aGUgcGFyZW50IG5vZGUncyBzcGxpdCBkaXJl
Y3Rpb24gdG8gdHJ5IHRvIGJhbGFuY2UKKyAgICAgICAgICAgICAgICAvLyBvdXQgdGhlIHdhc3Rl
ZCBzcGFjZSBhcyBmdXJ0aGVyIHN1YmRpdmlzaW9ucyBoYXBwZW4uCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnBhcmVudCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50
LT5sZWZ0LT5yZWN0LngoKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnBh
cmVudC0+cmlnaHQtPnJlY3QueCgpKQorICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0
T25YOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPnBhcmVudCkKKyAgICAgICAgICAg
ICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5yZWN0LndpZHRoKCkgPj0gbm9kZS0+cmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRo
aW4oUVNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAg
ICAgLy8gU3BsaXQgYWxvbmcgdGhlIFggZGlyZWN0aW9uLgorICAgICAgICAgICAgICAgIHNwbGl0
ID0gU3BsaXRPblg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oUVNpemUoc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICogMiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgLy8gU3BsaXQg
YWxvbmcgdGhlIFkgZGlyZWN0aW9uLgorICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIENhbm5vdCBzcGxpdCBm
dXJ0aGVyIC0gYWxsb2NhdGUgdGhpcyBub2RlLgorICAgICAgICAgICAgICAgIG5vZGUtPmxhcmdl
c3RGcmVlID0gUVNpemUoMCwgMCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZyZWUo
bm9kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3QudG9wTGVmdCgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgbm9kZSwgdGhlbiBnbyBhcm91
bmQgYWdhaW4gdXNpbmcgdGhlIGxlZnQgc3ViLXRyZWUuCisgICAgICAgICAgICBub2RlID0gc3Bs
aXROb2RlKG5vZGUsIHNwbGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENh
bm5vdCBwb3NzaWJseSBmaXQgaW50byB0aGlzIG5vZGUuCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gUVBvaW50KC0xLCAtMSk7Cit9CisKKy8qIQorICAg
IFxpbnRlcm5hbAorKi8KK1FHZW5lcmFsQXJlYUFsbG9jYXRvcjo6Tm9kZSAqUUdlbmVyYWxBcmVh
QWxsb2NhdG9yOjpzcGxpdE5vZGUKKyAgICAoTm9kZSAqbm9kZSwgU3BsaXQgc3BsaXQpCit7Cisg
ICAgTm9kZSAqbGVmdCA9IG5ldyBOb2RlKCk7CisgICAgTm9kZSAqcmlnaHQgPSBuZXcgTm9kZSgp
OworICAgIG1fbm9kZUNvdW50ICs9IDI7CisgICAgbGVmdC0+cGFyZW50ID0gbm9kZTsKKyAgICBs
ZWZ0LT5sZWZ0ID0gMDsKKyAgICBsZWZ0LT5yaWdodCA9IDA7CisgICAgcmlnaHQtPnBhcmVudCA9
IG5vZGU7CisgICAgcmlnaHQtPmxlZnQgPSAwOworICAgIHJpZ2h0LT5yaWdodCA9IDA7CisgICAg
bm9kZS0+bGVmdCA9IGxlZnQ7CisgICAgbm9kZS0+cmlnaHQgPSByaWdodDsKKyAgICBpZiAoc3Bs
aXQgPT0gU3BsaXRPblgpIHsKKyAgICAgICAgbGVmdC0+cmVjdCA9IFFSZWN0KG5vZGUtPnJlY3Qu
eCgpLCBub2RlLT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJl
Y3Qud2lkdGgoKSAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZWN0Lmhl
aWdodCgpKTsKKyAgICAgICAgcmlnaHQtPnJlY3QgPSBRUmVjdChsZWZ0LT5yZWN0LnJpZ2h0KCkg
KyAxLCBub2RlLT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5y
ZWN0LndpZHRoKCkgLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlY3Qu
aGVpZ2h0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnQtPnJlY3QgPSBRUmVjdChub2Rl
LT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5yZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZWN0
LmhlaWdodCgpIC8gMik7CisgICAgICAgIHJpZ2h0LT5yZWN0ID0gUVJlY3Qobm9kZS0+cmVjdC54
KCksIGxlZnQtPnJlY3QuYm90dG9tKCkgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnJlY3Qud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5y
ZWN0LmhlaWdodCgpIC8gMik7CisgICAgfQorICAgIGxlZnQtPmxhcmdlc3RGcmVlID0gbGVmdC0+
cmVjdC5zaXplKCk7CisgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gcmlnaHQtPnJlY3Quc2l6ZSgp
OworICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gcmlnaHQtPmxhcmdlc3RGcmVlOworICAgIHJldHVy
biBsZWZ0OworfQorCisvKiEKKyAgICBcaW50ZXJuYWwKKyovCit2b2lkIFFHZW5lcmFsQXJlYUFs
bG9jYXRvcjo6dXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSAqbm9kZSkKK3sKKyAgICB3aGlsZSAoKG5v
ZGUgPSBub2RlLT5wYXJlbnQpICE9IDApIHsKKyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPQor
ICAgICAgICAgICAgUVNpemUocU1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS53aWR0aCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKSks
CisgICAgICAgICAgICAgICAgICBxTWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgp
LAorICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0
KCkpKTsKKyAgICB9Cit9CisKKy8qIQorICAgIFxpbnRlcm5hbAorKi8KK3ZvaWQgUUdlbmVyYWxB
cmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IFFSZWN0ICZyZWN0KQoreworICAgIC8vIExvY2F0
ZSB0aGUgbm9kZSB0aGF0IGNvbnRhaW5zIHRoZSBhbGxvY2F0ZWQgcmVnaW9uLgorICAgIE5vZGUg
Km5vZGUgPSBtX3Jvb3Q7CisgICAgUVBvaW50IHBvaW50ID0gcmVjdC50b3BMZWZ0KCk7CisgICAg
d2hpbGUgKG5vZGUgIT0gMCkgeworICAgICAgICBpZiAobm9kZS0+bGVmdCAmJiBub2RlLT5sZWZ0
LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5sZWZ0Owor
ICAgICAgICBlbHNlIGlmIChub2RlLT5yaWdodCAmJiBub2RlLT5yaWdodC0+cmVjdC5jb250YWlu
cyhwb2ludCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+cmlnaHQ7CisgICAgICAgIGVsc2Ug
aWYgKG5vZGUtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsgICAgIC8vIFBvaW50IGlzIGNvbXBsZXRlbHkg
b3V0c2lkZSB0aGUgdHJlZS4KKyAgICB9CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBNYXJrIHRoZSBub2RlIGFzIGZyZWUgYW5kIHRoZW4gd29yayB1cHdhcmRzIHRo
cm91Z2ggdGhlIHRyZWUKKyAgICAvLyByZWNvbWJpbmluZyBhbmQgZGVsZXRpbmcgbm9kZXMgdW50
aWwgd2UgcmVhY2ggYSBzaWJsaW5nCisgICAgLy8gdGhhdCBpcyBzdGlsbCBhbGxvY2F0ZWQuCisg
ICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0LnNpemUoKTsKKyAgICB3aGlsZSAobm9k
ZS0+cGFyZW50KSB7CisgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+cmlnaHQtPmxhcmdlc3RGcmVlICE9CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnBhcmVudC0+cmlnaHQtPnJlY3Quc2l6ZSgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG5vZGUt
PnBhcmVudC0+bGVmdC0+bGFyZ2VzdEZyZWUgIT0KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
cGFyZW50LT5sZWZ0LT5yZWN0LnNpemUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50OworICAgICAgICBmcmVlTm9kZShub2Rl
LT5sZWZ0KTsKKyAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOworICAgICAgICBtX25vZGVD
b3VudCAtPSAyOworICAgICAgICBub2RlLT5sZWZ0ID0gMDsKKyAgICAgICAgbm9kZS0+cmlnaHQg
PSAwOworICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOworICAg
IH0KKworICAgIC8vIE1ha2UgdGhlIHJlc3Qgb2Ygb3VyIGFuY2VzdG9ycyBoYXZlIHRoZSBjb3Jy
ZWN0ICJsYXJnZXN0IGZyZWUgc2l6ZSIuCisgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9kZSk7Cit9
CisKKy8qIQorICAgIFxpbnRlcm5hbAorKi8KK2ludCBRR2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92
ZXJoZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2RlQ291bnQgKiBzaXplb2YoTm9kZSk7
Cit9CisKKy8qIQorICAgIFxpbnRlcm5hbAorCisgICAgQ29uc3RydWN0cyBhIHVuaWZvcm0gYXJl
YSBhbGxvY2F0b3IgdGhhdCBpcyBpbml0aWFsbHkgXGEgc2l6ZSBwaXhlbHMKKyAgICBpbiBzaXpl
LiAgVGhlIFxhIHVuaWZvcm1TaXplIHNwZWNpZmllcyB0aGUgc2luZ2xlIGFsbG9jYXRpb24gc2l6
ZQorICAgIHRoYXQgaXMgc3VwcG9ydGVkLiAgQWxsIGFsbG9jYXRlKCkgcmVxdWVzdHMgbXVzdCBi
ZSBcYSB1bmlmb3JtU2l6ZQorICAgIG9yIGxlc3MuCisqLworUVVuaWZvcm1BcmVhQWxsb2NhdG9y
OjpRVW5pZm9ybUFyZWFBbGxvY2F0b3IKKyAgICAgICAgKGNvbnN0IFFTaXplICZzaXplLCBjb25z
dCBRU2l6ZSAmdW5pZm9ybVNpemUpCisgICAgOiBRQXJlYUFsbG9jYXRvcihzaXplKSwgbV91bmlm
b3JtU2l6ZSh1bmlmb3JtU2l6ZSksIG1fZmlyc3RGcmVlKDApCit7CisgICAgUV9BU1NFUlQodW5p
Zm9ybVNpemUud2lkdGgoKSA+IDAgJiYgdW5pZm9ybVNpemUuaGVpZ2h0KCkgPiAwKTsKKyAgICBR
X0FTU0VSVChzaXplLndpZHRoKCkgPj0gdW5pZm9ybVNpemUud2lkdGgoKSAmJgorICAgICAgICAg
ICAgIHNpemUuaGVpZ2h0KCkgPj0gdW5pZm9ybVNpemUuaGVpZ2h0KCkpOworICAgIG1fZ3JpZFNp
emUgPSBRU2l6ZShzaXplLndpZHRoKCkgLyB1bmlmb3JtU2l6ZS53aWR0aCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICBzaXplLmhlaWdodCgpIC8gdW5pZm9ybVNpemUuaGVpZ2h0KCkpOworICAg
IGludCBjb3VudCA9IG1fZ3JpZFNpemUud2lkdGgoKSAqIG1fZ3JpZFNpemUuaGVpZ2h0KCk7Cisg
ICAgbV9ncmlkID0gbmV3IGludCBbY291bnRdOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCAoY291bnQgLSAxKTsgKytpbmRleCkKKyAgICAgICAgbV9ncmlkW2luZGV4XSA9IGluZGV4
ICsgMTsKKyAgICBtX2dyaWRbY291bnQgLSAxXSA9IC0xOworfQorCisvKiEKKyAgICBcaW50ZXJu
YWwKKworICAgIERlc3Ryb3lzIHRoaXMgdW5pZm9ybSBhcmVhIGFsbG9jYXRvci4KKyovCitRVW5p
Zm9ybUFyZWFBbGxvY2F0b3I6On5RVW5pZm9ybUFyZWFBbGxvY2F0b3IoKQoreworICAgIGRlbGV0
ZSBbXSBtX2dyaWQ7Cit9CisKKy8qIQorICAgIFxmbiBRU2l6ZSBRVW5pZm9ybUFyZWFBbGxvY2F0
b3I6OnVuaWZvcm1TaXplKCkgY29uc3QKKyAgICBcaW50ZXJuYWwKKworICAgIFJldHVybnMgdGhl
IHVuaWZvcm0gc2l6ZSBvZiBhbGwgYWxsb2NhdGlvbnMuCisKKyAgICBcc2EgYWxsb2NhdGUoKQor
Ki8KKworLyohCisgICAgXGludGVybmFsCisqLwordm9pZCBRVW5pZm9ybUFyZWFBbGxvY2F0b3I6
OmV4cGFuZChjb25zdCBRU2l6ZSAmc2l6ZSkKK3sKKyAgICBRQXJlYUFsbG9jYXRvcjo6ZXhwYW5k
KHNpemUpOworCisgICAgUVNpemUgbmV3R3JpZFNpemUgPSBRU2l6ZShtX3NpemUud2lkdGgoKSAv
IG1fdW5pZm9ybVNpemUud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
c2l6ZS5oZWlnaHQoKSAvIG1fdW5pZm9ybVNpemUuaGVpZ2h0KCkpOworICAgIGlmIChtX2dyaWRT
aXplID09IG5ld0dyaWRTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDcmVhdGUgYSBu
ZXcgZ3JpZC4KKyAgICBpbnQgbmV3Q291bnQgPSBuZXdHcmlkU2l6ZS53aWR0aCgpICogbmV3R3Jp
ZFNpemUuaGVpZ2h0KCk7CisgICAgaW50ICpuZXdHcmlkID0gbmV3IGludCBbbmV3Q291bnRdOwor
CisgICAgLy8gQ29weSBhY3Jvc3MgdGhlIGZyZWUgYmxvY2tzIGZyb20gdGhlIG9sZCBncmlkLgor
ICAgIGludCBwb3NuID0gbV9maXJzdEZyZWU7CisgICAgaW50IG5ld0ZpcnN0RnJlZSA9IC0xOwor
ICAgIHdoaWxlIChwb3NuICE9IC0xKSB7CisgICAgICAgIGludCB4ID0gcG9zbiAlIG1fZ3JpZFNp
emUud2lkdGgoKTsKKyAgICAgICAgaW50IHkgPSBwb3NuIC8gbV9ncmlkU2l6ZS53aWR0aCgpOwor
ICAgICAgICBpbnQgbmV3UG9zbiA9IHggKyB5ICogbmV3R3JpZFNpemUud2lkdGgoKTsKKyAgICAg
ICAgbmV3R3JpZFtuZXdQb3NuXSA9IG5ld0ZpcnN0RnJlZTsKKyAgICAgICAgbmV3Rmlyc3RGcmVl
ID0gbmV3UG9zbjsKKyAgICAgICAgcG9zbiA9IG1fZ3JpZFtwb3NuXTsKKyAgICB9CisKKyAgICAv
LyBBZGQgZnJlZSBibG9ja3Mgd2l0aGluIHRoZSBleHBhbmRlZCBhcmVhIG9mIHRoZSBuZXcgZ3Jp
ZC4KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fZ3JpZFNpemUuaGVpZ2h0KCk7ICsreSkgewor
ICAgICAgICBpbnQgbmV3UG9zbiA9IHkgKiBuZXdHcmlkU2l6ZS53aWR0aCgpICsgbV9ncmlkU2l6
ZS53aWR0aCgpOworICAgICAgICBmb3IgKGludCB4ID0gbV9ncmlkU2l6ZS53aWR0aCgpOyB4IDwg
bmV3R3JpZFNpemUud2lkdGgoKTsgKyt4KSB7CisgICAgICAgICAgICBuZXdHcmlkW25ld1Bvc25d
ID0gbmV3Rmlyc3RGcmVlOworICAgICAgICAgICAgbmV3Rmlyc3RGcmVlID0gbmV3UG9zbjsKKyAg
ICAgICAgICAgICsrbmV3UG9zbjsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGludCB5ID0g
bV9ncmlkU2l6ZS5oZWlnaHQoKTsgeSA8IG5ld0dyaWRTaXplLmhlaWdodCgpOyArK3kpIHsKKyAg
ICAgICAgaW50IG5ld1Bvc24gPSB5ICogbmV3R3JpZFNpemUud2lkdGgoKTsKKyAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBuZXdHcmlkU2l6ZS53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAg
IG5ld0dyaWRbbmV3UG9zbl0gPSBuZXdGaXJzdEZyZWU7CisgICAgICAgICAgICBuZXdGaXJzdEZy
ZWUgPSBuZXdQb3NuOworICAgICAgICAgICAgKytuZXdQb3NuOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gUmVwbGFjZSB0aGUgb2xkIGdyaWQuCisgICAgZGVsZXRlIFtdIG1fZ3JpZDsKKyAg
ICBtX2dyaWQgPSBuZXdHcmlkOworICAgIG1fZ3JpZFNpemUgPSBuZXdHcmlkU2l6ZTsKKyAgICBt
X2ZpcnN0RnJlZSA9IG5ld0ZpcnN0RnJlZTsKK30KKworLyohCisgICAgXGludGVybmFsCisqLwor
UVJlY3QgUVVuaWZvcm1BcmVhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBRU2l6ZSAmc2l6ZSkK
K3sKKyAgICBRU2l6ZSByb3VuZGVkID0gcm91bmRBbGxvY2F0aW9uKHNpemUpOworICAgIGlmIChy
b3VuZGVkLndpZHRoKCkgPiBtX3VuaWZvcm1TaXplLndpZHRoKCkgfHwKKyAgICAgICAgICAgIHJv
dW5kZWQuaGVpZ2h0KCkgPiBtX3VuaWZvcm1TaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4g
UVJlY3QoKTsKKyAgICBpbnQgcG9zbiA9IG1fZmlyc3RGcmVlOworICAgIGlmIChwb3NuID09IC0x
KQorICAgICAgICByZXR1cm4gUVJlY3QoKTsKKyAgICBtX2ZpcnN0RnJlZSA9IG1fZ3JpZFtwb3Nu
XTsKKyAgICBpbnQgeCA9IHBvc24gJSBtX2dyaWRTaXplLndpZHRoKCk7CisgICAgaW50IHkgPSBw
b3NuIC8gbV9ncmlkU2l6ZS53aWR0aCgpOworICAgIHJldHVybiBRUmVjdCh4ICogbV91bmlmb3Jt
U2l6ZS53aWR0aCgpLCB5ICogbV91bmlmb3JtU2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKworLyohCisgICAgXGludGVybmFs
CisqLwordm9pZCBRVW5pZm9ybUFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgUVJlY3QgJnJl
Y3QpCit7CisgICAgaW50IHggPSByZWN0LngoKSAvIG1fdW5pZm9ybVNpemUud2lkdGgoKTsKKyAg
ICBpbnQgeSA9IHJlY3QueSgpIC8gbV91bmlmb3JtU2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgcG9z
biA9IHggKyB5ICogbV9ncmlkU2l6ZS53aWR0aCgpOworICAgIFFfQVNTRVJUKHBvc24gPj0gMCAm
JiBwb3NuIDwgbV9ncmlkU2l6ZS53aWR0aCgpICogbV9ncmlkU2l6ZS5oZWlnaHQoKSk7CisgICAg
bV9ncmlkW3Bvc25dID0gbV9maXJzdEZyZWU7CisgICAgbV9maXJzdEZyZWUgPSBwb3NuOworfQor
CisvKiEKKyAgICBcaW50ZXJuYWwKKyovCitpbnQgUVVuaWZvcm1BcmVhQWxsb2NhdG9yOjpvdmVy
aGVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemVvZihpbnQpICogbV9ncmlkU2l6ZS53aWR0
aCgpICogbV9ncmlkU2l6ZS5oZWlnaHQoKTsKK30KKworLy9RVF9FTkRfTkFNRVNQQUNFCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvQXJlYUFsbG9jYXRv
ci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0FyZWFBbGxvY2F0b3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmNkMjJmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0FyZWFBbGxvY2F0
b3IuaApAQCAtMCwwICsxLDE3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqCisqKiBDb3B5
cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorKiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy8KKyoqCisqKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgUXQzRCBtb2R1bGUgb2YgdGhlIFF0IFRvb2xraXQuCisqKgor
KiogJFFUX0JFR0lOX0xJQ0VOU0U6TEdQTCQKKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBVc2FnZQorKiogVGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZSB2ZXJzaW9uIDIuMSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQKKyoqIGFwcGVh
cmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2luZyBv
ZiB0aGlzCisqKiBmaWxlLiBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24g
dG8gZW5zdXJlIHRoZSBHTlUgTGVzc2VyCisqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp
b24gMi4xIHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldDoKKyoqIGh0dHA6Ly93d3cuZ251Lm9yZy9s
aWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKyoqCisqKiBJbiBhZGRpdGlvbiwg
YXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgTm9raWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25h
bAorKiogcmlnaHRzLiBUaGVzZSByaWdodHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgTm9raWEgUXQg
TEdQTCBFeGNlcHRpb24KKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BM
X0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKioKKyoqIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIFVzYWdlCisqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorKiogUHVibGljIExpY2Vuc2UgdmVy
c2lvbiAzLjAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyoq
IGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5HUEwgaW5jbHVkZWQgaW4gdGhlIHBh
Y2thZ2luZyBvZiB0aGlzCisqKiBmaWxlLiBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5m
b3JtYXRpb24gdG8gZW5zdXJlIHRoZSBHTlUgR2VuZXJhbAorKiogUHVibGljIExpY2Vuc2UgdmVy
c2lvbiAzLjAgcmVxdWlyZW1lbnRzIHdpbGwgYmUgbWV0OgorKiogaHR0cDovL3d3dy5nbnUub3Jn
L2NvcHlsZWZ0L2dwbC5odG1sLgorKioKKyoqIE90aGVyIFVzYWdlCisqKiBBbHRlcm5hdGl2ZWx5
LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQK
KyoqIGNvbmRpdGlvbnMgY29udGFpbmVkIGluIGEgc2lnbmVkIHdyaXR0ZW4gYWdyZWVtZW50IGJl
dHdlZW4geW91IGFuZCBOb2tpYS4KKyoqCisqKgorKioKKyoqCisqKgorKioKKyoqICRRVF9FTkRf
TElDRU5TRSQKKyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFFBUkVBQUxMT0NB
VE9SX1BfSAorI2RlZmluZSBRQVJFQUFMTE9DQVRPUl9QX0gKKworLy8KKy8vICBXIEEgUiBOIEkg
TiBHCisvLyAgLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRoaXMgZmlsZSBpcyBub3QgcGFydCBvZiB0
aGUgUXQgQVBJLiAgSXQgZXhpc3RzIHB1cmVseSBhcyBhbgorLy8gaW1wbGVtZW50YXRpb24gZGV0
YWlsLiAgVGhpcyBoZWFkZXIgZmlsZSBtYXkgY2hhbmdlIGZyb20gdmVyc2lvbiB0bworLy8gdmVy
c2lvbiB3aXRob3V0IG5vdGljZSwgb3IgZXZlbiBiZSByZW1vdmVkLgorLy8KKy8vIFdlIG1lYW4g
aXQuCisvLworCisvLyNpbmNsdWRlICJxdDNkZ2xvYmFsLmgiCisjZGVmaW5lIFFfUVQzRF9FWFBP
UlQKKyNpbmNsdWRlIDxRdENvcmUvcXNpemUuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXJlY3QuaD4K
KyNpbmNsdWRlIDxRdENvcmUvcWxpc3QuaD4KKworUVRfQkVHSU5fSEVBREVSCisKK1FUX0JFR0lO
X05BTUVTUEFDRQorCisvL1FUX01PRFVMRShRdDNEKQorCitjbGFzcyBRX1FUM0RfRVhQT1JUIFFB
cmVhQWxsb2NhdG9yCit7CitwdWJsaWM6CisgICAgUUFyZWFBbGxvY2F0b3IoY29uc3QgUVNpemUg
JnNpemUpOworICAgIHZpcnR1YWwgflFBcmVhQWxsb2NhdG9yKCk7CisKKyAgICBRU2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBRU2l6ZSBtaW5pbXVtQWxsb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbWluQWxsb2M7IH0KKyAgICB2b2lkIHNldE1pbmltdW1BbGxv
Y2F0aW9uKGNvbnN0IFFTaXplICZzaXplKSB7IG1fbWluQWxsb2MgPSBzaXplOyB9CisKKyAgICBR
U2l6ZSBtYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcmdpbjsgfQorICAgIHZvaWQgc2V0TWFy
Z2luKGNvbnN0IFFTaXplICZtYXJnaW4pIHsgbV9tYXJnaW4gPSBtYXJnaW47IH0KKworICAgIHZp
cnR1YWwgdm9pZCBleHBhbmQoY29uc3QgUVNpemUgJnNpemUpOworICAgIHZvaWQgZXhwYW5kQnko
Y29uc3QgUVNpemUgJnNpemUpOworCisgICAgdmlydHVhbCBRUmVjdCBhbGxvY2F0ZShjb25zdCBR
U2l6ZSAmc2l6ZSkgPSAwOworICAgIHZpcnR1YWwgUUxpc3Q8UVJlY3Q+IGFsbG9jYXRlKGNvbnN0
IFFMaXN0PFFTaXplPiAmc2l6ZXMpOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlKGNvbnN0IFFS
ZWN0ICZyZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBRTGlzdDxRUmVjdD4g
JnJlY3RzKTsKKworICAgIHZpcnR1YWwgaW50IG92ZXJoZWFkKCkgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICBRU2l6ZSBtX3NpemU7CisgICAgUVNpemUgbV9taW5BbGxvYzsKKyAgICBRU2l6ZSBt
X21hcmdpbjsKKworICAgIFFTaXplIHJvdW5kQWxsb2NhdGlvbihjb25zdCBRU2l6ZSAmc2l6ZSkg
Y29uc3Q7Cit9OworCitjbGFzcyBRX1FUM0RfRVhQT1JUIFFTaW1wbGVBcmVhQWxsb2NhdG9yIDog
cHVibGljIFFBcmVhQWxsb2NhdG9yCit7CitwdWJsaWM6CisgICAgUVNpbXBsZUFyZWFBbGxvY2F0
b3IoY29uc3QgUVNpemUgJnNpemUpOworICAgIHZpcnR1YWwgflFTaW1wbGVBcmVhQWxsb2NhdG9y
KCk7CisKKyAgICBRUmVjdCBhbGxvY2F0ZShjb25zdCBRU2l6ZSAmc2l6ZSk7CisKK3ByaXZhdGU6
CisgICAgaW50IG1fcm93OworICAgIGludCBtX2NvbHVtbjsKKyAgICBpbnQgbV9yb3dIZWlnaHQ7
Cit9OworCitjbGFzcyBRX1FUM0RfRVhQT1JUIFFHZW5lcmFsQXJlYUFsbG9jYXRvciA6IHB1Ymxp
YyBRQXJlYUFsbG9jYXRvcgoreworcHVibGljOgorICAgIFFHZW5lcmFsQXJlYUFsbG9jYXRvcihj
b25zdCBRU2l6ZSAmc2l6ZSk7CisgICAgdmlydHVhbCB+UUdlbmVyYWxBcmVhQWxsb2NhdG9yKCk7
CisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBRU2l6ZSAmc2l6ZSk7CisgICAgUVJlY3QgYWxsb2Nh
dGUoY29uc3QgUVNpemUgJnNpemUpOworICAgIHZvaWQgcmVsZWFzZShjb25zdCBRUmVjdCAmcmVj
dCk7CisgICAgaW50IG92ZXJoZWFkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZW51bSBTcGxp
dCB7IFNwbGl0T25YLCBTcGxpdE9uWSB9OworCisgICAgc3RydWN0IE5vZGUKKyAgICB7CisgICAg
ICAgIFFSZWN0IHJlY3Q7CisgICAgICAgIFFTaXplIGxhcmdlc3RGcmVlOworICAgICAgICBOb2Rl
ICpwYXJlbnQ7CisgICAgICAgIE5vZGUgKmxlZnQ7CisgICAgICAgIE5vZGUgKnJpZ2h0OworICAg
IH07CisKKyAgICBOb2RlICptX3Jvb3Q7CisgICAgaW50IG1fbm9kZUNvdW50OworCisgICAgc3Rh
dGljIHZvaWQgZnJlZU5vZGUoTm9kZSAqbm9kZSk7CisgICAgUVBvaW50IGFsbG9jYXRlRnJvbU5v
ZGUoY29uc3QgUVNpemUgJnNpemUsIE5vZGUgKm5vZGUpOworICAgIE5vZGUgKnNwbGl0Tm9kZShO
b2RlICpub2RlLCBTcGxpdCBzcGxpdCk7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZy
ZWUoTm9kZSAqbm9kZSk7Cit9OworCitjbGFzcyBRX1FUM0RfRVhQT1JUIFFVbmlmb3JtQXJlYUFs
bG9jYXRvciA6IHB1YmxpYyBRQXJlYUFsbG9jYXRvcgoreworcHVibGljOgorICAgIFFVbmlmb3Jt
QXJlYUFsbG9jYXRvcihjb25zdCBRU2l6ZSAmc2l6ZSwgY29uc3QgUVNpemUgJnVuaWZvcm1TaXpl
KTsKKyAgICB2aXJ0dWFsIH5RVW5pZm9ybUFyZWFBbGxvY2F0b3IoKTsKKworICAgIFFTaXplIHVu
aWZvcm1TaXplKCkgY29uc3QgeyByZXR1cm4gbV91bmlmb3JtU2l6ZTsgfQorCisgICAgdm9pZCBl
eHBhbmQoY29uc3QgUVNpemUgJnNpemUpOworICAgIFFSZWN0IGFsbG9jYXRlKGNvbnN0IFFTaXpl
ICZzaXplKTsKKyAgICB2b2lkIHJlbGVhc2UoY29uc3QgUVJlY3QgJnJlY3QpOworICAgIGludCBv
dmVyaGVhZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFFTaXplIG1fdW5pZm9ybVNpemU7Cisg
ICAgUVNpemUgbV9ncmlkU2l6ZTsKKyAgICBpbnQgKm1fZ3JpZDsKKyAgICBpbnQgbV9maXJzdEZy
ZWU7Cit9OworCitRVF9FTkRfTkFNRVNQQUNFCisKK1FUX0VORF9IRUFERVIKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157952</attachid>
            <date>2012-08-13 03:44:44 -0700</date>
            <delta_ts>2012-08-13 03:55:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93606-20120813124409.patch</filename>
            <type>text/plain</type>
            <size>28506</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGE5NWJkOWFlNjk0ZmQx
ZTU0M2M1YTg3NzVjODU0ZTA2YjEwYThlMi4uZjQwODE2ZjA2YjI2YzFkZWE5ZDkyODRkMjBjYWRj
MTIyMjkxMmQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA4LTEzICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFtR
dF0gVXBkYXRlQXRsYXMgaXMgd2FzdGluZyBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wb3J0ZWQgYW5kIFFBcmVhQWxsb2NhdG9yIGZyb20g
UXQzRCBhbmQgcG9ydGVkIGl0IHRvIFdlYkNvcmUgc3R5bGUsCisgICAgICAgIGFuZCB1c2UgdGhp
cyBuZXcgYXJlYSBhbGxvY2F0b3IgdG8gcmVwbGFjZSBvbGQgb25lIGZyb20gVXBkYXRlQXRsYXMu
CisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9B
cmVhQWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6
OkFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjp+QXJlYUFs
bG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZCk6CisgICAg
ICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KToKKyAgICAgICAgKFdlYktpdDo6
QXJlYUFsbG9jYXRvcjo6cmVsZWFzZSk6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6
Om92ZXJoZWFkKToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVh
QWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6On5HZW5l
cmFsQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9y
OjpmcmVlTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpleHBh
bmQpOgorICAgICAgICAoV2ViS2l0OjpmaXRzV2l0aGluKToKKyAgICAgICAgKFdlYktpdDo6R2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFy
ZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFs
QXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFB
bGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFy
ZWFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFsQXJlYUFsbG9j
YXRvcjo6b3ZlcmhlYWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2Nh
dG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28pOgorICAgICAg
ICAoQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNpemUp
OgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjptaW5pbXVtQWxsb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNldE1pbmltdW1BbGxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6bWFyZ2luKToKKyAgICAgICAgKFdlYktpdDo6
QXJlYUFsbG9jYXRvcjo6c2V0TWFyZ2luKToKKyAgICAgICAgKEdlbmVyYWxBcmVhQWxsb2NhdG9y
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oOgorICAgICAgICAoTGF5
ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVB
dGxhcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2Vi
S2l0OjpVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6
OlVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0
bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oOgorICAgICAgICAoVXBkYXRlQXRsYXMpOgorCiAyMDEy
LTA4LTEyICBOdW5vIExvcGVzICA8bmxvcGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYnVp
bGQgd2l0aCByZWNlbnQgY2xhbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCA1ZmZjOGNjYjNkYWUwMmEyN2Y1
YWQ3ODY2MTFlZjlmMjE2MDc2ZDA5Li5iOGUxYWVjOGRkZmNjMDdjYmY3ZGVlMDA3NDNjZTU5MGY5
MzMzMGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM0MSw2ICszNDEsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNlYXJjaFBvcHVwTWVudS5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlZpYnJhdGlvbkNsaWVudC5oIFwKICAgICBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBcCisg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FyZWFBbGxvY2F0b3IuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oIFwKQEAg
LTcwMiw2ICs3MDMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvcXQvV2ViUG9wdXBNZW51UXQuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQXJlYUFsbG9jYXRvci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRh
cHRlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xMDQyZTZhZmZkYzEzYzU1ODhjODNkYmY4ZDVjNGJjYTRmMmYyZmE0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0FyZWFBbGxvY2F0b3IuY3Bw
CkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK0FyZWFBbGxvY2F0b3I6OkFyZWFBbGxvY2F0b3IoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fc2l6ZShzaXplKQorICAgICwgbV9t
aW5BbGxvYygxLCAxKQorICAgICwgbV9tYXJnaW4oMCwgMCkKK3sKK30KKworQXJlYUFsbG9jYXRv
cjo6fkFyZWFBbGxvY2F0b3IoKQoreworfQorCit2b2lkIEFyZWFBbGxvY2F0b3I6OmV4cGFuZChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIG1fc2l6ZS5leHBhbmRlZFRvKHNp
emUpOworfQorCit2b2lkIEFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpCit7CisgICAgbV9zaXplICs9IHNpemU7Cit9CisKK3ZvaWQgQXJlYUFsbG9j
YXRvcjo6cmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIFFfVU5V
U0VEKHJlY3QpOworfQorCitpbnQgQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAorewor
ICAgIHJldHVybiAwOworfQorCitXZWJDb3JlOjpJbnRTaXplIEFyZWFBbGxvY2F0b3I6OnJvdW5k
QWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlu
dCB3aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7CisgICAgaW50IGhlaWdo
dCA9IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKKyAgICBpbnQgZXh0cmEgPSB3
aWR0aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIHdpZHRo
ICs9IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOworICAgIGV4dHJhID0gaGVpZ2h0ICUgbV9t
aW5BbGxvYy5oZWlnaHQoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIGhlaWdodCArPSBtX21p
bkFsbG9jLmhlaWdodCgpIC0gZXh0cmE7CisgICAgcmV0dXJuIFdlYkNvcmU6OkludFNpemUod2lk
dGgsIGhlaWdodCk7Cit9CisKK0dlbmVyYWxBcmVhQWxsb2NhdG9yOjpHZW5lcmFsQXJlYUFsbG9j
YXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQorICAgIDogQXJlYUFsbG9jYXRvcihX
ZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhzaXplKSkKK3sKKyAgICBtX3Jvb3QgPSBuZXcgTm9kZSgp
OworICAgIG1fcm9vdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsK
KyAgICBtX3Jvb3QtPnBhcmVudCA9IDA7CisgICAgbV9yb290LT5sZWZ0ID0gMDsKKyAgICBtX3Jv
b3QtPnJpZ2h0ID0gMDsKKyAgICBtX25vZGVDb3VudCA9IDE7CisgICAgc2V0TWluaW11bUFsbG9j
YXRpb24oV2ViQ29yZTo6SW50U2l6ZSg4LCA4KSk7Cit9CisKK0dlbmVyYWxBcmVhQWxsb2NhdG9y
Ojp+R2VuZXJhbEFyZWFBbGxvY2F0b3IoKQoreworICAgIGZyZWVOb2RlKG1fcm9vdCk7Cit9CisK
K3ZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmZyZWVOb2RlKE5vZGUgKm5vZGUpCit7CisgICAg
aWYgKG5vZGUpIHsKKyAgICAgICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7CisgICAgICAgIGZyZWVO
b2RlKG5vZGUtPnJpZ2h0KTsKKyAgICB9CisgICAgZGVsZXRlIG5vZGU7Cit9CisKK3ZvaWQgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OmV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQor
eworICAgIEFyZWFBbGxvY2F0b3I6OmV4cGFuZChXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhzaXpl
KSk7CisKKyAgICBpZiAobV9yb290LT5yZWN0LnNpemUoKSA9PSBtX3NpemUpCisgICAgICAgIHJl
dHVybjsgLy8gTm8gY2hhbmdlLgorICAgIGlmICghbV9yb290LT5sZWZ0ICYmIG1fcm9vdC0+bGFy
Z2VzdEZyZWUud2lkdGgoKSA+IDApIHsKKyAgICAgICAgLy8gTm8gYWxsb2NhdGlvbnMgaGF2ZSBv
Y2N1cnJlZCwgc28ganVzdCBhZGp1c3QgdGhlIHJvb3Qgc2l6ZS4KKyAgICAgICAgbV9yb290LT5y
ZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIEFkZCBleHRyYSBub2RlcyBhYm92ZSB0aGUgY3VycmVudCBy
b290IHRvIGV4cGFuZCB0aGUgdHJlZS4KKyAgICBOb2RlKiBvbGRSb290ID0gbV9yb290OworICAg
IFNwbGl0IHNwbGl0OworICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3NpemUuaGVpZ2h0KCkp
CisgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgZWxzZQorICAgICAgICBzcGxpdCA9IFNw
bGl0T25ZOworICAgIHdoaWxlIChtX3Jvb3QtPnJlY3Quc2l6ZSgpICE9IG1fc2l6ZSkgeworICAg
ICAgICBpZiAobV9yb290LT5yZWN0LndpZHRoKCkgPT0gbV9zaXplLndpZHRoKCkpCisgICAgICAg
ICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICBlbHNlIGlmIChtX3Jvb3QtPnJlY3QuaGVp
Z2h0KCkgPT0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsK
KyAgICAgICAgTm9kZSogcGFyZW50ID0gbmV3IE5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQg
PSBuZXcgTm9kZSgpOworICAgICAgICBtX25vZGVDb3VudCArPSAyOworICAgICAgICBtX3Jvb3Qt
PnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgcGFyZW50LT5wYXJlbnQgPSAwOworICAgICAgICBw
YXJlbnQtPmxlZnQgPSBtX3Jvb3Q7CisgICAgICAgIHBhcmVudC0+cmlnaHQgPSByaWdodDsKKyAg
ICAgICAgcGFyZW50LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7CisgICAgICAg
IHJpZ2h0LT5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHJpZ2h0LT5sZWZ0ID0gMDsKKyAgICAg
ICAgcmlnaHQtPnJpZ2h0ID0gMDsKKyAgICAgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gbV9yb290
LT5yZWN0LnNpemUoKTsKKyAgICAgICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7CisgICAgICAg
ICAgICBwYXJlbnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1f
cm9vdC0+cmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpICogMiwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgp
ICsgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC55KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9v
dC0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJlbnQt
PnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcm9vdC0+
cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkgKiAyKTsKKyAgICAgICAgICAgIHJp
Z2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJl
Y3QueSgpICsgbV9yb290LT5yZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC5oZWln
aHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3BsaXQgPSAoc3BsaXQgPT0gU3BsaXRPblggPyBT
cGxpdE9uWSA6IFNwbGl0T25YKTsKKyAgICAgICAgbV9yb290ID0gcGFyZW50OworICAgIH0KKyAg
ICB1cGRhdGVMYXJnZXN0RnJlZShvbGRSb290KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGZp
dHNXaXRoaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSAmc2l6ZTEsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUgJnNpemUyKQoreworICAgIHJldHVybiBzaXplMS53aWR0aCgpIDw9IHNpemUyLndpZHRo
KCkgJiYgc2l6ZTEuaGVpZ2h0KCkgPD0gc2l6ZTIuaGVpZ2h0KCk7Cit9CisKK1dlYkNvcmU6Oklu
dFJlY3QgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUgJnNpemUpCit7CisgICAgV2ViQ29yZTo6SW50U2l6ZSByb3VuZGVkID0gcm91bmRBbGxvY2F0
aW9uKHNpemUpOworICAgIHJvdW5kZWQgPSBXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhyb3VuZGVk
KTsKKyAgICBpZiAocm91bmRlZC53aWR0aCgpIDw9IDAgfHwgcm91bmRlZC53aWR0aCgpID4gbV9z
aXplLndpZHRoKCkKKyAgICAgICAgfHwgcm91bmRlZC5oZWlnaHQoKSA8PSAwIHx8IHJvdW5kZWQu
aGVpZ2h0KCkgPiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRS
ZWN0KCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHJv
dW5kZWQsIG1fcm9vdCk7CisgICAgaWYgKHBvaW50LngoKSA+PSAwKQorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6SW50UmVjdChwb2ludCwgc2l6ZSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkludFJl
Y3QoKTsKK30KKworV2ViQ29yZTo6SW50UG9pbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9j
YXRlRnJvbU5vZGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSAmc2l6ZSwgTm9kZSAqbm9kZSkKK3sK
KyAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8gaW5zZXJ0IGludG8sIHdoaWNoIHNob3VsZCBi
ZQorICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgdW51c2VkIHNwYWNlIHRo
YXQgaXMKKyAgICAvLyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHJlcXVlc3RlZCBzaXplLgor
ICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIC8vIEdvIGRvd24gYSBsZXZlbCBhbmQgZGV0ZXJt
aW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0CisgICAgICAgIC8vIHN1Yi10cmVlIGNvbnRhaW5zIHRo
ZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgorICAgICAgICBOb2RlKiBsZWZ0ID0gbm9kZS0+
bGVmdDsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5yaWdodDsKKyAgICAgICAgaWYgKGxl
ZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAg
IGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0LT5sYXJnZXN0RnJlZSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2VzdEZyZWUud2lkdGgoKSA8IHJpZ2h0LT5sYXJn
ZXN0RnJlZS53aWR0aCgpCisgICAgICAgICAgICAgICAgICAgIHx8IGxlZnQtPmxhcmdlc3RGcmVl
LmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1ZXMgbWF5IGJlIGEgbGl0dGxlIG92ZXJzaXpl
ZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gdHJ5IHRoZSBsZWZ0IHN1Yi10cmVlIGFuZCB0
aGVuIHRoZSByaWdodCBzdWItdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SW50
UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIGxlZnQpOworICAgICAgICAgICAg
ICAgICAgICBpZiAocG9pbnQueCgpID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUZyb21Ob2RlKHNp
emUsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZSA9IHJp
Z2h0OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbm9kZSA9IGxlZnQ7Cisg
ICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2Vz
dEZyZWUpKQorICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OworICAgICAgICBlbHNlIGlmIChsZWZ0
IHx8IHJpZ2h0KSB7CisgICAgICAgICAgICAvLyBOZWl0aGVyIHN1Yi1ub2RlIGhhcyBlbm91Z2gg
c3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRQ
b2ludCgtMSwgLTEpOworICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oc2l6ZSwgbm9kZS0+
bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHNwbGl0IHRoaXMg
bm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPworICAgICAgICAgICAgU3BsaXQgc3BsaXQ7CisgICAg
ICAgICAgICBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUud2lkdGgoKSAqIDIs
IHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAg
ICAgLy8gU3BsaXQgaW4gZWl0aGVyIGRpcmVjdGlvbjogY2hvb3NlIHRoZSBpbnZlcnNlIG9mCisg
ICAgICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBub2RlJ3Mgc3BsaXQgZGlyZWN0aW9uIHRvIHRy
eSB0byBiYWxhbmNlCisgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSB3YXN0ZWQgc3BhY2UgYXMg
ZnVydGhlciBzdWJkaXZpc2lvbnMgaGFwcGVuLgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5w
YXJlbnQKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0Lngo
KSA9PSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0LngoKSkKKyAgICAgICAgICAgICAgICAgICAg
c3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5wYXJlbnQp
CisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+cmVjdC53aWR0aCgpID49IG5vZGUtPnJlY3QuaGVpZ2h0KCkpCisgICAg
ICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAgICAgfSBlbHNl
IGlmIChmaXRzV2l0aGluKFdlYkNvcmU6OkludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5o
ZWlnaHQoKSksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0
IGFsb25nIHRoZSBYIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25Y
OworICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6OkludFNpemUoc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAg
ICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBZIGRpcmVjdGlvbi4KKyAgICAgICAgICAg
ICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVydGhlciAtIGFsbG9jYXRlIHRoaXMgbm9kZS4KKyAgICAg
ICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IFdlYkNvcmU6OkludFNpemUoMCwgMCk7Cisg
ICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9kZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28gYXJvdW5kIGFnYWluIHVzaW5nIHRoZSBsZWZ0
IHN1Yi10cmVlLgorICAgICAgICAgICAgbm9kZSA9IHNwbGl0Tm9kZShub2RlLCBzcGxpdCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBDYW5ub3QgcG9zc2libHkgZml0IGludG8g
dGhpcyBub2RlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIFdlYkNvcmU6OkludFBvaW50KC0xLCAtMSk7Cit9CisKK0dlbmVyYWxBcmVhQWxsb2NhdG9y
OjpOb2RlICpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlCisgICAgKE5vZGUqIG5vZGUs
IFNwbGl0IHNwbGl0KQoreworICAgIE5vZGUqIGxlZnQgPSBuZXcgTm9kZSgpOworICAgIE5vZGUq
IHJpZ2h0ID0gbmV3IE5vZGUoKTsKKyAgICBtX25vZGVDb3VudCArPSAyOworICAgIGxlZnQtPnBh
cmVudCA9IG5vZGU7CisgICAgbGVmdC0+bGVmdCA9IDA7CisgICAgbGVmdC0+cmlnaHQgPSAwOwor
ICAgIHJpZ2h0LT5wYXJlbnQgPSBub2RlOworICAgIHJpZ2h0LT5sZWZ0ID0gMDsKKyAgICByaWdo
dC0+cmlnaHQgPSAwOworICAgIG5vZGUtPmxlZnQgPSBsZWZ0OworICAgIG5vZGUtPnJpZ2h0ID0g
cmlnaHQ7CisgICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7CisgICAgICAgIGxlZnQtPnJlY3Qg
PSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwg
bm9kZS0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50
UmVjdChsZWZ0LT5yZWN0Lm1heFgoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0
LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0LT5yZWN0ID0gV2ViQ29yZTo6
SW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWln
aHQoKSAvIDIpOworICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+
cmVjdC54KCksIGxlZnQtPnJlY3QubWF4WSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7
CisgICAgfQorICAgIGxlZnQtPmxhcmdlc3RGcmVlID0gbGVmdC0+cmVjdC5zaXplKCk7CisgICAg
cmlnaHQtPmxhcmdlc3RGcmVlID0gcmlnaHQtPnJlY3Quc2l6ZSgpOworICAgIG5vZGUtPmxhcmdl
c3RGcmVlID0gcmlnaHQtPmxhcmdlc3RGcmVlOworICAgIHJldHVybiBsZWZ0OworfQorCit2b2lk
IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjp1cGRhdGVMYXJnZXN0RnJlZShOb2RlKiBub2RlKQorewor
ICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnBhcmVudCkpIHsKKyAgICAgICAgbm9kZS0+bGFyZ2Vz
dEZyZWUgPQorICAgICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSgKKyAgICAgICAgICAgICAgICBx
TWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCksIG5vZGUtPnJpZ2h0LT5sYXJnZXN0
RnJlZS53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICBxTWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RG
cmVlLmhlaWdodCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkpCisgICAgICAg
ICAgICApOworICAgIH0KK30KKwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6cmVsZWFzZShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIC8vIExvY2F0ZSB0aGUgbm9kZSB0
aGF0IGNvbnRhaW5zIHRoZSBhbGxvY2F0ZWQgcmVnaW9uLgorICAgIE5vZGUqIG5vZGUgPSBtX3Jv
b3Q7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAg
d2hpbGUgKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+cmVj
dC5jb250YWlucyhwb2ludCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+bGVmdDsKKyAgICAg
ICAgZWxzZSBpZiAobm9kZS0+cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnJlY3QuY29udGFpbnMocG9p
bnQpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnJpZ2h0OworICAgICAgICBlbHNlIGlmIChu
b2RlLT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm47IC8vIFBvaW50IGlzIGNvbXBsZXRlbHkgb3V0c2lkZSB0
aGUgdHJlZS4KKyAgICB9CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBNYXJrIHRoZSBub2RlIGFzIGZyZWUgYW5kIHRoZW4gd29yayB1cHdhcmRzIHRocm91Z2ggdGhl
IHRyZWUKKyAgICAvLyByZWNvbWJpbmluZyBhbmQgZGVsZXRpbmcgbm9kZXMgdW50aWwgd2UgcmVh
Y2ggYSBzaWJsaW5nCisgICAgLy8gdGhhdCBpcyBzdGlsbCBhbGxvY2F0ZWQuCisgICAgbm9kZS0+
bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0LnNpemUoKTsKKyAgICB3aGlsZSAobm9kZS0+cGFyZW50
KSB7CisgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUtPnBhcmVudC0+cmlnaHQtPmxhcmdlc3RGcmVlICE9IG5vZGUtPnBhcmVudC0+
cmlnaHQtPnJlY3Quc2l6ZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdC0+bGFyZ2VzdEZyZWUgIT0g
bm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LnNpemUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50OworICAgICAgICBmcmVlTm9k
ZShub2RlLT5sZWZ0KTsKKyAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOworICAgICAgICBt
X25vZGVDb3VudCAtPSAyOworICAgICAgICBub2RlLT5sZWZ0ID0gMDsKKyAgICAgICAgbm9kZS0+
cmlnaHQgPSAwOworICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgp
OworICAgIH0KKworICAgIC8vIE1ha2UgdGhlIHJlc3Qgb2Ygb3VyIGFuY2VzdG9ycyBoYXZlIHRo
ZSBjb3JyZWN0ICJsYXJnZXN0IGZyZWUgc2l6ZSIuCisgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9k
ZSk7Cit9CisKK2ludCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX25vZGVDb3VudCAqIHNpemVvZihOb2RlKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxs
b2NhdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRv
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU5NzhiZmU4ZDU2ZWI0NWY0NDBiZDZhOGUzMzhjY2E0ZWQ0NzFhYWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJl
YUFsbG9jYXRvci5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJlYUFsbG9jYXRvcl9oCisjZGVmaW5lIEFyZWFB
bGxvY2F0b3JfaAorCisjaW5jbHVkZSA8SW50UG9pbnQuaD4KKyNpbmNsdWRlIDxJbnRSZWN0Lmg+
CisjaW5jbHVkZSA8SW50U2l6ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitpbmxpbmUgaW50
IG5leHRQb3dlck9mVHdvKGludCBudW1iZXIpCit7CisgICAgLy8gVGhpcyBpcyBhIGZhc3QgdHJp
Y2sgdG8gZ2V0IG5leHRQb3dlck9mVHdvIGZvciBhbiBpbnRlZ2VyLgorICAgIC0tbnVtYmVyOwor
ICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDI7Cisg
ICAgbnVtYmVyIHw9IG51bWJlciA+PiA0OworICAgIG51bWJlciB8PSBudW1iZXIgPj4gODsKKyAg
ICBudW1iZXIgfD0gbnVtYmVyID4+IDE2OworICAgIG51bWJlcisrOworICAgIHJldHVybiBudW1i
ZXI7Cit9CisKK2lubGluZSBJbnRTaXplIG5leHRQb3dlck9mVHdvKGNvbnN0IEludFNpemUmIHNp
emUpCit7CisgICAgcmV0dXJuIEludFNpemUobmV4dFBvd2VyT2ZUd28oc2l6ZS53aWR0aCgpKSwg
bmV4dFBvd2VyT2ZUd28oc2l6ZS5oZWlnaHQoKSkpOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQXJlYUFsbG9jYXRvciB7CitwdWJsaWM6
CisgICAgQXJlYUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdmlydHVh
bCB+QXJlYUFsbG9jYXRvcigpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1pbmltdW1BbGxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9taW5BbGxvYzsgfQorICAgIHZvaWQgc2V0TWluaW11bUFs
bG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgeyBtX21pbkFsbG9jID0gc2l6
ZTsgfQorCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21h
cmdpbjsgfQorICAgIHZvaWQgc2V0TWFyZ2luKGNvbnN0IFdlYkNvcmU6OkludFNpemUgJm1hcmdp
bikgeyBtX21hcmdpbiA9IG1hcmdpbjsgfQorCisgICAgdmlydHVhbCB2b2lkIGV4cGFuZChjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdm9pZCBleHBhbmRCeShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgYWxsb2NhdGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGludCBvdmVyaGVhZCgpIGNvbnN0Owor
Citwcm90ZWN0ZWQ6CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CisgICAgV2ViQ29yZTo6
SW50U2l6ZSBtX21pbkFsbG9jOworICAgIFdlYkNvcmU6OkludFNpemUgbV9tYXJnaW47CisKKyAg
ICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kQWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JikgY29uc3Q7Cit9OworCitjbGFzcyBHZW5lcmFsQXJlYUFsbG9jYXRvciA6IHB1YmxpYyBBcmVh
QWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBHZW5lcmFsQXJlYUFsbG9jYXRvcihjb25zdCBXZWJD
b3JlOjpJbnRTaXplJik7CisgICAgdmlydHVhbCB+R2VuZXJhbEFyZWFBbGxvY2F0b3IoKTsKKwor
ICAgIHZvaWQgZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IGFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIHJlbGVh
c2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIGludCBvdmVyaGVhZCgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGVudW0gU3BsaXQgeyBTcGxpdE9uWCwgU3BsaXRPblkgfTsKKworICAg
IHN0cnVjdCBOb2RlIHsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0OworICAgICAgICBX
ZWJDb3JlOjpJbnRTaXplIGxhcmdlc3RGcmVlOworICAgICAgICBOb2RlICpwYXJlbnQ7CisgICAg
ICAgIE5vZGUgKmxlZnQ7CisgICAgICAgIE5vZGUgKnJpZ2h0OworICAgIH07CisKKyAgICBOb2Rl
ICptX3Jvb3Q7CisgICAgaW50IG1fbm9kZUNvdW50OworCisgICAgc3RhdGljIHZvaWQgZnJlZU5v
ZGUoTm9kZSopOworICAgIFdlYkNvcmU6OkludFBvaW50IGFsbG9jYXRlRnJvbU5vZGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIE5vZGUqKTsKKyAgICBOb2RlICpzcGxpdE5vZGUoTm9kZSosIFNw
bGl0KTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVMYXJnZXN0RnJlZShOb2RlKik7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKaW5kZXggNzA5NWM0MzhiZmU2NDlmZTIz
NmVjZmEzYjg3MWNmOGY0NDAzZGVlMC4uZDYzNzYyY2IyZjUwMTMxZjQ1YmJmMWRlY2FmMGU2ZmVk
NjMyYWI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmNwcApAQCAtNjAxLDcgKzYwMSw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnJlbmRlck5leHRGcmFtZSgpCiAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7
CiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3Vw
ZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS5kaWRT
d2FwQnVmZmVycygpOworICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0tPmRpZFN3YXBCdWZmZXJz
KCk7CiB9CiAKIGJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVz
QWxsb3dlZCgpIGNvbnN0CkBAIC02MjMsMTggKzYyMywxNyBAQCBQYXNzT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0
ZShjbwogewogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29u
dGV4dDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBVcGRhdGVBdGxhcyYgYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV07Ci0g
ICAgICAgIGlmIChhdGxhcy5mbGFncygpID09IGZsYWdzKSB7CisgICAgICAgIFVwZGF0ZUF0bGFz
KiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGF0bGFzLT5m
bGFncygpID09IGZsYWdzKSB7CiAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwg
aWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4KLSAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dCA9IGF0bGFzLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUs
IHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy0+YmVn
aW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKICAgICAg
ICAgICAgIGlmIChncmFwaGljc0NvbnRleHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBo
aWNzQ29udGV4dC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgY29u
c3QgaW50IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAyMDAwOwotICAgIG1fdXBkYXRlQXRsYXNl
cy5hcHBlbmQoVXBkYXRlQXRsYXMoU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKTsKLSAg
ICByZXR1cm4gbV91cGRhdGVBdGxhc2VzLmxhc3QoKS5iZWdpblBhaW50aW5nT25BdmFpbGFibGVC
dWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOworICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQo
YWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHNpemUsIGZsYWdzKSkpOworICAgIHJldHVybiBtX3Vw
ZGF0ZUF0bGFzZXMubGFzdCgpLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxl
LCBzaXplLCBvZmZzZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCmluZGV4IDNmZDU5ZDIx
ODFmMzI3OTM4ZmM1N2QwNmQyZDRkMTgyNDc5ZjFiYjMuLjAyOWNmN2RmYjYzZWQ3Mjc4NDRlODVm
OTZjZTc3ZmRhYjNmZWY4NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IuaApAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAKICAgICBI
YXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExh
eWVyczsKICAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlZkNvdW50czsKLSAgICBWZWN0b3I8VXBkYXRlQXRsYXM+IG1fdXBkYXRlQXRsYXNlczsKKyAg
ICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKIAogICAgIGJv
b2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CiAgICAgYm9vbCBtX2lzVmFsaWQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRs
YXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNw
cAppbmRleCA1ODg2OWYzOTk3NjgwMzAwMWIwM2FlYTkwNWExMWQ2ODIxYjNkYjdlLi41M2M3MmUw
OTdlZjdhNjkzMGZiMjM2NDkxOGZjMzM4MjkyODg3MTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKQEAgLTIyLDEyMiArMjIsNjUg
QEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAorI2luY2x1ZGUgIkFyZWFBbGxv
Y2F0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotVXBkYXRl
QXRsYXM6OlVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3Mg
ZmxhZ3MpCitVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoY29uc3QgSW50U2l6ZSYgZGltZW5zaW9u
LCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQogICAgIDogbV9mbGFncyhmbGFncykKIHsK
LSAgICBtX3N1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUoSW50U2l6ZShkaW1lbnNp
b24sIGRpbWVuc2lvbiksIGZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpTdXBwb3J0c0dyYXBoaWNz
U3VyZmFjZSk7CisgICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28oZGltZW5zaW9uLmV4
cGFuZGVkVG8oSW50U2l6ZSgxMDI0LCAxMDI0KSkpOworICAgIG1fc3VyZmFjZSA9IFNoYXJlYWJs
ZVN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3VwcG9ydHNH
cmFwaGljc1N1cmZhY2UpOwogfQogCi1zdGF0aWMgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1i
ZXIpCitVcGRhdGVBdGxhczo6flVwZGF0ZUF0bGFzKCkKIHsKLSAgICAvLyBUaGlzIGlzIGEgZmFz
dCB0cmljayB0byBnZXQgbmV4dFBvd2VyT2ZUd28gZm9yIGFuIGludGVnZXIuCi0gICAgLS1udW1i
ZXI7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAxOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4g
MjsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDQ7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiA4
OwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTY7Ci0gICAgbnVtYmVyKys7Ci0gICAgcmV0dXJu
IG51bWJlcjsKIH0KIAogdm9pZCBVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCgpCiB7
Ci0gICAgaWYgKCFtX2xheW91dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0
YXRpYyBjb25zdCBpbnQgTWluVGlsZVNpemUgPSAzMjsKLSAgICBzdGF0aWMgY29uc3QgaW50IE1h
eFRpbGVTaXplID0gNTEyOwotCi0gICAgLy8gRGl2aWRlIG91ciBzcXVhcmUgdG8gc3F1YXJlIHBv
d2VyLW9mLXR3byBib3hlcy4KLSAgICBmb3IgKGludCBjdXJzb3IgPSAwOyBjdXJzb3IgPCBzaXpl
KCkud2lkdGgoKTsgKSB7Ci0gICAgICAgIGludCByZW1haW5kZXIgPSBzaXplKCkud2lkdGgoKSAt
IGN1cnNvcjsKLSAgICAgICAgaW50IGRpbWVuc2lvbiA9IHN0ZDo6bWluKHJlbWFpbmRlciwgc3Rk
OjptaW4oTWF4VGlsZVNpemUsIHN0ZDo6bWF4KE1pblRpbGVTaXplLCBuZXh0UG93ZXJPZlR3byhy
ZW1haW5kZXIgLyAyKSkpKTsKLSAgICAgICAgY3Vyc29yICs9IGRpbWVuc2lvbjsKLSAgICAgICAg
bV9sYXlvdXQuYXBwZW5kKGRpbWVuc2lvbik7Ci0gICAgfQotCi0gICAgbV9idWZmZXJTdGF0ZXMu
cmVzaXplKG1fbGF5b3V0LnNpemUoKSAqIG1fbGF5b3V0LnNpemUoKSk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtX2J1ZmZlclN0YXRlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9idWZmZXJT
dGF0ZXNbaV0gPSBBdmFpbGFibGU7Ci19Ci0KLWludCBVcGRhdGVBdGxhczo6ZmluZEF2YWlsYWJs
ZUluZGV4KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgaW50IGRpbWVuc2lv
biA9IG1fbGF5b3V0LnNpemUoKTsKLSAgICBpbnQgc3RyaWRlID0gZGltZW5zaW9uOwotICAgIGlu
dCByZXF1aXJlZERpbWVuc2lvbiA9IHN0ZDo6bWF4KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7Ci0KLSAgICAvLyBCZWdpbiBmcm9tIHRoZSBzbWFsbGVzdCBidWZmZXIsIHVudGlsIHdlIHJl
YWNoIHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgYnVmZmVyIHRoYXQncyBiaWcgZW5vdWdoIHRvIGNv
bnRhaW4gb3VyIHJlY3QuCi0gICAgZm9yIChpbnQgaSA9IG1fYnVmZmVyU3RhdGVzLnNpemUoKSAt
IDE7IGkgPj0gMDsgaSAtPSAoZGltZW5zaW9uICsgMSksIC0tc3RyaWRlKSB7Ci0gICAgICAgIC8v
IE5lZWQgYSBiaWdnZXIgYnVmZmVyLgotICAgICAgICBpZiAobV9sYXlvdXRbaSAvIGRpbWVuc2lv
bl0gPCByZXF1aXJlZERpbWVuc2lvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IC8vIENoZWNrIGFsbCBidWZmZXJzIG9mIGN1cnJlbnQgc2l6ZSwgdG8gZmluZCBhbiBhdmFpbGFi
bGUgb25lLgotICAgICAgICBmb3IgKGludCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdHJpZGU7ICsr
b2Zmc2V0KSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBpIC0gb2Zmc2V0OwotICAgICAgICAg
ICAgaWYgKG1fYnVmZmVyU3RhdGVzW2luZGV4XSA9PSBBdmFpbGFibGUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OwotICAgICAgICB9CisgICAgaWYgKCFtX2FyZWFBbGxvY2F0b3IpIHsK
KyAgICAgICAgbV9hcmVhQWxsb2NhdG9yID0gYWRvcHRQdHIobmV3IEdlbmVyYWxBcmVhQWxsb2Nh
dG9yKHNpemUoKSkpOworICAgICAgICBtX2FyZWFBbGxvY2F0b3ItPnNldE1pbmltdW1BbGxvY2F0
aW9uKEludFNpemUoMzIsIDMyKSk7CiAgICAgfQotCi0gICAgcmV0dXJuIC0xOwogfQogCiB2b2lk
IFVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycygpCiB7CisgICAgbV9hcmVhQWxsb2NhdG9yLmNs
ZWFyKCk7CiAgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbV9idWZmZXJTdGF0ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYnVmZmVyU3RhdGVzW2ld
ID0gQXZhaWxhYmxlOwogfQogCiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gVXBkYXRlQXRs
YXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihTaGFyZWFibGVTdXJmYWNlOjpIYW5k
bGUmIGhhbmRsZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgSW50UG9pbnQmIG9mZnNl
dCkKIHsKICAgICBidWlsZExheW91dElmTmVlZGVkKCk7Ci0gICAgaW50IGluZGV4ID0gZmluZEF2
YWlsYWJsZUluZGV4KHNpemUpOworICAgIFFSZWN0IHJlY3QgPSBtX2FyZWFBbGxvY2F0b3ItPmFs
bG9jYXRlKHNpemUpOwogCiAgICAgLy8gTm8gYXZhaWxhYmxlIGJ1ZmZlciB3YXMgZm91bmQsIHJl
dHVybmluZyBudWxsLgotICAgIGlmIChpbmRleCA8IDApCisgICAgaWYgKHJlY3QuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7CiAKICAgICBp
ZiAoIW1fc3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBQYXNz
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4oKTsKIAogICAgIC8vIEZJWE1FOiBVc2Ug
dHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgotICAgIG1fYnVmZmVy
U3RhdGVzW2luZGV4XSA9IFRha2VuOwotICAgIG9mZnNldCA9IG9mZnNldEZvckluZGV4KGluZGV4
KTsKLSAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc2l6ZSk7Ci0gICAgT3duUHRy
PEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoSW50UmVjdChvZmZzZXQsIHNpemUpKTsKKyAgICBvZmZzZXQgPSByZWN0LnRv
cExlZnQoKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBt
X3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKIAogICAgIGlmIChmbGFncygp
ICYgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKSB7CiAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAgICAgICBncmFw
aGljc0NvbnRleHQtPmZpbGxSZWN0KHJlY3QsIENvbG9yOjp0cmFuc3BhcmVudCwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBzaXplKSwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24o
Q29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgfQogCiAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4
dC5yZWxlYXNlKCk7CiB9CiAKLUludFBvaW50IFVwZGF0ZUF0bGFzOjpvZmZzZXRGb3JJbmRleChp
bnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgY29vcmQoaW5kZXggJSBtX2xheW91dC5z
aXplKCksIGluZGV4IC8gbV9sYXlvdXQuc2l6ZSgpKTsKLSAgICBpbnQgeCA9IDA7Ci0gICAgaW50
IHkgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29vcmQueCgpOyArK2kpCi0gICAgICAg
IHggKz0gbV9sYXlvdXRbaV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb29yZC55KCk7ICsr
aSkKLSAgICAgICAgeSArPSBtX2xheW91dFtpXTsKLQotICAgIHJldHVybiBJbnRQb2ludCh4LCB5
KTsKLX0KLQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9VcGRhdGVBdGxhcy5oCmluZGV4IDdkMjIyMzc2OWIxMmIzZjBkN2QyOTRiYzI2Zjc1OGRiMzlj
YWMwNGYuLjBkYmE0YWYyNTM5ZWM5MTM4ODYwYWNlZDU0ZjRhOGIzNmFjYmFhMDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCkBAIC0yMCw2
ICsyMCw4IEBACiAjaWZuZGVmIFVwZGF0ZUF0bGFzX2gKICNkZWZpbmUgVXBkYXRlQXRsYXNfaAog
CisjaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNs
dWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CkBAIC0zMSw4ICszMywxMCBAQCBjbGFzcyBJbnRSZWN0OwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFVwZGF0ZUF0bGFzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGVBdGxh
cyk7CiBwdWJsaWM6Ci0gICAgVXBkYXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0
bWFwOjpGbGFncyk7CisgICAgVXBkYXRlQXRsYXMoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGlt
ZW5zaW9uLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzKTsKKyAgICB+VXBkYXRlQXRsYXMoKTsKIAog
ICAgIGlubGluZSBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZh
Y2UtPnNpemUoKTsgfQogCkBAIC00MywxNyArNDcsOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBidWlsZExheW91dElmTmVlZGVkKCk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zm
c2V0Rm9ySW5kZXgoaW50KSBjb25zdDsKLSAgICBpbnQgZmluZEF2YWlsYWJsZUluZGV4KGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKTsKIAogcHJpdmF0ZToKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAg
ICAgQXZhaWxhYmxlLAotICAgICAgICBUYWtlbgotICAgIH07Ci0KLSAgICBWZWN0b3I8U3RhdGU+
IG1fYnVmZmVyU3RhdGVzOwotICAgIFZlY3RvcjxpbnQ+IG1fbGF5b3V0OworICAgIE93blB0cjxH
ZW5lcmFsQXJlYUFsbG9jYXRvcj4gbV9hcmVhQWxsb2NhdG9yOwogICAgIFNoYXJlYWJsZUJpdG1h
cDo6RmxhZ3MgbV9mbGFnczsKICAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gbV9zdXJmYWNl
OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157953</attachid>
            <date>2012-08-13 03:55:13 -0700</date>
            <delta_ts>2012-08-14 02:19:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93606-20120813125438.patch</filename>
            <type>text/plain</type>
            <size>28491</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGE5NWJkOWFlNjk0ZmQx
ZTU0M2M1YTg3NzVjODU0ZTA2YjEwYThlMi4uZjQwODE2ZjA2YjI2YzFkZWE5ZDkyODRkMjBjYWRj
MTIyMjkxMmQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA4LTEzICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFtR
dF0gVXBkYXRlQXRsYXMgaXMgd2FzdGluZyBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wb3J0ZWQgYW5kIFFBcmVhQWxsb2NhdG9yIGZyb20g
UXQzRCBhbmQgcG9ydGVkIGl0IHRvIFdlYkNvcmUgc3R5bGUsCisgICAgICAgIGFuZCB1c2UgdGhp
cyBuZXcgYXJlYSBhbGxvY2F0b3IgdG8gcmVwbGFjZSBvbGQgb25lIGZyb20gVXBkYXRlQXRsYXMu
CisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9B
cmVhQWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6
OkFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjp+QXJlYUFs
bG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZCk6CisgICAg
ICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KToKKyAgICAgICAgKFdlYktpdDo6
QXJlYUFsbG9jYXRvcjo6cmVsZWFzZSk6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6
Om92ZXJoZWFkKToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVh
QWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6On5HZW5l
cmFsQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9y
OjpmcmVlTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpleHBh
bmQpOgorICAgICAgICAoV2ViS2l0OjpmaXRzV2l0aGluKToKKyAgICAgICAgKFdlYktpdDo6R2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFy
ZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFs
QXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFB
bGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFy
ZWFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFsQXJlYUFsbG9j
YXRvcjo6b3ZlcmhlYWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2Nh
dG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28pOgorICAgICAg
ICAoQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNpemUp
OgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjptaW5pbXVtQWxsb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNldE1pbmltdW1BbGxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6bWFyZ2luKToKKyAgICAgICAgKFdlYktpdDo6
QXJlYUFsbG9jYXRvcjo6c2V0TWFyZ2luKToKKyAgICAgICAgKEdlbmVyYWxBcmVhQWxsb2NhdG9y
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oOgorICAgICAgICAoTGF5
ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVB
dGxhcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2Vi
S2l0OjpVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6
OlVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0
bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oOgorICAgICAgICAoVXBkYXRlQXRsYXMpOgorCiAyMDEy
LTA4LTEyICBOdW5vIExvcGVzICA8bmxvcGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYnVp
bGQgd2l0aCByZWNlbnQgY2xhbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCA1ZmZjOGNjYjNkYWUwMmEyN2Y1
YWQ3ODY2MTFlZjlmMjE2MDc2ZDA5Li5iOGUxYWVjOGRkZmNjMDdjYmY3ZGVlMDA3NDNjZTU5MGY5
MzMzMGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM0MSw2ICszNDEsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNlYXJjaFBvcHVwTWVudS5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlZpYnJhdGlvbkNsaWVudC5oIFwKICAgICBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBcCisg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FyZWFBbGxvY2F0b3IuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oIFwKQEAg
LTcwMiw2ICs3MDMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvcXQvV2ViUG9wdXBNZW51UXQuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQXJlYUFsbG9jYXRvci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRh
cHRlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NWMxNWRjYWE3YTdhNGI4YzRiODZiNWZiZmQwNDUxMDcyYjZjN2QwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0FyZWFBbGxvY2F0b3IuY3Bw
CkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK0FyZWFBbGxvY2F0b3I6OkFyZWFBbGxvY2F0b3IoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fc2l6ZShzaXplKQorICAgICwgbV9t
aW5BbGxvYygxLCAxKQorICAgICwgbV9tYXJnaW4oMCwgMCkKK3sKK30KKworQXJlYUFsbG9jYXRv
cjo6fkFyZWFBbGxvY2F0b3IoKQoreworfQorCit2b2lkIEFyZWFBbGxvY2F0b3I6OmV4cGFuZChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIG1fc2l6ZS5leHBhbmRlZFRvKHNp
emUpOworfQorCit2b2lkIEFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpCit7CisgICAgbV9zaXplICs9IHNpemU7Cit9CisKK3ZvaWQgQXJlYUFsbG9j
YXRvcjo6cmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKK3sKK30KKworaW50IEFyZWFB
bGxvY2F0b3I6Om92ZXJoZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworV2ViQ29y
ZTo6SW50U2l6ZSBBcmVhQWxsb2NhdG9yOjpyb3VuZEFsbG9jYXRpb24oY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCkgKyBt
X21hcmdpbi53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpICsgbV9tYXJn
aW4uaGVpZ2h0KCk7CisgICAgaW50IGV4dHJhID0gd2lkdGggJSBtX21pbkFsbG9jLndpZHRoKCk7
CisgICAgaWYgKGV4dHJhKQorICAgICAgICB3aWR0aCArPSBtX21pbkFsbG9jLndpZHRoKCkgLSBl
eHRyYTsKKyAgICBleHRyYSA9IGhlaWdodCAlIG1fbWluQWxsb2MuaGVpZ2h0KCk7CisgICAgaWYg
KGV4dHJhKQorICAgICAgICBoZWlnaHQgKz0gbV9taW5BbGxvYy5oZWlnaHQoKSAtIGV4dHJhOwor
ICAgIHJldHVybiBXZWJDb3JlOjpJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCitHZW5lcmFs
QXJlYUFsbG9jYXRvcjo6R2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2l6ZSkKKyAgICA6IEFyZWFBbGxvY2F0b3IoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28oc2l6
ZSkpCit7CisgICAgbV9yb290ID0gbmV3IE5vZGUoKTsKKyAgICBtX3Jvb3QtPnJlY3QgPSBXZWJD
b3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAg
IG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7CisgICAgbV9yb290LT5wYXJlbnQgPSAwOwor
ICAgIG1fcm9vdC0+bGVmdCA9IDA7CisgICAgbV9yb290LT5yaWdodCA9IDA7CisgICAgbV9ub2Rl
Q291bnQgPSAxOworICAgIHNldE1pbmltdW1BbGxvY2F0aW9uKFdlYkNvcmU6OkludFNpemUoOCwg
OCkpOworfQorCitHZW5lcmFsQXJlYUFsbG9jYXRvcjo6fkdlbmVyYWxBcmVhQWxsb2NhdG9yKCkK
K3sKKyAgICBmcmVlTm9kZShtX3Jvb3QpOworfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9y
OjpmcmVlTm9kZShOb2RlICpub2RlKQoreworICAgIGlmIChub2RlKSB7CisgICAgICAgIGZyZWVO
b2RlKG5vZGUtPmxlZnQpOworICAgICAgICBmcmVlTm9kZShub2RlLT5yaWdodCk7CisgICAgfQor
ICAgIGRlbGV0ZSBub2RlOworfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpleHBhbmQo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBBcmVhQWxsb2NhdG9yOjpleHBh
bmQoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28oc2l6ZSkpOworCisgICAgaWYgKG1fcm9vdC0+cmVj
dC5zaXplKCkgPT0gbV9zaXplKQorICAgICAgICByZXR1cm47IC8vIE5vIGNoYW5nZS4KKyAgICBp
ZiAoIW1fcm9vdC0+bGVmdCAmJiBtX3Jvb3QtPmxhcmdlc3RGcmVlLndpZHRoKCkgPiAwKSB7Cisg
ICAgICAgIC8vIE5vIGFsbG9jYXRpb25zIGhhdmUgb2NjdXJyZWQsIHNvIGp1c3QgYWRqdXN0IHRo
ZSByb290IHNpemUuCisgICAgICAgIG1fcm9vdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fcm9vdC0+bGFy
Z2VzdEZyZWUgPSBtX3NpemU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQg
ZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1cnJlbnQgcm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCisg
ICAgTm9kZSogb2xkUm9vdCA9IG1fcm9vdDsKKyAgICBTcGxpdCBzcGxpdDsKKyAgICBpZiAobV9z
aXplLndpZHRoKCkgPj0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICBzcGxpdCA9IFNwbGl0T25Y
OworICAgIGVsc2UKKyAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKyAgICB3aGlsZSAobV9yb290
LT5yZWN0LnNpemUoKSAhPSBtX3NpemUpIHsKKyAgICAgICAgaWYgKG1fcm9vdC0+cmVjdC53aWR0
aCgpID09IG1fc2l6ZS53aWR0aCgpKQorICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKyAg
ICAgICAgZWxzZSBpZiAobV9yb290LT5yZWN0LmhlaWdodCgpID09IG1fc2l6ZS5oZWlnaHQoKSkK
KyAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgIE5vZGUqIHBhcmVudCA9IG5l
dyBOb2RlKCk7CisgICAgICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKKyAgICAgICAgbV9u
b2RlQ291bnQgKz0gMjsKKyAgICAgICAgbV9yb290LT5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAg
IHBhcmVudC0+cGFyZW50ID0gMDsKKyAgICAgICAgcGFyZW50LT5sZWZ0ID0gbV9yb290OworICAg
ICAgICBwYXJlbnQtPnJpZ2h0ID0gcmlnaHQ7CisgICAgICAgIHBhcmVudC0+bGFyZ2VzdEZyZWUg
PSBtX3Jvb3QtPnJlY3Quc2l6ZSgpOworICAgICAgICByaWdodC0+cGFyZW50ID0gcGFyZW50Owor
ICAgICAgICByaWdodC0+bGVmdCA9IDA7CisgICAgICAgIHJpZ2h0LT5yaWdodCA9IDA7CisgICAg
ICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7CisgICAgICAgIGlm
IChzcGxpdCA9PSBTcGxpdE9uWCkgeworICAgICAgICAgICAgcGFyZW50LT5yZWN0ID0gV2ViQ29y
ZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSAq
IDIsIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9IFdl
YkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBt
X3Jvb3QtPnJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcGFyZW50LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdCht
X3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0
LmhlaWdodCgpICogMik7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJl
Y3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1fcm9vdC0+cmVjdC53aWR0
aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcm9vdC0+
cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAg
IHNwbGl0ID0gKHNwbGl0ID09IFNwbGl0T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7CisgICAg
ICAgIG1fcm9vdCA9IHBhcmVudDsKKyAgICB9CisgICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9v
dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBmaXRzV2l0aGluKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUgJnNpemUxLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplICZzaXplMikKK3sKKyAgICByZXR1
cm4gc2l6ZTEud2lkdGgoKSA8PSBzaXplMi53aWR0aCgpICYmIHNpemUxLmhlaWdodCgpIDw9IHNp
emUyLmhlaWdodCgpOworfQorCitXZWJDb3JlOjpJbnRSZWN0IEdlbmVyYWxBcmVhQWxsb2NhdG9y
OjphbGxvY2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplICZzaXplKQoreworICAgIFdlYkNvcmU6
OkludFNpemUgcm91bmRlZCA9IHJvdW5kQWxsb2NhdGlvbihzaXplKTsKKyAgICByb3VuZGVkID0g
V2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28ocm91bmRlZCk7CisgICAgaWYgKHJvdW5kZWQud2lkdGgo
KSA8PSAwIHx8IHJvdW5kZWQud2lkdGgoKSA+IG1fc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJv
dW5kZWQuaGVpZ2h0KCkgPD0gMCB8fCByb3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgp
KQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdCgpOworICAgIFdlYkNvcmU6OkludFBv
aW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShyb3VuZGVkLCBtX3Jvb3QpOworICAgIGlmIChw
b2ludC54KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QocG9pbnQsIHNp
emUpOworICAgIHJldHVybiBXZWJDb3JlOjpJbnRSZWN0KCk7Cit9CisKK1dlYkNvcmU6OkludFBv
aW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUgJnNpemUsIE5vZGUgKm5vZGUpCit7CisgICAgLy8gRmluZCB0aGUgYmVzdCBub2Rl
IHRvIGluc2VydCBpbnRvLCB3aGljaCBzaG91bGQgYmUKKyAgICAvLyBhIG5vZGUgd2l0aCB0aGUg
bGVhc3QgYW1vdW50IG9mIHVudXNlZCBzcGFjZSB0aGF0IGlzCisgICAgLy8gYmlnIGVub3VnaCB0
byBjb250YWluIHRoZSByZXF1ZXN0ZWQgc2l6ZS4KKyAgICB3aGlsZSAobm9kZSkgeworICAgICAg
ICAvLyBHbyBkb3duIGEgbGV2ZWwgYW5kIGRldGVybWluZSBpZiB0aGUgbGVmdCBvciByaWdodAor
ICAgICAgICAvLyBzdWItdHJlZSBjb250YWlucyB0aGUgYmVzdCBjaGFuY2Ugb2YgYWxsb2NhdGlv
bi4KKyAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmxlZnQ7CisgICAgICAgIE5vZGUqIHJpZ2h0
ID0gbm9kZS0+cmlnaHQ7CisgICAgICAgIGlmIChsZWZ0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgbGVm
dC0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihz
aXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmxh
cmdlc3RGcmVlLndpZHRoKCkgPCByaWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKQorICAgICAgICAg
ICAgICAgICAgICB8fCBsZWZ0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSA8IHJpZ2h0LT5sYXJnZXN0
RnJlZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFyZ2VzdEZyZWUg
dmFsdWVzIG1heSBiZSBhIGxpdHRsZSBvdmVyc2l6ZWQsCisgICAgICAgICAgICAgICAgICAgIC8v
IHNvIHRyeSB0aGUgbGVmdCBzdWItdHJlZSBhbmQgdGhlbiB0aGUgcmlnaHQgc3ViLXRyZWUuCisg
ICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9t
Tm9kZShzaXplLCBsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50LngoKSA+PSAw
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYWxsb2NhdGVGcm9tTm9kZShzaXplLCByaWdodCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG5vZGUgPSByaWdodDsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIG5vZGUgPSBsZWZ0OworICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0ICYm
IGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQtPmxhcmdlc3RGcmVlKSkKKyAgICAgICAgICAgIG5vZGUg
PSByaWdodDsKKyAgICAgICAgZWxzZSBpZiAobGVmdCB8fCByaWdodCkgeworICAgICAgICAgICAg
Ly8gTmVpdGhlciBzdWItbm9kZSBoYXMgZW5vdWdoIHNwYWNlIHRvIGFsbG9jYXRlIGZyb20uCisg
ICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQoLTEsIC0xKTsKKyAgICAgICAgfSBl
bHNlIGlmIChmaXRzV2l0aGluKHNpemUsIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAg
ICAgLy8gRG8gd2UgbmVlZCB0byBzcGxpdCB0aGlzIG5vZGUgaW50byBzbWFsbGVyIHBpZWNlcz8K
KyAgICAgICAgICAgIFNwbGl0IHNwbGl0OworICAgICAgICAgICAgaWYgKGZpdHNXaXRoaW4oV2Vi
Q29yZTo6SW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpICogMiksIG5vZGUt
Pmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0IGluIGVpdGhlciBkaXJl
Y3Rpb246IGNob29zZSB0aGUgaW52ZXJzZSBvZgorICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJl
bnQgbm9kZSdzIHNwbGl0IGRpcmVjdGlvbiB0byB0cnkgdG8gYmFsYW5jZQorICAgICAgICAgICAg
ICAgIC8vIG91dCB0aGUgd2FzdGVkIHNwYWNlIGFzIGZ1cnRoZXIgc3ViZGl2aXNpb25zIGhhcHBl
bi4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50CisgICAgICAgICAgICAgICAgICAg
ICYmIG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC54KCkgPT0gbm9kZS0+cGFyZW50LT5yaWdodC0+
cmVjdC54KCkpCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+cGFyZW50KQorICAgICAgICAgICAgICAgICAgICBzcGxp
dCA9IFNwbGl0T25ZOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPnJlY3Qud2lkdGgo
KSA+PSBub2RlLT5yZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNw
bGl0T25YOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQg
PSBTcGxpdE9uWTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJ
bnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkpLCBub2RlLT5sYXJnZXN0RnJl
ZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBTcGxpdCBhbG9uZyB0aGUgWCBkaXJlY3Rpb24uCisg
ICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
Zml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAq
IDIpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBTcGxpdCBhbG9u
ZyB0aGUgWSBkaXJlY3Rpb24uCisgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQ2Fubm90IHNwbGl0IGZ1cnRo
ZXIgLSBhbGxvY2F0ZSB0aGlzIG5vZGUuCisgICAgICAgICAgICAgICAgbm9kZS0+bGFyZ2VzdEZy
ZWUgPSBXZWJDb3JlOjpJbnRTaXplKDAsIDApOworICAgICAgICAgICAgICAgIHVwZGF0ZUxhcmdl
c3RGcmVlKG5vZGUpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5yZWN0LmxvY2F0aW9u
KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBub2RlLCB0aGVu
IGdvIGFyb3VuZCBhZ2FpbiB1c2luZyB0aGUgbGVmdCBzdWItdHJlZS4KKyAgICAgICAgICAgIG5v
ZGUgPSBzcGxpdE5vZGUobm9kZSwgc3BsaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gQ2Fubm90IHBvc3NpYmx5IGZpdCBpbnRvIHRoaXMgbm9kZS4KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBXZWJDb3JlOjpJbnRQb2ludCgtMSwg
LTEpOworfQorCitHZW5lcmFsQXJlYUFsbG9jYXRvcjo6Tm9kZSAqR2VuZXJhbEFyZWFBbGxvY2F0
b3I6OnNwbGl0Tm9kZQorICAgIChOb2RlKiBub2RlLCBTcGxpdCBzcGxpdCkKK3sKKyAgICBOb2Rl
KiBsZWZ0ID0gbmV3IE5vZGUoKTsKKyAgICBOb2RlKiByaWdodCA9IG5ldyBOb2RlKCk7CisgICAg
bV9ub2RlQ291bnQgKz0gMjsKKyAgICBsZWZ0LT5wYXJlbnQgPSBub2RlOworICAgIGxlZnQtPmxl
ZnQgPSAwOworICAgIGxlZnQtPnJpZ2h0ID0gMDsKKyAgICByaWdodC0+cGFyZW50ID0gbm9kZTsK
KyAgICByaWdodC0+bGVmdCA9IDA7CisgICAgcmlnaHQtPnJpZ2h0ID0gMDsKKyAgICBub2RlLT5s
ZWZ0ID0gbGVmdDsKKyAgICBub2RlLT5yaWdodCA9IHJpZ2h0OworICAgIGlmIChzcGxpdCA9PSBT
cGxpdE9uWCkgeworICAgICAgICBsZWZ0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5y
ZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJlY3QuaGVpZ2h0KCkpOworICAg
ICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobGVmdC0+cmVjdC5tYXhYKCksIG5v
ZGUtPnJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+cmVjdC53aWR0aCgpIC8gMiwgbm9kZS0+cmVjdC5oZWlnaHQoKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbGVmdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVjdC54KCksIG5v
ZGUtPnJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5yZWN0LndpZHRoKCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgcmlnaHQt
PnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBsZWZ0LT5yZWN0Lm1heFko
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lk
dGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOworICAgIH0KKyAgICBsZWZ0LT5sYXJnZXN0
RnJlZSA9IGxlZnQtPnJlY3Quc2l6ZSgpOworICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IHJpZ2h0
LT5yZWN0LnNpemUoKTsKKyAgICBub2RlLT5sYXJnZXN0RnJlZSA9IHJpZ2h0LT5sYXJnZXN0RnJl
ZTsKKyAgICByZXR1cm4gbGVmdDsKK30KKwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6dXBk
YXRlTGFyZ2VzdEZyZWUoTm9kZSogbm9kZSkKK3sKKyAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5w
YXJlbnQpKSB7CisgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0KKyAgICAgICAgICAgIFdlYkNv
cmU6OkludFNpemUoCisgICAgICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+bGFyZ2Vz
dEZyZWUud2lkdGgoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLndpZHRoKCkpLAorICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgpLCBub2Rl
LT5yaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkpCisgICAgICAgICAgICApOworICAgIH0KK30K
Kwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6cmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQoreworICAgIC8vIExvY2F0ZSB0aGUgbm9kZSB0aGF0IGNvbnRhaW5zIHRoZSBh
bGxvY2F0ZWQgcmVnaW9uLgorICAgIE5vZGUqIG5vZGUgPSBtX3Jvb3Q7CisgICAgV2ViQ29yZTo6
SW50UG9pbnQgcG9pbnQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAg
ICAgICAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+cmVjdC5jb250YWlucyhwb2ludCkp
CisgICAgICAgICAgICBub2RlID0gbm9kZS0+bGVmdDsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+
cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnJpZ2h0OworICAgICAgICBlbHNlIGlmIChub2RlLT5yZWN0LmNvbnRhaW5z
KHBvaW50KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXR1cm47IC8vIFBvaW50IGlzIGNvbXBsZXRlbHkgb3V0c2lkZSB0aGUgdHJlZS4KKyAgICB9Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXJrIHRoZSBub2RlIGFz
IGZyZWUgYW5kIHRoZW4gd29yayB1cHdhcmRzIHRocm91Z2ggdGhlIHRyZWUKKyAgICAvLyByZWNv
bWJpbmluZyBhbmQgZGVsZXRpbmcgbm9kZXMgdW50aWwgd2UgcmVhY2ggYSBzaWJsaW5nCisgICAg
Ly8gdGhhdCBpcyBzdGlsbCBhbGxvY2F0ZWQuCisgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBub2Rl
LT5yZWN0LnNpemUoKTsKKyAgICB3aGlsZSAobm9kZS0+cGFyZW50KSB7CisgICAgICAgIGlmIChu
b2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVu
dC0+cmlnaHQtPmxhcmdlc3RGcmVlICE9IG5vZGUtPnBhcmVudC0+cmlnaHQtPnJlY3Quc2l6ZSgp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKG5vZGUtPnBhcmVudC0+bGVmdC0+bGFyZ2VzdEZyZWUgIT0gbm9kZS0+cGFyZW50LT5sZWZ0
LT5yZWN0LnNpemUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBub2RlID0gbm9kZS0+cGFyZW50OworICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0KTsKKyAg
ICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOworICAgICAgICBtX25vZGVDb3VudCAtPSAyOwor
ICAgICAgICBub2RlLT5sZWZ0ID0gMDsKKyAgICAgICAgbm9kZS0+cmlnaHQgPSAwOworICAgICAg
ICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOworICAgIH0KKworICAgIC8v
IE1ha2UgdGhlIHJlc3Qgb2Ygb3VyIGFuY2VzdG9ycyBoYXZlIHRoZSBjb3JyZWN0ICJsYXJnZXN0
IGZyZWUgc2l6ZSIuCisgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9kZSk7Cit9CisKK2ludCBHZW5l
cmFsQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAoreworICAgIHJldHVybiBtX25vZGVD
b3VudCAqIHNpemVvZihOb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5
NzhiZmU4ZDU2ZWI0NWY0NDBiZDZhOGUzMzhjY2E0ZWQ0NzFhYWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5oCkBAIC0w
LDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisK
KyNpZm5kZWYgQXJlYUFsbG9jYXRvcl9oCisjZGVmaW5lIEFyZWFBbGxvY2F0b3JfaAorCisjaW5j
bHVkZSA8SW50UG9pbnQuaD4KKyNpbmNsdWRlIDxJbnRSZWN0Lmg+CisjaW5jbHVkZSA8SW50U2l6
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitpbmxpbmUgaW50IG5leHRQb3dlck9mVHdvKGlu
dCBudW1iZXIpCit7CisgICAgLy8gVGhpcyBpcyBhIGZhc3QgdHJpY2sgdG8gZ2V0IG5leHRQb3dl
ck9mVHdvIGZvciBhbiBpbnRlZ2VyLgorICAgIC0tbnVtYmVyOworICAgIG51bWJlciB8PSBudW1i
ZXIgPj4gMTsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDI7CisgICAgbnVtYmVyIHw9IG51bWJl
ciA+PiA0OworICAgIG51bWJlciB8PSBudW1iZXIgPj4gODsKKyAgICBudW1iZXIgfD0gbnVtYmVy
ID4+IDE2OworICAgIG51bWJlcisrOworICAgIHJldHVybiBudW1iZXI7Cit9CisKK2lubGluZSBJ
bnRTaXplIG5leHRQb3dlck9mVHdvKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJu
IEludFNpemUobmV4dFBvd2VyT2ZUd28oc2l6ZS53aWR0aCgpKSwgbmV4dFBvd2VyT2ZUd28oc2l6
ZS5oZWlnaHQoKSkpOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgQXJlYUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgQXJlYUFsbG9jYXRv
cihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdmlydHVhbCB+QXJlYUFsbG9jYXRvcigp
OworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1pbmltdW1BbGxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9taW5BbGxvYzsgfQorICAgIHZvaWQgc2V0TWluaW11bUFsbG9jYXRpb24oY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZSkgeyBtX21pbkFsbG9jID0gc2l6ZTsgfQorCisgICAgV2ViQ29y
ZTo6SW50U2l6ZSBtYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcmdpbjsgfQorICAgIHZvaWQg
c2V0TWFyZ2luKGNvbnN0IFdlYkNvcmU6OkludFNpemUgJm1hcmdpbikgeyBtX21hcmdpbiA9IG1h
cmdpbjsgfQorCisgICAgdmlydHVhbCB2b2lkIGV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jik7CisgICAgdm9pZCBleHBhbmRCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgYWxsb2NhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CisKKyAgICB2aXJ0dWFsIGludCBvdmVyaGVhZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX21pbkFsbG9j
OworICAgIFdlYkNvcmU6OkludFNpemUgbV9tYXJnaW47CisKKyAgICBXZWJDb3JlOjpJbnRTaXpl
IHJvdW5kQWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgY29uc3Q7Cit9OworCitj
bGFzcyBHZW5lcmFsQXJlYUFsbG9jYXRvciA6IHB1YmxpYyBBcmVhQWxsb2NhdG9yIHsKK3B1Ymxp
YzoKKyAgICBHZW5lcmFsQXJlYUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Cisg
ICAgdmlydHVhbCB+R2VuZXJhbEFyZWFBbGxvY2F0b3IoKTsKKworICAgIHZvaWQgZXhwYW5kKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIHJlbGVhc2UoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIGludCBvdmVyaGVhZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGVu
dW0gU3BsaXQgeyBTcGxpdE9uWCwgU3BsaXRPblkgfTsKKworICAgIHN0cnVjdCBOb2RlIHsKKyAg
ICAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0OworICAgICAgICBXZWJDb3JlOjpJbnRTaXplIGxh
cmdlc3RGcmVlOworICAgICAgICBOb2RlICpwYXJlbnQ7CisgICAgICAgIE5vZGUgKmxlZnQ7Cisg
ICAgICAgIE5vZGUgKnJpZ2h0OworICAgIH07CisKKyAgICBOb2RlICptX3Jvb3Q7CisgICAgaW50
IG1fbm9kZUNvdW50OworCisgICAgc3RhdGljIHZvaWQgZnJlZU5vZGUoTm9kZSopOworICAgIFdl
YkNvcmU6OkludFBvaW50IGFsbG9jYXRlRnJvbU5vZGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IE5vZGUqKTsKKyAgICBOb2RlICpzcGxpdE5vZGUoTm9kZSosIFNwbGl0KTsKKyAgICBzdGF0aWMg
dm9pZCB1cGRhdGVMYXJnZXN0RnJlZShOb2RlKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5jcHAKaW5kZXggNzA5NWM0MzhiZmU2NDlmZTIzNmVjZmEzYjg3MWNmOGY0NDAz
ZGVlMC4uZDYzNzYyY2IyZjUwMTMxZjQ1YmJmMWRlY2FmMGU2ZmVkNjMyYWI3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAt
NjAxLDcgKzYwMSw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFt
ZSgpCiAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7CiAgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS5kaWRTd2FwQnVmZmVycygpOworICAg
ICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0tPmRpZFN3YXBCdWZmZXJzKCk7CiB9CiAKIGJvb2wgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0CkBA
IC02MjMsMTggKzYyMywxNyBAQCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4g
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShjbwogewogICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgewotICAgICAgICBVcGRh
dGVBdGxhcyYgYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV07Ci0gICAgICAgIGlmIChhdGxhcy5m
bGFncygpID09IGZsYWdzKSB7CisgICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRl
QXRsYXNlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGF0bGFzLT5mbGFncygpID09IGZsYWdzKSB7
CiAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZh
aWxhYmxlIGJ1ZmZlciBzcGFjZS4KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFz
LmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7Cisg
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxh
YmxlQnVmZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChncmFwaGlj
c0NvbnRleHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNl
KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IFNjcmF0Y2hCdWZm
ZXJEaW1lbnNpb24gPSAyMDAwOwotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoVXBkYXRlQXRs
YXMoU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKTsKLSAgICByZXR1cm4gbV91cGRhdGVB
dGxhc2VzLmxhc3QoKS5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXpl
LCBvZmZzZXQpOworICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYWRvcHRQdHIobmV3IFVwZGF0
ZUF0bGFzKHNpemUsIGZsYWdzKSkpOworICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgp
LT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvci5oCmluZGV4IDNmZDU5ZDIxODFmMzI3OTM4ZmM1N2QwNmQy
ZDRkMTgyNDc5ZjFiYjMuLjAyOWNmN2RmYjYzZWQ3Mjc4NDRlODVmOTZjZTc3ZmRhYjNmZWY4NTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
aApAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKICAgICBIYXNoTWFw
PGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKLSAgICBW
ZWN0b3I8VXBkYXRlQXRsYXM+IG1fdXBkYXRlQXRsYXNlczsKKyAgICBWZWN0b3I8T3duUHRyPFVw
ZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKIAogICAgIGJvb2wgbV9ub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2g7CiAgICAgYm9vbCBtX2lzVmFsaWQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAppbmRleCA1ODg2OWYzOTk3
NjgwMzAwMWIwM2FlYTkwNWExMWQ2ODIxYjNkYjdlLi4zMGQ3YmFlZDVjY2Y1N2QzZmNiYjY2NmZk
NzJiYTA4NjY5ZjE5YmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9VcGRhdGVBdGxhcy5jcHAKQEAgLTIyLDEyMiArMjIsNjUgQEAKIAogI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKIAorI2luY2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50
U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFz
KGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MpCitVcGRhdGVBdGxh
czo6VXBkYXRlQXRsYXMoY29uc3QgSW50U2l6ZSYgZGltZW5zaW9uLCBTaGFyZWFibGVCaXRtYXA6
OkZsYWdzIGZsYWdzKQogICAgIDogbV9mbGFncyhmbGFncykKIHsKLSAgICBtX3N1cmZhY2UgPSBT
aGFyZWFibGVTdXJmYWNlOjpjcmVhdGUoSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbiksIGZs
YWdzLCBTaGFyZWFibGVTdXJmYWNlOjpTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSk7CisgICAgSW50
U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28oZGltZW5zaW9uLmV4cGFuZGVkVG8oSW50U2l6ZSgx
MDI0LCAxMDI0KSkpOworICAgIG1fc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShz
aXplLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3VwcG9ydHNHcmFwaGljc1N1cmZhY2UpOwog
fQogCi1zdGF0aWMgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1iZXIpCitVcGRhdGVBdGxhczo6
flVwZGF0ZUF0bGFzKCkKIHsKLSAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQgbmV4
dFBvd2VyT2ZUd28gZm9yIGFuIGludGVnZXIuCi0gICAgLS1udW1iZXI7Ci0gICAgbnVtYmVyIHw9
IG51bWJlciA+PiAxOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsKLSAgICBudW1iZXIgfD0g
bnVtYmVyID4+IDQ7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiA4OwotICAgIG51bWJlciB8PSBu
dW1iZXIgPj4gMTY7Ci0gICAgbnVtYmVyKys7Ci0gICAgcmV0dXJuIG51bWJlcjsKIH0KIAogdm9p
ZCBVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKCFtX2xheW91
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgTWlu
VGlsZVNpemUgPSAzMjsKLSAgICBzdGF0aWMgY29uc3QgaW50IE1heFRpbGVTaXplID0gNTEyOwot
Ci0gICAgLy8gRGl2aWRlIG91ciBzcXVhcmUgdG8gc3F1YXJlIHBvd2VyLW9mLXR3byBib3hlcy4K
LSAgICBmb3IgKGludCBjdXJzb3IgPSAwOyBjdXJzb3IgPCBzaXplKCkud2lkdGgoKTsgKSB7Ci0g
ICAgICAgIGludCByZW1haW5kZXIgPSBzaXplKCkud2lkdGgoKSAtIGN1cnNvcjsKLSAgICAgICAg
aW50IGRpbWVuc2lvbiA9IHN0ZDo6bWluKHJlbWFpbmRlciwgc3RkOjptaW4oTWF4VGlsZVNpemUs
IHN0ZDo6bWF4KE1pblRpbGVTaXplLCBuZXh0UG93ZXJPZlR3byhyZW1haW5kZXIgLyAyKSkpKTsK
LSAgICAgICAgY3Vyc29yICs9IGRpbWVuc2lvbjsKLSAgICAgICAgbV9sYXlvdXQuYXBwZW5kKGRp
bWVuc2lvbik7Ci0gICAgfQotCi0gICAgbV9idWZmZXJTdGF0ZXMucmVzaXplKG1fbGF5b3V0LnNp
emUoKSAqIG1fbGF5b3V0LnNpemUoKSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2J1ZmZl
clN0YXRlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9idWZmZXJTdGF0ZXNbaV0gPSBBdmFpbGFi
bGU7Ci19Ci0KLWludCBVcGRhdGVBdGxhczo6ZmluZEF2YWlsYWJsZUluZGV4KGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgaW50IGRpbWVuc2lvbiA9IG1fbGF5b3V0LnNpemUo
KTsKLSAgICBpbnQgc3RyaWRlID0gZGltZW5zaW9uOwotICAgIGludCByZXF1aXJlZERpbWVuc2lv
biA9IHN0ZDo6bWF4KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBCZWdp
biBmcm9tIHRoZSBzbWFsbGVzdCBidWZmZXIsIHVudGlsIHdlIHJlYWNoIHRoZSBzbWFsbGVzdCBh
dmFpbGFibGUgYnVmZmVyIHRoYXQncyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gb3VyIHJlY3QuCi0g
ICAgZm9yIChpbnQgaSA9IG1fYnVmZmVyU3RhdGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgaSAtPSAo
ZGltZW5zaW9uICsgMSksIC0tc3RyaWRlKSB7Ci0gICAgICAgIC8vIE5lZWQgYSBiaWdnZXIgYnVm
ZmVyLgotICAgICAgICBpZiAobV9sYXlvdXRbaSAvIGRpbWVuc2lvbl0gPCByZXF1aXJlZERpbWVu
c2lvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIENoZWNrIGFsbCBidWZm
ZXJzIG9mIGN1cnJlbnQgc2l6ZSwgdG8gZmluZCBhbiBhdmFpbGFibGUgb25lLgotICAgICAgICBm
b3IgKGludCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdHJpZGU7ICsrb2Zmc2V0KSB7Ci0gICAgICAg
ICAgICBpbnQgaW5kZXggPSBpIC0gb2Zmc2V0OwotICAgICAgICAgICAgaWYgKG1fYnVmZmVyU3Rh
dGVzW2luZGV4XSA9PSBBdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owot
ICAgICAgICB9CisgICAgaWYgKCFtX2FyZWFBbGxvY2F0b3IpIHsKKyAgICAgICAgbV9hcmVhQWxs
b2NhdG9yID0gYWRvcHRQdHIobmV3IEdlbmVyYWxBcmVhQWxsb2NhdG9yKHNpemUoKSkpOworICAg
ICAgICBtX2FyZWFBbGxvY2F0b3ItPnNldE1pbmltdW1BbGxvY2F0aW9uKEludFNpemUoMzIsIDMy
KSk7CiAgICAgfQotCi0gICAgcmV0dXJuIC0xOwogfQogCiB2b2lkIFVwZGF0ZUF0bGFzOjpkaWRT
d2FwQnVmZmVycygpCiB7CisgICAgbV9hcmVhQWxsb2NhdG9yLmNsZWFyKCk7CiAgICAgYnVpbGRM
YXlvdXRJZk5lZWRlZCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9idWZmZXJTdGF0ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYnVmZmVyU3RhdGVzW2ldID0gQXZhaWxhYmxlOwogfQog
CiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gVXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdP
bkF2YWlsYWJsZUJ1ZmZlcihTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgSW50UG9pbnQmIG9mZnNldCkKIHsKICAgICBidWlsZExh
eW91dElmTmVlZGVkKCk7Ci0gICAgaW50IGluZGV4ID0gZmluZEF2YWlsYWJsZUluZGV4KHNpemUp
OworICAgIEludFJlY3QgcmVjdCA9IG1fYXJlYUFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZSk7CiAK
ICAgICAvLyBObyBhdmFpbGFibGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCi0g
ICAgaWYgKGluZGV4IDwgMCkKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKIAogICAgIGlmICghbV9zdXJmYWNlLT5j
cmVhdGVIYW5kbGUoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PigpOwogCiAgICAgLy8gRklYTUU6IFVzZSB0cmktc3RhdGUgYnVmZmVy
cywgdG8gYWxsb3cgZmFzdGVyIHVwZGF0ZXMuCi0gICAgbV9idWZmZXJTdGF0ZXNbaW5kZXhdID0g
VGFrZW47Ci0gICAgb2Zmc2V0ID0gb2Zmc2V0Rm9ySW5kZXgoaW5kZXgpOwotICAgIEludFJlY3Qg
cmVjdChJbnRQb2ludDo6emVybygpLCBzaXplKTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0
PiBncmFwaGljc0NvbnRleHQgPSBtX3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChJbnRS
ZWN0KG9mZnNldCwgc2l6ZSkpOworICAgIG9mZnNldCA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX3N1cmZhY2UtPmNyZWF0
ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKIAogICAgIGlmIChmbGFncygpICYgU2hhcmVhYmxlQml0
bWFwOjpTdXBwb3J0c0FscGhhKSB7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPmZp
bGxSZWN0KHJlY3QsIENvbG9yOjp0cmFuc3BhcmVudCwgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBzaXplKSwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNl
T3Zlcik7CiAgICAgfQogCiAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7CiB9
CiAKLUludFBvaW50IFVwZGF0ZUF0bGFzOjpvZmZzZXRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0
Ci17Ci0gICAgSW50UG9pbnQgY29vcmQoaW5kZXggJSBtX2xheW91dC5zaXplKCksIGluZGV4IC8g
bV9sYXlvdXQuc2l6ZSgpKTsKLSAgICBpbnQgeCA9IDA7Ci0gICAgaW50IHkgPSAwOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY29vcmQueCgpOyArK2kpCi0gICAgICAgIHggKz0gbV9sYXlvdXRb
aV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb29yZC55KCk7ICsraSkKLSAgICAgICAgeSAr
PSBtX2xheW91dFtpXTsKLQotICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsKLX0KLQogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRl
QXRsYXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5o
CmluZGV4IDdkMjIyMzc2OWIxMmIzZjBkN2QyOTRiYzI2Zjc1OGRiMzljYWMwNGYuLjBkYmE0YWYy
NTM5ZWM5MTM4ODYwYWNlZDU0ZjRhOGIzNmFjYmFhMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCkBAIC0yMCw2ICsyMCw4IEBACiAjaWZu
ZGVmIFVwZGF0ZUF0bGFzX2gKICNkZWZpbmUgVXBkYXRlQXRsYXNfaAogCisjaW5jbHVkZSAiQXJl
YUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJTaGFyZWFibGVT
dXJmYWNlLmgiCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC0zMSw4ICszMywx
MCBAQCBjbGFzcyBJbnRSZWN0OwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFVwZGF0ZUF0
bGFzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGVBdGxhcyk7CiBwdWJsaWM6Ci0g
ICAgVXBkYXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyk7Cisg
ICAgVXBkYXRlQXRsYXMoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGltZW5zaW9uLCBTaGFyZWFi
bGVCaXRtYXA6OkZsYWdzKTsKKyAgICB+VXBkYXRlQXRsYXMoKTsKIAogICAgIGlubGluZSBXZWJD
b3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnNpemUoKTsgfQog
CkBAIC00MywxNyArNDcsOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBidWlsZExh
eW91dElmTmVlZGVkKCk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0Rm9ySW5kZXgoaW50
KSBjb25zdDsKLSAgICBpbnQgZmluZEF2YWlsYWJsZUluZGV4KGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKTsKIAogcHJpdmF0ZToKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgQXZhaWxhYmxlLAot
ICAgICAgICBUYWtlbgotICAgIH07Ci0KLSAgICBWZWN0b3I8U3RhdGU+IG1fYnVmZmVyU3RhdGVz
OwotICAgIFZlY3RvcjxpbnQ+IG1fbGF5b3V0OworICAgIE93blB0cjxHZW5lcmFsQXJlYUFsbG9j
YXRvcj4gbV9hcmVhQWxsb2NhdG9yOwogICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgbV9mbGFn
czsKICAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gbV9zdXJmYWNlOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158265</attachid>
            <date>2012-08-14 02:19:18 -0700</date>
            <delta_ts>2012-08-22 15:21:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93606-20120814111841.patch</filename>
            <type>text/plain</type>
            <size>28413</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODM0MzY4NGQxMjU5NzBi
MTczM2RkMDBiYjY5NTZlZjk1MGE0MWRhZi4uZjYzNjFiZTEzMWEwYmY0ODkxZGI1OTg0MDI2YWQ0
ZDc5ZTJkYzQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA4LTEzICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFtR
dF0gVXBkYXRlQXRsYXMgaXMgd2FzdGluZyBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wb3J0ZWQgYW5kIFFBcmVhQWxsb2NhdG9yIGZyb20g
UXQzRCBhbmQgcG9ydGVkIGl0IHRvIFdlYkNvcmUgc3R5bGUsCisgICAgICAgIGFuZCB1c2UgdGhp
cyBuZXcgYXJlYSBhbGxvY2F0b3IgdG8gcmVwbGFjZSBvbGQgb25lIGZyb20gVXBkYXRlQXRsYXMu
CisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9B
cmVhQWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6
OkFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjp+QXJlYUFs
bG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZCk6CisgICAg
ICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KToKKyAgICAgICAgKFdlYktpdDo6
QXJlYUFsbG9jYXRvcjo6cmVsZWFzZSk6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6
Om92ZXJoZWFkKToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVh
QWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6On5HZW5l
cmFsQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9y
OjpmcmVlTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpleHBh
bmQpOgorICAgICAgICAoV2ViS2l0OjpmaXRzV2l0aGluKToKKyAgICAgICAgKFdlYktpdDo6R2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFy
ZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFs
QXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFB
bGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFy
ZWFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFsQXJlYUFsbG9j
YXRvcjo6b3ZlcmhlYWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2Nh
dG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28pOgorICAgICAg
ICAoQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNpemUp
OgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjptaW5pbXVtQWxsb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNldE1pbmltdW1BbGxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6bWFyZ2luKToKKyAgICAgICAgKFdlYktpdDo6
QXJlYUFsbG9jYXRvcjo6c2V0TWFyZ2luKToKKyAgICAgICAgKEdlbmVyYWxBcmVhQWxsb2NhdG9y
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oOgorICAgICAgICAoTGF5
ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVB
dGxhcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2Vi
S2l0OjpVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6
OlVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0
bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oOgorICAgICAgICAoVXBkYXRlQXRsYXMpOgorCiAyMDEy
LTA4LTE0ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IFtXSzJdIEFkZCBnZXR0ZXIgZm9yIGNhcHR1cmUgYXR0cmlidXRlIG9mIGlucHV0IGVsZW1lbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpCmluZGV4IDVmZmM4Y2NiM2RhZTAyYTI3ZjVhZDc4NjYxMWVmOWYyMTYwNzZkMDku
LmI4ZTFhZWM4ZGRmY2MwN2NiZjdkZWUwMDc0M2NlNTkwZjkzMzMwZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpA
QCAtMzQxLDYgKzM0MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViU2VhcmNoUG9wdXBNZW51LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViVmlicmF0aW9uQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
cXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
QXJlYUFsbG9jYXRvci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oIFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmggXApAQCAtNzAyLDYgKzcwMyw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJQb3B1
cE1lbnVRdC5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RlY29kZXJBZGFwdGVyLmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhSW1wbC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0FyZWFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0FyZWFBbGxvY2F0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmZWZlMjhlZGIxMTNiYTdjOGIw
NTdlN2NiMGU1NTZhNGJkYmZkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5jcHAKQEAgLTAsMCArMSwzMzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworQXJlYUFsbG9jYXRvcjo6QXJlYUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
aXplKQorICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX21pbkFsbG9jKDEsIDEpCisgICAgLCBt
X21hcmdpbigwLCAwKQoreworfQorCitBcmVhQWxsb2NhdG9yOjp+QXJlYUFsbG9jYXRvcigpCit7
Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNpemUpCit7CisgICAgbV9zaXplLmV4cGFuZGVkVG8oc2l6ZSk7Cit9CisKK3ZvaWQgQXJlYUFs
bG9jYXRvcjo6ZXhwYW5kQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBt
X3NpemUgKz0gc2l6ZTsKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKQoreworfQorCitpbnQgQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBj
b25zdAoreworICAgIHJldHVybiAwOworfQorCitXZWJDb3JlOjpJbnRTaXplIEFyZWFBbGxvY2F0
b3I6OnJvdW5kQWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSBjb25zdAor
eworICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7CisgICAg
aW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKKyAgICBpbnQg
ZXh0cmEgPSB3aWR0aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKKyAgICBpZiAoZXh0cmEpCisgICAg
ICAgIHdpZHRoICs9IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOworICAgIGV4dHJhID0gaGVp
Z2h0ICUgbV9taW5BbGxvYy5oZWlnaHQoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIGhlaWdo
dCArPSBtX21pbkFsbG9jLmhlaWdodCgpIC0gZXh0cmE7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6
SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworR2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVy
YWxBcmVhQWxsb2NhdG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCisgICAgOiBBcmVh
QWxsb2NhdG9yKFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKHNpemUpKQoreworICAgIG1fcm9vdCA9
IG5ldyBOb2RlKCk7CisgICAgbV9yb290LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBt
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBtX3Jvb3QtPmxhcmdlc3RGcmVl
ID0gbV9zaXplOworICAgIG1fcm9vdC0+cGFyZW50ID0gMDsKKyAgICBtX3Jvb3QtPmxlZnQgPSAw
OworICAgIG1fcm9vdC0+cmlnaHQgPSAwOworICAgIG1fbm9kZUNvdW50ID0gMTsKKyAgICBzZXRN
aW5pbXVtQWxsb2NhdGlvbihXZWJDb3JlOjpJbnRTaXplKDgsIDgpKTsKK30KKworR2VuZXJhbEFy
ZWFBbGxvY2F0b3I6On5HZW5lcmFsQXJlYUFsbG9jYXRvcigpCit7CisgICAgZnJlZU5vZGUobV9y
b290KTsKK30KKwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUoTm9kZSogbm9k
ZSkKK3sKKyAgICBpZiAobm9kZSkgeworICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0KTsKKyAg
ICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOworICAgIH0KKyAgICBkZWxldGUgbm9kZTsKK30K
Kwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNpemUpCit7CisgICAgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKFdlYkNvcmU6Om5leHRQb3dl
ck9mVHdvKHNpemUpKTsKKworICAgIGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6ZSkK
KyAgICAgICAgcmV0dXJuOyAvLyBObyBjaGFuZ2UuCisKKyAgICBpZiAoIW1fcm9vdC0+bGVmdCAm
JiBtX3Jvb3QtPmxhcmdlc3RGcmVlLndpZHRoKCkgPiAwKSB7CisgICAgICAgIC8vIE5vIGFsbG9j
YXRpb25zIGhhdmUgb2NjdXJyZWQsIHNvIGp1c3QgYWRqdXN0IHRoZSByb290IHNpemUuCisgICAg
ICAgIG1fcm9vdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCks
IG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQgZXh0cmEgbm9kZXMgYWJvdmUg
dGhlIGN1cnJlbnQgcm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCisgICAgTm9kZSogb2xkUm9vdCA9
IG1fcm9vdDsKKyAgICBTcGxpdCBzcGxpdDsKKyAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9z
aXplLmhlaWdodCgpKQorICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgIGVsc2UKKyAgICAg
ICAgc3BsaXQgPSBTcGxpdE9uWTsKKworICAgIHdoaWxlIChtX3Jvb3QtPnJlY3Quc2l6ZSgpICE9
IG1fc2l6ZSkgeworICAgICAgICBpZiAobV9yb290LT5yZWN0LndpZHRoKCkgPT0gbV9zaXplLndp
ZHRoKCkpCisgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICBlbHNlIGlmICht
X3Jvb3QtPnJlY3QuaGVpZ2h0KCkgPT0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICAgICAgc3Bs
aXQgPSBTcGxpdE9uWDsKKyAgICAgICAgTm9kZSogcGFyZW50ID0gbmV3IE5vZGUoKTsKKyAgICAg
ICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOworICAgICAgICBtX25vZGVDb3VudCArPSAyOwor
ICAgICAgICBtX3Jvb3QtPnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgcGFyZW50LT5wYXJlbnQg
PSAwOworICAgICAgICBwYXJlbnQtPmxlZnQgPSBtX3Jvb3Q7CisgICAgICAgIHBhcmVudC0+cmln
aHQgPSByaWdodDsKKyAgICAgICAgcGFyZW50LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5z
aXplKCk7CisgICAgICAgIHJpZ2h0LT5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHJpZ2h0LT5s
ZWZ0ID0gMDsKKyAgICAgICAgcmlnaHQtPnJpZ2h0ID0gMDsKKyAgICAgICAgcmlnaHQtPmxhcmdl
c3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKKyAgICAgICAgaWYgKHNwbGl0ID09IFNwbGl0
T25YKSB7CisgICAgICAgICAgICBwYXJlbnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9v
dC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpICogMiwgbV9yb290LT5yZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdCht
X3Jvb3QtPnJlY3QueCgpICsgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC55KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0
LndpZHRoKCksIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBwYXJlbnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCks
IG1fcm9vdC0+cmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkgKiAyKTsK
KyAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3Qu
eCgpLCBtX3Jvb3QtPnJlY3QueSgpICsgbV9yb290LT5yZWN0LndpZHRoKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1f
cm9vdC0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3BsaXQgPSAoc3BsaXQg
PT0gU3BsaXRPblggPyBTcGxpdE9uWSA6IFNwbGl0T25YKTsKKyAgICAgICAgbV9yb290ID0gcGFy
ZW50OworICAgIH0KKyAgICB1cGRhdGVMYXJnZXN0RnJlZShvbGRSb290KTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIGZpdHNXaXRoaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZTEsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUyKQoreworICAgIHJldHVybiBzaXplMS53aWR0aCgp
IDw9IHNpemUyLndpZHRoKCkgJiYgc2l6ZTEuaGVpZ2h0KCkgPD0gc2l6ZTIuaGVpZ2h0KCk7Cit9
CisKK1dlYkNvcmU6OkludFJlY3QgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit7CisgICAgV2ViQ29yZTo6SW50U2l6ZSByb3VuZGVk
ID0gcm91bmRBbGxvY2F0aW9uKHNpemUpOworICAgIHJvdW5kZWQgPSBXZWJDb3JlOjpuZXh0UG93
ZXJPZlR3byhyb3VuZGVkKTsKKyAgICBpZiAocm91bmRlZC53aWR0aCgpIDw9IDAgfHwgcm91bmRl
ZC53aWR0aCgpID4gbV9zaXplLndpZHRoKCkKKyAgICAgICAgfHwgcm91bmRlZC5oZWlnaHQoKSA8
PSAwIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpJbnRSZWN0KCk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IGFs
bG9jYXRlRnJvbU5vZGUocm91bmRlZCwgbV9yb290KTsKKyAgICBpZiAocG9pbnQueCgpID49IDAp
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRSZWN0KHBvaW50LCBzaXplKTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6SW50UmVjdCgpOworfQorCitXZWJDb3JlOjpJbnRQb2ludCBHZW5lcmFsQXJl
YUFsbG9jYXRvcjo6YWxsb2NhdGVGcm9tTm9kZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXpl
LCBOb2RlKiBub2RlKQoreworICAgIC8vIEZpbmQgdGhlIGJlc3Qgbm9kZSB0byBpbnNlcnQgaW50
bywgd2hpY2ggc2hvdWxkIGJlCisgICAgLy8gYSBub2RlIHdpdGggdGhlIGxlYXN0IGFtb3VudCBv
ZiB1bnVzZWQgc3BhY2UgdGhhdCBpcworICAgIC8vIGJpZyBlbm91Z2ggdG8gY29udGFpbiB0aGUg
cmVxdWVzdGVkIHNpemUuCisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgLy8gR28gZG93biBh
IGxldmVsIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGxlZnQgb3IgcmlnaHQKKyAgICAgICAgLy8gc3Vi
LXRyZWUgY29udGFpbnMgdGhlIGJlc3QgY2hhbmNlIG9mIGFsbG9jYXRpb24uCisgICAgICAgIE5v
ZGUqIGxlZnQgPSBub2RlLT5sZWZ0OworICAgICAgICBOb2RlKiByaWdodCA9IG5vZGUtPnJpZ2h0
OworICAgICAgICBpZiAobGVmdCAmJiBmaXRzV2l0aGluKHNpemUsIGxlZnQtPmxhcmdlc3RGcmVl
KSkgeworICAgICAgICAgICAgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQtPmxh
cmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5sYXJnZXN0RnJlZS53aWR0
aCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLndpZHRoKCkKKyAgICAgICAgICAgICAgICAgICAgfHwg
bGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkgPCByaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhcmdlc3RGcmVlIHZhbHVlcyBtYXkgYmUg
YSBsaXR0bGUgb3ZlcnNpemVkLAorICAgICAgICAgICAgICAgICAgICAvLyBzbyB0cnkgdGhlIGxl
ZnQgc3ViLXRyZWUgYW5kIHRoZW4gdGhlIHJpZ2h0IHN1Yi10cmVlLgorICAgICAgICAgICAgICAg
ICAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IGFsbG9jYXRlRnJvbU5vZGUoc2l6ZSwgbGVm
dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFs
bG9jYXRlRnJvbU5vZGUoc2l6ZSwgcmlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBub2RlID0gcmlnaHQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBub2RlID0gbGVmdDsKKyAgICAgICAgfSBlbHNlIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNp
emUsIHJpZ2h0LT5sYXJnZXN0RnJlZSkpCisgICAgICAgICAgICBub2RlID0gcmlnaHQ7CisgICAg
ICAgIGVsc2UgaWYgKGxlZnQgfHwgcmlnaHQpIHsKKyAgICAgICAgICAgIC8vIE5laXRoZXIgc3Vi
LW5vZGUgaGFzIGVub3VnaCBzcGFjZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgICAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkludFBvaW50KC0xLCAtMSk7CisgICAgICAgIH0gZWxzZSBpZiAoZml0c1dp
dGhpbihzaXplLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgIC8vIERvIHdlIG5l
ZWQgdG8gc3BsaXQgdGhpcyBub2RlIGludG8gc21hbGxlciBwaWVjZXM/CisgICAgICAgICAgICBT
cGxpdCBzcGxpdDsKKyAgICAgICAgICAgIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6OkludFNpemUo
c2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkp
IHsKKyAgICAgICAgICAgICAgICAvLyBTcGxpdCBpbiBlaXRoZXIgZGlyZWN0aW9uOiBjaG9vc2Ug
dGhlIGludmVyc2Ugb2YKKyAgICAgICAgICAgICAgICAvLyB0aGUgcGFyZW50IG5vZGUncyBzcGxp
dCBkaXJlY3Rpb24gdG8gdHJ5IHRvIGJhbGFuY2UKKyAgICAgICAgICAgICAgICAvLyBvdXQgdGhl
IHdhc3RlZCBzcGFjZSBhcyBmdXJ0aGVyIHN1YmRpdmlzaW9ucyBoYXBwZW4uCisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPnBhcmVudAorICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5wYXJl
bnQtPmxlZnQtPnJlY3QueCgpID09IG5vZGUtPnBhcmVudC0+cmlnaHQtPnJlY3QueCgpKQorICAg
ICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5vZGUtPnBhcmVudCkKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5yZWN0LndpZHRoKCkgPj0gbm9kZS0+cmVj
dC5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50U2l6ZShzaXplLndp
ZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAg
ICAgICAgICAgLy8gU3BsaXQgYWxvbmcgdGhlIFggZGlyZWN0aW9uLgorICAgICAgICAgICAgICAg
IHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oV2Vi
Q29yZTo6SW50U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFy
Z2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgLy8gU3BsaXQgYWxvbmcgdGhlIFkgZGlyZWN0
aW9uLgorICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIENhbm5vdCBzcGxpdCBmdXJ0aGVyIC0gYWxsb2NhdGUg
dGhpcyBub2RlLgorICAgICAgICAgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gV2ViQ29yZTo6
SW50U2l6ZSgwLCAwKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVMYXJnZXN0RnJlZShub2RlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+cmVjdC5sb2NhdGlvbigpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgbm9kZSwgdGhlbiBnbyBhcm91bmQgYWdh
aW4gdXNpbmcgdGhlIGxlZnQgc3ViLXRyZWUuCisgICAgICAgICAgICBub2RlID0gc3BsaXROb2Rl
KG5vZGUsIHNwbGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENhbm5vdCBw
b3NzaWJseSBmaXQgaW50byB0aGlzIG5vZGUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQoLTEsIC0xKTsKK30KKworR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6Ok5vZGUqIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5vZGUK
KyAgICAoTm9kZSogbm9kZSwgU3BsaXQgc3BsaXQpCit7CisgICAgTm9kZSogbGVmdCA9IG5ldyBO
b2RlKCk7CisgICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOworICAgIG1fbm9kZUNvdW50ICs9
IDI7CisgICAgbGVmdC0+cGFyZW50ID0gbm9kZTsKKyAgICBsZWZ0LT5sZWZ0ID0gMDsKKyAgICBs
ZWZ0LT5yaWdodCA9IDA7CisgICAgcmlnaHQtPnBhcmVudCA9IG5vZGU7CisgICAgcmlnaHQtPmxl
ZnQgPSAwOworICAgIHJpZ2h0LT5yaWdodCA9IDA7CisgICAgbm9kZS0+bGVmdCA9IGxlZnQ7Cisg
ICAgbm9kZS0+cmlnaHQgPSByaWdodDsKKworICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgewor
ICAgICAgICBsZWZ0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9k
ZS0+cmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJlY3QuaGVpZ2h0KCkpOworICAgICAgICByaWdodC0+
cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobGVmdC0+cmVjdC5tYXhYKCksIG5vZGUtPnJlY3QueSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0
aCgpIC8gMiwgbm9kZS0+cmVjdC5oZWlnaHQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVm
dC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVjdC54KCksIG5vZGUtPnJlY3QueSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRo
KCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgcmlnaHQtPnJlY3QgPSBXZWJD
b3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBsZWZ0LT5yZWN0Lm1heFkoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+
cmVjdC5oZWlnaHQoKSAvIDIpOworICAgIH0KKworICAgIGxlZnQtPmxhcmdlc3RGcmVlID0gbGVm
dC0+cmVjdC5zaXplKCk7CisgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gcmlnaHQtPnJlY3Quc2l6
ZSgpOworICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gcmlnaHQtPmxhcmdlc3RGcmVlOworICAgIHJl
dHVybiBsZWZ0OworfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjp1cGRhdGVMYXJnZXN0
RnJlZShOb2RlKiBub2RlKQoreworICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnBhcmVudCkpIHsK
KyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBXZWJDb3JlOjpJbnRTaXplKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS53
aWR0aCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLmhlaWdo
dCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnJl
bGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBMb2NhdGUgdGhl
IG5vZGUgdGhhdCBjb250YWlucyB0aGUgYWxsb2NhdGVkIHJlZ2lvbi4KKyAgICBOb2RlKiBub2Rl
ID0gbV9yb290OworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gcmVjdC5sb2NhdGlvbigp
OworICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIGlmIChub2RlLT5sZWZ0ICYmIG5vZGUtPmxl
ZnQtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7
CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUtPnJpZ2h0LT5yZWN0LmNvbnRh
aW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yaWdodDsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+cmVjdC5jb250YWlucyhwb2ludCkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOyAvLyBQb2ludCBpcyBjb21wbGV0ZWx5IG91
dHNpZGUgdGhlIHRyZWUuCisgICAgfQorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gTWFyayB0aGUgbm9kZSBhcyBmcmVlIGFuZCB0aGVuIHdvcmsgdXB3YXJkcyB0aHJv
dWdoIHRoZSB0cmVlCisgICAgLy8gcmVjb21iaW5pbmcgYW5kIGRlbGV0aW5nIG5vZGVzIHVudGls
IHdlIHJlYWNoIGEgc2libGluZworICAgIC8vIHRoYXQgaXMgc3RpbGwgYWxsb2NhdGVkLgorICAg
IG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7CisgICAgd2hpbGUgKG5vZGUt
PnBhcmVudCkgeworICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0ID09IG5vZGUpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPnJpZ2h0LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5w
YXJlbnQtPnJpZ2h0LT5yZWN0LnNpemUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQtPmxhcmdlc3RG
cmVlICE9IG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC5zaXplKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKyAgICAgICAg
ZnJlZU5vZGUobm9kZS0+bGVmdCk7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPnJpZ2h0KTsKKyAg
ICAgICAgbV9ub2RlQ291bnQgLT0gMjsKKyAgICAgICAgbm9kZS0+bGVmdCA9IDA7CisgICAgICAg
IG5vZGUtPnJpZ2h0ID0gMDsKKyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0
LnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHRoZSByZXN0IG9mIG91ciBhbmNlc3RvcnMg
aGF2ZSB0aGUgY29ycmVjdCAibGFyZ2VzdCBmcmVlIHNpemUiLgorICAgIHVwZGF0ZUxhcmdlc3RG
cmVlKG5vZGUpOworfQorCitpbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9ub2RlQ291bnQgKiBzaXplb2YoTm9kZSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
QXJlYUFsbG9jYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0FyZWFB
bGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTg4NzE2Yzg2ZDFjMWExM2FkYmRiNGVhOTNhNDc4MWVl
ZDM1MzllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FyZWFBbGxvY2F0b3IuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAorI2RlZmlu
ZSBBcmVhQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPEludFBvaW50Lmg+CisjaW5jbHVkZSA8SW50
UmVjdC5oPgorI2luY2x1ZGUgPEludFNpemUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworaW5s
aW5lIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtYmVyKQoreworICAgIC8vIFRoaXMgaXMgYSBm
YXN0IHRyaWNrIHRvIGdldCBuZXh0UG93ZXJPZlR3byBmb3IgYW4gaW50ZWdlci4KKyAgICAtLW51
bWJlcjsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE7CisgICAgbnVtYmVyIHw9IG51bWJlciA+
PiAyOworICAgIG51bWJlciB8PSBudW1iZXIgPj4gNDsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+
IDg7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiAxNjsKKyAgICBudW1iZXIrKzsKKyAgICByZXR1
cm4gbnVtYmVyOworfQorCitpbmxpbmUgSW50U2l6ZSBuZXh0UG93ZXJPZlR3byhjb25zdCBJbnRT
aXplJiBzaXplKQoreworICAgIHJldHVybiBJbnRTaXplKG5leHRQb3dlck9mVHdvKHNpemUud2lk
dGgoKSksIG5leHRQb3dlck9mVHdvKHNpemUuaGVpZ2h0KCkpKTsKK30KK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEFyZWFBbGxvY2F0b3Igewor
cHVibGljOgorICAgIEFyZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAg
IHZpcnR1YWwgfkFyZWFBbGxvY2F0b3IoKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVt
QWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluQWxsb2M7IH0KKyAgICB2b2lkIHNldE1p
bmltdW1BbGxvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIHsgbV9taW5BbGxv
YyA9IHNpemU7IH0KKworICAgIFdlYkNvcmU6OkludFNpemUgbWFyZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9tYXJnaW47IH0KKyAgICB2b2lkIHNldE1hcmdpbihjb25zdCBXZWJDb3JlOjpJbnRTaXpl
ICZtYXJnaW4pIHsgbV9tYXJnaW4gPSBtYXJnaW47IH0KKworICAgIHZpcnR1YWwgdm9pZCBleHBh
bmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZvaWQgZXhwYW5kQnkoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2Uo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmlydHVhbCBpbnQgb3ZlcmhlYWQoKSBj
b25zdDsKKworcHJvdGVjdGVkOgorICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOworICAgIFdl
YkNvcmU6OkludFNpemUgbV9taW5BbGxvYzsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWFyZ2lu
OworCisgICAgV2ViQ29yZTo6SW50U2l6ZSByb3VuZEFsbG9jYXRpb24oY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpIGNvbnN0OworfTsKKworY2xhc3MgR2VuZXJhbEFyZWFBbGxvY2F0b3IgOiBwdWJs
aWMgQXJlYUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgR2VuZXJhbEFyZWFBbGxvY2F0b3IoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZpcnR1YWwgfkdlbmVyYWxBcmVhQWxsb2NhdG9y
KCk7CisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgV2Vi
Q29yZTo6SW50UmVjdCBhbGxvY2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdm9p
ZCByZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICBpbnQgb3ZlcmhlYWQoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBlbnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07
CisKKyAgICBzdHJ1Y3QgTm9kZSB7CisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdDsKKyAg
ICAgICAgV2ViQ29yZTo6SW50U2l6ZSBsYXJnZXN0RnJlZTsKKyAgICAgICAgTm9kZSogcGFyZW50
OworICAgICAgICBOb2RlKiBsZWZ0OworICAgICAgICBOb2RlKiByaWdodDsKKyAgICB9OworCisg
ICAgTm9kZSogbV9yb290OworICAgIGludCBtX25vZGVDb3VudDsKKworICAgIHN0YXRpYyB2b2lk
IGZyZWVOb2RlKE5vZGUqKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBhbGxvY2F0ZUZyb21Ob2Rl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBOb2RlKik7CisgICAgTm9kZSogc3BsaXROb2RlKE5v
ZGUqLCBTcGxpdCk7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSopOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IDcwOTVjNDM4YmZl
NjQ5ZmUyMzZlY2ZhM2I4NzFjZjhmNDQwM2RlZTAuLmUyMjQ5MTUyN2Q3NTQ2MGRkNWE0NzlhYzkz
ZWMxYjBmZDkyNGU0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5jcHAKQEAgLTYwMSw3ICs2MDEsNyBAQCB2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUoKQogICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9
IGZhbHNlOwogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXNb
aV0uZGlkU3dhcEJ1ZmZlcnMoKTsKKyAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2Fw
QnVmZmVycygpOwogfQogCiBib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxl
VXBkYXRlc0FsbG93ZWQoKSBjb25zdApAQCAtNjIzLDE4ICs2MjMsMTggQEAgUGFzc093blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbnRl
bnRVcGRhdGUoY28KIHsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFw
aGljc0NvbnRleHQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91cGRhdGVBdGxhc2Vz
W2ldOwotICAgICAgICBpZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgeworICAgICAgICBVcGRh
dGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChh
dGxhcy0+ZmxhZ3MoKSA9PSBmbGFncykgewogICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVy
biBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
aGFuZGxlLCBzaXplLCBvZmZzZXQpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0ID0gYXRs
YXMtPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7
CiAgICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQogICAgICAgICAgICAgICAgIHJldHVy
biBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3Rh
dGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMjAwMDsKLSAgICBtX3VwZGF0
ZUF0bGFzZXMuYXBwZW5kKFVwZGF0ZUF0bGFzKFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdz
KSk7Ci0gICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCkuYmVnaW5QYWludGluZ09uQXZh
aWxhYmxlQnVmZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKKyAgICBzdGF0aWMgY29uc3QgaW50
IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBvZiB0
d28uCisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXMo
U2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7CisgICAgcmV0dXJuIG1fdXBkYXRlQXRs
YXNlcy5sYXN0KCktPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUs
IG9mZnNldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKaW5kZXggM2ZkNTlkMjE4MWYzMjc5
MzhmYzU3ZDA2ZDJkNGQxODI0NzlmMWJiMy4uMDI5Y2Y3ZGZiNjNlZDcyNzg0NGU4NWY5NmNlNzdm
ZGFiM2ZlZjg1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5oCkBAIC0xMjMsNyArMTIzLDcgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwog
ICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291
bnRzOwotICAgIFZlY3RvcjxVcGRhdGVBdGxhcz4gbV91cGRhdGVBdGxhc2VzOworICAgIFZlY3Rv
cjxPd25QdHI8VXBkYXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOwogCiAgICAgYm9vbCBtX25v
dGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKICAgICBib29sIG1faXNWYWxpZDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCmluZGV4
IDU4ODY5ZjM5OTc2ODAzMDAxYjAzYWVhOTA1YTExZDY4MjFiM2RiN2UuLmQzMjdlYjJkYzg2ODQ4
MjY4NTZlOWMzYmUyZDMwNWQyZDA2M2E0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcApAQCAtMjIsOSArMjIsMTIgQEAKIAogI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAorI2luY2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTMyLDExMiArMzUsNDgg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoaW50IGRpbWVu
c2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncykKICAgICA6IG1fZmxhZ3MoZmxhZ3Mp
CiB7Ci0gICAgbV9zdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKEludFNpemUoZGlt
ZW5zaW9uLCBkaW1lbnNpb24pLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3VwcG9ydHNHcmFw
aGljc1N1cmZhY2UpOwotfQotCi1zdGF0aWMgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1iZXIp
Ci17Ci0gICAgLy8gVGhpcyBpcyBhIGZhc3QgdHJpY2sgdG8gZ2V0IG5leHRQb3dlck9mVHdvIGZv
ciBhbiBpbnRlZ2VyLgotICAgIC0tbnVtYmVyOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTsK
LSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDI7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiA0Owot
ICAgIG51bWJlciB8PSBudW1iZXIgPj4gODsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE2Owot
ICAgIG51bWJlcisrOwotICAgIHJldHVybiBudW1iZXI7CisgICAgSW50U2l6ZSBzaXplID0gbmV4
dFBvd2VyT2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOworICAgIG1fc3VyZmFj
ZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFncywgU2hhcmVhYmxlU3VyZmFj
ZTo6U3VwcG9ydHNHcmFwaGljc1N1cmZhY2UpOwogfQogCiB2b2lkIFVwZGF0ZUF0bGFzOjpidWls
ZExheW91dElmTmVlZGVkKCkKIHsKLSAgICBpZiAoIW1fbGF5b3V0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBNaW5UaWxlU2l6ZSA9IDMyOwotICAg
IHN0YXRpYyBjb25zdCBpbnQgTWF4VGlsZVNpemUgPSA1MTI7Ci0KLSAgICAvLyBEaXZpZGUgb3Vy
IHNxdWFyZSB0byBzcXVhcmUgcG93ZXItb2YtdHdvIGJveGVzLgotICAgIGZvciAoaW50IGN1cnNv
ciA9IDA7IGN1cnNvciA8IHNpemUoKS53aWR0aCgpOyApIHsKLSAgICAgICAgaW50IHJlbWFpbmRl
ciA9IHNpemUoKS53aWR0aCgpIC0gY3Vyc29yOwotICAgICAgICBpbnQgZGltZW5zaW9uID0gc3Rk
OjptaW4ocmVtYWluZGVyLCBzdGQ6Om1pbihNYXhUaWxlU2l6ZSwgc3RkOjptYXgoTWluVGlsZVNp
emUsIG5leHRQb3dlck9mVHdvKHJlbWFpbmRlciAvIDIpKSkpOwotICAgICAgICBjdXJzb3IgKz0g
ZGltZW5zaW9uOwotICAgICAgICBtX2xheW91dC5hcHBlbmQoZGltZW5zaW9uKTsKKyAgICBpZiAo
IW1fYXJlYUFsbG9jYXRvcikgeworICAgICAgICBtX2FyZWFBbGxvY2F0b3IgPSBhZG9wdFB0cihu
ZXcgR2VuZXJhbEFyZWFBbGxvY2F0b3Ioc2l6ZSgpKSk7CisgICAgICAgIG1fYXJlYUFsbG9jYXRv
ci0+c2V0TWluaW11bUFsbG9jYXRpb24oSW50U2l6ZSgzMiwgMzIpKTsKICAgICB9Ci0KLSAgICBt
X2J1ZmZlclN0YXRlcy5yZXNpemUobV9sYXlvdXQuc2l6ZSgpICogbV9sYXlvdXQuc2l6ZSgpKTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYnVmZmVyU3RhdGVzLnNpemUoKTsgKytpKQotICAg
ICAgICBtX2J1ZmZlclN0YXRlc1tpXSA9IEF2YWlsYWJsZTsKLX0KLQotaW50IFVwZGF0ZUF0bGFz
OjpmaW5kQXZhaWxhYmxlSW5kZXgoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAg
ICBpbnQgZGltZW5zaW9uID0gbV9sYXlvdXQuc2l6ZSgpOwotICAgIGludCBzdHJpZGUgPSBkaW1l
bnNpb247Ci0gICAgaW50IHJlcXVpcmVkRGltZW5zaW9uID0gc3RkOjptYXgoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEJlZ2luIGZyb20gdGhlIHNtYWxsZXN0IGJ1ZmZl
ciwgdW50aWwgd2UgcmVhY2ggdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBidWZmZXIgdGhhdCdzIGJp
ZyBlbm91Z2ggdG8gY29udGFpbiBvdXIgcmVjdC4KLSAgICBmb3IgKGludCBpID0gbV9idWZmZXJT
dGF0ZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpIC09IChkaW1lbnNpb24gKyAxKSwgLS1zdHJpZGUp
IHsKLSAgICAgICAgLy8gTmVlZCBhIGJpZ2dlciBidWZmZXIuCi0gICAgICAgIGlmIChtX2xheW91
dFtpIC8gZGltZW5zaW9uXSA8IHJlcXVpcmVkRGltZW5zaW9uKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgLy8gQ2hlY2sgYWxsIGJ1ZmZlcnMgb2YgY3VycmVudCBzaXplLCB0byBm
aW5kIGFuIGF2YWlsYWJsZSBvbmUuCi0gICAgICAgIGZvciAoaW50IG9mZnNldCA9IDA7IG9mZnNl
dCA8IHN0cmlkZTsgKytvZmZzZXQpIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGkgLSBvZmZz
ZXQ7Ci0gICAgICAgICAgICBpZiAobV9idWZmZXJTdGF0ZXNbaW5kZXhdID09IEF2YWlsYWJsZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gLTE7CiB9CiAKIHZvaWQgVXBkYXRlQXRsYXM6OmRpZFN3YXBCdWZmZXJzKCkKIHsKKyAg
ICBtX2FyZWFBbGxvY2F0b3IuY2xlYXIoKTsKICAgICBidWlsZExheW91dElmTmVlZGVkKCk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2J1ZmZlclN0YXRlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV9idWZmZXJTdGF0ZXNbaV0gPSBBdmFpbGFibGU7CiB9CiAKIFBhc3NPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKFNo
YXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
aXplLCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKLSAg
ICBpbnQgaW5kZXggPSBmaW5kQXZhaWxhYmxlSW5kZXgoc2l6ZSk7CisgICAgSW50UmVjdCByZWN0
ID0gbV9hcmVhQWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplKTsKIAogICAgIC8vIE5vIGF2YWlsYWJs
ZSBidWZmZXIgd2FzIGZvdW5kLCByZXR1cm5pbmcgbnVsbC4KLSAgICBpZiAoaW5kZXggPCAwKQor
ICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PigpOwogCiAgICAgaWYgKCFtX3N1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUp
KQogICAgICAgICByZXR1cm4gUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KCk7
CiAKICAgICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIg
dXBkYXRlcy4KLSAgICBtX2J1ZmZlclN0YXRlc1tpbmRleF0gPSBUYWtlbjsKLSAgICBvZmZzZXQg
PSBvZmZzZXRGb3JJbmRleChpbmRleCk7Ci0gICAgSW50UmVjdCByZWN0KEludFBvaW50Ojp6ZXJv
KCksIHNpemUpOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9
IG1fc3VyZmFjZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KEludFJlY3Qob2Zmc2V0LCBzaXplKSk7
CisgICAgb2Zmc2V0ID0gcmVjdC5sb2NhdGlvbigpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRl
eHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fc3VyZmFjZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KHJl
Y3QpOwogCiAgICAgaWYgKGZsYWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEp
IHsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlQ29weSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocmVjdCwgQ29sb3I6
OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5maWxsUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHNpemUpLCBDb2xvcjo6dHJh
bnNwYXJlbnQsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICB9CiAKICAg
ICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKIH0KIAotSW50UG9pbnQgVXBkYXRl
QXRsYXM6Om9mZnNldEZvckluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBj
b29yZChpbmRleCAlIG1fbGF5b3V0LnNpemUoKSwgaW5kZXggLyBtX2xheW91dC5zaXplKCkpOwot
ICAgIGludCB4ID0gMDsKLSAgICBpbnQgeSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b29yZC54KCk7ICsraSkKLSAgICAgICAgeCArPSBtX2xheW91dFtpXTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvb3JkLnkoKTsgKytpKQotICAgICAgICB5ICs9IG1fbGF5b3V0W2ldOwotCi0g
ICAgcmV0dXJuIEludFBvaW50KHgsIHkpOwotfQotCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKaW5kZXggN2QyMjIzNzY5YjEy
YjNmMGQ3ZDI5NGJjMjZmNzU4ZGIzOWNhYzA0Zi4uZGMyN2JhYzNiZTJjZWI4ZWQyNjVhMjNlYmM2
ZGJiMGRiNDlmOTczOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1VwZGF0ZUF0bGFzLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1VwZGF0ZUF0bGFzLmgKQEAgLTIwLDYgKzIwLDggQEAKICNpZm5kZWYgVXBkYXRlQXRsYXNfaAog
I2RlZmluZSBVcGRhdGVBdGxhc19oCiAKKyNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisjaW5j
bHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKIAogI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKQEAgLTMxLDYgKzMzLDcgQEAgY2xhc3MgSW50UmVjdDsK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBVcGRhdGVBdGxhcyB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVXBkYXRlQXRsYXMpOwogcHVibGljOgogICAgIFVwZGF0ZUF0bGFzKGludCBk
aW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOwogCkBAIC00MywxNyArNDYsOSBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBidWlsZExheW91dElmTmVlZGVkKCk7Ci0gICAg
V2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0Rm9ySW5kZXgoaW50KSBjb25zdDsKLSAgICBpbnQgZmlu
ZEF2YWlsYWJsZUluZGV4KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKIAogcHJpdmF0ZToKLSAg
ICBlbnVtIFN0YXRlIHsKLSAgICAgICAgQXZhaWxhYmxlLAotICAgICAgICBUYWtlbgotICAgIH07
Ci0KLSAgICBWZWN0b3I8U3RhdGU+IG1fYnVmZmVyU3RhdGVzOwotICAgIFZlY3RvcjxpbnQ+IG1f
bGF5b3V0OworICAgIE93blB0cjxHZW5lcmFsQXJlYUFsbG9jYXRvcj4gbV9hcmVhQWxsb2NhdG9y
OwogICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgbV9mbGFnczsKICAgICBSZWZQdHI8U2hhcmVh
YmxlU3VyZmFjZT4gbV9zdXJmYWNlOwogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>