<?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>65668</bug_id>
          
          <creation_ts>2011-08-04 00:25:01 -0700</creation_ts>
          <short_desc>Optimize floating elements lookup</short_desc>
          <delta_ts>2011-08-09 00:23:35 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>65667</dependson>
    
    <dependson>65868</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Alexandru Chiculita">achicu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>hyatt</cc>
    
    <cc>mihnea</cc>
    
    <cc>peter</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>446362</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-04 00:25:01 -0700</bug_when>
    <thetext>Currently the floating RenderObjects are stored in a list and searched by using a linear search. When the number of floats increases the layout becomes very slow. A better structure should be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446365</commentid>
    <comment_count>1</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-04 00:29:39 -0700</bug_when>
    <thetext>Two options are currently available:
1. Use the shape algebra algorithm described in Graphics Gems II and implemented in Regions.cpp that is used by WebKit2 to track the dirty areas
2. Use the PODIntervalTree.h  that was used by the GPU rendering of polygons in WebCore

Regions:
* Regions.cpp seems to be very promising although the current implementation is not there yet. My current prototype is slower then the simple linear search. It needs to be highly optimized for our simple operation: adding a new rectangle (ie. no full memory copies, in-place updates, skipping spans before and after the rectangle)
* Uses less memory then interval trees for compact floats that have same height (eg. lots of floats per line)
* It is not able to query a list of floats that affect a line and that might later be needed for wrap-shape exclusions.
* Search time should be O(logN) where N is the amount of spans created by the algorithm.

Interval trees: 
* Current prototype is already very fast
* Uses a fixed amount of memory O(N) where N is number of floats, but I think that can be improved by merging the nodes for the compact floats. It should become similar to Regions and will also improve speed (because of having less nodes).
* Has O(logN) insert/remove/search times (N is the number of floats)
* Can query exact list of floats for a specific line

Regions.cpp uses a lot less memory when the floats are really compact. However, it seems to take a lot of time to update the structure. The memory increases when the floats are really small in height, because it will tend to create lots of spans.  However, the implementation in Regions is not optimized for lots of spans. There&apos;s an optimization mentioned at the end of the Graphics Gems chapter about skipping non-affected spans. Also we only need to unite a rect and in that case the operation can be further optimized. 

Memory allocations are also a big issue, a simple operation will copy the whole structure. The article optimizes the memory allocations by using a linked list and doing most of the updates in-place. The Regions.cpp implementation also tries to merge spans, but the article says it is not worth the time if the structure is not going to be used for a bigger amount of time. In our case the Region will always be recreated when a new layout is done. 

Indeed the query for rectangles at a specific height can be very fast, it would only require a search in a sorted list. It should always retrieve a maximum of two rectangles: one for all the floats on the left and one rectangle for all the floats on the right, so the actual calculation is pretty easy. That will get a little more complicated for positioned elements. However, when wrap-shapes will be implemented, it will need to know exactly what floats are on the line, so that the wrap-shape can be taken into account. Using this algorithm that information seems to be lost in the compression. The alternative would be to approximate the curves of the wrap-shape using rectangles and pollute the floats Region. Having that will create lots of spans and will only make it a lot slower. Moreover, such a solution will make it dependent on the resolution.

Removing the floats below a specified Y value can also be optimized by just removing all the spans after one point. That is needed when rewinding a line, for example for pagination purposes.
MarkAllDescendantsWithFloatsForLayout also removes the floats, but it looks like there&apos;s no need to update the Region in that case. That&apos;s because the layout will be forced on those blocks , so the region will be totally cleared anyway. In that case it seems it always just adds new rectangles, so a subtract is not actually needed, meaning that we can optimize only for a union between a Region and a LayoutRect.

An interval tree will create a node for each placed float. The implementation is based on a red/black balanced tree, so we got O(logN) for all the operations. The good news is that the implementation allocates the nodes in an arena, so it is very fast because no free or destroy callbacks are used. The arena goes away when the tree is cleared and that will happen at beginning of every layout. That is important because we tend to have few removals from the tree (only when a line is rewinded at the end of a column/region/page). The interval tree is very predictable,  it always uses a specific amount of memory O(n) where n is the number of floats and it has O(logN) insert/remove/search times. It also allows querying an exact list of floats that are affecting a line (needed for wrap-shape).

The memory of the interval tree may be improved by doing a search before adding a new interval. For example multiple same height floats on a single line can be merged together, all it needs to do is to update offset of the interval.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446367</commentid>
    <comment_count>2</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-04 00:33:57 -0700</bug_when>
    <thetext>Per discussion with David Hyatt:
1. We will go with interval trees.
2. Also other optimizations can be explored in order to avoid tree propagation through descendant blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446549</commentid>
    <comment_count>3</comment_count>
      <attachid>102931</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-04 09:22:21 -0700</bug_when>
    <thetext>Created attachment 102931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446564</commentid>
    <comment_count>4</comment_count>
      <attachid>102936</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-04 09:41:34 -0700</bug_when>
    <thetext>Created attachment 102936
Patch

Rebased the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446873</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-04 16:10:36 -0700</bug_when>
    <thetext>Does this show a speed up on any tests?  Can we construct a test that shows an improvement (something with a lot of floats)?  

Looking good though!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446950</commentid>
    <comment_count>6</comment_count>
      <attachid>103014</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-04 18:20:31 -0700</bug_when>
    <thetext>Created attachment 103014
Simple Performance Test

Created a simple performance test.
On my machine I get nearly 7fps with nightly builds and about 18fps with this patch applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446959</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-04 18:39:33 -0700</bug_when>
    <thetext>&gt; Simple Performance Test

Feel encouraged to put the perf test somewhere in this folder:
http://trac.webkit.org/browser/trunk/PerformanceTests

:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447000</commentid>
    <comment_count>8</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-04 21:14:35 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Simple Performance Test
&gt; 
&gt; Feel encouraged to put the perf test somewhere in this folder:
&gt; http://trac.webkit.org/browser/trunk/PerformanceTests
&gt; 
&gt; :)


I&apos;ve added https://bugs.webkit.org/show_bug.cgi?id=65741 . I will submit a patch today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447242</commentid>
    <comment_count>9</comment_count>
      <attachid>103078</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-05 09:37:14 -0700</bug_when>
    <thetext>Created attachment 103078
Patch

Removed the need to populate a vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447245</commentid>
    <comment_count>10</comment_count>
      <attachid>103078</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-05 09:46:53 -0700</bug_when>
    <thetext>Comment on attachment 103078
Patch

Attachment 103078 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9305871</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447260</commentid>
    <comment_count>11</comment_count>
      <attachid>103083</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-05 10:09:46 -0700</bug_when>
    <thetext>Created attachment 103083
Patch

Fixed build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447322</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-05 12:03:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=103014) [details]
&gt; Simple Performance Test
&gt; 
&gt; Created a simple performance test.
&gt; On my machine I get nearly 7fps with nightly builds and about 18fps with this patch applied.

Very nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447329</commentid>
    <comment_count>13</comment_count>
      <attachid>103083</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-05 12:13:37 -0700</bug_when>
    <thetext>Comment on attachment 103083
Patch

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

Overall this looks pretty good. I have one major issue with the patch though, and that is that I would prefer it if the interval tree was built lazily if possible. I could be wrong about this but if you have something like this:

&lt;img style=&quot;float:left;width:10px;height:1000px&quot;&gt;
&lt;div&gt;&lt;div&gt;&lt;div&gt;....lots more nested divs.... &lt;div&gt;Some text

We propagate floating objects into all of the nested divs. This duplication is bad enough and is something we need to fix, but if you don&apos;t build the interval tree lazily you will also have tons of duplication in each div, even though nobody actually *tested* for overlap in any of the intermediate divs.

It seems like you could have a notion of whether or not a float&apos;s overlap has been computed that is independent of being placed and add to the interval tree lazily when someone actually does an overlap test.

I think I&apos;d like to see a deeply nested div performance test in which many many floats intrude into all of those divs to verify the potential performance gain from the optimization I&apos;m suggesting. That will also help us measure when we remove all of the duplicate FloatingObject construction down the road as well.

&gt; Source/WebCore/rendering/RenderBlock.cpp:94
&gt; +#ifndef NDEBUG
&gt; +// These helpers are only used by the PODIntervalTree for debugging purposes.
&gt; +String ValueToString&lt;int&gt;::string(const int value)
&gt; +{
&gt; +    return String::number(value);
&gt; +}
&gt; +
&gt; +String ValueToString&lt;RenderBlock::FloatingObject*&gt;::string(const RenderBlock::FloatingObject* floatingObject)
&gt; +{
&gt; +    return String::format(&quot;%p (%dx%d %dx%d)&quot;, floatingObject, floatingObject-&gt;x(), floatingObject-&gt;y(), floatingObject-&gt;maxX(), floatingObject-&gt;maxY());
&gt; +}
&gt; +#endif

Can we put these at the end of the file along with the renderName dumping.

&gt; Source/WebCore/rendering/RenderBlock.cpp:1211
&gt; +    if (m_floatingObjects)
&gt; +        m_floatingObjects-&gt;setHorizontalWritingMode(isHorizontalWritingMode());

Seems like you could do this inside clearFloats.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3419
&gt;          floatingObject-&gt;setIsPlaced();
&gt; +        m_floatingObjects-&gt;addPlacedObject(floatingObject);

You could move setIsPlaced inside addPlacedObject.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3666
&gt;          floatingObject-&gt;setIsPlaced(true);
&gt; +        m_floatingObjects-&gt;addPlacedObject(floatingObject);

Again, you could move setIsPlaced inside addPlacedObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447331</commentid>
    <comment_count>14</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-05 12:15:40 -0700</bug_when>
    <thetext>Note my comments about &quot;You could move setIsPlaced inside addPlacedObject.&quot; don&apos;t apply if you do the lazy interval tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447986</commentid>
    <comment_count>15</comment_count>
      <attachid>103242</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-08 07:26:41 -0700</bug_when>
    <thetext>Created attachment 103242
Patch

Updated the floats test to also create some empty nested divs. It seems that the lazy init optimization makes a big difference. Thanks for the tip.

Also addressed the other comments.

Regarding &quot;You could move setIsPlaced inside addPlacedObject&quot; comment. I think it&apos;s ok to move it, even if I changed to lazy init now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447999</commentid>
    <comment_count>16</comment_count>
      <attachid>103242</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-08 08:00:38 -0700</bug_when>
    <thetext>Comment on attachment 103242
Patch

Attachment 103242 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9329853

New failing tests:
css2.1/t0905-c414-flt-wrap-00-e.html
css2.1/t09-c5526c-display-00-e.html
css2.1/t0905-c414-flt-03-c.html
css1/box_properties/clear_float.html
css1/box_properties/float_elements_in_series.html
css1/box_properties/clear.html
css1/formatting_model/vertical_formatting.html
css1/box_properties/float_margin.html
css2.1/t0905-c414-flt-04-c.html
css2.1/t0905-c414-flt-02-c.html
css2.1/t0905-c414-flt-00-d.html
css2.1/t0905-c5525-fltblck-00-d-ag.html
css1/formatting_model/floating_elements.html
css2.1/t0905-c414-flt-wrap-01-d-g.html
css1/box_properties/float.html
css2.1/t0905-c414-flt-fit-01-d-g.html
css1/box_properties/acid_test.html
css2.1/t0905-c414-flt-01-d-g.html
css1/box_properties/float_on_text_elements.html
css2.1/t0905-c414-flt-fit-00-d.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448000</commentid>
    <comment_count>17</comment_count>
      <attachid>103246</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-08 08:01:23 -0700</bug_when>
    <thetext>Created attachment 103246
Fixed build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448003</commentid>
    <comment_count>18</comment_count>
      <attachid>103247</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-08 08:10:04 -0700</bug_when>
    <thetext>Created attachment 103247
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448014</commentid>
    <comment_count>19</comment_count>
      <attachid>103252</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-08 08:34:10 -0700</bug_when>
    <thetext>Created attachment 103252
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448028</commentid>
    <comment_count>20</comment_count>
      <attachid>103252</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-08 09:11:34 -0700</bug_when>
    <thetext>Comment on attachment 103252
Patch

All looks good! r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448117</commentid>
    <comment_count>21</comment_count>
      <attachid>103252</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-08 11:09:33 -0700</bug_when>
    <thetext>Comment on attachment 103252
Patch

Clearing flags on attachment: 103252

Committed r92610: &lt;http://trac.webkit.org/changeset/92610&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448118</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-08 11:09:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448354</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-08 16:37:39 -0700</bug_when>
    <thetext>This has been rolled out in bug 65868, correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448459</commentid>
    <comment_count>24</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-09 00:23:35 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; This has been rolled out in bug 65868, correct?

Yes. I&apos;ve added https://bugs.webkit.org/show_bug.cgi?id=65871 and submitted the patch on that bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102931</attachid>
            <date>2011-08-04 09:22:21 -0700</date>
            <delta_ts>2011-08-04 09:41:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65668.patch</filename>
            <type>text/plain</type>
            <size>42894</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4M2Q5MzFlLi44ZGY2ZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzcg
QEAKIDIwMTEtMDgtMDQgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgog
CisgICAgICAgIE9wdGltaXplIGZsb2F0aW5nIGVsZW1lbnRzIGxvb2t1cAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2NjgKKworICAgICAgICBBZGRl
ZCBhbiBpbnRlcnZhbCB0cmVlIGluIHRoZSBGbG9hdGluZ09iamVjdHMgc3RydWN0dXJlLiBBbHNv
IGFkZGVkIG5ldyBtZWNoYW5pc21zIHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGUgdHJlZSBpcyB1
cGRhdGVkIGNvcnJlY3RseSB3aGVuIGEgZmxvYXQgaXMgcmVwb3NpdGlvbmVkLgorICAgICAgICAK
KyAgICAgICAgQWRkZWQgYSBtZXRob2QgaW4gUE9ESW50ZXJ2YWxUcmVlIHRoYXQgcmV0dXJucyB0
aGUgbGlzdCBvZiBpbnRlcnZhbHMgdGhhdCAKKyAgICAgICAgY29udGFpbiBhIHNwZWNpZmllZCBw
b2ludC4gSXQgd2lsbCBvbmx5IHJldHVybiBhbiBpdGVydmFsIGlmIHkgaXMgaW5zaWRlIFtsb3cs
IGhpZ2gpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFjdG9yIG9uIHRoZSBmbG9hdGluZyBvYmplY3RzIGRh
dGEgc3RydWN0dXJlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHBsYXRmb3JtL1BPREludGVydmFsLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQT0RJbnRlcnZhbDo6Y29udGFpbnMpOgorICAgICAgICAqIHBsYXRmb3JtL1BPREludGVydmFs
VHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjphbGxPdmVybGFwc0F0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjpzZWFyY2hGb3JPdmVy
bGFwc0F0UG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpjbGVhcik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6c3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpwYWludEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2Vs
ZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRp
bmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5n
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09i
amVjdHNCZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdG
bG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zm
c2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9n
aWNhbEJvdHRvbUJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb3dlc3RG
bG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZFBv
c2l0aW9uZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9h
dGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3RzOjphZGRQbGFjZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3Q6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdDo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0Ojppc0luUGxhY2VkVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldElzSW5QbGFjZWRUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpzZXRIb3Jp
em9udGFsV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0czo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdHM6OnBsYWNlZEZsb2F0c1RyZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91
dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
aW5rVG9FbmRMaW5lSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1h
dGNoZWRFbmRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5l
d0Zsb2F0T25MaW5lKToKKworMjAxMS0wOC0wNCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGlj
dUBhZG9iZS5jb20+CisKICAgICAgICAgTW92ZSBQT0RJbnRlcnZhbFRyZWUgdG8gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY1NjY3CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA3ZmFiODZhLi4zOTA5Yjk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzMyLDYgKzEzMzIs
MTAgQEAKIAkJNTAxQkFBQTkxMzk1MEUyQzAwRjdBQ0VCIC8qIFdpbmRSdWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDFCQUFBODEzOTUwRTJDMDBG
N0FDRUIgLyogV2luZFJ1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MDhDQ0E0RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA4Q0NB
NEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuaCAqLzsgfTsKIAkJNTA4Q0NB
NTAxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA4Q0NBNEUxM0NGMTA2QjAwMzE1MUYz
IC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwICovOyB9OworCQk1MDk3QzVBMzEzRUFCQTdFMDAyREU0
QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUwOTdDNTlGMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUwOTdDNUE0MTNFQUJBN0Uw
MDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTA5N0M1QTAxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTA5N0M1
QTUxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1QTExM0VBQkE3RTAwMkRFNEFGIC8q
IFBPREludGVydmFsVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTUwOTdDNUE2MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwOTdDNUEy
MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MEU1NjZENjEzOUUzOEM1MDAyMTQ0MzMg
LyogQ1NTV3JhcFNoYXBlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MDFCQUFCMTEzOTUxMTRCMDBGN0FDRUIgLyogQ1NTV3JhcFNoYXBlcy5jcHAg
Ki87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxODQ2NzBCMDg2MDJB
MDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxMDE4NDZBMEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4
NDY4MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmNwcCAqLzsgfTsKQEAgLTc5MjYsNiAr
NzkzMCwxMCBAQAogCQk1MDFCQUFCMTEzOTUxMTRCMDBGN0FDRUIgLyogQ1NTV3JhcFNoYXBlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NXcmFwU2hhcGVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYz
IC8qIFJlbmRlckZsb3dUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyRmxvd1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MDhDQ0E0
RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJGbG93VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREFyZW5hLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPREFyZW5hLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUwOTdDNUEwMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZh
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQT0RJbnRlcnZhbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzVBMTEzRUFCQTdFMDAyREU0QUYgLyogUE9E
SW50ZXJ2YWxUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPREludGVy
dmFsVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzVBMjEzRUFCQTdF
MDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBPRFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYWNoZWRQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxMDE4NDY4MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFBhZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFt
RXJyb3JCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tl
dFN0cmVhbUVycm9yQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODk5
MSw2ICsxODk5OSwxMCBAQAogCQlCQ0YxQTVCQTA5NzgzMjA5MDA2MUExMjMgLyogcGxhdGZvcm0g
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUwOTdDNTlG
MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oICovLAorCQkJCTUwOTdDNUEwMTNFQUJBN0Uw
MDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oICovLAorCQkJCTUwOTdDNUExMTNFQUJBN0UwMDJERTRB
RiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLywKKwkJCQk1MDk3QzVBMjEzRUFCQTdFMDAyREU0QUYg
LyogUE9EUmVkQmxhY2tUcmVlLmggKi8sCiAJCQkJNDlFOTEyQTQwRUZBQzhFNjAwOUQwQ0FGIC8q
IGFuaW1hdGlvbiAqLywKIAkJCQlGRDMxNjA0MDEyQjAyNkEzMDBDMUEzNTkgLyogYXVkaW8gKi8s
CiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJEIC8qIGNmICovLApAQCAtMjMzMjMsNiArMjMz
MzUsMTAgQEAKIAkJCQlENzBBRDY1ODEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0FCNDE4MjEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OTBDNDdDRTEzRTgyRDE4MDBGN0FCODIgLyogRGlzcGF0Y2hU
YXNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MDk3QzVBMzEzRUFCQTdFMDAyREU0QUYgLyogUE9E
QXJlbmEuaCBpbiBIZWFkZXJzICovLAorCQkJCTUwOTdDNUE0MTNFQUJBN0UwMDJERTRBRiAvKiBQ
T0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTA5N0M1QTUxM0VBQkE3RTAwMkRFNEFG
IC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTA5N0M1QTYxM0VBQkE3
RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJbnRlcnZhbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUE9ESW50ZXJ2YWwuaAppbmRleCA1YzFkY2MyLi5kNDVmMTNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJbnRlcnZhbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BPREludGVydmFsLmgKQEAgLTExNiw2ICsxMTYsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gb3ZlcmxhcHMob3RoZXIubG93KCksIG90aGVyLmhpZ2goKSk7CiAgICAg
fQogCisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiBwb2ludCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLT5sb3coKSA8PSBwb2ludCAmJiBwb2ludCA8IHRoaXMtPmhpZ2goKTsK
KyAgICB9CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbnRlcnZhbCBpcyAibGVzcyIg
dGhhbiB0aGUgb3RoZXIuIFRoZQogICAgIC8vIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIG9uIHRo
ZSBsb3cgZW5kcG9pbnRzIG9mIHRoZSBpbnRlcnZhbHMuCiAgICAgYm9vbCBvcGVyYXRvcjwoY29u
c3QgUE9ESW50ZXJ2YWwmIG90aGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUE9ESW50ZXJ2YWxUcmVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJ
bnRlcnZhbFRyZWUuaAppbmRleCA1YmYzZGUwLi4wNDRmMTJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaApAQCAtODMsNiArODMsMTYgQEAgcHVibGljOgogICAg
ICAgICBzZWFyY2hGb3JPdmVybGFwc0Zyb20odGhpcy0+cm9vdCgpLCBpbnRlcnZhbCwgcmVzdWx0
KTsKICAgICB9CiAKKyAgICAvLyBSZXR1cm5zIGFsbCBpbnRlcnZhbHMgaW4gdGhlIHRyZWUgd2hp
Y2ggb3ZlcmxhcCB0aGUgZ2l2ZW4gcXVlcnkKKyAgICAvLyBpbnRlcnZhbC4gVGhlIHJldHVybmVk
IGludGVydmFscyBhcmUgc29ydGVkIGJ5IGluY3JlYXNpbmcgbG93CisgICAgLy8gZW5kcG9pbnQu
CisgICAgdm9pZCBhbGxPdmVybGFwc0F0UG9pbnQoY29uc3QgVCYgcG9pbnQsIFZlY3RvcjxJbnRl
cnZhbFR5cGU+JiByZXN1bHQpIGNvbnN0CisgICAgeworICAgICAgICAvLyBFeHBsaWNpdCBkZXJl
ZmVyZW5jZSBvZiAidGhpcyIgcmVxdWlyZWQgYmVjYXVzZSBvZgorICAgICAgICAvLyBpbmhlcml0
YW5jZSBydWxlcyBpbiB0ZW1wbGF0ZSBjbGFzc2VzLgorICAgICAgICBzZWFyY2hGb3JPdmVybGFw
c0F0UG9pbnQodGhpcy0+cm9vdCgpLCBwb2ludCwgcmVzdWx0KTsKKyAgICB9CisKICAgICAvLyBI
ZWxwZXIgdG8gY3JlYXRlIGludGVydmFsIG9iamVjdHMuCiAgICAgc3RhdGljIEludGVydmFsVHlw
ZSBjcmVhdGVJbnRlcnZhbChjb25zdCBUJiBsb3csIGNvbnN0IFQmIGhpZ2gsIGNvbnN0IFVzZXJE
YXRhIGRhdGEgPSAwKQogICAgIHsKQEAgLTEzOSw2ICsxNDksMzYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbShub2RlLT5yaWdodCgpLCBpbnRlcnZhbCwgcmVz
KTsKICAgICB9CiAKKyAgICAvLyBTdGFydGluZyBmcm9tIHRoZSBnaXZlbiBub2RlLCBhZGRzIGFs
bCBvdmVybGFwcyB3aXRoIHRoZSBnaXZlbgorICAgIC8vIHBvaW50IHRvIHRoZSByZXN1bHQgdmVj
dG9yLiBUaGUgaW50ZXJ2YWxzIGFyZSBzb3J0ZWQgYnkKKyAgICAvLyBpbmNyZWFzaW5nIGxvdyBl
bmRwb2ludC4KKyAgICB2b2lkIHNlYXJjaEZvck92ZXJsYXBzQXRQb2ludChJbnRlcnZhbE5vZGUq
IG5vZGUsIGNvbnN0IFQmIHBvaW50LCBWZWN0b3I8SW50ZXJ2YWxUeXBlPiYgcmVzKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IC8vIEJlY2F1c2UgdGhlIGludGVydmFscyBhcmUgc29ydGVkIGJ5IGxlZnQgZW5kcG9pbnQsIGlu
b3JkZXIKKyAgICAgICAgLy8gdHJhdmVyc2FsIHByb2R1Y2VzIHJlc3VsdHMgc29ydGVkIGFzIGRl
c2lyZWQuCisKKyAgICAgICAgLy8gU2VlIHdoZXRoZXIgd2UgbmVlZCB0byB0cmF2ZXJzZSB0aGUg
bGVmdCBzdWJ0cmVlLgorICAgICAgICBJbnRlcnZhbE5vZGUqIGxlZnQgPSBub2RlLT5sZWZ0KCk7
CisgICAgICAgIGlmIChsZWZ0CisgICAgICAgICAgICAvLyBUaGlzIGlzIHBocmFzZWQgdGhpcyB3
YXkgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIG9wZXJhdG9yCisgICAgICAgICAgICAvLyA8PSBvbiB0
eXBlIFQuCisgICAgICAgICAgICAmJiAhKGxlZnQtPmRhdGEoKS5tYXhIaWdoKCkgPCBwb2ludCkp
CisgICAgICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0F0UG9pbnQobGVmdCwgcG9pbnQsIHJlcyk7
CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJsYXAgd2l0aCBjdXJyZW50IG5vZGUuCisgICAg
ICAgIGlmIChub2RlLT5kYXRhKCkuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgcmVzLmFw
cGVuZChub2RlLT5kYXRhKCkpOworCisgICAgICAgIC8vIFNlZSB3aGV0aGVyIHdlIG5lZWQgdG8g
dHJhdmVyc2UgdGhlIHJpZ2h0IHN1YnRyZWUuCisgICAgICAgIC8vIFRoaXMgaXMgcGhyYXNlZCB0
aGlzIHdheSB0byBhdm9pZCB0aGUgbmVlZCBmb3Igb3BlcmF0b3IgPD0KKyAgICAgICAgLy8gb24g
dHlwZSBULgorICAgICAgICBpZiAoIShwb2ludCA8IG5vZGUtPmRhdGEoKS5sb3coKSkpCisgICAg
ICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0F0UG9pbnQobm9kZS0+cmlnaHQoKSwgcG9pbnQsIHJl
cyk7CisgICAgfQorCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxOb2RlKiBu
b2RlKQogICAgIHsKICAgICAgICAgLy8gV291bGQgdXNlIGNvbnN0IFQmLCBidXQgbmVlZCB0byBy
ZWFzc2lnbiB0aGlzIHJlZmVyZW5jZSBpbiB0aGlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BP
RFJlZEJsYWNrVHJlZS5oCmluZGV4IDdkZDlkZGQuLmYxNDdjYmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oCkBAIC0xMjcsNiArMTI3LDEyIEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgflBPRFJlZEJsYWNrVHJlZSgpIHsgfQogCisgICAgdm9pZCBjbGVhcigp
CisgICAgeworICAgICAgICBtX2FyZW5hID0gUE9EQXJlbmE6OmNyZWF0ZSgpOworICAgICAgICBt
X3Jvb3QgPSAwOworICAgIH0KKwogICAgIHZvaWQgYWRkKGNvbnN0IFQmIGRhdGEpCiAgICAgewog
ICAgICAgICBOb2RlKiBub2RlID0gbV9hcmVuYS0+YWxsb2NhdGVPYmplY3Q8Tm9kZSwgVD4oZGF0
YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAyNzI3NmIx
Li5iNzM5MzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAg
LTgwLDYgKzgwLDE5IEBAIHN0YXRpYyBEZWxheWVkVXBkYXRlU2Nyb2xsSW5mb1NldCogZ0RlbGF5
ZWRVcGRhdGVTY3JvbGxJbmZvU2V0ID0gMDsKIAogYm9vbCBSZW5kZXJCbG9jazo6c19jYW5Qcm9w
YWdhdGVGbG9hdEludG9TaWJsaW5nID0gZmFsc2U7CiAKKyNpZm5kZWYgTkRFQlVHCisvLyBUaGVz
ZSBoZWxwZXJzIGFyZSBvbmx5IHVzZWQgYnkgdGhlIFBPREludGVydmFsVHJlZSBmb3IgZGVidWdn
aW5nIHB1cnBvc2VzLgorU3RyaW5nIFZhbHVlVG9TdHJpbmc8aW50Pjo6c3RyaW5nKGNvbnN0IGlu
dCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOworfQorCitTdHJp
bmcgVmFsdWVUb1N0cmluZzxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqPjo6c3RyaW5nKGNv
bnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcCAoJWR4JWQgJWR4JWQpIiwgZmxvYXRpbmdPYmplY3Qs
IGZsb2F0aW5nT2JqZWN0LT54KCksIGZsb2F0aW5nT2JqZWN0LT55KCksIGZsb2F0aW5nT2JqZWN0
LT5tYXhYKCksIGZsb2F0aW5nT2JqZWN0LT5tYXhZKCkpOworfQorI2VuZGlmCisKIC8vIE91ciBN
YXJnaW5JbmZvIHN0YXRlIHVzZWQgd2hlbiBsYXlpbmcgb3V0IGJsb2NrIGNoaWxkcmVuLgogUmVu
ZGVyQmxvY2s6Ok1hcmdpbkluZm86Ok1hcmdpbkluZm8oUmVuZGVyQmxvY2sqIGJsb2NrLCBpbnQg
YmVmb3JlQm9yZGVyUGFkZGluZywgaW50IGFmdGVyQm9yZGVyUGFkZGluZykKICAgICA6IG1fYXRC
ZWZvcmVTaWRlT2ZCbG9jayh0cnVlKQpAQCAtMjc0LDcgKzI4Nyw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5CiAgICAgYm9vbCBjYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nID0gIWlzRmxv
YXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYXZvaWRzRmxvYXRzKCk7CiAgICAgaWYgKGRpZmYgPT0g
U3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAm
JiAhY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAmJiBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygp
KSB7CiAgICAgICAgIFJlbmRlckJsb2NrKiBwYXJlbnRCbG9jayA9IHRoaXM7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCiAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50KCk7IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmlldygp
OyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKQEAgLTExOTQsNiArMTIwNyw4IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VMb2dp
Y2FsSGVpZ2h0LCBCbG9jCiAgICAgQmxvY2tMYXlvdXRQYXNzIGZsb2F0c0xheW91dFBhc3MgPSBs
YXlvdXRQYXNzOwogICAgIGlmIChmbG9hdHNMYXlvdXRQYXNzID09IE5vcm1hbExheW91dFBhc3Mg
JiYgIXJlbGF5b3V0Q2hpbGRyZW4gJiYgIXBvc2l0aW9uZWRGbG9hdHNOZWVkUmVsYXlvdXQoKSkK
ICAgICAgICAgZmxvYXRzTGF5b3V0UGFzcyA9IFBvc2l0aW9uZWRGbG9hdExheW91dFBhc3M7Cisg
ICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKQorICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwogICAgIGNs
ZWFyRmxvYXRzKGZsb2F0c0xheW91dFBhc3MpOwogCiAgICAgaW50IHByZXZpb3VzSGVpZ2h0ID0g
bG9naWNhbEhlaWdodCgpOwpAQCAtMTQzNiw3ICsxNDUxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCkKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAg
Zm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0
OwpAQCAtMjI5NCw3ICsyMzA5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5n
aW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cykKICAgICAvLyBGSVhNRTogQXZvaWQg
ZGlzYWJsaW5nIExheW91dFN0YXRlLiBBdCB0aGUgdmVyeSBsZWFzdCwgZG9uJ3QgZGlzYWJsZSBp
dCBmb3IgZmxvYXRzIG9yaWdpbmF0aW5nCiAgICAgLy8gaW4gdGhpcyBibG9jay4gQmV0dGVyIHll
dCB3b3VsZCBiZSB0byBwdXNoIGV4dHJhIHN0YXRlIGZvciB0aGUgY29udGFpbmVycyBvZiBvdGhl
ciBmbG9hdHMuCiAgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZp
ZXcoKSk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTI2
MjcsNyArMjY0Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgaWYgKCFtX2Zsb2F0
aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZs
b2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9ICppdDsKQEAgLTI4NzksNyArMjg5NCw3IEBAIEdhcFJlY3RzIFJlbmRlckJs
b2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBv
aW50JiByCiAgICAgICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9j
aygpOyBjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpOyBjYiA9IGNiLT5jb250YWluaW5nQmxvY2so
KSkKICAgICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFpbnRJbmZvLCBJ
bnRQb2ludChjYi0+eCgpLCBjYi0+eSgpKSwgY2ItPm1fcG9zaXRpb25lZE9iamVjdHMuZ2V0KCkp
OyAvLyBGSVhNRTogTm90IHJpZ2h0IGZvciBmbGlwcGVkIHdyaXRpbmcgbW9kZXMuCiAgICAgICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwpAQCAt
MzE5MCwxMCArMzIwNSwxMCBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJs
b2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAKICAgICAvLyBDcmVhdGUg
dGhlIGxpc3Qgb2Ygc3BlY2lhbCBvYmplY3RzIGlmIHdlIGRvbid0IGFsZWFkeSBoYXZlIG9uZQog
ICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0g
YWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3Rz
ID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIERvbid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWlu
IGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgbGlzdAotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRv
cj4obyk7CiAgICAgICAgIGlmIChpdCAhPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkKICAgICAg
ICAgICAgIHJldHVybiAqaXQ7CkBAIC0zMjI0LDggKzMyMzksNyBAQCBSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gq
IG8pCiAgICAgbmV3T2JqLT5tX2lzRGVzY2VuZGFudCA9IHRydWU7CiAgICAgbmV3T2JqLT5tX3Jl
bmRlcmVyID0gbzsKIAotICAgIG1fZmxvYXRpbmdPYmplY3RzLT5pbmNyZWFzZU9iamVjdHNDb3Vu
dChuZXdPYmotPnR5cGUoKSk7Ci0gICAgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmFkZChuZXdP
YmopOworICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQobmV3T2JqKTsKICAgICAKICAgICByZXR1
cm4gbmV3T2JqOwogfQpAQCAtMzIzMyw4ICszMjQ3LDggQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQog
dm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogewog
ICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVu
ZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4obyk7CisgICAgICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4o
byk7CiAgICAgICAgIGlmIChpdCAhPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkgewogICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICBpZiAoY2hpbGRyZW5J
bmxpbmUoKSkgewpAQCAtMzI1OSw4ICszMjczLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3Zl
RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZSgwLCBsb2dpY2FsQm90dG9tKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5kZWNyZWFzZU9iamVj
dHNDb3VudChyLT50eXBlKCkpOwotICAgICAgICAgICAgZmxvYXRpbmdPYmplY3RTZXQucmVtb3Zl
KGl0KTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUocik7CiAgICAgICAg
ICAgICBBU1NFUlQoIXItPm1fb3JpZ2luYXRpbmdMaW5lKTsKICAgICAgICAgICAgIGRlbGV0ZSBy
OwogICAgICAgICB9CkBAIC0zMjcyLDExICszMjg1LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJl
bW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQsIGludCBs
b2dpCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RT
ZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3QqIGN1cnIg
PSBmbG9hdGluZ09iamVjdFNldC5sYXN0KCk7CiAgICAgd2hpbGUgKGN1cnIgIT0gbGFzdEZsb2F0
ICYmICghY3Vyci0+aXNQbGFjZWQoKSB8fCBsb2dpY2FsVG9wRm9yRmxvYXQoY3VycikgPj0gbG9n
aWNhbE9mZnNldCkpIHsKLSAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmRlY3JlYXNlT2JqZWN0
c0NvdW50KGN1cnItPnR5cGUoKSk7Ci0gICAgICAgIGZsb2F0aW5nT2JqZWN0U2V0LnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZShjdXJyKTsKICAgICAgICAg
QVNTRVJUKCFjdXJyLT5tX29yaWdpbmF0aW5nTGluZSk7CiAgICAgICAgIGRlbGV0ZSBjdXJyOwog
ICAgICAgICBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpOwpAQCAtMzI4OCw3ICszMzAw
LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgIGlmICghbV9m
bG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CiAgICAgaWYgKGZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNDA0LDYgKzM0MTYsNyBAQCBib29sIFJlbmRlckJs
b2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9h
dChmbG9hdGluZ09iamVjdCwgbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdp
bkJlZm9yZUZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGRCb3gp
KTsKIAogICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQoKTsKKyAgICAgICAgbV9m
bG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7CiAKICAgICAg
ICAgLy8gSWYgdGhlIGNoaWxkIG1vdmVkLCB3ZSBoYXZlIHRvIHJlcGFpbnQgaXQuCiAgICAgICAg
IGlmIChjaGlsZEJveC0+Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpCkBAIC0zNTA1LDEx
ICszNTE4LDYgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzUGVyY2VudEhlaWdodERlc2NlbmRhbnQo
UmVuZGVyQm94KiBkZXNjZW5kYW50KQogfQogI2VuZGlmCiAKLS8vIEZJWE1FOiBUaGUgbG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lL2xvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUgZnVuY3Rpb25zIGFy
ZSB2ZXJ5IHNsb3cgaWYgdGhlcmUgYXJlIG1hbnkgZmxvYXRzCi0vLyBwcmVzZW50LiBXZSBuZWVk
IHRvIGFkZCBhIHN0cnVjdHVyZSB0byBmbG9hdGluZyBvYmplY3RzIHRvIHJlcHJlc2VudCAibGlu
ZXMiIG9mIGZsb2F0cy4gIFRoZW4gaW5zdGVhZCBvZiBjaGVja2luZwotLy8gZWFjaCBmbG9hdCBp
bmRpdmlkdWFsbHksIHdlJ2QganVzdCB3YWxrIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSAibGluZXMi
IGFuZCBzdG9wIHdoZW4gd2UgaGl0IGEgbGluZSB0aGF0IGlzIGZ1bGx5IGFib3ZlCi0vLyB0aGUg
dmVydGljYWwgb2Zmc2V0IHRoYXQgd2UnZCBsaWtlIHRvIGNoZWNrLiAgQ29tcHV0aW5nIHRoZSAi
bGluZXMiIHdvdWxkIGJlIHJhdGhlciBjb21wbGljYXRlZCwgYnV0IGNvdWxkIHJlcGxhY2UgdGhl
IGxlZnQKLS8vIG9iamVjdHMgYW5kIHJpZ2h0IG9iamVjdHMgY291bnQgaGFjayB0aGF0IGlzIGN1
cnJlbnRseSB1c2VkIGhlcmUuCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9m
ZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0
LCBib29sIGFwcGx5VGV4dEluZGVudCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nKSBjb25z
dAogewogICAgIExheW91dFVuaXQgbGVmdCA9IGZpeGVkT2Zmc2V0OwpAQCAtMzUxNywyMyArMzUy
NSwyMiBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUo
TGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbgogICAgICAgICBpZiAoaGVpZ2h0UmVtYWlu
aW5nKQogICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IDE7CiAKLSAgICAgICAgLy8gV2Ug
a25vdyB0aGUgbGlzdCBpcyBub24tZW1wdHksIHNpbmNlIHdlIGhhdmUgImxlZnQiIG9iamVjdHMg
dG8gc2VhcmNoIGZvci4KLSAgICAgICAgLy8gVGhlcmVmb3JlIHdlIGNhbiBhc3N1bWUgdGhhdCBi
ZWdpbiAhPSBlbmQsIGFuZCB0aGF0IHdlIGNhbiBkbyBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8g
ZGVjcmVtZW50LgotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgYmVnaW4gPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOwotICAgICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIC0taXQ7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9
ICppdDsKLSAgICAgICAgICAgIGlmIChyLT5pc1BsYWNlZCgpICYmIGxvZ2ljYWxUb3BGb3JGbG9h
dChyKSA8PSBsb2dpY2FsVG9wICYmIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IGxvZ2ljYWxU
b3AKLSAgICAgICAgICAgICAgICAmJiByLT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0
TGVmdAorICAgICAgICBWZWN0b3I8RmxvYXRpbmdPYmplY3RJbnRlcnZhbD4gZmxvYXRzOworICAg
ICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzQXRQ
b2ludChsb2dpY2FsVG9wLCBmbG9hdHMpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEZsb2F0
aW5nT2JqZWN0SW50ZXJ2YWw+Ojpjb25zdF9pdGVyYXRvciBmbG9hdEl0ZXJhdG9yID0gZmxvYXRz
LmJlZ2luKCk7CisgICAgICAgIFZlY3RvcjxGbG9hdGluZ09iamVjdEludGVydmFsPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gZmxvYXRzLmVuZCgpOworICAgICAgICBmb3IgKCA7IGZsb2F0SXRlcmF0
b3IgIT0gZW5kOyArK2Zsb2F0SXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5n
T2JqZWN0KiByID0gZmxvYXRJdGVyYXRvci0+ZGF0YSgpOworICAgICAgICAgICAgLy8gQWxsIHRo
ZSBvYmplY3RzIHJldHVybmVkIGZyb20gdGhlIHRyZWUgc2hvdWxkIGJlIGFscmVhZHkgcGxhY2Vk
LgorICAgICAgICAgICAgQVNTRVJUKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0
KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRv
cCk7CisgICAgICAgICAgICBpZiAoci0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExl
ZnQKICAgICAgICAgICAgICAgICAmJiBsb2dpY2FsUmlnaHRGb3JGbG9hdChyKSA+IGxlZnQpIHsK
ICAgICAgICAgICAgICAgICBsZWZ0ID0gbWF4KGxlZnQsIGxvZ2ljYWxSaWdodEZvckZsb2F0KHIp
KTsKICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQogICAgICAgICAgICAgICAg
ICAgICAqaGVpZ2h0UmVtYWluaW5nID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpIC0gbG9naWNh
bFRvcDsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoaXQgIT0gYmVnaW4pOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKGFwcGx5VGV4dEluZGVudCAmJiBzdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTM1NTQsMjMgKzM1NjEsMjIgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExheW91dFUKICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAg
ICpoZWlnaHRSZW1haW5pbmcgPSAxOwogICAgICAgICAgICAgCi0gICAgICAgIC8vIFdlIGtub3cg
dGhlIGxpc3QgaXMgbm9uLWVtcHR5LCBzaW5jZSB3ZSBoYXZlICJyaWdodCIgb2JqZWN0cyB0byBz
ZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2lu
ICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxlYXN0IG9uZQotICAgICAgICAvLyBkZWNy
ZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgZG8g
ewotICAgICAgICAgICAgLS1pdDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0
OwotICAgICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIp
IDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAot
ICAgICAgICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdo
dAorICAgICAgICBWZWN0b3I8RmxvYXRpbmdPYmplY3RJbnRlcnZhbD4gZmxvYXRzOworICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzQXRQb2lu
dChsb2dpY2FsVG9wLCBmbG9hdHMpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEZsb2F0aW5n
T2JqZWN0SW50ZXJ2YWw+Ojpjb25zdF9pdGVyYXRvciBmbG9hdEl0ZXJhdG9yID0gZmxvYXRzLmJl
Z2luKCk7CisgICAgICAgIFZlY3RvcjxGbG9hdGluZ09iamVjdEludGVydmFsPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gZmxvYXRzLmVuZCgpOworICAgICAgICBmb3IgKCA7IGZsb2F0SXRlcmF0b3Ig
IT0gZW5kOyArK2Zsb2F0SXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0KiByID0gZmxvYXRJdGVyYXRvci0+ZGF0YSgpOworICAgICAgICAgICAgLy8gQWxsIHRoZSBv
YmplY3RzIHJldHVybmVkIGZyb20gdGhlIHRyZWUgc2hvdWxkIGJlIGFscmVhZHkgcGxhY2VkLgor
ICAgICAgICAgICAgQVNTRVJUKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIp
IDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcCk7
CisgICAgICAgICAgICBpZiAoci0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0
CiAgICAgICAgICAgICAgICAgJiYgbG9naWNhbExlZnRGb3JGbG9hdChyKSA8IHJpZ2h0KSB7CiAg
ICAgICAgICAgICAgICAgcmlnaHQgPSBtaW4ocmlnaHQsIGxvZ2ljYWxMZWZ0Rm9yRmxvYXQocikp
OwogICAgICAgICAgICAgICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCiAgICAgICAgICAgICAgICAg
ICAgICpoZWlnaHRSZW1haW5pbmcgPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQocikgLSBsb2dpY2Fs
VG9wOwogICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlIChpdCAhPSBiZWdpbik7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKGFwcGx5VGV4dEluZGVudCAmJiAhc3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CkBAIC0zNTk1LDcgKzM2MDEsNyBAQCBpbnQgUmVu
ZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhpbnQgbG9naWNhbEhlaWdodCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgYm90dG9tID0gSU5UX01BWDsKLSAg
ICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwpAQCAtMzYxMiw3ICszNjE4
LDcgQEAgaW50IFJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdP
YmplY3Q6OlR5cGUgZmxvYXRUeXBlKSBjb25zdAogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMp
CiAgICAgICAgIHJldHVybiAwOwogICAgIGludCBsb3dlc3RGbG9hdEJvdHRvbSA9IDA7Ci0gICAg
RmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTM2NjEsNiArMzY2Nyw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMoKQogICAgICAgICBzZXRM
b2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3BGb3JDaGlsZChwb3Np
dGlvbmVkT2JqZWN0KSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKHBvc2l0aW9uZWRPYmplY3QpKTsK
ICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dpY2Fs
SGVpZ2h0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChw
b3NpdGlvbmVkT2JqZWN0KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkp
OwogICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7CisgICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOwogICAgICAg
ICAKICAgICAgICAgbV9oYXNQb3NpdGlvbmVkRmxvYXRzID0gdHJ1ZTsKICAgICB9CkBAIC0zNjg2
LDEwICszNjkzLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKEJsb2NrTGF5b3V0
UGFzcyBsYXlvdXRQYXNzKQogICAgIFJlbmRlcmVyVG9GbG9hdEluZm9NYXAgZmxvYXRNYXA7CiAK
ICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CiAgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
KyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFkZChmLT5t
X3JlbmRlcmVyLCBmKTsKICAgICAgICAgICAgIH0KQEAgLTM3NDEsNyArMzc0OCw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKEJsb2NrTGF5b3V0UGFzcyBsYXlvdXRQYXNzKQogICAg
ICAgICBpbnQgY2hhbmdlTG9naWNhbFRvcCA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwog
ICAgICAgICBpbnQgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRzPGludD46Om1p
bigpOwogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNl
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
ZiA9ICppdDsKQEAgLTM4MjMsMTAgKzM4MzAsOSBAQCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJo
YW5naW5nRmxvYXRzKFJlbmRlckJsb2NrKiBjaGlsZCwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LAog
CiAgICAgICAgICAgICAgICAgLy8gV2UgY3JlYXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBs
YXppbHkuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKLSAgICAgICAg
ICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmpl
Y3RzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihu
ZXcgRmxvYXRpbmdPYmplY3RzKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKTsKIAotICAgICAg
ICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5pbmNyZWFzZU9iamVjdHNDb3VudChmbG9hdGlu
Z09iai0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCku
YWRkKGZsb2F0aW5nT2JqKTsKKyAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRk
KGZsb2F0aW5nT2JqKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzICYmICFyLT5tX3Nob3VsZFBhaW50ICYm
ICFyLT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmCkBAIC0zODUzLDcgKzM4
NTksNyBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNPdmVyaGFuZ2luZ0Zsb2F0KFJlbmRlckJveCog
cmVuZGVyZXIpCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCBoYXNDb2x1bW5zKCkgfHwg
IXBhcmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29u
c3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVj
dHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KHJl
bmRlcmVyKTsKICAgICBpZiAoaXQgPT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTM4NjksNyArMzg3NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
ZEludHJ1ZGluZ0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0
LCBpCiAKICAgICBsb2dpY2FsTGVmdE9mZnNldCArPSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IG1hcmdpbkxlZnQoKSA6IG1hcmdpblRvcCgpKTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0
JiBwcmV2U2V0ID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZs
b2F0aW5nT2JqZWN0U2V0JiBwcmV2U2V0ID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgcHJldkVuZCA9IHByZXZTZXQuZW5kKCk7
CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIHByZXZJdCA9IHByZXZTZXQuYmVn
aW4oKTsgcHJldkl0ICE9IHByZXZFbmQ7ICsrcHJldkl0KSB7CiAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiByID0gKnByZXZJdDsKQEAgLTM4OTcsOSArMzkwMyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmFkZEludHJ1ZGluZ0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IGxvZ2ljYWxMZWZ0T2Zm
c2V0LCBpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2UgY3JlYXRlIHRo
ZSBmbG9hdGluZyBvYmplY3QgbGlzdCBsYXppbHkuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zs
b2F0aW5nT2JqZWN0cykKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBh
ZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5n
T2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmotPnR5cGUoKSk7Ci0gICAg
ICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmFkZChmbG9hdGluZ09iaik7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0
aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CisgICAgICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC0zOTQwLDcgKzM5NDUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92
ZQogCiB2b2lkIFJlbmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0KCkK
IHsKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2Jq
ZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQoKml0KSA+IGxv
Z2ljYWxIZWlnaHQoKSkgewpAQCAtNDA5Miw3ICs0MDk3LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
aGl0VGVzdEZsb2F0cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmUKICAgICAgICAgYWRqdXN0ZWRMb2NhdGlvbiArPSB0b1NpemUodG9SZW5kZXJWaWV3KHRo
aXMpLT5mcmFtZVZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgfQogCi0gICAgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2lu
ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsgaXQgIT0gYmVnaW47KSB7CiAg
ICAgICAgIC0taXQ7CkBAIC01Njk5LDcgKzU3MDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1
c3RGb3JCb3JkZXJGaXQoaW50IHgsIGludCYgbGVmdCwgaW50JiByaWdodCkgY29uc3QKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAg
ICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAg
ICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIHIgPSAqaXQ7CkBAIC02NDQzLDYgKzY0NDgsNyBAQCBjb25zdCBjaGFyKiBSZW5k
ZXJCbG9jazo6cmVuZGVyTmFtZSgpIGNvbnN0CiBpbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjpjbGVhcigpCiB7CiAgICAgbV9zZXQuY2xlYXIoKTsKKyAgICBtX3BsYWNl
ZEZsb2F0c1RyZWUuY2xlYXIoKTsKICAgICBtX2xlZnRPYmplY3RzQ291bnQgPSAwOwogICAgIG1f
cmlnaHRPYmplY3RzQ291bnQgPSAwOwogICAgIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCA9IDA7
CkBAIC02NDY4LDYgKzY0NzQsNDkgQEAgaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0czo6ZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlQKICAgICAgICAg
bV9wb3NpdGlvbmVkT2JqZWN0c0NvdW50LS07CiB9CiAKK2lubGluZSBSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RJbnRlcnZhbCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjppbnRlcnZh
bEZvckZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAg
ICBpZiAobV9ob3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgIHJldHVybiBSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+eSgpLCBmbG9hdGluZ09i
amVjdC0+bWF4WSgpLCBmbG9hdGluZ09iamVjdCk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT54KCksIGZsb2F0aW5nT2JqZWN0
LT5tYXhYKCksIGZsb2F0aW5nT2JqZWN0KTsKK30KKwordm9pZCBSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0
KQoreworICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSAmJiAhZmxvYXRpbmdP
YmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOworICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5hZGQoaW50
ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworI2lmbmRlZiBOREVCVUcK
KyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNJblBsYWNlZFRyZWUodHJ1ZSk7CisjZW5kaWYKK30K
Kwordm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmVQbGFjZWRPYmplY3Qo
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSAgICAKK3sKKyAgICBBU1NFUlQoZmxvYXRp
bmdPYmplY3QtPmlzUGxhY2VkKCkgJiYgZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkp
OworICAgIGJvb2wgcmVtb3ZlZCA9IG1fcGxhY2VkRmxvYXRzVHJlZS5yZW1vdmUoaW50ZXJ2YWxG
b3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgIEFTU0VSVF9VTlVTRUQocmVt
b3ZlZCwgcmVtb3ZlZCk7CisjaWZuZGVmIE5ERUJVRworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJ
c0luUGxhY2VkVHJlZShmYWxzZSk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0czo6YWRkKEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkK
K3sKKyAgICBpbmNyZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlwZSgpKTsKKyAg
ICBtX3NldC5hZGQoZmxvYXRpbmdPYmplY3QpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQ
bGFjZWQoKSkKKyAgICAgICAgYWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKwor
aW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlKEZsb2F0aW5n
T2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBkZWNyZWFzZU9iamVjdHNDb3VudChmbG9h
dGluZ09iamVjdC0+dHlwZSgpKTsKKyAgICBtX3NldC5yZW1vdmUoZmxvYXRpbmdPYmplY3QpOwor
ICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSB8fCAhZmxvYXRpbmdPYmplY3Qt
PmlzSW5QbGFjZWRUcmVlKCkpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkK
KyAgICAgICAgcmVtb3ZlUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKwogVGV4dFJ1
biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4
dFJ1bkZsYWdzIGZsYWdzKQogewogICAgIEFTU0VSVChzdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCmluZGV4IGNkNjEwY2QuLmY4M2Y0ZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFJlbmRl
ckJsb2NrX2gKIAogI2luY2x1ZGUgIkdhcFJlY3RzLmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWxU
cmVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJveExp
c3QuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCkBAIC02Nyw2ICs2OCwxMCBAQCB0eXBl
ZGVmIHVuc2lnbmVkIFRleHRSdW5GbGFnczsKIGNsYXNzIFJlbmRlckJsb2NrIDogcHVibGljIFJl
bmRlckJveCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIExpbmVMYXlvdXRTdGF0ZTsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgLy8gVXNlZCBieSB0aGUgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1
Z2dpbmcgdGhlIEZsb2F0aW5nT2JqZWN0LgorICAgIHRlbXBsYXRlPGNsYXNzPiBmcmllbmQgc3Ry
dWN0IFZhbHVlVG9TdHJpbmc7CisjZW5kaWYKICAgICBSZW5kZXJCbG9jayhOb2RlKik7CiAgICAg
dmlydHVhbCB+UmVuZGVyQmxvY2soKTsKIApAQCAtNDIyLDYgKzQyNyw5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNEZXNj
ZW5kYW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzUGxhY2VkKGZhbHNlKQorI2lmbmRlZiBO
REVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKKyNlbmRpZgogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsKICAgICAgICAgICAg
IGlmICh0eXBlID09IExlZnRGbG9hdCkKQEAgLTQ0MSw2ICs0NDksOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHR5cGUgIT0gRmxvYXRQb3NpdGlvbmVkKQogICAgICAg
ICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc1BsYWNlZCh0
cnVlKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxz
ZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDU3LDEzICs0NjgsMTggQEAg
cHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Qu
d2lkdGgoKTsgfQogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3QuaGVpZ2h0KCk7IH0KIAotICAgICAgICB2b2lkIHNldFgoaW50IHgpIHsgbV9mcmFtZVJlY3Qu
c2V0WCh4KTsgfQotICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgbV9mcmFtZVJlY3Quc2V0WSh5
KTsgfQotICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX2ZyYW1lUmVjdC5zZXRX
aWR0aCh3aWR0aCk7IH0KLSAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBtX2Zy
YW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQorICAgICAgICB2b2lkIHNldFgoaW50IHgpIHsg
QVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4KTsgfQorICAgICAg
ICB2b2lkIHNldFkoaW50IHkpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJl
Y3Quc2V0WSh5KTsgfQorICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBBU1NFUlQo
IWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICAg
ICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkp
OyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQogCiAgICAgICAgIGNvbnN0IEludFJl
Y3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFt
ZVJlY3Q7IH0KLSAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgZnJhbWVS
ZWN0KSB7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9CisgICAgICAgIHZvaWQgc2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkp
OyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorCisjaWZuZGVmIE5ERUJVRworICAgICAgICBi
b29sIGlzSW5QbGFjZWRUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUGxhY2VkVHJlZTsgfQor
ICAgICAgICB2b2lkIHNldElzSW5QbGFjZWRUcmVlKGJvb2wgdmFsdWUpIHsgbV9pc0luUGxhY2Vk
VHJlZSA9IHZhbHVlOyB9CisjZW5kaWYKIAogICAgICAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7
CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5lOwpAQCAtNDczLDYgKzQ4
OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9zaG91bGRQYWludCA6IDE7CiAgICAgICAg
IGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAxOwogICAgICAgICBib29sIG1faXNQbGFjZWQgOiAxOwor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBtX2lzSW5QbGFjZWRUcmVlIDogMTsKKyNlbmRp
ZgogICAgIH07CiAKICAgICBJbnRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShjb25zdCBG
bG9hdGluZ09iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CkBAIC03OTksMjggKzgxOCw0
MiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxGbG9hdGluZ09i
amVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4gRmxvYXRpbmdPYmplY3RTZXQ7
CiAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0b3IgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvcjsKKyAgICB0eXBlZGVmIFBPREludGVydmFsPGludCwgRmxvYXRpbmdP
YmplY3QqPiBGbG9hdGluZ09iamVjdEludGVydmFsOworICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxU
cmVlPGludCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdFRyZWU7CiAgICAgY2xhc3Mg
RmxvYXRpbmdPYmplY3RzIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0cygp
CisgICAgICAgIEZsb2F0aW5nT2JqZWN0cyhib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKICAg
ICAgICAgICAgIDogbV9sZWZ0T2JqZWN0c0NvdW50KDApCiAgICAgICAgICAgICAsIG1fcmlnaHRP
YmplY3RzQ291bnQoMCkKICAgICAgICAgICAgICwgbV9wb3NpdGlvbmVkT2JqZWN0c0NvdW50KDAp
CisgICAgICAgICAgICAsIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKGhvcml6b250YWxXcml0aW5n
TW9kZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwotICAg
ICAgICB2b2lkIGluY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKLSAg
ICAgICAgdm9pZCBkZWNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7Cisg
ICAgICAgIHZvaWQgYWRkKEZsb2F0aW5nT2JqZWN0Kik7CisgICAgICAgIHZvaWQgcmVtb3ZlKEZs
b2F0aW5nT2JqZWN0Kik7CisgICAgICAgIHZvaWQgYWRkUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2Jq
ZWN0Kik7CisgICAgICAgIHZvaWQgcmVtb3ZlUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7
CisgICAgICAgIHZvaWQgc2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKGJvb2wgYiA9IHRydWUpIHsg
bV9ob3Jpem9udGFsV3JpdGluZ01vZGUgPSBiOyB9CisgICAgICAgIAogICAgICAgICBib29sIGhh
c0xlZnRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0T2JqZWN0c0NvdW50ID4gMDsgfQog
ICAgICAgICBib29sIGhhc1JpZ2h0T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRPYmpl
Y3RzQ291bnQgPiAwOyB9CiAgICAgICAgIGJvb2wgaGFzUG9zaXRpb25lZE9iamVjdHMoKSBjb25z
dCB7IHJldHVybiBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQgPiAwOyB9Ci0gICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0JiBzZXQoKSB7IHJldHVybiBtX3NldDsgfQorICAgICAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICAgICAgY29u
c3QgRmxvYXRpbmdPYmplY3RUcmVlJiBwbGFjZWRGbG9hdHNUcmVlKCkgY29uc3QgeyByZXR1cm4g
bV9wbGFjZWRGbG9hdHNUcmVlOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGluY3Jl
YXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgdm9pZCBkZWNy
ZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0SW50ZXJ2YWwgaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChGbG9hdGluZ09iamVjdCop
OworCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0IG1fc2V0OworICAgICAgICBGbG9hdGluZ09i
amVjdFRyZWUgbV9wbGFjZWRGbG9hdHNUcmVlOwogICAgICAgICB1bnNpZ25lZCBtX2xlZnRPYmpl
Y3RzQ291bnQ7CiAgICAgICAgIHVuc2lnbmVkIG1fcmlnaHRPYmplY3RzQ291bnQ7CiAgICAgICAg
IHVuc2lnbmVkIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudDsKKyAgICAgICAgYm9vbCBtX2hvcml6
b250YWxXcml0aW5nTW9kZTsKICAgICB9OwogICAgIE93blB0cjxGbG9hdGluZ09iamVjdHM+IG1f
ZmxvYXRpbmdPYmplY3RzOwogICAgIApAQCAtODk1LDYgKzkyOCwxNiBAQCBpbmxpbmUgY29uc3Qg
UmVuZGVyQmxvY2sqIHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAv
LyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lk
IHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqKTsKIAorI2lmbmRlZiBOREVCVUcKKy8v
IFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dp
bmcgcHVycG9zZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxpbnQ+IHsKKyAg
ICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBpbnQgdmFsdWUpOworfTsKK3RlbXBsYXRlPD4g
c3RydWN0IFZhbHVlVG9TdHJpbmc8UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kj4geworICAg
IHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCop
OworfTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZW5k
ZXJCbG9ja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCmluZGV4IDVkYzI3YzYuLjU1MDk2MzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTA5MSw3ICsx
MDkxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGlu
ZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICAgICAgICAgfQogCiAgICAgICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0Um9vdEJveCgpKSB7Ci0gICAgICAgICAgICBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RT
ZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7
CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsKQEAgLTExNzIsNyAr
MTE3Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94
LT5zZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
ICAgICAgICAgaWYgKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKSB7CkBAIC0xNDkxLDcgKzE0OTEs
NyBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlLCBjb25zdCBJbmxpbmVCaWRpUgogCiAgICAgICAgIGludCBsb2dpY2FsQm90dG9t
ID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAg
ICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVj
dFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgZm9yIChG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsK
QEAgLTE1MjgsNyArMTUyOCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAKICAgICAgICAg
ICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxhc3RMaW5lLT5ibG9ja0xvZ2ljYWxIZWlnaHQo
KSArIGFicyhkZWx0YSk7CiAKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yIChG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
ID0gKml0OwpAQCAtMjU1MCw3ICsyNTUwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25O
ZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWMKICAg
ICBpZiAoIW5ld0Zsb2F0LT5tX3BhZ2luYXRpb25TdHJ1dCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2Jq
ZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEFTU0VSVChmbG9hdGluZ09i
amVjdFNldC5sYXN0KCkgPT0gbmV3RmxvYXQpOwogCiAgICAgaW50IGZsb2F0TG9naWNhbFRvcCA9
IGxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCk7CkBAIC0yNTc1LDcgKzI1NzUsOSBAQCBib29s
IFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdG
bG9hdCwgRmxvYXRpbmdPYmplYwogICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyQmxvY2soKSkK
ICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKG8pLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRy
dWUsIGZhbHNlKTsKICAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlUGxhY2VkT2JqZWN0KGYpOwogICAgICAgICAgICAg
c2V0TG9naWNhbFRvcEZvckZsb2F0KGYsIGxvZ2ljYWxUb3BGb3JGbG9hdChmKSArIGYtPm1fcGFn
aW5hdGlvblN0cnV0KTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRP
YmplY3QoZik7CiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102936</attachid>
            <date>2011-08-04 09:41:34 -0700</date>
            <delta_ts>2011-08-05 09:37:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65668_1.patch</filename>
            <type>text/plain</type>
            <size>42911</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYjAxYTJlLi5kYThkZjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUg
QEAKKzIwMTEtMDgtMDQgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIE9wdGltaXplIGZsb2F0aW5nIGVsZW1lbnRzIGxvb2t1cAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2NjgKKworICAgICAgICBBZGRl
ZCBhbiBpbnRlcnZhbCB0cmVlIGluIHRoZSBGbG9hdGluZ09iamVjdHMgc3RydWN0dXJlLiBBbHNv
IGFkZGVkIG5ldyBtZWNoYW5pc21zIHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGUgdHJlZSBpcyB1
cGRhdGVkIGNvcnJlY3RseSB3aGVuIGEgZmxvYXQgaXMgcmVwb3NpdGlvbmVkLgorCisgICAgICAg
IEFkZGVkIGEgbWV0aG9kIGluIFBPREludGVydmFsVHJlZSB0aGF0IHJldHVybnMgdGhlIGxpc3Qg
b2YgaW50ZXJ2YWxzIHRoYXQKKyAgICAgICAgY29udGFpbiBhIHNwZWNpZmllZCBwb2ludC4gSXQg
d2lsbCBvbmx5IHJldHVybiBhbiBpdGVydmFsIGlmIHkgaXMgaW5zaWRlIFtsb3csIGhpZ2gpLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywganVzdCBhIHJlZmFjdG9yIG9uIHRoZSBmbG9hdGluZyBvYmplY3RzIGRhdGEgc3RydWN0
dXJlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHBsYXRmb3JtL1BPREludGVydmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbDo6Y29udGFpbnMpOgorICAgICAgICAqIHBsYXRmb3JtL1BPREludGVydmFsVHJlZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjphbGxPdmVybGFwc0F0UG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjpzZWFyY2hGb3JPdmVybGFwc0F0UG9p
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UE9EUmVkQmxhY2tUcmVlOjpjbGVhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6c3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFk
ZE92ZXJmbG93RnJvbUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVw
YWludE92ZXJoYW5naW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpw
YWludEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fw
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxv
dyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbEJvdHRv
bUJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2lj
YWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZFBvc2l0aW9uZWRG
bG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjphZGRQ
bGFjZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpGbG9hdGluZ09iamVjdHM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
ay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9h
dGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3Q6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6
c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0Ojppc0luUGxhY2VkVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3Q6OnNldElzSW5QbGFjZWRUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpzZXRIb3Jpem9udGFsV3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6
OnBsYWNlZEZsb2F0c1RyZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRG
bG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5rVG9FbmRM
aW5lSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRM
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25M
aW5lKToKKwogMjAxMS0wOC0wNCAgTHVrZSBNYWNwaGVyc29uICAgPG1hY3BoZXJzb25AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFN1cHBvcnQgY2FzdCBiZXR3ZWVuIENTU1ByaW1pdGl2ZVZhbHVl
IGFuZCBFYm9yZGVyRml0LCB1c2UgaW4gQ1NTU3R5bGVTZWxlY3Rvci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiNDBmZDg1Li45
YmViMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMzMyLDYgKzEzMzIsMTAgQEAKIAkJNTAxQkFBQTkxMzk1MEUyQzAwRjdB
Q0VCIC8qIFdpbmRSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MDFCQUFBODEzOTUwRTJDMDBGN0FDRUIgLyogV2luZFJ1bGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MDhDQ0E0RjEzQ0YxMDZC
MDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZs
b3dUaHJlYWQuaCAqLzsgfTsKIAkJNTA4Q0NBNTAxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZs
b3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTA4Q0NBNEUxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwICovOyB9
OworCQk1MDk3QzVBMzEzRUFCQTdFMDAyREU0QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwOTdDNTlGMTNFQUJBN0UwMDJERTRB
RiAvKiBQT0RBcmVuYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUwOTdDNUE0MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1QTAxM0VBQkE3
RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTA5N0M1QTUxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVy
dmFsVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTA5N0M1QTExM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUwOTdDNUE2MTNFQUJBN0Uw
MDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUwOTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFj
a1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MEU1NjZENjEzOUUzOEM1MDAyMTQ0MzMgLyogQ1NTV3JhcFNoYXBlcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDFCQUFCMTEzOTUxMTRCMDBG
N0FDRUIgLyogQ1NTV3JhcFNoYXBlcy5jcHAgKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRB
ODI1RiAvKiBDYWNoZWRQYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMDE4NDZBMEIw
ODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4NDY4MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQ
YWdlLmNwcCAqLzsgfTsKQEAgLTc5MjgsNiArNzkzMiwxMCBAQAogCQk1MDFCQUFCMTEzOTUxMTRC
MDBGN0FDRUIgLyogQ1NTV3JhcFNoYXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NXcmFwU2hhcGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRmxvd1RocmVhZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MDhDQ0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxv
d1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJG
bG93VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1OUYxM0VB
QkE3RTAwMkRFNEFGIC8qIFBPREFyZW5hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBPREFyZW5hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwOTdDNUEwMTNF
QUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQT0RJbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3
QzVBMTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBPREludGVydmFsVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MDk3QzVBMjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPRFJlZEJsYWNrVHJlZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2Fj
aGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQYWdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY4MEIwODYwMkEwMDRBODI1RiAv
KiBDYWNoZWRQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
Y2hlZFBhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEEyRDEwMzE2
NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTAwMCw2ICsxOTAwOCwxMCBAQAogCQlCQ0YxQTVCQTA5
NzgzMjA5MDA2MUExMjMgLyogcGxhdGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTUwOTdDNTlGMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5o
ICovLAorCQkJCTUwOTdDNUEwMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oICovLAor
CQkJCTUwOTdDNUExMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLywKKwkJ
CQk1MDk3QzVBMjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8sCiAJCQkJ
NDlFOTEyQTQwRUZBQzhFNjAwOUQwQ0FGIC8qIGFuaW1hdGlvbiAqLywKIAkJCQlGRDMxNjA0MDEy
QjAyNkEzMDBDMUEzNTkgLyogYXVkaW8gKi8sCiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJE
IC8qIGNmICovLApAQCAtMjMzMzAsNiArMjMzNDIsMTAgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEy
MDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUw
RjEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1
MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MDk3QzVBMzEzRUFCQTdFMDAyREU0QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUwOTdDNUE0MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTA5N0M1QTUxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTA5N0M1QTYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJl
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
T0RJbnRlcnZhbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2YWwuaAppbmRl
eCA1YzFkY2MyLi5kNDVmMTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
T0RJbnRlcnZhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVydmFsLmgK
QEAgLTExNiw2ICsxMTYsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb3ZlcmxhcHMob3Ro
ZXIubG93KCksIG90aGVyLmhpZ2goKSk7CiAgICAgfQogCisgICAgYm9vbCBjb250YWlucyhjb25z
dCBUJiBwb2ludCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLT5sb3coKSA8PSBw
b2ludCAmJiBwb2ludCA8IHRoaXMtPmhpZ2goKTsKKyAgICB9CisKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBpbnRlcnZhbCBpcyAibGVzcyIgdGhhbiB0aGUgb3RoZXIuIFRoZQogICAgIC8v
IGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBsb3cgZW5kcG9pbnRzIG9mIHRoZSBpbnRl
cnZhbHMuCiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUE9ESW50ZXJ2YWwmIG90aGVyKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2YWxUcmVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaAppbmRleCA1YmYzZGUw
Li4wNDRmMTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJbnRlcnZh
bFRyZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaApA
QCAtODMsNiArODMsMTYgQEAgcHVibGljOgogICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0Zyb20o
dGhpcy0+cm9vdCgpLCBpbnRlcnZhbCwgcmVzdWx0KTsKICAgICB9CiAKKyAgICAvLyBSZXR1cm5z
IGFsbCBpbnRlcnZhbHMgaW4gdGhlIHRyZWUgd2hpY2ggb3ZlcmxhcCB0aGUgZ2l2ZW4gcXVlcnkK
KyAgICAvLyBpbnRlcnZhbC4gVGhlIHJldHVybmVkIGludGVydmFscyBhcmUgc29ydGVkIGJ5IGlu
Y3JlYXNpbmcgbG93CisgICAgLy8gZW5kcG9pbnQuCisgICAgdm9pZCBhbGxPdmVybGFwc0F0UG9p
bnQoY29uc3QgVCYgcG9pbnQsIFZlY3RvcjxJbnRlcnZhbFR5cGU+JiByZXN1bHQpIGNvbnN0Cisg
ICAgeworICAgICAgICAvLyBFeHBsaWNpdCBkZXJlZmVyZW5jZSBvZiAidGhpcyIgcmVxdWlyZWQg
YmVjYXVzZSBvZgorICAgICAgICAvLyBpbmhlcml0YW5jZSBydWxlcyBpbiB0ZW1wbGF0ZSBjbGFz
c2VzLgorICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0F0UG9pbnQodGhpcy0+cm9vdCgpLCBwb2lu
dCwgcmVzdWx0KTsKKyAgICB9CisKICAgICAvLyBIZWxwZXIgdG8gY3JlYXRlIGludGVydmFsIG9i
amVjdHMuCiAgICAgc3RhdGljIEludGVydmFsVHlwZSBjcmVhdGVJbnRlcnZhbChjb25zdCBUJiBs
b3csIGNvbnN0IFQmIGhpZ2gsIGNvbnN0IFVzZXJEYXRhIGRhdGEgPSAwKQogICAgIHsKQEAgLTEz
OSw2ICsxNDksMzYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJv
bShub2RlLT5yaWdodCgpLCBpbnRlcnZhbCwgcmVzKTsKICAgICB9CiAKKyAgICAvLyBTdGFydGlu
ZyBmcm9tIHRoZSBnaXZlbiBub2RlLCBhZGRzIGFsbCBvdmVybGFwcyB3aXRoIHRoZSBnaXZlbgor
ICAgIC8vIHBvaW50IHRvIHRoZSByZXN1bHQgdmVjdG9yLiBUaGUgaW50ZXJ2YWxzIGFyZSBzb3J0
ZWQgYnkKKyAgICAvLyBpbmNyZWFzaW5nIGxvdyBlbmRwb2ludC4KKyAgICB2b2lkIHNlYXJjaEZv
ck92ZXJsYXBzQXRQb2ludChJbnRlcnZhbE5vZGUqIG5vZGUsIGNvbnN0IFQmIHBvaW50LCBWZWN0
b3I8SW50ZXJ2YWxUeXBlPiYgcmVzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFub2RlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIEJlY2F1c2UgdGhlIGludGVydmFscyBh
cmUgc29ydGVkIGJ5IGxlZnQgZW5kcG9pbnQsIGlub3JkZXIKKyAgICAgICAgLy8gdHJhdmVyc2Fs
IHByb2R1Y2VzIHJlc3VsdHMgc29ydGVkIGFzIGRlc2lyZWQuCisKKyAgICAgICAgLy8gU2VlIHdo
ZXRoZXIgd2UgbmVlZCB0byB0cmF2ZXJzZSB0aGUgbGVmdCBzdWJ0cmVlLgorICAgICAgICBJbnRl
cnZhbE5vZGUqIGxlZnQgPSBub2RlLT5sZWZ0KCk7CisgICAgICAgIGlmIChsZWZ0CisgICAgICAg
ICAgICAvLyBUaGlzIGlzIHBocmFzZWQgdGhpcyB3YXkgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIG9w
ZXJhdG9yCisgICAgICAgICAgICAvLyA8PSBvbiB0eXBlIFQuCisgICAgICAgICAgICAmJiAhKGxl
ZnQtPmRhdGEoKS5tYXhIaWdoKCkgPCBwb2ludCkpCisgICAgICAgICAgICBzZWFyY2hGb3JPdmVy
bGFwc0F0UG9pbnQobGVmdCwgcG9pbnQsIHJlcyk7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIG92
ZXJsYXAgd2l0aCBjdXJyZW50IG5vZGUuCisgICAgICAgIGlmIChub2RlLT5kYXRhKCkuY29udGFp
bnMocG9pbnQpKQorICAgICAgICAgICAgcmVzLmFwcGVuZChub2RlLT5kYXRhKCkpOworCisgICAg
ICAgIC8vIFNlZSB3aGV0aGVyIHdlIG5lZWQgdG8gdHJhdmVyc2UgdGhlIHJpZ2h0IHN1YnRyZWUu
CisgICAgICAgIC8vIFRoaXMgaXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVlZCBm
b3Igb3BlcmF0b3IgPD0KKyAgICAgICAgLy8gb24gdHlwZSBULgorICAgICAgICBpZiAoIShwb2lu
dCA8IG5vZGUtPmRhdGEoKS5sb3coKSkpCisgICAgICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0F0
UG9pbnQobm9kZS0+cmlnaHQoKSwgcG9pbnQsIHJlcyk7CisgICAgfQorCiAgICAgdmlydHVhbCBi
b29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgLy8gV291
bGQgdXNlIGNvbnN0IFQmLCBidXQgbmVlZCB0byByZWFzc2lnbiB0aGlzIHJlZmVyZW5jZSBpbiB0
aGlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oCmluZGV4IDdkZDlk
ZGQuLmYxNDdjYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJs
YWNrVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5o
CkBAIC0xMjcsNiArMTI3LDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgflBPRFJlZEJsYWNr
VHJlZSgpIHsgfQogCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX2FyZW5hID0g
UE9EQXJlbmE6OmNyZWF0ZSgpOworICAgICAgICBtX3Jvb3QgPSAwOworICAgIH0KKwogICAgIHZv
aWQgYWRkKGNvbnN0IFQmIGRhdGEpCiAgICAgewogICAgICAgICBOb2RlKiBub2RlID0gbV9hcmVu
YS0+YWxsb2NhdGVPYmplY3Q8Tm9kZSwgVD4oZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAppbmRleCAyNzI3NmIxLi42ZTk3ZDYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTgwLDYgKzgwLDE5IEBAIHN0YXRpYyBEZWxh
eWVkVXBkYXRlU2Nyb2xsSW5mb1NldCogZ0RlbGF5ZWRVcGRhdGVTY3JvbGxJbmZvU2V0ID0gMDsK
IAogYm9vbCBSZW5kZXJCbG9jazo6c19jYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nID0gZmFs
c2U7CiAKKyNpZm5kZWYgTkRFQlVHCisvLyBUaGVzZSBoZWxwZXJzIGFyZSBvbmx5IHVzZWQgYnkg
dGhlIFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorU3RyaW5nIFZhbHVl
VG9TdHJpbmc8aW50Pjo6c3RyaW5nKGNvbnN0IGludCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpudW1iZXIodmFsdWUpOworfQorCitTdHJpbmcgVmFsdWVUb1N0cmluZzxSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3QqPjo6c3RyaW5nKGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcCAo
JWR4JWQgJWR4JWQpIiwgZmxvYXRpbmdPYmplY3QsIGZsb2F0aW5nT2JqZWN0LT54KCksIGZsb2F0
aW5nT2JqZWN0LT55KCksIGZsb2F0aW5nT2JqZWN0LT5tYXhYKCksIGZsb2F0aW5nT2JqZWN0LT5t
YXhZKCkpOworfQorI2VuZGlmCisKIC8vIE91ciBNYXJnaW5JbmZvIHN0YXRlIHVzZWQgd2hlbiBs
YXlpbmcgb3V0IGJsb2NrIGNoaWxkcmVuLgogUmVuZGVyQmxvY2s6Ok1hcmdpbkluZm86Ok1hcmdp
bkluZm8oUmVuZGVyQmxvY2sqIGJsb2NrLCBpbnQgYmVmb3JlQm9yZGVyUGFkZGluZywgaW50IGFm
dGVyQm9yZGVyUGFkZGluZykKICAgICA6IG1fYXRCZWZvcmVTaWRlT2ZCbG9jayh0cnVlKQpAQCAt
Mjc0LDcgKzI4Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5CiAgICAgYm9vbCBjYW5Qcm9w
YWdhdGVGbG9hdEludG9TaWJsaW5nID0gIWlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYXZv
aWRzRmxvYXRzKCk7CiAgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIHNf
Y2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAmJiAhY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2li
bGluZyAmJiBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygpKSB7CiAgICAgICAgIFJlbmRlckJsb2NrKiBw
YXJlbnRCbG9jayA9IHRoaXM7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09i
amVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOwogCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50KCk7
IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmlldygpOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsK
QEAgLTExOTQsNiArMTIwNyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0LCBCbG9jCiAgICAgQmxvY2tM
YXlvdXRQYXNzIGZsb2F0c0xheW91dFBhc3MgPSBsYXlvdXRQYXNzOwogICAgIGlmIChmbG9hdHNM
YXlvdXRQYXNzID09IE5vcm1hbExheW91dFBhc3MgJiYgIXJlbGF5b3V0Q2hpbGRyZW4gJiYgIXBv
c2l0aW9uZWRGbG9hdHNOZWVkUmVsYXlvdXQoKSkKICAgICAgICAgZmxvYXRzTGF5b3V0UGFzcyA9
IFBvc2l0aW9uZWRGbG9hdExheW91dFBhc3M7CisgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKQor
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpOwogICAgIGNsZWFyRmxvYXRzKGZsb2F0c0xheW91dFBhc3Mp
OwogCiAgICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwpAQCAtMTQzNiw3
ICsxNDUxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCkKICAg
ICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwpAQCAtMjI5NCw3ICsyMzA5LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNj
ZW5kYW50cykKICAgICAvLyBGSVhNRTogQXZvaWQgZGlzYWJsaW5nIExheW91dFN0YXRlLiBBdCB0
aGUgdmVyeSBsZWFzdCwgZG9uJ3QgZGlzYWJsZSBpdCBmb3IgZmxvYXRzIG9yaWdpbmF0aW5nCiAg
ICAgLy8gaW4gdGhpcyBibG9jay4gQmV0dGVyIHlldCB3b3VsZCBiZSB0byBwdXNoIGV4dHJhIHN0
YXRlIGZvciB0aGUgY29udGFpbmVycyBvZiBvdGhlciBmbG9hdHMuCiAgICAgTGF5b3V0U3RhdGVE
aXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKSk7Ci0gICAgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTI2MjcsNyArMjY0Miw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09i
amVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTI4Nzks
NyArMjg5NCw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJs
b2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByCiAgICAgICAgICAgICBmb3IgKFJl
bmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOyBjYiAmJiAhY2ItPmlzUmVuZGVyVmll
dygpOyBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKSkKICAgICAgICAgICAgICAgICBjbGlwT3V0
UG9zaXRpb25lZE9iamVjdHMocGFpbnRJbmZvLCBJbnRQb2ludChjYi0+eCgpLCBjYi0+eSgpKSwg
Y2ItPm1fcG9zaXRpb25lZE9iamVjdHMuZ2V0KCkpOyAvLyBGSVhNRTogTm90IHJpZ2h0IGZvciBm
bGlwcGVkIHdyaXRpbmcgbW9kZXMuCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewot
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwpAQCAtMzE5MCwxMCArMzIwNSwxMCBAQCBSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChS
ZW5kZXJCb3gqIG8pCiAKICAgICAvLyBDcmVhdGUgdGhlIGxpc3Qgb2Ygc3BlY2lhbCBvYmplY3Rz
IGlmIHdlIGRvbid0IGFsZWFkeSBoYXZlIG9uZQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMp
Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0
cyk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2Jq
ZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IERvbid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgbGlz
dAotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94
KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4obyk7CiAgICAgICAgIGlmIChpdCAhPSBm
bG9hdGluZ09iamVjdFNldC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAqaXQ7CkBAIC0zMjI0
LDggKzMyMzksNyBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjpp
bnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAgbmV3T2JqLT5tX2lzRGVzY2Vu
ZGFudCA9IHRydWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIAotICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5pbmNyZWFzZU9iamVjdHNDb3VudChuZXdPYmotPnR5cGUoKSk7Ci0gICAgbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpLmFkZChuZXdPYmopOworICAgIG1fZmxvYXRpbmdPYmplY3Rz
LT5hZGQobmV3T2JqKTsKICAgICAKICAgICByZXR1cm4gbmV3T2JqOwogfQpAQCAtMzIzMyw4ICsz
MjQ3LDggQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0
RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxv
YXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogewogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykg
ewotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBp
dCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNo
VHJhbnNsYXRvcj4obyk7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94Kiwg
RmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4obyk7CiAgICAgICAgIGlmIChpdCAhPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKSkgewogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAq
aXQ7CiAgICAgICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewpAQCAtMzI1OSw4ICszMjcz
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBv
KQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxv
Y2tSYW5nZSgwLCBsb2dpY2FsQm90dG9tKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzLT5kZWNyZWFzZU9iamVjdHNDb3VudChyLT50eXBlKCkpOwotICAgICAg
ICAgICAgZmxvYXRpbmdPYmplY3RTZXQucmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5yZW1vdmUocik7CiAgICAgICAgICAgICBBU1NFUlQoIXItPm1fb3JpZ2luYXRp
bmdMaW5lKTsKICAgICAgICAgICAgIGRlbGV0ZSByOwogICAgICAgICB9CkBAIC0zMjcyLDExICsz
Mjg1LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KEZs
b2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQsIGludCBsb2dpCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CiAgICAgRmxvYXRpbmdPYmplY3QqIGN1cnIgPSBmbG9hdGluZ09iamVjdFNldC5sYXN0KCk7
CiAgICAgd2hpbGUgKGN1cnIgIT0gbGFzdEZsb2F0ICYmICghY3Vyci0+aXNQbGFjZWQoKSB8fCBs
b2dpY2FsVG9wRm9yRmxvYXQoY3VycikgPj0gbG9naWNhbE9mZnNldCkpIHsKLSAgICAgICAgbV9m
bG9hdGluZ09iamVjdHMtPmRlY3JlYXNlT2JqZWN0c0NvdW50KGN1cnItPnR5cGUoKSk7Ci0gICAg
ICAgIGZsb2F0aW5nT2JqZWN0U2V0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9mbG9hdGluZ09i
amVjdHMtPnJlbW92ZShjdXJyKTsKICAgICAgICAgQVNTRVJUKCFjdXJyLT5tX29yaWdpbmF0aW5n
TGluZSk7CiAgICAgICAgIGRlbGV0ZSBjdXJyOwogICAgICAgICBjdXJyID0gZmxvYXRpbmdPYmpl
Y3RTZXQubGFzdCgpOwpAQCAtMzI4OCw3ICszMzAwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9z
aXRpb25OZXdGbG9hdHMoKQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgaWYgKGZs
b2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0z
NDA0LDYgKzM0MTYsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAg
ICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbEhl
aWdodEZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkQm94KSAr
IG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGRCb3gpKTsKIAogICAgICAgICBmbG9hdGluZ09iamVj
dC0+c2V0SXNQbGFjZWQoKTsKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9i
amVjdChmbG9hdGluZ09iamVjdCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIG1vdmVkLCB3
ZSBoYXZlIHRvIHJlcGFpbnQgaXQuCiAgICAgICAgIGlmIChjaGlsZEJveC0+Y2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpCkBAIC0zNTA1LDExICszNTE4LDYgQEAgYm9vbCBSZW5kZXJCbG9j
azo6aGFzUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVuZGVyQm94KiBkZXNjZW5kYW50KQogfQog
I2VuZGlmCiAKLS8vIEZJWE1FOiBUaGUgbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lL2xvZ2ljYWxS
aWdodE9mZnNldEZvckxpbmUgZnVuY3Rpb25zIGFyZSB2ZXJ5IHNsb3cgaWYgdGhlcmUgYXJlIG1h
bnkgZmxvYXRzCi0vLyBwcmVzZW50LiBXZSBuZWVkIHRvIGFkZCBhIHN0cnVjdHVyZSB0byBmbG9h
dGluZyBvYmplY3RzIHRvIHJlcHJlc2VudCAibGluZXMiIG9mIGZsb2F0cy4gIFRoZW4gaW5zdGVh
ZCBvZiBjaGVja2luZwotLy8gZWFjaCBmbG9hdCBpbmRpdmlkdWFsbHksIHdlJ2QganVzdCB3YWxr
IGJhY2t3YXJkcyB0aHJvdWdoIHRoZSAibGluZXMiIGFuZCBzdG9wIHdoZW4gd2UgaGl0IGEgbGlu
ZSB0aGF0IGlzIGZ1bGx5IGFib3ZlCi0vLyB0aGUgdmVydGljYWwgb2Zmc2V0IHRoYXQgd2UnZCBs
aWtlIHRvIGNoZWNrLiAgQ29tcHV0aW5nIHRoZSAibGluZXMiIHdvdWxkIGJlIHJhdGhlciBjb21w
bGljYXRlZCwgYnV0IGNvdWxkIHJlcGxhY2UgdGhlIGxlZnQKLS8vIG9iamVjdHMgYW5kIHJpZ2h0
IG9iamVjdHMgY291bnQgaGFjayB0aGF0IGlzIGN1cnJlbnRseSB1c2VkIGhlcmUuCiBMYXlvdXRV
bml0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwgTGF5
b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nKSBjb25zdAogewogICAgIExheW91dFVuaXQgbGVmdCA9
IGZpeGVkT2Zmc2V0OwpAQCAtMzUxNywyMyArMzUyNSwyMiBAQCBMYXlvdXRVbml0IFJlbmRlckJs
b2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlv
dXRVbgogICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQogICAgICAgICAgICAgKmhlaWdodFJl
bWFpbmluZyA9IDE7CiAKLSAgICAgICAgLy8gV2Uga25vdyB0aGUgbGlzdCBpcyBub24tZW1wdHks
IHNpbmNlIHdlIGhhdmUgImxlZnQiIG9iamVjdHMgdG8gc2VhcmNoIGZvci4KLSAgICAgICAgLy8g
VGhlcmVmb3JlIHdlIGNhbiBhc3N1bWUgdGhhdCBiZWdpbiAhPSBlbmQsIGFuZCB0aGF0IHdlIGNh
biBkbyBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gZGVjcmVtZW50LgotICAgICAgICBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09iamVj
dFNldC5iZWdpbigpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC0taXQ7Ci0g
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKLSAgICAgICAgICAgIGlmIChyLT5p
c1BsYWNlZCgpICYmIGxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBsb2dpY2FsVG9wICYmIGxvZ2lj
YWxCb3R0b21Gb3JGbG9hdChyKSA+IGxvZ2ljYWxUb3AKLSAgICAgICAgICAgICAgICAmJiByLT50
eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdAorICAgICAgICBWZWN0b3I8RmxvYXRp
bmdPYmplY3RJbnRlcnZhbD4gZmxvYXRzOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxh
Y2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzQXRQb2ludChsb2dpY2FsVG9wLCBmbG9hdHMpOwor
CisgICAgICAgIFZlY3RvcjxGbG9hdGluZ09iamVjdEludGVydmFsPjo6Y29uc3RfaXRlcmF0b3Ig
ZmxvYXRJdGVyYXRvciA9IGZsb2F0cy5iZWdpbigpOworICAgICAgICBWZWN0b3I8RmxvYXRpbmdP
YmplY3RJbnRlcnZhbD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGZsb2F0cy5lbmQoKTsKKyAgICAg
ICAgZm9yICggOyBmbG9hdEl0ZXJhdG9yICE9IGVuZDsgKytmbG9hdEl0ZXJhdG9yKSB7CisgICAg
ICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdCogciA9IGZsb2F0SXRlcmF0b3ItPmRhdGEoKTsK
KyAgICAgICAgICAgIC8vIEFsbCB0aGUgb2JqZWN0cyByZXR1cm5lZCBmcm9tIHRoZSB0cmVlIHNo
b3VsZCBiZSBhbHJlYWR5IHBsYWNlZC4KKyAgICAgICAgICAgIEFTU0VSVChyLT5pc1BsYWNlZCgp
ICYmIGxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBsb2dpY2FsVG9wICYmIGxvZ2ljYWxCb3R0b21G
b3JGbG9hdChyKSA+IGxvZ2ljYWxUb3ApOworICAgICAgICAgICAgaWYgKHItPnR5cGUoKSA9PSBG
bG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0CiAgICAgICAgICAgICAgICAgJiYgbG9naWNhbFJpZ2h0
Rm9yRmxvYXQocikgPiBsZWZ0KSB7CiAgICAgICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBs
b2dpY2FsUmlnaHRGb3JGbG9hdChyKSk7CiAgICAgICAgICAgICAgICAgaWYgKGhlaWdodFJlbWFp
bmluZykKICAgICAgICAgICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGxvZ2ljYWxCb3R0
b21Gb3JGbG9hdChyKSAtIGxvZ2ljYWxUb3A7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hp
bGUgKGl0ICE9IGJlZ2luKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChhcHBseVRleHRJ
bmRlbnQgJiYgc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CkBAIC0zNTUzLDI0
ICszNTYwLDIzIEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZv
ckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVCiAgICAgaWYgKG1fZmxvYXRpbmdP
YmplY3RzICYmIG1fZmxvYXRpbmdPYmplY3RzLT5oYXNSaWdodE9iamVjdHMoKSkgewogICAgICAg
ICBpZiAoaGVpZ2h0UmVtYWluaW5nKQogICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IDE7
Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gV2Uga25vdyB0aGUgbGlzdCBpcyBub24tZW1wdHks
IHNpbmNlIHdlIGhhdmUgInJpZ2h0IiBvYmplY3RzIHRvIHNlYXJjaCBmb3IuCi0gICAgICAgIC8v
IFRoZXJlZm9yZSB3ZSBjYW4gYXNzdW1lIHRoYXQgYmVnaW4gIT0gZW5kLCBhbmQgdGhhdCB3ZSBj
YW4gZG8gYXQgbGVhc3Qgb25lCi0gICAgICAgIC8vIGRlY3JlbWVudC4KLSAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAtLWl0Owot
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7Ci0gICAgICAgICAgICBpZiAoci0+
aXNQbGFjZWQoKSAmJiBsb2dpY2FsVG9wRm9yRmxvYXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dp
Y2FsQm90dG9tRm9yRmxvYXQocikgPiBsb2dpY2FsVG9wCi0gICAgICAgICAgICAgICAgJiYgci0+
dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0CisKKyAgICAgICAgVmVjdG9yPEZs
b2F0aW5nT2JqZWN0SW50ZXJ2YWw+IGZsb2F0czsKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMt
PnBsYWNlZEZsb2F0c1RyZWUoKS5hbGxPdmVybGFwc0F0UG9pbnQobG9naWNhbFRvcCwgZmxvYXRz
KTsKKworICAgICAgICBWZWN0b3I8RmxvYXRpbmdPYmplY3RJbnRlcnZhbD46OmNvbnN0X2l0ZXJh
dG9yIGZsb2F0SXRlcmF0b3IgPSBmbG9hdHMuYmVnaW4oKTsKKyAgICAgICAgVmVjdG9yPEZsb2F0
aW5nT2JqZWN0SW50ZXJ2YWw+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBmbG9hdHMuZW5kKCk7Cisg
ICAgICAgIGZvciAoIDsgZmxvYXRJdGVyYXRvciAhPSBlbmQ7ICsrZmxvYXRJdGVyYXRvcikgewor
ICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIHIgPSBmbG9hdEl0ZXJhdG9yLT5kYXRh
KCk7CisgICAgICAgICAgICAvLyBBbGwgdGhlIG9iamVjdHMgcmV0dXJuZWQgZnJvbSB0aGUgdHJl
ZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFjZWQuCisgICAgICAgICAgICBBU1NFUlQoci0+aXNQbGFj
ZWQoKSAmJiBsb2dpY2FsVG9wRm9yRmxvYXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90
dG9tRm9yRmxvYXQocikgPiBsb2dpY2FsVG9wKTsKKyAgICAgICAgICAgIGlmIChyLT50eXBlKCkg
PT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQKICAgICAgICAgICAgICAgICAmJiBsb2dpY2Fs
TGVmdEZvckZsb2F0KHIpIDwgcmlnaHQpIHsKICAgICAgICAgICAgICAgICByaWdodCA9IG1pbihy
aWdodCwgbG9naWNhbExlZnRGb3JGbG9hdChyKSk7CiAgICAgICAgICAgICAgICAgaWYgKGhlaWdo
dFJlbWFpbmluZykKICAgICAgICAgICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGxvZ2lj
YWxCb3R0b21Gb3JGbG9hdChyKSAtIGxvZ2ljYWxUb3A7CiAgICAgICAgICAgICB9Ci0gICAgICAg
IH0gd2hpbGUgKGl0ICE9IGJlZ2luKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAo
YXBwbHlUZXh0SW5kZW50ICYmICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsK
QEAgLTM1OTUsNyArMzYwMSw3IEBAIGludCBSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbEJv
dHRvbUJlbG93KGludCBsb2dpY2FsSGVpZ2h0KSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIGludCBib3R0b20gPSBJTlRfTUFYOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIHIgPSAqaXQ7CkBAIC0zNjEyLDcgKzM2MTgsNyBAQCBpbnQgUmVuZGVyQmxvY2s6Omxvd2Vz
dEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSBmbG9hdFR5cGUpIGNvbnN0
CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaW50
IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwog
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiByID0gKml0OwpAQCAtMzY2MSw2ICszNjY3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkUG9z
aXRpb25lZEZsb2F0cygpCiAgICAgICAgIHNldExvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09i
amVjdCwgbG9naWNhbFRvcEZvckNoaWxkKHBvc2l0aW9uZWRPYmplY3QpIC0gbWFyZ2luQmVmb3Jl
Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkpOwogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0Rm9y
RmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChwb3NpdGlvbmVkT2Jq
ZWN0KSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKHBvc2l0aW9uZWRPYmplY3QpICsgbWFyZ2luQWZ0
ZXJGb3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSk7CiAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5z
ZXRJc1BsYWNlZCh0cnVlKTsKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9i
amVjdChmbG9hdGluZ09iamVjdCk7CiAgICAgICAgIAogICAgICAgICBtX2hhc1Bvc2l0aW9uZWRG
bG9hdHMgPSB0cnVlOwogICAgIH0KQEAgLTM2ODYsMTAgKzM2OTMsMTAgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y2xlYXJGbG9hdHMoQmxvY2tMYXlvdXRQYXNzIGxheW91dFBhc3MpCiAgICAgUmVuZGVy
ZXJUb0Zsb2F0SW5mb01hcCBmbG9hdE1hcDsKIAogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykg
ewotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgaWYgKGNo
aWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRv
ciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoRmxvYXRp
bmdPYmplY3RTZXQ6Oml0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVu
ZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CiAgICAg
ICAgICAgICAgICAgZmxvYXRNYXAuYWRkKGYtPm1fcmVuZGVyZXIsIGYpOwogICAgICAgICAgICAg
fQpAQCAtMzc0MSw3ICszNzQ4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoQmxv
Y2tMYXlvdXRQYXNzIGxheW91dFBhc3MpCiAgICAgICAgIGludCBjaGFuZ2VMb2dpY2FsVG9wID0g
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAgICAgICAgIGludCBjaGFuZ2VMb2dpY2FsQm90
dG9tID0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7CiAgICAgICAgIGlmIChtX2Zsb2F0aW5n
T2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwpAQCAtMzgyMywxMCArMzgzMCw5
IEBAIGludCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNo
aWxkLCBpbnQgbG9naWNhbExlZnRPZmZzZXQsCiAKICAgICAgICAgICAgICAgICAvLyBXZSBjcmVh
dGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemlseS4KICAgICAgICAgICAgICAgICBpZiAo
IW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMpOworICAgICAgICAgICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkpOwogCi0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMt
PmluY3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqLT50eXBlKCkpOwotICAgICAgICAgICAg
ICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQoZmxvYXRpbmdPYmopOworICAgICAgICAg
ICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKG1ha2VDaGlsZFBhaW50T3RoZXJG
bG9hdHMgJiYgIXItPm1fc2hvdWxkUGFpbnQgJiYgIXItPm1fcmVuZGVyZXItPmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkgJiYKQEAgLTM4NTMsNyArMzg1OSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhh
c092ZXJoYW5naW5nRmxvYXQoUmVuZGVyQm94KiByZW5kZXJlcikKICAgICBpZiAoIW1fZmxvYXRp
bmdPYmplY3RzIHx8IGhhc0NvbHVtbnMoKSB8fCAhcGFyZW50KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxv
YXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4ocmVuZGVyZXIpOwogICAgIGlmIChpdCA9PSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzg2OSw3ICsz
ODc1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2Nr
KiBwcmV2LCBpbnQgbG9naWNhbExlZnRPZmZzZXQsIGkKIAogICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0
ICs9IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWFyZ2luTGVmdCgpIDogbWFyZ2luVG9w
KCkpOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIHByZXZTZXQgPSBwcmV2LT5tX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIHByZXZTZXQgPSBw
cmV2LT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBwcmV2RW5kID0gcHJldlNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgcHJldkl0ID0gcHJldlNldC5iZWdpbigpOyBwcmV2SXQgIT0gcHJldkVuZDsgKytw
cmV2SXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqcHJldkl0OwpAQCAtMzg5Nyw5
ICszOTAzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJs
b2NrKiBwcmV2LCBpbnQgbG9naWNhbExlZnRPZmZzZXQsIGkKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemls
eS4KICAgICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICAgICAg
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMp
OwotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5pbmNyZWFzZU9iamVjdHNDb3Vu
dChmbG9hdGluZ09iai0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCkuYWRkKGZsb2F0aW5nT2JqKTsKKyAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGlu
Z09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKGZsb2F0
aW5nT2JqKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM5NDAsNyArMzk0
NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JM
YXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlCiAKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtT
aWJsaW5nc1dpdGhGbG9hdHNGb3JMYXlvdXQoKQogewotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBm
bG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGxv
Z2ljYWxCb3R0b21Gb3JGbG9hdCgqaXQpID4gbG9naWNhbEhlaWdodCgpKSB7CkBAIC00MDkyLDcg
KzQwOTcsNyBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZQogICAgICAgICBhZGp1c3RlZExvY2F0
aW9uICs9IHRvU2l6ZSh0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT5zY3JvbGxQb3Np
dGlvbigpKTsKICAgICB9CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RT
ZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOyBpdCAhPSBiZWdpbjspIHsKICAgICAgICAgLS1pdDsKQEAgLTU2OTksNyArNTcw
NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckJvcmRlckZpdChpbnQgeCwgaW50JiBs
ZWZ0LCBpbnQmIHJpZ2h0KSBjb25zdAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTY0NDMs
NiArNjQ0OCw3IEBAIGNvbnN0IGNoYXIqIFJlbmRlckJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QK
IGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNsZWFyKCkKIHsKICAg
ICBtX3NldC5jbGVhcigpOworICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5jbGVhcigpOwogICAgIG1f
bGVmdE9iamVjdHNDb3VudCA9IDA7CiAgICAgbV9yaWdodE9iamVjdHNDb3VudCA9IDA7CiAgICAg
bV9wb3NpdGlvbmVkT2JqZWN0c0NvdW50ID0gMDsKQEAgLTY0NjgsNiArNjQ3NCw0OSBAQCBpbmxp
bmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpkZWNyZWFzZU9iamVjdHNDb3Vu
dChGbG9hdGluZ09iamVjdDo6VAogICAgICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQtLTsK
IH0KIAoraW5saW5lIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdEludGVydmFsIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OmludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoRmxvYXRpbmdP
YmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAgIGlmIChtX2hvcml6b250YWxXcml0aW5nTW9k
ZSkKKyAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdEludGVydmFsKGZs
b2F0aW5nT2JqZWN0LT55KCksIGZsb2F0aW5nT2JqZWN0LT5tYXhZKCksIGZsb2F0aW5nT2JqZWN0
KTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRp
bmdPYmplY3QtPngoKSwgZmxvYXRpbmdPYmplY3QtPm1heFgoKSwgZmxvYXRpbmdPYmplY3QpOwor
fQorCit2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZFBsYWNlZE9iamVjdChG
bG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgQVNTRVJUKGZsb2F0aW5nT2Jq
ZWN0LT5pc1BsYWNlZCgpICYmICFmbG9hdGluZ09iamVjdC0+aXNJblBsYWNlZFRyZWUoKSk7Cisg
ICAgbV9wbGFjZWRGbG9hdHNUcmVlLmFkZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0
aW5nT2JqZWN0KSk7CisjaWZuZGVmIE5ERUJVRworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc0lu
UGxhY2VkVHJlZSh0cnVlKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpICYmIGZsb2F0aW5n
T2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKyAgICBib29sIHJlbW92ZWQgPSBtX3BsYWNlZEZs
b2F0c1RyZWUucmVtb3ZlKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3Qp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOworI2lmbmRlZiBOREVCVUcK
KyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNJblBsYWNlZFRyZWUoZmFsc2UpOworI2VuZGlmCit9
CisKK2lubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZChGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgaW5jcmVhc2VPYmplY3RzQ291bnQoZmxv
YXRpbmdPYmplY3QtPnR5cGUoKSk7CisgICAgbV9zZXQuYWRkKGZsb2F0aW5nT2JqZWN0KTsKKyAg
ICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisgICAgICAgIGFkZFBsYWNlZE9iamVj
dChmbG9hdGluZ09iamVjdCk7Cit9CisKK2lubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdHM6OnJlbW92ZShGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAg
ZGVjcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7CisgICAgbV9zZXQu
cmVtb3ZlKGZsb2F0aW5nT2JqZWN0KTsKKyAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxh
Y2VkKCkgfHwgIWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKyAgICBpZiAoZmxv
YXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisgICAgICAgIHJlbW92ZVBsYWNlZE9iamVjdChmbG9h
dGluZ09iamVjdCk7Cit9CisKIFRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4o
UmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNp
b25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKICAgICBBU1NFUlQo
c3R5bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBjZDYxMGNk
Li4xYTYwOTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMjQs
NiArMjQsNyBAQAogI2RlZmluZSBSZW5kZXJCbG9ja19oCiAKICNpbmNsdWRlICJHYXBSZWN0cy5o
IgorI2luY2x1ZGUgIlBPREludGVydmFsVHJlZS5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgog
I2luY2x1ZGUgIlJlbmRlckxpbmVCb3hMaXN0LmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5o
IgpAQCAtNjcsNiArNjgsMTAgQEAgdHlwZWRlZiB1bnNpZ25lZCBUZXh0UnVuRmxhZ3M7CiBjbGFz
cyBSZW5kZXJCbG9jayA6IHB1YmxpYyBSZW5kZXJCb3ggewogcHVibGljOgogICAgIGZyaWVuZCBj
bGFzcyBMaW5lTGF5b3V0U3RhdGU7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIFVzZWQgYnkgdGhl
IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nIHRoZSBGbG9hdGluZ09iamVjdC4KKyAgICB0
ZW1wbGF0ZTxjbGFzcz4gZnJpZW5kIHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCiAgICAg
UmVuZGVyQmxvY2soTm9kZSopOwogICAgIHZpcnR1YWwgflJlbmRlckJsb2NrKCk7CiAKQEAgLTQy
Miw2ICs0MjcsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KGZhbHNl
KQogICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKICAgICAgICAgICAgICwgbV9p
c1BsYWNlZChmYWxzZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAsIG1faXNJblBsYWNl
ZFRyZWUoZmFsc2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHR5cGUg
IT0gTm9GbG9hdCk7CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBMZWZ0RmxvYXQpCkBAIC00NDEs
NiArNDQ5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgbV9zaG91bGRQYWludCh0eXBlICE9
IEZsb2F0UG9zaXRpb25lZCkKICAgICAgICAgICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCiAg
ICAgICAgICAgICAsIG1faXNQbGFjZWQodHJ1ZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAg
ICAsIG1faXNJblBsYWNlZFRyZWUoZmFsc2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9
CiAKQEAgLTQ1NywxMyArNDY4LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGludCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LndpZHRoKCk7IH0KICAgICAgICAgaW50IGhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmhlaWdodCgpOyB9CiAKLSAgICAgICAgdm9pZCBz
ZXRYKGludCB4KSB7IG1fZnJhbWVSZWN0LnNldFgoeCk7IH0KLSAgICAgICAgdm9pZCBzZXRZKGlu
dCB5KSB7IG1fZnJhbWVSZWN0LnNldFkoeSk7IH0KLSAgICAgICAgdm9pZCBzZXRXaWR0aChpbnQg
d2lkdGgpIHsgbV9mcmFtZVJlY3Quc2V0V2lkdGgod2lkdGgpOyB9Ci0gICAgICAgIHZvaWQgc2V0
SGVpZ2h0KGludCBoZWlnaHQpIHsgbV9mcmFtZVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7IH0KKyAg
ICAgICAgdm9pZCBzZXRYKGludCB4KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJh
bWVSZWN0LnNldFgoeCk7IH0KKyAgICAgICAgdm9pZCBzZXRZKGludCB5KSB7IEFTU0VSVCghaXNJ
blBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFkoeSk7IH0KKyAgICAgICAgdm9pZCBzZXRX
aWR0aChpbnQgd2lkdGgpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Qu
c2V0V2lkdGgod2lkdGgpOyB9CisgICAgICAgIHZvaWQgc2V0SGVpZ2h0KGludCBoZWlnaHQpIHsg
QVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7
IH0KIAogICAgICAgICBjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QoKSBjb25zdCB7IEFTU0VSVChp
c1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9Ci0gICAgICAgIHZvaWQgc2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkgeyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsg
fQorICAgICAgICB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpIHsg
QVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3QgPSBmcmFtZVJlY3Q7IH0KKwor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBpc0luUGxhY2VkVHJlZSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNJblBsYWNlZFRyZWU7IH0KKyAgICAgICAgdm9pZCBzZXRJc0luUGxhY2VkVHJlZShi
b29sIHZhbHVlKSB7IG1faXNJblBsYWNlZFRyZWUgPSB2YWx1ZTsgfQorI2VuZGlmCiAKICAgICAg
ICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOwogICAgICAgICBSb290SW5saW5lQm94KiBtX29yaWdp
bmF0aW5nTGluZTsKQEAgLTQ3Myw2ICs0ODksOSBAQCBwcml2YXRlOgogICAgICAgICBib29sIG1f
c2hvdWxkUGFpbnQgOiAxOwogICAgICAgICBib29sIG1faXNEZXNjZW5kYW50IDogMTsKICAgICAg
ICAgYm9vbCBtX2lzUGxhY2VkIDogMTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGJvb2wgbV9p
c0luUGxhY2VkVHJlZSA6IDE7CisjZW5kaWYKICAgICB9OwogCiAgICAgSW50UG9pbnQgZmxpcEZs
b2F0Rm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRpbmdPYmplY3QqLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0OwpAQCAtNzk5LDI4ICs4MTgsNDIgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHR5cGVk
ZWYgTGlzdEhhc2hTZXQ8RmxvYXRpbmdPYmplY3QqLCA0LCBGbG9hdGluZ09iamVjdEhhc2hGdW5j
dGlvbnM+IEZsb2F0aW5nT2JqZWN0U2V0OwogICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RTZXQ6
OmNvbnN0X2l0ZXJhdG9yIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7CisgICAgdHlwZWRlZiBQ
T0RJbnRlcnZhbDxpbnQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsK
KyAgICB0eXBlZGVmIFBPREludGVydmFsVHJlZTxpbnQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRp
bmdPYmplY3RUcmVlOwogICAgIGNsYXNzIEZsb2F0aW5nT2JqZWN0cyB7CiAgICAgcHVibGljOgot
ICAgICAgICBGbG9hdGluZ09iamVjdHMoKQorICAgICAgICBGbG9hdGluZ09iamVjdHMoYm9vbCBo
b3Jpem9udGFsV3JpdGluZ01vZGUpCiAgICAgICAgICAgICA6IG1fbGVmdE9iamVjdHNDb3VudCgw
KQogICAgICAgICAgICAgLCBtX3JpZ2h0T2JqZWN0c0NvdW50KDApCiAgICAgICAgICAgICAsIG1f
cG9zaXRpb25lZE9iamVjdHNDb3VudCgwKQorICAgICAgICAgICAgLCBtX2hvcml6b250YWxXcml0
aW5nTW9kZShob3Jpem9udGFsV3JpdGluZ01vZGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAg
ICAgICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAgdm9pZCBpbmNyZWFzZU9iamVjdHNDb3VudChG
bG9hdGluZ09iamVjdDo6VHlwZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VPYmplY3RzQ291bnQo
RmxvYXRpbmdPYmplY3Q6OlR5cGUpOworICAgICAgICB2b2lkIGFkZChGbG9hdGluZ09iamVjdCop
OworICAgICAgICB2b2lkIHJlbW92ZShGbG9hdGluZ09iamVjdCopOworICAgICAgICB2b2lkIGFk
ZFBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCopOworICAgICAgICB2b2lkIHJlbW92ZVBsYWNl
ZE9iamVjdChGbG9hdGluZ09iamVjdCopOworICAgICAgICB2b2lkIHNldEhvcml6b250YWxXcml0
aW5nTW9kZShib29sIGIgPSB0cnVlKSB7IG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gYjsgfQor
CiAgICAgICAgIGJvb2wgaGFzTGVmdE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPYmpl
Y3RzQ291bnQgPiAwOyB9CiAgICAgICAgIGJvb2wgaGFzUmlnaHRPYmplY3RzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yaWdodE9iamVjdHNDb3VudCA+IDA7IH0KICAgICAgICAgYm9vbCBoYXNQb3NpdGlv
bmVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCA+IDA7
IH0KLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIHNldCgpIHsgcmV0dXJuIG1fc2V0OyB9Cisg
ICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSBjb25zdCB7IHJldHVybiBtX3Nl
dDsgfQorICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFRyZWUmIHBsYWNlZEZsb2F0c1RyZWUo
KSBjb25zdCB7IHJldHVybiBtX3BsYWNlZEZsb2F0c1RyZWU7IH0KIAogICAgIHByaXZhdGU6Cisg
ICAgICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUpOwor
ICAgICAgICB2b2lkIGRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsK
KyAgICAgICAgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0
KEZsb2F0aW5nT2JqZWN0Kik7CisKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQgbV9zZXQ7Cisg
ICAgICAgIEZsb2F0aW5nT2JqZWN0VHJlZSBtX3BsYWNlZEZsb2F0c1RyZWU7CiAgICAgICAgIHVu
c2lnbmVkIG1fbGVmdE9iamVjdHNDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9yaWdodE9iamVj
dHNDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbmVkT2JqZWN0c0NvdW50OworICAg
ICAgICBib29sIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlOwogICAgIH07CiAgICAgT3duUHRyPEZs
b2F0aW5nT2JqZWN0cz4gbV9mbG9hdGluZ09iamVjdHM7CiAgICAgCkBAIC04OTUsNiArOTI4LDE2
IEBAIGlubGluZSBjb25zdCBSZW5kZXJCbG9jayogdG9SZW5kZXJCbG9jayhjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdCkKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNl
c3NhcnkgY2FzdC4KIHZvaWQgdG9SZW5kZXJCbG9jayhjb25zdCBSZW5kZXJCbG9jayopOwogCisj
aWZuZGVmIE5ERUJVRworLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNlZCBieSBQT0RJbnRlcnZh
bFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK3RlbXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRv
U3RyaW5nPGludD4geworICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IGludCB2YWx1ZSk7
Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3QqPiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgUmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0Kik7Cit9OworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIFJlbmRlckJsb2NrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggNWRjMjdjNi4uNTUwOTYzNDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCkBAIC0xMDkxLDcgKzEwOTEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5k
RmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIGxhc3RSb290Qm94KCkpIHsK
LSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdp
bigpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5sYXN0RmxvYXQo
KSkgewpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGlua1RvRW5kTGlu
ZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCiAgICAgICAgICAgICB0cmFp
bGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2NrTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICBjb25zdCBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwogICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsK
QEAgLTE0OTEsNyArMTQ5MSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAKICAgICAgICAg
aW50IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCkgKyBhYnMo
ZGVsdGEpOwogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
OwogICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiBmID0gKml0OwpAQCAtMTUyOCw3ICsxNTI4LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5saW5l
QmlkaVIKIAogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmJs
b2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAg
ICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CkBAIC0yNTUwLDcgKzI1NTAsNyBAQCBib29sIFJlbmRl
ckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCwg
RmxvYXRpbmdPYmplYwogICAgIGlmICghbmV3RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0KQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVj
dFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAg
QVNTRVJUKGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKSA9PSBuZXdGbG9hdCk7CiAKICAgICBpbnQg
ZmxvYXRMb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KG5ld0Zsb2F0KTsKQEAgLTI1NzUs
NyArMjU3NSw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxv
YXRpbmdPYmplY3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjCiAgICAgICAgICAgICBpZiAoby0+
aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2sobyktPnNldENo
aWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgby0+bGF5b3V0SWZOZWVk
ZWQoKTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmVQbGFjZWRPYmplY3Qo
Zik7CiAgICAgICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoZiwgbG9naWNhbFRvcEZvckZs
b2F0KGYpICsgZi0+bV9wYWdpbmF0aW9uU3RydXQpOworICAgICAgICAgICAgbV9mbG9hdGluZ09i
amVjdHMtPmFkZFBsYWNlZE9iamVjdChmKTsKICAgICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>103014</attachid>
            <date>2011-08-04 18:20:31 -0700</date>
            <delta_ts>2011-08-05 09:37:14 -0700</delta_ts>
            <desc>Simple Performance Test</desc>
            <filename>floats.html</filename>
            <type>text/html</type>
            <size>2038</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">PHN0eWxlPgogICAgLmZsb2F0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDog
NXB4OwogICAgICAgIGhlaWdodDogNXB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyZWVu
OwogICAgfQogICAgLmJpZyB7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAx
MHB4OwogICAgfQogICAgLmVuZCB7CiAgICAgICAgZmxvYXQ6bGVmdDsKICAgICAgICBjbGVhcjps
ZWZ0OwogICAgfQogICAgCjwvc3R5bGU+Cgo8Ym9keT4KICAgIDxkaXY+RnJhbWVyYXRlOiA8c3Bh
biBpZD0iZnBzIj48L3NwYW4+IGZwczwvZGl2PgogICAgCiAgICA8c2NyaXB0PgoKICAgIGZ1bmN0
aW9uIGNyZWF0ZUVsZW1lbnQodGFnLCBwYXJlbnQsIGNsYXNzTmFtZSwgaWQpCiAgICB7CiAgICAg
ICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwogICAgICAgIGVsLmNsYXNz
TmFtZSA9IGNsYXNzTmFtZTsKICAgICAgICBlbC5pZCA9IGlkOwogICAgICAgIHBhcmVudC5hcHBl
bmRDaGlsZChlbCk7CiAgICAgICAgcmV0dXJuIGVsOwogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0
ZVNldCh3aWR0aCwgaGVpZ2h0KQogICAgewogICAgICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVF
bGVtZW50KCJkaXYiLCBkb2N1bWVudC5ib2R5LCAiY29udGFpbmVyIik7CiAgICAgICAgZm9yICh2
YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewogICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsg
eCA8IHdpZHRoOyArK3gpCiAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCJkaXYiLCBjb250
YWluZXIsICJmbG9hdCIsICJmbG9hdCIgKyB4ICsgIl8iICsgeSk7CiAgICAgICAgICAgIGNyZWF0
ZUVsZW1lbnQoImJyIiwgY29udGFpbmVyLCAiZmxvYXQtZW5kIiwgImVuZCIgKyB4KQogICAgICAg
IH0KICAgIH0KICAgIAogICAgZnVuY3Rpb24gdG9nZ2xlKHN0ciwgc3RyMSwgc3RyMikKICAgIHsK
ICAgICAgICBpZiAoc3RyID09IHN0cjEpCiAgICAgICAgICAgIHJldHVybiBzdHIyOwogICAgICAg
IHJldHVybiBzdHIxOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB0ZXN0KCkgCiAgICB7CiAgICAg
ICAgdmFyIHdpZHRoID0gNDAsIGhlaWdodCA9IDQwOwoKICAgICAgICBjcmVhdGVTZXQod2lkdGgs
IGhlaWdodCk7CiAgICAgICAgdmFyIHVwZGF0ZXMgPSAwOwogICAgICAgIHZhciBzdGFydFRpbWUg
PSBuZXcgRGF0ZSgpOwoKICAgICAgICBmdW5jdGlvbiB1cGRhdGVUaW1lcigpCiAgICAgICAgewog
ICAgICAgICAgICArK3VwZGF0ZXM7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbmV3VGlt
ZSA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgIHZhciBkZWx0YVRpbWUgPSBuZXdUaW1lIC0gc3Rh
cnRUaW1lOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGRlbHRhVGltZSA+IDEwMCkgewog
ICAgICAgICAgICAgICAgdmFyIGZwcyA9IHVwZGF0ZXM7CiAgICAgICAgICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZnBzIikuaW5uZXJIVE1MID0gZnBzOwogICAgICAgICAgICAgICAg
dXBkYXRlcyA9IDA7CiAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSBuZXdUaW1lOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICB2YXIgeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHdpZHRo
KTsKICAgICAgICAgICAgdmFyIHkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBoZWlnaHQp
OwogICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmxvYXQiICsg
eCArICJfIiArIHkpOwogICAgICAgICAgICBlbC5jbGFzc05hbWUgPSB0b2dnbGUoZWwuY2xhc3NO
YW1lLCAiZmxvYXQiLCAiZmxvYXQgYmlnIik7CiAgICAgICAgICAgIHVwZGF0ZVRpbWVyKCk7CiAg
ICAgICAgfQogICAgICAgIHNldEludGVydmFsKHVwZGF0ZSwgMCk7CiAgICB9CiAgICAKICAgIHRl
c3QoKTsKCiAgICA8L3NjcmlwdD4KICAgIAogICAgCiAgICAKPC9ib2R5Pg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103078</attachid>
            <date>2011-08-05 09:37:14 -0700</date>
            <delta_ts>2011-08-05 10:09:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65668_2.patch</filename>
            <type>text/plain</type>
            <size>45342</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NDI5M2ZkLi4yYTY3YzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMg
QEAKKzIwMTEtMDgtMDUgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIE9wdGltaXplIGZsb2F0aW5nIGVsZW1lbnRzIGxvb2t1cAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2NjgKKworICAgICAgICBBZGRl
ZCBhbiBpbnRlcnZhbCB0cmVlIGluIHRoZSBGbG9hdGluZ09iamVjdHMgc3RydWN0dXJlLiBBbHNv
IGFkZGVkIG5ldyBtZWNoYW5pc21zIHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGUgdHJlZSBpcyB1
cGRhdGVkIGNvcnJlY3RseSB3aGVuIGEgZmxvYXQgaXMgcmVwb3NpdGlvbmVkLgorCisgICAgICAg
IENoYW5nZWQgdGhlIFBPREludGVydmFsVHJlZSB0byBzdXBwb3J0IGdpdmluZyBhIHNlYXJjaCBh
ZGFwdGVyIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGJ5IHRoZQorICAgICAgICBjbGllbnQuIEkn
bSBub3QgYWRkaW5nIGEgZGlmZmVyZW50IGJ1ZyBmb3IgdGhhdCBiZWNhdXNlIFBPREludGVydmFs
VHJlZSBpcyBub3QgdXNlZCBhbnl3aGVyZSBlbHNlCisgICAgICAgIGFuZCB3b3VsZCBiZSBoYXJk
IHRvIHRlc3QgdGhhdCB0aGUgY2hhbmdlIGlzIG5vdCBicmVha2luZyBhbnl0aGluZy4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGp1c3QgYSByZWZhY3RvciBvbiB0aGUgZmxvYXRpbmcgb2JqZWN0cyBkYXRhIHN0cnVjdHVyZS4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVy
dmFsU2VhcmNoQWRhcHRlcjo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlBPREludGVydmFsU2VhcmNoQWRhcHRlcjo6bG93VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpoaWdoVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpjb2xsZWN0SWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjphbGxPdmVybGFwcyk6CisgICAgICAgIChXZWJD
b3JlOjpQT0RJbnRlcnZhbFRyZWU6OmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjpzZWFyY2hGb3JPdmVybGFwc0Zyb20pOgorICAgICAg
ICAqIHBsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjpjbGVhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ojo6c3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJv
bUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5n
aW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Ojpjb2xsZWN0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFz
T3ZlcmhhbmdpbmdGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50
cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJrU2libGlu
Z3NXaXRoRmxvYXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpo
aXRUZXN0RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JC
b3JkZXJGaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Ojppc0luUGxhY2VkVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldElzSW5QbGFj
ZWRUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2Vh
cmNoQWRhcHRlcjo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6
OmhpZ2hWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3RzOjpGbG9hdGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0czo6c2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpwbGFjZWRGbG9hdHNUcmVlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6bGlua1RvRW5kTGluZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdE9uTGluZSk6CisKIDIwMTEtMDgtMDUgIEtlaXNo
aSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IDxpbnB1
dCB0eXBlPWNvbG9yPiBVSSBiZWhhdmlvciBXZWJDb3JlIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyMTY0MDczLi5lNWFk
YTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xMzM2LDYgKzEzMzYsMTAgQEAKIAkJNTAxQkFBQTkxMzk1MEUyQzAwRjdBQ0VC
IC8qIFdpbmRSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MDFCQUFBODEzOTUwRTJDMDBGN0FDRUIgLyogV2luZFJ1bGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MDhDQ0E0RjEzQ0YxMDZCMDAz
MTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dU
aHJlYWQuaCAqLzsgfTsKIAkJNTA4Q0NBNTAxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTA4Q0NBNEUxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwICovOyB9Owor
CQk1MDk3QzVBMzEzRUFCQTdFMDAyREU0QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwOTdDNTlGMTNFQUJBN0UwMDJERTRBRiAv
KiBQT0RBcmVuYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTUwOTdDNUE0MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1QTAxM0VBQkE3RTAw
MkRFNEFGIC8qIFBPREludGVydmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTA5N0M1QTUxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFs
VHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5
N0M1QTExM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUwOTdDNUE2MTNFQUJBN0UwMDJE
RTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUwOTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1Ry
ZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MEU1NjZENjEzOUUzOEM1MDAyMTQ0MzMgLyogQ1NTV3JhcFNoYXBlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDFCQUFCMTEzOTUxMTRCMDBGN0FD
RUIgLyogQ1NTV3JhcFNoYXBlcy5jcHAgKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1
RiAvKiBDYWNoZWRQYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMDE4NDZBMEIwODYw
MkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4NDY4MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdl
LmNwcCAqLzsgfTsKQEAgLTc5MzksNiArNzk0MywxMCBAQAogCQk1MDFCQUFCMTEzOTUxMTRCMDBG
N0FDRUIgLyogQ1NTV3JhcFNoYXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NXcmFwU2hhcGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRmxvd1RocmVhZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MDhDQ0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1Ro
cmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJGbG93
VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1OUYxM0VBQkE3
RTAwMkRFNEFGIC8qIFBPREFyZW5hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBPREFyZW5hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwOTdDNUEwMTNFQUJB
N0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQT0RJbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzVB
MTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBPREludGVydmFsVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MDk3QzVBMjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPRFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVk
UGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY4MEIwODYwMkEwMDRBODI1RiAvKiBD
YWNoZWRQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hl
ZFBhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEEyRDEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xOTAxNiw2ICsxOTAyNCwxMCBAQAogCQlCQ0YxQTVCQTA5Nzgz
MjA5MDA2MUExMjMgLyogcGxhdGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTUwOTdDNTlGMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oICov
LAorCQkJCTUwOTdDNUEwMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oICovLAorCQkJ
CTUwOTdDNUExMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLywKKwkJCQk1
MDk3QzVBMjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8sCiAJCQkJNDlF
OTEyQTQwRUZBQzhFNjAwOUQwQ0FGIC8qIGFuaW1hdGlvbiAqLywKIAkJCQlGRDMxNjA0MDEyQjAy
NkEzMDBDMUEzNTkgLyogYXVkaW8gKi8sCiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJEIC8q
IGNmICovLApAQCAtMjMzNTQsNiArMjMzNjYsMTAgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEy
RjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1Mzcz
NTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MDk3
QzVBMzEzRUFCQTdFMDAyREU0QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovLAorCQkJCTUw
OTdDNUE0MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTA5N0M1QTUxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTA5N0M1QTYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJ
bnRlcnZhbFRyZWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVydmFsVHJlZS5o
CmluZGV4IDViZjNkZTAuLmY1MTY5N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BPREludGVydmFsVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRElu
dGVydmFsVHJlZS5oCkBAIC00MCw2ICs0MCwzMiBAQCB0ZW1wbGF0ZTxjbGFzcyBUPgogc3RydWN0
IFZhbHVlVG9TdHJpbmc7CiAjZW5kaWYKIAordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFVzZXJE
YXRhID0gdm9pZCo+CitjbGFzcyBQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgeworcHVibGljOgor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8VCwgVXNlckRhdGE+IEludGVydmFsVHlwZTsKKyAgICAK
KyAgICBQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIoVmVjdG9yPEludGVydmFsVHlwZT4mIHJlc3Vs
dCwgY29uc3QgVCYgbG93VmFsdWUsIGNvbnN0IFQmIGhpZ2hWYWx1ZSkKKyAgICAgICAgOiBtX3Jl
c3VsdChyZXN1bHQpCisgICAgICAgICwgbV9sb3dWYWx1ZShsb3dWYWx1ZSkKKyAgICAgICAgLCBt
X2hpZ2hWYWx1ZShoaWdoVmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBs
b3dWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG93VmFsdWU7IH0KKyAgICBjb25zdCBUJiBoaWdo
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hWYWx1ZTsgfQorICAgIHZvaWQgY29sbGVjdElm
TmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYgZGF0YSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChkYXRhLm92ZXJsYXBzKG1fbG93VmFsdWUsIG1faGlnaFZhbHVlKSkKKyAgICAgICAgICAgIG1f
cmVzdWx0LmFkZChkYXRhKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPEludGVydmFs
VHlwZT4mIG1fcmVzdWx0OworICAgIFQgbV9sb3dWYWx1ZTsKKyAgICBUIG1faGlnaFZhbHVlOwor
fTsKKwogLy8gQW4gaW50ZXJ2YWwgdHJlZSwgd2hpY2ggaXMgYSBmb3JtIG9mIGF1Z21lbnRlZCBy
ZWQtYmxhY2sgdHJlZS4gSXQKIC8vIHN1cHBvcnRzIGVmZmljaWVudCAoTyhsZyBuKSkgaW5zZXJ0
aW9uLCByZW1vdmFsIGFuZCBxdWVyeWluZyBvZgogLy8gaW50ZXJ2YWxzIGluIHRoZSB0cmVlLgpA
QCAtNTAsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAgLy8gVHlwZWRlZiB0byByZWR1Y2UgdHlwaW5n
IHdoZW4gZGVjbGFyaW5nIGludGVydmFscyB0byBiZSBzdG9yZWQgaW4KICAgICAvLyB0aGlzIHRy
ZWUuCiAgICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBlOwor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyPFQsIFVzZXJEYXRhPiBJbnRlcnZh
bFNlYXJjaEFkYXB0ZXJUeXBlOwogCiAgICAgUE9ESW50ZXJ2YWxUcmVlKCkKICAgICAgICAgOiBQ
T0RSZWRCbGFja1RyZWU8SW50ZXJ2YWxUeXBlPigpCkBAIC04MCw3ICsxMDcsMTYgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgLy8gRXhwbGljaXQgZGVyZWZlcmVuY2Ugb2YgInRoaXMiIHJlcXVp
cmVkIGJlY2F1c2Ugb2YKICAgICAgICAgLy8gaW5oZXJpdGFuY2UgcnVsZXMgaW4gdGVtcGxhdGUg
Y2xhc3Nlcy4KLSAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKHRoaXMtPnJvb3QoKSwgaW50
ZXJ2YWwsIHJlc3VsdCk7CisgICAgICAgIEludGVydmFsU2VhcmNoQWRhcHRlclR5cGUgYWRhcHRl
cihyZXN1bHQsIGludGVydmFsLmxvdygpLCBpbnRlcnZhbC5oaWdoKCkpOworICAgICAgICBzZWFy
Y2hGb3JPdmVybGFwc0Zyb208SW50ZXJ2YWxTZWFyY2hBZGFwdGVyVHlwZT4odGhpcy0+cm9vdCgp
LCBhZGFwdGVyKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEFkYXB0ZXJUeXBl
PgorICAgIHZvaWQgYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihBZGFwdGVyVHlwZSYgYWRhcHRlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIC8vIEV4cGxpY2l0IGRlcmVmZXJlbmNlIG9mICJ0aGlzIiBy
ZXF1aXJlZCBiZWNhdXNlIG9mCisgICAgICAgIC8vIGluaGVyaXRhbmNlIHJ1bGVzIGluIHRlbXBs
YXRlIGNsYXNzZXMuCisgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4o
dGhpcy0+cm9vdCgpLCBhZGFwdGVyKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgdG8gY3JlYXRl
IGludGVydmFsIG9iamVjdHMuCkBAIC0xMTIsNyArMTQ4LDggQEAgcHJpdmF0ZToKICAgICAvLyBT
dGFydGluZyBmcm9tIHRoZSBnaXZlbiBub2RlLCBhZGRzIGFsbCBvdmVybGFwcyB3aXRoIHRoZSBn
aXZlbgogICAgIC8vIGludGVydmFsIHRvIHRoZSByZXN1bHQgdmVjdG9yLiBUaGUgaW50ZXJ2YWxz
IGFyZSBzb3J0ZWQgYnkKICAgICAvLyBpbmNyZWFzaW5nIGxvdyBlbmRwb2ludC4KLSAgICB2b2lk
IHNlYXJjaEZvck92ZXJsYXBzRnJvbShJbnRlcnZhbE5vZGUqIG5vZGUsIGNvbnN0IEludGVydmFs
VHlwZSYgaW50ZXJ2YWwsIFZlY3RvcjxJbnRlcnZhbFR5cGU+JiByZXMpIGNvbnN0CisgICAgdGVt
cGxhdGUgPGNsYXNzIEFkYXB0ZXJUeXBlPgorICAgIHZvaWQgc2VhcmNoRm9yT3ZlcmxhcHNGcm9t
KEludGVydmFsTm9kZSogbm9kZSwgQWRhcHRlclR5cGUmIGFkYXB0ZXIpIGNvbnN0CiAgICAgewog
ICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjUsMTggKzE2Miwx
NyBAQCBwcml2YXRlOgogICAgICAgICBpZiAobGVmdAogICAgICAgICAgICAgLy8gVGhpcyBpcyBw
aHJhc2VkIHRoaXMgd2F5IHRvIGF2b2lkIHRoZSBuZWVkIGZvciBvcGVyYXRvcgogICAgICAgICAg
ICAgLy8gPD0gb24gdHlwZSBULgotICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4SGln
aCgpIDwgaW50ZXJ2YWwubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9t
KGxlZnQsIGludGVydmFsLCByZXMpOworICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4
SGlnaCgpIDwgYWRhcHRlci5sb3dWYWx1ZSgpKSkKKyAgICAgICAgICAgIHNlYXJjaEZvck92ZXJs
YXBzRnJvbTxBZGFwdGVyVHlwZT4obGVmdCwgYWRhcHRlcik7CiAKICAgICAgICAgLy8gQ2hlY2sg
Zm9yIG92ZXJsYXAgd2l0aCBjdXJyZW50IG5vZGUuCi0gICAgICAgIGlmIChub2RlLT5kYXRhKCku
b3ZlcmxhcHMoaW50ZXJ2YWwpKQotICAgICAgICAgICAgcmVzLmFwcGVuZChub2RlLT5kYXRhKCkp
OworICAgICAgICBhZGFwdGVyLmNvbGxlY3RJZk5lZWRlZChub2RlLT5kYXRhKCkpOwogCiAgICAg
ICAgIC8vIFNlZSB3aGV0aGVyIHdlIG5lZWQgdG8gdHJhdmVyc2UgdGhlIHJpZ2h0IHN1YnRyZWUu
CiAgICAgICAgIC8vIFRoaXMgaXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVlZCBm
b3Igb3BlcmF0b3IgPD0KICAgICAgICAgLy8gb24gdHlwZSBULgotICAgICAgICBpZiAoIShpbnRl
cnZhbC5oaWdoKCkgPCBub2RlLT5kYXRhKCkubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9y
T3ZlcmxhcHNGcm9tKG5vZGUtPnJpZ2h0KCksIGludGVydmFsLCByZXMpOworICAgICAgICBpZiAo
IShhZGFwdGVyLmhpZ2hWYWx1ZSgpIDwgbm9kZS0+ZGF0YSgpLmxvdygpKSkKKyAgICAgICAgICAg
IHNlYXJjaEZvck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4obm9kZS0+cmlnaHQoKSwgYWRhcHRl
cik7CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxOb2RlKiBu
b2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAppbmRleCA3ZGQ5
ZGRkLi5mMTQ3Y2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRC
bGFja1RyZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUu
aApAQCAtMTI3LDYgKzEyNywxMiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5QT0RSZWRCbGFj
a1RyZWUoKSB7IH0KIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9hcmVuYSA9
IFBPREFyZW5hOjpjcmVhdGUoKTsKKyAgICAgICAgbV9yb290ID0gMDsKKyAgICB9CisKICAgICB2
b2lkIGFkZChjb25zdCBUJiBkYXRhKQogICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYXJl
bmEtPmFsbG9jYXRlT2JqZWN0PE5vZGUsIFQ+KGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMjYzMmRkNS4uNDVhYjg1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC04MCw2ICs4MCwxOSBAQCBzdGF0aWMgRGVs
YXllZFVwZGF0ZVNjcm9sbEluZm9TZXQqIGdEZWxheWVkVXBkYXRlU2Nyb2xsSW5mb1NldCA9IDA7
CiAKIGJvb2wgUmVuZGVyQmxvY2s6OnNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyA9IGZh
bHNlOwogCisjaWZuZGVmIE5ERUJVRworLy8gVGhlc2UgaGVscGVycyBhcmUgb25seSB1c2VkIGJ5
IHRoZSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK1N0cmluZyBWYWx1
ZVRvU3RyaW5nPGludD46OnN0cmluZyhjb25zdCBpbnQgdmFsdWUpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6bnVtYmVyKHZhbHVlKTsKK30KKworU3RyaW5nIFZhbHVlVG9TdHJpbmc8UmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0Kj46OnN0cmluZyhjb25zdCBSZW5kZXJCbG9jazo6RmxvYXRpbmdP
YmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAg
KCVkeCVkICVkeCVkKSIsIGZsb2F0aW5nT2JqZWN0LCBmbG9hdGluZ09iamVjdC0+eCgpLCBmbG9h
dGluZ09iamVjdC0+eSgpLCBmbG9hdGluZ09iamVjdC0+bWF4WCgpLCBmbG9hdGluZ09iamVjdC0+
bWF4WSgpKTsKK30KKyNlbmRpZgorCiAvLyBPdXIgTWFyZ2luSW5mbyBzdGF0ZSB1c2VkIHdoZW4g
bGF5aW5nIG91dCBibG9jayBjaGlsZHJlbi4KIFJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJn
aW5JbmZvKFJlbmRlckJsb2NrKiBibG9jaywgaW50IGJlZm9yZUJvcmRlclBhZGRpbmcsIGludCBh
ZnRlckJvcmRlclBhZGRpbmcpCiAgICAgOiBtX2F0QmVmb3JlU2lkZU9mQmxvY2sodHJ1ZSkKQEAg
LTI3NCw3ICsyODcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eQogICAgIGJvb2wgY2FuUHJv
cGFnYXRlRmxvYXRJbnRvU2libGluZyA9ICFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgIWF2
b2lkc0Zsb2F0cygpOwogICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCAmJiBz
X2NhblByb3BhZ2F0ZUZsb2F0SW50b1NpYmxpbmcgJiYgIWNhblByb3BhZ2F0ZUZsb2F0SW50b1Np
YmxpbmcgJiYgaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSkgewogICAgICAgICBSZW5kZXJCbG9jayog
cGFyZW50QmxvY2sgPSB0aGlzOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGNvbnN0IEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKTsKIAogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IHBhcmVudCgp
OyBjdXJyICYmICFjdXJyLT5pc1JlbmRlclZpZXcoKTsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7
CkBAIC0xMTk0LDYgKzEyMDcsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlTG9naWNhbEhlaWdodCwgQmxvYwogICAgIEJsb2Nr
TGF5b3V0UGFzcyBmbG9hdHNMYXlvdXRQYXNzID0gbGF5b3V0UGFzczsKICAgICBpZiAoZmxvYXRz
TGF5b3V0UGFzcyA9PSBOb3JtYWxMYXlvdXRQYXNzICYmICFyZWxheW91dENoaWxkcmVuICYmICFw
b3NpdGlvbmVkRmxvYXRzTmVlZFJlbGF5b3V0KCkpCiAgICAgICAgIGZsb2F0c0xheW91dFBhc3Mg
PSBQb3NpdGlvbmVkRmxvYXRMYXlvdXRQYXNzOworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykK
KyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldEhvcml6b250YWxXcml0aW5nTW9kZShpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKTsKICAgICBjbGVhckZsb2F0cyhmbG9hdHNMYXlvdXRQYXNz
KTsKIAogICAgIGludCBwcmV2aW91c0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKQEAgLTE0MzYs
NyArMTQ1MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cygpCiAg
ICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTIyOTQsNyArMjMwOSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVz
Y2VuZGFudHMpCiAgICAgLy8gRklYTUU6IEF2b2lkIGRpc2FibGluZyBMYXlvdXRTdGF0ZS4gQXQg
dGhlIHZlcnkgbGVhc3QsIGRvbid0IGRpc2FibGUgaXQgZm9yIGZsb2F0cyBvcmlnaW5hdGluZwog
ICAgIC8vIGluIHRoaXMgYmxvY2suIEJldHRlciB5ZXQgd291bGQgYmUgdG8gcHVzaCBleHRyYSBz
dGF0ZSBmb3IgdGhlIGNvbnRhaW5lcnMgb2Ygb3RoZXIgZmxvYXRzLgogICAgIExheW91dFN0YXRl
RGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcih2aWV3KCkpOwotICAgIEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0yNjI3LDcgKzI2NDIsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludEZsb2F0cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2ZmcwogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0yODc5
LDcgKzI4OTQsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJC
bG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcgogICAgICAgICAgICAgZm9yIChS
ZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsgY2IgJiYgIWNiLT5pc1JlbmRlclZp
ZXcoKTsgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgICAgICAgICAgY2xpcE91
dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgSW50UG9pbnQoY2ItPngoKSwgY2ItPnkoKSks
IGNiLT5tX3Bvc2l0aW9uZWRPYmplY3RzLmdldCgpKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3Ig
ZmxpcHBlZCB3cml0aW5nIG1vZGVzLgogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsK
LSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTMxOTAsMTAgKzMyMDUsMTAgQEAgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3Qo
UmVuZGVyQm94KiBvKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2JqZWN0
cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBvbmUKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3Rz
KQotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVj
dHMpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09i
amVjdHMoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOwogICAgIGVsc2UgewogICAgICAgICAv
LyBEb24ndCBpbnNlcnQgdGhlIG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxp
c3QKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJv
eCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gKml0OwpAQCAtMzIy
NCw4ICszMjM5LDcgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6
aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogICAgIG5ld09iai0+bV9pc0Rlc2Nl
bmRhbnQgPSB0cnVlOwogICAgIG5ld09iai0+bV9yZW5kZXJlciA9IG87CiAKLSAgICBtX2Zsb2F0
aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQobmV3T2JqLT50eXBlKCkpOwotICAgIG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQobmV3T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+YWRkKG5ld09iaik7CiAgICAgCiAgICAgcmV0dXJuIG5ld09iajsKIH0KQEAgLTMyMzMsOCAr
MzI0Nyw4IEBAIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2s6Omluc2Vy
dEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZs
b2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHsKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMp
IHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFz
aFRyYW5zbGF0b3I+KG8pOworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCos
IEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCkpIHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0g
Kml0OwogICAgICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKQEAgLTMyNTksOCArMzI3
Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCog
bykKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJs
b2NrUmFuZ2UoMCwgbG9naWNhbEJvdHRvbSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+ZGVjcmVhc2VPYmplY3RzQ291bnQoci0+dHlwZSgpKTsKLSAgICAg
ICAgICAgIGZsb2F0aW5nT2JqZWN0U2V0LnJlbW92ZShpdCk7CisgICAgICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cy0+cmVtb3ZlKHIpOwogICAgICAgICAgICAgQVNTRVJUKCFyLT5tX29yaWdpbmF0
aW5nTGluZSk7CiAgICAgICAgICAgICBkZWxldGUgcjsKICAgICAgICAgfQpAQCAtMzI3MiwxMSAr
MzI4NSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyhG
bG9hdGluZ09iamVjdCogbGFzdEZsb2F0LCBpbnQgbG9naQogICAgIGlmICghbV9mbG9hdGluZ09i
amVjdHMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwogICAgIEZsb2F0aW5nT2JqZWN0KiBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgp
OwogICAgIHdoaWxlIChjdXJyICE9IGxhc3RGbG9hdCAmJiAoIWN1cnItPmlzUGxhY2VkKCkgfHwg
bG9naWNhbFRvcEZvckZsb2F0KGN1cnIpID49IGxvZ2ljYWxPZmZzZXQpKSB7Ci0gICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzLT5kZWNyZWFzZU9iamVjdHNDb3VudChjdXJyLT50eXBlKCkpOwotICAg
ICAgICBmbG9hdGluZ09iamVjdFNldC5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzLT5yZW1vdmUoY3Vycik7CiAgICAgICAgIEFTU0VSVCghY3Vyci0+bV9vcmlnaW5hdGlu
Z0xpbmUpOwogICAgICAgICBkZWxldGUgY3VycjsKICAgICAgICAgY3VyciA9IGZsb2F0aW5nT2Jq
ZWN0U2V0Lmxhc3QoKTsKQEAgLTMyODgsNyArMzMwMCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBv
c2l0aW9uTmV3RmxvYXRzKCkKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIGlmIChm
bG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MzQwNCw2ICszNDE2LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQog
ICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxI
ZWlnaHRGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkg
KyBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkQm94KSk7CiAKICAgICAgICAgZmxvYXRpbmdPYmpl
Y3QtPnNldElzUGxhY2VkKCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRP
YmplY3QoZmxvYXRpbmdPYmplY3QpOwogCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwg
d2UgaGF2ZSB0byByZXBhaW50IGl0LgogICAgICAgICBpZiAoY2hpbGRCb3gtPmNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpKQpAQCAtMzUwNSwxMSArMzUxOCwzMCBAQCBib29sIFJlbmRlckJs
b2NrOjpoYXNQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChSZW5kZXJCb3gqIGRlc2NlbmRhbnQpCiB9
CiAjZW5kaWYKIAotLy8gRklYTUU6IFRoZSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUvbG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSBmdW5jdGlvbnMgYXJlIHZlcnkgc2xvdyBpZiB0aGVyZSBhcmUg
bWFueSBmbG9hdHMKLS8vIHByZXNlbnQuIFdlIG5lZWQgdG8gYWRkIGEgc3RydWN0dXJlIHRvIGZs
b2F0aW5nIG9iamVjdHMgdG8gcmVwcmVzZW50ICJsaW5lcyIgb2YgZmxvYXRzLiAgVGhlbiBpbnN0
ZWFkIG9mIGNoZWNraW5nCi0vLyBlYWNoIGZsb2F0IGluZGl2aWR1YWxseSwgd2UnZCBqdXN0IHdh
bGsgYmFja3dhcmRzIHRocm91Z2ggdGhlICJsaW5lcyIgYW5kIHN0b3Agd2hlbiB3ZSBoaXQgYSBs
aW5lIHRoYXQgaXMgZnVsbHkgYWJvdmUKLS8vIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgdGhhdCB3ZSdk
IGxpa2UgdG8gY2hlY2suICBDb21wdXRpbmcgdGhlICJsaW5lcyIgd291bGQgYmUgcmF0aGVyIGNv
bXBsaWNhdGVkLCBidXQgY291bGQgcmVwbGFjZSB0aGUgbGVmdAotLy8gb2JqZWN0cyBhbmQgcmln
aHQgb2JqZWN0cyBjb3VudCBoYWNrIHRoYXQgaXMgY3VycmVudGx5IHVzZWQgaGVyZS4KK3RlbXBs
YXRlIDxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+Citp
bmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRU
eXBlVmFsdWU+Ojpjb2xsZWN0SWZOZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBpbnRlcnZhbCkg
Y29uc3QKK3sKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdCogciA9IGludGVydmFsLmRhdGEoKTsK
KyAgICBpZiAoci0+dHlwZSgpID09IEZsb2F0VHlwZVZhbHVlICYmIGludGVydmFsLmxvdygpIDw9
IG1fdmFsdWUgJiYgbV92YWx1ZSA8IGludGVydmFsLmhpZ2goKSkgeworICAgICAgICAvLyBBbGwg
dGhlIG9iamVjdHMgcmV0dXJuZWQgZnJvbSB0aGUgdHJlZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFj
ZWQuCisgICAgICAgIEFTU0VSVChyLT5pc1BsYWNlZCgpICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxU
b3BGb3JGbG9hdChyKSA8PSBtX3ZhbHVlICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0b21Gb3JG
bG9hdChyKSA+IG1fdmFsdWUpOworCisgICAgICAgIGlmIChGbG9hdFR5cGVWYWx1ZSA9PSBGbG9h
dGluZ09iamVjdDo6RmxvYXRMZWZ0IAorICAgICAgICAgICAgJiYgbV9yZW5kZXJlci0+bG9naWNh
bFJpZ2h0Rm9yRmxvYXQocikgPiBtX29mZnNldCkgeworICAgICAgICAgICAgbV9vZmZzZXQgPSBt
X3JlbmRlcmVyLT5sb2dpY2FsUmlnaHRGb3JGbG9hdChyKTsKKyAgICAgICAgICAgIGlmIChtX2hl
aWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcgPSBtX3Jl
bmRlcmVyLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQocikgLSBtX3ZhbHVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKEZsb2F0VHlwZVZhbHVlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0
CisgICAgICAgICAgICAmJiBtX3JlbmRlcmVyLT5sb2dpY2FsTGVmdEZvckZsb2F0KHIpIDwgbV9v
ZmZzZXQpIHsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gbV9yZW5kZXJlci0+bG9naWNhbExlZnRG
b3JGbG9hdChyKTsKKyAgICAgICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAgICAgICAg
ICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90dG9tRm9y
RmxvYXQocikgLSBtX3ZhbHVlOworICAgICAgICB9CisgICAgfQorfQorCiBMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwgTGF5b3V0VW5p
dCogaGVpZ2h0UmVtYWluaW5nKSBjb25zdAogewogICAgIExheW91dFVuaXQgbGVmdCA9IGZpeGVk
T2Zmc2V0OwpAQCAtMzUxNywyMyArMzU0OSw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Omxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuCiAg
ICAgICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5n
ID0gMTsKIAotICAgICAgICAvLyBXZSBrbm93IHRoZSBsaXN0IGlzIG5vbi1lbXB0eSwgc2luY2Ug
d2UgaGF2ZSAibGVmdCIgb2JqZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVyZWZv
cmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0
IGxlYXN0IG9uZQotICAgICAgICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxhY2Vk
KCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRv
bUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUoKSA9
PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0Ci0gICAgICAgICAgICAgICAgJiYgbG9naWNhbFJp
Z2h0Rm9yRmxvYXQocikgPiBsZWZ0KSB7Ci0gICAgICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0
LCBsb2dpY2FsUmlnaHRGb3JGbG9hdChyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhlaWdodFJl
bWFpbmluZykKLSAgICAgICAgICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGxvZ2ljYWxC
b3R0b21Gb3JGbG9hdChyKSAtIGxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
d2hpbGUgKGl0ICE9IGJlZ2luKTsKKyAgICAgICAgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8
RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdD4gYWRhcHRlcih0aGlzLCBsb2dpY2FsVG9wLCBsZWZ0
LCBoZWlnaHRSZW1haW5pbmcpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxv
YXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgfQogCiAgICAg
aWYgKGFwcGx5VGV4dEluZGVudCAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkp
IHsKQEAgLTM1NTMsMjQgKzM1NzAsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VQogICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zsb2F0aW5nT2JqZWN0cy0+aGFzUmlnaHRPYmplY3Rz
KCkpIHsKICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRS
ZW1haW5pbmcgPSAxOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIFdlIGtub3cgdGhlIGxpc3Qg
aXMgbm9uLWVtcHR5LCBzaW5jZSB3ZSBoYXZlICJyaWdodCIgb2JqZWN0cyB0byBzZWFyY2ggZm9y
LgotICAgICAgICAvLyBUaGVyZWZvcmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2luICE9IGVuZCwg
YW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxlYXN0IG9uZQotICAgICAgICAvLyBkZWNyZW1lbnQuCi0g
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgZG8gewotICAgICAg
ICAgICAgLS1pdDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAgICAg
ICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxvZ2lj
YWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAotICAgICAgICAg
ICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodAotICAgICAg
ICAgICAgICAgICYmIGxvZ2ljYWxMZWZ0Rm9yRmxvYXQocikgPCByaWdodCkgewotICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gbWluKHJpZ2h0LCBsb2dpY2FsTGVmdEZvckZsb2F0KHIpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQotICAgICAgICAgICAgICAgICAgICAqaGVp
Z2h0UmVtYWluaW5nID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpIC0gbG9naWNhbFRvcDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoaXQgIT0gYmVnaW4pOworCisgICAgICAgIEZs
b2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0PiBhZGFw
dGVyKHRoaXMsIGxvZ2ljYWxUb3AsIHJpZ2h0LCBoZWlnaHRSZW1haW5pbmcpOworICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0
ZXIoYWRhcHRlcik7CiAgICAgfQogICAgIAogICAgIGlmIChhcHBseVRleHRJbmRlbnQgJiYgIXN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewpAQCAtMzU5NSw3ICszNTk3LDcgQEAg
aW50IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coaW50IGxvZ2ljYWxI
ZWlnaHQpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaW50IGJvdHRvbSA9IElOVF9N
QVg7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09i
amVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTM2MTIs
NyArMzYxNCw3IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZs
b2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0VHlwZSkgY29uc3QKICAgICBpZiAoIW1fZmxvYXRpbmdP
YmplY3RzKQogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgbG93ZXN0RmxvYXRCb3R0b20gPSAw
OwotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0zNjYxLDYg
KzM2NjMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRQb3NpdGlvbmVkRmxvYXRzKCkKICAgICAg
ICAgc2V0TG9naWNhbFRvcEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dpY2FsVG9wRm9yQ2hp
bGQocG9zaXRpb25lZE9iamVjdCkgLSBtYXJnaW5CZWZvcmVGb3JDaGlsZChwb3NpdGlvbmVkT2Jq
ZWN0KSk7CiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwg
bG9naWNhbEhlaWdodEZvckNoaWxkKHBvc2l0aW9uZWRPYmplY3QpICsgbWFyZ2luQmVmb3JlRm9y
Q2hpbGQocG9zaXRpb25lZE9iamVjdCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKHBvc2l0aW9uZWRP
YmplY3QpKTsKICAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKHRydWUpOworICAg
ICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsK
ICAgICAgICAgCiAgICAgICAgIG1faGFzUG9zaXRpb25lZEZsb2F0cyA9IHRydWU7CiAgICAgfQpA
QCAtMzY4NiwxMCArMzY4OSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9j
a0xheW91dFBhc3MgbGF5b3V0UGFzcykKICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwIGZsb2F0
TWFwOwogCiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7CisgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAg
ICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBmbG9hdE1hcC5h
ZGQoZi0+bV9yZW5kZXJlciwgZik7CiAgICAgICAgICAgICB9CkBAIC0zNzQxLDcgKzM3NDQsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFz
cykKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxUb3AgPSBudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKTsKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxp
bnQ+OjptaW4oKTsKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAg
ICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RT
ZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3QqIGYgPSAqaXQ7CkBAIC0zODIzLDEwICszODI2LDkgQEAgaW50IFJlbmRlckJsb2NrOjph
ZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGludCBsb2dpY2FsTGVmdE9m
ZnNldCwKIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0
IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0g
ICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0
aW5nT2JqZWN0cyk7CisgICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRv
cHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAK
LSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQo
ZmxvYXRpbmdPYmotPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpLmFkZChmbG9hdGluZ09iaik7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVj
dHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpZiAobWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQ
YWludCAmJiAhci0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAtMzg1
Myw3ICszODU1LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5k
ZXJCb3gqIHJlbmRlcmVyKQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMgfHwgaGFzQ29sdW1u
cygpIHx8ICFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwor
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxv
YXRpbmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xh
dG9yPihyZW5kZXJlcik7CiAgICAgaWYgKGl0ID09IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODY5LDcgKzM4NzEsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVm
dE9mZnNldCwgaQogCiAgICAgbG9naWNhbExlZnRPZmZzZXQgKz0gKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBtYXJnaW5MZWZ0KCkgOiBtYXJnaW5Ub3AoKSk7CiAKLSAgICBGbG9hdGluZ09i
amVjdFNldCYgcHJldlNldCA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgcHJldlNldCA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIHByZXZFbmQgPSBwcmV2U2V0
LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2SXQgPSBwcmV2
U2V0LmJlZ2luKCk7IHByZXZJdCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgewogICAgICAgICBGbG9h
dGluZ09iamVjdCogciA9ICpwcmV2SXQ7CkBAIC0zODk3LDkgKzM4OTksOCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2Fs
TGVmdE9mZnNldCwgaQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNy
ZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmpl
Y3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgbV9m
bG9hdGluZ09iamVjdHMtPmluY3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqLT50eXBlKCkp
OwotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQoZmxvYXRpbmdP
YmopOworICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5l
dyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAg
ICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQpAQCAtMzk0MCw3ICszOTQxLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0
VG9SZW1vdmUKIAogdm9pZCBSZW5kZXJCbG9jazo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0Zvckxh
eW91dCgpCiB7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAo
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KCpp
dCkgPiBsb2dpY2FsSGVpZ2h0KCkpIHsKQEAgLTQwOTIsNyArNDA5Myw3IEBAIGJvb2wgUmVuZGVy
QmxvY2s6OmhpdFRlc3RGbG9hdHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlCiAgICAgICAgIGFkanVzdGVkTG9jYXRpb24gKz0gdG9TaXplKHRvUmVuZGVy
Vmlldyh0aGlzKS0+ZnJhbWVWaWV3KCktPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIH0KIAotICAg
IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CiAgICAgZm9yIChGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7IGl0ICE9IGJlZ2lu
OykgewogICAgICAgICAtLWl0OwpAQCAtNTY5OSw3ICs1NzAwLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YWRqdXN0Rm9yQm9yZGVyRml0KGludCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQpIGNvbnN0
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewot
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwpAQCAtNjQ0Myw2ICs2NDQ0LDcgQEAgY29uc3QgY2hh
ciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogaW5saW5lIHZvaWQgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIoKQogewogICAgIG1fc2V0LmNsZWFyKCk7CisgICAg
bV9wbGFjZWRGbG9hdHNUcmVlLmNsZWFyKCk7CiAgICAgbV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsK
ICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50ID0gMDsKICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzQ291
bnQgPSAwOwpAQCAtNjQ2OCw2ICs2NDcwLDQ5IEBAIGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdHM6OmRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUCiAg
ICAgICAgIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudC0tOwogfQogCitpbmxpbmUgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6
aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Qp
Cit7CisgICAgaWYgKG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICByZXR1cm4gUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPnkoKSwgZmxv
YXRpbmdPYmplY3QtPm1heFkoKSwgZmxvYXRpbmdPYmplY3QpOworICAgIHJldHVybiBSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+eCgpLCBmbG9hdGlu
Z09iamVjdC0+bWF4WCgpLCBmbG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0czo6YWRkUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGlu
Z09iamVjdCkKK3sKKyAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgJiYgIWZs
b2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKyAgICBtX3BsYWNlZEZsb2F0c1RyZWUu
YWRkKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKyNpZm5kZWYg
TkRFQlVHCisgICAgZmxvYXRpbmdPYmplY3QtPnNldElzSW5QbGFjZWRUcmVlKHRydWUpOworI2Vu
ZGlmCit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2Vk
T2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBBU1NFUlQoZmxv
YXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgJiYgZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVl
KCkpOworICAgIGJvb2wgcmVtb3ZlZCA9IG1fcGxhY2VkRmxvYXRzVHJlZS5yZW1vdmUoaW50ZXJ2
YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgIEFTU0VSVF9VTlVTRUQo
cmVtb3ZlZCwgcmVtb3ZlZCk7CisjaWZuZGVmIE5ERUJVRworICAgIGZsb2F0aW5nT2JqZWN0LT5z
ZXRJc0luUGxhY2VkVHJlZShmYWxzZSk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6YWRkKEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVj
dCkKK3sKKyAgICBpbmNyZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlwZSgpKTsK
KyAgICBtX3NldC5hZGQoZmxvYXRpbmdPYmplY3QpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+
aXNQbGFjZWQoKSkKKyAgICAgICAgYWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30K
KworaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlKEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBkZWNyZWFzZU9iamVjdHNDb3VudChm
bG9hdGluZ09iamVjdC0+dHlwZSgpKTsKKyAgICBtX3NldC5yZW1vdmUoZmxvYXRpbmdPYmplY3Qp
OworICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSB8fCAhZmxvYXRpbmdPYmpl
Y3QtPmlzSW5QbGFjZWRUcmVlKCkpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQo
KSkKKyAgICAgICAgcmVtb3ZlUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKwogVGV4
dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwg
VGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAgIEFTU0VSVChzdHlsZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDZjZGYyMGEuLjViY2Y1YTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFJl
bmRlckJsb2NrX2gKIAogI2luY2x1ZGUgIkdhcFJlY3RzLmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2
YWxUcmVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJv
eExpc3QuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCkBAIC02Nyw2ICs2OCwxMSBAQCB0
eXBlZGVmIHVuc2lnbmVkIFRleHRSdW5GbGFnczsKIGNsYXNzIFJlbmRlckJsb2NrIDogcHVibGlj
IFJlbmRlckJveCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIExpbmVMYXlvdXRTdGF0ZTsK
KyNpZm5kZWYgTkRFQlVHCisgICAgLy8gVXNlZCBieSB0aGUgUE9ESW50ZXJ2YWxUcmVlIGZvciBk
ZWJ1Z2dpbmcgdGhlIEZsb2F0aW5nT2JqZWN0LgorICAgIHRlbXBsYXRlIDxjbGFzcz4gZnJpZW5k
IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCisKICAgICBSZW5kZXJCbG9jayhOb2RlKik7
CiAgICAgdmlydHVhbCB+UmVuZGVyQmxvY2soKTsKIApAQCAtNDIyLDYgKzQyOCw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQoZmFsc2UpCiAgICAgICAgICAgICAsIG1f
aXNEZXNjZW5kYW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzUGxhY2VkKGZhbHNlKQorI2lm
bmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKKyNlbmRp
ZgogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsKICAgICAg
ICAgICAgIGlmICh0eXBlID09IExlZnRGbG9hdCkKQEAgLTQ0MSw2ICs0NTAsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHR5cGUgIT0gRmxvYXRQb3NpdGlvbmVkKQog
ICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc1Bs
YWNlZCh0cnVlKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJl
ZShmYWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDU3LDEzICs0Njks
MTggQEAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZVJlY3Qud2lkdGgoKTsgfQogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZVJlY3QuaGVpZ2h0KCk7IH0KIAotICAgICAgICB2b2lkIHNldFgoaW50IHgpIHsgbV9mcmFt
ZVJlY3Quc2V0WCh4KTsgfQotICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgbV9mcmFtZVJlY3Qu
c2V0WSh5KTsgfQotICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX2ZyYW1lUmVj
dC5zZXRXaWR0aCh3aWR0aCk7IH0KLSAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkg
eyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQorICAgICAgICB2b2lkIHNldFgoaW50
IHgpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4KTsgfQor
ICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9m
cmFtZVJlY3Quc2V0WSh5KTsgfQorICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBB
U1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0K
KyAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRU
cmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQogCiAgICAgICAgIGNvbnN0
IEludFJlY3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4g
bV9mcmFtZVJlY3Q7IH0KLSAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYg
ZnJhbWVSZWN0KSB7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9CisgICAgICAgIHZvaWQgc2V0
RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRU
cmVlKCkpOyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorCisjaWZuZGVmIE5ERUJVRworICAg
ICAgICBib29sIGlzSW5QbGFjZWRUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUGxhY2VkVHJl
ZTsgfQorICAgICAgICB2b2lkIHNldElzSW5QbGFjZWRUcmVlKGJvb2wgdmFsdWUpIHsgbV9pc0lu
UGxhY2VkVHJlZSA9IHZhbHVlOyB9CisjZW5kaWYKIAogICAgICAgICBSZW5kZXJCb3gqIG1fcmVu
ZGVyZXI7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5lOwpAQCAtNDcz
LDYgKzQ5MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9zaG91bGRQYWludCA6IDE7CiAg
ICAgICAgIGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAxOwogICAgICAgICBib29sIG1faXNQbGFjZWQg
OiAxOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBtX2lzSW5QbGFjZWRUcmVlIDogMTsK
KyNlbmRpZgogICAgIH07CiAKICAgICBJbnRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShj
b25zdCBGbG9hdGluZ09iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CkBAIC03OTksMjgg
KzgxOSw2NyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxGbG9h
dGluZ09iamVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4gRmxvYXRpbmdPYmpl
Y3RTZXQ7CiAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0b3IgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKKyAgICB0eXBlZGVmIFBPREludGVydmFsPExheW91dFVu
aXQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKKyAgICB0eXBlZGVm
IFBPREludGVydmFsVHJlZTxMYXlvdXRVbml0LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2Jq
ZWN0VHJlZTsKKyAgICAKKyAgICB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRU
eXBlVmFsdWU+CisgICAgY2xhc3MgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdEludGVydmFsIEludGVydmFsVHlw
ZTsKKyAgICAgICAgCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyKGNvbnN0IFJl
bmRlckJsb2NrKiByZW5kZXJlciwgTGF5b3V0VW5pdCB2YWx1ZSwgTGF5b3V0VW5pdCYgb2Zmc2V0
LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1haW5pbmcpCisgICAgICAgICAgICA6IG1fcmVuZGVyZXIo
cmVuZGVyZXIpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgbV9oZWlnaHRSZW1haW5pbmcoaGVpZ2h0UmVt
YWluaW5nKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlubGluZSBM
YXlvdXRVbml0IGxvd1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBp
bmxpbmUgTGF5b3V0VW5pdCBoaWdoVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Cisg
ICAgICAgIHZvaWQgY29sbGVjdElmTmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYpIGNvbnN0Owor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1fcmVuZGVyZXI7Cisg
ICAgICAgIExheW91dFVuaXQgbV92YWx1ZTsKKyAgICAgICAgTGF5b3V0VW5pdCYgbV9vZmZzZXQ7
CisgICAgICAgIExheW91dFVuaXQqIG1faGVpZ2h0UmVtYWluaW5nOworICAgIH07CisKICAgICBj
bGFzcyBGbG9hdGluZ09iamVjdHMgewogICAgIHB1YmxpYzoKLSAgICAgICAgRmxvYXRpbmdPYmpl
Y3RzKCkKKyAgICAgICAgRmxvYXRpbmdPYmplY3RzKGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KQogICAgICAgICAgICAgOiBtX2xlZnRPYmplY3RzQ291bnQoMCkKICAgICAgICAgICAgICwgbV9y
aWdodE9iamVjdHNDb3VudCgwKQogICAgICAgICAgICAgLCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291
bnQoMCkKKyAgICAgICAgICAgICwgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUoaG9yaXpvbnRhbFdy
aXRpbmdNb2RlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFyKCk7
Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUp
OwotICAgICAgICB2b2lkIGRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBl
KTsKKyAgICAgICAgdm9pZCBhZGQoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCByZW1v
dmUoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCBhZGRQbGFjZWRPYmplY3QoRmxvYXRp
bmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCByZW1vdmVQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmpl
Y3QqKTsKKyAgICAgICAgdm9pZCBzZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoYm9vbCBiID0gdHJ1
ZSkgeyBtX2hvcml6b250YWxXcml0aW5nTW9kZSA9IGI7IH0KKwogICAgICAgICBib29sIGhhc0xl
ZnRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0T2JqZWN0c0NvdW50ID4gMDsgfQogICAg
ICAgICBib29sIGhhc1JpZ2h0T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRPYmplY3Rz
Q291bnQgPiAwOyB9CiAgICAgICAgIGJvb2wgaGFzUG9zaXRpb25lZE9iamVjdHMoKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQgPiAwOyB9Ci0gICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0JiBzZXQoKSB7IHJldHVybiBtX3NldDsgfQorICAgICAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICAgICAgY29uc3Qg
RmxvYXRpbmdPYmplY3RUcmVlJiBwbGFjZWRGbG9hdHNUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9w
bGFjZWRGbG9hdHNUcmVlOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGluY3JlYXNl
T2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgdm9pZCBkZWNyZWFz
ZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CisgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0SW50ZXJ2YWwgaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChGbG9hdGluZ09iamVjdCopOwor
CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0IG1fc2V0OworICAgICAgICBGbG9hdGluZ09iamVj
dFRyZWUgbV9wbGFjZWRGbG9hdHNUcmVlOwogICAgICAgICB1bnNpZ25lZCBtX2xlZnRPYmplY3Rz
Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIG1fcmlnaHRPYmplY3RzQ291bnQ7CiAgICAgICAgIHVu
c2lnbmVkIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudDsKKyAgICAgICAgYm9vbCBtX2hvcml6b250
YWxXcml0aW5nTW9kZTsKICAgICB9OwogICAgIE93blB0cjxGbG9hdGluZ09iamVjdHM+IG1fZmxv
YXRpbmdPYmplY3RzOwogICAgIApAQCAtODk1LDYgKzk1NCwxNiBAQCBpbmxpbmUgY29uc3QgUmVu
ZGVyQmxvY2sqIHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAvLyBU
aGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRv
UmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqKTsKIAorI2lmbmRlZiBOREVCVUcKKy8vIFRo
ZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcg
cHVycG9zZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxpbnQ+IHsKKyAgICBz
dGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBpbnQgdmFsdWUpOworfTsKK3RlbXBsYXRlPD4gc3Ry
dWN0IFZhbHVlVG9TdHJpbmc8UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kj4geworICAgIHN0
YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCopOwor
fTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZW5kZXJC
bG9ja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwCmluZGV4IDVkYzI3YzYuLjU1MDk2MzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTA5MSw3ICsxMDkx
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICAgICAgICAgfQogCiAgICAgICAgIGlmICht
X2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0Um9vdEJveCgpKSB7Ci0gICAgICAgICAgICBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAg
ICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsKQEAgLTExNzIsNyArMTE3
Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5z
ZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2Jq
ZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICAgICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAg
ICAgICAgaWYgKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKSB7CkBAIC0xNDkxLDcgKzE0OTEsNyBA
QCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlLCBjb25zdCBJbmxpbmVCaWRpUgogCiAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0g
bGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAgICBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNl
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgZm9yIChGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKQEAg
LTE1MjgsNyArMTUyOCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKExpbmVM
YXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAKICAgICAgICAgICAg
ICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxhc3RMaW5lLT5ibG9ja0xvZ2ljYWxIZWlnaHQoKSAr
IGFicyhkZWx0YSk7CiAKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpOwogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
ZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yIChGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0g
Kml0OwpAQCAtMjU1MCw3ICsyNTUwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdG
bG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWMKICAgICBp
ZiAoIW5ld0Zsb2F0LT5tX3BhZ2luYXRpb25TdHJ1dCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEFTU0VSVChmbG9hdGluZ09iamVj
dFNldC5sYXN0KCkgPT0gbmV3RmxvYXQpOwogCiAgICAgaW50IGZsb2F0TG9naWNhbFRvcCA9IGxv
Z2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCk7CkBAIC0yNTc1LDcgKzI1NzUsOSBAQCBib29sIFJl
bmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9h
dCwgRmxvYXRpbmdPYmplYwogICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyQmxvY2soKSkKICAg
ICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKG8pLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUs
IGZhbHNlKTsKICAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlUGxhY2VkT2JqZWN0KGYpOwogICAgICAgICAgICAgc2V0
TG9naWNhbFRvcEZvckZsb2F0KGYsIGxvZ2ljYWxUb3BGb3JGbG9hdChmKSArIGYtPm1fcGFnaW5h
dGlvblN0cnV0KTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmpl
Y3QoZik7CiAgICAgICAgIH0KICAgICB9CiAK
</data>
<flag name="commit-queue"
          id="98549"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103083</attachid>
            <date>2011-08-05 10:09:46 -0700</date>
            <delta_ts>2011-08-08 07:26:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65668_3.patch</filename>
            <type>text/plain</type>
            <size>45345</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NDI5M2ZkLi4yYTY3YzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMg
QEAKKzIwMTEtMDgtMDUgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIE9wdGltaXplIGZsb2F0aW5nIGVsZW1lbnRzIGxvb2t1cAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2NjgKKworICAgICAgICBBZGRl
ZCBhbiBpbnRlcnZhbCB0cmVlIGluIHRoZSBGbG9hdGluZ09iamVjdHMgc3RydWN0dXJlLiBBbHNv
IGFkZGVkIG5ldyBtZWNoYW5pc21zIHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGUgdHJlZSBpcyB1
cGRhdGVkIGNvcnJlY3RseSB3aGVuIGEgZmxvYXQgaXMgcmVwb3NpdGlvbmVkLgorCisgICAgICAg
IENoYW5nZWQgdGhlIFBPREludGVydmFsVHJlZSB0byBzdXBwb3J0IGdpdmluZyBhIHNlYXJjaCBh
ZGFwdGVyIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGJ5IHRoZQorICAgICAgICBjbGllbnQuIEkn
bSBub3QgYWRkaW5nIGEgZGlmZmVyZW50IGJ1ZyBmb3IgdGhhdCBiZWNhdXNlIFBPREludGVydmFs
VHJlZSBpcyBub3QgdXNlZCBhbnl3aGVyZSBlbHNlCisgICAgICAgIGFuZCB3b3VsZCBiZSBoYXJk
IHRvIHRlc3QgdGhhdCB0aGUgY2hhbmdlIGlzIG5vdCBicmVha2luZyBhbnl0aGluZy4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGp1c3QgYSByZWZhY3RvciBvbiB0aGUgZmxvYXRpbmcgb2JqZWN0cyBkYXRhIHN0cnVjdHVyZS4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVy
dmFsU2VhcmNoQWRhcHRlcjo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlBPREludGVydmFsU2VhcmNoQWRhcHRlcjo6bG93VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpoaWdoVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpjb2xsZWN0SWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjphbGxPdmVybGFwcyk6CisgICAgICAgIChXZWJD
b3JlOjpQT0RJbnRlcnZhbFRyZWU6OmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjpzZWFyY2hGb3JPdmVybGFwc0Zyb20pOgorICAgICAg
ICAqIHBsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjpjbGVhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ojo6c3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJv
bUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5n
aW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Ojpjb2xsZWN0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFz
T3ZlcmhhbmdpbmdGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50
cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJrU2libGlu
Z3NXaXRoRmxvYXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpo
aXRUZXN0RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JC
b3JkZXJGaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Ojppc0luUGxhY2VkVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldElzSW5QbGFj
ZWRUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2Vh
cmNoQWRhcHRlcjo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6
OmhpZ2hWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3RzOjpGbG9hdGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0czo6c2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpwbGFjZWRGbG9hdHNUcmVlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6bGlua1RvRW5kTGluZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdE9uTGluZSk6CisKIDIwMTEtMDgtMDUgIEtlaXNo
aSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IDxpbnB1
dCB0eXBlPWNvbG9yPiBVSSBiZWhhdmlvciBXZWJDb3JlIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyMTY0MDczLi5lNWFk
YTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xMzM2LDYgKzEzMzYsMTAgQEAKIAkJNTAxQkFBQTkxMzk1MEUyQzAwRjdBQ0VC
IC8qIFdpbmRSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MDFCQUFBODEzOTUwRTJDMDBGN0FDRUIgLyogV2luZFJ1bGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MDhDQ0E0RjEzQ0YxMDZCMDAz
MTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dU
aHJlYWQuaCAqLzsgfTsKIAkJNTA4Q0NBNTAxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTA4Q0NBNEUxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwICovOyB9Owor
CQk1MDk3QzVBMzEzRUFCQTdFMDAyREU0QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwOTdDNTlGMTNFQUJBN0UwMDJERTRBRiAv
KiBQT0RBcmVuYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTUwOTdDNUE0MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1QTAxM0VBQkE3RTAw
MkRFNEFGIC8qIFBPREludGVydmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTA5N0M1QTUxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFs
VHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5
N0M1QTExM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUwOTdDNUE2MTNFQUJBN0UwMDJE
RTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUwOTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1Ry
ZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MEU1NjZENjEzOUUzOEM1MDAyMTQ0MzMgLyogQ1NTV3JhcFNoYXBlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDFCQUFCMTEzOTUxMTRCMDBGN0FD
RUIgLyogQ1NTV3JhcFNoYXBlcy5jcHAgKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1
RiAvKiBDYWNoZWRQYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMDE4NDZBMEIwODYw
MkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4NDY4MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdl
LmNwcCAqLzsgfTsKQEAgLTc5MzksNiArNzk0MywxMCBAQAogCQk1MDFCQUFCMTEzOTUxMTRCMDBG
N0FDRUIgLyogQ1NTV3JhcFNoYXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NXcmFwU2hhcGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRmxvd1RocmVhZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MDhDQ0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1Ro
cmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJGbG93
VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1OUYxM0VBQkE3
RTAwMkRFNEFGIC8qIFBPREFyZW5hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBPREFyZW5hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwOTdDNUEwMTNFQUJB
N0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQT0RJbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzVB
MTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBPREludGVydmFsVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MDk3QzVBMjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPRFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVk
UGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY4MEIwODYwMkEwMDRBODI1RiAvKiBD
YWNoZWRQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hl
ZFBhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEEyRDEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xOTAxNiw2ICsxOTAyNCwxMCBAQAogCQlCQ0YxQTVCQTA5Nzgz
MjA5MDA2MUExMjMgLyogcGxhdGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTUwOTdDNTlGMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oICov
LAorCQkJCTUwOTdDNUEwMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oICovLAorCQkJ
CTUwOTdDNUExMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLywKKwkJCQk1
MDk3QzVBMjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8sCiAJCQkJNDlF
OTEyQTQwRUZBQzhFNjAwOUQwQ0FGIC8qIGFuaW1hdGlvbiAqLywKIAkJCQlGRDMxNjA0MDEyQjAy
NkEzMDBDMUEzNTkgLyogYXVkaW8gKi8sCiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJEIC8q
IGNmICovLApAQCAtMjMzNTQsNiArMjMzNjYsMTAgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEy
RjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1Mzcz
NTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MDk3
QzVBMzEzRUFCQTdFMDAyREU0QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovLAorCQkJCTUw
OTdDNUE0MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTA5N0M1QTUxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTA5N0M1QTYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJ
bnRlcnZhbFRyZWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVydmFsVHJlZS5o
CmluZGV4IDViZjNkZTAuLjliMTcwYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BPREludGVydmFsVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRElu
dGVydmFsVHJlZS5oCkBAIC00MCw2ICs0MCwzMiBAQCB0ZW1wbGF0ZTxjbGFzcyBUPgogc3RydWN0
IFZhbHVlVG9TdHJpbmc7CiAjZW5kaWYKIAordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFVzZXJE
YXRhID0gdm9pZCo+CitjbGFzcyBQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgeworcHVibGljOgor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8VCwgVXNlckRhdGE+IEludGVydmFsVHlwZTsKKyAgICAK
KyAgICBQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIoVmVjdG9yPEludGVydmFsVHlwZT4mIHJlc3Vs
dCwgY29uc3QgVCYgbG93VmFsdWUsIGNvbnN0IFQmIGhpZ2hWYWx1ZSkKKyAgICAgICAgOiBtX3Jl
c3VsdChyZXN1bHQpCisgICAgICAgICwgbV9sb3dWYWx1ZShsb3dWYWx1ZSkKKyAgICAgICAgLCBt
X2hpZ2hWYWx1ZShoaWdoVmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBs
b3dWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG93VmFsdWU7IH0KKyAgICBjb25zdCBUJiBoaWdo
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hWYWx1ZTsgfQorICAgIHZvaWQgY29sbGVjdElm
TmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYgZGF0YSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChkYXRhLm92ZXJsYXBzKG1fbG93VmFsdWUsIG1faGlnaFZhbHVlKSkKKyAgICAgICAgICAgIG1f
cmVzdWx0LmFwcGVuZChkYXRhKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPEludGVy
dmFsVHlwZT4mIG1fcmVzdWx0OworICAgIFQgbV9sb3dWYWx1ZTsKKyAgICBUIG1faGlnaFZhbHVl
OworfTsKKwogLy8gQW4gaW50ZXJ2YWwgdHJlZSwgd2hpY2ggaXMgYSBmb3JtIG9mIGF1Z21lbnRl
ZCByZWQtYmxhY2sgdHJlZS4gSXQKIC8vIHN1cHBvcnRzIGVmZmljaWVudCAoTyhsZyBuKSkgaW5z
ZXJ0aW9uLCByZW1vdmFsIGFuZCBxdWVyeWluZyBvZgogLy8gaW50ZXJ2YWxzIGluIHRoZSB0cmVl
LgpAQCAtNTAsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAgLy8gVHlwZWRlZiB0byByZWR1Y2UgdHlw
aW5nIHdoZW4gZGVjbGFyaW5nIGludGVydmFscyB0byBiZSBzdG9yZWQgaW4KICAgICAvLyB0aGlz
IHRyZWUuCiAgICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBl
OworICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyPFQsIFVzZXJEYXRhPiBJbnRl
cnZhbFNlYXJjaEFkYXB0ZXJUeXBlOwogCiAgICAgUE9ESW50ZXJ2YWxUcmVlKCkKICAgICAgICAg
OiBQT0RSZWRCbGFja1RyZWU8SW50ZXJ2YWxUeXBlPigpCkBAIC04MCw3ICsxMDcsMTYgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgLy8gRXhwbGljaXQgZGVyZWZlcmVuY2Ugb2YgInRoaXMiIHJl
cXVpcmVkIGJlY2F1c2Ugb2YKICAgICAgICAgLy8gaW5oZXJpdGFuY2UgcnVsZXMgaW4gdGVtcGxh
dGUgY2xhc3Nlcy4KLSAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKHRoaXMtPnJvb3QoKSwg
aW50ZXJ2YWwsIHJlc3VsdCk7CisgICAgICAgIEludGVydmFsU2VhcmNoQWRhcHRlclR5cGUgYWRh
cHRlcihyZXN1bHQsIGludGVydmFsLmxvdygpLCBpbnRlcnZhbC5oaWdoKCkpOworICAgICAgICBz
ZWFyY2hGb3JPdmVybGFwc0Zyb208SW50ZXJ2YWxTZWFyY2hBZGFwdGVyVHlwZT4odGhpcy0+cm9v
dCgpLCBhZGFwdGVyKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEFkYXB0ZXJU
eXBlPgorICAgIHZvaWQgYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihBZGFwdGVyVHlwZSYgYWRhcHRl
cikgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEV4cGxpY2l0IGRlcmVmZXJlbmNlIG9mICJ0aGlz
IiByZXF1aXJlZCBiZWNhdXNlIG9mCisgICAgICAgIC8vIGluaGVyaXRhbmNlIHJ1bGVzIGluIHRl
bXBsYXRlIGNsYXNzZXMuCisgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlw
ZT4odGhpcy0+cm9vdCgpLCBhZGFwdGVyKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgdG8gY3Jl
YXRlIGludGVydmFsIG9iamVjdHMuCkBAIC0xMTIsNyArMTQ4LDggQEAgcHJpdmF0ZToKICAgICAv
LyBTdGFydGluZyBmcm9tIHRoZSBnaXZlbiBub2RlLCBhZGRzIGFsbCBvdmVybGFwcyB3aXRoIHRo
ZSBnaXZlbgogICAgIC8vIGludGVydmFsIHRvIHRoZSByZXN1bHQgdmVjdG9yLiBUaGUgaW50ZXJ2
YWxzIGFyZSBzb3J0ZWQgYnkKICAgICAvLyBpbmNyZWFzaW5nIGxvdyBlbmRwb2ludC4KLSAgICB2
b2lkIHNlYXJjaEZvck92ZXJsYXBzRnJvbShJbnRlcnZhbE5vZGUqIG5vZGUsIGNvbnN0IEludGVy
dmFsVHlwZSYgaW50ZXJ2YWwsIFZlY3RvcjxJbnRlcnZhbFR5cGU+JiByZXMpIGNvbnN0CisgICAg
dGVtcGxhdGUgPGNsYXNzIEFkYXB0ZXJUeXBlPgorICAgIHZvaWQgc2VhcmNoRm9yT3ZlcmxhcHNG
cm9tKEludGVydmFsTm9kZSogbm9kZSwgQWRhcHRlclR5cGUmIGFkYXB0ZXIpIGNvbnN0CiAgICAg
ewogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjUsMTggKzE2
MiwxNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAobGVmdAogICAgICAgICAgICAgLy8gVGhpcyBp
cyBwaHJhc2VkIHRoaXMgd2F5IHRvIGF2b2lkIHRoZSBuZWVkIGZvciBvcGVyYXRvcgogICAgICAg
ICAgICAgLy8gPD0gb24gdHlwZSBULgotICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4
SGlnaCgpIDwgaW50ZXJ2YWwubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNG
cm9tKGxlZnQsIGludGVydmFsLCByZXMpOworICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCku
bWF4SGlnaCgpIDwgYWRhcHRlci5sb3dWYWx1ZSgpKSkKKyAgICAgICAgICAgIHNlYXJjaEZvck92
ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4obGVmdCwgYWRhcHRlcik7CiAKICAgICAgICAgLy8gQ2hl
Y2sgZm9yIG92ZXJsYXAgd2l0aCBjdXJyZW50IG5vZGUuCi0gICAgICAgIGlmIChub2RlLT5kYXRh
KCkub3ZlcmxhcHMoaW50ZXJ2YWwpKQotICAgICAgICAgICAgcmVzLmFwcGVuZChub2RlLT5kYXRh
KCkpOworICAgICAgICBhZGFwdGVyLmNvbGxlY3RJZk5lZWRlZChub2RlLT5kYXRhKCkpOwogCiAg
ICAgICAgIC8vIFNlZSB3aGV0aGVyIHdlIG5lZWQgdG8gdHJhdmVyc2UgdGhlIHJpZ2h0IHN1YnRy
ZWUuCiAgICAgICAgIC8vIFRoaXMgaXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVl
ZCBmb3Igb3BlcmF0b3IgPD0KICAgICAgICAgLy8gb24gdHlwZSBULgotICAgICAgICBpZiAoIShp
bnRlcnZhbC5oaWdoKCkgPCBub2RlLT5kYXRhKCkubG93KCkpKQotICAgICAgICAgICAgc2VhcmNo
Rm9yT3ZlcmxhcHNGcm9tKG5vZGUtPnJpZ2h0KCksIGludGVydmFsLCByZXMpOworICAgICAgICBp
ZiAoIShhZGFwdGVyLmhpZ2hWYWx1ZSgpIDwgbm9kZS0+ZGF0YSgpLmxvdygpKSkKKyAgICAgICAg
ICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4obm9kZS0+cmlnaHQoKSwgYWRh
cHRlcik7CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxOb2Rl
KiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tU
cmVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAppbmRleCA3
ZGQ5ZGRkLi5mMTQ3Y2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RS
ZWRCbGFja1RyZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1Ry
ZWUuaApAQCAtMTI3LDYgKzEyNywxMiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5QT0RSZWRC
bGFja1RyZWUoKSB7IH0KIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9hcmVu
YSA9IFBPREFyZW5hOjpjcmVhdGUoKTsKKyAgICAgICAgbV9yb290ID0gMDsKKyAgICB9CisKICAg
ICB2b2lkIGFkZChjb25zdCBUJiBkYXRhKQogICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1f
YXJlbmEtPmFsbG9jYXRlT2JqZWN0PE5vZGUsIFQ+KGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMjYzMmRkNS4uNDVhYjg1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC04MCw2ICs4MCwxOSBAQCBzdGF0aWMg
RGVsYXllZFVwZGF0ZVNjcm9sbEluZm9TZXQqIGdEZWxheWVkVXBkYXRlU2Nyb2xsSW5mb1NldCA9
IDA7CiAKIGJvb2wgUmVuZGVyQmxvY2s6OnNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyA9
IGZhbHNlOwogCisjaWZuZGVmIE5ERUJVRworLy8gVGhlc2UgaGVscGVycyBhcmUgb25seSB1c2Vk
IGJ5IHRoZSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK1N0cmluZyBW
YWx1ZVRvU3RyaW5nPGludD46OnN0cmluZyhjb25zdCBpbnQgdmFsdWUpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKK30KKworU3RyaW5nIFZhbHVlVG9TdHJpbmc8UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0Kj46OnN0cmluZyhjb25zdCBSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgi
JXAgKCVkeCVkICVkeCVkKSIsIGZsb2F0aW5nT2JqZWN0LCBmbG9hdGluZ09iamVjdC0+eCgpLCBm
bG9hdGluZ09iamVjdC0+eSgpLCBmbG9hdGluZ09iamVjdC0+bWF4WCgpLCBmbG9hdGluZ09iamVj
dC0+bWF4WSgpKTsKK30KKyNlbmRpZgorCiAvLyBPdXIgTWFyZ2luSW5mbyBzdGF0ZSB1c2VkIHdo
ZW4gbGF5aW5nIG91dCBibG9jayBjaGlsZHJlbi4KIFJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpN
YXJnaW5JbmZvKFJlbmRlckJsb2NrKiBibG9jaywgaW50IGJlZm9yZUJvcmRlclBhZGRpbmcsIGlu
dCBhZnRlckJvcmRlclBhZGRpbmcpCiAgICAgOiBtX2F0QmVmb3JlU2lkZU9mQmxvY2sodHJ1ZSkK
QEAgLTI3NCw3ICsyODcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eQogICAgIGJvb2wgY2Fu
UHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyA9ICFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYg
IWF2b2lkc0Zsb2F0cygpOwogICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCAm
JiBzX2NhblByb3BhZ2F0ZUZsb2F0SW50b1NpYmxpbmcgJiYgIWNhblByb3BhZ2F0ZUZsb2F0SW50
b1NpYmxpbmcgJiYgaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSkgewogICAgICAgICBSZW5kZXJCbG9j
ayogcGFyZW50QmxvY2sgPSB0aGlzOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGNvbnN0IEZs
b2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKIAogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IHBhcmVu
dCgpOyBjdXJyICYmICFjdXJyLT5pc1JlbmRlclZpZXcoKTsgY3VyciA9IGN1cnItPnBhcmVudCgp
KSB7CkBAIC0xMTk0LDYgKzEyMDcsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlTG9naWNhbEhlaWdodCwgQmxvYwogICAgIEJs
b2NrTGF5b3V0UGFzcyBmbG9hdHNMYXlvdXRQYXNzID0gbGF5b3V0UGFzczsKICAgICBpZiAoZmxv
YXRzTGF5b3V0UGFzcyA9PSBOb3JtYWxMYXlvdXRQYXNzICYmICFyZWxheW91dENoaWxkcmVuICYm
ICFwb3NpdGlvbmVkRmxvYXRzTmVlZFJlbGF5b3V0KCkpCiAgICAgICAgIGZsb2F0c0xheW91dFBh
c3MgPSBQb3NpdGlvbmVkRmxvYXRMYXlvdXRQYXNzOworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0
cykKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldEhvcml6b250YWxXcml0aW5nTW9kZShp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICAgICBjbGVhckZsb2F0cyhmbG9hdHNMYXlvdXRQ
YXNzKTsKIAogICAgIGludCBwcmV2aW91c0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKQEAgLTE0
MzYsNyArMTQ1MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cygp
CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVu
ZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTIyOTQsNyArMjMwOSw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxs
RGVzY2VuZGFudHMpCiAgICAgLy8gRklYTUU6IEF2b2lkIGRpc2FibGluZyBMYXlvdXRTdGF0ZS4g
QXQgdGhlIHZlcnkgbGVhc3QsIGRvbid0IGRpc2FibGUgaXQgZm9yIGZsb2F0cyBvcmlnaW5hdGlu
ZwogICAgIC8vIGluIHRoaXMgYmxvY2suIEJldHRlciB5ZXQgd291bGQgYmUgdG8gcHVzaCBleHRy
YSBzdGF0ZSBmb3IgdGhlIGNvbnRhaW5lcnMgb2Ygb3RoZXIgZmxvYXRzLgogICAgIExheW91dFN0
YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcih2aWV3KCkpOwotICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0yNjI3LDcgKzI2NDIsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludEZsb2F0cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2ZmcwogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0y
ODc5LDcgKzI4OTQsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5k
ZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcgogICAgICAgICAgICAgZm9y
IChSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsgY2IgJiYgIWNiLT5pc1JlbmRl
clZpZXcoKTsgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgICAgICAgICAgY2xp
cE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgSW50UG9pbnQoY2ItPngoKSwgY2ItPnko
KSksIGNiLT5tX3Bvc2l0aW9uZWRPYmplY3RzLmdldCgpKTsgLy8gRklYTUU6IE5vdCByaWdodCBm
b3IgZmxpcHBlZCB3cml0aW5nIG1vZGVzLgogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMp
IHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAg
ICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTMxOTAsMTAgKzMyMDUsMTAgQEAgUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmpl
Y3QoUmVuZGVyQm94KiBvKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2Jq
ZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBvbmUKICAgICBpZiAoIW1fZmxvYXRpbmdPYmpl
Y3RzKQotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09i
amVjdHMpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGlu
Z09iamVjdHMoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOwogICAgIGVsc2UgewogICAgICAg
ICAvLyBEb24ndCBpbnNlcnQgdGhlIG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhl
IGxpc3QKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRl
ckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQg
IT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gKml0OwpAQCAt
MzIyNCw4ICszMjM5LDcgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9j
azo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogICAgIG5ld09iai0+bV9pc0Rl
c2NlbmRhbnQgPSB0cnVlOwogICAgIG5ld09iai0+bV9yZW5kZXJlciA9IG87CiAKLSAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQobmV3T2JqLT50eXBlKCkpOwotICAg
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQobmV3T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+YWRkKG5ld09iaik7CiAgICAgCiAgICAgcmV0dXJuIG5ld09iajsKIH0KQEAgLTMyMzMs
OCArMzI0Nyw4IEBAIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2s6Omlu
c2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92
ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHsKICAgICBpZiAobV9mbG9hdGluZ09iamVj
dHMpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0
SGFzaFRyYW5zbGF0b3I+KG8pOworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJv
eCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpIHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBy
ID0gKml0OwogICAgICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKQEAgLTMyNTksOCAr
MzI3Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJv
eCogbykKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJ
bkJsb2NrUmFuZ2UoMCwgbG9naWNhbEJvdHRvbSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGVjcmVhc2VPYmplY3RzQ291bnQoci0+dHlwZSgpKTsKLSAg
ICAgICAgICAgIGZsb2F0aW5nT2JqZWN0U2V0LnJlbW92ZShpdCk7CisgICAgICAgICAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+cmVtb3ZlKHIpOwogICAgICAgICAgICAgQVNTRVJUKCFyLT5tX29yaWdp
bmF0aW5nTGluZSk7CiAgICAgICAgICAgICBkZWxldGUgcjsKICAgICAgICAgfQpAQCAtMzI3Miwx
MSArMzI4NSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxv
dyhGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0LCBpbnQgbG9naQogICAgIGlmICghbV9mbG9hdGlu
Z09iamVjdHMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3Qg
RmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0KiBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFz
dCgpOwogICAgIHdoaWxlIChjdXJyICE9IGxhc3RGbG9hdCAmJiAoIWN1cnItPmlzUGxhY2VkKCkg
fHwgbG9naWNhbFRvcEZvckZsb2F0KGN1cnIpID49IGxvZ2ljYWxPZmZzZXQpKSB7Ci0gICAgICAg
IG1fZmxvYXRpbmdPYmplY3RzLT5kZWNyZWFzZU9iamVjdHNDb3VudChjdXJyLT50eXBlKCkpOwot
ICAgICAgICBmbG9hdGluZ09iamVjdFNldC5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5yZW1vdmUoY3Vycik7CiAgICAgICAgIEFTU0VSVCghY3Vyci0+bV9vcmlnaW5h
dGluZ0xpbmUpOwogICAgICAgICBkZWxldGUgY3VycjsKICAgICAgICAgY3VyciA9IGZsb2F0aW5n
T2JqZWN0U2V0Lmxhc3QoKTsKQEAgLTMyODgsNyArMzMwMCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6
OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RT
ZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIGlm
IChmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMzQwNCw2ICszNDE2LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMo
KQogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2lj
YWxIZWlnaHRGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJv
eCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkQm94KSk7CiAKICAgICAgICAgZmxvYXRpbmdP
YmplY3QtPnNldElzUGxhY2VkKCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFj
ZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOwogCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3Zl
ZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0LgogICAgICAgICBpZiAoY2hpbGRCb3gtPmNoZWNrRm9y
UmVwYWludER1cmluZ0xheW91dCgpKQpAQCAtMzUwNSwxMSArMzUxOCwzMCBAQCBib29sIFJlbmRl
ckJsb2NrOjpoYXNQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChSZW5kZXJCb3gqIGRlc2NlbmRhbnQp
CiB9CiAjZW5kaWYKIAotLy8gRklYTUU6IFRoZSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUvbG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZSBmdW5jdGlvbnMgYXJlIHZlcnkgc2xvdyBpZiB0aGVyZSBh
cmUgbWFueSBmbG9hdHMKLS8vIHByZXNlbnQuIFdlIG5lZWQgdG8gYWRkIGEgc3RydWN0dXJlIHRv
IGZsb2F0aW5nIG9iamVjdHMgdG8gcmVwcmVzZW50ICJsaW5lcyIgb2YgZmxvYXRzLiAgVGhlbiBp
bnN0ZWFkIG9mIGNoZWNraW5nCi0vLyBlYWNoIGZsb2F0IGluZGl2aWR1YWxseSwgd2UnZCBqdXN0
IHdhbGsgYmFja3dhcmRzIHRocm91Z2ggdGhlICJsaW5lcyIgYW5kIHN0b3Agd2hlbiB3ZSBoaXQg
YSBsaW5lIHRoYXQgaXMgZnVsbHkgYWJvdmUKLS8vIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgdGhhdCB3
ZSdkIGxpa2UgdG8gY2hlY2suICBDb21wdXRpbmcgdGhlICJsaW5lcyIgd291bGQgYmUgcmF0aGVy
IGNvbXBsaWNhdGVkLCBidXQgY291bGQgcmVwbGFjZSB0aGUgbGVmdAotLy8gb2JqZWN0cyBhbmQg
cmlnaHQgb2JqZWN0cyBjb3VudCBoYWNrIHRoYXQgaXMgY3VycmVudGx5IHVzZWQgaGVyZS4KK3Rl
bXBsYXRlIDxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+
CitpbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8Rmxv
YXRUeXBlVmFsdWU+Ojpjb2xsZWN0SWZOZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBpbnRlcnZh
bCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdCogciA9IGludGVydmFsLmRhdGEo
KTsKKyAgICBpZiAoci0+dHlwZSgpID09IEZsb2F0VHlwZVZhbHVlICYmIGludGVydmFsLmxvdygp
IDw9IG1fdmFsdWUgJiYgbV92YWx1ZSA8IGludGVydmFsLmhpZ2goKSkgeworICAgICAgICAvLyBB
bGwgdGhlIG9iamVjdHMgcmV0dXJuZWQgZnJvbSB0aGUgdHJlZSBzaG91bGQgYmUgYWxyZWFkeSBw
bGFjZWQuCisgICAgICAgIEFTU0VSVChyLT5pc1BsYWNlZCgpICYmIG1fcmVuZGVyZXItPmxvZ2lj
YWxUb3BGb3JGbG9hdChyKSA8PSBtX3ZhbHVlICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0b21G
b3JGbG9hdChyKSA+IG1fdmFsdWUpOworCisgICAgICAgIGlmIChGbG9hdFR5cGVWYWx1ZSA9PSBG
bG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0IAorICAgICAgICAgICAgJiYgbV9yZW5kZXJlci0+bG9n
aWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBtX29mZnNldCkgeworICAgICAgICAgICAgbV9vZmZzZXQg
PSBtX3JlbmRlcmVyLT5sb2dpY2FsUmlnaHRGb3JGbG9hdChyKTsKKyAgICAgICAgICAgIGlmICht
X2hlaWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcgPSBt
X3JlbmRlcmVyLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQocikgLSBtX3ZhbHVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKEZsb2F0VHlwZVZhbHVlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJp
Z2h0CisgICAgICAgICAgICAmJiBtX3JlbmRlcmVyLT5sb2dpY2FsTGVmdEZvckZsb2F0KHIpIDwg
bV9vZmZzZXQpIHsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gbV9yZW5kZXJlci0+bG9naWNhbExl
ZnRGb3JGbG9hdChyKTsKKyAgICAgICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAgICAg
ICAgICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90dG9t
Rm9yRmxvYXQocikgLSBtX3ZhbHVlOworICAgICAgICB9CisgICAgfQorfQorCiBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wLCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwgTGF5b3V0
VW5pdCogaGVpZ2h0UmVtYWluaW5nKSBjb25zdAogewogICAgIExheW91dFVuaXQgbGVmdCA9IGZp
eGVkT2Zmc2V0OwpAQCAtMzUxNywyMyArMzU0OSw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6
OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVu
CiAgICAgICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWlu
aW5nID0gMTsKIAotICAgICAgICAvLyBXZSBrbm93IHRoZSBsaXN0IGlzIG5vbi1lbXB0eSwgc2lu
Y2Ugd2UgaGF2ZSAibGVmdCIgb2JqZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVy
ZWZvcmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRv
IGF0IGxlYXN0IG9uZQotICAgICAgICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0
LmJlZ2luKCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxh
Y2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJv
dHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUo
KSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0Ci0gICAgICAgICAgICAgICAgJiYgbG9naWNh
bFJpZ2h0Rm9yRmxvYXQocikgPiBsZWZ0KSB7Ci0gICAgICAgICAgICAgICAgbGVmdCA9IG1heChs
ZWZ0LCBsb2dpY2FsUmlnaHRGb3JGbG9hdChyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhlaWdo
dFJlbWFpbmluZykKLSAgICAgICAgICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGxvZ2lj
YWxCb3R0b21Gb3JGbG9hdChyKSAtIGxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gd2hpbGUgKGl0ICE9IGJlZ2luKTsKKyAgICAgICAgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0
ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdD4gYWRhcHRlcih0aGlzLCBsb2dpY2FsVG9wLCBs
ZWZ0LCBoZWlnaHRSZW1haW5pbmcpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2Vk
RmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgfQogCiAg
ICAgaWYgKGFwcGx5VGV4dEluZGVudCAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpIHsKQEAgLTM1NTMsMjQgKzM1NzAsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dp
Y2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VQogICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zsb2F0aW5nT2JqZWN0cy0+aGFzUmlnaHRPYmpl
Y3RzKCkpIHsKICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWln
aHRSZW1haW5pbmcgPSAxOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIFdlIGtub3cgdGhlIGxp
c3QgaXMgbm9uLWVtcHR5LCBzaW5jZSB3ZSBoYXZlICJyaWdodCIgb2JqZWN0cyB0byBzZWFyY2gg
Zm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2luICE9IGVu
ZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxlYXN0IG9uZQotICAgICAgICAvLyBkZWNyZW1lbnQu
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdp
biA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgZG8gewotICAg
ICAgICAgICAgLS1pdDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAg
ICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxv
Z2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAotICAgICAg
ICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodAotICAg
ICAgICAgICAgICAgICYmIGxvZ2ljYWxMZWZ0Rm9yRmxvYXQocikgPCByaWdodCkgewotICAgICAg
ICAgICAgICAgIHJpZ2h0ID0gbWluKHJpZ2h0LCBsb2dpY2FsTGVmdEZvckZsb2F0KHIpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQotICAgICAgICAgICAgICAgICAgICAq
aGVpZ2h0UmVtYWluaW5nID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpIC0gbG9naWNhbFRvcDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoaXQgIT0gYmVnaW4pOworCisgICAgICAg
IEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0PiBh
ZGFwdGVyKHRoaXMsIGxvZ2ljYWxUb3AsIHJpZ2h0LCBoZWlnaHRSZW1haW5pbmcpOworICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFk
YXB0ZXIoYWRhcHRlcik7CiAgICAgfQogICAgIAogICAgIGlmIChhcHBseVRleHRJbmRlbnQgJiYg
IXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewpAQCAtMzU5NSw3ICszNTk3LDcg
QEAgaW50IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coaW50IGxvZ2lj
YWxIZWlnaHQpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaW50IGJvdHRvbSA9IElO
VF9NQVg7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTM2
MTIsNyArMzYxNCw3IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9t
KEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0VHlwZSkgY29uc3QKICAgICBpZiAoIW1fZmxvYXRp
bmdPYmplY3RzKQogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgbG93ZXN0RmxvYXRCb3R0b20g
PSAwOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0zNjYx
LDYgKzM2NjMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRQb3NpdGlvbmVkRmxvYXRzKCkKICAg
ICAgICAgc2V0TG9naWNhbFRvcEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dpY2FsVG9wRm9y
Q2hpbGQocG9zaXRpb25lZE9iamVjdCkgLSBtYXJnaW5CZWZvcmVGb3JDaGlsZChwb3NpdGlvbmVk
T2JqZWN0KSk7CiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVj
dCwgbG9naWNhbEhlaWdodEZvckNoaWxkKHBvc2l0aW9uZWRPYmplY3QpICsgbWFyZ2luQmVmb3Jl
Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKHBvc2l0aW9u
ZWRPYmplY3QpKTsKICAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKHRydWUpOwor
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0
KTsKICAgICAgICAgCiAgICAgICAgIG1faGFzUG9zaXRpb25lZEZsb2F0cyA9IHRydWU7CiAgICAg
fQpAQCAtMzY4NiwxMCArMzY4OSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhC
bG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwIGZs
b2F0TWFwOwogCiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
KyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewot
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7CisgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBmbG9hdE1h
cC5hZGQoZi0+bV9yZW5kZXJlciwgZik7CiAgICAgICAgICAgICB9CkBAIC0zNzQxLDcgKzM3NDQs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0
UGFzcykKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxUb3AgPSBudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0
czxpbnQ+OjptaW4oKTsKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAg
ICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAg
ICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIGYgPSAqaXQ7CkBAIC0zODIzLDEwICszODI2LDkgQEAgaW50IFJlbmRlckJsb2Nr
OjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGludCBsb2dpY2FsTGVm
dE9mZnNldCwKIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2Jq
ZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMp
Ci0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZs
b2F0aW5nT2JqZWN0cyk7CisgICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0g
YWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7
CiAKLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291
bnQoZmxvYXRpbmdPYmotPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVj
dHMtPnNldCgpLmFkZChmbG9hdGluZ09iaik7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09i
amVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBpZiAobWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91
bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAt
Mzg1Myw3ICszODU1LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdChS
ZW5kZXJCb3gqIHJlbmRlcmVyKQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMgfHwgaGFzQ29s
dW1ucygpIHx8ICFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0g
ZmxvYXRpbmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFu
c2xhdG9yPihyZW5kZXJlcik7CiAgICAgaWYgKGl0ID09IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODY5LDcgKzM4NzEsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2Fs
TGVmdE9mZnNldCwgaQogCiAgICAgbG9naWNhbExlZnRPZmZzZXQgKz0gKGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBtYXJnaW5MZWZ0KCkgOiBtYXJnaW5Ub3AoKSk7CiAKLSAgICBGbG9hdGlu
Z09iamVjdFNldCYgcHJldlNldCA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgcHJldlNldCA9IHByZXYtPm1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIHByZXZFbmQgPSBwcmV2
U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2SXQgPSBw
cmV2U2V0LmJlZ2luKCk7IHByZXZJdCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgewogICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9ICpwcmV2SXQ7CkBAIC0zODk3LDkgKzM4OTksOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dp
Y2FsTGVmdE9mZnNldCwgaQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdl
IGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAg
IGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPmluY3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqLT50eXBl
KCkpOwotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQoZmxvYXRp
bmdPYmopOworICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRy
KG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAg
ICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzk0MCw3ICszOTQxLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZs
b2F0VG9SZW1vdmUKIAogdm9pZCBSZW5kZXJCbG9jazo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0Zv
ckxheW91dCgpCiB7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0g
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBm
bG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0
KCppdCkgPiBsb2dpY2FsSGVpZ2h0KCkpIHsKQEAgLTQwOTIsNyArNDA5Myw3IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlCiAgICAgICAgIGFkanVzdGVkTG9jYXRpb24gKz0gdG9TaXplKHRvUmVu
ZGVyVmlldyh0aGlzKS0+ZnJhbWVWaWV3KCktPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIH0KIAot
ICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RT
ZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CiAgICAgZm9yIChGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7IGl0ICE9IGJl
Z2luOykgewogICAgICAgICAtLWl0OwpAQCAtNTY5OSw3ICs1NzAwLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGludCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQpIGNv
bnN0CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykg
ewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwpAQCAtNjQ0Myw2ICs2NDQ0LDcgQEAgY29uc3Qg
Y2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogaW5saW5lIHZvaWQgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIoKQogewogICAgIG1fc2V0LmNsZWFyKCk7Cisg
ICAgbV9wbGFjZWRGbG9hdHNUcmVlLmNsZWFyKCk7CiAgICAgbV9sZWZ0T2JqZWN0c0NvdW50ID0g
MDsKICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50ID0gMDsKICAgICBtX3Bvc2l0aW9uZWRPYmplY3Rz
Q291bnQgPSAwOwpAQCAtNjQ2OCw2ICs2NDcwLDQ5IEBAIGlubGluZSB2b2lkIFJlbmRlckJsb2Nr
OjpGbG9hdGluZ09iamVjdHM6OmRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpU
CiAgICAgICAgIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudC0tOwogfQogCitpbmxpbmUgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmpl
Y3QpCit7CisgICAgaWYgKG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICByZXR1cm4g
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPnkoKSwg
ZmxvYXRpbmdPYmplY3QtPm1heFkoKSwgZmxvYXRpbmdPYmplY3QpOworICAgIHJldHVybiBSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+eCgpLCBmbG9h
dGluZ09iamVjdC0+bWF4WCgpLCBmbG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0czo6YWRkUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9h
dGluZ09iamVjdCkKK3sKKyAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgJiYg
IWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKyAgICBtX3BsYWNlZEZsb2F0c1Ry
ZWUuYWRkKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgZmxvYXRpbmdPYmplY3QtPnNldElzSW5QbGFjZWRUcmVlKHRydWUpOwor
I2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxh
Y2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBBU1NFUlQo
ZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgJiYgZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRU
cmVlKCkpOworICAgIGJvb2wgcmVtb3ZlZCA9IG1fcGxhY2VkRmxvYXRzVHJlZS5yZW1vdmUoaW50
ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgIEFTU0VSVF9VTlVT
RUQocmVtb3ZlZCwgcmVtb3ZlZCk7CisjaWZuZGVmIE5ERUJVRworICAgIGZsb2F0aW5nT2JqZWN0
LT5zZXRJc0luUGxhY2VkVHJlZShmYWxzZSk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6YWRkKEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09i
amVjdCkKK3sKKyAgICBpbmNyZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlwZSgp
KTsKKyAgICBtX3NldC5hZGQoZmxvYXRpbmdPYmplY3QpOworICAgIGlmIChmbG9hdGluZ09iamVj
dC0+aXNQbGFjZWQoKSkKKyAgICAgICAgYWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsK
K30KKworaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlKEZs
b2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBkZWNyZWFzZU9iamVjdHNDb3Vu
dChmbG9hdGluZ09iamVjdC0+dHlwZSgpKTsKKyAgICBtX3NldC5yZW1vdmUoZmxvYXRpbmdPYmpl
Y3QpOworICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSB8fCAhZmxvYXRpbmdP
YmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFj
ZWQoKSkKKyAgICAgICAgcmVtb3ZlUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKwog
VGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRl
eHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
LCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lv
biwgVGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAgIEFTU0VSVChzdHlsZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDZjZGYyMGEuLjViY2Y1YTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5l
IFJlbmRlckJsb2NrX2gKIAogI2luY2x1ZGUgIkdhcFJlY3RzLmgiCisjaW5jbHVkZSAiUE9ESW50
ZXJ2YWxUcmVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlu
ZUJveExpc3QuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCkBAIC02Nyw2ICs2OCwxMSBA
QCB0eXBlZGVmIHVuc2lnbmVkIFRleHRSdW5GbGFnczsKIGNsYXNzIFJlbmRlckJsb2NrIDogcHVi
bGljIFJlbmRlckJveCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIExpbmVMYXlvdXRTdGF0
ZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gVXNlZCBieSB0aGUgUE9ESW50ZXJ2YWxUcmVlIGZv
ciBkZWJ1Z2dpbmcgdGhlIEZsb2F0aW5nT2JqZWN0LgorICAgIHRlbXBsYXRlIDxjbGFzcz4gZnJp
ZW5kIHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCisKICAgICBSZW5kZXJCbG9jayhOb2Rl
Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyQmxvY2soKTsKIApAQCAtNDIyLDYgKzQyOCw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQoZmFsc2UpCiAgICAgICAgICAgICAs
IG1faXNEZXNjZW5kYW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzUGxhY2VkKGZhbHNlKQor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKKyNl
bmRpZgogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsKICAg
ICAgICAgICAgIGlmICh0eXBlID09IExlZnRGbG9hdCkKQEAgLTQ0MSw2ICs0NTAsOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHR5cGUgIT0gRmxvYXRQb3NpdGlvbmVk
KQogICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKICAgICAgICAgICAgICwgbV9p
c1BsYWNlZCh0cnVlKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2Vk
VHJlZShmYWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDU3LDEzICs0
NjksMTggQEAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZVJlY3Qud2lkdGgoKTsgfQogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KIAotICAgICAgICB2b2lkIHNldFgoaW50IHgpIHsgbV9m
cmFtZVJlY3Quc2V0WCh4KTsgfQotICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgbV9mcmFtZVJl
Y3Quc2V0WSh5KTsgfQotICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX2ZyYW1l
UmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0KLSAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdo
dCkgeyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQorICAgICAgICB2b2lkIHNldFgo
aW50IHgpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4KTsg
fQorICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsg
bV9mcmFtZVJlY3Quc2V0WSh5KTsgfQorICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkg
eyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7
IH0KKyAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBBU1NFUlQoIWlzSW5QbGFj
ZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQogCiAgICAgICAgIGNv
bnN0IEludFJlY3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1
cm4gbV9mcmFtZVJlY3Q7IH0KLSAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVj
dCYgZnJhbWVSZWN0KSB7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9CisgICAgICAgIHZvaWQg
c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkgeyBBU1NFUlQoIWlzSW5QbGFj
ZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorCisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBib29sIGlzSW5QbGFjZWRUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUGxhY2Vk
VHJlZTsgfQorICAgICAgICB2b2lkIHNldElzSW5QbGFjZWRUcmVlKGJvb2wgdmFsdWUpIHsgbV9p
c0luUGxhY2VkVHJlZSA9IHZhbHVlOyB9CisjZW5kaWYKIAogICAgICAgICBSZW5kZXJCb3gqIG1f
cmVuZGVyZXI7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5lOwpAQCAt
NDczLDYgKzQ5MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9zaG91bGRQYWludCA6IDE7
CiAgICAgICAgIGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAxOwogICAgICAgICBib29sIG1faXNQbGFj
ZWQgOiAxOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBtX2lzSW5QbGFjZWRUcmVlIDog
MTsKKyNlbmRpZgogICAgIH07CiAKICAgICBJbnRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9k
ZShjb25zdCBGbG9hdGluZ09iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CkBAIC03OTks
MjggKzgxOSw2NyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxG
bG9hdGluZ09iamVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4gRmxvYXRpbmdP
YmplY3RTZXQ7CiAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0b3Ig
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKKyAgICB0eXBlZGVmIFBPREludGVydmFsPExheW91
dFVuaXQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKKyAgICB0eXBl
ZGVmIFBPREludGVydmFsVHJlZTxMYXlvdXRVbml0LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5n
T2JqZWN0VHJlZTsKKyAgICAKKyAgICB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxv
YXRUeXBlVmFsdWU+CisgICAgY2xhc3MgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgeworICAg
IHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdEludGVydmFsIEludGVydmFs
VHlwZTsKKyAgICAgICAgCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyKGNvbnN0
IFJlbmRlckJsb2NrKiByZW5kZXJlciwgTGF5b3V0VW5pdCB2YWx1ZSwgTGF5b3V0VW5pdCYgb2Zm
c2V0LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1haW5pbmcpCisgICAgICAgICAgICA6IG1fcmVuZGVy
ZXIocmVuZGVyZXIpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgICAgICAs
IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgbV9oZWlnaHRSZW1haW5pbmcoaGVpZ2h0
UmVtYWluaW5nKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlubGlu
ZSBMYXlvdXRVbml0IGxvd1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAg
ICBpbmxpbmUgTGF5b3V0VW5pdCBoaWdoVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9
CisgICAgICAgIHZvaWQgY29sbGVjdElmTmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYpIGNvbnN0
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1fcmVuZGVyZXI7
CisgICAgICAgIExheW91dFVuaXQgbV92YWx1ZTsKKyAgICAgICAgTGF5b3V0VW5pdCYgbV9vZmZz
ZXQ7CisgICAgICAgIExheW91dFVuaXQqIG1faGVpZ2h0UmVtYWluaW5nOworICAgIH07CisKICAg
ICBjbGFzcyBGbG9hdGluZ09iamVjdHMgewogICAgIHB1YmxpYzoKLSAgICAgICAgRmxvYXRpbmdP
YmplY3RzKCkKKyAgICAgICAgRmxvYXRpbmdPYmplY3RzKGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdN
b2RlKQogICAgICAgICAgICAgOiBtX2xlZnRPYmplY3RzQ291bnQoMCkKICAgICAgICAgICAgICwg
bV9yaWdodE9iamVjdHNDb3VudCgwKQogICAgICAgICAgICAgLCBtX3Bvc2l0aW9uZWRPYmplY3Rz
Q291bnQoMCkKKyAgICAgICAgICAgICwgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUoaG9yaXpvbnRh
bFdyaXRpbmdNb2RlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFy
KCk7Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5
cGUpOwotICAgICAgICB2b2lkIGRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpU
eXBlKTsKKyAgICAgICAgdm9pZCBhZGQoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCBy
ZW1vdmUoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCBhZGRQbGFjZWRPYmplY3QoRmxv
YXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCByZW1vdmVQbGFjZWRPYmplY3QoRmxvYXRpbmdP
YmplY3QqKTsKKyAgICAgICAgdm9pZCBzZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoYm9vbCBiID0g
dHJ1ZSkgeyBtX2hvcml6b250YWxXcml0aW5nTW9kZSA9IGI7IH0KKwogICAgICAgICBib29sIGhh
c0xlZnRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0T2JqZWN0c0NvdW50ID4gMDsgfQog
ICAgICAgICBib29sIGhhc1JpZ2h0T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRPYmpl
Y3RzQ291bnQgPiAwOyB9CiAgICAgICAgIGJvb2wgaGFzUG9zaXRpb25lZE9iamVjdHMoKSBjb25z
dCB7IHJldHVybiBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQgPiAwOyB9Ci0gICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0JiBzZXQoKSB7IHJldHVybiBtX3NldDsgfQorICAgICAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICAgICAgY29u
c3QgRmxvYXRpbmdPYmplY3RUcmVlJiBwbGFjZWRGbG9hdHNUcmVlKCkgY29uc3QgeyByZXR1cm4g
bV9wbGFjZWRGbG9hdHNUcmVlOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGluY3Jl
YXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgdm9pZCBkZWNy
ZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0SW50ZXJ2YWwgaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChGbG9hdGluZ09iamVjdCop
OworCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0IG1fc2V0OworICAgICAgICBGbG9hdGluZ09i
amVjdFRyZWUgbV9wbGFjZWRGbG9hdHNUcmVlOwogICAgICAgICB1bnNpZ25lZCBtX2xlZnRPYmpl
Y3RzQ291bnQ7CiAgICAgICAgIHVuc2lnbmVkIG1fcmlnaHRPYmplY3RzQ291bnQ7CiAgICAgICAg
IHVuc2lnbmVkIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudDsKKyAgICAgICAgYm9vbCBtX2hvcml6
b250YWxXcml0aW5nTW9kZTsKICAgICB9OwogICAgIE93blB0cjxGbG9hdGluZ09iamVjdHM+IG1f
ZmxvYXRpbmdPYmplY3RzOwogICAgIApAQCAtODk1LDYgKzk1NCwxNiBAQCBpbmxpbmUgY29uc3Qg
UmVuZGVyQmxvY2sqIHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAv
LyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lk
IHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqKTsKIAorI2lmbmRlZiBOREVCVUcKKy8v
IFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dp
bmcgcHVycG9zZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxpbnQ+IHsKKyAg
ICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBpbnQgdmFsdWUpOworfTsKK3RlbXBsYXRlPD4g
c3RydWN0IFZhbHVlVG9TdHJpbmc8UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kj4geworICAg
IHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCop
OworfTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZW5k
ZXJCbG9ja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCmluZGV4IDVkYzI3YzYuLjU1MDk2MzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTA5MSw3ICsx
MDkxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGlu
ZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICAgICAgICAgfQogCiAgICAgICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0Um9vdEJveCgpKSB7Ci0gICAgICAgICAgICBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RT
ZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7
CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsKQEAgLTExNzIsNyAr
MTE3Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94
LT5zZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
ICAgICAgICAgaWYgKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKSB7CkBAIC0xNDkxLDcgKzE0OTEs
NyBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlLCBjb25zdCBJbmxpbmVCaWRpUgogCiAgICAgICAgIGludCBsb2dpY2FsQm90dG9t
ID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAg
ICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVj
dFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgZm9yIChG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsK
QEAgLTE1MjgsNyArMTUyOCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAKICAgICAgICAg
ICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxhc3RMaW5lLT5ibG9ja0xvZ2ljYWxIZWlnaHQo
KSArIGFicyhkZWx0YSk7CiAKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yIChG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
ID0gKml0OwpAQCAtMjU1MCw3ICsyNTUwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25O
ZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWMKICAg
ICBpZiAoIW5ld0Zsb2F0LT5tX3BhZ2luYXRpb25TdHJ1dCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2Jq
ZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEFTU0VSVChmbG9hdGluZ09i
amVjdFNldC5sYXN0KCkgPT0gbmV3RmxvYXQpOwogCiAgICAgaW50IGZsb2F0TG9naWNhbFRvcCA9
IGxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCk7CkBAIC0yNTc1LDcgKzI1NzUsOSBAQCBib29s
IFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdG
bG9hdCwgRmxvYXRpbmdPYmplYwogICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyQmxvY2soKSkK
ICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKG8pLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRy
dWUsIGZhbHNlKTsKICAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlUGxhY2VkT2JqZWN0KGYpOwogICAgICAgICAgICAg
c2V0TG9naWNhbFRvcEZvckZsb2F0KGYsIGxvZ2ljYWxUb3BGb3JGbG9hdChmKSArIGYtPm1fcGFn
aW5hdGlvblN0cnV0KTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRP
YmplY3QoZik7CiAgICAgICAgIH0KICAgICB9CiAK
</data>
<flag name="review"
          id="98555"
          type_id="1"
          status="-"
          setter="hyatt"
    />
    <flag name="commit-queue"
          id="98556"
          type_id="3"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103242</attachid>
            <date>2011-08-08 07:26:41 -0700</date>
            <delta_ts>2011-08-08 08:01:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65668_4.patch</filename>
            <type>text/plain</type>
            <size>52448</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMWFjZjRlMS4uZmM3YmZhMSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMS0wOC0wOCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9i
ZS5jb20+CisKKyAgICAgICAgT3B0aW1pemUgZmxvYXRpbmcgZWxlbWVudHMgbG9va3VwCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0L2Zsb2F0
cy5odG1sOiBBZGRlZCB0aGUgbmVzdGVkIGRpdnMsIHNvIHRoYXQgd2UgY2FuIHRlc3QgdGhlIHBy
b3BhZ2F0aW9uIGltcGFjdCBvZiB0aGUgZmxvYXRzIHRyZWUuCisKIDIwMTEtMDgtMDQgIEFsZXhh
bmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgogCiAgICAgICAgIEFkZCBhIHBlcmZv
cm1hbmNlIHRlc3QgZm9yIGZsb2F0aW5nIGVsZW1lbnRzIGxheW91dCBhbGdvcml0aG0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvTGF5b3V0L2Zsb2F0cy5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKaW5kZXggNjc4MDVkOC4uNTJmOTViYSAxMDA2NDQKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKQEAgLTMwLDEyICszMCwxNyBAQAogICAgICAgICAgICAg
ICAgIHJldHVybiBlbDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gY3Jl
YXRlU2V0KHdpZHRoLCBoZWlnaHQpCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVTZXQod2lk
dGgsIGhlaWdodCwgbmVzdGVkKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZhciBj
b250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBkb2N1bWVudC5ib2R5LCAiY29udGFpbmVy
Iik7CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyArK3gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCJkaXYiLCBjb250YWluZXIsICJmbG9h
dCIsICJmbG9hdCIgKyB4ICsgIl8iICsgeSk7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5l
c3RlZENvbnRhaW5lciA9IGNvbnRhaW5lcjsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggOyBu
ZXN0ZWQgPiAwOyAtLW5lc3RlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZENvbnRh
aW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIG5lc3RlZENvbnRhaW5lciwgIm5lc3RlZCIsICJu
ZXN0ZWQiICsgeCArICJfIiArIG5lc3RlZCk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCJkaXYiLCBjb250YWluZXIsICJmbG9hdC1lbmQi
LCAiZW5kIiArIHgpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDcsMTIg
KzUyLDE0IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjE7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3Qod2lkdGgsIGhlaWdodCkgCisgICAgICAgICAgICBm
dW5jdGlvbiB0ZXN0KHdpZHRoLCBoZWlnaHQsIG5lc3RlZCkgCiAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbmVzdGVkID0gbmVzdGVkIHx8IDA7CisKICAgICAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdF9wYW5lbCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lcmF0ZV9wYW5l
bCIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogCi0gICAgICAgICAgICAgICAgY3JlYXRlU2V0
KHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIGNyZWF0ZVNldCh3aWR0aCwgaGVpZ2h0
LCBuZXN0ZWQpOwogICAgICAgICAgICAgICAgIHZhciB1cGRhdGVzID0gMDsKICAgICAgICAgICAg
ICAgICB2YXIgc3RhcnRUaW1lID0gbmV3IERhdGUoKTsKIApAQCAtOTEsNiArOTgsMTEgQEAKICAg
ICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgyMCwgMTAwKSI+MjAgYnkgMTAwPC9idXR0
b24+CiAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InRlc3QoNTAsIDEwMCkiPjUwIGJ5IDEw
MDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDEwMCwgMTAwKSI+
MTAwIGJ5IDEwMDwvYnV0dG9uPgorICAgICAgICAgICAgPHA+TmVzdGVkIGRpdnM6PC9wPgorICAg
ICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDIsIDEwMCwgMTAwKSI+MiBieSAxMDAsIDEw
MCBuZXN0ZWQ8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgyMCwg
MTAwLCAxMDApIj4yMCBieSAxMDAsIDEwMCBuZXN0ZWQ8L2J1dHRvbj4KKyAgICAgICAgICAgIDxi
dXR0b24gb25jbGljaz0idGVzdCg1MCwgMTAwLCAxMDApIj41MCBieSAxMDAsIDEwMCBuZXN0ZWQ8
L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgxMDAsIDEwMCwgMTAw
KSI+MTAwIGJ5IDEwMCwgMTAwIG5lc3RlZDwvYnV0dG9uPgogICAgICAgICA8L2Rpdj4KICAgICA8
L2JvZHk+CiA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGEyZGNjYWEuLmRlNjlmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wOC0w
OCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5jb20+CisKKyAgICAgICAgT3B0
aW1pemUgZmxvYXRpbmcgZWxlbWVudHMgbG9va3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2OAorCisgICAgICAgIEFkZGVkIGFuIGludGVydmFs
IHRyZWUgaW4gdGhlIEZsb2F0aW5nT2JqZWN0cyBzdHJ1Y3R1cmUuIEFsc28gYWRkZWQgbmV3IG1l
Y2hhbmlzbXMgdG8gbWFrZQorICAgICAgICBzdXJlIHRoZSB0cmVlIGlzIHVwZGF0ZWQgY29ycmVj
dGx5IHdoZW4gYSBmbG9hdCBpcyByZXBvc2l0aW9uZWQuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUg
UE9ESW50ZXJ2YWxUcmVlIHRvIHN1cHBvcnQgZ2l2aW5nIGEgc2VhcmNoIGFkYXB0ZXIgdGhhdCBj
YW4gYmUgaW1wbGVtZW50ZWQgYnkgdGhlCisgICAgICAgIGNsaWVudC4gSSdtIG5vdCBhZGRpbmcg
YSBkaWZmZXJlbnQgYnVnIGZvciB0aGF0IGJlY2F1c2UgUE9ESW50ZXJ2YWxUcmVlIGlzIG5vdCB1
c2VkIGFueXdoZXJlIGVsc2UKKyAgICAgICAgYW5kIHdvdWxkIGJlIGhhcmQgdG8gdGVzdCB0aGF0
IHRoZSBjaGFuZ2UgaXMgbm90IGJyZWFraW5nIGFueXRoaW5nLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFj
dG9yIG9uIHRoZSBmbG9hdGluZyBvYmplY3RzIGRhdGEgc3RydWN0dXJlLgorCisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL1BP
REludGVydmFsVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFw
dGVyOjpQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50
ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFNlYXJjaEFkYXB0ZXI6OmhpZ2hWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFNlYXJjaEFkYXB0ZXI6OmNvbGxlY3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
T0RJbnRlcnZhbFRyZWU6OlBPREludGVydmFsVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJ
bnRlcnZhbFRyZWU6OmFsbE92ZXJsYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFs
VHJlZTo6YWxsT3ZlcmxhcHNXaXRoQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFRyZWU6OnNlYXJjaEZvck92ZXJsYXBzRnJvbSk6CisgICAgICAgICogcGxhdGZvcm0vUE9E
UmVkQmxhY2tUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OlBPRFJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6aXNJbml0aWFsaXplZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmluaXRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRC
bGFja1RyZWU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNv
bnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6dmlzaXRJbm9yZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNoZWNrSW52YXJpYW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpQT0RSZWRCbGFja1RyZWU6OmR1bXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6Ojpj
b2xsZWN0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bmV4
dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFu
Z2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3Zlcmhhbmdp
bmdGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxv
YXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Rmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2
YWxGb3JGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0c1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6OjpzdHJpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3Q6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdDo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0Ojppc0luUGxhY2VkVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldElzSW5QbGFjZWRUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcjo6RmxvYXRJ
bnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6OmhpZ2hWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6c2V0
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdHM6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjpwbGFjZWRGbG9hdHNUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlSWZOZWVkZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKToKKwogMjAxMS0wOC0w
OCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFRoZSBp
bnB1dFt0eXBlPW51bWJlcl0gZWxlbWVudCBzaG91bGQgYmUgYXMgd2lkZSBhcyBuZWNlc3Nhcnkg
dG8gc2hvdyB0aGUgd2lkZXN0IHBvc3NpYmxlIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIxN2QwY2YuLmQ3MGIwYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTEzMzYsNiArMTMzNiwxMCBAQAogCQk1MDFCQUFBOTEzOTUwRTJDMDBGN0FDRUIgLyog
V2luZFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUwMUJBQUE4MTM5NTBFMkMwMEY3QUNFQiAvKiBXaW5kUnVsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwOENDQTRGMTNDRjEwNkIwMDMxNTFG
MyAvKiBSZW5kZXJGbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MDhDQ0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5oICovOyB9OwogCQk1MDhDQ0E1MDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDhD
Q0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgKi87IH07CisJCTUw
OTdDNUEzMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBP
REFyZW5hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTA5N0M1QTQxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDk3QzVBMDEzRUFCQTdFMDAyREU0
QUYgLyogUE9ESW50ZXJ2YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1MDk3QzVBNTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDk3QzVB
MTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTA5N0M1QTYxM0VBQkE3RTAwMkRFNEFG
IC8qIFBPRFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTA5N0M1QTIxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwRTU2
NkQ2MTM5RTM4QzUwMDIxNDQzMyAvKiBDU1NXcmFwU2hhcGVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwMUJBQUIxMTM5NTExNEIwMEY3QUNFQiAv
KiBDU1NXcmFwU2hhcGVzLmNwcCAqLzsgfTsKIAkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8q
IENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwMTg0NkEwQjA4NjAyQTAw
NEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3Bw
ICovOyB9OwpAQCAtNzkzNSw2ICs3OTM5LDEwIEBACiAJCTUwMUJBQUIxMTM5NTExNEIwMEY3QUNF
QiAvKiBDU1NXcmFwU2hhcGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1dyYXBTaGFwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MDhD
Q0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJGbG93VGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUwOENDQTRFMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZsb3dUaHJl
YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzU5RjEzRUFCQTdFMDAy
REU0QUYgLyogUE9EQXJlbmEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9E
QXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1QTAxM0VBQkE3RTAw
MkRFNEFGIC8qIFBPREludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBPREludGVydmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwOTdDNUExMTNF
QUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUE9ESW50ZXJ2YWxUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUwOTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9EUmVkQmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFBhZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hl
ZFBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUGFn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJEMTAzMTY1RUUwMDQ5
RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5MDA0LDYgKzE5MDEyLDEwIEBACiAJCUJDRjFBNUJBMDk3ODMyMDkw
MDYxQTEyMyAvKiBwbGF0Zm9ybSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREFyZW5hLmggKi8sCisJ
CQkJNTA5N0M1QTAxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggKi8sCisJCQkJNTA5
N0M1QTExM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oICovLAorCQkJCTUwOTdD
NUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLywKIAkJCQk0OUU5MTJB
NDBFRkFDOEU2MDA5RDBDQUYgLyogYW5pbWF0aW9uICovLAogCQkJCUZEMzE2MDQwMTJCMDI2QTMw
MEMxQTM1OSAvKiBhdWRpbyAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYxMkQgLyogY2Yg
Ki8sCkBAIC0yMzM0Nyw2ICsyMzM1OSwxMCBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1
OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRTBGMTJGMEZD
OUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUzNzM1MzEz
N0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUwOTdDNUEz
MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTA5N0M1
QTQxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MDk3QzVBNTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MDk3QzVBNjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVy
dmFsVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2YWxUcmVlLmgKaW5k
ZXggNWJmM2RlMC4uOTYyMzNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UE9ESW50ZXJ2YWxUcmVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2
YWxUcmVlLmgKQEAgLTQwLDYgKzQwLDMyIEBAIHRlbXBsYXRlPGNsYXNzIFQ+CiBzdHJ1Y3QgVmFs
dWVUb1N0cmluZzsKICNlbmRpZgogCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVXNlckRhdGEg
PSB2b2lkKj4KK2NsYXNzIFBPREludGVydmFsU2VhcmNoQWRhcHRlciB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBlOworICAgIAorICAg
IFBPREludGVydmFsU2VhcmNoQWRhcHRlcihWZWN0b3I8SW50ZXJ2YWxUeXBlPiYgcmVzdWx0LCBj
b25zdCBUJiBsb3dWYWx1ZSwgY29uc3QgVCYgaGlnaFZhbHVlKQorICAgICAgICA6IG1fcmVzdWx0
KHJlc3VsdCkKKyAgICAgICAgLCBtX2xvd1ZhbHVlKGxvd1ZhbHVlKQorICAgICAgICAsIG1faGln
aFZhbHVlKGhpZ2hWYWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIGxvd1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dWYWx1ZTsgfQorICAgIGNvbnN0IFQmIGhpZ2hWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaFZhbHVlOyB9CisgICAgdm9pZCBjb2xsZWN0SWZOZWVk
ZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBkYXRhKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGRh
dGEub3ZlcmxhcHMobV9sb3dWYWx1ZSwgbV9oaWdoVmFsdWUpKQorICAgICAgICAgICAgbV9yZXN1
bHQuYXBwZW5kKGRhdGEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8SW50ZXJ2YWxU
eXBlPiYgbV9yZXN1bHQ7CisgICAgVCBtX2xvd1ZhbHVlOworICAgIFQgbV9oaWdoVmFsdWU7Cit9
OworCiAvLyBBbiBpbnRlcnZhbCB0cmVlLCB3aGljaCBpcyBhIGZvcm0gb2YgYXVnbWVudGVkIHJl
ZC1ibGFjayB0cmVlLiBJdAogLy8gc3VwcG9ydHMgZWZmaWNpZW50IChPKGxnIG4pKSBpbnNlcnRp
b24sIHJlbW92YWwgYW5kIHF1ZXJ5aW5nIG9mCiAvLyBpbnRlcnZhbHMgaW4gdGhlIHRyZWUuCkBA
IC01MCw3ICs3NiwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVHlwZWRlZiB0byByZWR1Y2UgdHlwaW5n
IHdoZW4gZGVjbGFyaW5nIGludGVydmFscyB0byBiZSBzdG9yZWQgaW4KICAgICAvLyB0aGlzIHRy
ZWUuCiAgICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBlOwor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyPFQsIFVzZXJEYXRhPiBJbnRlcnZh
bFNlYXJjaEFkYXB0ZXJUeXBlOwogCisgICAgUE9ESW50ZXJ2YWxUcmVlKFVuaW5pdGlhbGl6ZWRU
cmVlRW51bSB1bml0aWFsaXplZFRyZWUpCisgICAgICAgIDogUE9EUmVkQmxhY2tUcmVlPEludGVy
dmFsVHlwZT4odW5pdGlhbGl6ZWRUcmVlKQorICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0K
KyAgICAKICAgICBQT0RJbnRlcnZhbFRyZWUoKQogICAgICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJ
bnRlcnZhbFR5cGU+KCkKICAgICB7CkBAIC04MCw3ICsxMTMsMTYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgLy8gRXhwbGljaXQgZGVyZWZlcmVuY2Ugb2YgInRoaXMiIHJlcXVpcmVkIGJlY2F1
c2Ugb2YKICAgICAgICAgLy8gaW5oZXJpdGFuY2UgcnVsZXMgaW4gdGVtcGxhdGUgY2xhc3Nlcy4K
LSAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKHRoaXMtPnJvb3QoKSwgaW50ZXJ2YWwsIHJl
c3VsdCk7CisgICAgICAgIEludGVydmFsU2VhcmNoQWRhcHRlclR5cGUgYWRhcHRlcihyZXN1bHQs
IGludGVydmFsLmxvdygpLCBpbnRlcnZhbC5oaWdoKCkpOworICAgICAgICBzZWFyY2hGb3JPdmVy
bGFwc0Zyb208SW50ZXJ2YWxTZWFyY2hBZGFwdGVyVHlwZT4odGhpcy0+cm9vdCgpLCBhZGFwdGVy
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEFkYXB0ZXJUeXBlPgorICAgIHZv
aWQgYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihBZGFwdGVyVHlwZSYgYWRhcHRlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIEV4cGxpY2l0IGRlcmVmZXJlbmNlIG9mICJ0aGlzIiByZXF1aXJlZCBi
ZWNhdXNlIG9mCisgICAgICAgIC8vIGluaGVyaXRhbmNlIHJ1bGVzIGluIHRlbXBsYXRlIGNsYXNz
ZXMuCisgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4odGhpcy0+cm9v
dCgpLCBhZGFwdGVyKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgdG8gY3JlYXRlIGludGVydmFs
IG9iamVjdHMuCkBAIC0xMTIsNyArMTU0LDggQEAgcHJpdmF0ZToKICAgICAvLyBTdGFydGluZyBm
cm9tIHRoZSBnaXZlbiBub2RlLCBhZGRzIGFsbCBvdmVybGFwcyB3aXRoIHRoZSBnaXZlbgogICAg
IC8vIGludGVydmFsIHRvIHRoZSByZXN1bHQgdmVjdG9yLiBUaGUgaW50ZXJ2YWxzIGFyZSBzb3J0
ZWQgYnkKICAgICAvLyBpbmNyZWFzaW5nIGxvdyBlbmRwb2ludC4KLSAgICB2b2lkIHNlYXJjaEZv
ck92ZXJsYXBzRnJvbShJbnRlcnZhbE5vZGUqIG5vZGUsIGNvbnN0IEludGVydmFsVHlwZSYgaW50
ZXJ2YWwsIFZlY3RvcjxJbnRlcnZhbFR5cGU+JiByZXMpIGNvbnN0CisgICAgdGVtcGxhdGUgPGNs
YXNzIEFkYXB0ZXJUeXBlPgorICAgIHZvaWQgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKEludGVydmFs
Tm9kZSogbm9kZSwgQWRhcHRlclR5cGUmIGFkYXB0ZXIpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjUsMTggKzE2OCwxNyBAQCBwcml2
YXRlOgogICAgICAgICBpZiAobGVmdAogICAgICAgICAgICAgLy8gVGhpcyBpcyBwaHJhc2VkIHRo
aXMgd2F5IHRvIGF2b2lkIHRoZSBuZWVkIGZvciBvcGVyYXRvcgogICAgICAgICAgICAgLy8gPD0g
b24gdHlwZSBULgotICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4SGlnaCgpIDwgaW50
ZXJ2YWwubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKGxlZnQsIGlu
dGVydmFsLCByZXMpOworICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4SGlnaCgpIDwg
YWRhcHRlci5sb3dWYWx1ZSgpKSkKKyAgICAgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxB
ZGFwdGVyVHlwZT4obGVmdCwgYWRhcHRlcik7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJs
YXAgd2l0aCBjdXJyZW50IG5vZGUuCi0gICAgICAgIGlmIChub2RlLT5kYXRhKCkub3ZlcmxhcHMo
aW50ZXJ2YWwpKQotICAgICAgICAgICAgcmVzLmFwcGVuZChub2RlLT5kYXRhKCkpOworICAgICAg
ICBhZGFwdGVyLmNvbGxlY3RJZk5lZWRlZChub2RlLT5kYXRhKCkpOwogCiAgICAgICAgIC8vIFNl
ZSB3aGV0aGVyIHdlIG5lZWQgdG8gdHJhdmVyc2UgdGhlIHJpZ2h0IHN1YnRyZWUuCiAgICAgICAg
IC8vIFRoaXMgaXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVlZCBmb3Igb3BlcmF0
b3IgPD0KICAgICAgICAgLy8gb24gdHlwZSBULgotICAgICAgICBpZiAoIShpbnRlcnZhbC5oaWdo
KCkgPCBub2RlLT5kYXRhKCkubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNG
cm9tKG5vZGUtPnJpZ2h0KCksIGludGVydmFsLCByZXMpOworICAgICAgICBpZiAoIShhZGFwdGVy
LmhpZ2hWYWx1ZSgpIDwgbm9kZS0+ZGF0YSgpLmxvdygpKSkKKyAgICAgICAgICAgIHNlYXJjaEZv
ck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4obm9kZS0+cmlnaHQoKSwgYWRhcHRlcik7CiAgICAg
fQogCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxOb2RlKiBub2RlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAppbmRleCA3ZGQ5ZGRkLi5iYjE2
YzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaApAQCAtOTAs
NiArOTAsMTAgQEAgdGVtcGxhdGU8Y2xhc3MgVD4KIHN0cnVjdCBWYWx1ZVRvU3RyaW5nOwogI2Vu
ZGlmCiAKK2VudW0gVW5pbml0aWFsaXplZFRyZWVFbnVtIHsKKyAgICBVbmluaXRpYWxpemVkVHJl
ZQorfTsKKwogdGVtcGxhdGU8Y2xhc3MgVD4KIGNsYXNzIFBPRFJlZEJsYWNrVHJlZSB7CiBwdWJs
aWM6CkBAIC0xMDEsNiArMTA1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+VmlzaXRv
cigpIHsgfQogICAgIH07CiAKKyAgICAvLyBDb25zdHJ1Y3RzIGEgbmV3IHJlZC1ibGFjayB0cmVl
IHdpdGhvdXQgYWxsb2NhdGluZyBhbiBhcmVuYS4KKyAgICAvLyBpc0luaXRpYWxpemVkIHdpbGwg
cmV0dXJuIGZhbHNlIGluIHRoaXMgY2FzZS4gaW5pdElmTmVlZGVkIGNhbiBiZSB1c2VkCisgICAg
Ly8gdG8gaW5pdCB0aGUgc3RydWN0dXJlLiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWZ1bGwgZm9y
IGNyZWF0aW5nCisgICAgLy8gbGF6eSBpbml0aWFsaXplZCB0cmVlLgorICAgIFBPRFJlZEJsYWNr
VHJlZShVbmluaXRpYWxpemVkVHJlZUVudW0pCisgICAgICAgIDogbV9yb290KDApCisgICAgICAg
ICwgbV9uZWVkc0Z1bGxPcmRlcmluZ0NvbXBhcmlzb25zKGZhbHNlKQorI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgLCBtX3ZlcmJvc2VEZWJ1Z2dpbmcoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAg
fQorCiAgICAgLy8gQ29uc3RydWN0cyBhIG5ldyByZWQtYmxhY2sgdHJlZSwgYWxsb2NhdGluZyB0
ZW1wb3Jhcnkgb2JqZWN0cwogICAgIC8vIGZyb20gYSBuZXdseSBjb25zdHJ1Y3RlZCBQT0RBcmVu
YS4KICAgICBQT0RSZWRCbGFja1RyZWUoKQpAQCAtMTI3LDggKzE0NCwyOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIH5QT0RSZWRCbGFja1RyZWUoKSB7IH0KIAorICAgIC8vIENsZWFyaW5nIHdp
bGwgZGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdHJlZS4gQWZ0ZXIgdGhpcyBjYWxsCisgICAg
Ly8gaXNJbml0aWFsaXplZCB3aWxsIHJldHVybiBmYWxzZS4KKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIG1fYXJlbmEgPSAwOworICAgICAgICBtX3Jvb3QgPSAwOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Fy
ZW5hOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRJZk5lZWRlZCgpCisgICAgeworICAgICAg
ICBpZiAoIW1fYXJlbmEpCisgICAgICAgICAgICBtX2FyZW5hID0gUE9EQXJlbmE6OmNyZWF0ZSgp
OworICAgIH0KKwogICAgIHZvaWQgYWRkKGNvbnN0IFQmIGRhdGEpCiAgICAgeworICAgICAgICBB
U1NFUlQoaXNJbml0aWFsaXplZCgpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYXJlbmEtPmFs
bG9jYXRlT2JqZWN0PE5vZGUsIFQ+KGRhdGEpOwogICAgICAgICBpbnNlcnROb2RlKG5vZGUpOwog
ICAgIH0KQEAgLTEzNiw2ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBkYXR1bSB3YXMgZm91bmQgaW4gdGhlIHRyZWUuCiAgICAgYm9vbCByZW1vdmUoY29uc3Qg
VCYgZGF0YSkKICAgICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAg
ICBOb2RlKiBub2RlID0gdHJlZVNlYXJjaChkYXRhKTsKICAgICAgICAgaWYgKG5vZGUpIHsKICAg
ICAgICAgICAgIGRlbGV0ZU5vZGUobm9kZSk7CkBAIC0xNDQsMTAgKzE4MiwxNSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0
IFQmIGRhdGEpIGNvbnN0IHsgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7IH0KKyAgICBib29sIGNv
bnRhaW5zKGNvbnN0IFQmIGRhdGEpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbml0
aWFsaXplZCgpKTsKKyAgICAgICAgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7CisgICAgfQogCiAg
ICAgdm9pZCB2aXNpdElub3JkZXIoVmlzaXRvciogdmlzaXRvcikgY29uc3QKICAgICB7CisgICAg
ICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBpZiAoIW1fcm9vdCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgdmlzaXRJbm9yZGVySW1wbChtX3Jvb3QsIHZpc2l0b3Ip
OwpAQCAtMTU1LDYgKzE5OCw3IEBAIHB1YmxpYzoKIAogICAgIGludCBzaXplKCkgY29uc3QKICAg
ICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBDb3VudGVyIGNv
dW50ZXI7CiAgICAgICAgIHZpc2l0SW5vcmRlcigmY291bnRlcik7CiAgICAgICAgIHJldHVybiBj
b3VudGVyLmNvdW50KCk7CkBAIC0xNjgsNiArMjEyLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGNoZWNrSW52YXJpYW50cygpIGNvbnN0CiAgICAgeworICAgICAgICBBU1NFUlQoaXNJ
bml0aWFsaXplZCgpKTsKICAgICAgICAgaW50IGJsYWNrQ291bnQ7CiAgICAgICAgIHJldHVybiBj
aGVja0ludmFyaWFudHNGcm9tTm9kZShtX3Jvb3QsICZibGFja0NvdW50KTsKICAgICB9CkBAIC0x
NzcsNyArMjIyLDggQEAgcHVibGljOgogICAgIC8vIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICAgICB2
b2lkIGR1bXAoKSBjb25zdAogICAgIHsKLSAgICAgICAgZHVtcEZyb21Ob2RlKG1fcm9vdCwgMCk7
CisgICAgICAgIGlmIChtX2FyZW5hKQorICAgICAgICAgICAgZHVtcEZyb21Ob2RlKG1fcm9vdCwg
MCk7CiAgICAgfQogCiAgICAgLy8gVHVybnMgb24gb3Igb2ZmIHZlcmJvc2UgZGVidWdnaW5nIG9m
IHRoZSB0cmVlLCBjYXVzaW5nIG1hbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCmluZGV4IDI2MzJkZDUuLjQ2MmJlYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcApAQCAtMjc0LDcgKzI3NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5CiAgICAgYm9vbCBjYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nID0gIWlzRmxvYXRpbmdP
clBvc2l0aW9uZWQoKSAmJiAhYXZvaWRzRmxvYXRzKCk7CiAgICAgaWYgKGRpZmYgPT0gU3R5bGVE
aWZmZXJlbmNlTGF5b3V0ICYmIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAmJiAhY2Fu
UHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAmJiBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygpKSB7CiAg
ICAgICAgIFJlbmRlckJsb2NrKiBwYXJlbnRCbG9jayA9IHRoaXM7Ci0gICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
KyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCiAgICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjdXJyID0gcGFyZW50KCk7IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmlldygpOyBjdXJy
ID0gY3Vyci0+cGFyZW50KCkpIHsKQEAgLTE0MzYsNyArMTQzNiw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cygpCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwog
ICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9
ICppdDsKQEAgLTIyOTQsNyArMjI5NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVy
aGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpCiAgICAgLy8gRklYTUU6IEF2
b2lkIGRpc2FibGluZyBMYXlvdXRTdGF0ZS4gQXQgdGhlIHZlcnkgbGVhc3QsIGRvbid0IGRpc2Fi
bGUgaXQgZm9yIGZsb2F0cyBvcmlnaW5hdGluZwogICAgIC8vIGluIHRoaXMgYmxvY2suIEJldHRl
ciB5ZXQgd291bGQgYmUgdG8gcHVzaCBleHRyYSBzdGF0ZSBmb3IgdGhlIGNvbnRhaW5lcnMgb2Yg
b3RoZXIgZmxvYXRzLgogICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxl
cih2aWV3KCkpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBA
IC0yNjI3LDcgKzI2MjcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEZsb2F0cyhQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGlmICghbV9m
bG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25z
dCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0yODc5LDcgKzI4NzksNyBAQCBHYXBSZWN0cyBSZW5k
ZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlv
dXRQb2ludCYgcgogICAgICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5n
QmxvY2soKTsgY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKTsgY2IgPSBjYi0+Y29udGFpbmluZ0Js
b2NrKCkpCiAgICAgICAgICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5m
bywgSW50UG9pbnQoY2ItPngoKSwgY2ItPnkoKSksIGNiLT5tX3Bvc2l0aW9uZWRPYmplY3RzLmdl
dCgpKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3IgZmxpcHBlZCB3cml0aW5nIG1vZGVzLgogICAg
ICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAg
ICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsK
QEAgLTMxOTAsMTAgKzMxOTAsMTAgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5k
ZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogCiAgICAgLy8gQ3Jl
YXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBv
bmUKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMpOworICAgICAgICBtX2Zsb2F0aW5nT2Jq
ZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIG9iamVjdCBh
Z2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5z
bGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpCiAg
ICAgICAgICAgICByZXR1cm4gKml0OwpAQCAtMzIyNCw4ICszMjI0LDcgQEAgUmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVy
Qm94KiBvKQogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5ld09iai0+
bV9yZW5kZXJlciA9IG87CiAKLSAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3Rz
Q291bnQobmV3T2JqLT50eXBlKCkpOwotICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQo
bmV3T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG5ld09iaik7CiAgICAgCiAgICAg
cmV0dXJuIG5ld09iajsKIH0KQEAgLTMyMzMsOCArMzIzMiw4IEBAIFJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCog
bykKIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykK
IHsKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAg
ICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5k
PFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOworICAgICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0
b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpIHsKICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgaWYgKGNoaWxk
cmVuSW5saW5lKCkpIHsKQEAgLTMyNTksOCArMzI1OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJl
bW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoMCwgbG9naWNhbEJvdHRvbSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGVjcmVhc2VP
YmplY3RzQ291bnQoci0+dHlwZSgpKTsKLSAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0U2V0LnJl
bW92ZShpdCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlKHIpOwogICAg
ICAgICAgICAgQVNTRVJUKCFyLT5tX29yaWdpbmF0aW5nTGluZSk7CiAgICAgICAgICAgICBkZWxl
dGUgcjsKICAgICAgICAgfQpAQCAtMzI3MiwxMSArMzI3MCwxMCBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyhGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0LCBp
bnQgbG9naQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2Jq
ZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0KiBj
dXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpOwogICAgIHdoaWxlIChjdXJyICE9IGxhc3RG
bG9hdCAmJiAoIWN1cnItPmlzUGxhY2VkKCkgfHwgbG9naWNhbFRvcEZvckZsb2F0KGN1cnIpID49
IGxvZ2ljYWxPZmZzZXQpKSB7Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5kZWNyZWFzZU9i
amVjdHNDb3VudChjdXJyLT50eXBlKCkpOwotICAgICAgICBmbG9hdGluZ09iamVjdFNldC5yZW1v
dmVMYXN0KCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoY3Vycik7CiAgICAg
ICAgIEFTU0VSVCghY3Vyci0+bV9vcmlnaW5hdGluZ0xpbmUpOwogICAgICAgICBkZWxldGUgY3Vy
cjsKICAgICAgICAgY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKTsKQEAgLTMyODgsNyAr
MzI4NSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICBpZiAo
IW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOwogICAgIGlmIChmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQwMyw3ICszNDAwLDcgQEAgYm9vbCBSZW5k
ZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxv
YXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3ApOwogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZEJveCkg
KyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKGNo
aWxkQm94KSk7CiAKLSAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKCk7CisgICAg
ICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOwog
CiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0Lgog
ICAgICAgICBpZiAoY2hpbGRCb3gtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQpAQCAt
MzUwNSwxMSArMzUwMiwzMCBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNQZXJjZW50SGVpZ2h0RGVz
Y2VuZGFudChSZW5kZXJCb3gqIGRlc2NlbmRhbnQpCiB9CiAjZW5kaWYKIAotLy8gRklYTUU6IFRo
ZSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUvbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZSBmdW5j
dGlvbnMgYXJlIHZlcnkgc2xvdyBpZiB0aGVyZSBhcmUgbWFueSBmbG9hdHMKLS8vIHByZXNlbnQu
IFdlIG5lZWQgdG8gYWRkIGEgc3RydWN0dXJlIHRvIGZsb2F0aW5nIG9iamVjdHMgdG8gcmVwcmVz
ZW50ICJsaW5lcyIgb2YgZmxvYXRzLiAgVGhlbiBpbnN0ZWFkIG9mIGNoZWNraW5nCi0vLyBlYWNo
IGZsb2F0IGluZGl2aWR1YWxseSwgd2UnZCBqdXN0IHdhbGsgYmFja3dhcmRzIHRocm91Z2ggdGhl
ICJsaW5lcyIgYW5kIHN0b3Agd2hlbiB3ZSBoaXQgYSBsaW5lIHRoYXQgaXMgZnVsbHkgYWJvdmUK
LS8vIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgdGhhdCB3ZSdkIGxpa2UgdG8gY2hlY2suICBDb21wdXRp
bmcgdGhlICJsaW5lcyIgd291bGQgYmUgcmF0aGVyIGNvbXBsaWNhdGVkLCBidXQgY291bGQgcmVw
bGFjZSB0aGUgbGVmdAotLy8gb2JqZWN0cyBhbmQgcmlnaHQgb2JqZWN0cyBjb3VudCBoYWNrIHRo
YXQgaXMgY3VycmVudGx5IHVzZWQgaGVyZS4KK3RlbXBsYXRlIDxSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+CitpbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6
RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRUeXBlVmFsdWU+Ojpjb2xsZWN0SWZOZWVk
ZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBpbnRlcnZhbCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9h
dGluZ09iamVjdCogciA9IGludGVydmFsLmRhdGEoKTsKKyAgICBpZiAoci0+dHlwZSgpID09IEZs
b2F0VHlwZVZhbHVlICYmIGludGVydmFsLmxvdygpIDw9IG1fdmFsdWUgJiYgbV92YWx1ZSA8IGlu
dGVydmFsLmhpZ2goKSkgeworICAgICAgICAvLyBBbGwgdGhlIG9iamVjdHMgcmV0dXJuZWQgZnJv
bSB0aGUgdHJlZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFjZWQuCisgICAgICAgIEFTU0VSVChyLT5p
c1BsYWNlZCgpICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBtX3ZhbHVl
ICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IG1fdmFsdWUpOworCisg
ICAgICAgIGlmIChGbG9hdFR5cGVWYWx1ZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0IAor
ICAgICAgICAgICAgJiYgbV9yZW5kZXJlci0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBtX29m
ZnNldCkgeworICAgICAgICAgICAgbV9vZmZzZXQgPSBtX3JlbmRlcmVyLT5sb2dpY2FsUmlnaHRG
b3JGbG9hdChyKTsKKyAgICAgICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAgICAgICAg
ICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90dG9tRm9y
RmxvYXQocikgLSBtX3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZsb2F0VHlwZVZh
bHVlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0CisgICAgICAgICAgICAmJiBtX3JlbmRl
cmVyLT5sb2dpY2FsTGVmdEZvckZsb2F0KHIpIDwgbV9vZmZzZXQpIHsKKyAgICAgICAgICAgIG1f
b2Zmc2V0ID0gbV9yZW5kZXJlci0+bG9naWNhbExlZnRGb3JGbG9hdChyKTsKKyAgICAgICAgICAg
IGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICAgICAqbV9oZWlnaHRSZW1haW5p
bmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQocikgLSBtX3ZhbHVlOworICAg
ICAgICB9CisgICAgfQorfQorCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9m
ZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0
LCBib29sIGFwcGx5VGV4dEluZGVudCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nKSBjb25z
dAogewogICAgIExheW91dFVuaXQgbGVmdCA9IGZpeGVkT2Zmc2V0OwpAQCAtMzUxNywyMyArMzUz
Myw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShM
YXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuCiAgICAgICAgIGlmIChoZWlnaHRSZW1haW5p
bmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gMTsKIAotICAgICAgICAvLyBXZSBr
bm93IHRoZSBsaXN0IGlzIG5vbi1lbXB0eSwgc2luY2Ugd2UgaGF2ZSAibGVmdCIgb2JqZWN0cyB0
byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJl
Z2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxlYXN0IG9uZQotICAgICAgICAvLyBk
ZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAg
ZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0g
Kml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0
KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRv
cAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRM
ZWZ0Ci0gICAgICAgICAgICAgICAgJiYgbG9naWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBsZWZ0KSB7
Ci0gICAgICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBsb2dpY2FsUmlnaHRGb3JGbG9hdChy
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKLSAgICAgICAgICAgICAg
ICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSAtIGxvZ2lj
YWxUb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGl0ICE9IGJlZ2luKTsKKyAg
ICAgICAgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVm
dD4gYWRhcHRlcih0aGlzLCBsb2dpY2FsVG9wLCBsZWZ0LCBoZWlnaHRSZW1haW5pbmcpOworICAg
ICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0
aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgfQogCiAgICAgaWYgKGFwcGx5VGV4dEluZGVudCAmJiBz
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTM1NTMsMjQgKzM1NTQsOSBA
QCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91
dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VQogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBt
X2Zsb2F0aW5nT2JqZWN0cy0+aGFzUmlnaHRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKGhlaWdo
dFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwotICAgICAgICAg
ICAgCi0gICAgICAgIC8vIFdlIGtub3cgdGhlIGxpc3QgaXMgbm9uLWVtcHR5LCBzaW5jZSB3ZSBo
YXZlICJyaWdodCIgb2JqZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUg
d2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxl
YXN0IG9uZQotICAgICAgICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkg
JiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZv
ckZsb2F0KHIpID4gbG9naWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBG
bG9hdGluZ09iamVjdDo6RmxvYXRSaWdodAotICAgICAgICAgICAgICAgICYmIGxvZ2ljYWxMZWZ0
Rm9yRmxvYXQocikgPCByaWdodCkgewotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWluKHJpZ2h0
LCBsb2dpY2FsTGVmdEZvckZsb2F0KHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0UmVt
YWluaW5nKQotICAgICAgICAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gbG9naWNhbEJv
dHRvbUZvckZsb2F0KHIpIC0gbG9naWNhbFRvcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3
aGlsZSAoaXQgIT0gYmVnaW4pOworCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVy
PEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0PiBhZGFwdGVyKHRoaXMsIGxvZ2ljYWxUb3AsIHJp
Z2h0LCBoZWlnaHRSZW1haW5pbmcpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2Vk
RmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgfQogICAg
IAogICAgIGlmIChhcHBseVRleHRJbmRlbnQgJiYgIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkgewpAQCAtMzU5NSw3ICszNTgxLDcgQEAgaW50IFJlbmRlckJsb2NrOjpuZXh0Rmxv
YXRMb2dpY2FsQm90dG9tQmVsb3coaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgaW50IGJvdHRvbSA9IElOVF9NQVg7Ci0gICAgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTM2MTIsNyArMzU5OCw3IEBAIGludCBSZW5kZXJC
bG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0
VHlwZSkgY29uc3QKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm4g
MDsKICAgICBpbnQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25z
dCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0zNjYwLDcgKzM2NDYsOCBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGRQb3NpdGlvbmVkRmxvYXRzKCkKICAgICAgICAgc2V0TG9naWNhbExlZnRGb3JGbG9h
dChmbG9hdGluZ09iamVjdCwgbG9naWNhbExlZnRGb3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSAt
IG1hcmdpbkxvZ2ljYWxMZWZ0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkpOwogICAgICAgICBz
ZXRMb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3BGb3JDaGlsZChw
b3NpdGlvbmVkT2JqZWN0KSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKHBvc2l0aW9uZWRPYmplY3Qp
KTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dp
Y2FsSGVpZ2h0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkgKyBtYXJnaW5CZWZvcmVGb3JDaGls
ZChwb3NpdGlvbmVkT2JqZWN0KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQocG9zaXRpb25lZE9iamVj
dCkpOwotICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7CisKKyAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7CiAg
ICAgICAgIAogICAgICAgICBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSB0cnVlOwogICAgIH0KQEAg
LTM2NjgsNiArMzY1NSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMo
KQogCiB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0
UGFzcykKIHsKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzLT5zZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSk7CisKICAgICAvLyBDbGVhciBvdXIgcG9zaXRpb25lZCBmbG9hdHMgYm9vbGVhbi4KICAgICBt
X2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSBmYWxzZTsKIApAQCAtMzY4NiwxMCArMzY3NiwxMCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykK
ICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwIGZsb2F0TWFwOwogCiAgICAgaWYgKG1fZmxvYXRp
bmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNl
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAg
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXQ6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICAgICAg
Zm9yIChGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9
ICppdDsKICAgICAgICAgICAgICAgICBmbG9hdE1hcC5hZGQoZi0+bV9yZW5kZXJlciwgZik7CiAg
ICAgICAgICAgICB9CkBAIC0zNzQxLDcgKzM3MzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVh
ckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKICAgICAgICAgaW50IGNoYW5nZUxv
Z2ljYWxUb3AgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICAgICAgaW50IGNoYW5n
ZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKICAgICAgICAgaWYg
KG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CkBAIC0zODIz
LDEwICszODEzLDkgQEAgaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5k
ZXJCbG9jayogY2hpbGQsIGludCBsb2dpY2FsTGVmdE9mZnNldCwKIAogICAgICAgICAgICAgICAg
IC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAg
ICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0
cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAKLSAgICAgICAgICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmotPnR5cGUoKSk7Ci0g
ICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmFkZChmbG9hdGluZ09iaik7
CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobWFrZUNoaWxk
UGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+
aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAtMzg1Myw3ICszODQyLDcgQEAgYm9vbCBSZW5k
ZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5kZXJCb3gqIHJlbmRlcmVyKQogICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMgfHwgaGFzQ29sdW1ucygpIHx8ICFwYXJlbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxSZW5k
ZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihyZW5kZXJlcik7CiAgICAgaWYg
KGl0ID09IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zODY5LDcgKzM4NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMo
UmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQogCiAgICAgbG9naWNh
bExlZnRPZmZzZXQgKz0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXJnaW5MZWZ0KCkg
OiBtYXJnaW5Ub3AoKSk7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgcHJldlNldCA9IHByZXYt
Pm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
cHJldlNldCA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIHByZXZFbmQgPSBwcmV2U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBwcmV2SXQgPSBwcmV2U2V0LmJlZ2luKCk7IHByZXZJdCAhPSBw
cmV2RW5kOyArK3ByZXZJdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpwcmV2SXQ7
CkBAIC0zODk3LDkgKzM4ODYsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9h
dHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0
IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0g
ICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0
aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmluY3JlYXNl
T2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKS5hZGQoZmxvYXRpbmdPYmopOworICAgICAgICAgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3Rz
LT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
Mzk0MCw3ICszOTI4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0
aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUKIAogdm9pZCBSZW5kZXJC
bG9jazo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCgpCiB7Ci0gICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwor
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KCppdCkgPiBsb2dpY2FsSGVpZ2h0KCkpIHsK
QEAgLTQwOTIsNyArNDA4MCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAgICAgIGFk
anVzdGVkTG9jYXRpb24gKz0gdG9TaXplKHRvUmVuZGVyVmlldyh0aGlzKS0+ZnJhbWVWaWV3KCkt
PnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIH0KIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0
U2V0LmJlZ2luKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCk7IGl0ICE9IGJlZ2luOykgewogICAgICAgICAtLWl0OwpAQCAt
NTY5OSw3ICs1Njg3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGlu
dCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQpIGNvbnN0CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAg
ICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0
OwpAQCAtNjQ0Myw2ICs2NDMxLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5h
bWUoKSBjb25zdAogaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xl
YXIoKQogewogICAgIG1fc2V0LmNsZWFyKCk7CisgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmNsZWFy
KCk7CiAgICAgbV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsKICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50
ID0gMDsKICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQgPSAwOwpAQCAtNjQ2OCw2ICs2NDU3
LDcyIEBAIGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmRlY3JlYXNl
T2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUCiAgICAgICAgIG1fcG9zaXRpb25lZE9iamVj
dHNDb3VudC0tOwogfQogCitpbmxpbmUgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2
YWwgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVj
dChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgaWYgKG1faG9yaXpvbnRh
bFdyaXRpbmdNb2RlKQorICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPnkoKSwgZmxvYXRpbmdPYmplY3QtPm1heFkoKSwgZmxv
YXRpbmdPYmplY3QpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJbnRl
cnZhbChmbG9hdGluZ09iamVjdC0+eCgpLCBmbG9hdGluZ09iamVjdC0+bWF4WCgpLCBmbG9hdGlu
Z09iamVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6YWRkUGxh
Y2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBBU1NFUlQo
IWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKyAgICAKKyAgICBpZiAobV9wbGFj
ZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgbV9wbGFjZWRGbG9hdHNUcmVl
LmFkZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7CisKKyAgICBm
bG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7CisjaWZuZGVmIE5ERUJVRworICAgIGZs
b2F0aW5nT2JqZWN0LT5zZXRJc0luUGxhY2VkVHJlZSh0cnVlKTsgICAgICAKKyNlbmRpZgorfQor
Cit2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdChG
bG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgQVNTRVJUKGZsb2F0aW5nT2Jq
ZWN0LT5pc1BsYWNlZCgpICYmIGZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKwor
ICAgIGlmIChtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKSB7CisgICAgICAgIGJv
b2wgcmVtb3ZlZCA9IG1fcGxhY2VkRmxvYXRzVHJlZS5yZW1vdmUoaW50ZXJ2YWxGb3JGbG9hdGlu
Z09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQs
IHJlbW92ZWQpOworICAgIH0KKyAgICAKKyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQo
ZmFsc2UpOworI2lmbmRlZiBOREVCVUcKKyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNJblBsYWNl
ZFRyZWUoZmFsc2UpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdHM6OmFkZChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAg
aW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7CisgICAgbV9zZXQu
YWRkKGZsb2F0aW5nT2JqZWN0KTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkp
CisgICAgICAgIGFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7Cit9CisKK2lubGluZSB2
b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZShGbG9hdGluZ09iamVjdCog
ZmxvYXRpbmdPYmplY3QpCit7CisgICAgZGVjcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmpl
Y3QtPnR5cGUoKSk7CisgICAgbV9zZXQucmVtb3ZlKGZsb2F0aW5nT2JqZWN0KTsKKyAgICBBU1NF
UlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgfHwgIWZsb2F0aW5nT2JqZWN0LT5pc0luUGxh
Y2VkVHJlZSgpKTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisgICAgICAg
IHJlbW92ZVBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKQoreworICAgIEFT
U0VSVCghbV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSk7CisgICAgaWYgKG1fc2V0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5pbml0
SWZOZWVkZWQoKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9zZXQuYmVn
aW4oKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOwor
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0ID0gKml0OworICAgICAgICBtX3BsYWNlZEZsb2F0c1RyZWUuYWRkKGludGVy
dmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKyAgICB9Cit9CisKIFRleHRS
dW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBj
b25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRl
eHRSdW5GbGFncyBmbGFncykKIHsKICAgICBBU1NFUlQoc3R5bGUpOwpAQCAtNjUwMiw2ICs2NTU3
LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNob3dMaW5lVHJlZUFuZE1hcmsoY29uc3QgSW5saW5l
Qm94KiBtYXJrZWRCb3gxLCBjb25zdCBjaGFyKiBtCiAgICAgICAgIHJvb3QtPnNob3dMaW5lVHJl
ZUFuZE1hcmsobWFya2VkQm94MSwgbWFya2VkTGFiZWwxLCBtYXJrZWRCb3gyLCBtYXJrZWRMYWJl
bDIsIG9iaiwgMSk7CiB9CiAKKy8vIFRoZXNlIGhlbHBlcnMgYXJlIG9ubHkgdXNlZCBieSB0aGUg
UE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCitTdHJpbmcgVmFsdWVUb1N0
cmluZzxpbnQ+OjpzdHJpbmcoY29uc3QgaW50IHZhbHVlKQoreworICAgIHJldHVybiBTdHJpbmc6
Om51bWJlcih2YWx1ZSk7Cit9CisKK1N0cmluZyBWYWx1ZVRvU3RyaW5nPFJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdCo+OjpzdHJpbmcoY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVwICglZHgl
ZCAlZHglZCkiLCBmbG9hdGluZ09iamVjdCwgZmxvYXRpbmdPYmplY3QtPngoKSwgZmxvYXRpbmdP
YmplY3QtPnkoKSwgZmxvYXRpbmdPYmplY3QtPm1heFgoKSwgZmxvYXRpbmdPYmplY3QtPm1heFko
KSk7Cit9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDZjZGYyMGEuLjliNGY3ZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFJl
bmRlckJsb2NrX2gKIAogI2luY2x1ZGUgIkdhcFJlY3RzLmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2
YWxUcmVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJv
eExpc3QuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCkBAIC02Nyw2ICs2OCwxMSBAQCB0
eXBlZGVmIHVuc2lnbmVkIFRleHRSdW5GbGFnczsKIGNsYXNzIFJlbmRlckJsb2NrIDogcHVibGlj
IFJlbmRlckJveCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIExpbmVMYXlvdXRTdGF0ZTsK
KyNpZm5kZWYgTkRFQlVHCisgICAgLy8gVXNlZCBieSB0aGUgUE9ESW50ZXJ2YWxUcmVlIGZvciBk
ZWJ1Z2dpbmcgdGhlIEZsb2F0aW5nT2JqZWN0LgorICAgIHRlbXBsYXRlIDxjbGFzcz4gZnJpZW5k
IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCisKICAgICBSZW5kZXJCbG9jayhOb2RlKik7
CiAgICAgdmlydHVhbCB+UmVuZGVyQmxvY2soKTsKIApAQCAtNDIyLDYgKzQyOCw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQoZmFsc2UpCiAgICAgICAgICAgICAsIG1f
aXNEZXNjZW5kYW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzUGxhY2VkKGZhbHNlKQorI2lm
bmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKKyNlbmRp
ZgogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsKICAgICAg
ICAgICAgIGlmICh0eXBlID09IExlZnRGbG9hdCkKQEAgLTQ0MSw2ICs0NTAsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHR5cGUgIT0gRmxvYXRQb3NpdGlvbmVkKQog
ICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc1Bs
YWNlZCh0cnVlKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJl
ZShmYWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDU3LDEzICs0Njks
MTggQEAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZVJlY3Qud2lkdGgoKTsgfQogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZVJlY3QuaGVpZ2h0KCk7IH0KIAotICAgICAgICB2b2lkIHNldFgoaW50IHgpIHsgbV9mcmFt
ZVJlY3Quc2V0WCh4KTsgfQotICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgbV9mcmFtZVJlY3Qu
c2V0WSh5KTsgfQotICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX2ZyYW1lUmVj
dC5zZXRXaWR0aCh3aWR0aCk7IH0KLSAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkg
eyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQorICAgICAgICB2b2lkIHNldFgoaW50
IHgpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4KTsgfQor
ICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9m
cmFtZVJlY3Quc2V0WSh5KTsgfQorICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBB
U1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0K
KyAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRU
cmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQogCiAgICAgICAgIGNvbnN0
IEludFJlY3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4g
bV9mcmFtZVJlY3Q7IH0KLSAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYg
ZnJhbWVSZWN0KSB7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9CisgICAgICAgIHZvaWQgc2V0
RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRU
cmVlKCkpOyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorCisjaWZuZGVmIE5ERUJVRworICAg
ICAgICBib29sIGlzSW5QbGFjZWRUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUGxhY2VkVHJl
ZTsgfQorICAgICAgICB2b2lkIHNldElzSW5QbGFjZWRUcmVlKGJvb2wgdmFsdWUpIHsgbV9pc0lu
UGxhY2VkVHJlZSA9IHZhbHVlOyB9CisjZW5kaWYKIAogICAgICAgICBSZW5kZXJCb3gqIG1fcmVu
ZGVyZXI7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5lOwpAQCAtNDcz
LDYgKzQ5MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9zaG91bGRQYWludCA6IDE7CiAg
ICAgICAgIGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAxOwogICAgICAgICBib29sIG1faXNQbGFjZWQg
OiAxOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBtX2lzSW5QbGFjZWRUcmVlIDogMTsK
KyNlbmRpZgogICAgIH07CiAKICAgICBJbnRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShj
b25zdCBGbG9hdGluZ09iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CkBAIC03OTksMjgg
KzgxOSw3NyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxGbG9h
dGluZ09iamVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4gRmxvYXRpbmdPYmpl
Y3RTZXQ7CiAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0b3IgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKKyAgICB0eXBlZGVmIFBPREludGVydmFsPExheW91dFVu
aXQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKKyAgICB0eXBlZGVm
IFBPREludGVydmFsVHJlZTxMYXlvdXRVbml0LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2Jq
ZWN0VHJlZTsKKyAgICAKKyAgICB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRU
eXBlVmFsdWU+CisgICAgY2xhc3MgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdEludGVydmFsIEludGVydmFsVHlw
ZTsKKyAgICAgICAgCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyKGNvbnN0IFJl
bmRlckJsb2NrKiByZW5kZXJlciwgTGF5b3V0VW5pdCB2YWx1ZSwgTGF5b3V0VW5pdCYgb2Zmc2V0
LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1haW5pbmcpCisgICAgICAgICAgICA6IG1fcmVuZGVyZXIo
cmVuZGVyZXIpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgbV9oZWlnaHRSZW1haW5pbmcoaGVpZ2h0UmVt
YWluaW5nKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlubGluZSBM
YXlvdXRVbml0IGxvd1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBp
bmxpbmUgTGF5b3V0VW5pdCBoaWdoVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Cisg
ICAgICAgIHZvaWQgY29sbGVjdElmTmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYpIGNvbnN0Owor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1fcmVuZGVyZXI7Cisg
ICAgICAgIExheW91dFVuaXQgbV92YWx1ZTsKKyAgICAgICAgTGF5b3V0VW5pdCYgbV9vZmZzZXQ7
CisgICAgICAgIExheW91dFVuaXQqIG1faGVpZ2h0UmVtYWluaW5nOworICAgIH07CisKICAgICBj
bGFzcyBGbG9hdGluZ09iamVjdHMgewogICAgIHB1YmxpYzoKLSAgICAgICAgRmxvYXRpbmdPYmpl
Y3RzKCkKLSAgICAgICAgICAgIDogbV9sZWZ0T2JqZWN0c0NvdW50KDApCisgICAgICAgIEZsb2F0
aW5nT2JqZWN0cyhib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgICAgIDogbV9w
bGFjZWRGbG9hdHNUcmVlKFVuaW5pdGlhbGl6ZWRUcmVlKQorICAgICAgICAgICAgLCBtX2xlZnRP
YmplY3RzQ291bnQoMCkKICAgICAgICAgICAgICwgbV9yaWdodE9iamVjdHNDb3VudCgwKQogICAg
ICAgICAgICAgLCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQoMCkKKyAgICAgICAgICAgICwgbV9o
b3Jpem9udGFsV3JpdGluZ01vZGUoaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQogICAgICAgICB7CiAg
ICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VP
YmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUpOwotICAgICAgICB2b2lkIGRlY3JlYXNl
T2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgdm9pZCBhZGQoRmxv
YXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCByZW1vdmUoRmxvYXRpbmdPYmplY3QqKTsKKyAg
ICAgICAgdm9pZCBhZGRQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9p
ZCByZW1vdmVQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCBzZXRI
b3Jpem9udGFsV3JpdGluZ01vZGUoYm9vbCBiID0gdHJ1ZSkgeyBtX2hvcml6b250YWxXcml0aW5n
TW9kZSA9IGI7IH0KKwogICAgICAgICBib29sIGhhc0xlZnRPYmplY3RzKCkgY29uc3QgeyByZXR1
cm4gbV9sZWZ0T2JqZWN0c0NvdW50ID4gMDsgfQogICAgICAgICBib29sIGhhc1JpZ2h0T2JqZWN0
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRPYmplY3RzQ291bnQgPiAwOyB9CiAgICAgICAgIGJv
b2wgaGFzUG9zaXRpb25lZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uZWRPYmpl
Y3RzQ291bnQgPiAwOyB9Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSB7IHJldHVy
biBtX3NldDsgfQotCisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSBjb25z
dCB7IHJldHVybiBtX3NldDsgfQorICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFRyZWUmIHBs
YWNlZEZsb2F0c1RyZWUoKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wdXRlUGxhY2VkRmxv
YXRzVHJlZUlmTmVlZGVkKCk7CisgICAgICAgICAgICByZXR1cm4gbV9wbGFjZWRGbG9hdHNUcmVl
OyAKKyAgICAgICAgfQogICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY29tcHV0ZVBsYWNlZEZs
b2F0c1RyZWUoKTsKKyAgICAgICAgaW5saW5lIHZvaWQgY29tcHV0ZVBsYWNlZEZsb2F0c1RyZWVJ
Zk5lZWRlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9wbGFjZWRGbG9hdHNUcmVl
LmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgICAgICAgICBjb21wdXRlUGxhY2VkRmxvYXRzVHJl
ZSgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQoRmxvYXRp
bmdPYmplY3Q6OlR5cGUpOworICAgICAgICB2b2lkIGRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0
aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBpbnRlcnZh
bEZvckZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CisKICAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXQgbV9zZXQ7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0VHJlZSBtX3BsYWNlZEZsb2F0
c1RyZWU7CiAgICAgICAgIHVuc2lnbmVkIG1fbGVmdE9iamVjdHNDb3VudDsKICAgICAgICAgdW5z
aWduZWQgbV9yaWdodE9iamVjdHNDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbmVk
T2JqZWN0c0NvdW50OworICAgICAgICBib29sIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlOwogICAg
IH07CiAgICAgT3duUHRyPEZsb2F0aW5nT2JqZWN0cz4gbV9mbG9hdGluZ09iamVjdHM7CiAgICAg
CkBAIC04OTUsNiArOTY0LDE2IEBAIGlubGluZSBjb25zdCBSZW5kZXJCbG9jayogdG9SZW5kZXJC
bG9jayhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlv
bmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KIHZvaWQgdG9SZW5kZXJCbG9jayhjb25zdCBS
ZW5kZXJCbG9jayopOwogCisjaWZuZGVmIE5ERUJVRworLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUg
dXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK3RlbXBsYXRl
IDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPGludD4geworICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5n
KGNvbnN0IGludCB2YWx1ZSk7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqPiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmco
Y29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kik7Cit9OworI2VuZGlmCisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlckJsb2NrX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggNWRj
MjdjNi4uNTUwOTYzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC0xMDkxLDcgKzEwOTEsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlLCBJbmxpbgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYm
IGxhc3RSb290Qm94KCkpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGlmIChsYXlv
dXRTdGF0ZS5sYXN0RmxvYXQoKSkgewpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6bGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUp
CiAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2NrTG9naWNhbEhlaWdo
dChsb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICBpZiAobGF5b3V0U3Rh
dGUubGFzdEZsb2F0KCkpIHsKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6
Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGlu
ZUJpZGlSCiAKICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+YmxvY2tMb2dp
Y2FsSGVpZ2h0KCkgKyBhYnMoZGVsdGEpOwogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBm
bG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29u
c3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVj
dHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwpAQCAtMTUyOCw3ICsxNTI4LDcgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgY29uc3QgSW5saW5lQmlkaVIKIAogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsQm90
dG9tID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAg
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAg
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CkBAIC0yNTUwLDcgKzI1
NTAsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5n
T2JqZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplYwogICAgIGlmICghbmV3RmxvYXQtPm1fcGFn
aW5hdGlvblN0cnV0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CiAgICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKSA9PSBuZXdG
bG9hdCk7CiAKICAgICBpbnQgZmxvYXRMb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KG5l
d0Zsb2F0KTsKQEAgLTI1NzUsNyArMjU3NSw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9u
TmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjCiAg
ICAgICAgICAgICBpZiAoby0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAgICAgIHRvUmVu
ZGVyQmxvY2sobyktPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAg
ICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5y
ZW1vdmVQbGFjZWRPYmplY3QoZik7CiAgICAgICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQo
ZiwgbG9naWNhbFRvcEZvckZsb2F0KGYpICsgZi0+bV9wYWdpbmF0aW9uU3RydXQpOworICAgICAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmKTsKICAgICAgICAgfQog
ICAgIH0KIAo=
</data>
<flag name="commit-queue"
          id="98774"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103246</attachid>
            <date>2011-08-08 08:01:23 -0700</date>
            <delta_ts>2011-08-08 08:10:04 -0700</delta_ts>
            <desc>Fixed build</desc>
            <filename>bug65668_5.patch</filename>
            <type>text/plain</type>
            <size>52454</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMWFjZjRlMS4uZmM3YmZhMSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMS0wOC0wOCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9i
ZS5jb20+CisKKyAgICAgICAgT3B0aW1pemUgZmxvYXRpbmcgZWxlbWVudHMgbG9va3VwCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0L2Zsb2F0
cy5odG1sOiBBZGRlZCB0aGUgbmVzdGVkIGRpdnMsIHNvIHRoYXQgd2UgY2FuIHRlc3QgdGhlIHBy
b3BhZ2F0aW9uIGltcGFjdCBvZiB0aGUgZmxvYXRzIHRyZWUuCisKIDIwMTEtMDgtMDQgIEFsZXhh
bmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgogCiAgICAgICAgIEFkZCBhIHBlcmZv
cm1hbmNlIHRlc3QgZm9yIGZsb2F0aW5nIGVsZW1lbnRzIGxheW91dCBhbGdvcml0aG0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvTGF5b3V0L2Zsb2F0cy5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKaW5kZXggNjc4MDVkOC4uNTJmOTViYSAxMDA2NDQKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKQEAgLTMwLDEyICszMCwxNyBAQAogICAgICAgICAgICAg
ICAgIHJldHVybiBlbDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gY3Jl
YXRlU2V0KHdpZHRoLCBoZWlnaHQpCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVTZXQod2lk
dGgsIGhlaWdodCwgbmVzdGVkKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZhciBj
b250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBkb2N1bWVudC5ib2R5LCAiY29udGFpbmVy
Iik7CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyArK3gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCJkaXYiLCBjb250YWluZXIsICJmbG9h
dCIsICJmbG9hdCIgKyB4ICsgIl8iICsgeSk7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5l
c3RlZENvbnRhaW5lciA9IGNvbnRhaW5lcjsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggOyBu
ZXN0ZWQgPiAwOyAtLW5lc3RlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZENvbnRh
aW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIG5lc3RlZENvbnRhaW5lciwgIm5lc3RlZCIsICJu
ZXN0ZWQiICsgeCArICJfIiArIG5lc3RlZCk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCJkaXYiLCBjb250YWluZXIsICJmbG9hdC1lbmQi
LCAiZW5kIiArIHgpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDcsMTIg
KzUyLDE0IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjE7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3Qod2lkdGgsIGhlaWdodCkgCisgICAgICAgICAgICBm
dW5jdGlvbiB0ZXN0KHdpZHRoLCBoZWlnaHQsIG5lc3RlZCkgCiAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbmVzdGVkID0gbmVzdGVkIHx8IDA7CisKICAgICAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdF9wYW5lbCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lcmF0ZV9wYW5l
bCIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogCi0gICAgICAgICAgICAgICAgY3JlYXRlU2V0
KHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIGNyZWF0ZVNldCh3aWR0aCwgaGVpZ2h0
LCBuZXN0ZWQpOwogICAgICAgICAgICAgICAgIHZhciB1cGRhdGVzID0gMDsKICAgICAgICAgICAg
ICAgICB2YXIgc3RhcnRUaW1lID0gbmV3IERhdGUoKTsKIApAQCAtOTEsNiArOTgsMTEgQEAKICAg
ICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgyMCwgMTAwKSI+MjAgYnkgMTAwPC9idXR0
b24+CiAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InRlc3QoNTAsIDEwMCkiPjUwIGJ5IDEw
MDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDEwMCwgMTAwKSI+
MTAwIGJ5IDEwMDwvYnV0dG9uPgorICAgICAgICAgICAgPHA+TmVzdGVkIGRpdnM6PC9wPgorICAg
ICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDIsIDEwMCwgMTAwKSI+MiBieSAxMDAsIDEw
MCBuZXN0ZWQ8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgyMCwg
MTAwLCAxMDApIj4yMCBieSAxMDAsIDEwMCBuZXN0ZWQ8L2J1dHRvbj4KKyAgICAgICAgICAgIDxi
dXR0b24gb25jbGljaz0idGVzdCg1MCwgMTAwLCAxMDApIj41MCBieSAxMDAsIDEwMCBuZXN0ZWQ8
L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgxMDAsIDEwMCwgMTAw
KSI+MTAwIGJ5IDEwMCwgMTAwIG5lc3RlZDwvYnV0dG9uPgogICAgICAgICA8L2Rpdj4KICAgICA8
L2JvZHk+CiA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGEyZGNjYWEuLmRlNjlmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wOC0w
OCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5jb20+CisKKyAgICAgICAgT3B0
aW1pemUgZmxvYXRpbmcgZWxlbWVudHMgbG9va3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2OAorCisgICAgICAgIEFkZGVkIGFuIGludGVydmFs
IHRyZWUgaW4gdGhlIEZsb2F0aW5nT2JqZWN0cyBzdHJ1Y3R1cmUuIEFsc28gYWRkZWQgbmV3IG1l
Y2hhbmlzbXMgdG8gbWFrZQorICAgICAgICBzdXJlIHRoZSB0cmVlIGlzIHVwZGF0ZWQgY29ycmVj
dGx5IHdoZW4gYSBmbG9hdCBpcyByZXBvc2l0aW9uZWQuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUg
UE9ESW50ZXJ2YWxUcmVlIHRvIHN1cHBvcnQgZ2l2aW5nIGEgc2VhcmNoIGFkYXB0ZXIgdGhhdCBj
YW4gYmUgaW1wbGVtZW50ZWQgYnkgdGhlCisgICAgICAgIGNsaWVudC4gSSdtIG5vdCBhZGRpbmcg
YSBkaWZmZXJlbnQgYnVnIGZvciB0aGF0IGJlY2F1c2UgUE9ESW50ZXJ2YWxUcmVlIGlzIG5vdCB1
c2VkIGFueXdoZXJlIGVsc2UKKyAgICAgICAgYW5kIHdvdWxkIGJlIGhhcmQgdG8gdGVzdCB0aGF0
IHRoZSBjaGFuZ2UgaXMgbm90IGJyZWFraW5nIGFueXRoaW5nLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFj
dG9yIG9uIHRoZSBmbG9hdGluZyBvYmplY3RzIGRhdGEgc3RydWN0dXJlLgorCisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL1BP
REludGVydmFsVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFw
dGVyOjpQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50
ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFNlYXJjaEFkYXB0ZXI6OmhpZ2hWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFNlYXJjaEFkYXB0ZXI6OmNvbGxlY3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
T0RJbnRlcnZhbFRyZWU6OlBPREludGVydmFsVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJ
bnRlcnZhbFRyZWU6OmFsbE92ZXJsYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFs
VHJlZTo6YWxsT3ZlcmxhcHNXaXRoQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFRyZWU6OnNlYXJjaEZvck92ZXJsYXBzRnJvbSk6CisgICAgICAgICogcGxhdGZvcm0vUE9E
UmVkQmxhY2tUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OlBPRFJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6aXNJbml0aWFsaXplZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmluaXRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRC
bGFja1RyZWU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNv
bnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6dmlzaXRJbm9yZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNoZWNrSW52YXJpYW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpQT0RSZWRCbGFja1RyZWU6OmR1bXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6Ojpj
b2xsZWN0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bmV4
dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFu
Z2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3Zlcmhhbmdp
bmdGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxv
YXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Rmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2
YWxGb3JGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0c1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6OjpzdHJpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3Q6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdDo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0Ojppc0luUGxhY2VkVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldElzSW5QbGFjZWRUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcjo6RmxvYXRJ
bnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6OmhpZ2hWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6c2V0
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdHM6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjpwbGFjZWRGbG9hdHNUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlSWZOZWVkZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKToKKwogMjAxMS0wOC0w
OCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFRoZSBp
bnB1dFt0eXBlPW51bWJlcl0gZWxlbWVudCBzaG91bGQgYmUgYXMgd2lkZSBhcyBuZWNlc3Nhcnkg
dG8gc2hvdyB0aGUgd2lkZXN0IHBvc3NpYmxlIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIxN2QwY2YuLmQ3MGIwYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTEzMzYsNiArMTMzNiwxMCBAQAogCQk1MDFCQUFBOTEzOTUwRTJDMDBGN0FDRUIgLyog
V2luZFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUwMUJBQUE4MTM5NTBFMkMwMEY3QUNFQiAvKiBXaW5kUnVsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwOENDQTRGMTNDRjEwNkIwMDMxNTFG
MyAvKiBSZW5kZXJGbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MDhDQ0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5oICovOyB9OwogCQk1MDhDQ0E1MDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDhD
Q0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgKi87IH07CisJCTUw
OTdDNUEzMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBP
REFyZW5hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTA5N0M1QTQxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDk3QzVBMDEzRUFCQTdFMDAyREU0
QUYgLyogUE9ESW50ZXJ2YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1MDk3QzVBNTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDk3QzVB
MTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTA5N0M1QTYxM0VBQkE3RTAwMkRFNEFG
IC8qIFBPRFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTA5N0M1QTIxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwRTU2
NkQ2MTM5RTM4QzUwMDIxNDQzMyAvKiBDU1NXcmFwU2hhcGVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwMUJBQUIxMTM5NTExNEIwMEY3QUNFQiAv
KiBDU1NXcmFwU2hhcGVzLmNwcCAqLzsgfTsKIAkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8q
IENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwMTg0NkEwQjA4NjAyQTAw
NEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3Bw
ICovOyB9OwpAQCAtNzkzNSw2ICs3OTM5LDEwIEBACiAJCTUwMUJBQUIxMTM5NTExNEIwMEY3QUNF
QiAvKiBDU1NXcmFwU2hhcGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1dyYXBTaGFwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MDhD
Q0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJGbG93VGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUwOENDQTRFMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZsb3dUaHJl
YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzU5RjEzRUFCQTdFMDAy
REU0QUYgLyogUE9EQXJlbmEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9E
QXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1QTAxM0VBQkE3RTAw
MkRFNEFGIC8qIFBPREludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBPREludGVydmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwOTdDNUExMTNF
QUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUE9ESW50ZXJ2YWxUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUwOTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9EUmVkQmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFBhZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hl
ZFBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUGFn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJEMTAzMTY1RUUwMDQ5
RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5MDA0LDYgKzE5MDEyLDEwIEBACiAJCUJDRjFBNUJBMDk3ODMyMDkw
MDYxQTEyMyAvKiBwbGF0Zm9ybSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREFyZW5hLmggKi8sCisJ
CQkJNTA5N0M1QTAxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggKi8sCisJCQkJNTA5
N0M1QTExM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oICovLAorCQkJCTUwOTdD
NUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLywKIAkJCQk0OUU5MTJB
NDBFRkFDOEU2MDA5RDBDQUYgLyogYW5pbWF0aW9uICovLAogCQkJCUZEMzE2MDQwMTJCMDI2QTMw
MEMxQTM1OSAvKiBhdWRpbyAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYxMkQgLyogY2Yg
Ki8sCkBAIC0yMzM0Nyw2ICsyMzM1OSwxMCBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1
OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRTBGMTJGMEZD
OUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUzNzM1MzEz
N0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUwOTdDNUEz
MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTA5N0M1
QTQxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MDk3QzVBNTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MDk3QzVBNjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVy
dmFsVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2YWxUcmVlLmgKaW5k
ZXggNWJmM2RlMC4uOTYyMzNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UE9ESW50ZXJ2YWxUcmVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2
YWxUcmVlLmgKQEAgLTQwLDYgKzQwLDMyIEBAIHRlbXBsYXRlPGNsYXNzIFQ+CiBzdHJ1Y3QgVmFs
dWVUb1N0cmluZzsKICNlbmRpZgogCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVXNlckRhdGEg
PSB2b2lkKj4KK2NsYXNzIFBPREludGVydmFsU2VhcmNoQWRhcHRlciB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBlOworICAgIAorICAg
IFBPREludGVydmFsU2VhcmNoQWRhcHRlcihWZWN0b3I8SW50ZXJ2YWxUeXBlPiYgcmVzdWx0LCBj
b25zdCBUJiBsb3dWYWx1ZSwgY29uc3QgVCYgaGlnaFZhbHVlKQorICAgICAgICA6IG1fcmVzdWx0
KHJlc3VsdCkKKyAgICAgICAgLCBtX2xvd1ZhbHVlKGxvd1ZhbHVlKQorICAgICAgICAsIG1faGln
aFZhbHVlKGhpZ2hWYWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIGxvd1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dWYWx1ZTsgfQorICAgIGNvbnN0IFQmIGhpZ2hWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaFZhbHVlOyB9CisgICAgdm9pZCBjb2xsZWN0SWZOZWVk
ZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBkYXRhKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGRh
dGEub3ZlcmxhcHMobV9sb3dWYWx1ZSwgbV9oaWdoVmFsdWUpKQorICAgICAgICAgICAgbV9yZXN1
bHQuYXBwZW5kKGRhdGEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8SW50ZXJ2YWxU
eXBlPiYgbV9yZXN1bHQ7CisgICAgVCBtX2xvd1ZhbHVlOworICAgIFQgbV9oaWdoVmFsdWU7Cit9
OworCiAvLyBBbiBpbnRlcnZhbCB0cmVlLCB3aGljaCBpcyBhIGZvcm0gb2YgYXVnbWVudGVkIHJl
ZC1ibGFjayB0cmVlLiBJdAogLy8gc3VwcG9ydHMgZWZmaWNpZW50IChPKGxnIG4pKSBpbnNlcnRp
b24sIHJlbW92YWwgYW5kIHF1ZXJ5aW5nIG9mCiAvLyBpbnRlcnZhbHMgaW4gdGhlIHRyZWUuCkBA
IC01MCw3ICs3NiwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVHlwZWRlZiB0byByZWR1Y2UgdHlwaW5n
IHdoZW4gZGVjbGFyaW5nIGludGVydmFscyB0byBiZSBzdG9yZWQgaW4KICAgICAvLyB0aGlzIHRy
ZWUuCiAgICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBlOwor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyPFQsIFVzZXJEYXRhPiBJbnRlcnZh
bFNlYXJjaEFkYXB0ZXJUeXBlOwogCisgICAgUE9ESW50ZXJ2YWxUcmVlKFVuaW5pdGlhbGl6ZWRU
cmVlRW51bSB1bml0aWFsaXplZFRyZWUpCisgICAgICAgIDogUE9EUmVkQmxhY2tUcmVlPEludGVy
dmFsVHlwZT4odW5pdGlhbGl6ZWRUcmVlKQorICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0K
KyAgICAKICAgICBQT0RJbnRlcnZhbFRyZWUoKQogICAgICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJ
bnRlcnZhbFR5cGU+KCkKICAgICB7CkBAIC04MCw3ICsxMTMsMTYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgLy8gRXhwbGljaXQgZGVyZWZlcmVuY2Ugb2YgInRoaXMiIHJlcXVpcmVkIGJlY2F1
c2Ugb2YKICAgICAgICAgLy8gaW5oZXJpdGFuY2UgcnVsZXMgaW4gdGVtcGxhdGUgY2xhc3Nlcy4K
LSAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKHRoaXMtPnJvb3QoKSwgaW50ZXJ2YWwsIHJl
c3VsdCk7CisgICAgICAgIEludGVydmFsU2VhcmNoQWRhcHRlclR5cGUgYWRhcHRlcihyZXN1bHQs
IGludGVydmFsLmxvdygpLCBpbnRlcnZhbC5oaWdoKCkpOworICAgICAgICBzZWFyY2hGb3JPdmVy
bGFwc0Zyb208SW50ZXJ2YWxTZWFyY2hBZGFwdGVyVHlwZT4odGhpcy0+cm9vdCgpLCBhZGFwdGVy
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEFkYXB0ZXJUeXBlPgorICAgIHZv
aWQgYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihBZGFwdGVyVHlwZSYgYWRhcHRlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIEV4cGxpY2l0IGRlcmVmZXJlbmNlIG9mICJ0aGlzIiByZXF1aXJlZCBi
ZWNhdXNlIG9mCisgICAgICAgIC8vIGluaGVyaXRhbmNlIHJ1bGVzIGluIHRlbXBsYXRlIGNsYXNz
ZXMuCisgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4odGhpcy0+cm9v
dCgpLCBhZGFwdGVyKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgdG8gY3JlYXRlIGludGVydmFs
IG9iamVjdHMuCkBAIC0xMTIsNyArMTU0LDggQEAgcHJpdmF0ZToKICAgICAvLyBTdGFydGluZyBm
cm9tIHRoZSBnaXZlbiBub2RlLCBhZGRzIGFsbCBvdmVybGFwcyB3aXRoIHRoZSBnaXZlbgogICAg
IC8vIGludGVydmFsIHRvIHRoZSByZXN1bHQgdmVjdG9yLiBUaGUgaW50ZXJ2YWxzIGFyZSBzb3J0
ZWQgYnkKICAgICAvLyBpbmNyZWFzaW5nIGxvdyBlbmRwb2ludC4KLSAgICB2b2lkIHNlYXJjaEZv
ck92ZXJsYXBzRnJvbShJbnRlcnZhbE5vZGUqIG5vZGUsIGNvbnN0IEludGVydmFsVHlwZSYgaW50
ZXJ2YWwsIFZlY3RvcjxJbnRlcnZhbFR5cGU+JiByZXMpIGNvbnN0CisgICAgdGVtcGxhdGUgPGNs
YXNzIEFkYXB0ZXJUeXBlPgorICAgIHZvaWQgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKEludGVydmFs
Tm9kZSogbm9kZSwgQWRhcHRlclR5cGUmIGFkYXB0ZXIpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjUsMTggKzE2OCwxNyBAQCBwcml2
YXRlOgogICAgICAgICBpZiAobGVmdAogICAgICAgICAgICAgLy8gVGhpcyBpcyBwaHJhc2VkIHRo
aXMgd2F5IHRvIGF2b2lkIHRoZSBuZWVkIGZvciBvcGVyYXRvcgogICAgICAgICAgICAgLy8gPD0g
b24gdHlwZSBULgotICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4SGlnaCgpIDwgaW50
ZXJ2YWwubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKGxlZnQsIGlu
dGVydmFsLCByZXMpOworICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4SGlnaCgpIDwg
YWRhcHRlci5sb3dWYWx1ZSgpKSkKKyAgICAgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxB
ZGFwdGVyVHlwZT4obGVmdCwgYWRhcHRlcik7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJs
YXAgd2l0aCBjdXJyZW50IG5vZGUuCi0gICAgICAgIGlmIChub2RlLT5kYXRhKCkub3ZlcmxhcHMo
aW50ZXJ2YWwpKQotICAgICAgICAgICAgcmVzLmFwcGVuZChub2RlLT5kYXRhKCkpOworICAgICAg
ICBhZGFwdGVyLmNvbGxlY3RJZk5lZWRlZChub2RlLT5kYXRhKCkpOwogCiAgICAgICAgIC8vIFNl
ZSB3aGV0aGVyIHdlIG5lZWQgdG8gdHJhdmVyc2UgdGhlIHJpZ2h0IHN1YnRyZWUuCiAgICAgICAg
IC8vIFRoaXMgaXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVlZCBmb3Igb3BlcmF0
b3IgPD0KICAgICAgICAgLy8gb24gdHlwZSBULgotICAgICAgICBpZiAoIShpbnRlcnZhbC5oaWdo
KCkgPCBub2RlLT5kYXRhKCkubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNG
cm9tKG5vZGUtPnJpZ2h0KCksIGludGVydmFsLCByZXMpOworICAgICAgICBpZiAoIShhZGFwdGVy
LmhpZ2hWYWx1ZSgpIDwgbm9kZS0+ZGF0YSgpLmxvdygpKSkKKyAgICAgICAgICAgIHNlYXJjaEZv
ck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4obm9kZS0+cmlnaHQoKSwgYWRhcHRlcik7CiAgICAg
fQogCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxOb2RlKiBub2RlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAppbmRleCA3ZGQ5ZGRkLi5jODFh
ZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaApAQCAtOTAs
NiArOTAsMTAgQEAgdGVtcGxhdGU8Y2xhc3MgVD4KIHN0cnVjdCBWYWx1ZVRvU3RyaW5nOwogI2Vu
ZGlmCiAKK2VudW0gVW5pbml0aWFsaXplZFRyZWVFbnVtIHsKKyAgICBVbmluaXRpYWxpemVkVHJl
ZQorfTsKKwogdGVtcGxhdGU8Y2xhc3MgVD4KIGNsYXNzIFBPRFJlZEJsYWNrVHJlZSB7CiBwdWJs
aWM6CkBAIC0xMDEsNiArMTA1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+VmlzaXRv
cigpIHsgfQogICAgIH07CiAKKyAgICAvLyBDb25zdHJ1Y3RzIGEgbmV3IHJlZC1ibGFjayB0cmVl
IHdpdGhvdXQgYWxsb2NhdGluZyBhbiBhcmVuYS4KKyAgICAvLyBpc0luaXRpYWxpemVkIHdpbGwg
cmV0dXJuIGZhbHNlIGluIHRoaXMgY2FzZS4gaW5pdElmTmVlZGVkIGNhbiBiZSB1c2VkCisgICAg
Ly8gdG8gaW5pdCB0aGUgc3RydWN0dXJlLiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWZ1bGwgZm9y
IGNyZWF0aW5nCisgICAgLy8gbGF6eSBpbml0aWFsaXplZCB0cmVlLgorICAgIFBPRFJlZEJsYWNr
VHJlZShVbmluaXRpYWxpemVkVHJlZUVudW0pCisgICAgICAgIDogbV9yb290KDApCisgICAgICAg
ICwgbV9uZWVkc0Z1bGxPcmRlcmluZ0NvbXBhcmlzb25zKGZhbHNlKQorI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgLCBtX3ZlcmJvc2VEZWJ1Z2dpbmcoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAg
fQorCiAgICAgLy8gQ29uc3RydWN0cyBhIG5ldyByZWQtYmxhY2sgdHJlZSwgYWxsb2NhdGluZyB0
ZW1wb3Jhcnkgb2JqZWN0cwogICAgIC8vIGZyb20gYSBuZXdseSBjb25zdHJ1Y3RlZCBQT0RBcmVu
YS4KICAgICBQT0RSZWRCbGFja1RyZWUoKQpAQCAtMTI3LDggKzE0NCwyOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIH5QT0RSZWRCbGFja1RyZWUoKSB7IH0KIAorICAgIC8vIENsZWFyaW5nIHdp
bGwgZGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdHJlZS4gQWZ0ZXIgdGhpcyBjYWxsCisgICAg
Ly8gaXNJbml0aWFsaXplZCB3aWxsIHJldHVybiBmYWxzZS4KKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIG1fYXJlbmEgPSAwOworICAgICAgICBtX3Jvb3QgPSAwOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFtX2FyZW5hOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRJZk5lZWRlZCgpCisgICAgewor
ICAgICAgICBpZiAoIW1fYXJlbmEpCisgICAgICAgICAgICBtX2FyZW5hID0gUE9EQXJlbmE6OmNy
ZWF0ZSgpOworICAgIH0KKwogICAgIHZvaWQgYWRkKGNvbnN0IFQmIGRhdGEpCiAgICAgeworICAg
ICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYXJl
bmEtPmFsbG9jYXRlT2JqZWN0PE5vZGUsIFQ+KGRhdGEpOwogICAgICAgICBpbnNlcnROb2RlKG5v
ZGUpOwogICAgIH0KQEAgLTEzNiw2ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBkYXR1bSB3YXMgZm91bmQgaW4gdGhlIHRyZWUuCiAgICAgYm9vbCByZW1vdmUo
Y29uc3QgVCYgZGF0YSkKICAgICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwog
ICAgICAgICBOb2RlKiBub2RlID0gdHJlZVNlYXJjaChkYXRhKTsKICAgICAgICAgaWYgKG5vZGUp
IHsKICAgICAgICAgICAgIGRlbGV0ZU5vZGUobm9kZSk7CkBAIC0xNDQsMTAgKzE4MiwxNSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIGNvbnRhaW5z
KGNvbnN0IFQmIGRhdGEpIGNvbnN0IHsgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7IH0KKyAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IFQmIGRhdGEpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNJbml0aWFsaXplZCgpKTsKKyAgICAgICAgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7CisgICAg
fQogCiAgICAgdm9pZCB2aXNpdElub3JkZXIoVmlzaXRvciogdmlzaXRvcikgY29uc3QKICAgICB7
CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBpZiAoIW1fcm9vdCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmlzaXRJbm9yZGVySW1wbChtX3Jvb3QsIHZp
c2l0b3IpOwpAQCAtMTU1LDYgKzE5OCw3IEBAIHB1YmxpYzoKIAogICAgIGludCBzaXplKCkgY29u
c3QKICAgICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBDb3Vu
dGVyIGNvdW50ZXI7CiAgICAgICAgIHZpc2l0SW5vcmRlcigmY291bnRlcik7CiAgICAgICAgIHJl
dHVybiBjb3VudGVyLmNvdW50KCk7CkBAIC0xNjgsNiArMjEyLDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBib29sIGNoZWNrSW52YXJpYW50cygpIGNvbnN0CiAgICAgeworICAgICAgICBBU1NF
UlQoaXNJbml0aWFsaXplZCgpKTsKICAgICAgICAgaW50IGJsYWNrQ291bnQ7CiAgICAgICAgIHJl
dHVybiBjaGVja0ludmFyaWFudHNGcm9tTm9kZShtX3Jvb3QsICZibGFja0NvdW50KTsKICAgICB9
CkBAIC0xNzcsNyArMjIyLDggQEAgcHVibGljOgogICAgIC8vIGRlYnVnZ2luZyBwdXJwb3Nlcy4K
ICAgICB2b2lkIGR1bXAoKSBjb25zdAogICAgIHsKLSAgICAgICAgZHVtcEZyb21Ob2RlKG1fcm9v
dCwgMCk7CisgICAgICAgIGlmIChtX2FyZW5hKQorICAgICAgICAgICAgZHVtcEZyb21Ob2RlKG1f
cm9vdCwgMCk7CiAgICAgfQogCiAgICAgLy8gVHVybnMgb24gb3Igb2ZmIHZlcmJvc2UgZGVidWdn
aW5nIG9mIHRoZSB0cmVlLCBjYXVzaW5nIG1hbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCmluZGV4IDI2MzJkZDUuLjQ2MmJlYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjc0LDcgKzI3NCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5CiAgICAgYm9vbCBjYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nID0gIWlzRmxv
YXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYXZvaWRzRmxvYXRzKCk7CiAgICAgaWYgKGRpZmYgPT0g
U3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAm
JiAhY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAmJiBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygp
KSB7CiAgICAgICAgIFJlbmRlckJsb2NrKiBwYXJlbnRCbG9jayA9IHRoaXM7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCiAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50KCk7IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmlldygp
OyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKQEAgLTE0MzYsNyArMTQzNiw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cygpCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVu
ZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVj
dCogciA9ICppdDsKQEAgLTIyOTQsNyArMjI5NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFp
bnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpCiAgICAgLy8gRklY
TUU6IEF2b2lkIGRpc2FibGluZyBMYXlvdXRTdGF0ZS4gQXQgdGhlIHZlcnkgbGVhc3QsIGRvbid0
IGRpc2FibGUgaXQgZm9yIGZsb2F0cyBvcmlnaW5hdGluZwogICAgIC8vIGluIHRoaXMgYmxvY2su
IEJldHRlciB5ZXQgd291bGQgYmUgdG8gcHVzaCBleHRyYSBzdGF0ZSBmb3IgdGhlIGNvbnRhaW5l
cnMgb2Ygb3RoZXIgZmxvYXRzLgogICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVE
aXNhYmxlcih2aWV3KCkpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNl
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAg
ICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAq
aXQ7CkBAIC0yNjI3LDcgKzI2MjcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEZsb2F0cyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0yODc5LDcgKzI4NzksNyBAQCBHYXBSZWN0
cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25z
dCBMYXlvdXRQb2ludCYgcgogICAgICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY2IgPSBjb250
YWluaW5nQmxvY2soKTsgY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKTsgY2IgPSBjYi0+Y29udGFp
bmluZ0Jsb2NrKCkpCiAgICAgICAgICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBh
aW50SW5mbywgSW50UG9pbnQoY2ItPngoKSwgY2ItPnkoKSksIGNiLT5tX3Bvc2l0aW9uZWRPYmpl
Y3RzLmdldCgpKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3IgZmxpcHBlZCB3cml0aW5nIG1vZGVz
LgogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
KyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9
ICppdDsKQEAgLTMxOTAsMTAgKzMxOTAsMTAgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogCiAgICAg
Ly8gQ3JlYXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkg
aGF2ZSBvbmUKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICBtX2Zsb2F0aW5n
T2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMpOworICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIG9i
amVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwor
ICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFz
aFRyYW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCkpCiAgICAgICAgICAgICByZXR1cm4gKml0OwpAQCAtMzIyNCw4ICszMjI0LDcgQEAgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3Qo
UmVuZGVyQm94KiBvKQogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5l
d09iai0+bV9yZW5kZXJlciA9IG87CiAKLSAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VP
YmplY3RzQ291bnQobmV3T2JqLT50eXBlKCkpOwotICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KS5hZGQobmV3T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG5ld09iaik7CiAgICAg
CiAgICAgcmV0dXJuIG5ld09iajsKIH0KQEAgLTMyMzMsOCArMzIzMiw4IEBAIFJlbmRlckJsb2Nr
OjpGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRl
ckJveCogbykKIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJv
eCogbykKIHsKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwot
ICAgICAgICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNl
dC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOworICAg
ICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRy
YW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkp
IHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgaWYg
KGNoaWxkcmVuSW5saW5lKCkpIHsKQEAgLTMyNTksOCArMzI1OCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoMCwgbG9naWNhbEJv
dHRvbSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGVj
cmVhc2VPYmplY3RzQ291bnQoci0+dHlwZSgpKTsKLSAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0
U2V0LnJlbW92ZShpdCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlKHIp
OwogICAgICAgICAgICAgQVNTRVJUKCFyLT5tX29yaWdpbmF0aW5nTGluZSk7CiAgICAgICAgICAg
ICBkZWxldGUgcjsKICAgICAgICAgfQpAQCAtMzI3MiwxMSArMzI3MCwxMCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyhGbG9hdGluZ09iamVjdCogbGFzdEZs
b2F0LCBpbnQgbG9naQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2Jq
ZWN0KiBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpOwogICAgIHdoaWxlIChjdXJyICE9
IGxhc3RGbG9hdCAmJiAoIWN1cnItPmlzUGxhY2VkKCkgfHwgbG9naWNhbFRvcEZvckZsb2F0KGN1
cnIpID49IGxvZ2ljYWxPZmZzZXQpKSB7Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5kZWNy
ZWFzZU9iamVjdHNDb3VudChjdXJyLT50eXBlKCkpOwotICAgICAgICBmbG9hdGluZ09iamVjdFNl
dC5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoY3Vycik7
CiAgICAgICAgIEFTU0VSVCghY3Vyci0+bV9vcmlnaW5hdGluZ0xpbmUpOwogICAgICAgICBkZWxl
dGUgY3VycjsKICAgICAgICAgY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKTsKQEAgLTMy
ODgsNyArMzI4NSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAg
ICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0g
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIGlmIChmbG9hdGluZ09iamVjdFNldC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQwMyw3ICszNDAwLDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICBzZXRMb2dpY2FsVG9w
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3ApOwogICAgICAgICBzZXRMb2dpY2Fs
SGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGls
ZEJveCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5BZnRlckZvckNo
aWxkKGNoaWxkQm94KSk7CiAKLSAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKCk7
CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmpl
Y3QpOwogCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBhaW50
IGl0LgogICAgICAgICBpZiAoY2hpbGRCb3gtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
KQpAQCAtMzUwNSwxMSArMzUwMiwzMCBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNQZXJjZW50SGVp
Z2h0RGVzY2VuZGFudChSZW5kZXJCb3gqIGRlc2NlbmRhbnQpCiB9CiAjZW5kaWYKIAotLy8gRklY
TUU6IFRoZSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUvbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZSBmdW5jdGlvbnMgYXJlIHZlcnkgc2xvdyBpZiB0aGVyZSBhcmUgbWFueSBmbG9hdHMKLS8vIHBy
ZXNlbnQuIFdlIG5lZWQgdG8gYWRkIGEgc3RydWN0dXJlIHRvIGZsb2F0aW5nIG9iamVjdHMgdG8g
cmVwcmVzZW50ICJsaW5lcyIgb2YgZmxvYXRzLiAgVGhlbiBpbnN0ZWFkIG9mIGNoZWNraW5nCi0v
LyBlYWNoIGZsb2F0IGluZGl2aWR1YWxseSwgd2UnZCBqdXN0IHdhbGsgYmFja3dhcmRzIHRocm91
Z2ggdGhlICJsaW5lcyIgYW5kIHN0b3Agd2hlbiB3ZSBoaXQgYSBsaW5lIHRoYXQgaXMgZnVsbHkg
YWJvdmUKLS8vIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgdGhhdCB3ZSdkIGxpa2UgdG8gY2hlY2suICBD
b21wdXRpbmcgdGhlICJsaW5lcyIgd291bGQgYmUgcmF0aGVyIGNvbXBsaWNhdGVkLCBidXQgY291
bGQgcmVwbGFjZSB0aGUgbGVmdAotLy8gb2JqZWN0cyBhbmQgcmlnaHQgb2JqZWN0cyBjb3VudCBo
YWNrIHRoYXQgaXMgY3VycmVudGx5IHVzZWQgaGVyZS4KK3RlbXBsYXRlIDxSZW5kZXJCbG9jazo6
RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+CitpbmxpbmUgdm9pZCBSZW5kZXJC
bG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRUeXBlVmFsdWU+Ojpjb2xsZWN0
SWZOZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBpbnRlcnZhbCkgY29uc3QKK3sKKyAgICBjb25z
dCBGbG9hdGluZ09iamVjdCogciA9IGludGVydmFsLmRhdGEoKTsKKyAgICBpZiAoci0+dHlwZSgp
ID09IEZsb2F0VHlwZVZhbHVlICYmIGludGVydmFsLmxvdygpIDw9IG1fdmFsdWUgJiYgbV92YWx1
ZSA8IGludGVydmFsLmhpZ2goKSkgeworICAgICAgICAvLyBBbGwgdGhlIG9iamVjdHMgcmV0dXJu
ZWQgZnJvbSB0aGUgdHJlZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFjZWQuCisgICAgICAgIEFTU0VS
VChyLT5pc1BsYWNlZCgpICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBt
X3ZhbHVlICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IG1fdmFsdWUp
OworCisgICAgICAgIGlmIChGbG9hdFR5cGVWYWx1ZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRM
ZWZ0IAorICAgICAgICAgICAgJiYgbV9yZW5kZXJlci0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQocikg
PiBtX29mZnNldCkgeworICAgICAgICAgICAgbV9vZmZzZXQgPSBtX3JlbmRlcmVyLT5sb2dpY2Fs
UmlnaHRGb3JGbG9hdChyKTsKKyAgICAgICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAg
ICAgICAgICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90
dG9tRm9yRmxvYXQocikgLSBtX3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZsb2F0
VHlwZVZhbHVlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0CisgICAgICAgICAgICAmJiBt
X3JlbmRlcmVyLT5sb2dpY2FsTGVmdEZvckZsb2F0KHIpIDwgbV9vZmZzZXQpIHsKKyAgICAgICAg
ICAgIG1fb2Zmc2V0ID0gbV9yZW5kZXJlci0+bG9naWNhbExlZnRGb3JGbG9hdChyKTsKKyAgICAg
ICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICAgICAqbV9oZWlnaHRS
ZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQocikgLSBtX3ZhbHVl
OworICAgICAgICB9CisgICAgfQorfQorCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGZpeGVk
T2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5n
KSBjb25zdAogewogICAgIExheW91dFVuaXQgbGVmdCA9IGZpeGVkT2Zmc2V0OwpAQCAtMzUxNywy
MyArMzUzMyw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
TGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuCiAgICAgICAgIGlmIChoZWlnaHRS
ZW1haW5pbmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gMTsKIAotICAgICAgICAv
LyBXZSBrbm93IHRoZSBsaXN0IGlzIG5vbi1lbXB0eSwgc2luY2Ugd2UgaGF2ZSAibGVmdCIgb2Jq
ZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUgd2UgY2FuIGFzc3VtZSB0
aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxlYXN0IG9uZQotICAgICAg
ICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVj
dFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZv
ckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9n
aWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6
RmxvYXRMZWZ0Ci0gICAgICAgICAgICAgICAgJiYgbG9naWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBs
ZWZ0KSB7Ci0gICAgICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBsb2dpY2FsUmlnaHRGb3JG
bG9hdChyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKLSAgICAgICAg
ICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSAt
IGxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGl0ICE9IGJlZ2lu
KTsKKyAgICAgICAgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZs
b2F0TGVmdD4gYWRhcHRlcih0aGlzLCBsb2dpY2FsVG9wLCBsZWZ0LCBoZWlnaHRSZW1haW5pbmcp
OworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJs
YXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgfQogCiAgICAgaWYgKGFwcGx5VGV4dEluZGVu
dCAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTM1NTMsMjQgKzM1
NTQsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VQogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0
cyAmJiBtX2Zsb2F0aW5nT2JqZWN0cy0+aGFzUmlnaHRPYmplY3RzKCkpIHsKICAgICAgICAgaWYg
KGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwotICAg
ICAgICAgICAgCi0gICAgICAgIC8vIFdlIGtub3cgdGhlIGxpc3QgaXMgbm9uLWVtcHR5LCBzaW5j
ZSB3ZSBoYXZlICJyaWdodCIgb2JqZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVy
ZWZvcmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRv
IGF0IGxlYXN0IG9uZQotICAgICAgICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0
LmJlZ2luKCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxh
Y2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJv
dHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUo
KSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodAotICAgICAgICAgICAgICAgICYmIGxvZ2lj
YWxMZWZ0Rm9yRmxvYXQocikgPCByaWdodCkgewotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWlu
KHJpZ2h0LCBsb2dpY2FsTGVmdEZvckZsb2F0KHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoaGVp
Z2h0UmVtYWluaW5nKQotICAgICAgICAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gbG9n
aWNhbEJvdHRvbUZvckZsb2F0KHIpIC0gbG9naWNhbFRvcDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSB3aGlsZSAoaXQgIT0gYmVnaW4pOworCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hB
ZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0PiBhZGFwdGVyKHRoaXMsIGxvZ2ljYWxU
b3AsIHJpZ2h0LCBoZWlnaHRSZW1haW5pbmcpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+
cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAg
fQogICAgIAogICAgIGlmIChhcHBseVRleHRJbmRlbnQgJiYgIXN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSkgewpAQCAtMzU5NSw3ICszNTgxLDcgQEAgaW50IFJlbmRlckJsb2NrOjpu
ZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgaW50IGJvdHRvbSA9IElOVF9NQVg7Ci0gICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwor
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTM2MTIsNyArMzU5OCw3IEBAIGludCBS
ZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBl
IGZsb2F0VHlwZSkgY29uc3QKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBpbnQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwotICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0zNjYwLDcgKzM2NDYsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGRQb3NpdGlvbmVkRmxvYXRzKCkKICAgICAgICAgc2V0TG9naWNhbExlZnRG
b3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbExlZnRGb3JDaGlsZChwb3NpdGlvbmVkT2Jq
ZWN0KSAtIG1hcmdpbkxvZ2ljYWxMZWZ0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkpOwogICAg
ICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3BGb3JD
aGlsZChwb3NpdGlvbmVkT2JqZWN0KSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKHBvc2l0aW9uZWRP
YmplY3QpKTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0
LCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkgKyBtYXJnaW5CZWZvcmVG
b3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQocG9zaXRpb25l
ZE9iamVjdCkpOwotICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7CisK
KyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVj
dCk7CiAgICAgICAgIAogICAgICAgICBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSB0cnVlOwogICAg
IH0KQEAgLTM2NjgsNiArMzY1NSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFBvc2l0aW9uZWRG
bG9hdHMoKQogCiB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3Mg
bGF5b3V0UGFzcykKIHsKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5zZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSk7CisKICAgICAvLyBDbGVhciBvdXIgcG9zaXRpb25lZCBmbG9hdHMgYm9vbGVhbi4K
ICAgICBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSBmYWxzZTsKIApAQCAtMzY4NiwxMCArMzY3Niwx
MCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0
UGFzcykKICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwIGZsb2F0TWFwOwogCiAgICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09i
amVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAg
ICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVj
dFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAg
ICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBmbG9hdE1hcC5hZGQoZi0+bV9yZW5kZXJlciwg
Zik7CiAgICAgICAgICAgICB9CkBAIC0zNzQxLDcgKzM3MzEsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKICAgICAgICAgaW50IGNo
YW5nZUxvZ2ljYWxUb3AgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICAgICAgaW50
IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKICAgICAg
ICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAg
ICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICAgICAgZm9yIChGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CkBA
IC0zODIzLDEwICszODEzLDkgQEAgaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0
cyhSZW5kZXJCbG9jayogY2hpbGQsIGludCBsb2dpY2FsTGVmdE9mZnNldCwKIAogICAgICAgICAg
ICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAg
ICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAgICAg
IG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5n
T2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAKLSAgICAgICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmotPnR5cGUo
KSk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmFkZChmbG9hdGlu
Z09iaik7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09i
aik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobWFr
ZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5k
ZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAtMzg1Myw3ICszODQyLDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5kZXJCb3gqIHJlbmRlcmVyKQog
ICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMgfHwgaGFzQ29sdW1ucygpIHx8ICFwYXJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZmlu
ZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihyZW5kZXJlcik7CiAg
ICAgaWYgKGl0ID09IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zODY5LDcgKzM4NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdG
bG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQogCiAgICAg
bG9naWNhbExlZnRPZmZzZXQgKz0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXJnaW5M
ZWZ0KCkgOiBtYXJnaW5Ub3AoKSk7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgcHJldlNldCA9
IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVj
dFNldCYgcHJldlNldCA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIHByZXZFbmQgPSBwcmV2U2V0LmVuZCgpOwogICAgIGZvciAo
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2SXQgPSBwcmV2U2V0LmJlZ2luKCk7IHByZXZJ
dCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpw
cmV2SXQ7CkBAIC0zODk3LDkgKzM4ODYsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRp
bmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcg
b2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVj
dHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3
IEZsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmlu
Y3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqLT50eXBlKCkpOwotICAgICAgICAgICAgICAg
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQoZmxvYXRpbmdPYmopOworICAgICAgICAgICAg
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQpAQCAtMzk0MCw3ICszOTI4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRh
bnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUKIAogdm9pZCBS
ZW5kZXJCbG9jazo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCgpCiB7Ci0gICAgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVu
ZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KCppdCkgPiBsb2dpY2FsSGVpZ2h0
KCkpIHsKQEAgLTQwOTIsNyArNDA4MCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9h
dHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAg
ICAgIGFkanVzdGVkTG9jYXRpb24gKz0gdG9TaXplKHRvUmVuZGVyVmlldyh0aGlzKS0+ZnJhbWVW
aWV3KCktPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIH0KIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25z
dCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5n
T2JqZWN0U2V0LmJlZ2luKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7IGl0ICE9IGJlZ2luOykgewogICAgICAgICAtLWl0
OwpAQCAtNTY5OSw3ICs1Njg3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVy
Rml0KGludCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQpIGNvbnN0CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBy
ID0gKml0OwpAQCAtNjQ0Myw2ICs2NDMxLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJl
bmRlck5hbWUoKSBjb25zdAogaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6Y2xlYXIoKQogewogICAgIG1fc2V0LmNsZWFyKCk7CisgICAgbV9wbGFjZWRGbG9hdHNUcmVl
LmNsZWFyKCk7CiAgICAgbV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsKICAgICBtX3JpZ2h0T2JqZWN0
c0NvdW50ID0gMDsKICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQgPSAwOwpAQCAtNjQ2OCw2
ICs2NDU3LDcyIEBAIGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmRl
Y3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUCiAgICAgICAgIG1fcG9zaXRpb25l
ZE9iamVjdHNDb3VudC0tOwogfQogCitpbmxpbmUgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
SW50ZXJ2YWwgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9hdGlu
Z09iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgaWYgKG1faG9y
aXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPnkoKSwgZmxvYXRpbmdPYmplY3QtPm1heFko
KSwgZmxvYXRpbmdPYmplY3QpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+eCgpLCBmbG9hdGluZ09iamVjdC0+bWF4WCgpLCBm
bG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6
YWRkUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBB
U1NFUlQoIWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKyAgICAKKyAgICBpZiAo
bV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgbV9wbGFjZWRGbG9h
dHNUcmVlLmFkZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7CisK
KyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7CisjaWZuZGVmIE5ERUJVRwor
ICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc0luUGxhY2VkVHJlZSh0cnVlKTsgICAgICAKKyNlbmRp
ZgorfQorCit2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9i
amVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgQVNTRVJUKGZsb2F0
aW5nT2JqZWN0LT5pc1BsYWNlZCgpICYmIGZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgp
KTsKKworICAgIGlmIChtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKSB7CisgICAg
ICAgIGJvb2wgcmVtb3ZlZCA9IG1fcGxhY2VkRmxvYXRzVHJlZS5yZW1vdmUoaW50ZXJ2YWxGb3JG
bG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
bW92ZWQsIHJlbW92ZWQpOworICAgIH0KKyAgICAKKyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQ
bGFjZWQoZmFsc2UpOworI2lmbmRlZiBOREVCVUcKKyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNJ
blBsYWNlZFRyZWUoZmFsc2UpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIFJlbmRlckJsb2Nr
OjpGbG9hdGluZ09iamVjdHM6OmFkZChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7
CisgICAgaW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7CisgICAg
bV9zZXQuYWRkKGZsb2F0aW5nT2JqZWN0KTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxh
Y2VkKCkpCisgICAgICAgIGFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7Cit9CisKK2lu
bGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZShGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgZGVjcmVhc2VPYmplY3RzQ291bnQoZmxvYXRp
bmdPYmplY3QtPnR5cGUoKSk7CisgICAgbV9zZXQucmVtb3ZlKGZsb2F0aW5nT2JqZWN0KTsKKyAg
ICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgfHwgIWZsb2F0aW5nT2JqZWN0LT5p
c0luUGxhY2VkVHJlZSgpKTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisg
ICAgICAgIHJlbW92ZVBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKQorewor
ICAgIEFTU0VSVCghbV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSk7CisgICAgaWYg
KG1fc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGxhY2VkRmxvYXRzVHJl
ZS5pbml0SWZOZWVkZWQoKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9z
ZXQuYmVnaW4oKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVu
ZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0OworICAgICAgICBtX3BsYWNlZEZsb2F0c1RyZWUuYWRk
KGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKyAgICB9Cit9CisK
IFRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250
ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKICAgICBBU1NFUlQoc3R5bGUpOwpAQCAtNjUwMiw2
ICs2NTU3LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNob3dMaW5lVHJlZUFuZE1hcmsoY29uc3Qg
SW5saW5lQm94KiBtYXJrZWRCb3gxLCBjb25zdCBjaGFyKiBtCiAgICAgICAgIHJvb3QtPnNob3dM
aW5lVHJlZUFuZE1hcmsobWFya2VkQm94MSwgbWFya2VkTGFiZWwxLCBtYXJrZWRCb3gyLCBtYXJr
ZWRMYWJlbDIsIG9iaiwgMSk7CiB9CiAKKy8vIFRoZXNlIGhlbHBlcnMgYXJlIG9ubHkgdXNlZCBi
eSB0aGUgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCitTdHJpbmcgVmFs
dWVUb1N0cmluZzxpbnQ+OjpzdHJpbmcoY29uc3QgaW50IHZhbHVlKQoreworICAgIHJldHVybiBT
dHJpbmc6Om51bWJlcih2YWx1ZSk7Cit9CisKK1N0cmluZyBWYWx1ZVRvU3RyaW5nPFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdCo+OjpzdHJpbmcoY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVw
ICglZHglZCAlZHglZCkiLCBmbG9hdGluZ09iamVjdCwgZmxvYXRpbmdPYmplY3QtPngoKSwgZmxv
YXRpbmdPYmplY3QtPnkoKSwgZmxvYXRpbmdPYmplY3QtPm1heFgoKSwgZmxvYXRpbmdPYmplY3Qt
Pm1heFkoKSk7Cit9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDZjZGYyMGEuLjliNGY3ZmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVm
aW5lIFJlbmRlckJsb2NrX2gKIAogI2luY2x1ZGUgIkdhcFJlY3RzLmgiCisjaW5jbHVkZSAiUE9E
SW50ZXJ2YWxUcmVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGluZUJveExpc3QuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCkBAIC02Nyw2ICs2OCwx
MSBAQCB0eXBlZGVmIHVuc2lnbmVkIFRleHRSdW5GbGFnczsKIGNsYXNzIFJlbmRlckJsb2NrIDog
cHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIExpbmVMYXlvdXRT
dGF0ZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gVXNlZCBieSB0aGUgUE9ESW50ZXJ2YWxUcmVl
IGZvciBkZWJ1Z2dpbmcgdGhlIEZsb2F0aW5nT2JqZWN0LgorICAgIHRlbXBsYXRlIDxjbGFzcz4g
ZnJpZW5kIHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCisKICAgICBSZW5kZXJCbG9jayhO
b2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyQmxvY2soKTsKIApAQCAtNDIyLDYgKzQyOCw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQoZmFsc2UpCiAgICAgICAgICAg
ICAsIG1faXNEZXNjZW5kYW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzUGxhY2VkKGZhbHNl
KQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkK
KyNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsK
ICAgICAgICAgICAgIGlmICh0eXBlID09IExlZnRGbG9hdCkKQEAgLTQ0MSw2ICs0NTAsOSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHR5cGUgIT0gRmxvYXRQb3NpdGlv
bmVkKQogICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKICAgICAgICAgICAgICwg
bV9pc1BsYWNlZCh0cnVlKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxh
Y2VkVHJlZShmYWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDU3LDEz
ICs0NjksMTggQEAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZVJlY3Qud2lkdGgoKTsgfQogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KIAotICAgICAgICB2b2lkIHNldFgoaW50IHgpIHsg
bV9mcmFtZVJlY3Quc2V0WCh4KTsgfQotICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgbV9mcmFt
ZVJlY3Quc2V0WSh5KTsgfQotICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX2Zy
YW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0KLSAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhl
aWdodCkgeyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQorICAgICAgICB2b2lkIHNl
dFgoaW50IHgpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4
KTsgfQorICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgp
KTsgbV9mcmFtZVJlY3Quc2V0WSh5KTsgfQorICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0
aCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0
aCk7IH0KKyAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBBU1NFUlQoIWlzSW5Q
bGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQogCiAgICAgICAg
IGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyBy
ZXR1cm4gbV9mcmFtZVJlY3Q7IH0KLSAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgZnJhbWVSZWN0KSB7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9CisgICAgICAgIHZv
aWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkgeyBBU1NFUlQoIWlzSW5Q
bGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorCisjaWZuZGVmIE5ERUJV
RworICAgICAgICBib29sIGlzSW5QbGFjZWRUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUGxh
Y2VkVHJlZTsgfQorICAgICAgICB2b2lkIHNldElzSW5QbGFjZWRUcmVlKGJvb2wgdmFsdWUpIHsg
bV9pc0luUGxhY2VkVHJlZSA9IHZhbHVlOyB9CisjZW5kaWYKIAogICAgICAgICBSZW5kZXJCb3gq
IG1fcmVuZGVyZXI7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5lOwpA
QCAtNDczLDYgKzQ5MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9zaG91bGRQYWludCA6
IDE7CiAgICAgICAgIGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAxOwogICAgICAgICBib29sIG1faXNQ
bGFjZWQgOiAxOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBtX2lzSW5QbGFjZWRUcmVl
IDogMTsKKyNlbmRpZgogICAgIH07CiAKICAgICBJbnRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5n
TW9kZShjb25zdCBGbG9hdGluZ09iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CkBAIC03
OTksMjggKzgxOSw3NyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxGbG9hdGluZ09iamVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4gRmxvYXRp
bmdPYmplY3RTZXQ7CiAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0
b3IgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKKyAgICB0eXBlZGVmIFBPREludGVydmFsPExh
eW91dFVuaXQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKKyAgICB0
eXBlZGVmIFBPREludGVydmFsVHJlZTxMYXlvdXRVbml0LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0
aW5nT2JqZWN0VHJlZTsKKyAgICAKKyAgICB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUg
RmxvYXRUeXBlVmFsdWU+CisgICAgY2xhc3MgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdEludGVydmFsIEludGVy
dmFsVHlwZTsKKyAgICAgICAgCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyKGNv
bnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgTGF5b3V0VW5pdCB2YWx1ZSwgTGF5b3V0VW5pdCYg
b2Zmc2V0LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1haW5pbmcpCisgICAgICAgICAgICA6IG1fcmVu
ZGVyZXIocmVuZGVyZXIpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgICAg
ICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgbV9oZWlnaHRSZW1haW5pbmcoaGVp
Z2h0UmVtYWluaW5nKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlu
bGluZSBMYXlvdXRVbml0IGxvd1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAg
ICAgICBpbmxpbmUgTGF5b3V0VW5pdCBoaWdoVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisgICAgICAgIHZvaWQgY29sbGVjdElmTmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYpIGNv
bnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1fcmVuZGVy
ZXI7CisgICAgICAgIExheW91dFVuaXQgbV92YWx1ZTsKKyAgICAgICAgTGF5b3V0VW5pdCYgbV9v
ZmZzZXQ7CisgICAgICAgIExheW91dFVuaXQqIG1faGVpZ2h0UmVtYWluaW5nOworICAgIH07CisK
ICAgICBjbGFzcyBGbG9hdGluZ09iamVjdHMgewogICAgIHB1YmxpYzoKLSAgICAgICAgRmxvYXRp
bmdPYmplY3RzKCkKLSAgICAgICAgICAgIDogbV9sZWZ0T2JqZWN0c0NvdW50KDApCisgICAgICAg
IEZsb2F0aW5nT2JqZWN0cyhib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgICAg
IDogbV9wbGFjZWRGbG9hdHNUcmVlKFVuaW5pdGlhbGl6ZWRUcmVlKQorICAgICAgICAgICAgLCBt
X2xlZnRPYmplY3RzQ291bnQoMCkKICAgICAgICAgICAgICwgbV9yaWdodE9iamVjdHNDb3VudCgw
KQogICAgICAgICAgICAgLCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQoMCkKKyAgICAgICAgICAg
ICwgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUoaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQogICAgICAg
ICB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIHZvaWQgaW5j
cmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUpOwotICAgICAgICB2b2lkIGRl
Y3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgdm9pZCBh
ZGQoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCByZW1vdmUoRmxvYXRpbmdPYmplY3Qq
KTsKKyAgICAgICAgdm9pZCBhZGRQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAg
ICAgdm9pZCByZW1vdmVQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9p
ZCBzZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoYm9vbCBiID0gdHJ1ZSkgeyBtX2hvcml6b250YWxX
cml0aW5nTW9kZSA9IGI7IH0KKwogICAgICAgICBib29sIGhhc0xlZnRPYmplY3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9sZWZ0T2JqZWN0c0NvdW50ID4gMDsgfQogICAgICAgICBib29sIGhhc1JpZ2h0
T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRPYmplY3RzQ291bnQgPiAwOyB9CiAgICAg
ICAgIGJvb2wgaGFzUG9zaXRpb25lZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
ZWRPYmplY3RzQ291bnQgPiAwOyB9Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSB7
IHJldHVybiBtX3NldDsgfQotCisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQo
KSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFRy
ZWUmIHBsYWNlZEZsb2F0c1RyZWUoKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wdXRlUGxh
Y2VkRmxvYXRzVHJlZUlmTmVlZGVkKCk7CisgICAgICAgICAgICByZXR1cm4gbV9wbGFjZWRGbG9h
dHNUcmVlOyAKKyAgICAgICAgfQogICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY29tcHV0ZVBs
YWNlZEZsb2F0c1RyZWUoKTsKKyAgICAgICAgaW5saW5lIHZvaWQgY29tcHV0ZVBsYWNlZEZsb2F0
c1RyZWVJZk5lZWRlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9wbGFjZWRGbG9h
dHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgICAgICAgICBjb21wdXRlUGxhY2VkRmxv
YXRzVHJlZSgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQo
RmxvYXRpbmdPYmplY3Q6OlR5cGUpOworICAgICAgICB2b2lkIGRlY3JlYXNlT2JqZWN0c0NvdW50
KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBp
bnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CisKICAgICAgICAgRmxv
YXRpbmdPYmplY3RTZXQgbV9zZXQ7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0VHJlZSBtX3BsYWNl
ZEZsb2F0c1RyZWU7CiAgICAgICAgIHVuc2lnbmVkIG1fbGVmdE9iamVjdHNDb3VudDsKICAgICAg
ICAgdW5zaWduZWQgbV9yaWdodE9iamVjdHNDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9wb3Np
dGlvbmVkT2JqZWN0c0NvdW50OworICAgICAgICBib29sIG1faG9yaXpvbnRhbFdyaXRpbmdNb2Rl
OwogICAgIH07CiAgICAgT3duUHRyPEZsb2F0aW5nT2JqZWN0cz4gbV9mbG9hdGluZ09iamVjdHM7
CiAgICAgCkBAIC04OTUsNiArOTY0LDE2IEBAIGlubGluZSBjb25zdCBSZW5kZXJCbG9jayogdG9S
ZW5kZXJCbG9jayhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIC8vIFRoaXMgd2lsbCBjYXRj
aCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KIHZvaWQgdG9SZW5kZXJCbG9jayhj
b25zdCBSZW5kZXJCbG9jayopOwogCisjaWZuZGVmIE5ERUJVRworLy8gVGhlc2Ugc3RydWN0dXJl
cyBhcmUgdXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK3Rl
bXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPGludD4geworICAgIHN0YXRpYyBTdHJpbmcg
c3RyaW5nKGNvbnN0IGludCB2YWx1ZSk7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVUb1N0
cmluZzxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqPiB7CisgICAgc3RhdGljIFN0cmluZyBz
dHJpbmcoY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kik7Cit9OworI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlckJsb2NrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5k
ZXggNWRjMjdjNi4uNTUwOTYzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC0xMDkxLDcgKzEwOTEsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlLCBJbmxpbgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmpl
Y3RzICYmIGxhc3RSb290Qm94KCkpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBm
bG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAg
IGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGlm
IChsYXlvdXRTdGF0ZS5sYXN0RmxvYXQoKSkgewpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUpCiAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2NrTG9naWNh
bEhlaWdodChsb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwor
ICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICBpZiAobGF5
b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIGJvb2wgUmVuZGVy
QmxvY2s6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0
IElubGluZUJpZGlSCiAKICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+Ymxv
Y2tMb2dpY2FsSGVpZ2h0KCkgKyBhYnMoZGVsdGEpOwogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwpAQCAtMTUyOCw3ICsxNTI4
LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQmlkaVIKIAogICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsQm90dG9tID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsK
IAotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CkBAIC0yNTUw
LDcgKzI1NTAsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZs
b2F0aW5nT2JqZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplYwogICAgIGlmICghbmV3RmxvYXQt
Pm1fcGFnaW5hdGlvblN0cnV0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
KyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKSA9
PSBuZXdGbG9hdCk7CiAKICAgICBpbnQgZmxvYXRMb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckZs
b2F0KG5ld0Zsb2F0KTsKQEAgLTI1NzUsNyArMjU3NSw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBv
c2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09i
amVjCiAgICAgICAgICAgICBpZiAoby0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAgICAg
IHRvUmVuZGVyQmxvY2sobyktPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAg
ICAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmpl
Y3RzLT5yZW1vdmVQbGFjZWRPYmplY3QoZik7CiAgICAgICAgICAgICBzZXRMb2dpY2FsVG9wRm9y
RmxvYXQoZiwgbG9naWNhbFRvcEZvckZsb2F0KGYpICsgZi0+bV9wYWdpbmF0aW9uU3RydXQpOwor
ICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmKTsKICAgICAg
ICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103247</attachid>
            <date>2011-08-08 08:10:04 -0700</date>
            <delta_ts>2011-08-08 08:34:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65668_6.patch</filename>
            <type>text/plain</type>
            <size>52499</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMWFjZjRlMS4uZmM3YmZhMSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMS0wOC0wOCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9i
ZS5jb20+CisKKyAgICAgICAgT3B0aW1pemUgZmxvYXRpbmcgZWxlbWVudHMgbG9va3VwCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0L2Zsb2F0
cy5odG1sOiBBZGRlZCB0aGUgbmVzdGVkIGRpdnMsIHNvIHRoYXQgd2UgY2FuIHRlc3QgdGhlIHBy
b3BhZ2F0aW9uIGltcGFjdCBvZiB0aGUgZmxvYXRzIHRyZWUuCisKIDIwMTEtMDgtMDQgIEFsZXhh
bmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgogCiAgICAgICAgIEFkZCBhIHBlcmZv
cm1hbmNlIHRlc3QgZm9yIGZsb2F0aW5nIGVsZW1lbnRzIGxheW91dCBhbGdvcml0aG0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvTGF5b3V0L2Zsb2F0cy5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKaW5kZXggNjc4MDVkOC4uNTJmOTViYSAxMDA2NDQKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKQEAgLTMwLDEyICszMCwxNyBAQAogICAgICAgICAgICAg
ICAgIHJldHVybiBlbDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gY3Jl
YXRlU2V0KHdpZHRoLCBoZWlnaHQpCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVTZXQod2lk
dGgsIGhlaWdodCwgbmVzdGVkKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZhciBj
b250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBkb2N1bWVudC5ib2R5LCAiY29udGFpbmVy
Iik7CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyArK3gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCJkaXYiLCBjb250YWluZXIsICJmbG9h
dCIsICJmbG9hdCIgKyB4ICsgIl8iICsgeSk7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5l
c3RlZENvbnRhaW5lciA9IGNvbnRhaW5lcjsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggOyBu
ZXN0ZWQgPiAwOyAtLW5lc3RlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZENvbnRh
aW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIG5lc3RlZENvbnRhaW5lciwgIm5lc3RlZCIsICJu
ZXN0ZWQiICsgeCArICJfIiArIG5lc3RlZCk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCJkaXYiLCBjb250YWluZXIsICJmbG9hdC1lbmQi
LCAiZW5kIiArIHgpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDcsMTIg
KzUyLDE0IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjE7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3Qod2lkdGgsIGhlaWdodCkgCisgICAgICAgICAgICBm
dW5jdGlvbiB0ZXN0KHdpZHRoLCBoZWlnaHQsIG5lc3RlZCkgCiAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbmVzdGVkID0gbmVzdGVkIHx8IDA7CisKICAgICAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdF9wYW5lbCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lcmF0ZV9wYW5l
bCIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogCi0gICAgICAgICAgICAgICAgY3JlYXRlU2V0
KHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIGNyZWF0ZVNldCh3aWR0aCwgaGVpZ2h0
LCBuZXN0ZWQpOwogICAgICAgICAgICAgICAgIHZhciB1cGRhdGVzID0gMDsKICAgICAgICAgICAg
ICAgICB2YXIgc3RhcnRUaW1lID0gbmV3IERhdGUoKTsKIApAQCAtOTEsNiArOTgsMTEgQEAKICAg
ICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgyMCwgMTAwKSI+MjAgYnkgMTAwPC9idXR0
b24+CiAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InRlc3QoNTAsIDEwMCkiPjUwIGJ5IDEw
MDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDEwMCwgMTAwKSI+
MTAwIGJ5IDEwMDwvYnV0dG9uPgorICAgICAgICAgICAgPHA+TmVzdGVkIGRpdnM6PC9wPgorICAg
ICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDIsIDEwMCwgMTAwKSI+MiBieSAxMDAsIDEw
MCBuZXN0ZWQ8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgyMCwg
MTAwLCAxMDApIj4yMCBieSAxMDAsIDEwMCBuZXN0ZWQ8L2J1dHRvbj4KKyAgICAgICAgICAgIDxi
dXR0b24gb25jbGljaz0idGVzdCg1MCwgMTAwLCAxMDApIj41MCBieSAxMDAsIDEwMCBuZXN0ZWQ8
L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgxMDAsIDEwMCwgMTAw
KSI+MTAwIGJ5IDEwMCwgMTAwIG5lc3RlZDwvYnV0dG9uPgogICAgICAgICA8L2Rpdj4KICAgICA8
L2JvZHk+CiA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGEyZGNjYWEuLmRlNjlmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wOC0w
OCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5jb20+CisKKyAgICAgICAgT3B0
aW1pemUgZmxvYXRpbmcgZWxlbWVudHMgbG9va3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2OAorCisgICAgICAgIEFkZGVkIGFuIGludGVydmFs
IHRyZWUgaW4gdGhlIEZsb2F0aW5nT2JqZWN0cyBzdHJ1Y3R1cmUuIEFsc28gYWRkZWQgbmV3IG1l
Y2hhbmlzbXMgdG8gbWFrZQorICAgICAgICBzdXJlIHRoZSB0cmVlIGlzIHVwZGF0ZWQgY29ycmVj
dGx5IHdoZW4gYSBmbG9hdCBpcyByZXBvc2l0aW9uZWQuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUg
UE9ESW50ZXJ2YWxUcmVlIHRvIHN1cHBvcnQgZ2l2aW5nIGEgc2VhcmNoIGFkYXB0ZXIgdGhhdCBj
YW4gYmUgaW1wbGVtZW50ZWQgYnkgdGhlCisgICAgICAgIGNsaWVudC4gSSdtIG5vdCBhZGRpbmcg
YSBkaWZmZXJlbnQgYnVnIGZvciB0aGF0IGJlY2F1c2UgUE9ESW50ZXJ2YWxUcmVlIGlzIG5vdCB1
c2VkIGFueXdoZXJlIGVsc2UKKyAgICAgICAgYW5kIHdvdWxkIGJlIGhhcmQgdG8gdGVzdCB0aGF0
IHRoZSBjaGFuZ2UgaXMgbm90IGJyZWFraW5nIGFueXRoaW5nLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFj
dG9yIG9uIHRoZSBmbG9hdGluZyBvYmplY3RzIGRhdGEgc3RydWN0dXJlLgorCisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL1BP
REludGVydmFsVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFw
dGVyOjpQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50
ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFNlYXJjaEFkYXB0ZXI6OmhpZ2hWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFNlYXJjaEFkYXB0ZXI6OmNvbGxlY3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
T0RJbnRlcnZhbFRyZWU6OlBPREludGVydmFsVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJ
bnRlcnZhbFRyZWU6OmFsbE92ZXJsYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFs
VHJlZTo6YWxsT3ZlcmxhcHNXaXRoQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFRyZWU6OnNlYXJjaEZvck92ZXJsYXBzRnJvbSk6CisgICAgICAgICogcGxhdGZvcm0vUE9E
UmVkQmxhY2tUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OlBPRFJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6aXNJbml0aWFsaXplZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmluaXRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRC
bGFja1RyZWU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNv
bnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6dmlzaXRJbm9yZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNoZWNrSW52YXJpYW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpQT0RSZWRCbGFja1RyZWU6OmR1bXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6Ojpj
b2xsZWN0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bmV4
dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFu
Z2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3Zlcmhhbmdp
bmdGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxv
YXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Rmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2
YWxGb3JGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0c1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6OjpzdHJpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3Q6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdDo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0Ojppc0luUGxhY2VkVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldElzSW5QbGFjZWRUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcjo6RmxvYXRJ
bnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6OmhpZ2hWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6c2V0
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdHM6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjpwbGFjZWRGbG9hdHNUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlSWZOZWVkZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKToKKwogMjAxMS0wOC0w
OCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFRoZSBp
bnB1dFt0eXBlPW51bWJlcl0gZWxlbWVudCBzaG91bGQgYmUgYXMgd2lkZSBhcyBuZWNlc3Nhcnkg
dG8gc2hvdyB0aGUgd2lkZXN0IHBvc3NpYmxlIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIxN2QwY2YuLmQ3MGIwYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTEzMzYsNiArMTMzNiwxMCBAQAogCQk1MDFCQUFBOTEzOTUwRTJDMDBGN0FDRUIgLyog
V2luZFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUwMUJBQUE4MTM5NTBFMkMwMEY3QUNFQiAvKiBXaW5kUnVsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwOENDQTRGMTNDRjEwNkIwMDMxNTFG
MyAvKiBSZW5kZXJGbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MDhDQ0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5oICovOyB9OwogCQk1MDhDQ0E1MDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDhD
Q0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgKi87IH07CisJCTUw
OTdDNUEzMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBP
REFyZW5hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTA5N0M1QTQxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDk3QzVBMDEzRUFCQTdFMDAyREU0
QUYgLyogUE9ESW50ZXJ2YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1MDk3QzVBNTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDk3QzVB
MTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTA5N0M1QTYxM0VBQkE3RTAwMkRFNEFG
IC8qIFBPRFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTA5N0M1QTIxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwRTU2
NkQ2MTM5RTM4QzUwMDIxNDQzMyAvKiBDU1NXcmFwU2hhcGVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwMUJBQUIxMTM5NTExNEIwMEY3QUNFQiAv
KiBDU1NXcmFwU2hhcGVzLmNwcCAqLzsgfTsKIAkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8q
IENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwMTg0NkEwQjA4NjAyQTAw
NEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3Bw
ICovOyB9OwpAQCAtNzkzNSw2ICs3OTM5LDEwIEBACiAJCTUwMUJBQUIxMTM5NTExNEIwMEY3QUNF
QiAvKiBDU1NXcmFwU2hhcGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1dyYXBTaGFwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MDhD
Q0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJGbG93VGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUwOENDQTRFMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZsb3dUaHJl
YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzU5RjEzRUFCQTdFMDAy
REU0QUYgLyogUE9EQXJlbmEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9E
QXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1QTAxM0VBQkE3RTAw
MkRFNEFGIC8qIFBPREludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBPREludGVydmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwOTdDNUExMTNF
QUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUE9ESW50ZXJ2YWxUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUwOTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9EUmVkQmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFBhZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hl
ZFBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUGFn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJEMTAzMTY1RUUwMDQ5
RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5MDA0LDYgKzE5MDEyLDEwIEBACiAJCUJDRjFBNUJBMDk3ODMyMDkw
MDYxQTEyMyAvKiBwbGF0Zm9ybSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREFyZW5hLmggKi8sCisJ
CQkJNTA5N0M1QTAxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggKi8sCisJCQkJNTA5
N0M1QTExM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oICovLAorCQkJCTUwOTdD
NUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLywKIAkJCQk0OUU5MTJB
NDBFRkFDOEU2MDA5RDBDQUYgLyogYW5pbWF0aW9uICovLAogCQkJCUZEMzE2MDQwMTJCMDI2QTMw
MEMxQTM1OSAvKiBhdWRpbyAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYxMkQgLyogY2Yg
Ki8sCkBAIC0yMzM0Nyw2ICsyMzM1OSwxMCBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1
OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRTBGMTJGMEZD
OUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUzNzM1MzEz
N0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUwOTdDNUEz
MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTA5N0M1
QTQxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MDk3QzVBNTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MDk3QzVBNjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVy
dmFsVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2YWxUcmVlLmgKaW5k
ZXggNWJmM2RlMC4uOTYyMzNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UE9ESW50ZXJ2YWxUcmVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2
YWxUcmVlLmgKQEAgLTQwLDYgKzQwLDMyIEBAIHRlbXBsYXRlPGNsYXNzIFQ+CiBzdHJ1Y3QgVmFs
dWVUb1N0cmluZzsKICNlbmRpZgogCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVXNlckRhdGEg
PSB2b2lkKj4KK2NsYXNzIFBPREludGVydmFsU2VhcmNoQWRhcHRlciB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBlOworICAgIAorICAg
IFBPREludGVydmFsU2VhcmNoQWRhcHRlcihWZWN0b3I8SW50ZXJ2YWxUeXBlPiYgcmVzdWx0LCBj
b25zdCBUJiBsb3dWYWx1ZSwgY29uc3QgVCYgaGlnaFZhbHVlKQorICAgICAgICA6IG1fcmVzdWx0
KHJlc3VsdCkKKyAgICAgICAgLCBtX2xvd1ZhbHVlKGxvd1ZhbHVlKQorICAgICAgICAsIG1faGln
aFZhbHVlKGhpZ2hWYWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIGxvd1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dWYWx1ZTsgfQorICAgIGNvbnN0IFQmIGhpZ2hWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaFZhbHVlOyB9CisgICAgdm9pZCBjb2xsZWN0SWZOZWVk
ZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBkYXRhKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGRh
dGEub3ZlcmxhcHMobV9sb3dWYWx1ZSwgbV9oaWdoVmFsdWUpKQorICAgICAgICAgICAgbV9yZXN1
bHQuYXBwZW5kKGRhdGEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8SW50ZXJ2YWxU
eXBlPiYgbV9yZXN1bHQ7CisgICAgVCBtX2xvd1ZhbHVlOworICAgIFQgbV9oaWdoVmFsdWU7Cit9
OworCiAvLyBBbiBpbnRlcnZhbCB0cmVlLCB3aGljaCBpcyBhIGZvcm0gb2YgYXVnbWVudGVkIHJl
ZC1ibGFjayB0cmVlLiBJdAogLy8gc3VwcG9ydHMgZWZmaWNpZW50IChPKGxnIG4pKSBpbnNlcnRp
b24sIHJlbW92YWwgYW5kIHF1ZXJ5aW5nIG9mCiAvLyBpbnRlcnZhbHMgaW4gdGhlIHRyZWUuCkBA
IC01MCw3ICs3NiwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVHlwZWRlZiB0byByZWR1Y2UgdHlwaW5n
IHdoZW4gZGVjbGFyaW5nIGludGVydmFscyB0byBiZSBzdG9yZWQgaW4KICAgICAvLyB0aGlzIHRy
ZWUuCiAgICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBlOwor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyPFQsIFVzZXJEYXRhPiBJbnRlcnZh
bFNlYXJjaEFkYXB0ZXJUeXBlOwogCisgICAgUE9ESW50ZXJ2YWxUcmVlKFVuaW5pdGlhbGl6ZWRU
cmVlRW51bSB1bml0aWFsaXplZFRyZWUpCisgICAgICAgIDogUE9EUmVkQmxhY2tUcmVlPEludGVy
dmFsVHlwZT4odW5pdGlhbGl6ZWRUcmVlKQorICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0K
KyAgICAKICAgICBQT0RJbnRlcnZhbFRyZWUoKQogICAgICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJ
bnRlcnZhbFR5cGU+KCkKICAgICB7CkBAIC04MCw3ICsxMTMsMTYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgLy8gRXhwbGljaXQgZGVyZWZlcmVuY2Ugb2YgInRoaXMiIHJlcXVpcmVkIGJlY2F1
c2Ugb2YKICAgICAgICAgLy8gaW5oZXJpdGFuY2UgcnVsZXMgaW4gdGVtcGxhdGUgY2xhc3Nlcy4K
LSAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKHRoaXMtPnJvb3QoKSwgaW50ZXJ2YWwsIHJl
c3VsdCk7CisgICAgICAgIEludGVydmFsU2VhcmNoQWRhcHRlclR5cGUgYWRhcHRlcihyZXN1bHQs
IGludGVydmFsLmxvdygpLCBpbnRlcnZhbC5oaWdoKCkpOworICAgICAgICBzZWFyY2hGb3JPdmVy
bGFwc0Zyb208SW50ZXJ2YWxTZWFyY2hBZGFwdGVyVHlwZT4odGhpcy0+cm9vdCgpLCBhZGFwdGVy
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEFkYXB0ZXJUeXBlPgorICAgIHZv
aWQgYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihBZGFwdGVyVHlwZSYgYWRhcHRlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIEV4cGxpY2l0IGRlcmVmZXJlbmNlIG9mICJ0aGlzIiByZXF1aXJlZCBi
ZWNhdXNlIG9mCisgICAgICAgIC8vIGluaGVyaXRhbmNlIHJ1bGVzIGluIHRlbXBsYXRlIGNsYXNz
ZXMuCisgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4odGhpcy0+cm9v
dCgpLCBhZGFwdGVyKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgdG8gY3JlYXRlIGludGVydmFs
IG9iamVjdHMuCkBAIC0xMTIsNyArMTU0LDggQEAgcHJpdmF0ZToKICAgICAvLyBTdGFydGluZyBm
cm9tIHRoZSBnaXZlbiBub2RlLCBhZGRzIGFsbCBvdmVybGFwcyB3aXRoIHRoZSBnaXZlbgogICAg
IC8vIGludGVydmFsIHRvIHRoZSByZXN1bHQgdmVjdG9yLiBUaGUgaW50ZXJ2YWxzIGFyZSBzb3J0
ZWQgYnkKICAgICAvLyBpbmNyZWFzaW5nIGxvdyBlbmRwb2ludC4KLSAgICB2b2lkIHNlYXJjaEZv
ck92ZXJsYXBzRnJvbShJbnRlcnZhbE5vZGUqIG5vZGUsIGNvbnN0IEludGVydmFsVHlwZSYgaW50
ZXJ2YWwsIFZlY3RvcjxJbnRlcnZhbFR5cGU+JiByZXMpIGNvbnN0CisgICAgdGVtcGxhdGUgPGNs
YXNzIEFkYXB0ZXJUeXBlPgorICAgIHZvaWQgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKEludGVydmFs
Tm9kZSogbm9kZSwgQWRhcHRlclR5cGUmIGFkYXB0ZXIpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjUsMTggKzE2OCwxNyBAQCBwcml2
YXRlOgogICAgICAgICBpZiAobGVmdAogICAgICAgICAgICAgLy8gVGhpcyBpcyBwaHJhc2VkIHRo
aXMgd2F5IHRvIGF2b2lkIHRoZSBuZWVkIGZvciBvcGVyYXRvcgogICAgICAgICAgICAgLy8gPD0g
b24gdHlwZSBULgotICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4SGlnaCgpIDwgaW50
ZXJ2YWwubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKGxlZnQsIGlu
dGVydmFsLCByZXMpOworICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4SGlnaCgpIDwg
YWRhcHRlci5sb3dWYWx1ZSgpKSkKKyAgICAgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxB
ZGFwdGVyVHlwZT4obGVmdCwgYWRhcHRlcik7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJs
YXAgd2l0aCBjdXJyZW50IG5vZGUuCi0gICAgICAgIGlmIChub2RlLT5kYXRhKCkub3ZlcmxhcHMo
aW50ZXJ2YWwpKQotICAgICAgICAgICAgcmVzLmFwcGVuZChub2RlLT5kYXRhKCkpOworICAgICAg
ICBhZGFwdGVyLmNvbGxlY3RJZk5lZWRlZChub2RlLT5kYXRhKCkpOwogCiAgICAgICAgIC8vIFNl
ZSB3aGV0aGVyIHdlIG5lZWQgdG8gdHJhdmVyc2UgdGhlIHJpZ2h0IHN1YnRyZWUuCiAgICAgICAg
IC8vIFRoaXMgaXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVlZCBmb3Igb3BlcmF0
b3IgPD0KICAgICAgICAgLy8gb24gdHlwZSBULgotICAgICAgICBpZiAoIShpbnRlcnZhbC5oaWdo
KCkgPCBub2RlLT5kYXRhKCkubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNG
cm9tKG5vZGUtPnJpZ2h0KCksIGludGVydmFsLCByZXMpOworICAgICAgICBpZiAoIShhZGFwdGVy
LmhpZ2hWYWx1ZSgpIDwgbm9kZS0+ZGF0YSgpLmxvdygpKSkKKyAgICAgICAgICAgIHNlYXJjaEZv
ck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4obm9kZS0+cmlnaHQoKSwgYWRhcHRlcik7CiAgICAg
fQogCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxOb2RlKiBub2RlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAppbmRleCA3ZGQ5ZGRkLi5jODFh
ZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaApAQCAtOTAs
NiArOTAsMTAgQEAgdGVtcGxhdGU8Y2xhc3MgVD4KIHN0cnVjdCBWYWx1ZVRvU3RyaW5nOwogI2Vu
ZGlmCiAKK2VudW0gVW5pbml0aWFsaXplZFRyZWVFbnVtIHsKKyAgICBVbmluaXRpYWxpemVkVHJl
ZQorfTsKKwogdGVtcGxhdGU8Y2xhc3MgVD4KIGNsYXNzIFBPRFJlZEJsYWNrVHJlZSB7CiBwdWJs
aWM6CkBAIC0xMDEsNiArMTA1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+VmlzaXRv
cigpIHsgfQogICAgIH07CiAKKyAgICAvLyBDb25zdHJ1Y3RzIGEgbmV3IHJlZC1ibGFjayB0cmVl
IHdpdGhvdXQgYWxsb2NhdGluZyBhbiBhcmVuYS4KKyAgICAvLyBpc0luaXRpYWxpemVkIHdpbGwg
cmV0dXJuIGZhbHNlIGluIHRoaXMgY2FzZS4gaW5pdElmTmVlZGVkIGNhbiBiZSB1c2VkCisgICAg
Ly8gdG8gaW5pdCB0aGUgc3RydWN0dXJlLiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWZ1bGwgZm9y
IGNyZWF0aW5nCisgICAgLy8gbGF6eSBpbml0aWFsaXplZCB0cmVlLgorICAgIFBPRFJlZEJsYWNr
VHJlZShVbmluaXRpYWxpemVkVHJlZUVudW0pCisgICAgICAgIDogbV9yb290KDApCisgICAgICAg
ICwgbV9uZWVkc0Z1bGxPcmRlcmluZ0NvbXBhcmlzb25zKGZhbHNlKQorI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgLCBtX3ZlcmJvc2VEZWJ1Z2dpbmcoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAg
fQorCiAgICAgLy8gQ29uc3RydWN0cyBhIG5ldyByZWQtYmxhY2sgdHJlZSwgYWxsb2NhdGluZyB0
ZW1wb3Jhcnkgb2JqZWN0cwogICAgIC8vIGZyb20gYSBuZXdseSBjb25zdHJ1Y3RlZCBQT0RBcmVu
YS4KICAgICBQT0RSZWRCbGFja1RyZWUoKQpAQCAtMTI3LDggKzE0NCwyOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIH5QT0RSZWRCbGFja1RyZWUoKSB7IH0KIAorICAgIC8vIENsZWFyaW5nIHdp
bGwgZGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdHJlZS4gQWZ0ZXIgdGhpcyBjYWxsCisgICAg
Ly8gaXNJbml0aWFsaXplZCB3aWxsIHJldHVybiBmYWxzZS4KKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIG1fYXJlbmEgPSAwOworICAgICAgICBtX3Jvb3QgPSAwOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFtX2FyZW5hOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRJZk5lZWRlZCgpCisgICAgewor
ICAgICAgICBpZiAoIW1fYXJlbmEpCisgICAgICAgICAgICBtX2FyZW5hID0gUE9EQXJlbmE6OmNy
ZWF0ZSgpOworICAgIH0KKwogICAgIHZvaWQgYWRkKGNvbnN0IFQmIGRhdGEpCiAgICAgeworICAg
ICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYXJl
bmEtPmFsbG9jYXRlT2JqZWN0PE5vZGUsIFQ+KGRhdGEpOwogICAgICAgICBpbnNlcnROb2RlKG5v
ZGUpOwogICAgIH0KQEAgLTEzNiw2ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBkYXR1bSB3YXMgZm91bmQgaW4gdGhlIHRyZWUuCiAgICAgYm9vbCByZW1vdmUo
Y29uc3QgVCYgZGF0YSkKICAgICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwog
ICAgICAgICBOb2RlKiBub2RlID0gdHJlZVNlYXJjaChkYXRhKTsKICAgICAgICAgaWYgKG5vZGUp
IHsKICAgICAgICAgICAgIGRlbGV0ZU5vZGUobm9kZSk7CkBAIC0xNDQsMTAgKzE4MiwxNSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIGNvbnRhaW5z
KGNvbnN0IFQmIGRhdGEpIGNvbnN0IHsgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7IH0KKyAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IFQmIGRhdGEpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNJbml0aWFsaXplZCgpKTsKKyAgICAgICAgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7CisgICAg
fQogCiAgICAgdm9pZCB2aXNpdElub3JkZXIoVmlzaXRvciogdmlzaXRvcikgY29uc3QKICAgICB7
CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBpZiAoIW1fcm9vdCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmlzaXRJbm9yZGVySW1wbChtX3Jvb3QsIHZp
c2l0b3IpOwpAQCAtMTU1LDYgKzE5OCw3IEBAIHB1YmxpYzoKIAogICAgIGludCBzaXplKCkgY29u
c3QKICAgICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBDb3Vu
dGVyIGNvdW50ZXI7CiAgICAgICAgIHZpc2l0SW5vcmRlcigmY291bnRlcik7CiAgICAgICAgIHJl
dHVybiBjb3VudGVyLmNvdW50KCk7CkBAIC0xNjgsNiArMjEyLDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBib29sIGNoZWNrSW52YXJpYW50cygpIGNvbnN0CiAgICAgeworICAgICAgICBBU1NF
UlQoaXNJbml0aWFsaXplZCgpKTsKICAgICAgICAgaW50IGJsYWNrQ291bnQ7CiAgICAgICAgIHJl
dHVybiBjaGVja0ludmFyaWFudHNGcm9tTm9kZShtX3Jvb3QsICZibGFja0NvdW50KTsKICAgICB9
CkBAIC0xNzcsNyArMjIyLDggQEAgcHVibGljOgogICAgIC8vIGRlYnVnZ2luZyBwdXJwb3Nlcy4K
ICAgICB2b2lkIGR1bXAoKSBjb25zdAogICAgIHsKLSAgICAgICAgZHVtcEZyb21Ob2RlKG1fcm9v
dCwgMCk7CisgICAgICAgIGlmIChtX2FyZW5hKQorICAgICAgICAgICAgZHVtcEZyb21Ob2RlKG1f
cm9vdCwgMCk7CiAgICAgfQogCiAgICAgLy8gVHVybnMgb24gb3Igb2ZmIHZlcmJvc2UgZGVidWdn
aW5nIG9mIHRoZSB0cmVlLCBjYXVzaW5nIG1hbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCmluZGV4IDI2MzJkZDUuLjc4NTBhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjc0LDcgKzI3NCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5CiAgICAgYm9vbCBjYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nID0gIWlzRmxv
YXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYXZvaWRzRmxvYXRzKCk7CiAgICAgaWYgKGRpZmYgPT0g
U3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAm
JiAhY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAmJiBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygp
KSB7CiAgICAgICAgIFJlbmRlckJsb2NrKiBwYXJlbnRCbG9jayA9IHRoaXM7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCiAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50KCk7IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmlldygp
OyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKQEAgLTE0MzYsNyArMTQzNiw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cygpCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVu
ZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVj
dCogciA9ICppdDsKQEAgLTIyOTQsNyArMjI5NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFp
bnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpCiAgICAgLy8gRklY
TUU6IEF2b2lkIGRpc2FibGluZyBMYXlvdXRTdGF0ZS4gQXQgdGhlIHZlcnkgbGVhc3QsIGRvbid0
IGRpc2FibGUgaXQgZm9yIGZsb2F0cyBvcmlnaW5hdGluZwogICAgIC8vIGluIHRoaXMgYmxvY2su
IEJldHRlciB5ZXQgd291bGQgYmUgdG8gcHVzaCBleHRyYSBzdGF0ZSBmb3IgdGhlIGNvbnRhaW5l
cnMgb2Ygb3RoZXIgZmxvYXRzLgogICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVE
aXNhYmxlcih2aWV3KCkpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNl
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAg
ICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAq
aXQ7CkBAIC0yNjI3LDcgKzI2MjcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEZsb2F0cyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0yODc5LDcgKzI4NzksNyBAQCBHYXBSZWN0
cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25z
dCBMYXlvdXRQb2ludCYgcgogICAgICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY2IgPSBjb250
YWluaW5nQmxvY2soKTsgY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKTsgY2IgPSBjYi0+Y29udGFp
bmluZ0Jsb2NrKCkpCiAgICAgICAgICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBh
aW50SW5mbywgSW50UG9pbnQoY2ItPngoKSwgY2ItPnkoKSksIGNiLT5tX3Bvc2l0aW9uZWRPYmpl
Y3RzLmdldCgpKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3IgZmxpcHBlZCB3cml0aW5nIG1vZGVz
LgogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
KyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9
ICppdDsKQEAgLTMxOTAsMTAgKzMxOTAsMTAgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogCiAgICAg
Ly8gQ3JlYXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkg
aGF2ZSBvbmUKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICBtX2Zsb2F0aW5n
T2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMpOworICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIG9i
amVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwor
ICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFz
aFRyYW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCkpCiAgICAgICAgICAgICByZXR1cm4gKml0OwpAQCAtMzIyNCw4ICszMjI0LDcgQEAgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3Qo
UmVuZGVyQm94KiBvKQogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5l
d09iai0+bV9yZW5kZXJlciA9IG87CiAKLSAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VP
YmplY3RzQ291bnQobmV3T2JqLT50eXBlKCkpOwotICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KS5hZGQobmV3T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG5ld09iaik7CiAgICAg
CiAgICAgcmV0dXJuIG5ld09iajsKIH0KQEAgLTMyMzMsOCArMzIzMiw4IEBAIFJlbmRlckJsb2Nr
OjpGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRl
ckJveCogbykKIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJv
eCogbykKIHsKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwot
ICAgICAgICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNl
dC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOworICAg
ICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRy
YW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkp
IHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgaWYg
KGNoaWxkcmVuSW5saW5lKCkpIHsKQEAgLTMyNTksOCArMzI1OCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoMCwgbG9naWNhbEJv
dHRvbSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGVj
cmVhc2VPYmplY3RzQ291bnQoci0+dHlwZSgpKTsKLSAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0
U2V0LnJlbW92ZShpdCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlKHIp
OwogICAgICAgICAgICAgQVNTRVJUKCFyLT5tX29yaWdpbmF0aW5nTGluZSk7CiAgICAgICAgICAg
ICBkZWxldGUgcjsKICAgICAgICAgfQpAQCAtMzI3MiwxMSArMzI3MCwxMCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyhGbG9hdGluZ09iamVjdCogbGFzdEZs
b2F0LCBpbnQgbG9naQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2Jq
ZWN0KiBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpOwogICAgIHdoaWxlIChjdXJyICE9
IGxhc3RGbG9hdCAmJiAoIWN1cnItPmlzUGxhY2VkKCkgfHwgbG9naWNhbFRvcEZvckZsb2F0KGN1
cnIpID49IGxvZ2ljYWxPZmZzZXQpKSB7Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5kZWNy
ZWFzZU9iamVjdHNDb3VudChjdXJyLT50eXBlKCkpOwotICAgICAgICBmbG9hdGluZ09iamVjdFNl
dC5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoY3Vycik7
CiAgICAgICAgIEFTU0VSVCghY3Vyci0+bV9vcmlnaW5hdGluZ0xpbmUpOwogICAgICAgICBkZWxl
dGUgY3VycjsKICAgICAgICAgY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKTsKQEAgLTMy
ODgsNyArMzI4NSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAg
ICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0g
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIGlmIChmbG9hdGluZ09iamVjdFNldC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQwMyw3ICszNDAwLDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICBzZXRMb2dpY2FsVG9w
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3ApOwogICAgICAgICBzZXRMb2dpY2Fs
SGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGls
ZEJveCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5BZnRlckZvckNo
aWxkKGNoaWxkQm94KSk7CiAKLSAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKCk7
CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmpl
Y3QpOwogCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBhaW50
IGl0LgogICAgICAgICBpZiAoY2hpbGRCb3gtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
KQpAQCAtMzUwNSwxMSArMzUwMiwzMCBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNQZXJjZW50SGVp
Z2h0RGVzY2VuZGFudChSZW5kZXJCb3gqIGRlc2NlbmRhbnQpCiB9CiAjZW5kaWYKIAotLy8gRklY
TUU6IFRoZSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUvbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZSBmdW5jdGlvbnMgYXJlIHZlcnkgc2xvdyBpZiB0aGVyZSBhcmUgbWFueSBmbG9hdHMKLS8vIHBy
ZXNlbnQuIFdlIG5lZWQgdG8gYWRkIGEgc3RydWN0dXJlIHRvIGZsb2F0aW5nIG9iamVjdHMgdG8g
cmVwcmVzZW50ICJsaW5lcyIgb2YgZmxvYXRzLiAgVGhlbiBpbnN0ZWFkIG9mIGNoZWNraW5nCi0v
LyBlYWNoIGZsb2F0IGluZGl2aWR1YWxseSwgd2UnZCBqdXN0IHdhbGsgYmFja3dhcmRzIHRocm91
Z2ggdGhlICJsaW5lcyIgYW5kIHN0b3Agd2hlbiB3ZSBoaXQgYSBsaW5lIHRoYXQgaXMgZnVsbHkg
YWJvdmUKLS8vIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgdGhhdCB3ZSdkIGxpa2UgdG8gY2hlY2suICBD
b21wdXRpbmcgdGhlICJsaW5lcyIgd291bGQgYmUgcmF0aGVyIGNvbXBsaWNhdGVkLCBidXQgY291
bGQgcmVwbGFjZSB0aGUgbGVmdAotLy8gb2JqZWN0cyBhbmQgcmlnaHQgb2JqZWN0cyBjb3VudCBo
YWNrIHRoYXQgaXMgY3VycmVudGx5IHVzZWQgaGVyZS4KK3RlbXBsYXRlIDxSZW5kZXJCbG9jazo6
RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+CitpbmxpbmUgdm9pZCBSZW5kZXJC
bG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRUeXBlVmFsdWU+Ojpjb2xsZWN0
SWZOZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBpbnRlcnZhbCkgY29uc3QKK3sKKyAgICBjb25z
dCBGbG9hdGluZ09iamVjdCogciA9IGludGVydmFsLmRhdGEoKTsKKyAgICBpZiAoci0+dHlwZSgp
ID09IEZsb2F0VHlwZVZhbHVlICYmIGludGVydmFsLmxvdygpIDw9IG1fdmFsdWUgJiYgbV92YWx1
ZSA8IGludGVydmFsLmhpZ2goKSkgeworICAgICAgICAvLyBBbGwgdGhlIG9iamVjdHMgcmV0dXJu
ZWQgZnJvbSB0aGUgdHJlZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFjZWQuCisgICAgICAgIEFTU0VS
VChyLT5pc1BsYWNlZCgpICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBt
X3ZhbHVlICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IG1fdmFsdWUp
OworCisgICAgICAgIGlmIChGbG9hdFR5cGVWYWx1ZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRM
ZWZ0IAorICAgICAgICAgICAgJiYgbV9yZW5kZXJlci0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQocikg
PiBtX29mZnNldCkgeworICAgICAgICAgICAgbV9vZmZzZXQgPSBtX3JlbmRlcmVyLT5sb2dpY2Fs
UmlnaHRGb3JGbG9hdChyKTsKKyAgICAgICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAg
ICAgICAgICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90
dG9tRm9yRmxvYXQocikgLSBtX3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZsb2F0
VHlwZVZhbHVlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0CisgICAgICAgICAgICAmJiBt
X3JlbmRlcmVyLT5sb2dpY2FsTGVmdEZvckZsb2F0KHIpIDwgbV9vZmZzZXQpIHsKKyAgICAgICAg
ICAgIG1fb2Zmc2V0ID0gbV9yZW5kZXJlci0+bG9naWNhbExlZnRGb3JGbG9hdChyKTsKKyAgICAg
ICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICAgICAqbV9oZWlnaHRS
ZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQocikgLSBtX3ZhbHVl
OworICAgICAgICB9CisgICAgfQorfQorCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGZpeGVk
T2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5n
KSBjb25zdAogewogICAgIExheW91dFVuaXQgbGVmdCA9IGZpeGVkT2Zmc2V0OwpAQCAtMzUxNywy
MyArMzUzMyw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
TGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuCiAgICAgICAgIGlmIChoZWlnaHRS
ZW1haW5pbmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gMTsKIAotICAgICAgICAv
LyBXZSBrbm93IHRoZSBsaXN0IGlzIG5vbi1lbXB0eSwgc2luY2Ugd2UgaGF2ZSAibGVmdCIgb2Jq
ZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUgd2UgY2FuIGFzc3VtZSB0
aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxlYXN0IG9uZQotICAgICAg
ICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVj
dFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZv
ckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9n
aWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6
RmxvYXRMZWZ0Ci0gICAgICAgICAgICAgICAgJiYgbG9naWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBs
ZWZ0KSB7Ci0gICAgICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBsb2dpY2FsUmlnaHRGb3JG
bG9hdChyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKLSAgICAgICAg
ICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSAt
IGxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGl0ICE9IGJlZ2lu
KTsKKyAgICAgICAgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZs
b2F0TGVmdD4gYWRhcHRlcih0aGlzLCBsb2dpY2FsVG9wLCBsZWZ0LCBoZWlnaHRSZW1haW5pbmcp
OworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJs
YXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgfQogCiAgICAgaWYgKGFwcGx5VGV4dEluZGVu
dCAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTM1NTMsMjQgKzM1
NTQsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VQogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0
cyAmJiBtX2Zsb2F0aW5nT2JqZWN0cy0+aGFzUmlnaHRPYmplY3RzKCkpIHsKICAgICAgICAgaWYg
KGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwotICAg
ICAgICAgICAgCi0gICAgICAgIC8vIFdlIGtub3cgdGhlIGxpc3QgaXMgbm9uLWVtcHR5LCBzaW5j
ZSB3ZSBoYXZlICJyaWdodCIgb2JqZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVy
ZWZvcmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRv
IGF0IGxlYXN0IG9uZQotICAgICAgICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0
LmJlZ2luKCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxh
Y2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJv
dHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUo
KSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodAotICAgICAgICAgICAgICAgICYmIGxvZ2lj
YWxMZWZ0Rm9yRmxvYXQocikgPCByaWdodCkgewotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWlu
KHJpZ2h0LCBsb2dpY2FsTGVmdEZvckZsb2F0KHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoaGVp
Z2h0UmVtYWluaW5nKQotICAgICAgICAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gbG9n
aWNhbEJvdHRvbUZvckZsb2F0KHIpIC0gbG9naWNhbFRvcDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSB3aGlsZSAoaXQgIT0gYmVnaW4pOworCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hB
ZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0PiBhZGFwdGVyKHRoaXMsIGxvZ2ljYWxU
b3AsIHJpZ2h0LCBoZWlnaHRSZW1haW5pbmcpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+
cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAg
fQogICAgIAogICAgIGlmIChhcHBseVRleHRJbmRlbnQgJiYgIXN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSkgewpAQCAtMzU5NSw3ICszNTgxLDcgQEAgaW50IFJlbmRlckJsb2NrOjpu
ZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgaW50IGJvdHRvbSA9IElOVF9NQVg7Ci0gICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwor
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTM2MTIsNyArMzU5OCw3IEBAIGludCBS
ZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBl
IGZsb2F0VHlwZSkgY29uc3QKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBpbnQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwotICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0zNjYwLDcgKzM2NDYsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGRQb3NpdGlvbmVkRmxvYXRzKCkKICAgICAgICAgc2V0TG9naWNhbExlZnRG
b3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbExlZnRGb3JDaGlsZChwb3NpdGlvbmVkT2Jq
ZWN0KSAtIG1hcmdpbkxvZ2ljYWxMZWZ0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkpOwogICAg
ICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3BGb3JD
aGlsZChwb3NpdGlvbmVkT2JqZWN0KSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKHBvc2l0aW9uZWRP
YmplY3QpKTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0
LCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkgKyBtYXJnaW5CZWZvcmVG
b3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQocG9zaXRpb25l
ZE9iamVjdCkpOwotICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7CisK
KyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVj
dCk7CiAgICAgICAgIAogICAgICAgICBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSB0cnVlOwogICAg
IH0KQEAgLTM2NjgsNiArMzY1NSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFBvc2l0aW9uZWRG
bG9hdHMoKQogCiB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3Mg
bGF5b3V0UGFzcykKIHsKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5zZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSk7CisKICAgICAvLyBDbGVhciBvdXIgcG9zaXRpb25lZCBmbG9hdHMgYm9vbGVhbi4K
ICAgICBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSBmYWxzZTsKIApAQCAtMzY4NiwxMCArMzY3Niwx
MCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0
UGFzcykKICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwIGZsb2F0TWFwOwogCiAgICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09i
amVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAg
ICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVj
dFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAg
ICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBmbG9hdE1hcC5hZGQoZi0+bV9yZW5kZXJlciwg
Zik7CiAgICAgICAgICAgICB9CkBAIC0zNzQxLDcgKzM3MzEsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKICAgICAgICAgaW50IGNo
YW5nZUxvZ2ljYWxUb3AgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICAgICAgaW50
IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKICAgICAg
ICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAg
ICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICAgICAgZm9yIChGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CkBA
IC0zODIzLDEwICszODEzLDkgQEAgaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0
cyhSZW5kZXJCbG9jayogY2hpbGQsIGludCBsb2dpY2FsTGVmdE9mZnNldCwKIAogICAgICAgICAg
ICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAg
ICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAgICAg
IG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5n
T2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAKLSAgICAgICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmotPnR5cGUo
KSk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmFkZChmbG9hdGlu
Z09iaik7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09i
aik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobWFr
ZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5k
ZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAtMzg1Myw3ICszODQyLDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5kZXJCb3gqIHJlbmRlcmVyKQog
ICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMgfHwgaGFzQ29sdW1ucygpIHx8ICFwYXJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZmlu
ZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihyZW5kZXJlcik7CiAg
ICAgaWYgKGl0ID09IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zODY5LDcgKzM4NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdG
bG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQogCiAgICAg
bG9naWNhbExlZnRPZmZzZXQgKz0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXJnaW5M
ZWZ0KCkgOiBtYXJnaW5Ub3AoKSk7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgcHJldlNldCA9
IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVj
dFNldCYgcHJldlNldCA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIHByZXZFbmQgPSBwcmV2U2V0LmVuZCgpOwogICAgIGZvciAo
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2SXQgPSBwcmV2U2V0LmJlZ2luKCk7IHByZXZJ
dCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpw
cmV2SXQ7CkBAIC0zODk3LDkgKzM4ODYsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRp
bmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcg
b2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVj
dHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3
IEZsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmlu
Y3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqLT50eXBlKCkpOwotICAgICAgICAgICAgICAg
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQoZmxvYXRpbmdPYmopOworICAgICAgICAgICAg
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQpAQCAtMzk0MCw3ICszOTI4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRh
bnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUKIAogdm9pZCBS
ZW5kZXJCbG9jazo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCgpCiB7Ci0gICAgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVu
ZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KCppdCkgPiBsb2dpY2FsSGVpZ2h0
KCkpIHsKQEAgLTQwOTIsNyArNDA4MCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9h
dHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAg
ICAgIGFkanVzdGVkTG9jYXRpb24gKz0gdG9TaXplKHRvUmVuZGVyVmlldyh0aGlzKS0+ZnJhbWVW
aWV3KCktPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIH0KIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25z
dCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5n
T2JqZWN0U2V0LmJlZ2luKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7IGl0ICE9IGJlZ2luOykgewogICAgICAgICAtLWl0
OwpAQCAtNTY5OSw3ICs1Njg3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVy
Rml0KGludCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQpIGNvbnN0CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBy
ID0gKml0OwpAQCAtNjQ0Myw2ICs2NDMxLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJl
bmRlck5hbWUoKSBjb25zdAogaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6Y2xlYXIoKQogewogICAgIG1fc2V0LmNsZWFyKCk7CisgICAgbV9wbGFjZWRGbG9hdHNUcmVl
LmNsZWFyKCk7CiAgICAgbV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsKICAgICBtX3JpZ2h0T2JqZWN0
c0NvdW50ID0gMDsKICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQgPSAwOwpAQCAtNjQ2OCw2
ICs2NDU3LDczIEBAIGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmRl
Y3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUCiAgICAgICAgIG1fcG9zaXRpb25l
ZE9iamVjdHNDb3VudC0tOwogfQogCitpbmxpbmUgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
SW50ZXJ2YWwgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9hdGlu
Z09iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgaWYgKG1faG9y
aXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPnkoKSwgZmxvYXRpbmdPYmplY3QtPm1heFko
KSwgZmxvYXRpbmdPYmplY3QpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+eCgpLCBmbG9hdGluZ09iamVjdC0+bWF4WCgpLCBm
bG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6
YWRkUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBB
U1NFUlQoIWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKyAgICAKKyAgICBpZiAo
bV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgbV9wbGFjZWRGbG9h
dHNUcmVlLmFkZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7CisK
KyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7CisjaWZuZGVmIE5ERUJVRwor
ICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc0luUGxhY2VkVHJlZSh0cnVlKTsgICAgICAKKyNlbmRp
ZgorfQorCit2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9i
amVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgQVNTRVJUKGZsb2F0
aW5nT2JqZWN0LT5pc1BsYWNlZCgpICYmIGZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgp
KTsKKworICAgIGlmIChtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKSB7CisgICAg
ICAgIGJvb2wgcmVtb3ZlZCA9IG1fcGxhY2VkRmxvYXRzVHJlZS5yZW1vdmUoaW50ZXJ2YWxGb3JG
bG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
bW92ZWQsIHJlbW92ZWQpOworICAgIH0KKyAgICAKKyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQ
bGFjZWQoZmFsc2UpOworI2lmbmRlZiBOREVCVUcKKyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNJ
blBsYWNlZFRyZWUoZmFsc2UpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIFJlbmRlckJsb2Nr
OjpGbG9hdGluZ09iamVjdHM6OmFkZChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7
CisgICAgaW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7CisgICAg
bV9zZXQuYWRkKGZsb2F0aW5nT2JqZWN0KTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxh
Y2VkKCkpCisgICAgICAgIGFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7Cit9CisKK2lu
bGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZShGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgZGVjcmVhc2VPYmplY3RzQ291bnQoZmxvYXRp
bmdPYmplY3QtPnR5cGUoKSk7CisgICAgbV9zZXQucmVtb3ZlKGZsb2F0aW5nT2JqZWN0KTsKKyAg
ICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgfHwgIWZsb2F0aW5nT2JqZWN0LT5p
c0luUGxhY2VkVHJlZSgpKTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisg
ICAgICAgIHJlbW92ZVBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKQorewor
ICAgIEFTU0VSVCghbV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSk7CisgICAgaWYg
KG1fc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGxhY2VkRmxvYXRzVHJl
ZS5pbml0SWZOZWVkZWQoKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9z
ZXQuYmVnaW4oKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVu
ZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0OworICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlz
UGxhY2VkKCkpCisgICAgICAgICAgICBtX3BsYWNlZEZsb2F0c1RyZWUuYWRkKGludGVydmFsRm9y
RmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKyAgICB9Cit9CisKIFRleHRSdW4gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBG
b250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5G
bGFncyBmbGFncykKIHsKICAgICBBU1NFUlQoc3R5bGUpOwpAQCAtNjUwMiw2ICs2NTU4LDE3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnNob3dMaW5lVHJlZUFuZE1hcmsoY29uc3QgSW5saW5lQm94KiBt
YXJrZWRCb3gxLCBjb25zdCBjaGFyKiBtCiAgICAgICAgIHJvb3QtPnNob3dMaW5lVHJlZUFuZE1h
cmsobWFya2VkQm94MSwgbWFya2VkTGFiZWwxLCBtYXJrZWRCb3gyLCBtYXJrZWRMYWJlbDIsIG9i
aiwgMSk7CiB9CiAKKy8vIFRoZXNlIGhlbHBlcnMgYXJlIG9ubHkgdXNlZCBieSB0aGUgUE9ESW50
ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCitTdHJpbmcgVmFsdWVUb1N0cmluZzxp
bnQ+OjpzdHJpbmcoY29uc3QgaW50IHZhbHVlKQoreworICAgIHJldHVybiBTdHJpbmc6Om51bWJl
cih2YWx1ZSk7Cit9CisKK1N0cmluZyBWYWx1ZVRvU3RyaW5nPFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdCo+OjpzdHJpbmcoY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBmbG9h
dGluZ09iamVjdCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVwICglZHglZCAlZHgl
ZCkiLCBmbG9hdGluZ09iamVjdCwgZmxvYXRpbmdPYmplY3QtPngoKSwgZmxvYXRpbmdPYmplY3Qt
PnkoKSwgZmxvYXRpbmdPYmplY3QtPm1heFgoKSwgZmxvYXRpbmdPYmplY3QtPm1heFkoKSk7Cit9
CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCmluZGV4IDZjZGYyMGEuLjliNGY3ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFJlbmRlckJs
b2NrX2gKIAogI2luY2x1ZGUgIkdhcFJlY3RzLmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJveExpc3Qu
aCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCkBAIC02Nyw2ICs2OCwxMSBAQCB0eXBlZGVm
IHVuc2lnbmVkIFRleHRSdW5GbGFnczsKIGNsYXNzIFJlbmRlckJsb2NrIDogcHVibGljIFJlbmRl
ckJveCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIExpbmVMYXlvdXRTdGF0ZTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgLy8gVXNlZCBieSB0aGUgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dp
bmcgdGhlIEZsb2F0aW5nT2JqZWN0LgorICAgIHRlbXBsYXRlIDxjbGFzcz4gZnJpZW5kIHN0cnVj
dCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCisKICAgICBSZW5kZXJCbG9jayhOb2RlKik7CiAgICAg
dmlydHVhbCB+UmVuZGVyQmxvY2soKTsKIApAQCAtNDIyLDYgKzQyOCw5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNEZXNj
ZW5kYW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzUGxhY2VkKGZhbHNlKQorI2lmbmRlZiBO
REVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKKyNlbmRpZgogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsKICAgICAgICAgICAg
IGlmICh0eXBlID09IExlZnRGbG9hdCkKQEAgLTQ0MSw2ICs0NTAsOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHR5cGUgIT0gRmxvYXRQb3NpdGlvbmVkKQogICAgICAg
ICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc1BsYWNlZCh0
cnVlKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxz
ZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDU3LDEzICs0NjksMTggQEAg
cHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Qu
d2lkdGgoKTsgfQogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3QuaGVpZ2h0KCk7IH0KIAotICAgICAgICB2b2lkIHNldFgoaW50IHgpIHsgbV9mcmFtZVJlY3Qu
c2V0WCh4KTsgfQotICAgICAgICB2b2lkIHNldFkoaW50IHkpIHsgbV9mcmFtZVJlY3Quc2V0WSh5
KTsgfQotICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX2ZyYW1lUmVjdC5zZXRX
aWR0aCh3aWR0aCk7IH0KLSAgICAgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBtX2Zy
YW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQorICAgICAgICB2b2lkIHNldFgoaW50IHgpIHsg
QVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4KTsgfQorICAgICAg
ICB2b2lkIHNldFkoaW50IHkpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJl
Y3Quc2V0WSh5KTsgfQorICAgICAgICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBBU1NFUlQo
IWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICAg
ICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkp
OyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQogCiAgICAgICAgIGNvbnN0IEludFJl
Y3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFt
ZVJlY3Q7IH0KLSAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgZnJhbWVS
ZWN0KSB7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9CisgICAgICAgIHZvaWQgc2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkp
OyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorCisjaWZuZGVmIE5ERUJVRworICAgICAgICBi
b29sIGlzSW5QbGFjZWRUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUGxhY2VkVHJlZTsgfQor
ICAgICAgICB2b2lkIHNldElzSW5QbGFjZWRUcmVlKGJvb2wgdmFsdWUpIHsgbV9pc0luUGxhY2Vk
VHJlZSA9IHZhbHVlOyB9CisjZW5kaWYKIAogICAgICAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7
CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5lOwpAQCAtNDczLDYgKzQ5
MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9zaG91bGRQYWludCA6IDE7CiAgICAgICAg
IGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAxOwogICAgICAgICBib29sIG1faXNQbGFjZWQgOiAxOwor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBtX2lzSW5QbGFjZWRUcmVlIDogMTsKKyNlbmRp
ZgogICAgIH07CiAKICAgICBJbnRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShjb25zdCBG
bG9hdGluZ09iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CkBAIC03OTksMjggKzgxOSw3
NyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxGbG9hdGluZ09i
amVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4gRmxvYXRpbmdPYmplY3RTZXQ7
CiAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0b3IgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvcjsKKyAgICB0eXBlZGVmIFBPREludGVydmFsPExheW91dFVuaXQsIEZs
b2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKKyAgICB0eXBlZGVmIFBPRElu
dGVydmFsVHJlZTxMYXlvdXRVbml0LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2JqZWN0VHJl
ZTsKKyAgICAKKyAgICB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFs
dWU+CisgICAgY2xhc3MgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdEludGVydmFsIEludGVydmFsVHlwZTsKKyAg
ICAgICAgCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyKGNvbnN0IFJlbmRlckJs
b2NrKiByZW5kZXJlciwgTGF5b3V0VW5pdCB2YWx1ZSwgTGF5b3V0VW5pdCYgb2Zmc2V0LCBMYXlv
dXRVbml0KiBoZWlnaHRSZW1haW5pbmcpCisgICAgICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVy
ZXIpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgICAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKKyAgICAgICAgICAgICwgbV9oZWlnaHRSZW1haW5pbmcoaGVpZ2h0UmVtYWluaW5n
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlubGluZSBMYXlvdXRV
bml0IGxvd1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBpbmxpbmUg
TGF5b3V0VW5pdCBoaWdoVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAg
IHZvaWQgY29sbGVjdElmTmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYpIGNvbnN0OworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1fcmVuZGVyZXI7CisgICAgICAg
IExheW91dFVuaXQgbV92YWx1ZTsKKyAgICAgICAgTGF5b3V0VW5pdCYgbV9vZmZzZXQ7CisgICAg
ICAgIExheW91dFVuaXQqIG1faGVpZ2h0UmVtYWluaW5nOworICAgIH07CisKICAgICBjbGFzcyBG
bG9hdGluZ09iamVjdHMgewogICAgIHB1YmxpYzoKLSAgICAgICAgRmxvYXRpbmdPYmplY3RzKCkK
LSAgICAgICAgICAgIDogbV9sZWZ0T2JqZWN0c0NvdW50KDApCisgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0cyhib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgICAgIDogbV9wbGFjZWRG
bG9hdHNUcmVlKFVuaW5pdGlhbGl6ZWRUcmVlKQorICAgICAgICAgICAgLCBtX2xlZnRPYmplY3Rz
Q291bnQoMCkKICAgICAgICAgICAgICwgbV9yaWdodE9iamVjdHNDb3VudCgwKQogICAgICAgICAg
ICAgLCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQoMCkKKyAgICAgICAgICAgICwgbV9ob3Jpem9u
dGFsV3JpdGluZ01vZGUoaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQogICAgICAgICB7CiAgICAgICAg
IH0KIAogICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VPYmplY3Rz
Q291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUpOwotICAgICAgICB2b2lkIGRlY3JlYXNlT2JqZWN0
c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgdm9pZCBhZGQoRmxvYXRpbmdP
YmplY3QqKTsKKyAgICAgICAgdm9pZCByZW1vdmUoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAg
dm9pZCBhZGRQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCByZW1v
dmVQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKKyAgICAgICAgdm9pZCBzZXRIb3Jpem9u
dGFsV3JpdGluZ01vZGUoYm9vbCBiID0gdHJ1ZSkgeyBtX2hvcml6b250YWxXcml0aW5nTW9kZSA9
IGI7IH0KKwogICAgICAgICBib29sIGhhc0xlZnRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9s
ZWZ0T2JqZWN0c0NvdW50ID4gMDsgfQogICAgICAgICBib29sIGhhc1JpZ2h0T2JqZWN0cygpIGNv
bnN0IHsgcmV0dXJuIG1fcmlnaHRPYmplY3RzQ291bnQgPiAwOyB9CiAgICAgICAgIGJvb2wgaGFz
UG9zaXRpb25lZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uZWRPYmplY3RzQ291
bnQgPiAwOyB9Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSB7IHJldHVybiBtX3Nl
dDsgfQotCisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSBjb25zdCB7IHJl
dHVybiBtX3NldDsgfQorICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFRyZWUmIHBsYWNlZEZs
b2F0c1RyZWUoKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wdXRlUGxhY2VkRmxvYXRzVHJl
ZUlmTmVlZGVkKCk7CisgICAgICAgICAgICByZXR1cm4gbV9wbGFjZWRGbG9hdHNUcmVlOyAKKyAg
ICAgICAgfQogICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY29tcHV0ZVBsYWNlZEZsb2F0c1Ry
ZWUoKTsKKyAgICAgICAgaW5saW5lIHZvaWQgY29tcHV0ZVBsYWNlZEZsb2F0c1RyZWVJZk5lZWRl
ZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5p
dGlhbGl6ZWQoKSkKKyAgICAgICAgICAgICAgICBjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgpOwor
ICAgICAgICB9CisgICAgICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmpl
Y3Q6OlR5cGUpOworICAgICAgICB2b2lkIGRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2Jq
ZWN0OjpUeXBlKTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBpbnRlcnZhbEZvckZs
b2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CisKICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXQgbV9zZXQ7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0VHJlZSBtX3BsYWNlZEZsb2F0c1RyZWU7
CiAgICAgICAgIHVuc2lnbmVkIG1fbGVmdE9iamVjdHNDb3VudDsKICAgICAgICAgdW5zaWduZWQg
bV9yaWdodE9iamVjdHNDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbmVkT2JqZWN0
c0NvdW50OworICAgICAgICBib29sIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlOwogICAgIH07CiAg
ICAgT3duUHRyPEZsb2F0aW5nT2JqZWN0cz4gbV9mbG9hdGluZ09iamVjdHM7CiAgICAgCkBAIC04
OTUsNiArOTY0LDE2IEBAIGlubGluZSBjb25zdCBSZW5kZXJCbG9jayogdG9SZW5kZXJCbG9jayhj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9p
bmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KIHZvaWQgdG9SZW5kZXJCbG9jayhjb25zdCBSZW5kZXJC
bG9jayopOwogCisjaWZuZGVmIE5ERUJVRworLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNlZCBi
eSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK3RlbXBsYXRlIDw+IHN0
cnVjdCBWYWx1ZVRvU3RyaW5nPGludD4geworICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0
IGludCB2YWx1ZSk7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3QqPiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3Qg
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kik7Cit9OworI2VuZGlmCisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlckJsb2NrX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggNWRjMjdjNi4u
NTUwOTYzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCkBAIC0xMDkxLDcgKzEwOTEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJ
bmxpbgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIGxhc3RS
b290Qm94KCkpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVj
dFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0
ZS5sYXN0RmxvYXQoKSkgewpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCiAgICAg
ICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2NrTG9naWNhbEhlaWdodChsb2dp
Y2FsSGVpZ2h0KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICBjb25z
dCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGlu
Z09iamVjdFNldC5iZWdpbigpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVu
ZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFz
dEZsb2F0KCkpIHsKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNo
ZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlS
CiAKICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+YmxvY2tMb2dpY2FsSGVp
Z2h0KCkgKyBhYnMoZGVsdGEpOwogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmVuZCgpOwogICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwpAQCAtMTUyOCw3ICsxNTI4LDcgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwg
Y29uc3QgSW5saW5lQmlkaVIKIAogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0g
bGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CkBAIC0yNTUwLDcgKzI1NTAsNyBA
QCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0
KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplYwogICAgIGlmICghbmV3RmxvYXQtPm1fcGFnaW5hdGlv
blN0cnV0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBm
bG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CiAgICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKSA9PSBuZXdGbG9hdCk7
CiAKICAgICBpbnQgZmxvYXRMb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KG5ld0Zsb2F0
KTsKQEAgLTI1NzUsNyArMjU3NSw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3Rmxv
YXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjCiAgICAgICAg
ICAgICBpZiAoby0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxv
Y2sobyktPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgby0+
bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmVQ
bGFjZWRPYmplY3QoZik7CiAgICAgICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoZiwgbG9n
aWNhbFRvcEZvckZsb2F0KGYpICsgZi0+bV9wYWdpbmF0aW9uU3RydXQpOworICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmKTsKICAgICAgICAgfQogICAgIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103252</attachid>
            <date>2011-08-08 08:34:10 -0700</date>
            <delta_ts>2011-08-08 11:09:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65668_7.patch</filename>
            <type>text/plain</type>
            <size>52494</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMWFjZjRlMS4uZmM3YmZhMSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMS0wOC0wOCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9i
ZS5jb20+CisKKyAgICAgICAgT3B0aW1pemUgZmxvYXRpbmcgZWxlbWVudHMgbG9va3VwCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0L2Zsb2F0
cy5odG1sOiBBZGRlZCB0aGUgbmVzdGVkIGRpdnMsIHNvIHRoYXQgd2UgY2FuIHRlc3QgdGhlIHBy
b3BhZ2F0aW9uIGltcGFjdCBvZiB0aGUgZmxvYXRzIHRyZWUuCisKIDIwMTEtMDgtMDQgIEFsZXhh
bmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgogCiAgICAgICAgIEFkZCBhIHBlcmZv
cm1hbmNlIHRlc3QgZm9yIGZsb2F0aW5nIGVsZW1lbnRzIGxheW91dCBhbGdvcml0aG0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvTGF5b3V0L2Zsb2F0cy5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKaW5kZXggNjc4MDVkOC4uNTJmOTViYSAxMDA2NDQKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwKQEAgLTMwLDEyICszMCwxNyBAQAogICAgICAgICAgICAg
ICAgIHJldHVybiBlbDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gY3Jl
YXRlU2V0KHdpZHRoLCBoZWlnaHQpCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVTZXQod2lk
dGgsIGhlaWdodCwgbmVzdGVkKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZhciBj
b250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBkb2N1bWVudC5ib2R5LCAiY29udGFpbmVy
Iik7CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyArK3gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCJkaXYiLCBjb250YWluZXIsICJmbG9h
dCIsICJmbG9hdCIgKyB4ICsgIl8iICsgeSk7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5l
c3RlZENvbnRhaW5lciA9IGNvbnRhaW5lcjsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggOyBu
ZXN0ZWQgPiAwOyAtLW5lc3RlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZENvbnRh
aW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIG5lc3RlZENvbnRhaW5lciwgIm5lc3RlZCIsICJu
ZXN0ZWQiICsgeCArICJfIiArIG5lc3RlZCk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCJkaXYiLCBjb250YWluZXIsICJmbG9hdC1lbmQi
LCAiZW5kIiArIHgpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDcsMTIg
KzUyLDE0IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjE7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3Qod2lkdGgsIGhlaWdodCkgCisgICAgICAgICAgICBm
dW5jdGlvbiB0ZXN0KHdpZHRoLCBoZWlnaHQsIG5lc3RlZCkgCiAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbmVzdGVkID0gbmVzdGVkIHx8IDA7CisKICAgICAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdF9wYW5lbCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lcmF0ZV9wYW5l
bCIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogCi0gICAgICAgICAgICAgICAgY3JlYXRlU2V0
KHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIGNyZWF0ZVNldCh3aWR0aCwgaGVpZ2h0
LCBuZXN0ZWQpOwogICAgICAgICAgICAgICAgIHZhciB1cGRhdGVzID0gMDsKICAgICAgICAgICAg
ICAgICB2YXIgc3RhcnRUaW1lID0gbmV3IERhdGUoKTsKIApAQCAtOTEsNiArOTgsMTEgQEAKICAg
ICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgyMCwgMTAwKSI+MjAgYnkgMTAwPC9idXR0
b24+CiAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InRlc3QoNTAsIDEwMCkiPjUwIGJ5IDEw
MDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDEwMCwgMTAwKSI+
MTAwIGJ5IDEwMDwvYnV0dG9uPgorICAgICAgICAgICAgPHA+TmVzdGVkIGRpdnM6PC9wPgorICAg
ICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDIsIDEwMCwgMTAwKSI+MiBieSAxMDAsIDEw
MCBuZXN0ZWQ8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgyMCwg
MTAwLCAxMDApIj4yMCBieSAxMDAsIDEwMCBuZXN0ZWQ8L2J1dHRvbj4KKyAgICAgICAgICAgIDxi
dXR0b24gb25jbGljaz0idGVzdCg1MCwgMTAwLCAxMDApIj41MCBieSAxMDAsIDEwMCBuZXN0ZWQ8
L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCgxMDAsIDEwMCwgMTAw
KSI+MTAwIGJ5IDEwMCwgMTAwIG5lc3RlZDwvYnV0dG9uPgogICAgICAgICA8L2Rpdj4KICAgICA8
L2JvZHk+CiA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGEyZGNjYWEuLmRlNjlmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wOC0w
OCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5jb20+CisKKyAgICAgICAgT3B0
aW1pemUgZmxvYXRpbmcgZWxlbWVudHMgbG9va3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2OAorCisgICAgICAgIEFkZGVkIGFuIGludGVydmFs
IHRyZWUgaW4gdGhlIEZsb2F0aW5nT2JqZWN0cyBzdHJ1Y3R1cmUuIEFsc28gYWRkZWQgbmV3IG1l
Y2hhbmlzbXMgdG8gbWFrZQorICAgICAgICBzdXJlIHRoZSB0cmVlIGlzIHVwZGF0ZWQgY29ycmVj
dGx5IHdoZW4gYSBmbG9hdCBpcyByZXBvc2l0aW9uZWQuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUg
UE9ESW50ZXJ2YWxUcmVlIHRvIHN1cHBvcnQgZ2l2aW5nIGEgc2VhcmNoIGFkYXB0ZXIgdGhhdCBj
YW4gYmUgaW1wbGVtZW50ZWQgYnkgdGhlCisgICAgICAgIGNsaWVudC4gSSdtIG5vdCBhZGRpbmcg
YSBkaWZmZXJlbnQgYnVnIGZvciB0aGF0IGJlY2F1c2UgUE9ESW50ZXJ2YWxUcmVlIGlzIG5vdCB1
c2VkIGFueXdoZXJlIGVsc2UKKyAgICAgICAgYW5kIHdvdWxkIGJlIGhhcmQgdG8gdGVzdCB0aGF0
IHRoZSBjaGFuZ2UgaXMgbm90IGJyZWFraW5nIGFueXRoaW5nLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFj
dG9yIG9uIHRoZSBmbG9hdGluZyBvYmplY3RzIGRhdGEgc3RydWN0dXJlLgorCisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL1BP
REludGVydmFsVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFw
dGVyOjpQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50
ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFNlYXJjaEFkYXB0ZXI6OmhpZ2hWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFNlYXJjaEFkYXB0ZXI6OmNvbGxlY3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
T0RJbnRlcnZhbFRyZWU6OlBPREludGVydmFsVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJ
bnRlcnZhbFRyZWU6OmFsbE92ZXJsYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFs
VHJlZTo6YWxsT3ZlcmxhcHNXaXRoQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRl
cnZhbFRyZWU6OnNlYXJjaEZvck92ZXJsYXBzRnJvbSk6CisgICAgICAgICogcGxhdGZvcm0vUE9E
UmVkQmxhY2tUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OlBPRFJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6aXNJbml0aWFsaXplZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmluaXRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRC
bGFja1RyZWU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNv
bnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6dmlzaXRJbm9yZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmNoZWNrSW52YXJpYW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpQT0RSZWRCbGFja1RyZWU6OmR1bXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6Ojpj
b2xsZWN0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bmV4
dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFu
Z2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3Zlcmhhbmdp
bmdGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxv
YXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Rmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2
YWxGb3JGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0c1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6OjpzdHJpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3Q6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdDo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0Ojppc0luUGxhY2VkVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldElzSW5QbGFjZWRUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcjo6RmxvYXRJ
bnRlcnZhbFNlYXJjaEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6OmhpZ2hWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6c2V0
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdHM6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjpwbGFjZWRGbG9hdHNUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlSWZOZWVkZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKToKKwogMjAxMS0wOC0w
OCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFRoZSBp
bnB1dFt0eXBlPW51bWJlcl0gZWxlbWVudCBzaG91bGQgYmUgYXMgd2lkZSBhcyBuZWNlc3Nhcnkg
dG8gc2hvdyB0aGUgd2lkZXN0IHBvc3NpYmxlIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIxN2QwY2YuLmQ3MGIwYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTEzMzYsNiArMTMzNiwxMCBAQAogCQk1MDFCQUFBOTEzOTUwRTJDMDBGN0FDRUIgLyog
V2luZFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUwMUJBQUE4MTM5NTBFMkMwMEY3QUNFQiAvKiBXaW5kUnVsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwOENDQTRGMTNDRjEwNkIwMDMxNTFG
MyAvKiBSZW5kZXJGbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MDhDQ0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5oICovOyB9OwogCQk1MDhDQ0E1MDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDhD
Q0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgKi87IH07CisJCTUw
OTdDNUEzMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBP
REFyZW5hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTA5N0M1QTQxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDk3QzVBMDEzRUFCQTdFMDAyREU0
QUYgLyogUE9ESW50ZXJ2YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1MDk3QzVBNTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDk3QzVB
MTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTA5N0M1QTYxM0VBQkE3RTAwMkRFNEFG
IC8qIFBPRFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTA5N0M1QTIxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwRTU2
NkQ2MTM5RTM4QzUwMDIxNDQzMyAvKiBDU1NXcmFwU2hhcGVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwMUJBQUIxMTM5NTExNEIwMEY3QUNFQiAv
KiBDU1NXcmFwU2hhcGVzLmNwcCAqLzsgfTsKIAkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8q
IENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwMTg0NkEwQjA4NjAyQTAw
NEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3Bw
ICovOyB9OwpAQCAtNzkzNSw2ICs3OTM5LDEwIEBACiAJCTUwMUJBQUIxMTM5NTExNEIwMEY3QUNF
QiAvKiBDU1NXcmFwU2hhcGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1dyYXBTaGFwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MDhD
Q0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJGbG93VGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUwOENDQTRFMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZsb3dUaHJl
YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzU5RjEzRUFCQTdFMDAy
REU0QUYgLyogUE9EQXJlbmEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9E
QXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1QTAxM0VBQkE3RTAw
MkRFNEFGIC8qIFBPREludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBPREludGVydmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwOTdDNUExMTNF
QUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUE9ESW50ZXJ2YWxUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUwOTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9EUmVkQmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFBhZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hl
ZFBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUGFn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJEMTAzMTY1RUUwMDQ5
RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5MDA0LDYgKzE5MDEyLDEwIEBACiAJCUJDRjFBNUJBMDk3ODMyMDkw
MDYxQTEyMyAvKiBwbGF0Zm9ybSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREFyZW5hLmggKi8sCisJ
CQkJNTA5N0M1QTAxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggKi8sCisJCQkJNTA5
N0M1QTExM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oICovLAorCQkJCTUwOTdD
NUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLywKIAkJCQk0OUU5MTJB
NDBFRkFDOEU2MDA5RDBDQUYgLyogYW5pbWF0aW9uICovLAogCQkJCUZEMzE2MDQwMTJCMDI2QTMw
MEMxQTM1OSAvKiBhdWRpbyAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYxMkQgLyogY2Yg
Ki8sCkBAIC0yMzM0Nyw2ICsyMzM1OSwxMCBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1
OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRTBGMTJGMEZD
OUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUzNzM1MzEz
N0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUwOTdDNUEz
MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTA5N0M1
QTQxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MDk3QzVBNTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MDk3QzVBNjEzRUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVy
dmFsVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2YWxUcmVlLmgKaW5k
ZXggNWJmM2RlMC4uOTYyMzNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UE9ESW50ZXJ2YWxUcmVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2
YWxUcmVlLmgKQEAgLTQwLDYgKzQwLDMyIEBAIHRlbXBsYXRlPGNsYXNzIFQ+CiBzdHJ1Y3QgVmFs
dWVUb1N0cmluZzsKICNlbmRpZgogCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVXNlckRhdGEg
PSB2b2lkKj4KK2NsYXNzIFBPREludGVydmFsU2VhcmNoQWRhcHRlciB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBlOworICAgIAorICAg
IFBPREludGVydmFsU2VhcmNoQWRhcHRlcihWZWN0b3I8SW50ZXJ2YWxUeXBlPiYgcmVzdWx0LCBj
b25zdCBUJiBsb3dWYWx1ZSwgY29uc3QgVCYgaGlnaFZhbHVlKQorICAgICAgICA6IG1fcmVzdWx0
KHJlc3VsdCkKKyAgICAgICAgLCBtX2xvd1ZhbHVlKGxvd1ZhbHVlKQorICAgICAgICAsIG1faGln
aFZhbHVlKGhpZ2hWYWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIGxvd1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dWYWx1ZTsgfQorICAgIGNvbnN0IFQmIGhpZ2hWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaFZhbHVlOyB9CisgICAgdm9pZCBjb2xsZWN0SWZOZWVk
ZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBkYXRhKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGRh
dGEub3ZlcmxhcHMobV9sb3dWYWx1ZSwgbV9oaWdoVmFsdWUpKQorICAgICAgICAgICAgbV9yZXN1
bHQuYXBwZW5kKGRhdGEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8SW50ZXJ2YWxU
eXBlPiYgbV9yZXN1bHQ7CisgICAgVCBtX2xvd1ZhbHVlOworICAgIFQgbV9oaWdoVmFsdWU7Cit9
OworCiAvLyBBbiBpbnRlcnZhbCB0cmVlLCB3aGljaCBpcyBhIGZvcm0gb2YgYXVnbWVudGVkIHJl
ZC1ibGFjayB0cmVlLiBJdAogLy8gc3VwcG9ydHMgZWZmaWNpZW50IChPKGxnIG4pKSBpbnNlcnRp
b24sIHJlbW92YWwgYW5kIHF1ZXJ5aW5nIG9mCiAvLyBpbnRlcnZhbHMgaW4gdGhlIHRyZWUuCkBA
IC01MCw3ICs3NiwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVHlwZWRlZiB0byByZWR1Y2UgdHlwaW5n
IHdoZW4gZGVjbGFyaW5nIGludGVydmFscyB0byBiZSBzdG9yZWQgaW4KICAgICAvLyB0aGlzIHRy
ZWUuCiAgICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxULCBVc2VyRGF0YT4gSW50ZXJ2YWxUeXBlOwor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyPFQsIFVzZXJEYXRhPiBJbnRlcnZh
bFNlYXJjaEFkYXB0ZXJUeXBlOwogCisgICAgUE9ESW50ZXJ2YWxUcmVlKFVuaW5pdGlhbGl6ZWRU
cmVlRW51bSB1bml0aWFsaXplZFRyZWUpCisgICAgICAgIDogUE9EUmVkQmxhY2tUcmVlPEludGVy
dmFsVHlwZT4odW5pdGlhbGl6ZWRUcmVlKQorICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0K
KyAgICAKICAgICBQT0RJbnRlcnZhbFRyZWUoKQogICAgICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJ
bnRlcnZhbFR5cGU+KCkKICAgICB7CkBAIC04MCw3ICsxMTMsMTYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgLy8gRXhwbGljaXQgZGVyZWZlcmVuY2Ugb2YgInRoaXMiIHJlcXVpcmVkIGJlY2F1
c2Ugb2YKICAgICAgICAgLy8gaW5oZXJpdGFuY2UgcnVsZXMgaW4gdGVtcGxhdGUgY2xhc3Nlcy4K
LSAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKHRoaXMtPnJvb3QoKSwgaW50ZXJ2YWwsIHJl
c3VsdCk7CisgICAgICAgIEludGVydmFsU2VhcmNoQWRhcHRlclR5cGUgYWRhcHRlcihyZXN1bHQs
IGludGVydmFsLmxvdygpLCBpbnRlcnZhbC5oaWdoKCkpOworICAgICAgICBzZWFyY2hGb3JPdmVy
bGFwc0Zyb208SW50ZXJ2YWxTZWFyY2hBZGFwdGVyVHlwZT4odGhpcy0+cm9vdCgpLCBhZGFwdGVy
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEFkYXB0ZXJUeXBlPgorICAgIHZv
aWQgYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihBZGFwdGVyVHlwZSYgYWRhcHRlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIEV4cGxpY2l0IGRlcmVmZXJlbmNlIG9mICJ0aGlzIiByZXF1aXJlZCBi
ZWNhdXNlIG9mCisgICAgICAgIC8vIGluaGVyaXRhbmNlIHJ1bGVzIGluIHRlbXBsYXRlIGNsYXNz
ZXMuCisgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4odGhpcy0+cm9v
dCgpLCBhZGFwdGVyKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgdG8gY3JlYXRlIGludGVydmFs
IG9iamVjdHMuCkBAIC0xMTIsNyArMTU0LDggQEAgcHJpdmF0ZToKICAgICAvLyBTdGFydGluZyBm
cm9tIHRoZSBnaXZlbiBub2RlLCBhZGRzIGFsbCBvdmVybGFwcyB3aXRoIHRoZSBnaXZlbgogICAg
IC8vIGludGVydmFsIHRvIHRoZSByZXN1bHQgdmVjdG9yLiBUaGUgaW50ZXJ2YWxzIGFyZSBzb3J0
ZWQgYnkKICAgICAvLyBpbmNyZWFzaW5nIGxvdyBlbmRwb2ludC4KLSAgICB2b2lkIHNlYXJjaEZv
ck92ZXJsYXBzRnJvbShJbnRlcnZhbE5vZGUqIG5vZGUsIGNvbnN0IEludGVydmFsVHlwZSYgaW50
ZXJ2YWwsIFZlY3RvcjxJbnRlcnZhbFR5cGU+JiByZXMpIGNvbnN0CisgICAgdGVtcGxhdGUgPGNs
YXNzIEFkYXB0ZXJUeXBlPgorICAgIHZvaWQgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKEludGVydmFs
Tm9kZSogbm9kZSwgQWRhcHRlclR5cGUmIGFkYXB0ZXIpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjUsMTggKzE2OCwxNyBAQCBwcml2
YXRlOgogICAgICAgICBpZiAobGVmdAogICAgICAgICAgICAgLy8gVGhpcyBpcyBwaHJhc2VkIHRo
aXMgd2F5IHRvIGF2b2lkIHRoZSBuZWVkIGZvciBvcGVyYXRvcgogICAgICAgICAgICAgLy8gPD0g
b24gdHlwZSBULgotICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4SGlnaCgpIDwgaW50
ZXJ2YWwubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKGxlZnQsIGlu
dGVydmFsLCByZXMpOworICAgICAgICAgICAgJiYgIShsZWZ0LT5kYXRhKCkubWF4SGlnaCgpIDwg
YWRhcHRlci5sb3dWYWx1ZSgpKSkKKyAgICAgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbTxB
ZGFwdGVyVHlwZT4obGVmdCwgYWRhcHRlcik7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJs
YXAgd2l0aCBjdXJyZW50IG5vZGUuCi0gICAgICAgIGlmIChub2RlLT5kYXRhKCkub3ZlcmxhcHMo
aW50ZXJ2YWwpKQotICAgICAgICAgICAgcmVzLmFwcGVuZChub2RlLT5kYXRhKCkpOworICAgICAg
ICBhZGFwdGVyLmNvbGxlY3RJZk5lZWRlZChub2RlLT5kYXRhKCkpOwogCiAgICAgICAgIC8vIFNl
ZSB3aGV0aGVyIHdlIG5lZWQgdG8gdHJhdmVyc2UgdGhlIHJpZ2h0IHN1YnRyZWUuCiAgICAgICAg
IC8vIFRoaXMgaXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVlZCBmb3Igb3BlcmF0
b3IgPD0KICAgICAgICAgLy8gb24gdHlwZSBULgotICAgICAgICBpZiAoIShpbnRlcnZhbC5oaWdo
KCkgPCBub2RlLT5kYXRhKCkubG93KCkpKQotICAgICAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNG
cm9tKG5vZGUtPnJpZ2h0KCksIGludGVydmFsLCByZXMpOworICAgICAgICBpZiAoIShhZGFwdGVy
LmhpZ2hWYWx1ZSgpIDwgbm9kZS0+ZGF0YSgpLmxvdygpKSkKKyAgICAgICAgICAgIHNlYXJjaEZv
ck92ZXJsYXBzRnJvbTxBZGFwdGVyVHlwZT4obm9kZS0+cmlnaHQoKSwgYWRhcHRlcik7CiAgICAg
fQogCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxOb2RlKiBub2RlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAppbmRleCA3ZGQ5ZGRkLi4yN2I0
MzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaApAQCAtOTAs
NiArOTAsMTAgQEAgdGVtcGxhdGU8Y2xhc3MgVD4KIHN0cnVjdCBWYWx1ZVRvU3RyaW5nOwogI2Vu
ZGlmCiAKK2VudW0gVW5pbml0aWFsaXplZFRyZWVFbnVtIHsKKyAgICBVbmluaXRpYWxpemVkVHJl
ZQorfTsKKwogdGVtcGxhdGU8Y2xhc3MgVD4KIGNsYXNzIFBPRFJlZEJsYWNrVHJlZSB7CiBwdWJs
aWM6CkBAIC0xMDEsNiArMTA1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+VmlzaXRv
cigpIHsgfQogICAgIH07CiAKKyAgICAvLyBDb25zdHJ1Y3RzIGEgbmV3IHJlZC1ibGFjayB0cmVl
IHdpdGhvdXQgYWxsb2NhdGluZyBhbiBhcmVuYS4KKyAgICAvLyBpc0luaXRpYWxpemVkIHdpbGwg
cmV0dXJuIGZhbHNlIGluIHRoaXMgY2FzZS4gaW5pdElmTmVlZGVkIGNhbiBiZSB1c2VkCisgICAg
Ly8gdG8gaW5pdCB0aGUgc3RydWN0dXJlLiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWZ1bGwgZm9y
IGNyZWF0aW5nCisgICAgLy8gbGF6eSBpbml0aWFsaXplZCB0cmVlLgorICAgIFBPRFJlZEJsYWNr
VHJlZShVbmluaXRpYWxpemVkVHJlZUVudW0pCisgICAgICAgIDogbV9yb290KDApCisgICAgICAg
ICwgbV9uZWVkc0Z1bGxPcmRlcmluZ0NvbXBhcmlzb25zKGZhbHNlKQorI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgLCBtX3ZlcmJvc2VEZWJ1Z2dpbmcoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAg
fQorCiAgICAgLy8gQ29uc3RydWN0cyBhIG5ldyByZWQtYmxhY2sgdHJlZSwgYWxsb2NhdGluZyB0
ZW1wb3Jhcnkgb2JqZWN0cwogICAgIC8vIGZyb20gYSBuZXdseSBjb25zdHJ1Y3RlZCBQT0RBcmVu
YS4KICAgICBQT0RSZWRCbGFja1RyZWUoKQpAQCAtMTI3LDggKzE0NCwyOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIH5QT0RSZWRCbGFja1RyZWUoKSB7IH0KIAorICAgIC8vIENsZWFyaW5nIHdp
bGwgZGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdHJlZS4gQWZ0ZXIgdGhpcyBjYWxsCisgICAg
Ly8gaXNJbml0aWFsaXplZCB3aWxsIHJldHVybiBmYWxzZS4KKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIG1fYXJlbmEgPSAwOworICAgICAgICBtX3Jvb3QgPSAwOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fYXJlbmE7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdElmTmVlZGVkKCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9hcmVuYSkKKyAgICAgICAgICAgIG1fYXJlbmEgPSBQT0RBcmVuYTo6Y3Jl
YXRlKCk7CisgICAgfQorCiAgICAgdm9pZCBhZGQoY29uc3QgVCYgZGF0YSkKICAgICB7CisgICAg
ICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBOb2RlKiBub2RlID0gbV9hcmVu
YS0+YWxsb2NhdGVPYmplY3Q8Tm9kZSwgVD4oZGF0YSk7CiAgICAgICAgIGluc2VydE5vZGUobm9k
ZSk7CiAgICAgfQpAQCAtMTM2LDYgKzE3Myw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGRhdHVtIHdhcyBmb3VuZCBpbiB0aGUgdHJlZS4KICAgICBib29sIHJlbW92ZShj
b25zdCBUJiBkYXRhKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7CiAg
ICAgICAgIE5vZGUqIG5vZGUgPSB0cmVlU2VhcmNoKGRhdGEpOwogICAgICAgICBpZiAobm9kZSkg
ewogICAgICAgICAgICAgZGVsZXRlTm9kZShub2RlKTsKQEAgLTE0NCwxMCArMTgyLDE1IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgVCYgZGF0YSkgY29uc3QgeyByZXR1cm4gdHJlZVNlYXJjaChkYXRhKTsgfQorICAgIGJv
b2wgY29udGFpbnMoY29uc3QgVCYgZGF0YSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c0luaXRpYWxpemVkKCkpOworICAgICAgICByZXR1cm4gdHJlZVNlYXJjaChkYXRhKTsKKyAgICB9
CiAKICAgICB2b2lkIHZpc2l0SW5vcmRlcihWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7CiAgICAgICAgIGlmICghbV9yb290KQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB2aXNpdElub3JkZXJJbXBsKG1fcm9vdCwgdmlz
aXRvcik7CkBAIC0xNTUsNiArMTk4LDcgQEAgcHVibGljOgogCiAgICAgaW50IHNpemUoKSBjb25z
dAogICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7CiAgICAgICAgIENvdW50
ZXIgY291bnRlcjsKICAgICAgICAgdmlzaXRJbm9yZGVyKCZjb3VudGVyKTsKICAgICAgICAgcmV0
dXJuIGNvdW50ZXIuY291bnQoKTsKQEAgLTE2OCw2ICsyMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgY2hlY2tJbnZhcmlhbnRzKCkgY29uc3QKICAgICB7CisgICAgICAgIEFTU0VS
VChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBpbnQgYmxhY2tDb3VudDsKICAgICAgICAgcmV0
dXJuIGNoZWNrSW52YXJpYW50c0Zyb21Ob2RlKG1fcm9vdCwgJmJsYWNrQ291bnQpOwogICAgIH0K
QEAgLTE3Nyw3ICsyMjIsOCBAQCBwdWJsaWM6CiAgICAgLy8gZGVidWdnaW5nIHB1cnBvc2VzLgog
ICAgIHZvaWQgZHVtcCgpIGNvbnN0CiAgICAgewotICAgICAgICBkdW1wRnJvbU5vZGUobV9yb290
LCAwKTsKKyAgICAgICAgaWYgKG1fYXJlbmEpCisgICAgICAgICAgICBkdW1wRnJvbU5vZGUobV9y
b290LCAwKTsKICAgICB9CiAKICAgICAvLyBUdXJucyBvbiBvciBvZmYgdmVyYm9zZSBkZWJ1Z2dp
bmcgb2YgdGhlIHRyZWUsIGNhdXNpbmcgbWFueQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKaW5kZXggMjYzMmRkNS4uMzcwYzIyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0yNzQsNyArMjc0LDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHkKICAgICBib29sIGNhblByb3BhZ2F0ZUZsb2F0SW50b1NpYmxpbmcgPSAhaXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpICYmICFhdm9pZHNGbG9hdHMoKTsKICAgICBpZiAoZGlmZiA9PSBT
dHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgc19jYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nICYm
ICFjYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nICYmIGhhc092ZXJoYW5naW5nRmxvYXRzKCkp
IHsKICAgICAgICAgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrID0gdGhpczsKLSAgICAgICAgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAKICAgICAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQoKTsgY3VyciAmJiAhY3Vyci0+aXNSZW5kZXJWaWV3KCk7
IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewpAQCAtMTQzNiw3ICsxNDM2LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCkKICAgICBpZiAoIW1fZmxvYXRpbmdPYmpl
Y3RzKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwog
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiByID0gKml0OwpAQCAtMjI5NCw3ICsyMjk0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWlu
dE92ZXJoYW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cykKICAgICAvLyBGSVhN
RTogQXZvaWQgZGlzYWJsaW5nIExheW91dFN0YXRlLiBBdCB0aGUgdmVyeSBsZWFzdCwgZG9uJ3Qg
ZGlzYWJsZSBpdCBmb3IgZmxvYXRzIG9yaWdpbmF0aW5nCiAgICAgLy8gaW4gdGhpcyBibG9jay4g
QmV0dGVyIHlldCB3b3VsZCBiZSB0byBwdXNoIGV4dHJhIHN0YXRlIGZvciB0aGUgY29udGFpbmVy
cyBvZiBvdGhlciBmbG9hdHMuCiAgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURp
c2FibGVyKHZpZXcoKSk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpp
dDsKQEAgLTI2MjcsNyArMjYyNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgaWYg
KCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAg
IGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBp
dCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTI4NzksNyArMjg3OSw3IEBAIEdhcFJlY3Rz
IFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0
IExheW91dFBvaW50JiByCiAgICAgICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBjYiA9IGNvbnRh
aW5pbmdCbG9jaygpOyBjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpOyBjYiA9IGNiLT5jb250YWlu
aW5nQmxvY2soKSkKICAgICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFp
bnRJbmZvLCBJbnRQb2ludChjYi0+eCgpLCBjYi0+eSgpKSwgY2ItPm1fcG9zaXRpb25lZE9iamVj
dHMuZ2V0KCkpOyAvLyBGSVhNRTogTm90IHJpZ2h0IGZvciBmbGlwcGVkIHdyaXRpbmcgbW9kZXMu
CiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwor
ICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0g
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZvciAo
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0g
Kml0OwpAQCAtMzE5MCwxMCArMzE5MCwxMCBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Qq
IFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAKICAgICAv
LyBDcmVhdGUgdGhlIGxpc3Qgb2Ygc3BlY2lhbCBvYmplY3RzIGlmIHdlIGRvbid0IGFsZWFkeSBo
YXZlIG9uZQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7CisgICAgICAgIG1fZmxvYXRp
bmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIERvbid0IGluc2VydCB0aGUgb2Jq
ZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgbGlzdAotICAgICAgICBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Cisg
ICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBp
dCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNo
VHJhbnNsYXRvcj4obyk7CiAgICAgICAgIGlmIChpdCAhPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KSkKICAgICAgICAgICAgIHJldHVybiAqaXQ7CkBAIC0zMjI0LDggKzMyMjQsNyBAQCBSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChS
ZW5kZXJCb3gqIG8pCiAgICAgbmV3T2JqLT5tX2lzRGVzY2VuZGFudCA9IHRydWU7CiAgICAgbmV3
T2JqLT5tX3JlbmRlcmVyID0gbzsKIAotICAgIG1fZmxvYXRpbmdPYmplY3RzLT5pbmNyZWFzZU9i
amVjdHNDb3VudChuZXdPYmotPnR5cGUoKSk7Ci0gICAgbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
LmFkZChuZXdPYmopOworICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQobmV3T2JqKTsKICAgICAK
ICAgICByZXR1cm4gbmV3T2JqOwogfQpAQCAtMzIzMyw4ICszMjMyLDggQEAgUmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVy
Qm94KiBvKQogdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94
KiBvKQogewogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0g
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4obyk7CisgICAg
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJh
bnNsYXRvcj4obyk7CiAgICAgICAgIGlmIChpdCAhPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkg
ewogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICBpZiAo
Y2hpbGRyZW5JbmxpbmUoKSkgewpAQCAtMzI1OSw4ICszMjU4LDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZSgwLCBsb2dpY2FsQm90
dG9tKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5kZWNy
ZWFzZU9iamVjdHNDb3VudChyLT50eXBlKCkpOwotICAgICAgICAgICAgZmxvYXRpbmdPYmplY3RT
ZXQucmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUocik7
CiAgICAgICAgICAgICBBU1NFUlQoIXItPm1fb3JpZ2luYXRpbmdMaW5lKTsKICAgICAgICAgICAg
IGRlbGV0ZSByOwogICAgICAgICB9CkBAIC0zMjcyLDExICszMjcwLDEwIEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KEZsb2F0aW5nT2JqZWN0KiBsYXN0Rmxv
YXQsIGludCBsb2dpCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmpl
Y3QqIGN1cnIgPSBmbG9hdGluZ09iamVjdFNldC5sYXN0KCk7CiAgICAgd2hpbGUgKGN1cnIgIT0g
bGFzdEZsb2F0ICYmICghY3Vyci0+aXNQbGFjZWQoKSB8fCBsb2dpY2FsVG9wRm9yRmxvYXQoY3Vy
cikgPj0gbG9naWNhbE9mZnNldCkpIHsKLSAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmRlY3Jl
YXNlT2JqZWN0c0NvdW50KGN1cnItPnR5cGUoKSk7Ci0gICAgICAgIGZsb2F0aW5nT2JqZWN0U2V0
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZShjdXJyKTsK
ICAgICAgICAgQVNTRVJUKCFjdXJyLT5tX29yaWdpbmF0aW5nTGluZSk7CiAgICAgICAgIGRlbGV0
ZSBjdXJyOwogICAgICAgICBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpOwpAQCAtMzI4
OCw3ICszMjg1LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAg
IGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZs
b2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgaWYgKGZsb2F0aW5nT2JqZWN0U2V0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNDAzLDcgKzM0MDAsNyBAQCBib29s
IFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgIHNldExvZ2ljYWxUb3BG
b3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbFRvcCk7CiAgICAgICAgIHNldExvZ2ljYWxI
ZWlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxk
Qm94KSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkFmdGVyRm9yQ2hp
bGQoY2hpbGRCb3gpKTsKIAotICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQoKTsK
KyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVj
dCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIG1vdmVkLCB3ZSBoYXZlIHRvIHJlcGFpbnQg
aXQuCiAgICAgICAgIGlmIChjaGlsZEJveC0+Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkp
CkBAIC0zNTA1LDExICszNTAyLDMwIEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc1BlcmNlbnRIZWln
aHREZXNjZW5kYW50KFJlbmRlckJveCogZGVzY2VuZGFudCkKIH0KICNlbmRpZgogCi0vLyBGSVhN
RTogVGhlIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZS9sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
IGZ1bmN0aW9ucyBhcmUgdmVyeSBzbG93IGlmIHRoZXJlIGFyZSBtYW55IGZsb2F0cwotLy8gcHJl
c2VudC4gV2UgbmVlZCB0byBhZGQgYSBzdHJ1Y3R1cmUgdG8gZmxvYXRpbmcgb2JqZWN0cyB0byBy
ZXByZXNlbnQgImxpbmVzIiBvZiBmbG9hdHMuICBUaGVuIGluc3RlYWQgb2YgY2hlY2tpbmcKLS8v
IGVhY2ggZmxvYXQgaW5kaXZpZHVhbGx5LCB3ZSdkIGp1c3Qgd2FsayBiYWNrd2FyZHMgdGhyb3Vn
aCB0aGUgImxpbmVzIiBhbmQgc3RvcCB3aGVuIHdlIGhpdCBhIGxpbmUgdGhhdCBpcyBmdWxseSBh
Ym92ZQotLy8gdGhlIHZlcnRpY2FsIG9mZnNldCB0aGF0IHdlJ2QgbGlrZSB0byBjaGVjay4gIENv
bXB1dGluZyB0aGUgImxpbmVzIiB3b3VsZCBiZSByYXRoZXIgY29tcGxpY2F0ZWQsIGJ1dCBjb3Vs
ZCByZXBsYWNlIHRoZSBsZWZ0Ci0vLyBvYmplY3RzIGFuZCByaWdodCBvYmplY3RzIGNvdW50IGhh
Y2sgdGhhdCBpcyBjdXJyZW50bHkgdXNlZCBoZXJlLgordGVtcGxhdGUgPFJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdDo6VHlwZSBGbG9hdFR5cGVWYWx1ZT4KK2lubGluZSB2b2lkIFJlbmRlckJs
b2NrOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcjxGbG9hdFR5cGVWYWx1ZT46OmNvbGxlY3RJ
Zk5lZWRlZChjb25zdCBJbnRlcnZhbFR5cGUmIGludGVydmFsKSBjb25zdAoreworICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiByID0gaW50ZXJ2YWwuZGF0YSgpOworICAgIGlmIChyLT50eXBlKCkg
PT0gRmxvYXRUeXBlVmFsdWUgJiYgaW50ZXJ2YWwubG93KCkgPD0gbV92YWx1ZSAmJiBtX3ZhbHVl
IDwgaW50ZXJ2YWwuaGlnaCgpKSB7CisgICAgICAgIC8vIEFsbCB0aGUgb2JqZWN0cyByZXR1cm5l
ZCBmcm9tIHRoZSB0cmVlIHNob3VsZCBiZSBhbHJlYWR5IHBsYWNlZC4KKyAgICAgICAgQVNTRVJU
KHItPmlzUGxhY2VkKCkgJiYgbV9yZW5kZXJlci0+bG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IG1f
dmFsdWUgJiYgbV9yZW5kZXJlci0+bG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbV92YWx1ZSk7
CisKKyAgICAgICAgaWYgKEZsb2F0VHlwZVZhbHVlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExl
ZnQgCisgICAgICAgICAgICAmJiBtX3JlbmRlcmVyLT5sb2dpY2FsUmlnaHRGb3JGbG9hdChyKSA+
IG1fb2Zmc2V0KSB7CisgICAgICAgICAgICBtX29mZnNldCA9IG1fcmVuZGVyZXItPmxvZ2ljYWxS
aWdodEZvckZsb2F0KHIpOworICAgICAgICAgICAgaWYgKG1faGVpZ2h0UmVtYWluaW5nKQorICAg
ICAgICAgICAgICAgICptX2hlaWdodFJlbWFpbmluZyA9IG1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0
b21Gb3JGbG9hdChyKSAtIG1fdmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoRmxvYXRU
eXBlVmFsdWUgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQKKyAgICAgICAgICAgICYmIG1f
cmVuZGVyZXItPmxvZ2ljYWxMZWZ0Rm9yRmxvYXQocikgPCBtX29mZnNldCkgeworICAgICAgICAg
ICAgbV9vZmZzZXQgPSBtX3JlbmRlcmVyLT5sb2dpY2FsTGVmdEZvckZsb2F0KHIpOworICAgICAg
ICAgICAgaWYgKG1faGVpZ2h0UmVtYWluaW5nKQorICAgICAgICAgICAgICAgICptX2hlaWdodFJl
bWFpbmluZyA9IG1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSAtIG1fdmFsdWU7
CisgICAgICAgIH0KKyAgICB9Cit9CisKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgZml4ZWRP
ZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1haW5pbmcp
IGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gZml4ZWRPZmZzZXQ7CkBAIC0zNTE3LDIz
ICszNTMzLDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JM
aW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW4KICAgICAgICAgaWYgKGhlaWdodFJl
bWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwogCi0gICAgICAgIC8v
IFdlIGtub3cgdGhlIGxpc3QgaXMgbm9uLWVtcHR5LCBzaW5jZSB3ZSBoYXZlICJsZWZ0IiBvYmpl
Y3RzIHRvIHNlYXJjaCBmb3IuCi0gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBjYW4gYXNzdW1lIHRo
YXQgYmVnaW4gIT0gZW5kLCBhbmQgdGhhdCB3ZSBjYW4gZG8gYXQgbGVhc3Qgb25lCi0gICAgICAg
IC8vIGRlY3JlbWVudC4KLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKLSAgICAgICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAtLWl0OwotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3Qq
IHIgPSAqaXQ7Ci0gICAgICAgICAgICBpZiAoci0+aXNQbGFjZWQoKSAmJiBsb2dpY2FsVG9wRm9y
RmxvYXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90dG9tRm9yRmxvYXQocikgPiBsb2dp
Y2FsVG9wCi0gICAgICAgICAgICAgICAgJiYgci0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpG
bG9hdExlZnQKLSAgICAgICAgICAgICAgICAmJiBsb2dpY2FsUmlnaHRGb3JGbG9hdChyKSA+IGxl
ZnQpIHsKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbWF4KGxlZnQsIGxvZ2ljYWxSaWdodEZvckZs
b2F0KHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQotICAgICAgICAg
ICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpIC0g
bG9naWNhbFRvcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoaXQgIT0gYmVnaW4p
OworICAgICAgICBGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcjxGbG9hdGluZ09iamVjdDo6Rmxv
YXRMZWZ0PiBhZGFwdGVyKHRoaXMsIGxvZ2ljYWxUb3AsIGxlZnQsIGhlaWdodFJlbWFpbmluZyk7
CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5wbGFjZWRGbG9hdHNUcmVlKCkuYWxsT3Zlcmxh
cHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKICAgICB9CiAKICAgICBpZiAoYXBwbHlUZXh0SW5kZW50
ICYmIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewpAQCAtMzU1MywyNCArMzU1
NCw5IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUo
TGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVCiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3Rz
ICYmIG1fZmxvYXRpbmdPYmplY3RzLT5oYXNSaWdodE9iamVjdHMoKSkgewogICAgICAgICBpZiAo
aGVpZ2h0UmVtYWluaW5nKQogICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IDE7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgLy8gV2Uga25vdyB0aGUgbGlzdCBpcyBub24tZW1wdHksIHNpbmNl
IHdlIGhhdmUgInJpZ2h0IiBvYmplY3RzIHRvIHNlYXJjaCBmb3IuCi0gICAgICAgIC8vIFRoZXJl
Zm9yZSB3ZSBjYW4gYXNzdW1lIHRoYXQgYmVnaW4gIT0gZW5kLCBhbmQgdGhhdCB3ZSBjYW4gZG8g
YXQgbGVhc3Qgb25lCi0gICAgICAgIC8vIGRlY3JlbWVudC4KLSAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAg
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQu
YmVnaW4oKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAtLWl0OwotICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7Ci0gICAgICAgICAgICBpZiAoci0+aXNQbGFj
ZWQoKSAmJiBsb2dpY2FsVG9wRm9yRmxvYXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90
dG9tRm9yRmxvYXQocikgPiBsb2dpY2FsVG9wCi0gICAgICAgICAgICAgICAgJiYgci0+dHlwZSgp
ID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0Ci0gICAgICAgICAgICAgICAgJiYgbG9naWNh
bExlZnRGb3JGbG9hdChyKSA8IHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgcmlnaHQgPSBtaW4o
cmlnaHQsIGxvZ2ljYWxMZWZ0Rm9yRmxvYXQocikpOwotICAgICAgICAgICAgICAgIGlmIChoZWln
aHRSZW1haW5pbmcpCi0gICAgICAgICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSBsb2dp
Y2FsQm90dG9tRm9yRmxvYXQocikgLSBsb2dpY2FsVG9wOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IHdoaWxlIChpdCAhPSBiZWdpbik7CisKKyAgICAgICAgRmxvYXRJbnRlcnZhbFNlYXJjaEFk
YXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQ+IGFkYXB0ZXIodGhpcywgbG9naWNhbFRv
cCwgcmlnaHQsIGhlaWdodFJlbWFpbmluZyk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5w
bGFjZWRGbG9hdHNUcmVlKCkuYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKGFwcGx5VGV4dEluZGVudCAmJiAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKSB7CkBAIC0zNTk1LDcgKzM1ODEsNyBAQCBpbnQgUmVuZGVyQmxvY2s6Om5l
eHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhpbnQgbG9naWNhbEhlaWdodCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBpbnQgYm90dG9tID0gSU5UX01BWDsKLSAgICBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Cisg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwpAQCAtMzYxMiw3ICszNTk4LDcgQEAgaW50IFJl
bmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdPYmplY3Q6OlR5cGUg
ZmxvYXRUeXBlKSBjb25zdAogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIGludCBsb3dlc3RGbG9hdEJvdHRvbSA9IDA7Ci0gICAgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAg
IGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBp
dCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTM2NjAsNyArMzY0Niw4IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMoKQogICAgICAgICBzZXRMb2dpY2FsTGVmdEZv
ckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dpY2FsTGVmdEZvckNoaWxkKHBvc2l0aW9uZWRPYmpl
Y3QpIC0gbWFyZ2luTG9naWNhbExlZnRGb3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSk7CiAgICAg
ICAgIHNldExvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbFRvcEZvckNo
aWxkKHBvc2l0aW9uZWRPYmplY3QpIC0gbWFyZ2luQmVmb3JlRm9yQ2hpbGQocG9zaXRpb25lZE9i
amVjdCkpOwogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3Qs
IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSArIG1hcmdpbkJlZm9yZUZv
ckNoaWxkKHBvc2l0aW9uZWRPYmplY3QpICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChwb3NpdGlvbmVk
T2JqZWN0KSk7Ci0gICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc1BsYWNlZCh0cnVlKTsKKwor
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0
KTsKICAgICAgICAgCiAgICAgICAgIG1faGFzUG9zaXRpb25lZEZsb2F0cyA9IHRydWU7CiAgICAg
fQpAQCAtMzY2OCw2ICszNjU1LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkUG9zaXRpb25lZEZs
b2F0cygpCiAKIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKEJsb2NrTGF5b3V0UGFzcyBs
YXlvdXRQYXNzKQogeworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgbV9mbG9h
dGluZ09iamVjdHMtPnNldEhvcml6b250YWxXcml0aW5nTW9kZShpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKTsKKwogICAgIC8vIENsZWFyIG91ciBwb3NpdGlvbmVkIGZsb2F0cyBib29sZWFuLgog
ICAgIG1faGFzUG9zaXRpb25lZEZsb2F0cyA9IGZhbHNlOwogCkBAIC0zNjg2LDEwICszNjc2LDEw
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKEJsb2NrTGF5b3V0UGFzcyBsYXlvdXRQ
YXNzKQogICAgIFJlbmRlcmVyVG9GbG9hdEluZm9NYXAgZmxvYXRNYXA7CiAKICAgICBpZiAobV9m
bG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2Jq
ZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CiAgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09i
amVjdFNldDo6aXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAg
ICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBmID0gKml0OwogICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFkZChmLT5tX3JlbmRlcmVyLCBm
KTsKICAgICAgICAgICAgIH0KQEAgLTM3NDEsNyArMzczMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmNsZWFyRmxvYXRzKEJsb2NrTGF5b3V0UGFzcyBsYXlvdXRQYXNzKQogICAgICAgICBpbnQgY2hh
bmdlTG9naWNhbFRvcCA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogICAgICAgICBpbnQg
Y2hhbmdlTG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRzPGludD46Om1pbigpOwogICAgICAg
ICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAg
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
ZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKQEAg
LTM4MjMsMTAgKzM4MTMsOSBAQCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRz
KFJlbmRlckJsb2NrKiBjaGlsZCwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LAogCiAgICAgICAgICAg
ICAgICAgLy8gV2UgY3JlYXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBsYXppbHkuCiAgICAg
ICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKLSAgICAgICAgICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdP
YmplY3RzKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKTsKIAotICAgICAgICAgICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzLT5pbmNyZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iai0+dHlwZSgp
KTsKLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuYWRkKGZsb2F0aW5n
T2JqKTsKKyAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKGZsb2F0aW5nT2Jq
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtYWtl
Q2hpbGRQYWludE90aGVyRmxvYXRzICYmICFyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRl
cmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmCkBAIC0zODUzLDcgKzM4NDIsNyBAQCBib29s
IFJlbmRlckJsb2NrOjpoYXNPdmVyaGFuZ2luZ0Zsb2F0KFJlbmRlckJveCogcmVuZGVyZXIpCiAg
ICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCBoYXNDb2x1bW5zKCkgfHwgIXBhcmVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwog
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5k
PFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KHJlbmRlcmVyKTsKICAg
ICBpZiAoaXQgPT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTM4NjksNyArMzg1OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zs
b2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LCBpCiAKICAgICBs
b2dpY2FsTGVmdE9mZnNldCArPSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1hcmdpbkxl
ZnQoKSA6IG1hcmdpblRvcCgpKTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBwcmV2U2V0ID0g
cHJldi0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBwcmV2U2V0ID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgcHJldkVuZCA9IHByZXZTZXQuZW5kKCk7CiAgICAgZm9yIChG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIHByZXZJdCA9IHByZXZTZXQuYmVnaW4oKTsgcHJldkl0
ICE9IHByZXZFbmQ7ICsrcHJldkl0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKnBy
ZXZJdDsKQEAgLTM4OTcsOSArMzg4Niw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGlu
Z0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LCBpCiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2UgY3JlYXRlIHRoZSBmbG9hdGluZyBv
YmplY3QgbGlzdCBsYXppbHkuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0
cykKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcg
RmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5j
cmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmotPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmFkZChmbG9hdGluZ09iaik7CisgICAgICAgICAgICAg
ICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyhp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09i
amVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC0zOTQwLDcgKzM5MjgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2VuZGFu
dHNXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZQogCiB2b2lkIFJl
bmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0KCkKIHsKLSAgICBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5k
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQoKml0KSA+IGxvZ2ljYWxIZWlnaHQo
KSkgewpAQCAtNDA5Miw3ICs0MDgwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0
cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAg
ICAgYWRqdXN0ZWRMb2NhdGlvbiArPSB0b1NpemUodG9SZW5kZXJWaWV3KHRoaXMpLT5mcmFtZVZp
ZXcoKS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgfQogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdP
YmplY3RTZXQuYmVnaW4oKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsgaXQgIT0gYmVnaW47KSB7CiAgICAgICAgIC0taXQ7
CkBAIC01Njk5LDcgKzU2ODcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJG
aXQoaW50IHgsIGludCYgbGVmdCwgaW50JiByaWdodCkgY29uc3QKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICAgICAgZm9y
IChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIg
PSAqaXQ7CkBAIC02NDQzLDYgKzY0MzEsNyBAQCBjb25zdCBjaGFyKiBSZW5kZXJCbG9jazo6cmVu
ZGVyTmFtZSgpIGNvbnN0CiBpbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Rz
OjpjbGVhcigpCiB7CiAgICAgbV9zZXQuY2xlYXIoKTsKKyAgICBtX3BsYWNlZEZsb2F0c1RyZWUu
Y2xlYXIoKTsKICAgICBtX2xlZnRPYmplY3RzQ291bnQgPSAwOwogICAgIG1fcmlnaHRPYmplY3Rz
Q291bnQgPSAwOwogICAgIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCA9IDA7CkBAIC02NDY4LDYg
KzY0NTcsNzMgQEAgaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6ZGVj
cmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlQKICAgICAgICAgbV9wb3NpdGlvbmVk
T2JqZWN0c0NvdW50LS07CiB9CiAKK2lubGluZSBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJ
bnRlcnZhbCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjppbnRlcnZhbEZvckZsb2F0aW5n
T2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBpZiAobV9ob3Jp
em9udGFsV3JpdGluZ01vZGUpCisgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6RmxvYXRpbmdP
YmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+eSgpLCBmbG9hdGluZ09iamVjdC0+bWF4WSgp
LCBmbG9hdGluZ09iamVjdCk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT54KCksIGZsb2F0aW5nT2JqZWN0LT5tYXhYKCksIGZs
b2F0aW5nT2JqZWN0KTsKK30KKwordm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjph
ZGRQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAgIEFT
U0VSVCghZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOworCisgICAgZmxvYXRpbmdP
YmplY3QtPnNldElzUGxhY2VkKHRydWUpOworICAgIGlmIChtX3BsYWNlZEZsb2F0c1RyZWUuaXNJ
bml0aWFsaXplZCgpKQorICAgICAgICBtX3BsYWNlZEZsb2F0c1RyZWUuYWRkKGludGVydmFsRm9y
RmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBm
bG9hdGluZ09iamVjdC0+c2V0SXNJblBsYWNlZFRyZWUodHJ1ZSk7ICAgICAgCisjZW5kaWYKK30K
Kwordm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmVQbGFjZWRPYmplY3Qo
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAgIEFTU0VSVChmbG9hdGluZ09i
amVjdC0+aXNQbGFjZWQoKSAmJiBmbG9hdGluZ09iamVjdC0+aXNJblBsYWNlZFRyZWUoKSk7CisK
KyAgICBpZiAobV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBi
b29sIHJlbW92ZWQgPSBtX3BsYWNlZEZsb2F0c1RyZWUucmVtb3ZlKGludGVydmFsRm9yRmxvYXRp
bmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVk
LCByZW1vdmVkKTsKKyAgICB9CisgICAgCisgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2Vk
KGZhbHNlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgZmxvYXRpbmdPYmplY3QtPnNldElzSW5QbGFj
ZWRUcmVlKGZhbHNlKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjphZGQoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAg
IGluY3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqZWN0LT50eXBlKCkpOworICAgIG1fc2V0
LmFkZChmbG9hdGluZ09iamVjdCk7CisgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgp
KQorICAgICAgICBhZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOworfQorCitpbmxpbmUg
dm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUoRmxvYXRpbmdPYmplY3Qq
IGZsb2F0aW5nT2JqZWN0KQoreworICAgIGRlY3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2Jq
ZWN0LT50eXBlKCkpOworICAgIG1fc2V0LnJlbW92ZShmbG9hdGluZ09iamVjdCk7CisgICAgQVNT
RVJUKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpIHx8ICFmbG9hdGluZ09iamVjdC0+aXNJblBs
YWNlZFRyZWUoKSk7CisgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQorICAgICAg
ICByZW1vdmVQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOworfQorCit2b2lkIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCkKK3sKKyAgICBB
U1NFUlQoIW1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpOworICAgIGlmIChtX3Nl
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3BsYWNlZEZsb2F0c1RyZWUuaW5p
dElmTmVlZGVkKCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fc2V0LmJl
Z2luKCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsK
KyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
bG9hdGluZ09iamVjdCA9ICppdDsKKyAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNl
ZCgpKQorICAgICAgICAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmFkZChpbnRlcnZhbEZvckZsb2F0
aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7CisgICAgfQorfQorCiBUZXh0UnVuIFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIFJlbmRlclN0eWxlKiBz
dHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3Mg
ZmxhZ3MpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKQEAgLTY1MDIsNiArNjU1OCwxNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpzaG93TGluZVRyZWVBbmRNYXJrKGNvbnN0IElubGluZUJveCogbWFya2Vk
Qm94MSwgY29uc3QgY2hhciogbQogICAgICAgICByb290LT5zaG93TGluZVRyZWVBbmRNYXJrKG1h
cmtlZEJveDEsIG1hcmtlZExhYmVsMSwgbWFya2VkQm94MiwgbWFya2VkTGFiZWwyLCBvYmosIDEp
OwogfQogCisvLyBUaGVzZSBoZWxwZXJzIGFyZSBvbmx5IHVzZWQgYnkgdGhlIFBPREludGVydmFs
VHJlZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorU3RyaW5nIFZhbHVlVG9TdHJpbmc8aW50Pjo6
c3RyaW5nKGNvbnN0IGludCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFs
dWUpOworfQorCitTdHJpbmcgVmFsdWVUb1N0cmluZzxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3QqPjo6c3RyaW5nKGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogZmxvYXRpbmdP
YmplY3QpCit7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcCAoJWR4JWQgJWR4JWQpIiwg
ZmxvYXRpbmdPYmplY3QsIGZsb2F0aW5nT2JqZWN0LT54KCksIGZsb2F0aW5nT2JqZWN0LT55KCks
IGZsb2F0aW5nT2JqZWN0LT5tYXhYKCksIGZsb2F0aW5nT2JqZWN0LT5tYXhZKCkpOworfQorCiAj
ZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAppbmRleCA2Y2RmMjBhLi45YjRmN2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaApAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZSBSZW5kZXJCbG9ja19o
CiAKICNpbmNsdWRlICJHYXBSZWN0cy5oIgorI2luY2x1ZGUgIlBPREludGVydmFsVHJlZS5oIgog
I2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCb3hMaXN0LmgiCiAj
aW5jbHVkZSAiUm9vdElubGluZUJveC5oIgpAQCAtNjcsNiArNjgsMTEgQEAgdHlwZWRlZiB1bnNp
Z25lZCBUZXh0UnVuRmxhZ3M7CiBjbGFzcyBSZW5kZXJCbG9jayA6IHB1YmxpYyBSZW5kZXJCb3gg
ewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBMaW5lTGF5b3V0U3RhdGU7CisjaWZuZGVmIE5E
RUJVRworICAgIC8vIFVzZWQgYnkgdGhlIFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nIHRo
ZSBGbG9hdGluZ09iamVjdC4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3M+IGZyaWVuZCBzdHJ1Y3QgVmFs
dWVUb1N0cmluZzsKKyNlbmRpZgorCiAgICAgUmVuZGVyQmxvY2soTm9kZSopOwogICAgIHZpcnR1
YWwgflJlbmRlckJsb2NrKCk7CiAKQEAgLTQyMiw2ICs0MjgsOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgLCBtX3Nob3VsZFBhaW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFu
dChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc1BsYWNlZChmYWxzZSkKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgICAgICAsIG1faXNJblBsYWNlZFRyZWUoZmFsc2UpCisjZW5kaWYKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0gTm9GbG9hdCk7CiAgICAgICAgICAgICBpZiAo
dHlwZSA9PSBMZWZ0RmxvYXQpCkBAIC00NDEsNiArNDUwLDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICwgbV9zaG91bGRQYWludCh0eXBlICE9IEZsb2F0UG9zaXRpb25lZCkKICAgICAgICAgICAg
ICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNQbGFjZWQodHJ1ZSkK
KyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAsIG1faXNJblBsYWNlZFRyZWUoZmFsc2UpCisj
ZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ1NywxMyArNDY5LDE4IEBAIHByaXZh
dGU6CiAgICAgICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LndpZHRo
KCk7IH0KICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0Lmhl
aWdodCgpOyB9CiAKLSAgICAgICAgdm9pZCBzZXRYKGludCB4KSB7IG1fZnJhbWVSZWN0LnNldFgo
eCk7IH0KLSAgICAgICAgdm9pZCBzZXRZKGludCB5KSB7IG1fZnJhbWVSZWN0LnNldFkoeSk7IH0K
LSAgICAgICAgdm9pZCBzZXRXaWR0aChpbnQgd2lkdGgpIHsgbV9mcmFtZVJlY3Quc2V0V2lkdGgo
d2lkdGgpOyB9Ci0gICAgICAgIHZvaWQgc2V0SGVpZ2h0KGludCBoZWlnaHQpIHsgbV9mcmFtZVJl
Y3Quc2V0SGVpZ2h0KGhlaWdodCk7IH0KKyAgICAgICAgdm9pZCBzZXRYKGludCB4KSB7IEFTU0VS
VCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFgoeCk7IH0KKyAgICAgICAgdm9p
ZCBzZXRZKGludCB5KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNl
dFkoeSk7IH0KKyAgICAgICAgdm9pZCBzZXRXaWR0aChpbnQgd2lkdGgpIHsgQVNTRVJUKCFpc0lu
UGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0V2lkdGgod2lkdGgpOyB9CisgICAgICAgIHZv
aWQgc2V0SGVpZ2h0KGludCBoZWlnaHQpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9m
cmFtZVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7IH0KIAogICAgICAgICBjb25zdCBJbnRSZWN0JiBm
cmFtZVJlY3QoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0
OyB9Ci0gICAgICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkg
eyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorICAgICAgICB2b2lkIHNldEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9m
cmFtZVJlY3QgPSBmcmFtZVJlY3Q7IH0KKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBp
c0luUGxhY2VkVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblBsYWNlZFRyZWU7IH0KKyAgICAg
ICAgdm9pZCBzZXRJc0luUGxhY2VkVHJlZShib29sIHZhbHVlKSB7IG1faXNJblBsYWNlZFRyZWUg
PSB2YWx1ZTsgfQorI2VuZGlmCiAKICAgICAgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOwogICAg
ICAgICBSb290SW5saW5lQm94KiBtX29yaWdpbmF0aW5nTGluZTsKQEAgLTQ3Myw2ICs0OTAsOSBA
QCBwcml2YXRlOgogICAgICAgICBib29sIG1fc2hvdWxkUGFpbnQgOiAxOwogICAgICAgICBib29s
IG1faXNEZXNjZW5kYW50IDogMTsKICAgICAgICAgYm9vbCBtX2lzUGxhY2VkIDogMTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgIGJvb2wgbV9pc0luUGxhY2VkVHJlZSA6IDE7CisjZW5kaWYKICAg
ICB9OwogCiAgICAgSW50UG9pbnQgZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRp
bmdPYmplY3QqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpAQCAtNzk5LDI4ICs4MTksNzcgQEAg
cHJpdmF0ZToKICAgICB9OwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8RmxvYXRpbmdPYmplY3Qq
LCA0LCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnM+IEZsb2F0aW5nT2JqZWN0U2V0OwogICAg
IHR5cGVkZWYgRmxvYXRpbmdPYmplY3RTZXQ6OmNvbnN0X2l0ZXJhdG9yIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3I7CisgICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxMYXlvdXRVbml0LCBGbG9hdGlu
Z09iamVjdCo+IEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWw7CisgICAgdHlwZWRlZiBQT0RJbnRlcnZh
bFRyZWU8TGF5b3V0VW5pdCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdFRyZWU7Cisg
ICAgCisgICAgdGVtcGxhdGUgPEZsb2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgor
ICAgIGNsYXNzIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBJbnRlcnZhbFR5cGU7CisgICAgICAg
IAorICAgICAgICBGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcihjb25zdCBSZW5kZXJCbG9jayog
cmVuZGVyZXIsIExheW91dFVuaXQgdmFsdWUsIExheW91dFVuaXQmIG9mZnNldCwgTGF5b3V0VW5p
dCogaGVpZ2h0UmVtYWluaW5nKQorICAgICAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQor
ICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgICAgICAgICAsIG1faGVpZ2h0UmVtYWluaW5nKGhlaWdodFJlbWFpbmluZykKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbmxpbmUgTGF5b3V0VW5pdCBs
b3dWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgaW5saW5lIExheW91
dFVuaXQgaGlnaFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICB2b2lk
IGNvbGxlY3RJZk5lZWRlZChjb25zdCBJbnRlcnZhbFR5cGUmKSBjb25zdDsKKworICAgIHByaXZh
dGU6CisgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBtX3JlbmRlcmVyOworICAgICAgICBMYXlv
dXRVbml0IG1fdmFsdWU7CisgICAgICAgIExheW91dFVuaXQmIG1fb2Zmc2V0OworICAgICAgICBM
YXlvdXRVbml0KiBtX2hlaWdodFJlbWFpbmluZzsKKyAgICB9OworCiAgICAgY2xhc3MgRmxvYXRp
bmdPYmplY3RzIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0cygpCi0gICAg
ICAgICAgICA6IG1fbGVmdE9iamVjdHNDb3VudCgwKQorICAgICAgICBGbG9hdGluZ09iamVjdHMo
Ym9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgICAgICA6IG1fcGxhY2VkRmxvYXRz
VHJlZShVbmluaXRpYWxpemVkVHJlZSkKKyAgICAgICAgICAgICwgbV9sZWZ0T2JqZWN0c0NvdW50
KDApCiAgICAgICAgICAgICAsIG1fcmlnaHRPYmplY3RzQ291bnQoMCkKICAgICAgICAgICAgICwg
bV9wb3NpdGlvbmVkT2JqZWN0c0NvdW50KDApCisgICAgICAgICAgICAsIG1faG9yaXpvbnRhbFdy
aXRpbmdNb2RlKGhvcml6b250YWxXcml0aW5nTW9kZSkKICAgICAgICAgewogICAgICAgICB9CiAK
ICAgICAgICAgdm9pZCBjbGVhcigpOwotICAgICAgICB2b2lkIGluY3JlYXNlT2JqZWN0c0NvdW50
KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKLSAgICAgICAgdm9pZCBkZWNyZWFzZU9iamVjdHNDb3Vu
dChGbG9hdGluZ09iamVjdDo6VHlwZSk7CisgICAgICAgIHZvaWQgYWRkKEZsb2F0aW5nT2JqZWN0
Kik7CisgICAgICAgIHZvaWQgcmVtb3ZlKEZsb2F0aW5nT2JqZWN0Kik7CisgICAgICAgIHZvaWQg
YWRkUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CisgICAgICAgIHZvaWQgcmVtb3ZlUGxh
Y2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CisgICAgICAgIHZvaWQgc2V0SG9yaXpvbnRhbFdy
aXRpbmdNb2RlKGJvb2wgYiA9IHRydWUpIHsgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUgPSBiOyB9
CisKICAgICAgICAgYm9vbCBoYXNMZWZ0T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdE9i
amVjdHNDb3VudCA+IDA7IH0KICAgICAgICAgYm9vbCBoYXNSaWdodE9iamVjdHMoKSBjb25zdCB7
IHJldHVybiBtX3JpZ2h0T2JqZWN0c0NvdW50ID4gMDsgfQogICAgICAgICBib29sIGhhc1Bvc2l0
aW9uZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbmVkT2JqZWN0c0NvdW50ID4g
MDsgfQotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgc2V0KCkgeyByZXR1cm4gbV9zZXQ7IH0K
LQorICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zZXQ7IH0KKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RUcmVlJiBwbGFjZWRGbG9hdHNU
cmVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcHV0ZVBsYWNlZEZsb2F0c1RyZWVJZk5l
ZWRlZCgpOworICAgICAgICAgICAgcmV0dXJuIG1fcGxhY2VkRmxvYXRzVHJlZTsgCisgICAgICAg
IH0KICAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCk7
CisgICAgICAgIGlubGluZSB2b2lkIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlSWZOZWVkZWQoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxp
emVkKCkpCisgICAgICAgICAgICAgICAgY29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKTsKKyAgICAg
ICAgfQorICAgICAgICB2b2lkIGluY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpU
eXBlKTsKKyAgICAgICAgdm9pZCBkZWNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6
VHlwZSk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgaW50ZXJ2YWxGb3JGbG9hdGlu
Z09iamVjdChGbG9hdGluZ09iamVjdCopOworCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0IG1f
c2V0OworICAgICAgICBGbG9hdGluZ09iamVjdFRyZWUgbV9wbGFjZWRGbG9hdHNUcmVlOwogICAg
ICAgICB1bnNpZ25lZCBtX2xlZnRPYmplY3RzQ291bnQ7CiAgICAgICAgIHVuc2lnbmVkIG1fcmln
aHRPYmplY3RzQ291bnQ7CiAgICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb25lZE9iamVjdHNDb3Vu
dDsKKyAgICAgICAgYm9vbCBtX2hvcml6b250YWxXcml0aW5nTW9kZTsKICAgICB9OwogICAgIE93
blB0cjxGbG9hdGluZ09iamVjdHM+IG1fZmxvYXRpbmdPYmplY3RzOwogICAgIApAQCAtODk1LDYg
Kzk2NCwxNiBAQCBpbmxpbmUgY29uc3QgUmVuZGVyQmxvY2sqIHRvUmVuZGVyQmxvY2soY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QpCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFu
IHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sq
KTsKIAorI2lmbmRlZiBOREVCVUcKKy8vIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9E
SW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmFsdWVUb1N0cmluZzxpbnQ+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBpbnQg
dmFsdWUpOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8UmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0Kj4geworICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IFJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdCopOworfTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBSZW5kZXJCbG9ja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IDVkYzI3YzYuLjU1MDk2
MzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcApAQCAtMTA5MSw3ICsxMDkxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4K
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0Um9vdEJv
eCgpKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RT
ZXQuYmVnaW4oKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFz
dEZsb2F0KCkpIHsKQEAgLTExNzIsNyArMTE3Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxpbmtU
b0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAgICAg
ICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNhbEhl
aWdodCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBm
bG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgaWYgKGxheW91dFN0YXRlLmxhc3RGbG9h
dCgpKSB7CkBAIC0xNDkxLDcgKzE0OTEsNyBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5k
TGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVCaWRpUgogCiAg
ICAgICAgIGludCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgp
ICsgYWJzKGRlbHRhKTsKIAotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGNvbnN0IEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
ICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNl
dC5lbmQoKTsKICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxv
YXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogZiA9ICppdDsKQEAgLTE1MjgsNyArMTUyOCw3IEBAIGJvb2wgUmVuZGVy
QmxvY2s6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0
IElubGluZUJpZGlSCiAKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxhc3RM
aW5lLT5ibG9ja0xvZ2ljYWxIZWlnaHQoKSArIGFicyhkZWx0YSk7CiAKLSAgICAgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CisgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7
CiAgICAgICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxv
YXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwpAQCAtMjU1MCw3ICsyNTUwLDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3
RmxvYXQsIEZsb2F0aW5nT2JqZWMKICAgICBpZiAoIW5ld0Zsb2F0LT5tX3BhZ2luYXRpb25TdHJ1
dCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwogICAgIEFTU0VSVChmbG9hdGluZ09iamVjdFNldC5sYXN0KCkgPT0gbmV3RmxvYXQpOwogCiAg
ICAgaW50IGZsb2F0TG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCk7CkBA
IC0yNTc1LDcgKzI1NzUsOSBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25M
aW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplYwogICAgICAgICAgICAg
aWYgKG8tPmlzUmVuZGVyQmxvY2soKSkKICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKG8p
LT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgIG8tPmxheW91
dElmTmVlZGVkKCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlUGxhY2Vk
T2JqZWN0KGYpOwogICAgICAgICAgICAgc2V0TG9naWNhbFRvcEZvckZsb2F0KGYsIGxvZ2ljYWxU
b3BGb3JGbG9hdChmKSArIGYtPm1fcGFnaW5hdGlvblN0cnV0KTsKKyAgICAgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmplY3QoZik7CiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>