<?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>110624</bug_id>
          
          <creation_ts>2013-02-22 10:36:28 -0800</creation_ts>
          <short_desc>[New Multicolumn] Rewrite the painting/stacking model to be spec compliant</short_desc>
          <delta_ts>2013-02-28 09:07:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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>110625</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abucur</cc>
    
    <cc>achicu</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>839717</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-22 10:36:28 -0800</bug_when>
    <thetext>Right now the new multicolumn layout is painting the way regions do, but regions establish stacking contexts. However in multicolumn layout, the columns do not establish stacking contexts. The painting model therefore is totally different.

To fix the new columns, we will be moving to a paginated layer model where the flow thread and any descendants that are paginated will know how to paint themselves split across the columns. This is going to involve fixing paginated layers to be more like RenderInlines, i.e., to understand that they establish a bounding box based off their column boxes.

The one sticking bit with this new model is going to be figuring out how to handle transforms. It&apos;s not clear how to transform a paginated layer in this new model, since the layer will just have a bounding box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840031</commentid>
    <comment_count>1</comment_count>
      <attachid>189841</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-22 15:02:47 -0800</bug_when>
    <thetext>Created attachment 189841
Patch

Just putting an initial refactoring up for ews analysis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840035</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-22 15:04:35 -0800</bug_when>
    <thetext>Attachment 189841 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderLayer.cpp:3774:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/rendering/RenderLayer.cpp:3776:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/rendering/RenderLayer.h:255:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/rendering/RenderLayer.h:271:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 4 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840089</commentid>
    <comment_count>3</comment_count>
      <attachid>189841</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-22 16:04:32 -0800</bug_when>
    <thetext>Comment on attachment 189841
Patch

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

New failing tests:
css3/filters/filter-repaint-shadow-clipped.html
css3/filters/filter-mask-clip-order.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840268</commentid>
    <comment_count>4</comment_count>
      <attachid>189841</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-22 19:43:15 -0800</bug_when>
    <thetext>Comment on attachment 189841
Patch

Attachment 189841 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16714440

New failing tests:
css3/filters/filter-mask-clip-order.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840302</commentid>
    <comment_count>5</comment_count>
      <attachid>189907</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-22 21:58:19 -0800</bug_when>
    <thetext>Created attachment 189907
Just to run through ews, not for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840304</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-22 22:01:25 -0800</bug_when>
    <thetext>Attachment 189907 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderLayer.h:255:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/rendering/RenderLayer.h:912:  The parameter name &quot;layerFragments&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/RenderLayer.h:914:  The parameter name &quot;layerFragments&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/RenderLayer.h:918:  The parameter name &quot;layerFragments&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/RenderLayer.h:918:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/RenderLayer.h:919:  The parameter name &quot;paintBehavior&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/RenderLayer.h:921:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 7 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840321</commentid>
    <comment_count>7</comment_count>
      <attachid>189907</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-23 00:48:10 -0800</bug_when>
    <thetext>Comment on attachment 189907
Just to run through ews, not for review.

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

New failing tests:
platform/chromium/virtual/softwarecompositing/overflow/nested-scrolling.html
platform/chromium/virtual/gpu/compositedscrolling/overflow/nested-scrolling.html
platform/chromium/virtual/gpu/compositedscrolling/scrollbars/basic-scrollbar.html
platform/chromium/virtual/gpu/compositedscrolling/scrollbars/scrollbar-orientation.html
platform/chromium/virtual/gpu/compositedscrolling/scrollbars/scrollbars-on-positioned-content.html
platform/chromium/virtual/gpu/compositedscrolling/overflow/remove-overflow-crash2.html
compositing/overflow/nested-scrolling.html
platform/chromium/virtual/gpu/compositedscrolling/scrollbars/scrollbar-buttons.html
platform/chromium/virtual/gpu/compositedscrolling/scrollbars/overflow-scrollbar-combinations.html
platform/chromium/virtual/gpu/compositedscrolling/scrollbars/disabled-scrollbar.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840373</commentid>
    <comment_count>8</comment_count>
      <attachid>189926</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-23 08:25:57 -0800</bug_when>
    <thetext>Created attachment 189926
Compositing issue should be fixed, just testing ews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840389</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-23 09:50:47 -0800</bug_when>
    <thetext>Notes to self:
(1) Fix hit testing to also use fragments like painting.
(2) Implement grabbing the fragments from the RenderMultiColumnFlowThread.
(3) Get rid of RenderMultiColumnFlowThread&apos;s positioning/stacking context.
(4) Just ditch the painting and hit testing code in RenderMultiColumnSet for the column contents.
(5) Push fragments and clips aggressively for transforms and make multiple paintLayer calls. Turn off pagination in the layer code once inside a transform.
(6) Fix transparencyClipBox to account for fragments.
(7) Fix calculateLayerBounds to account for fragments.
(8) Figure out why the filter code is clipping to the damageRect and fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840445</commentid>
    <comment_count>10</comment_count>
      <attachid>189936</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-23 13:40:36 -0800</bug_when>
    <thetext>Created attachment 189936
Hit testing refactored to use fragments. Just checking with ews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840446</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-23 13:43:54 -0800</bug_when>
    <thetext>Attachment 189936 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderLayer.cpp:4471:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/rendering/RenderLayer.h:944:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840448</commentid>
    <comment_count>12</comment_count>
      <attachid>189937</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-23 14:02:12 -0800</bug_when>
    <thetext>Created attachment 189937
Hit testing.... fix reference issue. Just for ews, previous patch will fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840449</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-23 14:03:37 -0800</bug_when>
    <thetext>Attachment 189937 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderLayer.cpp:4470:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/rendering/RenderLayer.h:944:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840460</commentid>
    <comment_count>14</comment_count>
      <attachid>189939</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-23 14:26:58 -0800</bug_when>
    <thetext>Created attachment 189939
Testing a theory that the resizer code in hitTestLayer is dead. It obviously isn&apos;t right in the presence of clipping so it must be dead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840473</commentid>
    <comment_count>15</comment_count>
      <attachid>189943</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-23 15:29:30 -0800</bug_when>
    <thetext>Created attachment 189943
Hit testing finished. Running through EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840483</commentid>
    <comment_count>16</comment_count>
      <attachid>189943</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-23 16:12:29 -0800</bug_when>
    <thetext>Comment on attachment 189943
Hit testing finished. Running through EWS.

Attachment 189943 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16730031

New failing tests:
fast/css/resize-corner-tracking-transformed-iframe.html
fast/css/resize-corner-tracking.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840487</commentid>
    <comment_count>17</comment_count>
      <attachid>189943</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-23 16:28:10 -0800</bug_when>
    <thetext>Comment on attachment 189943
Hit testing finished. Running through EWS.

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

New failing tests:
fast/css/resize-corner-tracking-transformed-iframe.html
fast/css/resize-corner-tracking.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840488</commentid>
    <comment_count>18</comment_count>
      <attachid>189945</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-23 16:39:15 -0800</bug_when>
    <thetext>Created attachment 189945
Put the resize code back in, but fix the obvious clipping bug it had.

The resizer code was added to support iframe resizers apparently. It incorrectly ignores clipping and was obviously wrong, hence my concern with it. I put the resizer code back in and corrected the clipping bug it had.

Also got multicolumn flow threads all set up to hit test and paint the right way. Now all that is left is feeding the fragments to the RenderLayer code, and then basic columns should work again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840491</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-23 17:27:19 -0800</bug_when>
    <thetext>Attachment 189945 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnSet.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnSet.h&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderLayer.cpp:4501:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840498</commentid>
    <comment_count>20</comment_count>
      <attachid>189945</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-23 18:11:04 -0800</bug_when>
    <thetext>Comment on attachment 189945
Put the resize code back in, but fix the obvious clipping bug it had.

Attachment 189945 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16721981

New failing tests:
fast/multicol/newmulticol/layers-in-multicol.html
fast/multicol/newmulticol/positioned-split.html
fast/multicol/newmulticol/float-paginate-empty-lines.html
fast/multicol/newmulticol/layers-split-across-columns.html
fast/multicol/newmulticol/float-paginate.html
fast/multicol/newmulticol/positioned-with-constrained-height.html
fast/multicol/newmulticol/column-rules-fixed-height.html
fast/multicol/newmulticol/float-paginate-complex.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840504</commentid>
    <comment_count>21</comment_count>
      <attachid>189945</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-23 18:41:32 -0800</bug_when>
    <thetext>Comment on attachment 189945
Put the resize code back in, but fix the obvious clipping bug it had.

Attachment 189945 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16723956

New failing tests:
fast/multicol/newmulticol/layers-in-multicol.html
fast/multicol/newmulticol/positioned-split.html
fast/multicol/newmulticol/float-paginate-empty-lines.html
fast/multicol/newmulticol/layers-split-across-columns.html
fast/multicol/newmulticol/float-paginate.html
fast/multicol/newmulticol/positioned-with-constrained-height.html
fast/multicol/newmulticol/column-rules-fixed-height.html
fast/multicol/newmulticol/float-paginate-complex.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840561</commentid>
    <comment_count>22</comment_count>
      <attachid>189945</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-24 01:18:26 -0800</bug_when>
    <thetext>Comment on attachment 189945
Put the resize code back in, but fix the obvious clipping bug it had.

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

New failing tests:
fast/multicol/newmulticol/layers-in-multicol.html
fast/multicol/newmulticol/positioned-split.html
fast/multicol/newmulticol/float-paginate-empty-lines.html
fast/multicol/newmulticol/layers-split-across-columns.html
fast/multicol/newmulticol/positioned-with-constrained-height.html
fast/multicol/newmulticol/float-paginate.html
fast/multicol/newmulticol/float-paginate-complex.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841642</commentid>
    <comment_count>23</comment_count>
      <attachid>190207</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-25 22:28:42 -0800</bug_when>
    <thetext>Created attachment 190207
Much further along.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841643</commentid>
    <comment_count>24</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-25 22:33:29 -0800</bug_when>
    <thetext>Latest patch gets basic columns and even basic layers back up and running again. Five issues remain:

(1) Fix opacity so that transparencyClipBox is correct.
(2) Do something with transforms. As much as I detest doing something totally different for transforms, I&apos;m probably going to have to. I&apos;ll probably just have them keep the current style painting model of dividing the layer up into strips and painting it that way. This actually is an ok model for transforms, since they establish both containment and stacking, so nothing can &quot;escape&apos; them.
(3) I&apos;m not respecting ancestor clip from the multicolumn block and higher. I just need to work out how to fold that in.
(4) clipPath doesn&apos;t work right.
(5) Filters don&apos;t work right.

(4)-(5) can be done after I land, since they don&apos;t work right with current columns either.

Getting close!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841667</commentid>
    <comment_count>25</comment_count>
      <attachid>190207</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-25 23:09:28 -0800</bug_when>
    <thetext>Comment on attachment 190207
Much further along.

Attachment 190207 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16747750

New failing tests:
fast/multicol/newmulticol/layers-split-across-columns.html
fast/multicol/newmulticol/layers-in-multicol.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841706</commentid>
    <comment_count>26</comment_count>
      <attachid>190222</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-26 00:32:56 -0800</bug_when>
    <thetext>Created attachment 190222
Make Fixed positioning work.

One issue I missed was that RenderFlowThreads for regions act as fixed positioned object containers. Obviously columns don&apos;t do this, so I needed to add isOutOfFlowRenderFlowThread in more places to prevent Fixed positioning from being broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841839</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 03:08:53 -0800</bug_when>
    <thetext>Attachment 190222 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/rendering/RenderBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFlowThread.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFlowThread.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnFlowThread.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnSet.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnSet.h&apos;, u&apos;Source/WebCore/rendering/RenderObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderObject.h&apos;, u&apos;Source/WebCore/rendering/RenderRegion.h&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderLayer.cpp:3932:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/rendering/RenderLayer.cpp:4570:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841840</commentid>
    <comment_count>28</comment_count>
      <attachid>190222</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-26 03:17:44 -0800</bug_when>
    <thetext>Comment on attachment 190222
Make Fixed positioning work.

Attachment 190222 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/16747963

New failing tests:
fast/multicol/newmulticol/layers-split-across-columns.html
fast/multicol/newmulticol/layers-in-multicol.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841971</commentid>
    <comment_count>29</comment_count>
      <attachid>190222</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 07:18:24 -0800</bug_when>
    <thetext>Comment on attachment 190222
Make Fixed positioning work.

Attachment 190222 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/16769167

New failing tests:
fast/multicol/newmulticol/layers-split-across-columns.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842084</commentid>
    <comment_count>30</comment_count>
      <attachid>190303</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-26 09:27:46 -0800</bug_when>
    <thetext>Created attachment 190303
Patch

This patch gets opacity working. Two bugs prevent putting the patch up for review now:

(1) Transforms need to work.
(2) I need to factor in overflow:hidden clips etc from the multicol block and its ancestors.

Other minor problems that don&apos;t hold up landing:

(1) filters / clip-path don&apos;t work (although should be easy now with the changes to boundingBox() for transforms.
(2) Need to apply the translation offset of the multicolumn set for when you have multiple sets (doesn&apos;t happen yet until we have spans support and nested pagination support).

Compositing remains a big issue. This fragments approach doesn&apos;t work for composited layers that are split, unless we make graphics layers for each fragment and/or we somehow can figure out how to apply clips to individual fragments. Whether or not this is possible could inform the transforms implementation.

For now I&apos;ll probably just keep transforms working like the old multi-column code, since the focus remains getting this up to feature parity with the old code. I want to get this built up to be able to be turned on before adding too many new features (like compositing support).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842114</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 09:46:05 -0800</bug_when>
    <thetext>Attachment 190303 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/rendering/RenderBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFlowThread.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFlowThread.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnFlowThread.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnSet.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnSet.h&apos;, u&apos;Source/WebCore/rendering/RenderObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderObject.h&apos;, u&apos;Source/WebCore/rendering/RenderRegion.h&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderLayer.cpp:3932:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/rendering/RenderLayer.cpp:4570:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842189</commentid>
    <comment_count>32</comment_count>
      <attachid>190303</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-26 11:05:00 -0800</bug_when>
    <thetext>Comment on attachment 190303
Patch

Attachment 190303 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/16777300

New failing tests:
fast/multicol/newmulticol/layers-in-multicol.html
fast/multicol/newmulticol/layers-split-across-columns.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842223</commentid>
    <comment_count>33</comment_count>
      <attachid>190303</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-26 11:38:36 -0800</bug_when>
    <thetext>Comment on attachment 190303
Patch

Attachment 190303 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/16782138

New failing tests:
fast/multicol/newmulticol/layers-split-across-columns.html
fast/multicol/newmulticol/layers-in-multicol.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842267</commentid>
    <comment_count>34</comment_count>
      <attachid>190303</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 12:34:39 -0800</bug_when>
    <thetext>Comment on attachment 190303
Patch

Attachment 190303 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/16781293

New failing tests:
fast/multicol/newmulticol/layers-split-across-columns.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842330</commentid>
    <comment_count>35</comment_count>
      <attachid>190303</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 13:49:09 -0800</bug_when>
    <thetext>Comment on attachment 190303
Patch

Attachment 190303 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/16769467

New failing tests:
fast/multicol/newmulticol/layers-split-across-columns.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842570</commentid>
    <comment_count>36</comment_count>
      <attachid>190406</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-26 18:00:53 -0800</bug_when>
    <thetext>Created attachment 190406
Patch

Everything is done but filters and clip path. Should be ready for review. Going to wait to see if EWS likes it, and if so, get my new test cases and changelog incorporated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842697</commentid>
    <comment_count>37</comment_count>
      <attachid>190443</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-26 22:14:32 -0800</bug_when>
    <thetext>Created attachment 190443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842700</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 22:16:40 -0800</bug_when>
    <thetext>Attachment 190443 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/multicol/mixed-positioning-stacking-order-expected.html&apos;, u&apos;LayoutTests/fast/multicol/mixed-positioning-stacking-order.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/rendering/RenderFlowThread.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFlowThread.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnFlowThread.h&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnSet.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMultiColumnSet.h&apos;, u&apos;Source/WebCore/rendering/RenderObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderObject.h&apos;, u&apos;Source/WebCore/rendering/RenderRegion.h&apos;]&quot; exit_code: 1
LayoutTests/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842702</commentid>
    <comment_count>39</comment_count>
      <attachid>190444</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-26 22:18:15 -0800</bug_when>
    <thetext>Created attachment 190444
Patch that fixes ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842705</commentid>
    <comment_count>40</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-26 22:23:21 -0800</bug_when>
    <thetext>By the way, one thing stopping me from submitting more paginated and unpaginated mixing tests, i.e., examples of &quot;escape&quot; from the flow thread is the fact that the inRenderFlowThread() bit becomes wrong, and this leads to all sorts of asserts.

I believe the best solution is probably just to remove the inRenderFlowThread bit completely, as it&apos;s too challenging to set and maintain a bit that has to follow the containing block hierarchy instead of the normal tree hierarchy, but that&apos;s delicate enough that it should be done in a separate patch. (The reason I believe removing that bit is safe is that we cache the flow thread that is laying out already, so asking for enclosingFlowThread() during layout, although slower than a bit, is still O(1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843193</commentid>
    <comment_count>41</comment_count>
      <attachid>190444</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-27 10:01:14 -0800</bug_when>
    <thetext>Comment on attachment 190444
Patch that fixes ChangeLog

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

Comments so far. Will keep going later. Maybe do the paintLayerContents() refactor in a separate patch?

&gt; Source/WebCore/rendering/RenderFlowThread.h:147
&gt; +    void collectLayerFragments(Vector&lt;LayerFragment&gt;&amp;, const LayoutRect&amp; layerBoundingBox, const LayoutRect&amp; dirtyRect);

Can&apos;t use use the LayerFragments type?

&gt; Source/WebCore/rendering/RenderLayer.cpp:942
&gt;      bool newColumnsUsed = useRegionBasedColumns();

I don&apos;t like &apos;new columns&apos; (even though I know you didn&apos;t&apos; add it). It&apos;s not future-proof. In 10 years, we won&apos;t know what &quot;new columns&quot; are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843205</commentid>
    <comment_count>42</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-27 10:12:03 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 190444 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190444&amp;action=review
&gt; 
&gt; Comments so far. Will keep going later. Maybe do the paintLayerContents() refactor in a separate patch?
&gt; 

I&apos;ll do the refactoring that had nothing to do with fragments (e.g., paintLayerByApplyingTransform) in a separate patch. As suggested on IRC, I can clean up clipping and filters at the same time too.

The refactoring that involved adding fragments methods though I&apos;d rather just keep here, since making non-fragments version of the same methods only to turn around and replace them with differently named fragments-based methods doesn&apos;t seem like it would help much (and would only increase the size of this patch, since I&apos;d be removing those non-fragments methods to replace them with fragments-based methods).

&gt; &gt; Source/WebCore/rendering/RenderFlowThread.h:147
&gt; &gt; +    void collectLayerFragments(Vector&lt;LayerFragment&gt;&amp;, const LayoutRect&amp; layerBoundingBox, const LayoutRect&amp; dirtyRect);
&gt; 
&gt; Can&apos;t use use the LayerFragments type?
&gt; 

I should be able to. Will fix.

&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:942
&gt; &gt;      bool newColumnsUsed = useRegionBasedColumns();
&gt; 
&gt; I don&apos;t like &apos;new columns&apos; (even though I know you didn&apos;t&apos; add it). It&apos;s not future-proof. In 10 years, we won&apos;t know what &quot;new columns&quot; are.

This is just a temporary boolean. When the new columns code gets turned on, this code will go away, since the old column code will be removed. It doesn&apos;t have to be future proof, since it is only going to be around until the new columns code turns on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843444</commentid>
    <comment_count>43</comment_count>
      <attachid>190593</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-27 13:31:20 -0800</bug_when>
    <thetext>Created attachment 190593
New patch with the paint transform refactoring removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843687</commentid>
    <comment_count>44</comment_count>
      <attachid>190593</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-27 21:08:04 -0800</bug_when>
    <thetext>Comment on attachment 190593
New patch with the paint transform refactoring removed.

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

r=me but see comments and consider adding more test cases.

&gt; Source/WebCore/ChangeLog:20
&gt; +        and overlap multiple columns. In addition clips may apply across pagination
&gt; +        boundaries, and any overlap caused by opacity has to do the right thing and
&gt; +        treat the paginated and unpaginated components together as a single unit.

I don&apos;t see this clipping and opacity behavior tested by your single new test case. Perhaps more test cases are in order?

&gt; Source/WebCore/rendering/RenderFlowThread.cpp:962
&gt; +void RenderFlowThread::collectLayerFragments(Vector&lt;LayerFragment&gt;&amp; layerFragments, const LayoutRect&amp; layerBoundingBox, const LayoutRect&amp; dirtyRect)

Use LayerFragments.

&gt; Source/WebCore/rendering/RenderFlowThread.h:147
&gt; +    void collectLayerFragments(Vector&lt;LayerFragment&gt;&amp;, const LayoutRect&amp; layerBoundingBox, const LayoutRect&amp; dirtyRect);

Use LayerFragments.

Why is layerBoundingBox referring to a layer, and not, say, a region or column box?

&gt; Source/WebCore/rendering/RenderLayer.cpp:947
&gt;      bool newColumnsUsed = useRegionBasedColumns();

Don&apos;t like &quot;new&quot; in this context. Just called it regionBasedColumns?

&gt; Source/WebCore/rendering/RenderLayer.cpp:957
&gt; +            if (m_enclosingPaginationLayer &amp;&amp; m_enclosingPaginationLayer-&gt;hasTransform())
&gt; +                m_enclosingPaginationLayer = 0;

This deserves a comment (and a test case?)

&gt; Source/WebCore/rendering/RenderLayer.cpp:974
&gt; +                if (m_enclosingPaginationLayer &amp;&amp; m_enclosingPaginationLayer-&gt;hasTransform())
&gt; +                    m_enclosingPaginationLayer = 0;

Ditto.

&gt; Source/WebCore/rendering/RenderLayer.cpp:3812
&gt; +        // FIXME: It is incorrect to just clip to the damageRect here once multiple fragments are involved.

File a bugzilla?

&gt; Source/WebCore/rendering/RenderLayer.cpp:3904
&gt; +    // layers between us and the pagination context. It&apos;s important to minimize the # of fragments we need to create and this helps with
&gt; +    // that.

# -&gt; number
Avoid the orphan?

&gt; Source/WebCore/rendering/RenderLayer.cpp:3913
&gt; +    // Take our bounding box within the flow thread and clip it. This will help minimize the # of fragments we have to create.

# -&gt; number

&gt; Source/WebCore/rendering/RenderLayer.cpp:4009
&gt; +        LayerFragment fragment = layerFragments.at(i);

Do you need a copy of the fragment on the stack?

&gt; Source/WebCore/rendering/RenderLayer.cpp:4035
&gt; +    RenderObject* paintingRootForRenderer, bool selectionOnly, bool forceBlackText)

Why do you need both the bools and the PaintBehavior flags? Can&apos;t the caller set up the PaintBehavior flags?

&gt; Source/WebCore/rendering/RenderLayer.cpp:4076
&gt; +        LayerFragment fragment = layerFragments.at(i);

Need LayerFragment on the stack here?

&gt; Source/WebCore/rendering/RenderLayer.cpp:4097
&gt; +        LayerFragment fragment = layerFragments.at(i);

Ditto.

&gt; Source/WebCore/rendering/RenderLayer.cpp:4113
&gt; +        LayerFragment fragment = layerFragments.at(i);

Ditto.

&gt; Source/WebCore/rendering/RenderLayer.cpp:4366
&gt;      offset.moveBy(translationOffset);
&gt;  
&gt; +    offset.moveBy(translationOffset);

Merge error?

&gt; Source/WebCore/rendering/RenderLayer.cpp:4580
&gt; +        LayerFragment fragment = layerFragments.at(i);

Need a copy of the fragment?

&gt; Source/WebCore/rendering/RenderLayer.cpp:4598
&gt; +        LayerFragment fragment = layerFragments.at(i);

Ditto.

&gt; Source/WebCore/rendering/RenderLayer.cpp:5004
&gt; +    // If we cross into a different pagination context, then we can&apos;t rely on the cache.
&gt; +    // Just switch over to using TemporaryClipRects.

We might want to solve this eventually. Temporary clip rects have O(n^2) behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844133</commentid>
    <comment_count>45</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-28 08:54:41 -0800</bug_when>
    <thetext>(In reply to comment #44)

&gt; I don&apos;t see this clipping and opacity behavior tested by your single new test case. Perhaps more test cases are in order?
&gt; 

I have written test cases for this, but they ASSERT because of the inRenderFlowThread() issue I mentioned in my previous comment. I will add the tests as soon as that issue is fixed (abucur is going to fix it).


&gt; Why is layerBoundingBox referring to a layer, and not, say, a region or column box?
&gt; 

It really is the bounding box of a whole unsplit layer. It&apos;s not a per-region or per-column box. It&apos;s the entire range that is going to be split into fragments.

&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:947
&gt; &gt;      bool newColumnsUsed = useRegionBasedColumns();
&gt; 
&gt; Don&apos;t like &quot;new&quot; in this context. Just called it regionBasedColumns?
&gt; 

Sure.

&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:957
&gt; &gt; +            if (m_enclosingPaginationLayer &amp;&amp; m_enclosingPaginationLayer-&gt;hasTransform())
&gt; &gt; +                m_enclosingPaginationLayer = 0;
&gt; 
&gt; This deserves a comment (and a test case?)
&gt; 

This is tested by fast/multicol/newmulticol/layers-split-across-columns.html. It does deserve a comment though.

 
&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:3812
&gt; &gt; +        // FIXME: It is incorrect to just clip to the damageRect here once multiple fragments are involved.
&gt; 
&gt; File a bugzilla?
&gt; 

https://bugs.webkit.org/show_bug.cgi?id=111082



&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:4366
&gt; &gt;      offset.moveBy(translationOffset);
&gt; &gt;  
&gt; &gt; +    offset.moveBy(translationOffset);
&gt; 
&gt; Merge error?
&gt; 

Yes, good catch.

&gt;
&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:5004
&gt; &gt; +    // If we cross into a different pagination context, then we can&apos;t rely on the cache.
&gt; &gt; +    // Just switch over to using TemporaryClipRects.
&gt; 
&gt; We might want to solve this eventually. Temporary clip rects have O(n^2) behavior.

Yeah I agree. We just need the ability to cache clip rects in multiple coordinate systems. Then we&apos;d be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844142</commentid>
    <comment_count>46</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-02-28 09:07:44 -0800</bug_when>
    <thetext>Landed in r144318. I&apos;m going to make more purely paginated test cases now for opacity and transforms in particular.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189841</attachid>
            <date>2013-02-22 15:02:47 -0800</date>
            <delta_ts>2013-02-22 21:58:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>18554</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQzNzU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA0LDggKzQwNSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDQ5LDcgKzQ1Miw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIyLDYgKzkyNSw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1f
aXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7
CisKICAgICBpZiAoaXNDb21wb3NpdGVkKCkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47
IC8vIEZJWE1FOiBXZSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGlu
ZyBsYXllcnMgc29tZWRheS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUg
UmVuZGVyVmlldyBjYW4ndCBiZSBwYWdpbmF0ZWQuICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwg
bW92ZSB0byBhIG1vZGVsIHdoZXJlIGl0IGlzIHRob3VnaC4KQEAgLTkzMSwxNiArOTM2LDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogICAgIC8vIHJlY3VycmluZyBp
bnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMg
Zm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9v
dHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3Rl
YWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8g
Z2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAg
d2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2Vu
ZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3
ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2ls
eS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAg
ICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7CiAgICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkK
LSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQoKTsKKyAg
ICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2lzUGFnaW5h
dGVkID0gcGFyZW50KCktPnJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtOTU1LDcgKzk2MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24o
KQogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayAmJiBjb250YWluaW5nQmxvY2sgIT0gdmll
dzsKICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5oYXNMYXll
cigpKSB7Ci0gICAgICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGNvbnRhaW5pbmdCbG9jay0+
bGF5ZXIoKS0+aXNQYWdpbmF0ZWQoKTsKKyAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM2MjYsNyArMzYzMiw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKICAgICAvLyBPdXRsaW5lIGFs
d2F5cyBuZWVkcyB0byBiZSBwYWludGVkIGV2ZW4gaWYgd2UgaGF2ZSBubyB2aXNpYmxlIGNvbnRl
bnQuCiAgICAgYm9vbCBzaG91bGRQYWludE91dGxpbmUgPSBpc1NlbGZQYWludGluZ0xheWVyICYm
ICFpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnM7CiAgICAgYm9vbCBzaG91bGRQYWludENvbnRl
bnQgPSBtX2hhc1Zpc2libGVDb250ZW50ICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIgJiYgIWlzUGFp
bnRpbmdPdmVybGF5U2Nyb2xsYmFyczsKLQorICAgIAogICAgIEdyYXBoaWNzQ29udGV4dCogdHJh
bnNwYXJlbmN5TGF5ZXJDb250ZXh0ID0gY29udGV4dDsKICAgICAKICAgICBpZiAobG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5ICYmICFyZW5kZXJl
cigpLT5pc1JlbmRlclZpZXcoKSAmJiAhcmVuZGVyZXIoKS0+aXNSb290KCkpCkBAIC0zNjM3LDcg
KzM2NDMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAKICAg
ICBMYXlvdXRQb2ludCBvZmZzZXRGcm9tUm9vdDsKICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhw
YWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCk7Ci0KKyAgICAKICAgICBJbnRS
ZWN0IHJvb3RSZWxhdGl2ZUJvdW5kczsKICAgICBib29sIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1
dGVkID0gZmFsc2U7CiAKQEAgLTM3MTYsNyArMzcyMiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyhHcmEKIAogICAgICAgICAgICAgLy8gUmV3aXJlIHRoZSBvbGQgY29u
dGV4dCB0byBhIG1lbW9yeSBidWZmZXIsIHNvIHRoYXQgd2UgY2FuIGNhcHR1cmUgdGhlIGNvbnRl
bnRzIG9mIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIE5PVEU6IFdlIHNhdmVkIHRoZSBvbGQg
Y29udGV4dCBpbiB0aGUgInRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCIgbG9jYWwgdmFyaWFibGUs
IHRvIGJlIGFibGUgdG8gc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIKLSAgICAgICAgICAgIC8v
IG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IGFuZCBhdm9pZCBkdXBsaWNhdGluZyAiYmVnaW5GaWx0
ZXJFZmZlY3QiIGFmdGVyIGVhY2ggdHJhbnNwYXJlbnkgbGF5ZXIgY2FsbC4gQWxzbywgbm90ZSB0
aGF0IAorICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNvbnRleHQgYW5kIGF2b2lkIGR1
cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFjaCB0cmFuc3BhcmVuY3kgbGF5
ZXIgY2FsbC4gQWxzbywgbm90ZSB0aGF0IAogICAgICAgICAgICAgLy8gYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnMgd2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmdsZSBsYXp5IHRyYW5zcGFyZW5jeSBsYXll
ciwgZXZlbiB0aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNlIGluIHRoaXMgbWV0aG9kLgogICAgICAg
ICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYmVnaW5GaWx0ZXJFZmZlY3QoY29udGV4dCk7
CiAKQEAgLTM3MzAsMjggKzM3MzYsMTMgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNv
bnRlbnRzKEdyYQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAKLSAg
ICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxkIHVzZSBvbmx5IHdoZW4gd2Ug
bmVlZCB0aGVtLgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7Ci0gICAgQ2xpcFJlY3QgZGFt
YWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsKLSAgICBMYXlvdXRQb2ludCBw
YWludE9mZnNldDsKLQotICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgfHwgc2hvdWxkUGFpbnRP
dXRsaW5lIHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykgewotICAgICAgICBDbGlwUmVj
dHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBs
b2NhbFBhaW50aW5nSW5mby5yZWdpb24sIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyVGVt
cG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3Rz
LCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgbG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXll
clBhaW50aW5nT3ZlcmZsb3dDb250ZW50cyA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RP
dmVyZmxvd0NsaXApOwotICAgICAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3Qs
IGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsICZvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAg
IHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94
TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKTsKKyAg
ICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkgJiYgaGF2ZVRyYW5z
cGFyZW5jeSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVyIGFuZCB0cmFuc3BhcmVu
Y3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllciBoZXJlLCBy
YXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0cyBvbmUgd2l0aCB0aGUg
d3JvbmcgY29udGV4dC4KKyAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJl
bmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5m
by5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7CiAgICAg
fQorI2VuZGlmCiAKLSAgICBib29sIGZvcmNlQmxhY2tUZXh0ID0gbG9jYWxQYWludGluZ0luZm8u
cGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dDsKLSAgICBib29sIHNl
bGVjdGlvbk9ubHkgID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciAmIFBhaW50QmVo
YXZpb3JTZWxlY3Rpb25Pbmx5OwotICAgIAotICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlv
ciA9IFBhaW50QmVoYXZpb3JOb3JtYWw7Ci0gICAgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50
TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZCkKLSAgICAgICAgcGFpbnRCZWhhdmlvciB8
PSBQYWludEJlaGF2aW9yU2tpcFJvb3RCYWNrZ3JvdW5kOwotICAgIGVsc2UgaWYgKGxvY2FsUGFp
bnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1Jvb3RCYWNrZ3JvdW5kT25seSkKLSAgICAgICAg
cGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yUm9vdEJhY2tncm91bmRPbmx5OwotICAgIAog
ICAgIC8vIElmIHRoaXMgbGF5ZXIncyByZW5kZXJlciBpcyBhIGNoaWxkIG9mIHRoZSBwYWludGlu
Z1Jvb3QsIHdlIHJlbmRlciB1bmNvbmRpdGlvbmFsbHksIHdoaWNoCiAgICAgLy8gaXMgZG9uZSBi
eSBwYXNzaW5nIGEgbmlsIHBhaW50aW5nUm9vdCBkb3duIHRvIG91ciByZW5kZXJlciAoYXMgaWYg
bm8gcGFpbnRpbmdSb290IHdhcyBldmVyIHNldCkuCiAgICAgLy8gRWxzZSwgb3VyIHJlbmRlcmVy
IHRyZWUgbWF5IG9yIG1heSBub3QgY29udGFpbiB0aGUgcGFpbnRpbmcgcm9vdCwgc28gd2UgcGFz
cyB0aGF0IHJvb3QgYWxvbmcKQEAgLTM3NjMsMjIgKzM3NTQsNzIgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5vdmVy
bGFwVGVzdFJlcXVlc3RzICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIpCiAgICAgICAgIHBlcmZvcm1P
dmVybGFwVGVzdHMoKmxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMsIGxvY2Fs
UGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdGhpcyk7CiAKLSAgICAvLyBXZSB3YW50IHRvIHBhaW50
IG91ciBsYXllciwgYnV0IG9ubHkgaWYgd2UgaW50ZXJzZWN0IHRoZSBkYW1hZ2UgcmVjdC4KLSAg
ICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50
RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkKLSAgICAgICAgc2hv
dWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0KGxheWVyQm91bmRzLCBkYW1h
Z2VSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCAmb2Zmc2V0RnJvbVJv
b3QpOworICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJl
aGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0OworICAgIGJvb2wgc2VsZWN0aW9u
T25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvclNl
bGVjdGlvbk9ubHk7CisgICAgCisgICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yID0gUGFp
bnRCZWhhdmlvck5vcm1hbDsKKyAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBh
aW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQorICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50
QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7CisgICAgZWxzZSBpZiAobG9jYWxQYWludEZsYWdz
ICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5KQorICAgICAgICBwYWludEJl
aGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9ubHk7CiAKKyAgICBwYWludExh
eWVyQ29udGVudHNBcHBseWluZ1BhZ2luYXRpb24oY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8s
IHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgb2Zmc2V0RnJvbVJvb3QsIGxvY2FsUGFpbnRG
bGFncywgcGFpbnRCZWhhdmlvciwKKyAgICAgICAgc2hvdWxkUGFpbnRDb250ZW50LCBzaG91bGRQ
YWludE91dGxpbmUsIGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycywgc2VsZWN0aW9uT25seSwg
Zm9yY2VCbGFja1RleHQsCisgICAgICAgIGhhdmVUcmFuc3BhcmVuY3ksIHRyYW5zcGFyZW5jeUxh
eWVyQ29udGV4dCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIAogI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0
KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVy
IGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFyZW5j
eSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0
cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KLSAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvcik7CisgICAgaWYgKGZpbHRlclBhaW50ZXIuaGFzU3RhcnRlZEZpbHRlckVmZmVjdCgp
KSB7CisgICAgICAgIC8vIEFwcGx5IHRoZSBjb3JyZWN0IGNsaXBwaW5nIChpZS4gb3ZlcmZsb3c6
IGhpZGRlbikuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGp1c3QgaXNuJ3QgcmlnaHQuCisgICAg
ICAgIC8vY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5j
eUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJl
Y3QpOworICAgICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5hcHBseUZpbHRlckVmZmVjdCgp
OworICAgICAgICAvL3Jlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwogICAgIH0KICNlbmRpZgor
ICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIG5vdyB1c2UgdGhlIG9yaWdpbmFsIHRyYW5z
cGFyZW5jeSBjb250ZXh0LgorICAgIEFTU0VSVCh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQgPT0g
Y29udGV4dCk7CisKKyAgICAvLyBFbmQgb3VyIHRyYW5zcGFyZW5jeSBsYXllcgorICAgIGlmICho
YXZlVHJhbnNwYXJlbmN5ICYmIG1fdXNlZFRyYW5zcGFyZW5jeSAmJiAhbV9wYWludGluZ0luc2lk
ZVJlZmxlY3Rpb24pIHsKKyAgICAgICAgY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
KyAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOworICAgICAgICBtX3VzZWRUcmFuc3BhcmVuY3kg
PSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZS1zZXQgdGhpcyB0byB3aGF0ZXZlciBpdCB3YXMg
YmVmb3JlIHdlIHBhaW50ZWQgdGhlIGxheWVyLgorICAgIGlmIChuZWVkVG9BZGp1c3RTdWJwaXhl
bFF1YW50aXphdGlvbikKKyAgICAgICAgY29udGV4dC0+c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKGRpZFF1YW50aXplRm9udHMpOworCisgICAgaWYgKGhhc0NsaXBQYXRoKQorICAgICAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJD
b250ZW50c0FwcGx5aW5nUGFnaW5hdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAgICBjb25zdCBMYXlvdXRS
ZWN0JiBvcmlnaW5hbFBhaW50SW5mb0RpcnR5UmVjdCwgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNl
dEZyb21Sb290LCBQYWludExheWVyRmxhZ3MgbG9jYWxQYWludEZsYWdzLCBQYWludEJlaGF2aW9y
IHBhaW50QmVoYXZpb3IsCisgICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGJvb2wgc2hvdWxk
UGFpbnRPdXRsaW5lLCBib29sIGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycywgYm9vbCBzZWxl
Y3Rpb25Pbmx5LCBib29sIGZvcmNlQmxhY2tUZXh0LAorICAgIGJvb2wgaGF2ZVRyYW5zcGFyZW5j
eSwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIFJlbmRlck9iamVj
dCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpCit7CisgICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlw
IHJlY3RzIHdlIHNob3VsZCB1c2Ugb25seSB3aGVuIHdlIG5lZWQgdGhlbS4KKyAgICBMYXlvdXRS
ZWN0IGxheWVyQm91bmRzOworICAgIENsaXBSZWN0IGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBs
eSwgb3V0bGluZVJlY3Q7CisgICAgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAo
c2hvdWxkUGFpbnRDb250ZW50IHx8IHNob3VsZFBhaW50T3V0bGluZSB8fCBpc1BhaW50aW5nT3Zl
cmxheVNjcm9sbGJhcnMpIHsKKyAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250
ZXh0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9u
LCAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1w
b3JhcnlDbGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0cywgSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUsIGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVu
dHMgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICAgICAg
Y2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxp
bmVSZWN0LCAmb2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBwYWludE9mZnNldCA9IHRvUG9pbnQo
bGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50
aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbik7CisgICAgfQorCisgICAgLy8gV2Ugd2FudCB0
byBwYWludCBvdXIgbGF5ZXIsIGJ1dCBvbmx5IGlmIHdlIGludGVyc2VjdCB0aGUgZGFtYWdlIHJl
Y3QuCisgICAgaWYgKHRoaXMgIT0gbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyIHx8ICEobG9j
YWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykpCisgICAg
ICAgIHNob3VsZFBhaW50Q29udGVudCAmPSBpbnRlcnNlY3RzRGFtYWdlUmVjdChsYXllckJvdW5k
cywgZGFtYWdlUmVjdC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm9mZnNl
dEZyb21Sb290KTsKIAogICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRp
bmdDb21wb3NpdGluZ0JhY2tncm91bmRQaGFzZSkgewogICAgICAgICBpZiAoc2hvdWxkUGFpbnRD
b250ZW50ICYmICFzZWxlY3Rpb25Pbmx5KSB7CiAgICAgICAgICAgICAvLyBCZWdpbiB0cmFuc3Bh
cmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUgdG8gcGFpbnQgc29t
ZXRoaW5nLgogICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0gICAgICAgICAgICAg
ICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7CisgICAgICAgICAgICAgICAgYmVnaW5UcmFu
c3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
by5yb290TGF5ZXIsIG9yaWdpbmFsUGFpbnRJbmZvRGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5m
by5wYWludEJlaGF2aW9yKTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobG9jYWxQYWludGlu
Z0luZm8uY2xpcFRvRGlydHlSZWN0KSB7CiAgICAgICAgICAgICAgICAgLy8gUGFpbnQgb3VyIGJh
Y2tncm91bmQgZmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkgY2hpbGQgbGF5ZXJzLgpAQCAtMzgw
Myw3ICszODQ0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQog
ICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50ICYmICFjbGlwUmVjdFRvQXBwbHkuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgbGF5ZXJzIGxhemlseSBu
b3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUgdG8gcGFpbnQgc29tZXRoaW5nLgogICAgICAgICAgICAg
aWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0gICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvcik7CisgICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNw
YXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9yaWdpbmFs
UGFpbnRJbmZvRGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKIAog
ICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgewogICAg
ICAgICAgICAgICAgIC8vIFNldCB1cCB0aGUgY2xpcCB1c2VkIHdoZW4gcGFpbnRpbmcgb3VyIGNo
aWxkcmVuLgpAQCAtMzg0OSwxOCArMzg5MCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5
ZXJDb250ZW50cyhHcmEKICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwogICAgIH0KIAotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0
KCkpIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvcnJlY3QgY2xpcHBpbmcgKGllLiBvdmVyZmxv
dzogaGlkZGVuKS4KLSAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsIGRhbWFnZVJlY3QpOwotICAgICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5hcHBs
eUZpbHRlckVmZmVjdCgpOwotICAgICAgICByZXN0b3JlQ2xpcCh0cmFuc3BhcmVuY3lMYXllckNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIG5vdyB1c2UgdGhlIG9yaWdp
bmFsIHRyYW5zcGFyZW5jeSBjb250ZXh0LgotICAgIEFTU0VSVCh0cmFuc3BhcmVuY3lMYXllckNv
bnRleHQgPT0gY29udGV4dCk7Ci0KICAgICBpZiAoKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5
ZXJQYWludGluZ0NvbXBvc2l0aW5nTWFza1BoYXNlKSAmJiBzaG91bGRQYWludENvbnRlbnQgJiYg
cmVuZGVyZXIoKS0+aGFzTWFzaygpICYmICFzZWxlY3Rpb25Pbmx5KSB7CiAgICAgICAgIGlmIChs
b2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCiAgICAgICAgICAgICBjbGlwVG9SZWN0
KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRp
dXMpOyAvLyBNYXNrIHBhaW50aW5nIHdpbGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCkBAIC0z
ODcyLDIwICszOTAxLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdy
YQogICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQogICAgICAg
ICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGRhbWFnZVJlY3QpOwogICAgIH0KLQotICAgIC8vIEVuZCBvdXIgdHJhbnNwYXJlbmN5IGxh
eWVyCi0gICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kgJiYgbV91c2VkVHJhbnNwYXJlbmN5ICYmICFt
X3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbikgewotICAgICAgICBjb250ZXh0LT5lbmRUcmFuc3Bh
cmVuY3lMYXllcigpOwotICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgIG1fdXNl
ZFRyYW5zcGFyZW5jeSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlLXNldCB0aGlzIHRvIHdo
YXRldmVyIGl0IHdhcyBiZWZvcmUgd2UgcGFpbnRlZCB0aGUgbGF5ZXIuCi0gICAgaWYgKG5lZWRU
b0FkanVzdFN1YnBpeGVsUXVhbnRpemF0aW9uKQotICAgICAgICBjb250ZXh0LT5zZXRTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMoZGlkUXVhbnRpemVGb250cyk7Ci0KLSAgICBpZiAoaGFzQ2xp
cFBhdGgpCi0gICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiBsaXN0LCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5
ZXJGbGFncyBwYWludEZsYWdzKQpAQCAtMzkwMiw3ICszOTE3LDcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRMaXN0KFZlY3RvcjxSZW5kZQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxp
c3QtPmF0KGkpOwotICAgICAgICBpZiAoIWNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkgfHwgdXNl
UmVnaW9uQmFzZWRDb2x1bW5zKCkpCisgICAgICAgIGlmICghY2hpbGRMYXllci0+aXNQYWdpbmF0
ZWQoKSkKICAgICAgICAgICAgIGNoaWxkTGF5ZXItPnBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRp
bmdJbmZvLCBwYWludEZsYWdzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFpbnRQYWdp
bmF0ZWRDaGlsZExheWVyKGNoaWxkTGF5ZXIsIGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRG
bGFncyk7CkBAIC00NDA3LDcgKzQ0MjIsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6Omhp
dFRlc3RMaXN0KFZlCiAgICAgICAgIFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQo
aSk7CiAgICAgICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IDA7CiAgICAgICAgIEhpdFRlc3RS
ZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9uKCkpOwotICAgICAgICBpZiAo
Y2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSAmJiAhdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCkpCisg
ICAgICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgaGl0TGF5
ZXIgPSBoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJl
cXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9y
bVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBoaXRMYXllciA9IGNoaWxkTGF5ZXItPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJl
cXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlLCB0
cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiAxNDM3NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1
MSwzNSBAQCBwdWJsaWM6CiAjZW5kaWYKIH07CiAKK2NsYXNzIFBhZ2luYXRlZExheWVyQm94Cit7
CitwdWJsaWM6CisgICAgUGFnaW5hdGVkTGF5ZXJCb3goY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNl
dCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcCkKKyAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisg
ICAgICAgICwgbV9jbGlwUmVjdChjbGlwKQorICAgIHsgfQorCisgICAgTGF5b3V0UG9pbnQgdHJh
bnNsYXRpb25PZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIExheW91dFJl
Y3QgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CisgICAgCitwcml2YXRl
OgorICAgIExheW91dFBvaW50IG1fb2Zmc2V0OyAvLyBUaGUgYW1vdW50IHRvIHRyYW5zbGF0ZSB0
aGUgbGF5ZXIuCisgICAgTGF5b3V0UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCB0byBhcHBs
eSB0byB0aGUgbGF5ZXIgaW4gbG9jYWwgbGF5ZXIgY29vcmRpbmF0ZXMuCit9OworCitjbGFzcyBQ
YWdpbmF0ZWRMYXllckJveGVzCit7CitwdWJsaWM6CisgICAgUGFnaW5hdGVkTGF5ZXJCb3hlcygp
CisgICAgeyB9CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIHNldCBvZiBib3hlcyBmb3IgdGhpcyBs
YXllci4KKyAgICB2b2lkIHVwZGF0ZShSZW5kZXJMYXllciopOworICAgIAorcHJpdmF0ZToKKyAg
ICBWZWN0b3I8UGFnaW5hdGVkTGF5ZXJCb3g+IG1fYm94ZXM7Cit9OworCiBjbGFzcyBSZW5kZXJM
YXllciA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNz
IFJlbmRlclJlcGxpY2E7CkBAIC00MTgsNiArNDQ3LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
CiAgICAgYm9vbCBpc1BhZ2luYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYWdpbmF0ZWQ7IH0K
KyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7IH0KIAogICAgIHZvaWQgdXBkYXRlVHJhbnNm
b3JtKCk7CiAgICAgCkBAIC04ODYsNiArOTE2LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50
TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExh
eWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzQW5kUmVmbGVjdGlvbihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7
CiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOworICAgIHZvaWQgcGFpbnRMYXllckNv
bnRlbnRzQXBwbHlpbmdQYWdpbmF0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiwgY29uc3QgTGF5b3V0UmVjdCYgb3JpZ2luYWxQYWludEluZm9EaXJ0eVJlY3Qs
IGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tUm9vdCwKKyAgICAgICAgUGFpbnRMYXllckZs
YWdzLCBQYWludEJlaGF2aW9yLCBib29sIHNob3VsZFBhaW50Q29udGVudCwgYm9vbCBzaG91bGRQ
YWludE91dGxpbmUsIGJvb2wgaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzLCBib29sIHNlbGVj
dGlvbk9ubHksCisgICAgICAgIGJvb2wgZm9yY2VCbGFja1RleHQsIGJvb2wgaGF2ZVRyYW5zcGFy
ZW5jeSwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIFJlbmRlck9i
amVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRMaXN0KFZlY3Rv
cjxSZW5kZXJMYXllcio+KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRQYWdpbmF0ZWRDaGlsZExheWVy
KFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludENoaWxkTGF5ZXJJ
bnRvQ29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IFZlY3RvcjxSZW5k
ZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNpemVfdCBjb2x1bW5JbmRleCk7CkBAIC0xMTg0LDYg
KzEyMTcsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyU2Nyb2xsYmFyUGFydCogbV9zY3JvbGxD
b3JuZXI7CiAgICAgUmVuZGVyU2Nyb2xsYmFyUGFydCogbV9yZXNpemVyOwogCisgICAgLy8gUG9p
bnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBh
Z2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KKyAgICBSZW5kZXJMYXll
ciogbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7CisKIHByaXZhdGU6CiAgICAgSW50UmVjdCBt
X2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKIAo=
</data>
<flag name="commit-queue"
          id="210405"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189907</attachid>
            <date>2013-02-22 21:58:19 -0800</date>
            <delta_ts>2013-02-23 13:40:36 -0800</delta_ts>
            <desc>Just to run through ews, not for review.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29390</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQzNzU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA0LDggKzQwNSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDQ5LDcgKzQ1Miw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIyLDYgKzkyNSw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1f
aXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7
CisKICAgICBpZiAoaXNDb21wb3NpdGVkKCkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47
IC8vIEZJWE1FOiBXZSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGlu
ZyBsYXllcnMgc29tZWRheS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUg
UmVuZGVyVmlldyBjYW4ndCBiZSBwYWdpbmF0ZWQuICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwg
bW92ZSB0byBhIG1vZGVsIHdoZXJlIGl0IGlzIHRob3VnaC4KQEAgLTkzMSwxNiArOTM2LDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogICAgIC8vIHJlY3VycmluZyBp
bnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMg
Zm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9v
dHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3Rl
YWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8g
Z2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAg
d2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2Vu
ZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3
ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2ls
eS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAg
ICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7CiAgICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkK
LSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQoKTsKKyAg
ICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2lzUGFnaW5h
dGVkID0gcGFyZW50KCktPnJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtOTU1LDcgKzk2MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24o
KQogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayAmJiBjb250YWluaW5nQmxvY2sgIT0gdmll
dzsKICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5oYXNMYXll
cigpKSB7Ci0gICAgICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGNvbnRhaW5pbmdCbG9jay0+
bGF5ZXIoKS0+aXNQYWdpbmF0ZWQoKTsKKyAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3MTYsNyArMzcyMiw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKIAogICAgICAgICAgICAgLy8g
UmV3aXJlIHRoZSBvbGQgY29udGV4dCB0byBhIG1lbW9yeSBidWZmZXIsIHNvIHRoYXQgd2UgY2Fu
IGNhcHR1cmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIE5PVEU6
IFdlIHNhdmVkIHRoZSBvbGQgY29udGV4dCBpbiB0aGUgInRyYW5zcGFyZW5jeUxheWVyQ29udGV4
dCIgbG9jYWwgdmFyaWFibGUsIHRvIGJlIGFibGUgdG8gc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5
ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IGFuZCBhdm9pZCBkdXBs
aWNhdGluZyAiYmVnaW5GaWx0ZXJFZmZlY3QiIGFmdGVyIGVhY2ggdHJhbnNwYXJlbnkgbGF5ZXIg
Y2FsbC4gQWxzbywgbm90ZSB0aGF0IAorICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNv
bnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFj
aCB0cmFuc3BhcmVuY3kgbGF5ZXIgY2FsbC4gQWxzbywgbm90ZSB0aGF0IAogICAgICAgICAgICAg
Ly8gYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMgd2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmdsZSBsYXp5
IHRyYW5zcGFyZW5jeSBsYXllciwgZXZlbiB0aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNlIGluIHRo
aXMgbWV0aG9kLgogICAgICAgICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYmVnaW5GaWx0
ZXJFZmZlY3QoY29udGV4dCk7CiAKQEAgLTM3MzAsMjggKzM3MzYsMTMgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotI2VuZGlmCi0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxk
IHVzZSBvbmx5IHdoZW4gd2UgbmVlZCB0aGVtLgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7
Ci0gICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsK
LSAgICBMYXlvdXRQb2ludCBwYWludE9mZnNldDsKIAotICAgIGlmIChzaG91bGRQYWludENvbnRl
bnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5lIHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykg
ewotICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQobG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24sIChsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6
IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgbG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cyA/IElnbm9yZU92ZXJm
bG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXApOwotICAgICAgICBjYWxjdWxhdGVSZWN0cyhj
bGlwUmVjdHNDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbGF5ZXJC
b3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsICZvZmZzZXRG
cm9tUm9vdCk7Ci0gICAgICAgIHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2Nh
dGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVs
QWNjdW11bGF0aW9uKTsKKyAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZm
ZWN0KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmls
dGVyIGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFy
ZW5jeSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0
YXJ0cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KKyAgICAgICAgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnRCZWhhdmlvcik7CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIGZvcmNlQmxhY2tUZXh0ID0g
bG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNr
VGV4dDsKLSAgICBib29sIHNlbGVjdGlvbk9ubHkgID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvciAmIFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5OwotICAgIAotICAgIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWw7Ci0gICAgaWYgKGxvY2Fs
UGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZCkKLSAgICAg
ICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yU2tpcFJvb3RCYWNrZ3JvdW5kOwotICAg
IGVsc2UgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1Jvb3RCYWNrZ3Jv
dW5kT25seSkKLSAgICAgICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yUm9vdEJhY2tn
cm91bmRPbmx5OwotICAgIAogICAgIC8vIElmIHRoaXMgbGF5ZXIncyByZW5kZXJlciBpcyBhIGNo
aWxkIG9mIHRoZSBwYWludGluZ1Jvb3QsIHdlIHJlbmRlciB1bmNvbmRpdGlvbmFsbHksIHdoaWNo
CiAgICAgLy8gaXMgZG9uZSBieSBwYXNzaW5nIGEgbmlsIHBhaW50aW5nUm9vdCBkb3duIHRvIG91
ciByZW5kZXJlciAoYXMgaWYgbm8gcGFpbnRpbmdSb290IHdhcyBldmVyIHNldCkuCiAgICAgLy8g
RWxzZSwgb3VyIHJlbmRlcmVyIHRyZWUgbWF5IG9yIG1heSBub3QgY29udGFpbiB0aGUgcGFpbnRp
bmcgcm9vdCwgc28gd2UgcGFzcyB0aGF0IHJvb3QgYWxvbmcKQEAgLTM3NjMsNzkgKzM3NTQsNDAg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIp
CiAgICAgICAgIHBlcmZvcm1PdmVybGFwVGVzdHMoKmxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBU
ZXN0UmVxdWVzdHMsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdGhpcyk7CiAKLSAgICAv
LyBXZSB3YW50IHRvIHBhaW50IG91ciBsYXllciwgYnV0IG9ubHkgaWYgd2UgaW50ZXJzZWN0IHRo
ZSBkYW1hZ2UgcmVjdC4KLSAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRl
bnRzKSkKLSAgICAgICAgc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0
KGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLCAmb2Zmc2V0RnJvbVJvb3QpOworICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBh
aW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0Owor
ICAgIGJvb2wgc2VsZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
ICYgUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHk7CisgICAgCisgICAgUGFpbnRCZWhhdmlvciBw
YWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKKyAgICBpZiAobG9jYWxQYWludEZs
YWdzICYgUGFpbnRMYXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQorICAgICAgICBwYWlu
dEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7CisgICAgZWxzZSBp
ZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5
KQorICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9u
bHk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGFz
U3RhcnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFuc3BhcmVuY3kpIHsKLSAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkg
c3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNoaWxk
IGxheWVyIGxhemlseSBzdGFydHMgb25lIHdpdGggdGhlIHdyb25nIGNvbnRleHQuCi0gICAgICAg
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOworICAgIExheWVyRnJhZ21lbnRzIGxheWVyRnJh
Z21lbnRzOworICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5l
IHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykgeworICAgICAgICAvLyBDb2xsZWN0IHRo
ZSBmcmFnbWVudHMuIFRoaXMgd2lsbCBjb21wdXRlIHRoZSBjbGlwIHJlY3RhbmdsZXMgYW5kIHBh
aW50IG9mZnNldHMgZm9yIGVhY2ggbGF5ZXIgZnJhZ21lbnQsIGFzIHdlbGwgYXMgd2hldGhlciBv
ciBub3QgdGhlIGNvbnRlbnQgb2YgZWFjaAorICAgICAgICAvLyBmcmFnbWVudCBzaG91bGQgcGFp
bnQuCisgICAgICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHNob3VsZFBhaW50
Q29udGVudCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncywgJm9mZnNldEZyb21S
b290KTsKICAgICB9Ci0jZW5kaWYKLQorICAgIAogICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQ
YWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0JhY2tncm91bmRQaGFzZSkgewotICAgICAgICBp
ZiAoc2hvdWxkUGFpbnRDb250ZW50ICYmICFzZWxlY3Rpb25Pbmx5KSB7Ci0gICAgICAgICAgICAv
LyBCZWdpbiB0cmFuc3BhcmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhh
dmUgdG8gcGFpbnQgc29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kp
Ci0gICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5
ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWlu
dERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0gICAgICAgIAot
ICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgewotICAg
ICAgICAgICAgICAgIC8vIFBhaW50IG91ciBiYWNrZ3JvdW5kIGZpcnN0LCBiZWZvcmUgcGFpbnRp
bmcgYW55IGNoaWxkIGxheWVycy4KLSAgICAgICAgICAgICAgICAvLyBFc3RhYmxpc2ggdGhlIGNs
aXAgdXNlZCB0byBwYWludCBvdXIgYmFja2dyb3VuZC4KLSAgICAgICAgICAgICAgICBjbGlwVG9S
ZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJS
YWRpdXMpOyAvLyBCYWNrZ3JvdW5kIHBhaW50aW5nIHdpbGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNl
bGYuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFBhaW50IHRo
ZSBiYWNrZ3JvdW5kLgotICAgICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBw
aXhlbFNuYXBwZWRJbnRSZWN0KGRhbWFnZVJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZUJsb2NrQmFj
a2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFp
bnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludElu
Zm8sIHBhaW50T2Zmc2V0KTsKLQotICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNs
aXBUb0RpcnR5UmVjdCkKLSAgICAgICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgLy8gUGFpbnQgb25seSB0aGUgYmFja2dyb3VuZHMgZm9yIGFsbCBvZiB0aGUgZnJhZ21l
bnRzIG9mIHRoZSBsYXllci4KKyAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCAmJiAhc2Vs
ZWN0aW9uT25seSkKKyAgICAgICAgICAgIHBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgY29udGV4dCwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBwYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFuc3BhcmVuY3ksCisgICAgICAgICAgICAgICAgbG9j
YWxQYWludGluZ0luZm8sIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsK
IAogICAgICAgICAvLyBOb3cgd2FsayB0aGUgc29ydGVkIGxpc3Qgb2YgY2hpbGRyZW4gd2l0aCBu
ZWdhdGl2ZSB6LWluZGljZXMuCiAgICAgICAgIHBhaW50TGlzdChuZWdaT3JkZXJMaXN0KCksIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIH0KICAgICAK
ICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdG
b3JlZ3JvdW5kUGhhc2UpIHsKLSAgICAgICAgLy8gTm93IGVzdGFibGlzaCB0aGUgYXBwcm9wcmlh
dGUgY2xpcCBhbmQgcGFpbnQgb3VyIGNoaWxkIFJlbmRlck9iamVjdHMuCi0gICAgICAgIGlmIChz
aG91bGRQYWludENvbnRlbnQgJiYgIWNsaXBSZWN0VG9BcHBseS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtu
b3cgd2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcuCi0gICAgICAgICAgICBpZiAoaGF2ZVRyYW5z
cGFyZW5jeSkKLSAgICAgICAgICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3Bh
cmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKLQot
ICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgewotICAg
ICAgICAgICAgICAgIC8vIFNldCB1cCB0aGUgY2xpcCB1c2VkIHdoZW4gcGFpbnRpbmcgb3VyIGNo
aWxkcmVuLgotICAgICAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9v
dExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgY2xpcFJl
Y3RUb0FwcGx5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgUGFp
bnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBSZWN0VG9B
cHBseS5yZWN0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25P
bmx5ID8gUGFpbnRQaGFzZVNlbGVjdGlvbiA6IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3Vu
ZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlQmxhY2tUZXh0ID8gKFBh
aW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvciwg
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAg
ICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAg
ICAgICAgIGlmICghc2VsZWN0aW9uT25seSkgewotICAgICAgICAgICAgICAgIHBhaW50SW5mby5w
aGFzZSA9IFBhaW50UGhhc2VGbG9hdDsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5wYWlu
dChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhh
c2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ub3Zl
cmxhcFRlc3RSZXF1ZXN0cyA9IGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHM7
Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkT3V0
bGluZXM7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5n
SW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAgICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIHBh
aW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgdHJhbnNw
YXJlbmN5TGF5ZXJDb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFu
c3BhcmVuY3ksCisgICAgICAgICAgICAgICAgbG9jYWxQYWludGluZ0luZm8sIHBhaW50QmVoYXZp
b3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBzZWxlY3Rpb25Pbmx5LCBmb3JjZUJsYWNrVGV4
dCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkUGFpbnRPdXRsaW5lKQorICAgICAgICAg
ICAgcGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mbywgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwog
Ci0gICAgICAgIGlmIChzaG91bGRQYWludE91dGxpbmUgJiYgIW91dGxpbmVSZWN0LmlzRW1wdHko
KSkgewotICAgICAgICAgICAgLy8gUGFpbnQgb3VyIG93biBvdXRsaW5lCi0gICAgICAgICAgICBQ
YWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3Qob3V0bGluZVJl
Y3QucmVjdCgpKSwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAgICAgICAgICAg
IGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgb3V0bGluZVJlY3QsIERvTm90SW5jbHVkZVNlbGZG
b3JCb3JkZXJSYWRpdXMpOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgb3V0bGluZVJlY3QpOwotICAgICAgICB9Ci0gICAg
CiAgICAgICAgIC8vIFBhaW50IGFueSBjaGlsZCBsYXllcnMgdGhhdCBoYXZlIG92ZXJmbG93Lgog
ICAgICAgICBwYWludExpc3QobV9ub3JtYWxGbG93TGlzdC5nZXQoKSwgY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgCkBAIC0zODQzLDM0ICszNzk1LDI2
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKICAgICAgICAgcGFp
bnRMaXN0KHBvc1pPcmRlckxpc3QoKSwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2Fs
UGFpbnRGbGFncyk7CiAgICAgfQogCi0gICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFy
cykgewotICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAg
ICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHBhaW50
T2Zmc2V0KSwgcGl4ZWxTbmFwcGVkSW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSksIHRydWUpOwot
ICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAgfQorICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9s
bGJhcnMpCisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOwogCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQogICAgIGlmIChmaWx0ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSkg
ewogICAgICAgICAvLyBBcHBseSB0aGUgY29ycmVjdCBjbGlwcGluZyAoaWUuIG92ZXJmbG93OiBo
aWRkZW4pLgorICAgICAgICAvLyBGSVhNRTogSXQgaXMgaW5jb3JyZWN0IHRvIGp1c3QgY2xpcCB0
byB0aGUgZGFtYWdlUmVjdCBoZXJlIG9uY2UgbXVsdGlwbGUgZnJhZ21lbnRzIGFyZSBpbnZvbHZl
ZC4KKyAgICAgICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCA9IGxheWVyRnJhZ21lbnRzLmlzRW1wdHko
KSA/IENsaXBSZWN0KCkgOiBsYXllckZyYWdtZW50c1swXS5kYW1hZ2VSZWN0OwogICAgICAgICBj
bGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CiAg
ICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLmFwcGx5RmlsdGVyRWZmZWN0KCk7CiAgICAg
ICAgIHJlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwogICAgIH0KICNlbmRpZgotCisgICAgCiAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Ugbm93IHVzZSB0aGUgb3JpZ2luYWwgdHJhbnNwYXJlbmN5
IGNvbnRleHQuCiAgICAgQVNTRVJUKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCA9PSBjb250ZXh0
KTsKIAogICAgIGlmICgobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29tcG9z
aXRpbmdNYXNrUGhhc2UpICYmIHNob3VsZFBhaW50Q29udGVudCAmJiByZW5kZXJlcigpLT5oYXNN
YXNrKCkgJiYgIXNlbGVjdGlvbk9ubHkpIHsKLSAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZv
LmNsaXBUb0RpcnR5UmVjdCkKLSAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0lu
Zm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwg
ZGFtYWdlUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFp
bnRpbmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KLSAgICAgICAgCi0gICAgICAgIC8v
IFBhaW50IHRoZSBtYXNrLgotICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBp
eGVsU25hcHBlZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlTWFzaywgUGFp
bnRCZWhhdmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJ
bmZvLnJlZ2lvbik7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0Rp
cnR5UmVjdCkKLSAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgLy8gUGFpbnQgdGhlIG1h
c2sgZm9yIHRoZSBmcmFnbWVudHMuCisgICAgICAgIHBhaW50TWFza0ZvckZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyKTsKICAgICB9CiAKICAgICAvLyBFbmQgb3VyIHRyYW5zcGFyZW5jeSBsYXllcgpAQCAt
MzkwMiwxMyArMzg0NiwxNjUgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMaXN0KFZlY3RvcjxS
ZW5kZQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewog
ICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkpOwotICAgICAgICBp
ZiAoIWNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkgfHwgdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCkp
CisgICAgICAgIGlmICghY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgICAgIGNo
aWxkTGF5ZXItPnBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFpbnRQYWdpbmF0ZWRDaGlsZExheWVyKGNoaWxk
TGF5ZXIsIGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAgICAgfQogfQogCit2
b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVu
dHMsIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9j
YWxQYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBsb2NhbFBhaW50RmxhZ3MsCisgICAgY29u
c3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQoreworICAgIC8vIFRPRE86IENvbGxlY3Qg
bXVsdGlwbGUgZnJhZ21lbnRzIGZvciBsYXllcnMgd2l0aCBhbiBlbmNsb3NpbmcgcGFnaW5hdGlv
biBsYXllci4KKyAgICAvLyBGb3IgdW5wYWdpbmF0ZWQgbGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9u
ZSBmcmFnbWVudC4KKyAgICBMYXllckZyYWdtZW50IGZyYWdtZW50OworICAgIENsaXBSZWN0c0Nv
bnRleHQgY2xpcFJlY3RzQ29udGV4dChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxvY2Fs
UGFpbnRpbmdJbmZvLnJlZ2lvbiwgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3Jh
cnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsIEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFp
bnRpbmdPdmVyZmxvd0NvbnRlbnRzID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJm
bG93Q2xpcCk7CisgICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJvdW5kcywgZnJhZ21lbnQuZGFtYWdl
UmVjdCwgZnJhZ21lbnQuY2xpcFJlY3RUb0FwcGx5LCBmcmFnbWVudC5vdXRsaW5lUmVjdCwgb2Zm
c2V0RnJvbVJvb3QpOworICAgIGZyYWdtZW50LnBhaW50T2Zmc2V0ID0gdG9Qb2ludChmcmFnbWVu
dC5ib3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5n
SW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbik7CisgICAgCisgICAgaWYgKHRoaXMgIT0gbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyIHx8ICEobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBh
aW50aW5nT3ZlcmZsb3dDb250ZW50cykpCisgICAgICAgIGZyYWdtZW50LnNob3VsZFBhaW50Q29u
dGVudCA9IHNob3VsZFBhaW50Q29udGVudCAmJiBpbnRlcnNlY3RzRGFtYWdlUmVjdChmcmFnbWVu
dC5ib3VuZHMsIGZyYWdtZW50LmRhbWFnZVJlY3QucmVjdCgpLCBsb2NhbFBhaW50aW5nSW5mby5y
b290TGF5ZXIsIG9mZnNldEZyb21Sb290KTsKKworICAgIGZyYWdtZW50cy5hcHBlbmQoZnJhZ21l
bnQpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgIGNv
bnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFu
c3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywgUGFp
bnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290
Rm9yUmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50
cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJG
cmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmICghZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gQmVnaW4gdHJhbnNwYXJlbmN5
IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNvbWV0aGlu
Zy4KKyAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCisgICAgICAgICAgICBiZWdpblRyYW5z
cGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LnJvb3RMYXllciwgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50QmVoYXZpb3IpOworICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xp
cFRvRGlydHlSZWN0KSB7CisgICAgICAgICAgICAvLyBQYWludCBvdXIgYmFja2dyb3VuZCBmaXJz
dCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMuCisgICAgICAgICAgICAvLyBFc3Rh
Ymxpc2ggdGhlIGNsaXAgdXNlZCB0byBwYWludCBvdXIgYmFja2dyb3VuZC4KKyAgICAgICAgICAg
IGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuZGFtYWdlUmVjdCwgRG9Ob3RJbmNs
dWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIEJhY2tncm91bmQgcGFpbnRpbmcgd2lsbCBoYW5k
bGUgY2xpcHBpbmcgdG8gc2VsZi4KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUGFp
bnQgdGhlIGJhY2tncm91bmQuCisgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwg
Y29sbGVjdCB0aGUgcmVnaW9uIGZyb20gdGhlIGZyYWdtZW50IGl0c2VsZiBpbnN0ZWFkIG9mIGp1
c3QgZnJvbSB0aGUgcGFpbnQgaW5mby4KKyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250
ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmRhbWFnZVJlY3QucmVjdCgpKSwgUGFp
bnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCktPnBh
aW50KHBhaW50SW5mbywgZnJhZ21lbnQucGFpbnRPZmZzZXQpOworCisgICAgICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCisgICAgICAgICAgICByZXN0b3JlQ2xpcChj
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuZGFtYWdl
UmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEZvcmVncm91bmRGb3JG
cmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0
LAorICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29s
IGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5n
SW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFp
bnRpbmdSb290Rm9yUmVuZGVyZXIsIGJvb2wgc2VsZWN0aW9uT25seSwgYm9vbCBmb3JjZUJsYWNr
VGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgaWYgd2UgaGF2ZSBzb21ldGhpbmcg
dG8gcGFpbnQuCisgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
TGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICAg
ICAgaWYgKGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCAmJiAhZnJhZ21lbnQuY2xpcFJlY3RU
b0FwcGx5LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVy
LCB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhh
dmlvcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgUGFpbnRCZWhhdmlvciBsb2NhbFBhaW50QmVoYXZpb3IgPSBmb3Jj
ZUJsYWNrVGV4dCA/IChQYWludEJlaGF2aW9yKVBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCA6
IHBhaW50QmVoYXZpb3I7CisKKyAgICAvLyBPcHRpbWl6ZSBjbGlwcGluZyBmb3IgdGhlIHNpbmds
ZSBmcmFnbWVudCBjYXNlLgorICAgIGJvb2wgc2hvdWxkQ2xpcCA9IGxvY2FsUGFpbnRpbmdJbmZv
LmNsaXBUb0RpcnR5UmVjdCAmJiBsYXllckZyYWdtZW50cy5zaXplKCkgPT0gMSAmJiBsYXllckZy
YWdtZW50c1swXS5zaG91bGRQYWludENvbnRlbnQgJiYgIWxheWVyRnJhZ21lbnRzWzBdLmNsaXBS
ZWN0VG9BcHBseS5pc0VtcHR5KCk7CisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIGNsaXBU
b1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwgbGF5ZXJGcmFnbWVudHNbMF0uY2xpcFJlY3RUb0FwcGx5KTsK
KyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIGxvb3AgdGhyb3VnaCBldmVyeSBmcmFnbWVudCBtdWx0
aXBsZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0byByZXBhaW50IGluIGVhY2ggc3BlY2lmaWMgcGhh
c2UgaW4gb3JkZXIgZm9yCisgICAgLy8gaW50ZXJsZWF2aW5nIG9mIHRoZSBmcmFnbWVudHMgdG8g
d29yayBwcm9wZXJseS4KKyAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2Uo
c2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9j
a0JhY2tncm91bmRzLCBsYXllckZyYWdtZW50cywKKyAgICAgICAgY29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwor
ICAgIAorICAgIGlmICghc2VsZWN0aW9uT25seSkgeworICAgICAgICBwYWludEZvcmVncm91bmRG
b3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZsb2F0LCBsYXllckZyYWdtZW50cywgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290
Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhh
c2UoUGFpbnRQaGFzZUZvcmVncm91bmQsIGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7
CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNl
Q2hpbGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckZyYWdtZW50c1swXS5jbGlwUmVj
dFRvQXBwbHkpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZSBwaGFzZSwgY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxh
eWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZp
b3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpCit7CisgICAgYm9vbCBz
aG91bGRDbGlwID0gbG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ICYmIGxheWVyRnJh
Z21lbnRzLnNpemUoKSA+IDE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJh
Z21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBs
YXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5zaG91bGRQYWludENv
bnRlbnQgfHwgZnJhZ21lbnQuY2xpcFJlY3RUb0FwcGx5LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgICAg
ICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmNsaXBSZWN0VG9BcHBseSk7Cisg
ICAgCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50
UmVjdChmcmFnbWVudC5jbGlwUmVjdFRvQXBwbHkucmVjdCgpKSwgcGhhc2UsIHBhaW50QmVoYXZp
b3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwor
ICAgICAgICBpZiAocGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAgICAgICAgICBw
YWludEluZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBU
ZXN0UmVxdWVzdHM7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgZnJhZ21l
bnQucGFpbnRPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZENsaXApCisgICAg
ICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgZnJhZ21lbnQuY2xpcFJlY3RUb0FwcGx5KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5
ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGlu
Z0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLAorICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlv
ciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExh
eWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgaWYg
KGZyYWdtZW50Lm91dGxpbmVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgIAorICAgICAgICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUKKyAgICAgICAgUGFpbnRJbmZv
IHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYWdtZW50Lm91dGxpbmVS
ZWN0LnJlY3QoKSksIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRp
bmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIGNs
aXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIERvTm90SW5jbHVk
ZVNlbGZGb3JCb3JkZXJSYWRpdXMpOworICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludElu
Zm8sIGZyYWdtZW50LnBhaW50T2Zmc2V0KTsKKyAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50Lm91dGxpbmVSZWN0KTsK
KyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TWFza0ZvckZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLAorICAgIFJlbmRl
ck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdt
ZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmICghZnJhZ21l
bnQuc2hvdWxkUGFpbnRDb250ZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAgIGNsaXBU
b1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuZGFtYWdlUmVjdCwgRG9Ob3RJbmNsdWRlU2Vs
ZkZvckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFpbnRpbmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcg
dG8gc2VsZi4KKyAgICAgICAgCisgICAgICAgIC8vIFBhaW50IHRoZSBtYXNrLgorICAgICAgICAv
LyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBm
cmFnbWVudCBpdHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCisgICAg
ICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFn
bWVudC5kYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9y
bWFsLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsK
KyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNl
dCk7CisgICAgICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlS
ZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmRhbWFnZVJlY3QpOworICAgIH0KK30KKwordm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8pCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXll
ckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGNsaXBU
b1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuZGFtYWdlUmVjdCk7CisgICAgICAgIHBhaW50
T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQoZnJhZ21lbnQucGFpbnRP
ZmZzZXQpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmRhbWFnZVJlY3QucmVjdCgpKSwg
dHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBmcmFnbWVudC5kYW1hZ2VSZWN0KTsKKyAgICB9Cit9CisKIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50UGFnaW5hdGVkQ2hpbGRMYXllcihSZW5kZXJMYXllciogY2hpbGRMYXll
ciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFp
bnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKICAgICAvLyBXZSBuZWVk
IHRvIGRvIG11bHRpcGxlIHBhc3NlcywgYnJlYWtpbmcgdXAgb3VyIGNoaWxkIGxheWVyIGludG8g
c3RyaXBzLgpAQCAtNDQwNyw3ICs0NTAzLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpo
aXRUZXN0TGlzdChWZQogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0
KGkpOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwogICAgICAgICBIaXRUZXN0
UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKLSAgICAgICAgaWYg
KGNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkgJiYgIXVzZVJlZ2lvbkJhc2VkQ29sdW1ucygpKQor
ICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgICAgIGhpdExh
eWVyID0gaGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwgcm9vdExheWVyLCBy
ZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLCB0cmFuc2Zv
cm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgaGl0TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCB0aGlzLCBy
ZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLCBmYWxzZSwg
dHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTQzNzU3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw2ICsy
NTEsMjMgQEAgcHVibGljOgogI2VuZGlmCiB9OwogCitzdHJ1Y3QgTGF5ZXJGcmFnbWVudAorewor
cHVibGljOgorICAgIExheWVyRnJhZ21lbnQoKQorICAgICAgICA6IHNob3VsZFBhaW50Q29udGVu
dChmYWxzZSkKKyAgICB7IH0KKworICAgIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50OworICAgIExh
eW91dFJlY3QgYm91bmRzOworICAgIENsaXBSZWN0IGRhbWFnZVJlY3Q7CisgICAgQ2xpcFJlY3Qg
Y2xpcFJlY3RUb0FwcGx5OworICAgIENsaXBSZWN0IG91dGxpbmVSZWN0OworICAgIExheW91dFBv
aW50IHBhaW50T2Zmc2V0OworfTsKKwordHlwZWRlZiBWZWN0b3I8TGF5ZXJGcmFnbWVudD4gTGF5
ZXJGcmFnbWVudHM7CisKIGNsYXNzIFJlbmRlckxheWVyIDogcHVibGljIFNjcm9sbGFibGVBcmVh
IHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKQEAgLTQxOCw2ICs0
MzUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAgICBib29sIGlzUGFnaW5hdGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1BhZ2luYXRlZDsgfQorICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQ
YWdpbmF0aW9uTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXll
cjsgfQogCiAgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKICAgICAKQEAgLTg4OSw2ICs5MDcs
MTkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPios
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZs
YWdzKTsKICAgICB2b2lkIHBhaW50UGFnaW5hdGVkQ2hpbGRMYXllcihSZW5kZXJMYXllciogY2hp
bGRMYXllciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWlu
dExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRDaGlsZExheWVySW50b0NvbHVtbnMoUmVuZGVy
TGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiwgUGFpbnRMYXllckZsYWdzLCBjb25zdCBWZWN0b3I8UmVuZGVyTGF5ZXIqPiYgY29sdW1u
TGF5ZXJzLCBzaXplX3QgY29sdW1uSW5kZXgpOworICAgIAorICAgIHZvaWQgY29sbGVjdEZyYWdt
ZW50cyhMYXllckZyYWdtZW50cyYsIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNl
dEZyb21Sb290KTsKKyAgICB2b2lkIHBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhjb25zdCBM
YXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCosIEdyYXBoaWNz
Q29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgICAgICBjb25zdCBMYXlvdXRS
ZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFp
bnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0
KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisgICAgICAgIGNv
bnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFu
c3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVy
T2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwKKyAgICAgICAgYm9vbCBzZWxlY3Rpb25P
bmx5LCBib29sIGZvcmNlQmxhY2tUZXh0KTsKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZvckZy
YWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9pZCBwYWludE91dGxp
bmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50
aW5nSW5mbywKKyAgICAgICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmpl
Y3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250
cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CisgICAgdm9pZCBwYWludE1hc2tGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICBSZW5kZXJMYXllciogaGl0VGVz
dExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXll
ciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RS
ZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBib29sIGFwcGxpZWRUcmFuc2Zvcm0sCkBAIC0x
MTg0LDYgKzEyMTUsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyU2Nyb2xsYmFyUGFydCogbV9z
Y3JvbGxDb3JuZXI7CiAgICAgUmVuZGVyU2Nyb2xsYmFyUGFydCogbV9yZXNpemVyOwogCisgICAg
Ly8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRv
IGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KKyAgICBSZW5k
ZXJMYXllciogbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7CisKIHByaXZhdGU6CiAgICAgSW50
UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKIAo=
</data>
<flag name="commit-queue"
          id="210465"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189926</attachid>
            <date>2013-02-23 08:25:57 -0800</date>
            <delta_ts>2013-02-23 13:40:36 -0800</delta_ts>
            <desc>Compositing issue should be fixed, just testing ews</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29294</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQzNzU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA0LDggKzQwNSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDQ5LDcgKzQ1Miw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIyLDYgKzkyNSw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1f
aXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7
CisKICAgICBpZiAoaXNDb21wb3NpdGVkKCkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47
IC8vIEZJWE1FOiBXZSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGlu
ZyBsYXllcnMgc29tZWRheS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUg
UmVuZGVyVmlldyBjYW4ndCBiZSBwYWdpbmF0ZWQuICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwg
bW92ZSB0byBhIG1vZGVsIHdoZXJlIGl0IGlzIHRob3VnaC4KQEAgLTkzMSwxNiArOTM2LDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogICAgIC8vIHJlY3VycmluZyBp
bnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMg
Zm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9v
dHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3Rl
YWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8g
Z2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAg
d2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2Vu
ZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3
ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2ls
eS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAg
ICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7CiAgICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkK
LSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQoKTsKKyAg
ICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2lzUGFnaW5h
dGVkID0gcGFyZW50KCktPnJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtOTU1LDcgKzk2MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24o
KQogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayAmJiBjb250YWluaW5nQmxvY2sgIT0gdmll
dzsKICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5oYXNMYXll
cigpKSB7Ci0gICAgICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGNvbnRhaW5pbmdCbG9jay0+
bGF5ZXIoKS0+aXNQYWdpbmF0ZWQoKTsKKyAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3MTYsNyArMzcyMiw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKIAogICAgICAgICAgICAgLy8g
UmV3aXJlIHRoZSBvbGQgY29udGV4dCB0byBhIG1lbW9yeSBidWZmZXIsIHNvIHRoYXQgd2UgY2Fu
IGNhcHR1cmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIE5PVEU6
IFdlIHNhdmVkIHRoZSBvbGQgY29udGV4dCBpbiB0aGUgInRyYW5zcGFyZW5jeUxheWVyQ29udGV4
dCIgbG9jYWwgdmFyaWFibGUsIHRvIGJlIGFibGUgdG8gc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5
ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IGFuZCBhdm9pZCBkdXBs
aWNhdGluZyAiYmVnaW5GaWx0ZXJFZmZlY3QiIGFmdGVyIGVhY2ggdHJhbnNwYXJlbnkgbGF5ZXIg
Y2FsbC4gQWxzbywgbm90ZSB0aGF0IAorICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNv
bnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFj
aCB0cmFuc3BhcmVuY3kgbGF5ZXIgY2FsbC4gQWxzbywgbm90ZSB0aGF0IAogICAgICAgICAgICAg
Ly8gYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMgd2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmdsZSBsYXp5
IHRyYW5zcGFyZW5jeSBsYXllciwgZXZlbiB0aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNlIGluIHRo
aXMgbWV0aG9kLgogICAgICAgICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYmVnaW5GaWx0
ZXJFZmZlY3QoY29udGV4dCk7CiAKQEAgLTM3MzAsMjggKzM3MzYsMTMgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotI2VuZGlmCi0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxk
IHVzZSBvbmx5IHdoZW4gd2UgbmVlZCB0aGVtLgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7
Ci0gICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsK
LSAgICBMYXlvdXRQb2ludCBwYWludE9mZnNldDsKIAotICAgIGlmIChzaG91bGRQYWludENvbnRl
bnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5lIHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykg
ewotICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQobG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24sIChsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6
IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgbG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cyA/IElnbm9yZU92ZXJm
bG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXApOwotICAgICAgICBjYWxjdWxhdGVSZWN0cyhj
bGlwUmVjdHNDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbGF5ZXJC
b3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsICZvZmZzZXRG
cm9tUm9vdCk7Ci0gICAgICAgIHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2Nh
dGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVs
QWNjdW11bGF0aW9uKTsKKyAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZm
ZWN0KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmls
dGVyIGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFy
ZW5jeSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0
YXJ0cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KKyAgICAgICAgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnRCZWhhdmlvcik7CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIGZvcmNlQmxhY2tUZXh0ID0g
bG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNr
VGV4dDsKLSAgICBib29sIHNlbGVjdGlvbk9ubHkgID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvciAmIFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5OwotICAgIAotICAgIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWw7Ci0gICAgaWYgKGxvY2Fs
UGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZCkKLSAgICAg
ICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yU2tpcFJvb3RCYWNrZ3JvdW5kOwotICAg
IGVsc2UgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1Jvb3RCYWNrZ3Jv
dW5kT25seSkKLSAgICAgICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yUm9vdEJhY2tn
cm91bmRPbmx5OwotICAgIAogICAgIC8vIElmIHRoaXMgbGF5ZXIncyByZW5kZXJlciBpcyBhIGNo
aWxkIG9mIHRoZSBwYWludGluZ1Jvb3QsIHdlIHJlbmRlciB1bmNvbmRpdGlvbmFsbHksIHdoaWNo
CiAgICAgLy8gaXMgZG9uZSBieSBwYXNzaW5nIGEgbmlsIHBhaW50aW5nUm9vdCBkb3duIHRvIG91
ciByZW5kZXJlciAoYXMgaWYgbm8gcGFpbnRpbmdSb290IHdhcyBldmVyIHNldCkuCiAgICAgLy8g
RWxzZSwgb3VyIHJlbmRlcmVyIHRyZWUgbWF5IG9yIG1heSBub3QgY29udGFpbiB0aGUgcGFpbnRp
bmcgcm9vdCwgc28gd2UgcGFzcyB0aGF0IHJvb3QgYWxvbmcKQEAgLTM3NjMsNzkgKzM3NTQsNDAg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIp
CiAgICAgICAgIHBlcmZvcm1PdmVybGFwVGVzdHMoKmxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBU
ZXN0UmVxdWVzdHMsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdGhpcyk7CiAKLSAgICAv
LyBXZSB3YW50IHRvIHBhaW50IG91ciBsYXllciwgYnV0IG9ubHkgaWYgd2UgaW50ZXJzZWN0IHRo
ZSBkYW1hZ2UgcmVjdC4KLSAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRl
bnRzKSkKLSAgICAgICAgc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0
KGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLCAmb2Zmc2V0RnJvbVJvb3QpOworICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBh
aW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0Owor
ICAgIGJvb2wgc2VsZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
ICYgUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHk7CisgICAgCisgICAgUGFpbnRCZWhhdmlvciBw
YWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKKyAgICBpZiAobG9jYWxQYWludEZs
YWdzICYgUGFpbnRMYXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQorICAgICAgICBwYWlu
dEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7CisgICAgZWxzZSBp
ZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5
KQorICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9u
bHk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGFz
U3RhcnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFuc3BhcmVuY3kpIHsKLSAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkg
c3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNoaWxk
IGxheWVyIGxhemlseSBzdGFydHMgb25lIHdpdGggdGhlIHdyb25nIGNvbnRleHQuCi0gICAgICAg
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOworICAgIExheWVyRnJhZ21lbnRzIGxheWVyRnJh
Z21lbnRzOworICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5l
IHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykgeworICAgICAgICAvLyBDb2xsZWN0IHRo
ZSBmcmFnbWVudHMuIFRoaXMgd2lsbCBjb21wdXRlIHRoZSBjbGlwIHJlY3RhbmdsZXMgYW5kIHBh
aW50IG9mZnNldHMgZm9yIGVhY2ggbGF5ZXIgZnJhZ21lbnQsIGFzIHdlbGwgYXMgd2hldGhlciBv
ciBub3QgdGhlIGNvbnRlbnQgb2YgZWFjaAorICAgICAgICAvLyBmcmFnbWVudCBzaG91bGQgcGFp
bnQuCisgICAgICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHNob3VsZFBhaW50
Q29udGVudCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncywgJm9mZnNldEZyb21S
b290KTsKICAgICB9Ci0jZW5kaWYKLQorICAgIAogICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQ
YWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0JhY2tncm91bmRQaGFzZSkgewotICAgICAgICBp
ZiAoc2hvdWxkUGFpbnRDb250ZW50ICYmICFzZWxlY3Rpb25Pbmx5KSB7Ci0gICAgICAgICAgICAv
LyBCZWdpbiB0cmFuc3BhcmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhh
dmUgdG8gcGFpbnQgc29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kp
Ci0gICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5
ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWlu
dERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0gICAgICAgIAot
ICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgewotICAg
ICAgICAgICAgICAgIC8vIFBhaW50IG91ciBiYWNrZ3JvdW5kIGZpcnN0LCBiZWZvcmUgcGFpbnRp
bmcgYW55IGNoaWxkIGxheWVycy4KLSAgICAgICAgICAgICAgICAvLyBFc3RhYmxpc2ggdGhlIGNs
aXAgdXNlZCB0byBwYWludCBvdXIgYmFja2dyb3VuZC4KLSAgICAgICAgICAgICAgICBjbGlwVG9S
ZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJS
YWRpdXMpOyAvLyBCYWNrZ3JvdW5kIHBhaW50aW5nIHdpbGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNl
bGYuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFBhaW50IHRo
ZSBiYWNrZ3JvdW5kLgotICAgICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBw
aXhlbFNuYXBwZWRJbnRSZWN0KGRhbWFnZVJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZUJsb2NrQmFj
a2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFp
bnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludElu
Zm8sIHBhaW50T2Zmc2V0KTsKLQotICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNs
aXBUb0RpcnR5UmVjdCkKLSAgICAgICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgLy8gUGFpbnQgb25seSB0aGUgYmFja2dyb3VuZHMgZm9yIGFsbCBvZiB0aGUgZnJhZ21l
bnRzIG9mIHRoZSBsYXllci4KKyAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCAmJiAhc2Vs
ZWN0aW9uT25seSkKKyAgICAgICAgICAgIHBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgY29udGV4dCwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBwYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFuc3BhcmVuY3ksCisgICAgICAgICAgICAgICAgbG9j
YWxQYWludGluZ0luZm8sIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsK
IAogICAgICAgICAvLyBOb3cgd2FsayB0aGUgc29ydGVkIGxpc3Qgb2YgY2hpbGRyZW4gd2l0aCBu
ZWdhdGl2ZSB6LWluZGljZXMuCiAgICAgICAgIHBhaW50TGlzdChuZWdaT3JkZXJMaXN0KCksIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIH0KICAgICAK
ICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdG
b3JlZ3JvdW5kUGhhc2UpIHsKLSAgICAgICAgLy8gTm93IGVzdGFibGlzaCB0aGUgYXBwcm9wcmlh
dGUgY2xpcCBhbmQgcGFpbnQgb3VyIGNoaWxkIFJlbmRlck9iamVjdHMuCi0gICAgICAgIGlmIChz
aG91bGRQYWludENvbnRlbnQgJiYgIWNsaXBSZWN0VG9BcHBseS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtu
b3cgd2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcuCi0gICAgICAgICAgICBpZiAoaGF2ZVRyYW5z
cGFyZW5jeSkKLSAgICAgICAgICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3Bh
cmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKLQot
ICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgewotICAg
ICAgICAgICAgICAgIC8vIFNldCB1cCB0aGUgY2xpcCB1c2VkIHdoZW4gcGFpbnRpbmcgb3VyIGNo
aWxkcmVuLgotICAgICAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9v
dExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgY2xpcFJl
Y3RUb0FwcGx5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgUGFp
bnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBSZWN0VG9B
cHBseS5yZWN0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25P
bmx5ID8gUGFpbnRQaGFzZVNlbGVjdGlvbiA6IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3Vu
ZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlQmxhY2tUZXh0ID8gKFBh
aW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvciwg
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAg
ICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAg
ICAgICAgIGlmICghc2VsZWN0aW9uT25seSkgewotICAgICAgICAgICAgICAgIHBhaW50SW5mby5w
aGFzZSA9IFBhaW50UGhhc2VGbG9hdDsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5wYWlu
dChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhh
c2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ub3Zl
cmxhcFRlc3RSZXF1ZXN0cyA9IGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHM7
Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkT3V0
bGluZXM7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5n
SW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAgICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIHBh
aW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgdHJhbnNw
YXJlbmN5TGF5ZXJDb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFu
c3BhcmVuY3ksCisgICAgICAgICAgICAgICAgbG9jYWxQYWludGluZ0luZm8sIHBhaW50QmVoYXZp
b3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBzZWxlY3Rpb25Pbmx5LCBmb3JjZUJsYWNrVGV4
dCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkUGFpbnRPdXRsaW5lKQorICAgICAgICAg
ICAgcGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mbywgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwog
Ci0gICAgICAgIGlmIChzaG91bGRQYWludE91dGxpbmUgJiYgIW91dGxpbmVSZWN0LmlzRW1wdHko
KSkgewotICAgICAgICAgICAgLy8gUGFpbnQgb3VyIG93biBvdXRsaW5lCi0gICAgICAgICAgICBQ
YWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3Qob3V0bGluZVJl
Y3QucmVjdCgpKSwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAgICAgICAgICAg
IGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgb3V0bGluZVJlY3QsIERvTm90SW5jbHVkZVNlbGZG
b3JCb3JkZXJSYWRpdXMpOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgb3V0bGluZVJlY3QpOwotICAgICAgICB9Ci0gICAg
CiAgICAgICAgIC8vIFBhaW50IGFueSBjaGlsZCBsYXllcnMgdGhhdCBoYXZlIG92ZXJmbG93Lgog
ICAgICAgICBwYWludExpc3QobV9ub3JtYWxGbG93TGlzdC5nZXQoKSwgY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgCkBAIC0zODQzLDM0ICszNzk1LDI2
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKICAgICAgICAgcGFp
bnRMaXN0KHBvc1pPcmRlckxpc3QoKSwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2Fs
UGFpbnRGbGFncyk7CiAgICAgfQogCi0gICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFy
cykgewotICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAg
ICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHBhaW50
T2Zmc2V0KSwgcGl4ZWxTbmFwcGVkSW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSksIHRydWUpOwot
ICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAgfQorICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9s
bGJhcnMpCisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOwogCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQogICAgIGlmIChmaWx0ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSkg
ewogICAgICAgICAvLyBBcHBseSB0aGUgY29ycmVjdCBjbGlwcGluZyAoaWUuIG92ZXJmbG93OiBo
aWRkZW4pLgorICAgICAgICAvLyBGSVhNRTogSXQgaXMgaW5jb3JyZWN0IHRvIGp1c3QgY2xpcCB0
byB0aGUgZGFtYWdlUmVjdCBoZXJlIG9uY2UgbXVsdGlwbGUgZnJhZ21lbnRzIGFyZSBpbnZvbHZl
ZC4KKyAgICAgICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCA9IGxheWVyRnJhZ21lbnRzLmlzRW1wdHko
KSA/IENsaXBSZWN0KCkgOiBsYXllckZyYWdtZW50c1swXS5kYW1hZ2VSZWN0OwogICAgICAgICBj
bGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CiAg
ICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLmFwcGx5RmlsdGVyRWZmZWN0KCk7CiAgICAg
ICAgIHJlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwogICAgIH0KICNlbmRpZgotCisgICAgCiAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Ugbm93IHVzZSB0aGUgb3JpZ2luYWwgdHJhbnNwYXJlbmN5
IGNvbnRleHQuCiAgICAgQVNTRVJUKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCA9PSBjb250ZXh0
KTsKIAogICAgIGlmICgobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29tcG9z
aXRpbmdNYXNrUGhhc2UpICYmIHNob3VsZFBhaW50Q29udGVudCAmJiByZW5kZXJlcigpLT5oYXNN
YXNrKCkgJiYgIXNlbGVjdGlvbk9ubHkpIHsKLSAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZv
LmNsaXBUb0RpcnR5UmVjdCkKLSAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0lu
Zm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwg
ZGFtYWdlUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFp
bnRpbmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KLSAgICAgICAgCi0gICAgICAgIC8v
IFBhaW50IHRoZSBtYXNrLgotICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBp
eGVsU25hcHBlZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlTWFzaywgUGFp
bnRCZWhhdmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJ
bmZvLnJlZ2lvbik7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0Rp
cnR5UmVjdCkKLSAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgLy8gUGFpbnQgdGhlIG1h
c2sgZm9yIHRoZSBmcmFnbWVudHMuCisgICAgICAgIHBhaW50TWFza0ZvckZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyKTsKICAgICB9CiAKICAgICAvLyBFbmQgb3VyIHRyYW5zcGFyZW5jeSBsYXllcgpAQCAt
MzkwMiwxMyArMzg0NiwxNjYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMaXN0KFZlY3RvcjxS
ZW5kZQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewog
ICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkpOwotICAgICAgICBp
ZiAoIWNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkgfHwgdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCkp
CisgICAgICAgIGlmICghY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgICAgIGNo
aWxkTGF5ZXItPnBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFpbnRQYWdpbmF0ZWRDaGlsZExheWVyKGNoaWxk
TGF5ZXIsIGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAgICAgfQogfQogCit2
b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVu
dHMsIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9j
YWxQYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBsb2NhbFBhaW50RmxhZ3MsCisgICAgY29u
c3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQoreworICAgIC8vIFRPRE86IENvbGxlY3Qg
bXVsdGlwbGUgZnJhZ21lbnRzIGZvciBsYXllcnMgd2l0aCBhbiBlbmNsb3NpbmcgcGFnaW5hdGlv
biBsYXllci4KKyAgICAvLyBGb3IgdW5wYWdpbmF0ZWQgbGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9u
ZSBmcmFnbWVudC4KKyAgICBMYXllckZyYWdtZW50IGZyYWdtZW50OworICAgIENsaXBSZWN0c0Nv
bnRleHQgY2xpcFJlY3RzQ29udGV4dChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxvY2Fs
UGFpbnRpbmdJbmZvLnJlZ2lvbiwgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3Jh
cnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsIEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFp
bnRpbmdPdmVyZmxvd0NvbnRlbnRzID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJm
bG93Q2xpcCk7CisgICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJvdW5kcywgZnJhZ21lbnQuZGFtYWdl
UmVjdCwgZnJhZ21lbnQuY2xpcFJlY3RUb0FwcGx5LCBmcmFnbWVudC5vdXRsaW5lUmVjdCwgb2Zm
c2V0RnJvbVJvb3QpOworICAgIGZyYWdtZW50LnBhaW50T2Zmc2V0ID0gdG9Qb2ludChmcmFnbWVu
dC5ib3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5n
SW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbik7CisgICAgCisgICAgZnJhZ21lbnQuc2hvdWxkUGFp
bnRDb250ZW50ID0gc2hvdWxkUGFpbnRDb250ZW50OworICAgIGlmICh0aGlzICE9IGxvY2FsUGFp
bnRpbmdJbmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWlu
dGluZ092ZXJmbG93Q29udGVudHMpKQorICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRl
bnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQuYm91bmRzLCBmcmFnbWVudC5kYW1h
Z2VSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9v
dCk7CisKKyAgICBmcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKK30KKwordm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBs
YXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQq
IHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3Bh
cmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlv
ciwKKyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAg
ICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0
IHdlIGtub3cgd2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcuCisgICAgICAgIGlmIChoYXZlVHJh
bnNwYXJlbmN5KQorICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJl
bmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5j
eVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAK
KyAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgeworICAgICAg
ICAgICAgLy8gUGFpbnQgb3VyIGJhY2tncm91bmQgZmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkg
Y2hpbGQgbGF5ZXJzLgorICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8g
cGFpbnQgb3VyIGJhY2tncm91bmQuCisgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGZyYWdtZW50LmRhbWFnZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMp
OyAvLyBCYWNrZ3JvdW5kIHBhaW50aW5nIHdpbGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kLgorICAg
ICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9t
IHRoZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8u
CisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVj
dChmcmFnbWVudC5kYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQs
IHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5m
by5yZWdpb24pOworICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIGZyYWdtZW50
LnBhaW50T2Zmc2V0KTsKKworICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGly
dHlSZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmRhbWFnZVJlY3QpOworICAgIH0KK30KKwordm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJh
Z21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGlj
c0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICBjb25zdCBMYXlvdXRSZWN0
JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFp
bnRCZWhhdmlvciwKKyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBi
b29sIHNlbGVjdGlvbk9ubHksIGJvb2wgZm9yY2VCbGFja1RleHQpCit7CisgICAgLy8gQmVnaW4g
dHJhbnNwYXJlbmN5IGlmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHBhaW50LgorICAgIGlmIChoYXZl
VHJhbnNwYXJlbmN5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFn
bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQg
PSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudC5zaG91bGRQ
YWludENvbnRlbnQgJiYgIWZyYWdtZW50LmNsaXBSZWN0VG9BcHBseS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5UGFpbnREaXJ0
eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIFBhaW50
QmVoYXZpb3IgbG9jYWxQYWludEJlaGF2aW9yID0gZm9yY2VCbGFja1RleHQgPyAoUGFpbnRCZWhh
dmlvcilQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQgOiBwYWludEJlaGF2aW9yOworCisgICAg
Ly8gT3B0aW1pemUgY2xpcHBpbmcgZm9yIHRoZSBzaW5nbGUgZnJhZ21lbnQgY2FzZS4KKyAgICBi
b29sIHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QgJiYgbGF5
ZXJGcmFnbWVudHMuc2l6ZSgpID09IDEgJiYgbGF5ZXJGcmFnbWVudHNbMF0uc2hvdWxkUGFpbnRD
b250ZW50ICYmICFsYXllckZyYWdtZW50c1swXS5jbGlwUmVjdFRvQXBwbHkuaXNFbXB0eSgpOwor
ICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZv
LnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxh
eWVyRnJhZ21lbnRzWzBdLmNsaXBSZWN0VG9BcHBseSk7CisgICAgCisgICAgLy8gV2UgaGF2ZSB0
byBsb29wIHRocm91Z2ggZXZlcnkgZnJhZ21lbnQgbXVsdGlwbGUgdGltZXMsIHNpbmNlIHdlIGhh
dmUgdG8gcmVwYWludCBpbiBlYWNoIHNwZWNpZmljIHBoYXNlIGluIG9yZGVyIGZvcgorICAgIC8v
IGludGVybGVhdmluZyBvZiB0aGUgZnJhZ21lbnRzIHRvIHdvcmsgcHJvcGVybHkuCisgICAgcGFp
bnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKHNlbGVjdGlvbk9ubHkgPyBQYWludFBo
YXNlU2VsZWN0aW9uIDogUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcywgbGF5ZXJGcmFn
bWVudHMsCisgICAgICAgIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVo
YXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICAKKyAgICBpZiAoIXNlbGVjdGlv
bk9ubHkpIHsKKyAgICAgICAgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBh
aW50UGhhc2VGbG9hdCwgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICAgICAg
cGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBhaW50UGhhc2VGb3JlZ3JvdW5k
LCBsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRC
ZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91
bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMsIGxheWVyRnJh
Z21lbnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBw
YWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgfQorICAgIAorICAgIGlmIChzaG91bGRDbGlw
KQorICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgbGF5ZXJGcmFnbWVudHNbMF0uY2xpcFJlY3RUb0FwcGx5KTsKK30KKwordm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBhaW50UGhh
c2UgcGhhc2UsIGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50
aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50
aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGJvb2wgc2hvdWxkQ2xpcCA9IGxvY2FsUGFpbnRp
bmdJbmZvLmNsaXBUb0RpcnR5UmVjdCAmJiBsYXllckZyYWdtZW50cy5zaXplKCkgPiAxOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgewor
ICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7Cisg
ICAgICAgIGlmICghZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50IHx8IGZyYWdtZW50LmNsaXBS
ZWN0VG9BcHBseS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50
aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBmcmFnbWVudC5jbGlwUmVjdFRvQXBwbHkpOworICAgIAorICAgICAgICBQYWludEluZm8g
cGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuY2xpcFJlY3RU
b0FwcGx5LnJlY3QoKSksIHBoYXNlLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5k
ZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKKyAgICAgICAgaWYgKHBoYXNlID09IFBh
aW50UGhhc2VGb3JlZ3JvdW5kKQorICAgICAgICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVx
dWVzdHMgPSBsb2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzOworICAgICAgICBy
ZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIGZyYWdtZW50LnBhaW50T2Zmc2V0KTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmNsaXBSZWN0
VG9BcHBseSk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludE91dGxpbmVGb3JG
cmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5m
bywKKyAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRp
bmdSb290Rm9yUmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZy
YWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0g
bGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmIChmcmFnbWVudC5vdXRsaW5lUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAKKyAgICAgICAgLy8gUGFpbnQg
b3VyIG93biBvdXRsaW5lCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4
ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5vdXRsaW5lUmVjdC5yZWN0KCkpLCBQYWludFBoYXNl
U2VsZk91dGxpbmUsIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2Nh
bFBhaW50aW5nSW5mby5yZWdpb24pOworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJ
bmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGZyYWdtZW50Lm91dGxpbmVSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsK
KyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNl
dCk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50
RGlydHlSZWN0LCBmcmFnbWVudC5vdXRsaW5lUmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRl
ckxheWVyOjpwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVy
RnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZv
clJlbmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJh
Z21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5j
bGlwVG9EaXJ0eVJlY3QpCisgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZv
LnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZy
YWdtZW50LmRhbWFnZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOyAvLyBN
YXNrIHBhaW50aW5nIHdpbGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCisgICAgICAgIAorICAg
ICAgICAvLyBQYWludCB0aGUgbWFzay4KKyAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ug
d2lsbCBjb2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQgaXRzZWxmIGluc3RlYWQg
b2YganVzdCBmcm9tIHRoZSBwYWludCBpbmZvLgorICAgICAgICBQYWludEluZm8gcGFpbnRJbmZv
KGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuZGFtYWdlUmVjdC5yZWN0KCkp
LCBQYWludFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCktPnBh
aW50KHBhaW50SW5mbywgZnJhZ21lbnQucGFpbnRPZmZzZXQpOworICAgICAgICAKKyAgICAgICAg
aWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAgIHJlc3Rv
cmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVu
dC5kYW1hZ2VSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZs
b3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVu
dHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxv
Y2FsUGFpbnRpbmdJbmZvKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFn
bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxh
eWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZv
LnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZy
YWdtZW50LmRhbWFnZVJlY3QpOworICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4
dCwgcm91bmRlZEludFBvaW50KGZyYWdtZW50LnBhaW50T2Zmc2V0KSwgcGl4ZWxTbmFwcGVkSW50
UmVjdChmcmFnbWVudC5kYW1hZ2VSZWN0LnJlY3QoKSksIHRydWUpOworICAgICAgICByZXN0b3Jl
Q2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQu
ZGFtYWdlUmVjdCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRl
ZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZs
YWdzIHBhaW50RmxhZ3MpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMs
IGJyZWFraW5nIHVwIG91ciBjaGlsZCBsYXllciBpbnRvIHN0cmlwcy4KQEAgLTQ0MDcsNyArNDUw
NCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmUKICAgICAgICAg
UmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChpKTsKICAgICAgICAgUmVuZGVyTGF5
ZXIqIGhpdExheWVyID0gMDsKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3Vs
dC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRl
ZCgpICYmICF1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAgICAgaWYgKGNoaWxkTGF5ZXIt
PmlzUGFnaW5hdGVkKCkpCiAgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdpbmF0ZWRD
aGlsZExheWVyKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0
VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNj
ZW5kYW50cyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRMYXll
ci0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0
VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0
Rm9yRGVzY2VuZGFudHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgJKHJldmlzaW9uIDE0Mzc1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDIyIEBAIHB1YmxpYzoKICNlbmRp
ZgogfTsKIAorc3RydWN0IExheWVyRnJhZ21lbnQgeworcHVibGljOgorICAgIExheWVyRnJhZ21l
bnQoKQorICAgICAgICA6IHNob3VsZFBhaW50Q29udGVudChmYWxzZSkKKyAgICB7IH0KKworICAg
IGJvb2wgc2hvdWxkUGFpbnRDb250ZW50OworICAgIExheW91dFJlY3QgYm91bmRzOworICAgIENs
aXBSZWN0IGRhbWFnZVJlY3Q7CisgICAgQ2xpcFJlY3QgY2xpcFJlY3RUb0FwcGx5OworICAgIENs
aXBSZWN0IG91dGxpbmVSZWN0OworICAgIExheW91dFBvaW50IHBhaW50T2Zmc2V0OworfTsKKwor
dHlwZWRlZiBWZWN0b3I8TGF5ZXJGcmFnbWVudD4gTGF5ZXJGcmFnbWVudHM7CisKIGNsYXNzIFJl
bmRlckxheWVyIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKIHB1YmxpYzoKICAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyUmVwbGljYTsKQEAgLTQxOCw2ICs0MzQsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
ICAgICAKICAgICBib29sIGlzUGFnaW5hdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BhZ2luYXRl
ZDsgfQorICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsgfQogCiAgICAgdm9pZCB1cGRhdGVU
cmFuc2Zvcm0oKTsKICAgICAKQEAgLTg4OSw2ICs5MDYsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHBhaW50TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKICAgICB2b2lkIHBhaW50UGFn
aW5hdGVkQ2hpbGRMYXllcihSZW5kZXJMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQg
cGFpbnRDaGlsZExheWVySW50b0NvbHVtbnMoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzLCBj
b25zdCBWZWN0b3I8UmVuZGVyTGF5ZXIqPiYgY29sdW1uTGF5ZXJzLCBzaXplX3QgY29sdW1uSW5k
ZXgpOworICAgIAorICAgIHZvaWQgY29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGJv
b2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5
ZXJGbGFncywgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KTsKKyAgICB2b2lkIHBh
aW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNz
Q29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAg
ICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBo
YXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3Is
IFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQgcGFpbnRG
b3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250
ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisgICAgICAg
IGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVU
cmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwKKyAgICAgICAgYm9vbCBzZWxlY3Rp
b25Pbmx5LCBib29sIGZvcmNlQmxhY2tUZXh0KTsKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZv
ckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYsIEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwg
UmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9pZCBwYWludE91
dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCog
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xz
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mKTsKKyAgICB2b2lkIHBhaW50TWFza0ZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICBS
ZW5kZXJMYXllciogaGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxh
eWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExh
eW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBib29sIGFwcGxp
ZWRUcmFuc2Zvcm0sCkBAIC0xMTg0LDYgKzEyMTIsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVy
U2Nyb2xsYmFyUGFydCogbV9zY3JvbGxDb3JuZXI7CiAgICAgUmVuZGVyU2Nyb2xsYmFyUGFydCog
bV9yZXNpemVyOwogCisgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVy
IHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBh
Z2luYXRlZC4KKyAgICBSZW5kZXJMYXllciogbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7CisK
IHByaXZhdGU6CiAgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189936</attachid>
            <date>2013-02-23 13:40:36 -0800</date>
            <delta_ts>2013-02-23 14:02:12 -0800</delta_ts>
            <desc>Hit testing refactored to use fragments. Just checking with ews.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>37679</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQzNzU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA0LDggKzQwNSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDQ5LDcgKzQ1Miw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIyLDYgKzkyNSw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1f
aXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7
CisKICAgICBpZiAoaXNDb21wb3NpdGVkKCkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47
IC8vIEZJWE1FOiBXZSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGlu
ZyBsYXllcnMgc29tZWRheS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUg
UmVuZGVyVmlldyBjYW4ndCBiZSBwYWdpbmF0ZWQuICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwg
bW92ZSB0byBhIG1vZGVsIHdoZXJlIGl0IGlzIHRob3VnaC4KQEAgLTkzMSwxNiArOTM2LDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogICAgIC8vIHJlY3VycmluZyBp
bnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMg
Zm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9v
dHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3Rl
YWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8g
Z2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAg
d2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2Vu
ZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3
ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2ls
eS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAg
ICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7CiAgICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkK
LSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQoKTsKKyAg
ICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2lzUGFnaW5h
dGVkID0gcGFyZW50KCktPnJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtOTU1LDcgKzk2MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24o
KQogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayAmJiBjb250YWluaW5nQmxvY2sgIT0gdmll
dzsKICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5oYXNMYXll
cigpKSB7Ci0gICAgICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGNvbnRhaW5pbmdCbG9jay0+
bGF5ZXIoKS0+aXNQYWdpbmF0ZWQoKTsKKyAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3MTYsNyArMzcyMiw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKIAogICAgICAgICAgICAgLy8g
UmV3aXJlIHRoZSBvbGQgY29udGV4dCB0byBhIG1lbW9yeSBidWZmZXIsIHNvIHRoYXQgd2UgY2Fu
IGNhcHR1cmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIE5PVEU6
IFdlIHNhdmVkIHRoZSBvbGQgY29udGV4dCBpbiB0aGUgInRyYW5zcGFyZW5jeUxheWVyQ29udGV4
dCIgbG9jYWwgdmFyaWFibGUsIHRvIGJlIGFibGUgdG8gc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5
ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IGFuZCBhdm9pZCBkdXBs
aWNhdGluZyAiYmVnaW5GaWx0ZXJFZmZlY3QiIGFmdGVyIGVhY2ggdHJhbnNwYXJlbnkgbGF5ZXIg
Y2FsbC4gQWxzbywgbm90ZSB0aGF0IAorICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNv
bnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFj
aCB0cmFuc3BhcmVuY3kgbGF5ZXIgY2FsbC4gQWxzbywgbm90ZSB0aGF0IAogICAgICAgICAgICAg
Ly8gYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMgd2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmdsZSBsYXp5
IHRyYW5zcGFyZW5jeSBsYXllciwgZXZlbiB0aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNlIGluIHRo
aXMgbWV0aG9kLgogICAgICAgICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYmVnaW5GaWx0
ZXJFZmZlY3QoY29udGV4dCk7CiAKQEAgLTM3MzAsMjggKzM3MzYsMTMgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotI2VuZGlmCiAKLSAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxk
IHVzZSBvbmx5IHdoZW4gd2UgbmVlZCB0aGVtLgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7
Ci0gICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsK
LSAgICBMYXlvdXRQb2ludCBwYWludE9mZnNldDsKLQotICAgIGlmIChzaG91bGRQYWludENvbnRl
bnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5lIHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykg
ewotICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQobG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24sIChsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6
IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgbG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cyA/IElnbm9yZU92ZXJm
bG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXApOwotICAgICAgICBjYWxjdWxhdGVSZWN0cyhj
bGlwUmVjdHNDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbGF5ZXJC
b3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsICZvZmZzZXRG
cm9tUm9vdCk7Ci0gICAgICAgIHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2Nh
dGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVs
QWNjdW11bGF0aW9uKTsKKyAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZm
ZWN0KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmls
dGVyIGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFy
ZW5jeSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0
YXJ0cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KKyAgICAgICAgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnRCZWhhdmlvcik7CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIGZvcmNlQmxhY2tUZXh0ID0g
bG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNr
VGV4dDsKLSAgICBib29sIHNlbGVjdGlvbk9ubHkgID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvciAmIFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5OwotICAgIAotICAgIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWw7Ci0gICAgaWYgKGxvY2Fs
UGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZCkKLSAgICAg
ICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yU2tpcFJvb3RCYWNrZ3JvdW5kOwotICAg
IGVsc2UgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1Jvb3RCYWNrZ3Jv
dW5kT25seSkKLSAgICAgICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yUm9vdEJhY2tn
cm91bmRPbmx5OwotICAgIAogICAgIC8vIElmIHRoaXMgbGF5ZXIncyByZW5kZXJlciBpcyBhIGNo
aWxkIG9mIHRoZSBwYWludGluZ1Jvb3QsIHdlIHJlbmRlciB1bmNvbmRpdGlvbmFsbHksIHdoaWNo
CiAgICAgLy8gaXMgZG9uZSBieSBwYXNzaW5nIGEgbmlsIHBhaW50aW5nUm9vdCBkb3duIHRvIG91
ciByZW5kZXJlciAoYXMgaWYgbm8gcGFpbnRpbmdSb290IHdhcyBldmVyIHNldCkuCiAgICAgLy8g
RWxzZSwgb3VyIHJlbmRlcmVyIHRyZWUgbWF5IG9yIG1heSBub3QgY29udGFpbiB0aGUgcGFpbnRp
bmcgcm9vdCwgc28gd2UgcGFzcyB0aGF0IHJvb3QgYWxvbmcKQEAgLTM3NjMsNzkgKzM3NTQsNDMg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIp
CiAgICAgICAgIHBlcmZvcm1PdmVybGFwVGVzdHMoKmxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBU
ZXN0UmVxdWVzdHMsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdGhpcyk7CiAKLSAgICAv
LyBXZSB3YW50IHRvIHBhaW50IG91ciBsYXllciwgYnV0IG9ubHkgaWYgd2UgaW50ZXJzZWN0IHRo
ZSBkYW1hZ2UgcmVjdC4KLSAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRl
bnRzKSkKLSAgICAgICAgc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0
KGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLCAmb2Zmc2V0RnJvbVJvb3QpOworICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBh
aW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0Owor
ICAgIGJvb2wgc2VsZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
ICYgUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHk7CisgICAgCisgICAgUGFpbnRCZWhhdmlvciBw
YWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKKyAgICBpZiAobG9jYWxQYWludEZs
YWdzICYgUGFpbnRMYXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQorICAgICAgICBwYWlu
dEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7CisgICAgZWxzZSBp
ZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5
KQorICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9u
bHk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGFz
U3RhcnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFuc3BhcmVuY3kpIHsKLSAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkg
c3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNoaWxk
IGxheWVyIGxhemlseSBzdGFydHMgb25lIHdpdGggdGhlIHdyb25nIGNvbnRleHQuCi0gICAgICAg
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOworICAgIExheWVyRnJhZ21lbnRzIGxheWVyRnJh
Z21lbnRzOworICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5l
IHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykgeworICAgICAgICAvLyBDb2xsZWN0IHRo
ZSBmcmFnbWVudHMuIFRoaXMgd2lsbCBjb21wdXRlIHRoZSBjbGlwIHJlY3RhbmdsZXMgYW5kIHBh
aW50IG9mZnNldHMgZm9yIGVhY2ggbGF5ZXIgZnJhZ21lbnQsIGFzIHdlbGwgYXMgd2hldGhlciBv
ciBub3QgdGhlIGNvbnRlbnQgb2YgZWFjaAorICAgICAgICAvLyBmcmFnbWVudCBzaG91bGQgcGFp
bnQuCisgICAgICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uLCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwKKyAgICAgICAgICAgIChsb2NhbFBhaW50RmxhZ3MgJiBQYWlu
dExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5n
Q2xpcFJlY3RzLAorICAgICAgICAgICAgbG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50
aW5nT3ZlcmZsb3dDb250ZW50cyA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxv
d0NsaXAsICZvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFn
cywgc2hvdWxkUGFpbnRDb250ZW50LCAmb2Zmc2V0RnJvbVJvb3QpOwogICAgIH0KLSNlbmRpZgot
CisgICAgCiAgICAgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBv
c2l0aW5nQmFja2dyb3VuZFBoYXNlKSB7Ci0gICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQg
JiYgIXNlbGVjdGlvbk9ubHkpIHsKLSAgICAgICAgICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBs
YXllcnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtub3cgd2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcu
Ci0gICAgICAgICAgICBpZiAoaGF2ZVRyYW5zcGFyZW5jeSkKLSAgICAgICAgICAgICAgICBiZWdp
blRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50
aW5nSW5mby5wYWludEJlaGF2aW9yKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAobG9jYWxQ
YWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KSB7Ci0gICAgICAgICAgICAgICAgLy8gUGFpbnQg
b3VyIGJhY2tncm91bmQgZmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkgY2hpbGQgbGF5ZXJzLgot
ICAgICAgICAgICAgICAgIC8vIEVzdGFibGlzaCB0aGUgY2xpcCB1c2VkIHRvIHBhaW50IG91ciBi
YWNrZ3JvdW5kLgotICAgICAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8u
cm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFt
YWdlUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIEJhY2tncm91bmQg
cGFpbnRpbmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gUGFpbnQgdGhlIGJhY2tncm91bmQuCi0gICAgICAg
ICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZGFt
YWdlUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2aW9y
LCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotCi0g
ICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQotICAgICAg
ICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAgICAgICAgfQorICAgICAgICAvLyBQYWludCBvbmx5IHRo
ZSBiYWNrZ3JvdW5kcyBmb3IgYWxsIG9mIHRoZSBmcmFnbWVudHMgb2YgdGhlIGxheWVyLgorICAg
ICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50ICYmICFzZWxlY3Rpb25Pbmx5KQorICAgICAgICAg
ICAgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCB0
cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgaGF2
ZVRyYW5zcGFyZW5jeSwKKyAgICAgICAgICAgICAgICBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRC
ZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogCiAgICAgICAgIC8vIE5vdyB3YWxr
IHRoZSBzb3J0ZWQgbGlzdCBvZiBjaGlsZHJlbiB3aXRoIG5lZ2F0aXZlIHotaW5kaWNlcy4KICAg
ICAgICAgcGFpbnRMaXN0KG5lZ1pPcmRlckxpc3QoKSwgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgfQogICAgIAogICAgIGlmIChsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0ZvcmVncm91bmRQaGFzZSkgewotICAg
ICAgICAvLyBOb3cgZXN0YWJsaXNoIHRoZSBhcHByb3ByaWF0ZSBjbGlwIGFuZCBwYWludCBvdXIg
Y2hpbGQgUmVuZGVyT2JqZWN0cy4KLSAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCAmJiAh
Y2xpcFJlY3RUb0FwcGx5LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gQmVnaW4gdHJhbnNw
YXJlbmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNv
bWV0aGluZy4KLSAgICAgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQotICAgICAgICAgICAg
ICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxv
Y2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotCi0gICAgICAgICAgICBpZiAobG9jYWxQ
YWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHVw
IHRoZSBjbGlwIHVzZWQgd2hlbiBwYWludGluZyBvdXIgY2hpbGRyZW4uCi0gICAgICAgICAgICAg
ICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBjbGlwUmVjdFRvQXBwbHkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRl
eHQsIHBpeGVsU25hcHBlZEludFJlY3QoY2xpcFJlY3RUb0FwcGx5LnJlY3QoKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9ubHkgPyBQYWludFBoYXNlU2VsZWN0
aW9uIDogUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yY2VCbGFja1RleHQgPyAoUGFpbnRCZWhhdmlvcilQYWludEJlaGF2
aW9yRm9yY2VCbGFja1RleHQgOiBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJl
ciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBh
aW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb25P
bmx5KSB7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZsb2F0
OwotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOwotICAgICAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kOwotICAgICAgICAgICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0gbG9j
YWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0czsKLSAgICAgICAgICAgICAgICByZW5k
ZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBw
YWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lczsKLSAgICAgICAgICAgICAg
ICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkK
LSAgICAgICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5w
YWludERpcnR5UmVjdCwgY2xpcFJlY3RUb0FwcGx5KTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
c2hvdWxkUGFpbnRDb250ZW50KQorICAgICAgICAgICAgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21l
bnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIHBh
aW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgaGF2ZVRyYW5zcGFyZW5jeSwKKyAgICAgICAgICAg
ICAgICBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIsIHNlbGVjdGlvbk9ubHksIGZvcmNlQmxhY2tUZXh0KTsKKyAgICAgICAgCisgICAgICAg
IGlmIChzaG91bGRQYWludE91dGxpbmUpCisgICAgICAgICAgICBwYWludE91dGxpbmVGb3JGcmFn
bWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludEJl
aGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKLSAgICAgICAgaWYgKHNob3VsZFBh
aW50T3V0bGluZSAmJiAhb3V0bGluZVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBQ
YWludCBvdXIgb3duIG91dGxpbmUKLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29u
dGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChvdXRsaW5lUmVjdC5yZWN0KCkpLCBQYWludFBoYXNl
U2VsZk91dGxpbmUsIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2Nh
bFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50
aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBvdXRsaW5lUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7Ci0gICAg
ICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAg
ICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBvdXRsaW5lUmVjdCk7Ci0gICAgICAgIH0KLSAgICAKICAgICAgICAgLy8gUGFpbnQgYW55
IGNoaWxkIGxheWVycyB0aGF0IGhhdmUgb3ZlcmZsb3cuCiAgICAgICAgIHBhaW50TGlzdChtX25v
cm1hbEZsb3dMaXN0LmdldCgpLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWlu
dEZsYWdzKTsKICAgICAKQEAgLTM4NDMsMzQgKzM3OTgsMjYgQEAgdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgICAgICBwYWludExpc3QocG9zWk9yZGVyTGlzdCgp
LCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICB9CiAK
LSAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7Ci0gICAgICAgIGNsaXBUb1Jl
Y3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
by5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAgICAgIHBhaW50T3ZlcmZsb3dDb250
cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQpLCBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGRhbWFnZVJlY3QucmVjdCgpKSwgdHJ1ZSk7Ci0gICAgICAgIHJlc3RvcmVDbGlwKGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAg
ICB9CisgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykKKyAgICAgICAgcGFpbnRP
dmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mbyk7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgaWYgKGZpbHRl
clBhaW50ZXIuaGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpKSB7CiAgICAgICAgIC8vIEFwcGx5IHRo
ZSBjb3JyZWN0IGNsaXBwaW5nIChpZS4gb3ZlcmZsb3c6IGhpZGRlbikuCi0gICAgICAgIGNsaXBU
b1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKKyAgICAg
ICAgLy8gRklYTUU6IEl0IGlzIGluY29ycmVjdCB0byBqdXN0IGNsaXAgdG8gdGhlIGRhbWFnZVJl
Y3QgaGVyZSBvbmNlIG11bHRpcGxlIGZyYWdtZW50cyBhcmUgaW52b2x2ZWQuCisgICAgICAgIENs
aXBSZWN0IGJhY2tncm91bmRSZWN0ID0gbGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpID8gQ2xpcFJl
Y3QoKSA6IGxheWVyRnJhZ21lbnRzWzBdLmJhY2tncm91bmRSZWN0OworICAgICAgICBjbGlwVG9S
ZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgYmFja2dyb3VuZFJlY3QpOwogICAg
ICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5hcHBseUZpbHRlckVmZmVjdCgpOwotICAgICAg
ICByZXN0b3JlQ2xpcCh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgcmVzdG9yZUNsaXAodHJhbnNw
YXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgYmFj
a2dyb3VuZFJlY3QpOwogICAgIH0KICNlbmRpZgotCisgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgd2Ugbm93IHVzZSB0aGUgb3JpZ2luYWwgdHJhbnNwYXJlbmN5IGNvbnRleHQuCiAgICAgQVNT
RVJUKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCA9PSBjb250ZXh0KTsKIAogICAgIGlmICgobG9j
YWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdNYXNrUGhhc2UpICYm
IHNob3VsZFBhaW50Q29udGVudCAmJiByZW5kZXJlcigpLT5oYXNNYXNrKCkgJiYgIXNlbGVjdGlv
bk9ubHkpIHsKLSAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkK
LSAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCwgRG9Ob3RJ
bmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFpbnRpbmcgd2lsbCBoYW5kbGUg
Y2xpcHBpbmcgdG8gc2VsZi4KLSAgICAgICAgCi0gICAgICAgIC8vIFBhaW50IHRoZSBtYXNrLgot
ICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3Qo
ZGFtYWdlUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwg
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAg
ICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAK
LSAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKLSAgICAgICAg
ICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0
LCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2sgZm9yIHRoZSBmcmFnbWVu
dHMuCisgICAgICAgIHBhaW50TWFza0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8sIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB9CiAK
ICAgICAvLyBFbmQgb3VyIHRyYW5zcGFyZW5jeSBsYXllcgpAQCAtMzkwMiwxMyArMzg0OSwxNzMg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMaXN0KFZlY3RvcjxSZW5kZQogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICBSZW5kZXJMYXll
ciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkpOwotICAgICAgICBpZiAoIWNoaWxkTGF5ZXItPmlz
UGFnaW5hdGVkKCkgfHwgdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCkpCisgICAgICAgIGlmICghY2hp
bGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgICAgIGNoaWxkTGF5ZXItPnBhaW50TGF5
ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcGFpbnRQYWdpbmF0ZWRDaGlsZExheWVyKGNoaWxkTGF5ZXIsIGNvbnRleHQsIHBh
aW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAgICAgfQogfQogCit2b2lkIFJlbmRlckxheWVyOjpj
b2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBjb25zdCBMYXlvdXRSZWN0JiBk
aXJ0eVJlY3QsCisgICAgQ2xpcFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlLCBTaG91bGRSZXNwZWN0
T3ZlcmZsb3dDbGlwIHJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50KiBvZmZz
ZXRGcm9tUm9vdCkKK3sKKyAgICAvLyBUT0RPOiBDb2xsZWN0IG11bHRpcGxlIGZyYWdtZW50cyBm
b3IgbGF5ZXJzIHdpdGggYW4gZW5jbG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuCisgICAgLy8gRm9y
IHVucGFnaW5hdGVkIGxheWVycywgdGhlcmUgaXMgb25seSBvbmUgZnJhZ21lbnQuCisgICAgTGF5
ZXJGcmFnbWVudCBmcmFnbWVudDsKKyAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRl
eHQocm9vdExheWVyLCByZWdpb24sIGNsaXBSZWN0c1R5cGUsIElnbm9yZU92ZXJsYXlTY3JvbGxi
YXJTaXplLCByZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVj
dHNDb250ZXh0LCBkaXJ0eVJlY3QsIGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNr
Z3JvdW5kUmVjdCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QsIGZyYWdtZW50Lm91dGxpbmVSZWN0
LCBvZmZzZXRGcm9tUm9vdCk7CisgICAgZnJhZ21lbnRzLmFwcGVuZChmcmFnbWVudCk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhMYXllckZy
YWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGlu
Z0luZm8sIFBhaW50TGF5ZXJGbGFncyBsb2NhbFBhaW50RmxhZ3MsIGJvb2wgc2hvdWxkUGFpbnRD
b250ZW50LAorICAgIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBM
YXllckZyYWdtZW50IGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICBmcmFnbWVu
dC5wYWludE9mZnNldCA9IHRvUG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAt
IHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxh
dGlvbik7CisgICAgCisgICAgICAgIGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCA9IHNob3Vs
ZFBhaW50Q29udGVudDsKKyAgICAgICAgaWYgKHRoaXMgIT0gbG9jYWxQYWludGluZ0luZm8ucm9v
dExheWVyIHx8ICEobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dD
b250ZW50cykpCisgICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgJj0gaW50
ZXJzZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91
bmRSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9v
dCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEJhY2tncm91bmRGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAor
ICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhh
dmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5m
bywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFpbnRp
bmdSb290Rm9yUmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZy
YWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0g
bGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmICghZnJhZ21lbnQuc2hvdWxkUGFpbnRD
b250ZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gQmVnaW4gdHJhbnNw
YXJlbmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNv
bWV0aGluZy4KKyAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCisgICAgICAgICAgICBiZWdp
blRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRp
bmdJbmZvLnBhaW50QmVoYXZpb3IpOworICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0lu
Zm8uY2xpcFRvRGlydHlSZWN0KSB7CisgICAgICAgICAgICAvLyBQYWludCBvdXIgYmFja2dyb3Vu
ZCBmaXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMuCisgICAgICAgICAgICAv
LyBFc3RhYmxpc2ggdGhlIGNsaXAgdXNlZCB0byBwYWludCBvdXIgYmFja2dyb3VuZC4KKyAgICAg
ICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3Qs
IERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOyAvLyBCYWNrZ3JvdW5kIHBhaW50aW5n
IHdpbGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxs
eSB3ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBpdHNlbGYgaW5z
dGVhZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50SW5mbyBwYWlu
dEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5yZWN0KCkpLCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2aW9yLCBwYWlu
dGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKKyAgICAgICAg
cmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNldCk7CisKKyAg
ICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAg
IHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBm
cmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpw
YWludEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJh
Z21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNw
YXJlbmN5TGF5ZXJDb250ZXh0LAorICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBh
aW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiBsb2NhbFBhaW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAg
IFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGJvb2wgc2VsZWN0aW9uT25s
eSwgYm9vbCBmb3JjZUJsYWNrVGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgaWYg
d2UgaGF2ZSBzb21ldGhpbmcgdG8gcGFpbnQuCisgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRz
LmF0KGkpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCAmJiAh
ZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50
aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBQYWludEJlaGF2aW9yIGxvY2FsUGFp
bnRCZWhhdmlvciA9IGZvcmNlQmxhY2tUZXh0ID8gKFBhaW50QmVoYXZpb3IpUGFpbnRCZWhhdmlv
ckZvcmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvcjsKKworICAgIC8vIE9wdGltaXplIGNsaXBw
aW5nIGZvciB0aGUgc2luZ2xlIGZyYWdtZW50IGNhc2UuCisgICAgYm9vbCBzaG91bGRDbGlwID0g
bG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ICYmIGxheWVyRnJhZ21lbnRzLnNpemUo
KSA9PSAxICYmIGxheWVyRnJhZ21lbnRzWzBdLnNob3VsZFBhaW50Q29udGVudCAmJiAhbGF5ZXJG
cmFnbWVudHNbMF0uZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpOworICAgIGlmIChzaG91bGRDbGlw
KQorICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVyRnJhZ21lbnRzWzBdLmZv
cmVncm91bmRSZWN0KTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIGxvb3AgdGhyb3VnaCBldmVy
eSBmcmFnbWVudCBtdWx0aXBsZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0byByZXBhaW50IGluIGVh
Y2ggc3BlY2lmaWMgcGhhc2UgaW4gb3JkZXIgZm9yCisgICAgLy8gaW50ZXJsZWF2aW5nIG9mIHRo
ZSBmcmFnbWVudHMgdG8gd29yayBwcm9wZXJseS4KKyAgICBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHNXaXRoUGhhc2Uoc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWlu
dFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLCBsYXllckZyYWdtZW50cywKKyAgICAgICAgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290
Rm9yUmVuZGVyZXIpOworICAgIAorICAgIGlmICghc2VsZWN0aW9uT25seSkgeworICAgICAgICBw
YWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZsb2F0LCBsYXll
ckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlv
ciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91bmRGb3JG
cmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZvcmVncm91bmQsIGxheWVyRnJhZ21lbnRzLCBj
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jv
b3RGb3JSZW5kZXJlcik7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQ
aGFzZShQYWludFBoYXNlQ2hpbGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRl
cmVyKTsKKyAgICB9CisgICAgCisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIHJlc3RvcmVD
bGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckZyYWdt
ZW50c1swXS5mb3JlZ3JvdW5kUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9y
ZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBoYXNlLCBjb25zdCBMYXll
ckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAg
ICBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZp
b3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikK
K3sKKyAgICBib29sIHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJl
Y3QgJiYgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpID4gMTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVu
dCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50
LnNob3VsZFBhaW50Q29udGVudCB8fCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5pc0VtcHR5KCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlw
KQorICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3Jv
dW5kUmVjdCk7CisgICAgCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4
ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5yZWN0KCkpLCBwaGFzZSwg
cGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZv
LnJlZ2lvbik7CisgICAgICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAg
ICAgICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0gbG9jYWxQYWludGluZ0lu
Zm8ub3ZlcmxhcFRlc3RSZXF1ZXN0czsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJ
bmZvLCBmcmFnbWVudC5wYWludE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxk
Q2xpcCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2
b2lkIFJlbmRlckxheWVyOjpwYWludE91dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAgICBQYWludEJlaGF2aW9yIHBh
aW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgewor
ICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7Cisg
ICAgICAgIGlmIChmcmFnbWVudC5vdXRsaW5lUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAKKyAgICAgICAgLy8gUGFpbnQgb3VyIG93biBvdXRsaW5lCisgICAgICAg
IFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVu
dC5vdXRsaW5lUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlU2VsZk91dGxpbmUsIHBhaW50QmVoYXZp
b3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwor
ICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50Lm91dGxpbmVSZWN0LCBE
b05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFp
bnQocGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNldCk7CisgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5vdXRs
aW5lUmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludE1hc2tGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywK
KyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
TGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBp
ZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCisgICAgICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBE
b05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3aWxsIGhh
bmRsZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAgICAKKyAgICAgICAgLy8gUGFpbnQgdGhlIG1h
c2suCisgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgY29sbGVjdCB0aGUgcmVn
aW9uIGZyb20gdGhlIGZyYWdtZW50IGl0c2VsZiBpbnN0ZWFkIG9mIGp1c3QgZnJvbSB0aGUgcGFp
bnQgaW5mby4KKyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNr
LCBQYWludEJlaGF2aW9yTm9ybWFsLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWlu
dGluZ0luZm8ucmVnaW9uKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBm
cmFnbWVudC5wYWludE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGlu
Z0luZm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0
KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJ
bmZvKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRz
LmF0KGkpOworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwg
Y29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0KTsKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5k
ZWRJbnRQb2ludChmcmFnbWVudC5wYWludE9mZnNldCksIHBpeGVsU25hcHBlZEludFJlY3QoZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNr
Z3JvdW5kUmVjdCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRl
ZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZs
YWdzIHBhaW50RmxhZ3MpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMs
IGJyZWFraW5nIHVwIG91ciBjaGlsZCBsYXllciBpbnRvIHN0cmlwcy4KQEAgLTQyNTIsMTYgKzQz
NTksNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgICAg
IC8vIFRoaXMgbGF5ZXIgaXMgZmxhdHRlbmluZywgc28gZmxhdHRlbiB0aGUgc3RhdGUgcGFzc2Vk
IHRvIGRlc2NlbmRhbnRzLgogICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLT5mbGF0dGVuKCk7
CiAgICAgfQotICAgIAotICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQg
dXNlLgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7Ci0gICAgQ2xpcFJlY3QgYmdSZWN0Owot
ICAgIENsaXBSZWN0IGZnUmVjdDsKLSAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsKIAotICAgIENs
aXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlv
bi5yZWdpb24oKSwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJh
clNpemUpOwotICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGhpdFRlc3RSZWN0
LCBsYXllckJvdW5kcywgYmdSZWN0LCBmZ1JlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAKICAgICAv
LyBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSB6LWRlcHRo
IG9mIHRoZSBoaXQgcG9pbnQgb2YgM2QtdHJhbnNmb3JtZWQKICAgICAvLyBkZXNjZW5kYW50cy4K
ICAgICBkb3VibGUgbG9jYWxaT2Zmc2V0ID0gLW51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7CkBAIC00MzA2LDE2ICs0NDA0LDM4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKFIKICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRMYXllcjsKICAgICB9
CiAKKyAgICAgICAgCisgICAgLy8gQ29sbGVjdCB0aGUgZnJhZ21lbnRzLiBUaGlzIHdpbGwgY29t
cHV0ZSB0aGUgY2xpcCByZWN0YW5nbGVzIGZvciBlYWNoIGxheWVyIGZyYWdtZW50LgorICAgIExh
eWVyRnJhZ21lbnRzIGxheWVyRnJhZ21lbnRzOworICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJG
cmFnbWVudHMsIHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBoaXRUZXN0UmVj
dCwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzKTsKKwogICAgIC8vIENoZWNrIGZvciB0aGUgcmVzaXpl
cgotICAgIGlmIChjYW5SZXNpemUoKSAmJiByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBwaXhlbFNu
YXBwZWRJbnRSZWN0KGxheWVyQm91bmRzKSkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5k
ZWRQb2ludCgpKSkgeworICAgIGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJh
Z21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24pKSB7CiAgICAgICAgIHJlbmRl
cmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9pbnQo
KSk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KIAotICAgIC8vIE5leHQgd2Ugd2FudCB0
byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMg
b2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24p
ICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUg
aWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhl
IGxheWVyLiBDaGVjaworICAgIC8vIGV2ZXJ5IGZyYWdtZW50IGluIHJldmVyc2Ugb3JkZXIuCisg
ICAgaWYgKGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAvLyBIaXQgdGVzdCB3aXRo
IGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQsIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGNvbW1p
dCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdlJ3JlIGZyb250bW9zdC4KICAgICAgICAgSGl0VGVz
dFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7CisgICAgICAgIGJv
b2wgaW5zaWRlRnJhZ21lbnRGb3JlZ3JvdW5kUmVjdCA9IGZhbHNlOworICAgICAgICBpZiAoaGl0
VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByZXF1ZXN0LCB0ZW1wUmVz
dWx0LCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3REZXNjZW5kYW50cywgaW5zaWRlRnJhZ21lbnRG
b3JlZ3JvdW5kUmVjdCkKKyAgICAgICAgICAgICYmIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNl
LCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkp
KSB7CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmICghZGVwdGhT
b3J0RGVzY2VuZGFudHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICAvLyBGb3JlZ3JvdW5kIGNhbiBkZXB0aC1zb3J0IHdpdGggZGVzY2VuZGFudCBsYXllcnMsIHNv
IGtlZXAgdGhpcyBhcyBhIGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIGNhbmRpZGF0ZUxheWVyID0g
dGhpczsKKyAgICAgICAgfSBlbHNlIGlmIChpbnNpZGVGcmFnbWVudEZvcmVncm91bmRSZWN0ICYm
IHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVt
cFJlc3VsdCk7CisgICAgfQorLyoKKyAgICBpZiAoZmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdExv
Y2F0aW9uKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgaWYgKGhpdFRlc3RD
b250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVzdExvY2F0aW9u
LCBIaXRUZXN0RGVzY2VuZGFudHMpCiAgICAgICAgICAgICAmJiBpc0hpdENhbmRpZGF0ZSh0aGlz
LCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRl
LmdldCgpKSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKQEAg
LTQzMjgsMTEgKzQ0NDgsMTEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5
ZXIoUgogICAgICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSB0aGlzOwogICAgICAgICB9IGVsc2Ug
aWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
dGVtcFJlc3VsdCk7Ci0gICAgfQorICAgIH0qLwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBuZWdh
dGl2ZSB6LWluZGV4IGNoaWxkcmVuLgogICAgIGhpdExheWVyID0gaGl0VGVzdExpc3QobmVnWk9y
ZGVyTGlzdCgpLCByb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRl
c3RMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
bFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQdHIsIHpPZmZzZXQs
IHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCksIGRlcHRoU29ydERlc2NlbmRhbnRzKTsK
KyAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2NlbmRhbnRz
UHRyLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0aFNvcnRE
ZXNjZW5kYW50cyk7CiAgICAgaWYgKGhpdExheWVyKSB7CiAgICAgICAgIGlmICghZGVwdGhTb3J0
RGVzY2VuZGFudHMpCiAgICAgICAgICAgICByZXR1cm4gaGl0TGF5ZXI7CkBAIC00MzQzLDYgKzQ0
NjMsMjEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgIGlm
IChjYW5kaWRhdGVMYXllcikKICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxheWVyOwogCisgICAg
aWYgKGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBS
ZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKKyAgICAgICAgYm9vbCBpbnNpZGVGcmFn
bWVudEJhY2tncm91bmRSZWN0ID0gZmFsc2U7CisgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHNG
b3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RM
b2NhdGlvbiwgSGl0VGVzdFNlbGYsIGluc2lkZUZyYWdtZW50QmFja2dyb3VuZFJlY3QpCisgICAg
ICAgICAgICAmJiBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRz
UHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgeworICAgICAgICAgICAgaWYg
KHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHRlbXBSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRlbXBSZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSBlbHNlIGlm
IChpbnNpZGVGcmFnbWVudEJhY2tncm91bmRSZWN0ICYmIHJlc3VsdC5pc1JlY3RCYXNlZFRlc3Qo
KSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CisgICAgfQorCisvKgog
ICAgIGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIGlzU2VsZlBhaW50
aW5nTGF5ZXIoKSkgewogICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0Lmhp
dFRlc3RMb2NhdGlvbigpKTsKICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0
ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0U2VsZikKQEAg
LTQzNTYsMTAgKzQ0OTEsNDQgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5
ZXIoUgogICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CisqLwogCiAgICAgcmV0dXJuIDA7CiB9
CiAKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRl
c3RMb2NhdGlvbikgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMu
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVu
dCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAocmVzaXplckNvcm5lclJlY3Qo
dGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcykpLmNvbnRhaW5z
KGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVy
OjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVy
RnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LAorICAgIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBIaXRU
ZXN0RmlsdGVyIGhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdAorewor
ICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQo
aSk7CisgICAgICAgIGlmICgoaGl0VGVzdEZpbHRlciA9PSBIaXRUZXN0U2VsZiAmJiAhZnJhZ21l
bnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pKQorICAgICAgICAg
ICAgfHwgKGhpdFRlc3RGaWx0ZXIgPT0gSGl0VGVzdERlc2NlbmRhbnRzICYmICFmcmFnbWVudC5m
b3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGluc2lkZUNsaXBSZWN0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKGhp
dFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIGZyYWdtZW50LmxheWVyQm91bmRzLCBoaXRU
ZXN0TG9jYXRpb24sIGhpdFRlc3RGaWx0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBSZW5kZXJMYXllcjo6aGl0
VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKSBjb25z
dAogewogICAgIEFTU0VSVChpc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBhaW50aW5n
TGF5ZXJEZXNjZW5kYW50KCkpOwpAQCAtNDQwNyw3ICs0NTc2LDcgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0TGlzdChWZQogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXll
ciA9IGxpc3QtPmF0KGkpOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwogICAg
ICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsK
LSAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkgJiYgIXVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygpKQorICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAg
ICAgICAgIGhpdExheWVyID0gaGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwg
cm9vdExheWVyLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0
aW9uLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExh
eWVyLCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0
aW9uLCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTQzNzU3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1MSw2ICsyNTEsMjIgQEAgcHVibGljOgogI2VuZGlmCiB9OwogCitzdHJ1Y3QgTGF5ZXJG
cmFnbWVudCB7CitwdWJsaWM6CisgICAgTGF5ZXJGcmFnbWVudCgpCisgICAgICAgIDogc2hvdWxk
UGFpbnRDb250ZW50KGZhbHNlKQorICAgIHsgfQorCisgICAgYm9vbCBzaG91bGRQYWludENvbnRl
bnQ7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKKyAgICBDbGlwUmVjdCBiYWNrZ3JvdW5k
UmVjdDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5kUmVjdDsKKyAgICBDbGlwUmVjdCBvdXRsaW5l
UmVjdDsKKyAgICBMYXlvdXRQb2ludCBwYWludE9mZnNldDsKK307CisKK3R5cGVkZWYgVmVjdG9y
PExheWVyRnJhZ21lbnQ+IExheWVyRnJhZ21lbnRzOworCiBjbGFzcyBSZW5kZXJMYXllciA6IHB1
YmxpYyBTY3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclJl
cGxpY2E7CkBAIC00MTgsNiArNDM0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAgYm9v
bCBpc1BhZ2luYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYWdpbmF0ZWQ7IH0KKyAgICBSZW5k
ZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9lbmNs
b3NpbmdQYWdpbmF0aW9uTGF5ZXI7IH0KIAogICAgIHZvaWQgdXBkYXRlVHJhbnNmb3JtKCk7CiAg
ICAgCkBAIC04ODksNiArOTA2LDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludExpc3QoVmVj
dG9yPFJlbmRlckxheWVyKj4qLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludFBhZ2luYXRlZENoaWxkTGF5
ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKICAgICB2b2lkIHBhaW50Q2hpbGRMYXll
ckludG9Db2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgY29uc3QgVmVjdG9yPFJl
bmRlckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90IGNvbHVtbkluZGV4KTsKKyAgICAKKyAg
ICB2b2lkIGNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBSZW5kZXJMYXll
ciogcm9vdExheWVyLCBSZW5kZXJSZWdpb24qLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3Qs
CisgICAgICAgIENsaXBSZWN0c1R5cGUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNw
ZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwKTsK
KyAgICB2b2lkIHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYs
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzLCBib29sIHNob3VsZFBh
aW50Q29udGVudCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KTsKKyAgICB2b2lk
IHBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBo
aWNzQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAor
ICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9v
bCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZp
b3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQgcGFp
bnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3ND
b250ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisgICAg
ICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhh
dmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwg
UmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwKKyAgICAgICAgYm9vbCBzZWxl
Y3Rpb25Pbmx5LCBib29sIGZvcmNlQmxhY2tUZXh0KTsKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3Vu
ZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYs
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlv
ciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9pZCBwYWlu
dE91dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVj
dCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRy
b2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgTGF5ZXJQYWludGluZ0luZm8mKTsKKyAgICB2b2lkIHBhaW50TWFza0ZvckZyYWdtZW50
cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAg
ICBSZW5kZXJMYXllciogaGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRl
ckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBib29sIGFw
cGxpZWRUcmFuc2Zvcm0sCkBAIC05MTAsNiArOTQwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5l
clRyYW5zZm9ybVN0YXRlKSBjb25zdDsKICAgICAKICAgICBib29sIGhpdFRlc3RDb250ZW50cyhj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRSZWN0JiBs
YXllckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlcikgY29uc3Q7
CisgICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRz
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJikgY29uc3Q7CisgICAgYm9vbCBoaXRUZXN0Q29udGVu
dHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRl
c3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKIAogICAgIGJvb2wgbGlzdENv
bnRlbnRzT3BhcXVlSW5SZWN0KGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiwgY29uc3QgTGF5
b3V0UmVjdCYpIGNvbnN0OwogCkBAIC0xMTg0LDYgKzEyMTYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
UmVuZGVyU2Nyb2xsYmFyUGFydCogbV9zY3JvbGxDb3JuZXI7CiAgICAgUmVuZGVyU2Nyb2xsYmFy
UGFydCogbV9yZXNpemVyOwogCisgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRl
ckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUg
bm90IHBhZ2luYXRlZC4KKyAgICBSZW5kZXJMYXllciogbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXI7CisKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189937</attachid>
            <date>2013-02-23 14:02:12 -0800</date>
            <delta_ts>2013-02-23 14:26:58 -0800</delta_ts>
            <desc>Hit testing.... fix reference issue. Just for ews, previous patch will fail.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>37676</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQzNzU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA0LDggKzQwNSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDQ5LDcgKzQ1Miw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIyLDYgKzkyNSw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1f
aXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7
CisKICAgICBpZiAoaXNDb21wb3NpdGVkKCkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47
IC8vIEZJWE1FOiBXZSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGlu
ZyBsYXllcnMgc29tZWRheS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUg
UmVuZGVyVmlldyBjYW4ndCBiZSBwYWdpbmF0ZWQuICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwg
bW92ZSB0byBhIG1vZGVsIHdoZXJlIGl0IGlzIHRob3VnaC4KQEAgLTkzMSwxNiArOTM2LDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogICAgIC8vIHJlY3VycmluZyBp
bnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMg
Zm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9v
dHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3Rl
YWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8g
Z2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAg
d2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2Vu
ZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3
ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2ls
eS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAg
ICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7CiAgICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkK
LSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQoKTsKKyAg
ICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2lzUGFnaW5h
dGVkID0gcGFyZW50KCktPnJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtOTU1LDcgKzk2MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24o
KQogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayAmJiBjb250YWluaW5nQmxvY2sgIT0gdmll
dzsKICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5oYXNMYXll
cigpKSB7Ci0gICAgICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGNvbnRhaW5pbmdCbG9jay0+
bGF5ZXIoKS0+aXNQYWdpbmF0ZWQoKTsKKyAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3MTYsNyArMzcyMiw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKIAogICAgICAgICAgICAgLy8g
UmV3aXJlIHRoZSBvbGQgY29udGV4dCB0byBhIG1lbW9yeSBidWZmZXIsIHNvIHRoYXQgd2UgY2Fu
IGNhcHR1cmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIE5PVEU6
IFdlIHNhdmVkIHRoZSBvbGQgY29udGV4dCBpbiB0aGUgInRyYW5zcGFyZW5jeUxheWVyQ29udGV4
dCIgbG9jYWwgdmFyaWFibGUsIHRvIGJlIGFibGUgdG8gc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5
ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IGFuZCBhdm9pZCBkdXBs
aWNhdGluZyAiYmVnaW5GaWx0ZXJFZmZlY3QiIGFmdGVyIGVhY2ggdHJhbnNwYXJlbnkgbGF5ZXIg
Y2FsbC4gQWxzbywgbm90ZSB0aGF0IAorICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNv
bnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFj
aCB0cmFuc3BhcmVuY3kgbGF5ZXIgY2FsbC4gQWxzbywgbm90ZSB0aGF0IAogICAgICAgICAgICAg
Ly8gYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMgd2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmdsZSBsYXp5
IHRyYW5zcGFyZW5jeSBsYXllciwgZXZlbiB0aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNlIGluIHRo
aXMgbWV0aG9kLgogICAgICAgICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYmVnaW5GaWx0
ZXJFZmZlY3QoY29udGV4dCk7CiAKQEAgLTM3MzAsMjggKzM3MzYsMTMgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotI2VuZGlmCiAKLSAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxk
IHVzZSBvbmx5IHdoZW4gd2UgbmVlZCB0aGVtLgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7
Ci0gICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsK
LSAgICBMYXlvdXRQb2ludCBwYWludE9mZnNldDsKLQotICAgIGlmIChzaG91bGRQYWludENvbnRl
bnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5lIHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykg
ewotICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQobG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24sIChsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6
IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgbG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cyA/IElnbm9yZU92ZXJm
bG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXApOwotICAgICAgICBjYWxjdWxhdGVSZWN0cyhj
bGlwUmVjdHNDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbGF5ZXJC
b3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsICZvZmZzZXRG
cm9tUm9vdCk7Ci0gICAgICAgIHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2Nh
dGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVs
QWNjdW11bGF0aW9uKTsKKyAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZm
ZWN0KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmls
dGVyIGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFy
ZW5jeSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0
YXJ0cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KKyAgICAgICAgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnRCZWhhdmlvcik7CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIGZvcmNlQmxhY2tUZXh0ID0g
bG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNr
VGV4dDsKLSAgICBib29sIHNlbGVjdGlvbk9ubHkgID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvciAmIFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5OwotICAgIAotICAgIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWw7Ci0gICAgaWYgKGxvY2Fs
UGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZCkKLSAgICAg
ICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yU2tpcFJvb3RCYWNrZ3JvdW5kOwotICAg
IGVsc2UgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1Jvb3RCYWNrZ3Jv
dW5kT25seSkKLSAgICAgICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yUm9vdEJhY2tn
cm91bmRPbmx5OwotICAgIAogICAgIC8vIElmIHRoaXMgbGF5ZXIncyByZW5kZXJlciBpcyBhIGNo
aWxkIG9mIHRoZSBwYWludGluZ1Jvb3QsIHdlIHJlbmRlciB1bmNvbmRpdGlvbmFsbHksIHdoaWNo
CiAgICAgLy8gaXMgZG9uZSBieSBwYXNzaW5nIGEgbmlsIHBhaW50aW5nUm9vdCBkb3duIHRvIG91
ciByZW5kZXJlciAoYXMgaWYgbm8gcGFpbnRpbmdSb290IHdhcyBldmVyIHNldCkuCiAgICAgLy8g
RWxzZSwgb3VyIHJlbmRlcmVyIHRyZWUgbWF5IG9yIG1heSBub3QgY29udGFpbiB0aGUgcGFpbnRp
bmcgcm9vdCwgc28gd2UgcGFzcyB0aGF0IHJvb3QgYWxvbmcKQEAgLTM3NjMsNzkgKzM3NTQsNDMg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIp
CiAgICAgICAgIHBlcmZvcm1PdmVybGFwVGVzdHMoKmxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBU
ZXN0UmVxdWVzdHMsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdGhpcyk7CiAKLSAgICAv
LyBXZSB3YW50IHRvIHBhaW50IG91ciBsYXllciwgYnV0IG9ubHkgaWYgd2UgaW50ZXJzZWN0IHRo
ZSBkYW1hZ2UgcmVjdC4KLSAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRl
bnRzKSkKLSAgICAgICAgc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0
KGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLCAmb2Zmc2V0RnJvbVJvb3QpOworICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBh
aW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0Owor
ICAgIGJvb2wgc2VsZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
ICYgUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHk7CisgICAgCisgICAgUGFpbnRCZWhhdmlvciBw
YWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKKyAgICBpZiAobG9jYWxQYWludEZs
YWdzICYgUGFpbnRMYXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQorICAgICAgICBwYWlu
dEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7CisgICAgZWxzZSBp
ZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5
KQorICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9u
bHk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGFz
U3RhcnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFuc3BhcmVuY3kpIHsKLSAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkg
c3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNoaWxk
IGxheWVyIGxhemlseSBzdGFydHMgb25lIHdpdGggdGhlIHdyb25nIGNvbnRleHQuCi0gICAgICAg
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOworICAgIExheWVyRnJhZ21lbnRzIGxheWVyRnJh
Z21lbnRzOworICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5l
IHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykgeworICAgICAgICAvLyBDb2xsZWN0IHRo
ZSBmcmFnbWVudHMuIFRoaXMgd2lsbCBjb21wdXRlIHRoZSBjbGlwIHJlY3RhbmdsZXMgYW5kIHBh
aW50IG9mZnNldHMgZm9yIGVhY2ggbGF5ZXIgZnJhZ21lbnQsIGFzIHdlbGwgYXMgd2hldGhlciBv
ciBub3QgdGhlIGNvbnRlbnQgb2YgZWFjaAorICAgICAgICAvLyBmcmFnbWVudCBzaG91bGQgcGFp
bnQuCisgICAgICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uLCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwKKyAgICAgICAgICAgIChsb2NhbFBhaW50RmxhZ3MgJiBQYWlu
dExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5n
Q2xpcFJlY3RzLAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWlu
dGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJm
bG93Q2xpcCwgJm9mZnNldEZyb21Sb290KTsKKyAgICAgICAgdXBkYXRlUGFpbnRpbmdJbmZvRm9y
RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZs
YWdzLCBzaG91bGRQYWludENvbnRlbnQsICZvZmZzZXRGcm9tUm9vdCk7CiAgICAgfQotI2VuZGlm
Ci0KKyAgICAKICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29t
cG9zaXRpbmdCYWNrZ3JvdW5kUGhhc2UpIHsKLSAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVu
dCAmJiAhc2VsZWN0aW9uT25seSkgewotICAgICAgICAgICAgLy8gQmVnaW4gdHJhbnNwYXJlbmN5
IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNvbWV0aGlu
Zy4KLSAgICAgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQotICAgICAgICAgICAgICAgIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFp
bnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAgICAvLyBQYWlu
dCBvdXIgYmFja2dyb3VuZCBmaXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMu
Ci0gICAgICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3Vy
IGJhY2tncm91bmQuCi0gICAgICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5m
by5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBk
YW1hZ2VSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gQmFja2dyb3Vu
ZCBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KLSAgICAg
ICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChk
YW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIHBhaW50QmVoYXZp
b3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwot
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0K
LSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAg
ICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAgICAgICB9CisgICAgICAgIC8vIFBhaW50IG9ubHkg
dGhlIGJhY2tncm91bmRzIGZvciBhbGwgb2YgdGhlIGZyYWdtZW50cyBvZiB0aGUgbGF5ZXIuCisg
ICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgJiYgIXNlbGVjdGlvbk9ubHkpCisgICAgICAg
ICAgICBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQs
IHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBo
YXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWlu
dEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICAgICAgLy8gTm93IHdh
bGsgdGhlIHNvcnRlZCBsaXN0IG9mIGNoaWxkcmVuIHdpdGggbmVnYXRpdmUgei1pbmRpY2VzLgog
ICAgICAgICBwYWludExpc3QobmVnWk9yZGVyTGlzdCgpLCBjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGxvY2FsUGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nRm9yZWdyb3VuZFBoYXNlKSB7Ci0g
ICAgICAgIC8vIE5vdyBlc3RhYmxpc2ggdGhlIGFwcHJvcHJpYXRlIGNsaXAgYW5kIHBhaW50IG91
ciBjaGlsZCBSZW5kZXJPYmplY3RzLgotICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50ICYm
ICFjbGlwUmVjdFRvQXBwbHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBCZWdpbiB0cmFu
c3BhcmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUgdG8gcGFpbnQg
c29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0gICAgICAgICAg
ICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0KLSAgICAgICAgICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXQg
dXAgdGhlIGNsaXAgdXNlZCB3aGVuIHBhaW50aW5nIG91ciBjaGlsZHJlbi4KLSAgICAgICAgICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29u
dGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwUmVjdFRvQXBwbHkucmVjdCgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxl
Y3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JjZUJsYWNrVGV4dCA/IChQYWludEJlaGF2aW9yKVBhaW50QmVo
YXZpb3JGb3JjZUJsYWNrVGV4dCA6IHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRl
cmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+
cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXNlbGVjdGlv
bk9ubHkpIHsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxv
YXQ7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVn
cm91bmQ7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMgPSBs
b2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzOwotICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgICAg
IHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOwotICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQotICAgICAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBjbGlwUmVjdFRvQXBwbHkpOwotICAgICAgICB9CisgICAgICAgIGlm
IChzaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwg
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAg
ICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlciwgc2VsZWN0aW9uT25seSwgZm9yY2VCbGFja1RleHQpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHNob3VsZFBhaW50T3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0bGluZUZvckZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHBhaW50
QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKIAotICAgICAgICBpZiAoc2hvdWxk
UGFpbnRPdXRsaW5lICYmICFvdXRsaW5lUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8v
IFBhaW50IG91ciBvd24gb3V0bGluZQotICAgICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhj
b250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KG91dGxpbmVSZWN0LnJlY3QoKSksIFBhaW50UGhh
c2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFp
bnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsIG91dGxpbmVSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsKLSAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAg
ICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAgICAgfQotICAgIAogICAgICAgICAvLyBQYWludCBh
bnkgY2hpbGQgbGF5ZXJzIHRoYXQgaGF2ZSBvdmVyZmxvdy4KICAgICAgICAgcGFpbnRMaXN0KG1f
bm9ybWFsRmxvd0xpc3QuZ2V0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBh
aW50RmxhZ3MpOwogICAgIApAQCAtMzg0MywzNCArMzc5OCwyNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgICAgIHBhaW50TGlzdChwb3NaT3JkZXJMaXN0
KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIH0K
IAotICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKLSAgICAgICAgY2xpcFRv
UmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCksIHBpeGVsU25hcHBl
ZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVzdG9yZUNsaXAo
Y29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwot
ICAgIH0KKyAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICBwYWlu
dE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICBpZiAoZmls
dGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkpIHsKICAgICAgICAgLy8gQXBwbHkg
dGhlIGNvcnJlY3QgY2xpcHBpbmcgKGllLiBvdmVyZmxvdzogaGlkZGVuKS4KLSAgICAgICAgY2xp
cFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeUxheWVyQ29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAg
ICAgICAvLyBGSVhNRTogSXQgaXMgaW5jb3JyZWN0IHRvIGp1c3QgY2xpcCB0byB0aGUgZGFtYWdl
UmVjdCBoZXJlIG9uY2UgbXVsdGlwbGUgZnJhZ21lbnRzIGFyZSBpbnZvbHZlZC4KKyAgICAgICAg
Q2xpcFJlY3QgYmFja2dyb3VuZFJlY3QgPSBsYXllckZyYWdtZW50cy5pc0VtcHR5KCkgPyBDbGlw
UmVjdCgpIDogbGF5ZXJGcmFnbWVudHNbMF0uYmFja2dyb3VuZFJlY3Q7CisgICAgICAgIGNsaXBU
b1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CiAg
ICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLmFwcGx5RmlsdGVyRWZmZWN0KCk7Ci0gICAg
ICAgIHJlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICByZXN0b3JlQ2xpcCh0cmFu
c3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBi
YWNrZ3JvdW5kUmVjdCk7CiAgICAgfQogI2VuZGlmCi0KKyAgICAKICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB3ZSBub3cgdXNlIHRoZSBvcmlnaW5hbCB0cmFuc3BhcmVuY3kgY29udGV4dC4KICAgICBB
U1NFUlQodHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0ID09IGNvbnRleHQpOwogCiAgICAgaWYgKChs
b2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ01hc2tQaGFzZSkg
JiYgc2hvdWxkUGFpbnRDb250ZW50ICYmIHJlbmRlcmVyKCktPmhhc01hc2soKSAmJiAhc2VsZWN0
aW9uT25seSkgewotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQotICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0LCBEb05v
dEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3aWxsIGhhbmRs
ZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAKLSAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2su
Ci0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVj
dChkYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9ybWFs
LCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAg
ICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQotICAgICAg
ICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGRhbWFnZVJlY3QpOworICAgICAgICAvLyBQYWludCB0aGUgbWFzayBmb3IgdGhlIGZyYWdt
ZW50cy4KKyAgICAgICAgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIH0K
IAogICAgIC8vIEVuZCBvdXIgdHJhbnNwYXJlbmN5IGxheWVyCkBAIC0zOTAyLDEzICszODQ5LDE3
MiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExpc3QoVmVjdG9yPFJlbmRlCiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlbmRlckxh
eWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgIGlmICghY2hpbGRMYXllci0+
aXNQYWdpbmF0ZWQoKSB8fCB1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAgICAgaWYgKCFj
aGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgY2hpbGRMYXllci0+cGFpbnRM
YXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwgY29udGV4dCwg
cGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6
OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCwKKyAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIFNob3VsZFJlc3Bl
Y3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9m
ZnNldEZyb21Sb290KQoreworICAgIC8vIFRPRE86IENvbGxlY3QgbXVsdGlwbGUgZnJhZ21lbnRz
IGZvciBsYXllcnMgd2l0aCBhbiBlbmNsb3NpbmcgcGFnaW5hdGlvbiBsYXllci4KKyAgICAvLyBG
b3IgdW5wYWdpbmF0ZWQgbGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9uZSBmcmFnbWVudC4KKyAgICBM
YXllckZyYWdtZW50IGZyYWdtZW50OworICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29u
dGV4dChyb290TGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUsIHJlc3BlY3RPdmVyZmxvd0NsaXApOworICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBS
ZWN0c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJh
Y2tncm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21lbnQub3V0bGluZVJl
Y3QsIG9mZnNldEZyb21Sb290KTsKKyAgICBmcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKK30K
Kwordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVy
RnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50
aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIGxvY2FsUGFpbnRGbGFncywgYm9vbCBzaG91bGRQYWlu
dENvbnRlbnQsCisgICAgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICBmcmFn
bWVudC5wYWludE9mZnNldCA9IHRvUG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24o
KSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3Vt
dWxhdGlvbik7CisgICAgICAgIGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCA9IHNob3VsZFBh
aW50Q29udGVudDsKKyAgICAgICAgaWYgKHRoaXMgIT0gbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyIHx8ICEobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250
ZW50cykpCisgICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJz
ZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRS
ZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCk7
CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEJhY2tncm91bmRGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAg
IGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVU
cmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywg
UGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdS
b290Rm9yUmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdt
ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5
ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmICghZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250
ZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gQmVnaW4gdHJhbnNwYXJl
bmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNvbWV0
aGluZy4KKyAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCisgICAgICAgICAgICBiZWdpblRy
YW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50QmVoYXZpb3IpOworICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8u
Y2xpcFRvRGlydHlSZWN0KSB7CisgICAgICAgICAgICAvLyBQYWludCBvdXIgYmFja2dyb3VuZCBm
aXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMuCisgICAgICAgICAgICAvLyBF
c3RhYmxpc2ggdGhlIGNsaXAgdXNlZCB0byBwYWludCBvdXIgYmFja2dyb3VuZC4KKyAgICAgICAg
ICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QsIERv
Tm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOyAvLyBCYWNrZ3JvdW5kIHBhaW50aW5nIHdp
bGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3
ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVh
ZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50SW5mbyBwYWludElu
Zm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5y
ZWN0KCkpLCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKKyAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNldCk7CisKKyAgICAg
ICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAgIHJl
c3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21l
bnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJl
bmN5TGF5ZXJDb250ZXh0LAorICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50
RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiBsb2NhbFBhaW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJl
bmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGJvb2wgc2VsZWN0aW9uT25seSwg
Ym9vbCBmb3JjZUJsYWNrVGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgaWYgd2Ug
aGF2ZSBzb21ldGhpbmcgdG8gcGFpbnQuCisgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0
KGkpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCAmJiAhZnJh
Z21lbnQuZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBQYWludEJlaGF2aW9yIGxvY2FsUGFpbnRC
ZWhhdmlvciA9IGZvcmNlQmxhY2tUZXh0ID8gKFBhaW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZv
cmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvcjsKKworICAgIC8vIE9wdGltaXplIGNsaXBwaW5n
IGZvciB0aGUgc2luZ2xlIGZyYWdtZW50IGNhc2UuCisgICAgYm9vbCBzaG91bGRDbGlwID0gbG9j
YWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ICYmIGxheWVyRnJhZ21lbnRzLnNpemUoKSA9
PSAxICYmIGxheWVyRnJhZ21lbnRzWzBdLnNob3VsZFBhaW50Q29udGVudCAmJiAhbGF5ZXJGcmFn
bWVudHNbMF0uZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpOworICAgIGlmIChzaG91bGRDbGlwKQor
ICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVyRnJhZ21lbnRzWzBdLmZvcmVn
cm91bmRSZWN0KTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIGxvb3AgdGhyb3VnaCBldmVyeSBm
cmFnbWVudCBtdWx0aXBsZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0byByZXBhaW50IGluIGVhY2gg
c3BlY2lmaWMgcGhhc2UgaW4gb3JkZXIgZm9yCisgICAgLy8gaW50ZXJsZWF2aW5nIG9mIHRoZSBm
cmFnbWVudHMgdG8gd29yayBwcm9wZXJseS4KKyAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVu
dHNXaXRoUGhhc2Uoc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBo
YXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLCBsYXllckZyYWdtZW50cywKKyAgICAgICAgY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOworICAgIAorICAgIGlmICghc2VsZWN0aW9uT25seSkgeworICAgICAgICBwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZsb2F0LCBsYXllckZy
YWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwg
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZvcmVncm91bmQsIGxheWVyRnJhZ21lbnRzLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlcik7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFz
ZShQYWludFBoYXNlQ2hpbGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
KTsKKyAgICB9CisgICAgCisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckZyYWdtZW50
c1swXS5mb3JlZ3JvdW5kUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdy
b3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBoYXNlLCBjb25zdCBMYXllckZy
YWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3Ig
cGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sK
KyAgICBib29sIHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3Qg
JiYgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpID4gMTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBm
cmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNo
b3VsZFBhaW50Q29udGVudCB8fCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQor
ICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5k
UmVjdCk7CisgICAgCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxT
bmFwcGVkSW50UmVjdChmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5yZWN0KCkpLCBwaGFzZSwgcGFp
bnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJl
Z2lvbik7CisgICAgICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAg
ICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8u
b3ZlcmxhcFRlc3RSZXF1ZXN0czsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCBmcmFnbWVudC5wYWludE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkQ2xp
cCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lk
IFJlbmRlckxheWVyOjpwYWludE91dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVu
dHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAgICBQYWludEJlaGF2aW9yIHBhaW50
QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAg
ICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAg
ICAgIGlmIChmcmFnbWVudC5vdXRsaW5lUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAKKyAgICAgICAgLy8gUGFpbnQgb3VyIG93biBvdXRsaW5lCisgICAgICAgIFBh
aW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5v
dXRsaW5lUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlU2VsZk91dGxpbmUsIHBhaW50QmVoYXZpb3Is
IHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOworICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50Lm91dGxpbmVSZWN0LCBEb05v
dEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQo
cGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNldCk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5vdXRsaW5l
UmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludE1hc2tGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAg
ICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5
ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAo
IWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCisgICAgICAgICAg
ICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBEb05v
dEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3aWxsIGhhbmRs
ZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAgICAKKyAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2su
CisgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgY29sbGVjdCB0aGUgcmVnaW9u
IGZyb20gdGhlIGZyYWdtZW50IGl0c2VsZiBpbnN0ZWFkIG9mIGp1c3QgZnJvbSB0aGUgcGFpbnQg
aW5mby4KKyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQ
YWludEJlaGF2aW9yTm9ybWFsLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGlu
Z0luZm8ucmVnaW9uKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBmcmFn
bWVudC5wYWludE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0lu
Zm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsK
KyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZv
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0
KGkpOworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91
bmRSZWN0KTsKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJ
bnRQb2ludChmcmFnbWVudC5wYWludE9mZnNldCksIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21l
bnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRlZENo
aWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdz
IHBhaW50RmxhZ3MpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJy
ZWFraW5nIHVwIG91ciBjaGlsZCBsYXllciBpbnRvIHN0cmlwcy4KQEAgLTQyNTIsMTYgKzQzNTgs
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgICAgIC8v
IFRoaXMgbGF5ZXIgaXMgZmxhdHRlbmluZywgc28gZmxhdHRlbiB0aGUgc3RhdGUgcGFzc2VkIHRv
IGRlc2NlbmRhbnRzLgogICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLT5mbGF0dGVuKCk7CiAg
ICAgfQotICAgIAotICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQgdXNl
LgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7Ci0gICAgQ2xpcFJlY3QgYmdSZWN0OwotICAg
IENsaXBSZWN0IGZnUmVjdDsKLSAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsKIAotICAgIENsaXBS
ZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5y
ZWdpb24oKSwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNp
emUpOwotICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGhpdFRlc3RSZWN0LCBs
YXllckJvdW5kcywgYmdSZWN0LCBmZ1JlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAKICAgICAvLyBU
aGUgZm9sbG93aW5nIGFyZSB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSB6LWRlcHRoIG9m
IHRoZSBoaXQgcG9pbnQgb2YgM2QtdHJhbnNmb3JtZWQKICAgICAvLyBkZXNjZW5kYW50cy4KICAg
ICBkb3VibGUgbG9jYWxaT2Zmc2V0ID0gLW51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5
KCk7CkBAIC00MzA2LDE2ICs0NDAzLDM4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFIKICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRMYXllcjsKICAgICB9CiAK
KyAgICAgICAgCisgICAgLy8gQ29sbGVjdCB0aGUgZnJhZ21lbnRzLiBUaGlzIHdpbGwgY29tcHV0
ZSB0aGUgY2xpcCByZWN0YW5nbGVzIGZvciBlYWNoIGxheWVyIGZyYWdtZW50LgorICAgIExheWVy
RnJhZ21lbnRzIGxheWVyRnJhZ21lbnRzOworICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFn
bWVudHMsIHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBoaXRUZXN0UmVjdCwg
Um9vdFJlbGF0aXZlQ2xpcFJlY3RzKTsKKwogICAgIC8vIENoZWNrIGZvciB0aGUgcmVzaXplcgot
ICAgIGlmIChjYW5SZXNpemUoKSAmJiByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGxheWVyQm91bmRzKSkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQ
b2ludCgpKSkgeworICAgIGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21l
bnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24pKSB7CiAgICAgICAgIHJlbmRlcmVy
KCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSk7
CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KIAotICAgIC8vIE5leHQgd2Ugd2FudCB0byBz
ZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2Yg
dGhlIGxheWVyLgotICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYm
IGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYg
dGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxh
eWVyLiBDaGVjaworICAgIC8vIGV2ZXJ5IGZyYWdtZW50IGluIHJldmVyc2Ugb3JkZXIuCisgICAg
aWYgKGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAvLyBIaXQgdGVzdCB3aXRoIGEg
dGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQsIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGNvbW1pdCB0
byAncmVzdWx0JyBpZiB3ZSBrbm93IHdlJ3JlIGZyb250bW9zdC4KICAgICAgICAgSGl0VGVzdFJl
c3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7CisgICAgICAgIGJvb2wg
aW5zaWRlRnJhZ21lbnRGb3JlZ3JvdW5kUmVjdCA9IGZhbHNlOworICAgICAgICBpZiAoaGl0VGVz
dENvbnRlbnRzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0
LCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3REZXNjZW5kYW50cywgaW5zaWRlRnJhZ21lbnRGb3Jl
Z3JvdW5kUmVjdCkKKyAgICAgICAgICAgICYmIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6
T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7
CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmICghZGVwdGhTb3J0
RGVzY2VuZGFudHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAv
LyBGb3JlZ3JvdW5kIGNhbiBkZXB0aC1zb3J0IHdpdGggZGVzY2VuZGFudCBsYXllcnMsIHNvIGtl
ZXAgdGhpcyBhcyBhIGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIGNhbmRpZGF0ZUxheWVyID0gdGhp
czsKKyAgICAgICAgfSBlbHNlIGlmIChpbnNpZGVGcmFnbWVudEZvcmVncm91bmRSZWN0ICYmIHJl
c3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJl
c3VsdCk7CisgICAgfQorLyoKKyAgICBpZiAoZmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0
aW9uKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgaWYgKGhpdFRlc3RDb250
ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVzdExvY2F0aW9uLCBI
aXRUZXN0RGVzY2VuZGFudHMpCiAgICAgICAgICAgICAmJiBpc0hpdENhbmRpZGF0ZSh0aGlzLCBm
YWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdl
dCgpKSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKQEAgLTQz
MjgsMTEgKzQ0NDcsMTEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIo
UgogICAgICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSB0aGlzOwogICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVt
cFJlc3VsdCk7Ci0gICAgfQorICAgIH0qLwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBuZWdhdGl2
ZSB6LWluZGV4IGNoaWxkcmVuLgogICAgIGhpdExheWVyID0gaGl0VGVzdExpc3QobmVnWk9yZGVy
TGlzdCgpLCByb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RM
b2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFRy
YW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQdHIsIHpPZmZzZXQsIHVu
ZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCksIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKKyAg
ICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2NlbmRhbnRzUHRy
LCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0aFNvcnREZXNj
ZW5kYW50cyk7CiAgICAgaWYgKGhpdExheWVyKSB7CiAgICAgICAgIGlmICghZGVwdGhTb3J0RGVz
Y2VuZGFudHMpCiAgICAgICAgICAgICByZXR1cm4gaGl0TGF5ZXI7CkBAIC00MzQzLDYgKzQ0NjIs
MjEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgIGlmIChj
YW5kaWRhdGVMYXllcikKICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxheWVyOwogCisgICAgaWYg
KGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1
bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKKyAgICAgICAgYm9vbCBpbnNpZGVGcmFnbWVu
dEJhY2tncm91bmRSZWN0ID0gZmFsc2U7CisgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHNGb3JG
cmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RMb2Nh
dGlvbiwgSGl0VGVzdFNlbGYsIGluc2lkZUZyYWdtZW50QmFja2dyb3VuZFJlY3QpCisgICAgICAg
ICAgICAmJiBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRy
LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKHJl
c3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRl
bXBSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRl
bXBSZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSBlbHNlIGlmIChp
bnNpZGVGcmFnbWVudEJhY2tncm91bmRSZWN0ICYmIHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CisgICAgfQorCisvKgogICAg
IGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIGlzU2VsZlBhaW50aW5n
TGF5ZXIoKSkgewogICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRl
c3RMb2NhdGlvbigpKTsKICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1w
UmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0U2VsZikKQEAgLTQz
NTYsMTAgKzQ0OTAsNDQgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIo
UgogICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CisqLwogCiAgICAgcmV0dXJuIDA7CiB9CiAK
K2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RM
b2NhdGlvbikgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9
IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAocmVzaXplckNvcm5lclJlY3QodGhp
cywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcykpLmNvbnRhaW5zKGhp
dFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyOjpo
aXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJh
Z21lbnRzLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LAorICAgIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0
RmlsdGVyIGhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdAoreworICAg
IGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7
CisgICAgICAgIGlmICgoaGl0VGVzdEZpbHRlciA9PSBIaXRUZXN0U2VsZiAmJiAhZnJhZ21lbnQu
YmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pKQorICAgICAgICAgICAg
fHwgKGhpdFRlc3RGaWx0ZXIgPT0gSGl0VGVzdERlc2NlbmRhbnRzICYmICFmcmFnbWVudC5mb3Jl
Z3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGluc2lkZUNsaXBSZWN0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKGhpdFRl
c3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIGZyYWdtZW50LmxheWVyQm91bmRzLCBoaXRUZXN0
TG9jYXRpb24sIGhpdFRlc3RGaWx0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVz
dENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKSBjb25zdAog
ewogICAgIEFTU0VSVChpc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50KCkpOwpAQCAtNDQwNyw3ICs0NTc1LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjpoaXRUZXN0TGlzdChWZQogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9
IGxpc3QtPmF0KGkpOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwogICAgICAg
ICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKLSAg
ICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkgJiYgIXVzZVJlZ2lvbkJhc2VkQ29s
dW1ucygpKQorICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAg
ICAgIGhpdExheWVyID0gaGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwgcm9v
dExheWVyLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9u
LCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgaGl0TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVy
LCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9u
LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTQzNzU3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1MSw2ICsyNTEsMjIgQEAgcHVibGljOgogI2VuZGlmCiB9OwogCitzdHJ1Y3QgTGF5ZXJGcmFn
bWVudCB7CitwdWJsaWM6CisgICAgTGF5ZXJGcmFnbWVudCgpCisgICAgICAgIDogc2hvdWxkUGFp
bnRDb250ZW50KGZhbHNlKQorICAgIHsgfQorCisgICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQ7
CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKKyAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVj
dDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5kUmVjdDsKKyAgICBDbGlwUmVjdCBvdXRsaW5lUmVj
dDsKKyAgICBMYXlvdXRQb2ludCBwYWludE9mZnNldDsKK307CisKK3R5cGVkZWYgVmVjdG9yPExh
eWVyRnJhZ21lbnQ+IExheWVyRnJhZ21lbnRzOworCiBjbGFzcyBSZW5kZXJMYXllciA6IHB1Ymxp
YyBTY3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclJlcGxp
Y2E7CkBAIC00MTgsNiArNDM0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAgYm9vbCBp
c1BhZ2luYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYWdpbmF0ZWQ7IH0KKyAgICBSZW5kZXJM
YXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9lbmNsb3Np
bmdQYWdpbmF0aW9uTGF5ZXI7IH0KIAogICAgIHZvaWQgdXBkYXRlVHJhbnNmb3JtKCk7CiAgICAg
CkBAIC04ODksNiArOTA2LDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludExpc3QoVmVjdG9y
PFJlbmRlckxheWVyKj4qLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIo
UmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKICAgICB2b2lkIHBhaW50Q2hpbGRMYXllcklu
dG9Db2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgY29uc3QgVmVjdG9yPFJlbmRl
ckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90IGNvbHVtbkluZGV4KTsKKyAgICAKKyAgICB2
b2lkIGNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJSZWdpb24qLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCisg
ICAgICAgIENsaXBSZWN0c1R5cGUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0
T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwKTsKKyAg
ICB2b2lkIHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzLCBib29sIHNob3VsZFBhaW50
Q29udGVudCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KTsKKyAgICB2b2lkIHBh
aW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNz
Q29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAg
ICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBo
YXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3Is
IFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQgcGFpbnRG
b3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250
ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisgICAgICAg
IGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVU
cmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwKKyAgICAgICAgYm9vbCBzZWxlY3Rp
b25Pbmx5LCBib29sIGZvcmNlQmxhY2tUZXh0KTsKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZv
ckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYsIEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwg
UmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9pZCBwYWludE91
dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCog
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xz
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mKTsKKyAgICB2b2lkIHBhaW50TWFza0ZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICBS
ZW5kZXJMYXllciogaGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxh
eWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExh
eW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBib29sIGFwcGxp
ZWRUcmFuc2Zvcm0sCkBAIC05MTAsNiArOTQwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRy
YW5zZm9ybVN0YXRlKSBjb25zdDsKICAgICAKICAgICBib29sIGhpdFRlc3RDb250ZW50cyhjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRSZWN0JiBsYXll
ckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlcikgY29uc3Q7Cisg
ICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJikgY29uc3Q7CisgICAgYm9vbCBoaXRUZXN0Q29udGVudHNG
b3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RG
aWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKIAogICAgIGJvb2wgbGlzdENvbnRl
bnRzT3BhcXVlSW5SZWN0KGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiwgY29uc3QgTGF5b3V0
UmVjdCYpIGNvbnN0OwogCkBAIC0xMTg0LDYgKzEyMTYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVu
ZGVyU2Nyb2xsYmFyUGFydCogbV9zY3JvbGxDb3JuZXI7CiAgICAgUmVuZGVyU2Nyb2xsYmFyUGFy
dCogbV9yZXNpemVyOwogCisgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxh
eWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90
IHBhZ2luYXRlZC4KKyAgICBSZW5kZXJMYXllciogbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7
CisKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189939</attachid>
            <date>2013-02-23 14:26:58 -0800</date>
            <delta_ts>2013-02-23 15:29:30 -0800</delta_ts>
            <desc>Testing a theory that the resizer code in hitTestLayer is dead. It obviously isn&apos;t right in the presence of clipping so it must be dead.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>36457</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQzNzU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA0LDggKzQwNSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDQ5LDcgKzQ1Miw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIyLDYgKzkyNSw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1f
aXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7
CisKICAgICBpZiAoaXNDb21wb3NpdGVkKCkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47
IC8vIEZJWE1FOiBXZSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGlu
ZyBsYXllcnMgc29tZWRheS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUg
UmVuZGVyVmlldyBjYW4ndCBiZSBwYWdpbmF0ZWQuICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwg
bW92ZSB0byBhIG1vZGVsIHdoZXJlIGl0IGlzIHRob3VnaC4KQEAgLTkzMSwxNiArOTM2LDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogICAgIC8vIHJlY3VycmluZyBp
bnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMg
Zm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9v
dHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3Rl
YWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8g
Z2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAg
d2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2Vu
ZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3
ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2ls
eS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAg
ICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7CiAgICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkK
LSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQoKTsKKyAg
ICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2lzUGFnaW5h
dGVkID0gcGFyZW50KCktPnJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtOTU1LDcgKzk2MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24o
KQogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayAmJiBjb250YWluaW5nQmxvY2sgIT0gdmll
dzsKICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5oYXNMYXll
cigpKSB7Ci0gICAgICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGNvbnRhaW5pbmdCbG9jay0+
bGF5ZXIoKS0+aXNQYWdpbmF0ZWQoKTsKKyAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3MTYsNyArMzcyMiw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKIAogICAgICAgICAgICAgLy8g
UmV3aXJlIHRoZSBvbGQgY29udGV4dCB0byBhIG1lbW9yeSBidWZmZXIsIHNvIHRoYXQgd2UgY2Fu
IGNhcHR1cmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIE5PVEU6
IFdlIHNhdmVkIHRoZSBvbGQgY29udGV4dCBpbiB0aGUgInRyYW5zcGFyZW5jeUxheWVyQ29udGV4
dCIgbG9jYWwgdmFyaWFibGUsIHRvIGJlIGFibGUgdG8gc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5
ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IGFuZCBhdm9pZCBkdXBs
aWNhdGluZyAiYmVnaW5GaWx0ZXJFZmZlY3QiIGFmdGVyIGVhY2ggdHJhbnNwYXJlbnkgbGF5ZXIg
Y2FsbC4gQWxzbywgbm90ZSB0aGF0IAorICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNv
bnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFj
aCB0cmFuc3BhcmVuY3kgbGF5ZXIgY2FsbC4gQWxzbywgbm90ZSB0aGF0IAogICAgICAgICAgICAg
Ly8gYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMgd2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmdsZSBsYXp5
IHRyYW5zcGFyZW5jeSBsYXllciwgZXZlbiB0aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNlIGluIHRo
aXMgbWV0aG9kLgogICAgICAgICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYmVnaW5GaWx0
ZXJFZmZlY3QoY29udGV4dCk7CiAKQEAgLTM3MzAsMjggKzM3MzYsMTMgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotI2VuZGlmCi0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxk
IHVzZSBvbmx5IHdoZW4gd2UgbmVlZCB0aGVtLgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7
Ci0gICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsK
LSAgICBMYXlvdXRQb2ludCBwYWludE9mZnNldDsKIAotICAgIGlmIChzaG91bGRQYWludENvbnRl
bnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5lIHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykg
ewotICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQobG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24sIChsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6
IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgbG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cyA/IElnbm9yZU92ZXJm
bG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXApOwotICAgICAgICBjYWxjdWxhdGVSZWN0cyhj
bGlwUmVjdHNDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbGF5ZXJC
b3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsICZvZmZzZXRG
cm9tUm9vdCk7Ci0gICAgICAgIHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2Nh
dGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVs
QWNjdW11bGF0aW9uKTsKKyAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZm
ZWN0KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmls
dGVyIGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFy
ZW5jeSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0
YXJ0cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KKyAgICAgICAgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnRCZWhhdmlvcik7CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIGZvcmNlQmxhY2tUZXh0ID0g
bG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNr
VGV4dDsKLSAgICBib29sIHNlbGVjdGlvbk9ubHkgID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvciAmIFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5OwotICAgIAotICAgIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWw7Ci0gICAgaWYgKGxvY2Fs
UGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZCkKLSAgICAg
ICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yU2tpcFJvb3RCYWNrZ3JvdW5kOwotICAg
IGVsc2UgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1Jvb3RCYWNrZ3Jv
dW5kT25seSkKLSAgICAgICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yUm9vdEJhY2tn
cm91bmRPbmx5OwotICAgIAogICAgIC8vIElmIHRoaXMgbGF5ZXIncyByZW5kZXJlciBpcyBhIGNo
aWxkIG9mIHRoZSBwYWludGluZ1Jvb3QsIHdlIHJlbmRlciB1bmNvbmRpdGlvbmFsbHksIHdoaWNo
CiAgICAgLy8gaXMgZG9uZSBieSBwYXNzaW5nIGEgbmlsIHBhaW50aW5nUm9vdCBkb3duIHRvIG91
ciByZW5kZXJlciAoYXMgaWYgbm8gcGFpbnRpbmdSb290IHdhcyBldmVyIHNldCkuCiAgICAgLy8g
RWxzZSwgb3VyIHJlbmRlcmVyIHRyZWUgbWF5IG9yIG1heSBub3QgY29udGFpbiB0aGUgcGFpbnRp
bmcgcm9vdCwgc28gd2UgcGFzcyB0aGF0IHJvb3QgYWxvbmcKQEAgLTM3NjMsNzkgKzM3NTQsNDMg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIp
CiAgICAgICAgIHBlcmZvcm1PdmVybGFwVGVzdHMoKmxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBU
ZXN0UmVxdWVzdHMsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdGhpcyk7CiAKLSAgICAv
LyBXZSB3YW50IHRvIHBhaW50IG91ciBsYXllciwgYnV0IG9ubHkgaWYgd2UgaW50ZXJzZWN0IHRo
ZSBkYW1hZ2UgcmVjdC4KLSAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRl
bnRzKSkKLSAgICAgICAgc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0
KGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLCAmb2Zmc2V0RnJvbVJvb3QpOworICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBh
aW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0Owor
ICAgIGJvb2wgc2VsZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
ICYgUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHk7CisgICAgCisgICAgUGFpbnRCZWhhdmlvciBw
YWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKKyAgICBpZiAobG9jYWxQYWludEZs
YWdzICYgUGFpbnRMYXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQorICAgICAgICBwYWlu
dEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7CisgICAgZWxzZSBp
ZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5
KQorICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9u
bHk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGFz
U3RhcnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFuc3BhcmVuY3kpIHsKLSAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkg
c3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNoaWxk
IGxheWVyIGxhemlseSBzdGFydHMgb25lIHdpdGggdGhlIHdyb25nIGNvbnRleHQuCi0gICAgICAg
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOworICAgIExheWVyRnJhZ21lbnRzIGxheWVyRnJh
Z21lbnRzOworICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5l
IHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykgeworICAgICAgICAvLyBDb2xsZWN0IHRo
ZSBmcmFnbWVudHMuIFRoaXMgd2lsbCBjb21wdXRlIHRoZSBjbGlwIHJlY3RhbmdsZXMgYW5kIHBh
aW50IG9mZnNldHMgZm9yIGVhY2ggbGF5ZXIgZnJhZ21lbnQsIGFzIHdlbGwgYXMgd2hldGhlciBv
ciBub3QgdGhlIGNvbnRlbnQgb2YgZWFjaAorICAgICAgICAvLyBmcmFnbWVudCBzaG91bGQgcGFp
bnQuCisgICAgICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uLCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwKKyAgICAgICAgICAgIChsb2NhbFBhaW50RmxhZ3MgJiBQYWlu
dExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5n
Q2xpcFJlY3RzLAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWlu
dGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJm
bG93Q2xpcCwgJm9mZnNldEZyb21Sb290KTsKKyAgICAgICAgdXBkYXRlUGFpbnRpbmdJbmZvRm9y
RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZs
YWdzLCBzaG91bGRQYWludENvbnRlbnQsICZvZmZzZXRGcm9tUm9vdCk7CiAgICAgfQotI2VuZGlm
Ci0KKyAgICAKICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29t
cG9zaXRpbmdCYWNrZ3JvdW5kUGhhc2UpIHsKLSAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVu
dCAmJiAhc2VsZWN0aW9uT25seSkgewotICAgICAgICAgICAgLy8gQmVnaW4gdHJhbnNwYXJlbmN5
IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNvbWV0aGlu
Zy4KLSAgICAgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQotICAgICAgICAgICAgICAgIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFp
bnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAgICAvLyBQYWlu
dCBvdXIgYmFja2dyb3VuZCBmaXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMu
Ci0gICAgICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3Vy
IGJhY2tncm91bmQuCi0gICAgICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5m
by5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBk
YW1hZ2VSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gQmFja2dyb3Vu
ZCBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KLSAgICAg
ICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChk
YW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIHBhaW50QmVoYXZp
b3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwot
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0K
LSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAg
ICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAgICAgICB9CisgICAgICAgIC8vIFBhaW50IG9ubHkg
dGhlIGJhY2tncm91bmRzIGZvciBhbGwgb2YgdGhlIGZyYWdtZW50cyBvZiB0aGUgbGF5ZXIuCisg
ICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgJiYgIXNlbGVjdGlvbk9ubHkpCisgICAgICAg
ICAgICBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQs
IHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBo
YXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWlu
dEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICAgICAgLy8gTm93IHdh
bGsgdGhlIHNvcnRlZCBsaXN0IG9mIGNoaWxkcmVuIHdpdGggbmVnYXRpdmUgei1pbmRpY2VzLgog
ICAgICAgICBwYWludExpc3QobmVnWk9yZGVyTGlzdCgpLCBjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGxvY2FsUGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nRm9yZWdyb3VuZFBoYXNlKSB7Ci0g
ICAgICAgIC8vIE5vdyBlc3RhYmxpc2ggdGhlIGFwcHJvcHJpYXRlIGNsaXAgYW5kIHBhaW50IG91
ciBjaGlsZCBSZW5kZXJPYmplY3RzLgotICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50ICYm
ICFjbGlwUmVjdFRvQXBwbHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBCZWdpbiB0cmFu
c3BhcmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUgdG8gcGFpbnQg
c29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0gICAgICAgICAg
ICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0KLSAgICAgICAgICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXQg
dXAgdGhlIGNsaXAgdXNlZCB3aGVuIHBhaW50aW5nIG91ciBjaGlsZHJlbi4KLSAgICAgICAgICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29u
dGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwUmVjdFRvQXBwbHkucmVjdCgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxl
Y3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JjZUJsYWNrVGV4dCA/IChQYWludEJlaGF2aW9yKVBhaW50QmVo
YXZpb3JGb3JjZUJsYWNrVGV4dCA6IHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRl
cmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+
cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXNlbGVjdGlv
bk9ubHkpIHsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxv
YXQ7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVn
cm91bmQ7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMgPSBs
b2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzOwotICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgICAg
IHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOwotICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQotICAgICAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBjbGlwUmVjdFRvQXBwbHkpOwotICAgICAgICB9CisgICAgICAgIGlm
IChzaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwg
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAg
ICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlciwgc2VsZWN0aW9uT25seSwgZm9yY2VCbGFja1RleHQpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHNob3VsZFBhaW50T3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0bGluZUZvckZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHBhaW50
QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKIAotICAgICAgICBpZiAoc2hvdWxk
UGFpbnRPdXRsaW5lICYmICFvdXRsaW5lUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8v
IFBhaW50IG91ciBvd24gb3V0bGluZQotICAgICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhj
b250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KG91dGxpbmVSZWN0LnJlY3QoKSksIFBhaW50UGhh
c2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFp
bnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsIG91dGxpbmVSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsKLSAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAg
ICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAgICAgfQotICAgIAogICAgICAgICAvLyBQYWludCBh
bnkgY2hpbGQgbGF5ZXJzIHRoYXQgaGF2ZSBvdmVyZmxvdy4KICAgICAgICAgcGFpbnRMaXN0KG1f
bm9ybWFsRmxvd0xpc3QuZ2V0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBh
aW50RmxhZ3MpOwogICAgIApAQCAtMzg0MywzNCArMzc5OCwyNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgICAgIHBhaW50TGlzdChwb3NaT3JkZXJMaXN0
KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIH0K
IAotICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKLSAgICAgICAgY2xpcFRv
UmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCksIHBpeGVsU25hcHBl
ZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVzdG9yZUNsaXAo
Y29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwot
ICAgIH0KKyAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICBwYWlu
dE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICBpZiAoZmls
dGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkpIHsKICAgICAgICAgLy8gQXBwbHkg
dGhlIGNvcnJlY3QgY2xpcHBpbmcgKGllLiBvdmVyZmxvdzogaGlkZGVuKS4KLSAgICAgICAgY2xp
cFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeUxheWVyQ29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAg
ICAgICAvLyBGSVhNRTogSXQgaXMgaW5jb3JyZWN0IHRvIGp1c3QgY2xpcCB0byB0aGUgZGFtYWdl
UmVjdCBoZXJlIG9uY2UgbXVsdGlwbGUgZnJhZ21lbnRzIGFyZSBpbnZvbHZlZC4KKyAgICAgICAg
Q2xpcFJlY3QgYmFja2dyb3VuZFJlY3QgPSBsYXllckZyYWdtZW50cy5pc0VtcHR5KCkgPyBDbGlw
UmVjdCgpIDogbGF5ZXJGcmFnbWVudHNbMF0uYmFja2dyb3VuZFJlY3Q7CisgICAgICAgIGNsaXBU
b1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CiAg
ICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLmFwcGx5RmlsdGVyRWZmZWN0KCk7Ci0gICAg
ICAgIHJlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICByZXN0b3JlQ2xpcCh0cmFu
c3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBi
YWNrZ3JvdW5kUmVjdCk7CiAgICAgfQogI2VuZGlmCi0KKyAgICAKICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB3ZSBub3cgdXNlIHRoZSBvcmlnaW5hbCB0cmFuc3BhcmVuY3kgY29udGV4dC4KICAgICBB
U1NFUlQodHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0ID09IGNvbnRleHQpOwogCiAgICAgaWYgKChs
b2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ01hc2tQaGFzZSkg
JiYgc2hvdWxkUGFpbnRDb250ZW50ICYmIHJlbmRlcmVyKCktPmhhc01hc2soKSAmJiAhc2VsZWN0
aW9uT25seSkgewotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQotICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0LCBEb05v
dEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3aWxsIGhhbmRs
ZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAKLSAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2su
Ci0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVj
dChkYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9ybWFs
LCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAg
ICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQotICAgICAg
ICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGRhbWFnZVJlY3QpOworICAgICAgICAvLyBQYWludCB0aGUgbWFzayBmb3IgdGhlIGZyYWdt
ZW50cy4KKyAgICAgICAgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIH0K
IAogICAgIC8vIEVuZCBvdXIgdHJhbnNwYXJlbmN5IGxheWVyCkBAIC0zOTAyLDEzICszODQ5LDE3
MiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExpc3QoVmVjdG9yPFJlbmRlCiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlbmRlckxh
eWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgIGlmICghY2hpbGRMYXllci0+
aXNQYWdpbmF0ZWQoKSB8fCB1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAgICAgaWYgKCFj
aGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgY2hpbGRMYXllci0+cGFpbnRM
YXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwgY29udGV4dCwg
cGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6
OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCwKKyAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIFNob3VsZFJlc3Bl
Y3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9m
ZnNldEZyb21Sb290KQoreworICAgIC8vIFRPRE86IENvbGxlY3QgbXVsdGlwbGUgZnJhZ21lbnRz
IGZvciBsYXllcnMgd2l0aCBhbiBlbmNsb3NpbmcgcGFnaW5hdGlvbiBsYXllci4KKyAgICAvLyBG
b3IgdW5wYWdpbmF0ZWQgbGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9uZSBmcmFnbWVudC4KKyAgICBM
YXllckZyYWdtZW50IGZyYWdtZW50OworICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29u
dGV4dChyb290TGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUsIHJlc3BlY3RPdmVyZmxvd0NsaXApOworICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBS
ZWN0c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJh
Y2tncm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21lbnQub3V0bGluZVJl
Y3QsIG9mZnNldEZyb21Sb290KTsKKyAgICBmcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKK30K
Kwordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVy
RnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50
aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIGxvY2FsUGFpbnRGbGFncywgYm9vbCBzaG91bGRQYWlu
dENvbnRlbnQsCisgICAgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICBmcmFn
bWVudC5wYWludE9mZnNldCA9IHRvUG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24o
KSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3Vt
dWxhdGlvbik7CisgICAgICAgIGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCA9IHNob3VsZFBh
aW50Q29udGVudDsKKyAgICAgICAgaWYgKHRoaXMgIT0gbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyIHx8ICEobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250
ZW50cykpCisgICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJz
ZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRS
ZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCk7
CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEJhY2tncm91bmRGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAg
IGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVU
cmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywg
UGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdS
b290Rm9yUmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdt
ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5
ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmICghZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250
ZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gQmVnaW4gdHJhbnNwYXJl
bmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNvbWV0
aGluZy4KKyAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCisgICAgICAgICAgICBiZWdpblRy
YW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50QmVoYXZpb3IpOworICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8u
Y2xpcFRvRGlydHlSZWN0KSB7CisgICAgICAgICAgICAvLyBQYWludCBvdXIgYmFja2dyb3VuZCBm
aXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMuCisgICAgICAgICAgICAvLyBF
c3RhYmxpc2ggdGhlIGNsaXAgdXNlZCB0byBwYWludCBvdXIgYmFja2dyb3VuZC4KKyAgICAgICAg
ICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QsIERv
Tm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOyAvLyBCYWNrZ3JvdW5kIHBhaW50aW5nIHdp
bGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3
ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVh
ZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50SW5mbyBwYWludElu
Zm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5y
ZWN0KCkpLCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKKyAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNldCk7CisKKyAgICAg
ICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAgIHJl
c3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21l
bnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJl
bmN5TGF5ZXJDb250ZXh0LAorICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50
RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiBsb2NhbFBhaW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJl
bmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGJvb2wgc2VsZWN0aW9uT25seSwg
Ym9vbCBmb3JjZUJsYWNrVGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgaWYgd2Ug
aGF2ZSBzb21ldGhpbmcgdG8gcGFpbnQuCisgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0
KGkpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCAmJiAhZnJh
Z21lbnQuZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBQYWludEJlaGF2aW9yIGxvY2FsUGFpbnRC
ZWhhdmlvciA9IGZvcmNlQmxhY2tUZXh0ID8gKFBhaW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZv
cmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvcjsKKworICAgIC8vIE9wdGltaXplIGNsaXBwaW5n
IGZvciB0aGUgc2luZ2xlIGZyYWdtZW50IGNhc2UuCisgICAgYm9vbCBzaG91bGRDbGlwID0gbG9j
YWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ICYmIGxheWVyRnJhZ21lbnRzLnNpemUoKSA9
PSAxICYmIGxheWVyRnJhZ21lbnRzWzBdLnNob3VsZFBhaW50Q29udGVudCAmJiAhbGF5ZXJGcmFn
bWVudHNbMF0uZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpOworICAgIGlmIChzaG91bGRDbGlwKQor
ICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVyRnJhZ21lbnRzWzBdLmZvcmVn
cm91bmRSZWN0KTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIGxvb3AgdGhyb3VnaCBldmVyeSBm
cmFnbWVudCBtdWx0aXBsZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0byByZXBhaW50IGluIGVhY2gg
c3BlY2lmaWMgcGhhc2UgaW4gb3JkZXIgZm9yCisgICAgLy8gaW50ZXJsZWF2aW5nIG9mIHRoZSBm
cmFnbWVudHMgdG8gd29yayBwcm9wZXJseS4KKyAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVu
dHNXaXRoUGhhc2Uoc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBo
YXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLCBsYXllckZyYWdtZW50cywKKyAgICAgICAgY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOworICAgIAorICAgIGlmICghc2VsZWN0aW9uT25seSkgeworICAgICAgICBwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZsb2F0LCBsYXllckZy
YWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwg
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZvcmVncm91bmQsIGxheWVyRnJhZ21lbnRzLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlcik7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFz
ZShQYWludFBoYXNlQ2hpbGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
KTsKKyAgICB9CisgICAgCisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckZyYWdtZW50
c1swXS5mb3JlZ3JvdW5kUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdy
b3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBoYXNlLCBjb25zdCBMYXllckZy
YWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3Ig
cGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sK
KyAgICBib29sIHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3Qg
JiYgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpID4gMTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBm
cmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNo
b3VsZFBhaW50Q29udGVudCB8fCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQor
ICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5k
UmVjdCk7CisgICAgCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxT
bmFwcGVkSW50UmVjdChmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5yZWN0KCkpLCBwaGFzZSwgcGFp
bnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJl
Z2lvbik7CisgICAgICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAg
ICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8u
b3ZlcmxhcFRlc3RSZXF1ZXN0czsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCBmcmFnbWVudC5wYWludE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkQ2xp
cCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lk
IFJlbmRlckxheWVyOjpwYWludE91dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVu
dHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAgICBQYWludEJlaGF2aW9yIHBhaW50
QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAg
ICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAg
ICAgIGlmIChmcmFnbWVudC5vdXRsaW5lUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAKKyAgICAgICAgLy8gUGFpbnQgb3VyIG93biBvdXRsaW5lCisgICAgICAgIFBh
aW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5v
dXRsaW5lUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlU2VsZk91dGxpbmUsIHBhaW50QmVoYXZpb3Is
IHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOworICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50Lm91dGxpbmVSZWN0LCBEb05v
dEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQo
cGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNldCk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5vdXRsaW5l
UmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludE1hc2tGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAg
ICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5
ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAo
IWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCisgICAgICAgICAg
ICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBEb05v
dEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3aWxsIGhhbmRs
ZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAgICAKKyAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2su
CisgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgY29sbGVjdCB0aGUgcmVnaW9u
IGZyb20gdGhlIGZyYWdtZW50IGl0c2VsZiBpbnN0ZWFkIG9mIGp1c3QgZnJvbSB0aGUgcGFpbnQg
aW5mby4KKyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQ
YWludEJlaGF2aW9yTm9ybWFsLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGlu
Z0luZm8ucmVnaW9uKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBmcmFn
bWVudC5wYWludE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0lu
Zm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsK
KyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZv
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0
KGkpOworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91
bmRSZWN0KTsKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJ
bnRQb2ludChmcmFnbWVudC5wYWludE9mZnNldCksIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21l
bnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRlZENo
aWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdz
IHBhaW50RmxhZ3MpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJy
ZWFraW5nIHVwIG91ciBjaGlsZCBsYXllciBpbnRvIHN0cmlwcy4KQEAgLTQyNTIsMTYgKzQzNTgs
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgICAgIC8v
IFRoaXMgbGF5ZXIgaXMgZmxhdHRlbmluZywgc28gZmxhdHRlbiB0aGUgc3RhdGUgcGFzc2VkIHRv
IGRlc2NlbmRhbnRzLgogICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLT5mbGF0dGVuKCk7CiAg
ICAgfQotICAgIAotICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQgdXNl
LgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7Ci0gICAgQ2xpcFJlY3QgYmdSZWN0OwotICAg
IENsaXBSZWN0IGZnUmVjdDsKLSAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsKIAotICAgIENsaXBS
ZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5y
ZWdpb24oKSwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNp
emUpOwotICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGhpdFRlc3RSZWN0LCBs
YXllckJvdW5kcywgYmdSZWN0LCBmZ1JlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAKICAgICAvLyBU
aGUgZm9sbG93aW5nIGFyZSB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSB6LWRlcHRoIG9m
IHRoZSBoaXQgcG9pbnQgb2YgM2QtdHJhbnNmb3JtZWQKICAgICAvLyBkZXNjZW5kYW50cy4KICAg
ICBkb3VibGUgbG9jYWxaT2Zmc2V0ID0gLW51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5
KCk7CkBAIC00MzA2LDE3ICs0NDAzLDE4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFIKICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRMYXllcjsKICAgICB9CiAK
LSAgICAvLyBDaGVjayBmb3IgdGhlIHJlc2l6ZXIKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgcmVz
aXplckNvcm5lclJlY3QodGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChsYXllckJvdW5kcykpLmNv
bnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGhpdFRlc3RMb2NhdGlvbi5wb2ludCgp
KTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLy8gTmV4dCB3ZSB3YW50IHRv
IHNlZSBpZiB0aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBv
ZiB0aGUgbGF5ZXIuCi0gICAgaWYgKGZnUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikg
JiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgICAgIAorICAgIC8vIENvbGxlY3QgdGhl
IGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBmb3IgZWFj
aCBsYXllciBmcmFnbWVudC4KKyAgICBMYXllckZyYWdtZW50cyBsYXllckZyYWdtZW50czsKKyAg
ICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2Nh
dGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cyk7CisKKyAg
ICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBj
aGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4gQ2hlY2sKKyAgICAvLyBldmVyeSBmcmFn
bWVudCBpbiByZXZlcnNlIG9yZGVyLgorICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVyKCkpIHsK
ICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBvcmFyeSBIaXRUZXN0UmVzdWx0LCBiZWNh
dXNlIHdlIG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jlc3VsdCcgaWYgd2Uga25vdyB3ZSdyZSBm
cm9udG1vc3QuCiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVz
dExvY2F0aW9uKCkpOwotICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBS
ZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3REZXNjZW5kYW50cykK
KyAgICAgICAgYm9vbCBpbnNpZGVGcmFnbWVudEZvcmVncm91bmRSZWN0ID0gZmFsc2U7CisgICAg
ICAgIGlmIChoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJlcXVl
c3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdERlc2NlbmRhbnRzLCBpbnNp
ZGVGcmFnbWVudEZvcmVncm91bmRSZWN0KQogICAgICAgICAgICAgJiYgaXNIaXRDYW5kaWRhdGUo
dGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1T
dGF0ZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkp
CiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKQEAgLTQzMjYsMTMg
KzQ0MjQsMTMgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgLy8gRm9yZWdyb3VuZCBjYW4g
ZGVwdGgtc29ydCB3aXRoIGRlc2NlbmRhbnQgbGF5ZXJzLCBzbyBrZWVwIHRoaXMgYXMgYSBjYW5k
aWRhdGUuCiAgICAgICAgICAgICBjYW5kaWRhdGVMYXllciA9IHRoaXM7Ci0gICAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICB9IGVsc2UgaWYgKGluc2lk
ZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICAvLyBOb3cg
Y2hlY2sgb3VyIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCiAgICAgaGl0TGF5ZXIgPSBoaXRU
ZXN0TGlzdChuZWdaT3JkZXJMaXN0KCksIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRU
ZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50
c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0
RGVzY2VuZGFudHMpOworICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0
Rm9yRGVzY2VuZGFudHNQdHIsIHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0
KCksIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKICAgICBpZiAoaGl0TGF5ZXIpIHsKICAgICAgICAg
aWYgKCFkZXB0aFNvcnREZXNjZW5kYW50cykKICAgICAgICAgICAgIHJldHVybiBoaXRMYXllcjsK
QEAgLTQzNDMsOSArNDQ0MSwxMCBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
YXllcihSCiAgICAgaWYgKGNhbmRpZGF0ZUxheWVyKQogICAgICAgICByZXR1cm4gY2FuZGlkYXRl
TGF5ZXI7CiAKLSAgICBpZiAoYmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiBp
c1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICBpZiAoaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7
CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9u
KCkpOwotICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxh
eWVyQm91bmRzLCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RTZWxmKQorICAgICAgICBib29sIGlu
c2lkZUZyYWdtZW50QmFja2dyb3VuZFJlY3QgPSBmYWxzZTsKKyAgICAgICAgaWYgKGhpdFRlc3RD
b250ZW50c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgcmVxdWVzdCwgdGVtcFJlc3VsdCwg
aGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0U2VsZiwgaW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVj
dCkKICAgICAgICAgICAgICYmIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9y
Q29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQodGVtcFJlc3VsdCk7CkBAIC00MzUzLDEzICs0NDUyLDMyIEBAIFJlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0
ZW1wUmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgaWYgKGluc2lkZUZyYWdtZW50
QmFja2dyb3VuZFJlY3QgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAor
Ym9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKKyAgICBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRl
c3RMb2NhdGlvbiwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyLCBib29sJiBpbnNpZGVDbGlw
UmVjdCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxh
eWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoKGhpdFRlc3RGaWx0ZXIgPT0gSGl0VGVz
dFNlbGYgJiYgIWZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0
aW9uKSkKKyAgICAgICAgICAgIHx8IChoaXRUZXN0RmlsdGVyID09IEhpdFRlc3REZXNjZW5kYW50
cyAmJiAhZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24p
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnNpZGVDbGlwUmVjdCA9IHRydWU7
CisgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBmcmFnbWVudC5s
YXllckJvdW5kcywgaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0RmlsdGVyKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wg
UmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RGaWx0ZXIgaGl0
VGVzdEZpbHRlcikgY29uc3QKIHsKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8
IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKQEAgLTQ0MDcsNyArNDUyNSw3IEBA
IFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmUKICAgICAgICAgUmVuZGVy
TGF5ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGhp
dExheWVyID0gMDsKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRU
ZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpICYm
ICF1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzUGFn
aW5hdGVkKCkpCiAgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdpbmF0ZWRDaGlsZExh
eWVyKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJl
Y3QsIGhpdFRlc3RMb2NhdGlvbiwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50
cyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRMYXllci0+aGl0
VGVzdExheWVyKHJvb3RMYXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJl
Y3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVz
Y2VuZGFudHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJl
dmlzaW9uIDE0Mzc1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDIyIEBAIHB1YmxpYzoKICNlbmRpZgogfTsK
IAorc3RydWN0IExheWVyRnJhZ21lbnQgeworcHVibGljOgorICAgIExheWVyRnJhZ21lbnQoKQor
ICAgICAgICA6IHNob3VsZFBhaW50Q29udGVudChmYWxzZSkKKyAgICB7IH0KKworICAgIGJvb2wg
c2hvdWxkUGFpbnRDb250ZW50OworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CisgICAgQ2xp
cFJlY3QgYmFja2dyb3VuZFJlY3Q7CisgICAgQ2xpcFJlY3QgZm9yZWdyb3VuZFJlY3Q7CisgICAg
Q2xpcFJlY3Qgb3V0bGluZVJlY3Q7CisgICAgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQ7Cit9Owor
Cit0eXBlZGVmIFZlY3RvcjxMYXllckZyYWdtZW50PiBMYXllckZyYWdtZW50czsKKwogY2xhc3Mg
UmVuZGVyTGF5ZXIgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgewogcHVibGljOgogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwpAQCAtNDE4LDYgKzQzNCw3IEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIAogICAgIGJvb2wgaXNQYWdpbmF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFnaW5h
dGVkOyB9CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOyB9CiAKICAgICB2b2lkIHVwZGF0
ZVRyYW5zZm9ybSgpOwogICAgIApAQCAtODg5LDYgKzkwNiwxOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFpbnRMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRQ
YWdpbmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9p
ZCBwYWludENoaWxkTGF5ZXJJbnRvQ29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3Ms
IGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNpemVfdCBjb2x1bW5J
bmRleCk7CisgICAgCisgICAgdm9pZCBjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwg
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiwgY29uc3QgTGF5b3V0
UmVjdCYgZGlydHlSZWN0LAorICAgICAgICBDbGlwUmVjdHNUeXBlLCBTaG91bGRSZXNwZWN0T3Zl
cmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNl
dEZyb21Sb290ID0gMCk7CisgICAgdm9pZCB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMo
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFn
cywgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9t
Um9vdCk7CisgICAgdm9pZCBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5j
eUxheWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFp
bnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
KTsKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5
ZXJDb250ZXh0LAorICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERp
cnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYs
IFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsCisg
ICAgICAgIGJvb2wgc2VsZWN0aW9uT25seSwgYm9vbCBmb3JjZUJsYWNrVGV4dCk7CisgICAgdm9p
ZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZSwgY29uc3Qg
TGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIp
OworICAgIHZvaWQgcGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRz
JiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2
aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBh
aW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CisgICAgdm9pZCBwYWlu
dE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOwogCiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXllcihSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLApAQCAtOTEwLDYgKzk0MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlKiBjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBo
aXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRl
c3RGaWx0ZXIpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xp
cFJlY3QpIGNvbnN0OwogCiAgICAgYm9vbCBsaXN0Q29udGVudHNPcGFxdWVJblJlY3QoY29uc3Qg
VmVjdG9yPFJlbmRlckxheWVyKj4qLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKQEAgLTEx
ODQsNiArMTIxNSw5IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJTY3JvbGxiYXJQYXJ0KiBtX3Nj
cm9sbENvcm5lcjsKICAgICBSZW5kZXJTY3JvbGxiYXJQYXJ0KiBtX3Jlc2l6ZXI7CiAKKyAgICAv
LyBQb2ludGVyIHRvIHRoZSBlbmNsb3NpbmcgUmVuZGVyTGF5ZXIgdGhhdCBjYXVzZWQgdXMgdG8g
YmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdlIGFyZSBub3QgcGFnaW5hdGVkLgorICAgIFJlbmRl
ckxheWVyKiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKKwogcHJpdmF0ZToKICAgICBJbnRS
ZWN0IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189943</attachid>
            <date>2013-02-23 15:29:30 -0800</date>
            <delta_ts>2013-02-23 16:39:15 -0800</delta_ts>
            <desc>Hit testing finished. Running through EWS.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>36457</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQzODUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA1LDggKzQwNiwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDUwLDcgKzQ1Myw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIzLDYgKzkyNiw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1f
aXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7
CisKICAgICBpZiAoaXNDb21wb3NpdGVkKCkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47
IC8vIEZJWE1FOiBXZSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGlu
ZyBsYXllcnMgc29tZWRheS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUg
UmVuZGVyVmlldyBjYW4ndCBiZSBwYWdpbmF0ZWQuICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwg
bW92ZSB0byBhIG1vZGVsIHdoZXJlIGl0IGlzIHRob3VnaC4KQEAgLTkzMiwxNiArOTM3LDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogICAgIC8vIHJlY3VycmluZyBp
bnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMg
Zm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9v
dHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3Rl
YWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8g
Z2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAg
d2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2Vu
ZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3
ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2ls
eS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAg
ICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7CiAgICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkK
LSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQoKTsKKyAg
ICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2lzUGFnaW5h
dGVkID0gcGFyZW50KCktPnJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtOTU2LDcgKzk2Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24o
KQogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayAmJiBjb250YWluaW5nQmxvY2sgIT0gdmll
dzsKICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5oYXNMYXll
cigpKSB7Ci0gICAgICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGNvbnRhaW5pbmdCbG9jay0+
bGF5ZXIoKS0+aXNQYWdpbmF0ZWQoKTsKKyAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3MTgsNyArMzcyNCw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKIAogICAgICAgICAgICAgLy8g
UmV3aXJlIHRoZSBvbGQgY29udGV4dCB0byBhIG1lbW9yeSBidWZmZXIsIHNvIHRoYXQgd2UgY2Fu
IGNhcHR1cmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIE5PVEU6
IFdlIHNhdmVkIHRoZSBvbGQgY29udGV4dCBpbiB0aGUgInRyYW5zcGFyZW5jeUxheWVyQ29udGV4
dCIgbG9jYWwgdmFyaWFibGUsIHRvIGJlIGFibGUgdG8gc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5
ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IGFuZCBhdm9pZCBkdXBs
aWNhdGluZyAiYmVnaW5GaWx0ZXJFZmZlY3QiIGFmdGVyIGVhY2ggdHJhbnNwYXJlbnkgbGF5ZXIg
Y2FsbC4gQWxzbywgbm90ZSB0aGF0IAorICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNv
bnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFj
aCB0cmFuc3BhcmVuY3kgbGF5ZXIgY2FsbC4gQWxzbywgbm90ZSB0aGF0IAogICAgICAgICAgICAg
Ly8gYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMgd2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmdsZSBsYXp5
IHRyYW5zcGFyZW5jeSBsYXllciwgZXZlbiB0aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNlIGluIHRo
aXMgbWV0aG9kLgogICAgICAgICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYmVnaW5GaWx0
ZXJFZmZlY3QoY29udGV4dCk7CiAKQEAgLTM3MzIsMjggKzM3MzgsMTMgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotI2VuZGlmCi0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxk
IHVzZSBvbmx5IHdoZW4gd2UgbmVlZCB0aGVtLgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7
Ci0gICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsK
LSAgICBMYXlvdXRQb2ludCBwYWludE9mZnNldDsKIAotICAgIGlmIChzaG91bGRQYWludENvbnRl
bnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5lIHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykg
ewotICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQobG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24sIChsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6
IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgbG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cyA/IElnbm9yZU92ZXJm
bG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXApOwotICAgICAgICBjYWxjdWxhdGVSZWN0cyhj
bGlwUmVjdHNDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbGF5ZXJC
b3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsICZvZmZzZXRG
cm9tUm9vdCk7Ci0gICAgICAgIHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2Nh
dGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVs
QWNjdW11bGF0aW9uKTsKKyAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZm
ZWN0KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmls
dGVyIGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFy
ZW5jeSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0
YXJ0cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KKyAgICAgICAgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnRCZWhhdmlvcik7CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIGZvcmNlQmxhY2tUZXh0ID0g
bG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNr
VGV4dDsKLSAgICBib29sIHNlbGVjdGlvbk9ubHkgID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvciAmIFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5OwotICAgIAotICAgIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWw7Ci0gICAgaWYgKGxvY2Fs
UGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZCkKLSAgICAg
ICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yU2tpcFJvb3RCYWNrZ3JvdW5kOwotICAg
IGVsc2UgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1Jvb3RCYWNrZ3Jv
dW5kT25seSkKLSAgICAgICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yUm9vdEJhY2tn
cm91bmRPbmx5OwotICAgIAogICAgIC8vIElmIHRoaXMgbGF5ZXIncyByZW5kZXJlciBpcyBhIGNo
aWxkIG9mIHRoZSBwYWludGluZ1Jvb3QsIHdlIHJlbmRlciB1bmNvbmRpdGlvbmFsbHksIHdoaWNo
CiAgICAgLy8gaXMgZG9uZSBieSBwYXNzaW5nIGEgbmlsIHBhaW50aW5nUm9vdCBkb3duIHRvIG91
ciByZW5kZXJlciAoYXMgaWYgbm8gcGFpbnRpbmdSb290IHdhcyBldmVyIHNldCkuCiAgICAgLy8g
RWxzZSwgb3VyIHJlbmRlcmVyIHRyZWUgbWF5IG9yIG1heSBub3QgY29udGFpbiB0aGUgcGFpbnRp
bmcgcm9vdCwgc28gd2UgcGFzcyB0aGF0IHJvb3QgYWxvbmcKQEAgLTM3NjUsNzkgKzM3NTYsNDMg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIp
CiAgICAgICAgIHBlcmZvcm1PdmVybGFwVGVzdHMoKmxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBU
ZXN0UmVxdWVzdHMsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdGhpcyk7CiAKLSAgICAv
LyBXZSB3YW50IHRvIHBhaW50IG91ciBsYXllciwgYnV0IG9ubHkgaWYgd2UgaW50ZXJzZWN0IHRo
ZSBkYW1hZ2UgcmVjdC4KLSAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRl
bnRzKSkKLSAgICAgICAgc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0
KGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLCAmb2Zmc2V0RnJvbVJvb3QpOworICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBh
aW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0Owor
ICAgIGJvb2wgc2VsZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
ICYgUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHk7CisgICAgCisgICAgUGFpbnRCZWhhdmlvciBw
YWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKKyAgICBpZiAobG9jYWxQYWludEZs
YWdzICYgUGFpbnRMYXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQorICAgICAgICBwYWlu
dEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7CisgICAgZWxzZSBp
ZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5
KQorICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9u
bHk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGFz
U3RhcnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFuc3BhcmVuY3kpIHsKLSAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkg
c3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNoaWxk
IGxheWVyIGxhemlseSBzdGFydHMgb25lIHdpdGggdGhlIHdyb25nIGNvbnRleHQuCi0gICAgICAg
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOworICAgIExheWVyRnJhZ21lbnRzIGxheWVyRnJh
Z21lbnRzOworICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgfHwgc2hvdWxkUGFpbnRPdXRsaW5l
IHx8IGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykgeworICAgICAgICAvLyBDb2xsZWN0IHRo
ZSBmcmFnbWVudHMuIFRoaXMgd2lsbCBjb21wdXRlIHRoZSBjbGlwIHJlY3RhbmdsZXMgYW5kIHBh
aW50IG9mZnNldHMgZm9yIGVhY2ggbGF5ZXIgZnJhZ21lbnQsIGFzIHdlbGwgYXMgd2hldGhlciBv
ciBub3QgdGhlIGNvbnRlbnQgb2YgZWFjaAorICAgICAgICAvLyBmcmFnbWVudCBzaG91bGQgcGFp
bnQuCisgICAgICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uLCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwKKyAgICAgICAgICAgIChsb2NhbFBhaW50RmxhZ3MgJiBQYWlu
dExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5n
Q2xpcFJlY3RzLAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWlu
dGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJm
bG93Q2xpcCwgJm9mZnNldEZyb21Sb290KTsKKyAgICAgICAgdXBkYXRlUGFpbnRpbmdJbmZvRm9y
RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZs
YWdzLCBzaG91bGRQYWludENvbnRlbnQsICZvZmZzZXRGcm9tUm9vdCk7CiAgICAgfQotI2VuZGlm
Ci0KKyAgICAKICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29t
cG9zaXRpbmdCYWNrZ3JvdW5kUGhhc2UpIHsKLSAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVu
dCAmJiAhc2VsZWN0aW9uT25seSkgewotICAgICAgICAgICAgLy8gQmVnaW4gdHJhbnNwYXJlbmN5
IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNvbWV0aGlu
Zy4KLSAgICAgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQotICAgICAgICAgICAgICAgIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFp
bnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAgICAvLyBQYWlu
dCBvdXIgYmFja2dyb3VuZCBmaXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMu
Ci0gICAgICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3Vy
IGJhY2tncm91bmQuCi0gICAgICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5m
by5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBk
YW1hZ2VSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gQmFja2dyb3Vu
ZCBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KLSAgICAg
ICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChk
YW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIHBhaW50QmVoYXZp
b3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwot
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0K
LSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAg
ICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAgICAgICB9CisgICAgICAgIC8vIFBhaW50IG9ubHkg
dGhlIGJhY2tncm91bmRzIGZvciBhbGwgb2YgdGhlIGZyYWdtZW50cyBvZiB0aGUgbGF5ZXIuCisg
ICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgJiYgIXNlbGVjdGlvbk9ubHkpCisgICAgICAg
ICAgICBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQs
IHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBo
YXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWlu
dEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICAgICAgLy8gTm93IHdh
bGsgdGhlIHNvcnRlZCBsaXN0IG9mIGNoaWxkcmVuIHdpdGggbmVnYXRpdmUgei1pbmRpY2VzLgog
ICAgICAgICBwYWludExpc3QobmVnWk9yZGVyTGlzdCgpLCBjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGxvY2FsUGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nRm9yZWdyb3VuZFBoYXNlKSB7Ci0g
ICAgICAgIC8vIE5vdyBlc3RhYmxpc2ggdGhlIGFwcHJvcHJpYXRlIGNsaXAgYW5kIHBhaW50IG91
ciBjaGlsZCBSZW5kZXJPYmplY3RzLgotICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50ICYm
ICFjbGlwUmVjdFRvQXBwbHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBCZWdpbiB0cmFu
c3BhcmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUgdG8gcGFpbnQg
c29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0gICAgICAgICAg
ICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0KLSAgICAgICAgICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXQg
dXAgdGhlIGNsaXAgdXNlZCB3aGVuIHBhaW50aW5nIG91ciBjaGlsZHJlbi4KLSAgICAgICAgICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29u
dGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwUmVjdFRvQXBwbHkucmVjdCgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxl
Y3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JjZUJsYWNrVGV4dCA/IChQYWludEJlaGF2aW9yKVBhaW50QmVo
YXZpb3JGb3JjZUJsYWNrVGV4dCA6IHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRl
cmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+
cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXNlbGVjdGlv
bk9ubHkpIHsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxv
YXQ7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVn
cm91bmQ7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMgPSBs
b2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzOwotICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgICAg
IHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOwotICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQotICAgICAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBjbGlwUmVjdFRvQXBwbHkpOwotICAgICAgICB9CisgICAgICAgIGlm
IChzaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwg
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAg
ICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlciwgc2VsZWN0aW9uT25seSwgZm9yY2VCbGFja1RleHQpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHNob3VsZFBhaW50T3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0bGluZUZvckZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHBhaW50
QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKIAotICAgICAgICBpZiAoc2hvdWxk
UGFpbnRPdXRsaW5lICYmICFvdXRsaW5lUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8v
IFBhaW50IG91ciBvd24gb3V0bGluZQotICAgICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhj
b250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KG91dGxpbmVSZWN0LnJlY3QoKSksIFBhaW50UGhh
c2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFp
bnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsIG91dGxpbmVSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsKLSAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAg
ICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAgICAgfQotICAgIAogICAgICAgICAvLyBQYWludCBh
bnkgY2hpbGQgbGF5ZXJzIHRoYXQgaGF2ZSBvdmVyZmxvdy4KICAgICAgICAgcGFpbnRMaXN0KG1f
bm9ybWFsRmxvd0xpc3QuZ2V0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBh
aW50RmxhZ3MpOwogICAgIApAQCAtMzg0NSwzNCArMzgwMCwyNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgICAgIHBhaW50TGlzdChwb3NaT3JkZXJMaXN0
KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIH0K
IAotICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKLSAgICAgICAgY2xpcFRv
UmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCksIHBpeGVsU25hcHBl
ZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVzdG9yZUNsaXAo
Y29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwot
ICAgIH0KKyAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICBwYWlu
dE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICBpZiAoZmls
dGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkpIHsKICAgICAgICAgLy8gQXBwbHkg
dGhlIGNvcnJlY3QgY2xpcHBpbmcgKGllLiBvdmVyZmxvdzogaGlkZGVuKS4KLSAgICAgICAgY2xp
cFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeUxheWVyQ29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAg
ICAgICAvLyBGSVhNRTogSXQgaXMgaW5jb3JyZWN0IHRvIGp1c3QgY2xpcCB0byB0aGUgZGFtYWdl
UmVjdCBoZXJlIG9uY2UgbXVsdGlwbGUgZnJhZ21lbnRzIGFyZSBpbnZvbHZlZC4KKyAgICAgICAg
Q2xpcFJlY3QgYmFja2dyb3VuZFJlY3QgPSBsYXllckZyYWdtZW50cy5pc0VtcHR5KCkgPyBDbGlw
UmVjdCgpIDogbGF5ZXJGcmFnbWVudHNbMF0uYmFja2dyb3VuZFJlY3Q7CisgICAgICAgIGNsaXBU
b1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CiAg
ICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLmFwcGx5RmlsdGVyRWZmZWN0KCk7Ci0gICAg
ICAgIHJlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICByZXN0b3JlQ2xpcCh0cmFu
c3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBi
YWNrZ3JvdW5kUmVjdCk7CiAgICAgfQogI2VuZGlmCi0KKyAgICAKICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB3ZSBub3cgdXNlIHRoZSBvcmlnaW5hbCB0cmFuc3BhcmVuY3kgY29udGV4dC4KICAgICBB
U1NFUlQodHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0ID09IGNvbnRleHQpOwogCiAgICAgaWYgKChs
b2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ01hc2tQaGFzZSkg
JiYgc2hvdWxkUGFpbnRDb250ZW50ICYmIHJlbmRlcmVyKCktPmhhc01hc2soKSAmJiAhc2VsZWN0
aW9uT25seSkgewotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQotICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0LCBEb05v
dEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3aWxsIGhhbmRs
ZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAKLSAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2su
Ci0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVj
dChkYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9ybWFs
LCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAg
ICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQotICAgICAg
ICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGRhbWFnZVJlY3QpOworICAgICAgICAvLyBQYWludCB0aGUgbWFzayBmb3IgdGhlIGZyYWdt
ZW50cy4KKyAgICAgICAgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIH0K
IAogICAgIC8vIEVuZCBvdXIgdHJhbnNwYXJlbmN5IGxheWVyCkBAIC0zOTA0LDEzICszODUxLDE3
MiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExpc3QoVmVjdG9yPFJlbmRlCiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlbmRlckxh
eWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgIGlmICghY2hpbGRMYXllci0+
aXNQYWdpbmF0ZWQoKSB8fCB1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAgICAgaWYgKCFj
aGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgY2hpbGRMYXllci0+cGFpbnRM
YXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwgY29udGV4dCwg
cGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6
OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCwKKyAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIFNob3VsZFJlc3Bl
Y3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9m
ZnNldEZyb21Sb290KQoreworICAgIC8vIFRPRE86IENvbGxlY3QgbXVsdGlwbGUgZnJhZ21lbnRz
IGZvciBsYXllcnMgd2l0aCBhbiBlbmNsb3NpbmcgcGFnaW5hdGlvbiBsYXllci4KKyAgICAvLyBG
b3IgdW5wYWdpbmF0ZWQgbGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9uZSBmcmFnbWVudC4KKyAgICBM
YXllckZyYWdtZW50IGZyYWdtZW50OworICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29u
dGV4dChyb290TGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUsIHJlc3BlY3RPdmVyZmxvd0NsaXApOworICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBS
ZWN0c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJh
Y2tncm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21lbnQub3V0bGluZVJl
Y3QsIG9mZnNldEZyb21Sb290KTsKKyAgICBmcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKK30K
Kwordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVy
RnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50
aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIGxvY2FsUGFpbnRGbGFncywgYm9vbCBzaG91bGRQYWlu
dENvbnRlbnQsCisgICAgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICBmcmFn
bWVudC5wYWludE9mZnNldCA9IHRvUG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24o
KSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3Vt
dWxhdGlvbik7CisgICAgICAgIGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCA9IHNob3VsZFBh
aW50Q29udGVudDsKKyAgICAgICAgaWYgKHRoaXMgIT0gbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyIHx8ICEobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250
ZW50cykpCisgICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJz
ZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRS
ZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCk7
CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEJhY2tncm91bmRGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAg
IGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVU
cmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywg
UGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdS
b290Rm9yUmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdt
ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5
ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmICghZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250
ZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gQmVnaW4gdHJhbnNwYXJl
bmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNvbWV0
aGluZy4KKyAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCisgICAgICAgICAgICBiZWdpblRy
YW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50QmVoYXZpb3IpOworICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8u
Y2xpcFRvRGlydHlSZWN0KSB7CisgICAgICAgICAgICAvLyBQYWludCBvdXIgYmFja2dyb3VuZCBm
aXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMuCisgICAgICAgICAgICAvLyBF
c3RhYmxpc2ggdGhlIGNsaXAgdXNlZCB0byBwYWludCBvdXIgYmFja2dyb3VuZC4KKyAgICAgICAg
ICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QsIERv
Tm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOyAvLyBCYWNrZ3JvdW5kIHBhaW50aW5nIHdp
bGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3
ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVh
ZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50SW5mbyBwYWludElu
Zm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5y
ZWN0KCkpLCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKKyAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNldCk7CisKKyAgICAg
ICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAgIHJl
c3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21l
bnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJl
bmN5TGF5ZXJDb250ZXh0LAorICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50
RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiBsb2NhbFBhaW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJl
bmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGJvb2wgc2VsZWN0aW9uT25seSwg
Ym9vbCBmb3JjZUJsYWNrVGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgaWYgd2Ug
aGF2ZSBzb21ldGhpbmcgdG8gcGFpbnQuCisgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0
KGkpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCAmJiAhZnJh
Z21lbnQuZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBQYWludEJlaGF2aW9yIGxvY2FsUGFpbnRC
ZWhhdmlvciA9IGZvcmNlQmxhY2tUZXh0ID8gKFBhaW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZv
cmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvcjsKKworICAgIC8vIE9wdGltaXplIGNsaXBwaW5n
IGZvciB0aGUgc2luZ2xlIGZyYWdtZW50IGNhc2UuCisgICAgYm9vbCBzaG91bGRDbGlwID0gbG9j
YWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ICYmIGxheWVyRnJhZ21lbnRzLnNpemUoKSA9
PSAxICYmIGxheWVyRnJhZ21lbnRzWzBdLnNob3VsZFBhaW50Q29udGVudCAmJiAhbGF5ZXJGcmFn
bWVudHNbMF0uZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpOworICAgIGlmIChzaG91bGRDbGlwKQor
ICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVyRnJhZ21lbnRzWzBdLmZvcmVn
cm91bmRSZWN0KTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIGxvb3AgdGhyb3VnaCBldmVyeSBm
cmFnbWVudCBtdWx0aXBsZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0byByZXBhaW50IGluIGVhY2gg
c3BlY2lmaWMgcGhhc2UgaW4gb3JkZXIgZm9yCisgICAgLy8gaW50ZXJsZWF2aW5nIG9mIHRoZSBm
cmFnbWVudHMgdG8gd29yayBwcm9wZXJseS4KKyAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVu
dHNXaXRoUGhhc2Uoc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBo
YXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLCBsYXllckZyYWdtZW50cywKKyAgICAgICAgY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOworICAgIAorICAgIGlmICghc2VsZWN0aW9uT25seSkgeworICAgICAgICBwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZsb2F0LCBsYXllckZy
YWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwg
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZvcmVncm91bmQsIGxheWVyRnJhZ21lbnRzLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlcik7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFz
ZShQYWludFBoYXNlQ2hpbGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
KTsKKyAgICB9CisgICAgCisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckZyYWdtZW50
c1swXS5mb3JlZ3JvdW5kUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdy
b3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBoYXNlLCBjb25zdCBMYXllckZy
YWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3Ig
cGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sK
KyAgICBib29sIHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3Qg
JiYgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpID4gMTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBm
cmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNo
b3VsZFBhaW50Q29udGVudCB8fCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQor
ICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5k
UmVjdCk7CisgICAgCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxT
bmFwcGVkSW50UmVjdChmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5yZWN0KCkpLCBwaGFzZSwgcGFp
bnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJl
Z2lvbik7CisgICAgICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAg
ICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8u
b3ZlcmxhcFRlc3RSZXF1ZXN0czsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCBmcmFnbWVudC5wYWludE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkQ2xp
cCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lk
IFJlbmRlckxheWVyOjpwYWludE91dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVu
dHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAgICBQYWludEJlaGF2aW9yIHBhaW50
QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAg
ICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAg
ICAgIGlmIChmcmFnbWVudC5vdXRsaW5lUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAKKyAgICAgICAgLy8gUGFpbnQgb3VyIG93biBvdXRsaW5lCisgICAgICAgIFBh
aW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5v
dXRsaW5lUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlU2VsZk91dGxpbmUsIHBhaW50QmVoYXZpb3Is
IHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOworICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50Lm91dGxpbmVSZWN0LCBEb05v
dEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQo
cGFpbnRJbmZvLCBmcmFnbWVudC5wYWludE9mZnNldCk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5vdXRsaW5l
UmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludE1hc2tGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAg
ICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5
ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAo
IWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCisgICAgICAgICAg
ICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBEb05v
dEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3aWxsIGhhbmRs
ZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAgICAKKyAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2su
CisgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgY29sbGVjdCB0aGUgcmVnaW9u
IGZyb20gdGhlIGZyYWdtZW50IGl0c2VsZiBpbnN0ZWFkIG9mIGp1c3QgZnJvbSB0aGUgcGFpbnQg
aW5mby4KKyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQ
YWludEJlaGF2aW9yTm9ybWFsLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGlu
Z0luZm8ucmVnaW9uKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBmcmFn
bWVudC5wYWludE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0lu
Zm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsK
KyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZv
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0
KGkpOworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91
bmRSZWN0KTsKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJ
bnRQb2ludChmcmFnbWVudC5wYWludE9mZnNldCksIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21l
bnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRlZENo
aWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdz
IHBhaW50RmxhZ3MpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJy
ZWFraW5nIHVwIG91ciBjaGlsZCBsYXllciBpbnRvIHN0cmlwcy4KQEAgLTQyNTQsMTYgKzQzNjAs
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgICAgIC8v
IFRoaXMgbGF5ZXIgaXMgZmxhdHRlbmluZywgc28gZmxhdHRlbiB0aGUgc3RhdGUgcGFzc2VkIHRv
IGRlc2NlbmRhbnRzLgogICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLT5mbGF0dGVuKCk7CiAg
ICAgfQotICAgIAotICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQgdXNl
LgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7Ci0gICAgQ2xpcFJlY3QgYmdSZWN0OwotICAg
IENsaXBSZWN0IGZnUmVjdDsKLSAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsKIAotICAgIENsaXBS
ZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5y
ZWdpb24oKSwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNp
emUpOwotICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGhpdFRlc3RSZWN0LCBs
YXllckJvdW5kcywgYmdSZWN0LCBmZ1JlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAKICAgICAvLyBU
aGUgZm9sbG93aW5nIGFyZSB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSB6LWRlcHRoIG9m
IHRoZSBoaXQgcG9pbnQgb2YgM2QtdHJhbnNmb3JtZWQKICAgICAvLyBkZXNjZW5kYW50cy4KICAg
ICBkb3VibGUgbG9jYWxaT2Zmc2V0ID0gLW51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5
KCk7CkBAIC00MzA4LDE3ICs0NDA1LDE4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFIKICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRMYXllcjsKICAgICB9CiAK
LSAgICAvLyBDaGVjayBmb3IgdGhlIHJlc2l6ZXIKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgcmVz
aXplckNvcm5lclJlY3QodGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChsYXllckJvdW5kcykpLmNv
bnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGhpdFRlc3RMb2NhdGlvbi5wb2ludCgp
KTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLy8gTmV4dCB3ZSB3YW50IHRv
IHNlZSBpZiB0aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBv
ZiB0aGUgbGF5ZXIuCi0gICAgaWYgKGZnUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikg
JiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgICAgIAorICAgIC8vIENvbGxlY3QgdGhl
IGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBmb3IgZWFj
aCBsYXllciBmcmFnbWVudC4KKyAgICBMYXllckZyYWdtZW50cyBsYXllckZyYWdtZW50czsKKyAg
ICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2Nh
dGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cyk7CisKKyAg
ICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBj
aGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4gQ2hlY2sKKyAgICAvLyBldmVyeSBmcmFn
bWVudCBpbiByZXZlcnNlIG9yZGVyLgorICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVyKCkpIHsK
ICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBvcmFyeSBIaXRUZXN0UmVzdWx0LCBiZWNh
dXNlIHdlIG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jlc3VsdCcgaWYgd2Uga25vdyB3ZSdyZSBm
cm9udG1vc3QuCiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVz
dExvY2F0aW9uKCkpOwotICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBS
ZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3REZXNjZW5kYW50cykK
KyAgICAgICAgYm9vbCBpbnNpZGVGcmFnbWVudEZvcmVncm91bmRSZWN0ID0gZmFsc2U7CisgICAg
ICAgIGlmIChoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJlcXVl
c3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdERlc2NlbmRhbnRzLCBpbnNp
ZGVGcmFnbWVudEZvcmVncm91bmRSZWN0KQogICAgICAgICAgICAgJiYgaXNIaXRDYW5kaWRhdGUo
dGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1T
dGF0ZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkp
CiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKQEAgLTQzMjgsMTMg
KzQ0MjYsMTMgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgLy8gRm9yZWdyb3VuZCBjYW4g
ZGVwdGgtc29ydCB3aXRoIGRlc2NlbmRhbnQgbGF5ZXJzLCBzbyBrZWVwIHRoaXMgYXMgYSBjYW5k
aWRhdGUuCiAgICAgICAgICAgICBjYW5kaWRhdGVMYXllciA9IHRoaXM7Ci0gICAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICB9IGVsc2UgaWYgKGluc2lk
ZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICAvLyBOb3cg
Y2hlY2sgb3VyIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCiAgICAgaGl0TGF5ZXIgPSBoaXRU
ZXN0TGlzdChuZWdaT3JkZXJMaXN0KCksIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRU
ZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50
c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0
RGVzY2VuZGFudHMpOworICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0
Rm9yRGVzY2VuZGFudHNQdHIsIHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0
KCksIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKICAgICBpZiAoaGl0TGF5ZXIpIHsKICAgICAgICAg
aWYgKCFkZXB0aFNvcnREZXNjZW5kYW50cykKICAgICAgICAgICAgIHJldHVybiBoaXRMYXllcjsK
QEAgLTQzNDUsOSArNDQ0MywxMCBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
YXllcihSCiAgICAgaWYgKGNhbmRpZGF0ZUxheWVyKQogICAgICAgICByZXR1cm4gY2FuZGlkYXRl
TGF5ZXI7CiAKLSAgICBpZiAoYmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiBp
c1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICBpZiAoaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7
CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9u
KCkpOwotICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxh
eWVyQm91bmRzLCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RTZWxmKQorICAgICAgICBib29sIGlu
c2lkZUZyYWdtZW50QmFja2dyb3VuZFJlY3QgPSBmYWxzZTsKKyAgICAgICAgaWYgKGhpdFRlc3RD
b250ZW50c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgcmVxdWVzdCwgdGVtcFJlc3VsdCwg
aGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0U2VsZiwgaW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVj
dCkKICAgICAgICAgICAgICYmIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9y
Q29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQodGVtcFJlc3VsdCk7CkBAIC00MzU1LDEzICs0NDU0LDMyIEBAIFJlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0
ZW1wUmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgaWYgKGluc2lkZUZyYWdtZW50
QmFja2dyb3VuZFJlY3QgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAor
Ym9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKKyAgICBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRl
c3RMb2NhdGlvbiwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyLCBib29sJiBpbnNpZGVDbGlw
UmVjdCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxh
eWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoKGhpdFRlc3RGaWx0ZXIgPT0gSGl0VGVz
dFNlbGYgJiYgIWZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0
aW9uKSkKKyAgICAgICAgICAgIHx8IChoaXRUZXN0RmlsdGVyID09IEhpdFRlc3REZXNjZW5kYW50
cyAmJiAhZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24p
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnNpZGVDbGlwUmVjdCA9IHRydWU7
CisgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBmcmFnbWVudC5s
YXllckJvdW5kcywgaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0RmlsdGVyKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wg
UmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RGaWx0ZXIgaGl0
VGVzdEZpbHRlcikgY29uc3QKIHsKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8
IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKQEAgLTQ0MDksNyArNDUyNyw3IEBA
IFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmUKICAgICAgICAgUmVuZGVy
TGF5ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGhp
dExheWVyID0gMDsKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRU
ZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpICYm
ICF1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzUGFn
aW5hdGVkKCkpCiAgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdpbmF0ZWRDaGlsZExh
eWVyKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJl
Y3QsIGhpdFRlc3RMb2NhdGlvbiwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50
cyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRMYXllci0+aGl0
VGVzdExheWVyKHJvb3RMYXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJl
Y3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVz
Y2VuZGFudHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJl
dmlzaW9uIDE0Mzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDIyIEBAIHB1YmxpYzoKICNlbmRpZgogfTsK
IAorc3RydWN0IExheWVyRnJhZ21lbnQgeworcHVibGljOgorICAgIExheWVyRnJhZ21lbnQoKQor
ICAgICAgICA6IHNob3VsZFBhaW50Q29udGVudChmYWxzZSkKKyAgICB7IH0KKworICAgIGJvb2wg
c2hvdWxkUGFpbnRDb250ZW50OworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CisgICAgQ2xp
cFJlY3QgYmFja2dyb3VuZFJlY3Q7CisgICAgQ2xpcFJlY3QgZm9yZWdyb3VuZFJlY3Q7CisgICAg
Q2xpcFJlY3Qgb3V0bGluZVJlY3Q7CisgICAgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQ7Cit9Owor
Cit0eXBlZGVmIFZlY3RvcjxMYXllckZyYWdtZW50PiBMYXllckZyYWdtZW50czsKKwogY2xhc3Mg
UmVuZGVyTGF5ZXIgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgewogcHVibGljOgogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwpAQCAtNDE4LDYgKzQzNCw3IEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIAogICAgIGJvb2wgaXNQYWdpbmF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFnaW5h
dGVkOyB9CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOyB9CiAKICAgICB2b2lkIHVwZGF0
ZVRyYW5zZm9ybSgpOwogICAgIApAQCAtODg5LDYgKzkwNiwxOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFpbnRMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRQ
YWdpbmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9p
ZCBwYWludENoaWxkTGF5ZXJJbnRvQ29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3Ms
IGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNpemVfdCBjb2x1bW5J
bmRleCk7CisgICAgCisgICAgdm9pZCBjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwg
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiwgY29uc3QgTGF5b3V0
UmVjdCYgZGlydHlSZWN0LAorICAgICAgICBDbGlwUmVjdHNUeXBlLCBTaG91bGRSZXNwZWN0T3Zl
cmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNl
dEZyb21Sb290ID0gMCk7CisgICAgdm9pZCB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMo
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFn
cywgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9t
Um9vdCk7CisgICAgdm9pZCBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5j
eUxheWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFp
bnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
KTsKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5
ZXJDb250ZXh0LAorICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERp
cnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYs
IFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsCisg
ICAgICAgIGJvb2wgc2VsZWN0aW9uT25seSwgYm9vbCBmb3JjZUJsYWNrVGV4dCk7CisgICAgdm9p
ZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZSwgY29uc3Qg
TGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIp
OworICAgIHZvaWQgcGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRz
JiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2
aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBh
aW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CisgICAgdm9pZCBwYWlu
dE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOwogCiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXllcihSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLApAQCAtOTEwLDYgKzk0MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlKiBjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBo
aXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRl
c3RGaWx0ZXIpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xp
cFJlY3QpIGNvbnN0OwogCiAgICAgYm9vbCBsaXN0Q29udGVudHNPcGFxdWVJblJlY3QoY29uc3Qg
VmVjdG9yPFJlbmRlckxheWVyKj4qLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKQEAgLTEx
ODQsNiArMTIxNSw5IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJTY3JvbGxiYXJQYXJ0KiBtX3Nj
cm9sbENvcm5lcjsKICAgICBSZW5kZXJTY3JvbGxiYXJQYXJ0KiBtX3Jlc2l6ZXI7CiAKKyAgICAv
LyBQb2ludGVyIHRvIHRoZSBlbmNsb3NpbmcgUmVuZGVyTGF5ZXIgdGhhdCBjYXVzZWQgdXMgdG8g
YmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdlIGFyZSBub3QgcGFnaW5hdGVkLgorICAgIFJlbmRl
ckxheWVyKiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKKwogcHJpdmF0ZToKICAgICBJbnRS
ZWN0IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOwogCg==
</data>
<flag name="commit-queue"
          id="210508"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189945</attachid>
            <date>2013-02-23 16:39:15 -0800</date>
            <delta_ts>2013-02-25 22:28:42 -0800</delta_ts>
            <desc>Put the resize code back in, but fix the obvious clipping bug it had.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>47921</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQzODUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA1LDggKzQwNiwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDUwLDcgKzQ1Myw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIzLDYgKzkyNiw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1f
aXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7
CisKICAgICBpZiAoaXNDb21wb3NpdGVkKCkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47
IC8vIEZJWE1FOiBXZSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGlu
ZyBsYXllcnMgc29tZWRheS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUg
UmVuZGVyVmlldyBjYW4ndCBiZSBwYWdpbmF0ZWQuICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwg
bW92ZSB0byBhIG1vZGVsIHdoZXJlIGl0IGlzIHRob3VnaC4KQEAgLTkzMiwxNiArOTM3LDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24oKQogICAgIC8vIHJlY3VycmluZyBp
bnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMg
Zm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9v
dHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3Rl
YWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8g
Z2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAg
d2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2Vu
ZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3
ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2ls
eS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAg
ICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7CiAgICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkK
LSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQoKTsKKyAg
ICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2lzUGFnaW5h
dGVkID0gcGFyZW50KCktPnJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtOTU2LDcgKzk2Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24o
KQogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayAmJiBjb250YWluaW5nQmxvY2sgIT0gdmll
dzsKICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5oYXNMYXll
cigpKSB7Ci0gICAgICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGNvbnRhaW5pbmdCbG9jay0+
bGF5ZXIoKS0+aXNQYWdpbmF0ZWQoKTsKKyAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4ODMsNyArMTg4OSw3IEBAIHN0
YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyTGF5ZXIqIGFjY3VtdWwKIAogICAgICAgICAvLyBXZSBz
aG91bGQgbm90IHJlYWNoIFJlbmRlclZpZXcgbGF5ZXIgcGFzdCB0aGUgUmVuZGVyRmxvd1RocmVh
ZCBsYXllciBmb3IgYW55CiAgICAgICAgIC8vIGNoaWxkcmVuIG9mIHRoZSBSZW5kZXJGbG93VGhy
ZWFkLgotICAgICAgICBpZiAocmVuZGVyZXItPmluUmVuZGVyRmxvd1RocmVhZCgpICYmICFyZW5k
ZXJlci0+aXNSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgIGlmIChyZW5kZXJlci0+aW5SZW5k
ZXJGbG93VGhyZWFkKCkgJiYgIWxheWVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkK
ICAgICAgICAgICAgIEFTU0VSVChwYXJlbnRMYXllciAhPSByZW5kZXJlci0+dmlldygpLT5sYXll
cigpKTsKIAogICAgICAgICBpZiAoZm91bmRBbmNlc3RvckZpcnN0KSB7CkBAIC0zNzE4LDcgKzM3
MjQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAKICAgICAg
ICAgICAgIC8vIFJld2lyZSB0aGUgb2xkIGNvbnRleHQgdG8gYSBtZW1vcnkgYnVmZmVyLCBzbyB0
aGF0IHdlIGNhbiBjYXB0dXJlIHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCiAgICAgICAgICAg
ICAvLyBOT1RFOiBXZSBzYXZlZCB0aGUgb2xkIGNvbnRleHQgaW4gdGhlICJ0cmFuc3BhcmVuY3lM
YXllckNvbnRleHQiIGxvY2FsIHZhcmlhYmxlLCB0byBiZSBhYmxlIHRvIHN0YXJ0IGEgdHJhbnNw
YXJlbmN5IGxheWVyCi0gICAgICAgICAgICAvLyBvbiB0aGUgb3JpZ2luYWwgY29udGV4dCBhbmQg
YXZvaWQgZHVwbGljYXRpbmcgImJlZ2luRmlsdGVyRWZmZWN0IiBhZnRlciBlYWNoIHRyYW5zcGFy
ZW55IGxheWVyIGNhbGwuIEFsc28sIG5vdGUgdGhhdCAKKyAgICAgICAgICAgIC8vIG9uIHRoZSBv
cmlnaW5hbCBjb250ZXh0IGFuZCBhdm9pZCBkdXBsaWNhdGluZyAiYmVnaW5GaWx0ZXJFZmZlY3Qi
IGFmdGVyIGVhY2ggdHJhbnNwYXJlbmN5IGxheWVyIGNhbGwuIEFsc28sIG5vdGUgdGhhdCAKICAg
ICAgICAgICAgIC8vIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzIHdpbGwgb25seSBjcmVhdGUgYSBz
aW5nbGUgbGF6eSB0cmFuc3BhcmVuY3kgbGF5ZXIsIGV2ZW4gdGhvdWdoIGl0IGlzIGNhbGxlZCB0
d2ljZSBpbiB0aGlzIG1ldGhvZC4KICAgICAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVy
LmJlZ2luRmlsdGVyRWZmZWN0KGNvbnRleHQpOwogCkBAIC0zNzMyLDI4ICszNzM4LDEzIEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KLSNlbmRpZgotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3Rz
IHdlIHNob3VsZCB1c2Ugb25seSB3aGVuIHdlIG5lZWQgdGhlbS4KLSAgICBMYXlvdXRSZWN0IGxh
eWVyQm91bmRzOwotICAgIENsaXBSZWN0IGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0
bGluZVJlY3Q7Ci0gICAgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQ7CiAKLSAgICBpZiAoc2hvdWxk
UGFpbnRDb250ZW50IHx8IHNob3VsZFBhaW50T3V0bGluZSB8fCBpc1BhaW50aW5nT3ZlcmxheVNj
cm9sbGJhcnMpIHsKLSAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uLCAobG9j
YWxQYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlD
bGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0cywgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUs
IGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMgPyBJ
Z25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwKTsKLSAgICAgICAgY2FsY3Vs
YXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0
LCAmb2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBwYWludE9mZnNldCA9IHRvUG9pbnQobGF5ZXJC
b3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5m
by5zdWJQaXhlbEFjY3VtdWxhdGlvbik7CisgICAgaWYgKGZpbHRlclBhaW50ZXIuaGFzU3RhcnRl
ZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFuc3BhcmVuY3kpIHsKKyAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkgc3RhcnQg
YSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNoaWxkIGxheWVy
IGxhemlseSBzdGFydHMgb25lIHdpdGggdGhlIHdyb25nIGNvbnRleHQuCisgICAgICAgIGJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRp
bmdJbmZvLnBhaW50QmVoYXZpb3IpOwogICAgIH0KKyNlbmRpZgogCi0gICAgYm9vbCBmb3JjZUJs
YWNrVGV4dCA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9y
Rm9yY2VCbGFja1RleHQ7Ci0gICAgYm9vbCBzZWxlY3Rpb25Pbmx5ICA9IGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yU2VsZWN0aW9uT25seTsKLSAgICAKLSAg
ICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IgPSBQYWludEJlaGF2aW9yTm9ybWFsOwotICAg
IGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdTa2lwUm9vdEJhY2tncm91
bmQpCi0gICAgICAgIHBhaW50QmVoYXZpb3IgfD0gUGFpbnRCZWhhdmlvclNraXBSb290QmFja2dy
b3VuZDsKLSAgICBlbHNlIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdS
b290QmFja2dyb3VuZE9ubHkpCi0gICAgICAgIHBhaW50QmVoYXZpb3IgfD0gUGFpbnRCZWhhdmlv
clJvb3RCYWNrZ3JvdW5kT25seTsKLSAgICAKICAgICAvLyBJZiB0aGlzIGxheWVyJ3MgcmVuZGVy
ZXIgaXMgYSBjaGlsZCBvZiB0aGUgcGFpbnRpbmdSb290LCB3ZSByZW5kZXIgdW5jb25kaXRpb25h
bGx5LCB3aGljaAogICAgIC8vIGlzIGRvbmUgYnkgcGFzc2luZyBhIG5pbCBwYWludGluZ1Jvb3Qg
ZG93biB0byBvdXIgcmVuZGVyZXIgKGFzIGlmIG5vIHBhaW50aW5nUm9vdCB3YXMgZXZlciBzZXQp
LgogICAgIC8vIEVsc2UsIG91ciByZW5kZXJlciB0cmVlIG1heSBvciBtYXkgbm90IGNvbnRhaW4g
dGhlIHBhaW50aW5nIHJvb3QsIHNvIHdlIHBhc3MgdGhhdCByb290IGFsb25nCkBAIC0zNzY1LDc5
ICszNzU2LDQzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKICAg
ICBpZiAobG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyAmJiBpc1NlbGZQYWlu
dGluZ0xheWVyKQogICAgICAgICBwZXJmb3JtT3ZlcmxhcFRlc3RzKCpsb2NhbFBhaW50aW5nSW5m
by5vdmVybGFwVGVzdFJlcXVlc3RzLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRoaXMp
OwogCi0gICAgLy8gV2Ugd2FudCB0byBwYWludCBvdXIgbGF5ZXIsIGJ1dCBvbmx5IGlmIHdlIGlu
dGVyc2VjdCB0aGUgZGFtYWdlIHJlY3QuCi0gICAgaWYgKHRoaXMgIT0gbG9jYWxQYWludGluZ0lu
Zm8ucm9vdExheWVyIHx8ICEobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3Zl
cmZsb3dDb250ZW50cykpCi0gICAgICAgIHNob3VsZFBhaW50Q29udGVudCAmPSBpbnRlcnNlY3Rz
RGFtYWdlUmVjdChsYXllckJvdW5kcywgZGFtYWdlUmVjdC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJ
bmZvLnJvb3RMYXllciwgJm9mZnNldEZyb21Sb290KTsKKyAgICBib29sIGZvcmNlQmxhY2tUZXh0
ID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JGb3JjZUJs
YWNrVGV4dDsKKyAgICBib29sIHNlbGVjdGlvbk9ubHkgID0gbG9jYWxQYWludGluZ0luZm8ucGFp
bnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5OworICAgIAorICAgIFBhaW50
QmVoYXZpb3IgcGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWw7CisgICAgaWYgKGxv
Y2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZCkKKyAg
ICAgICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yU2tpcFJvb3RCYWNrZ3JvdW5kOwor
ICAgIGVsc2UgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ1Jvb3RCYWNr
Z3JvdW5kT25seSkKKyAgICAgICAgcGFpbnRCZWhhdmlvciB8PSBQYWludEJlaGF2aW9yUm9vdEJh
Y2tncm91bmRPbmx5OwogCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGlmIChmaWx0ZXJQ
YWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSAmJiBoYXZlVHJhbnNwYXJlbmN5KSB7Ci0g
ICAgICAgIC8vIElmIHdlIGhhdmUgYSBmaWx0ZXIgYW5kIHRyYW5zcGFyZW5jeSwgd2UgaGF2ZSB0
byBlYWdlcmx5IHN0YXJ0IGEgdHJhbnNwYXJlbmN5IGxheWVyIGhlcmUsIHJhdGhlciB0aGFuIHJp
c2sgYSBjaGlsZCBsYXllciBsYXppbHkgc3RhcnRzIG9uZSB3aXRoIHRoZSB3cm9uZyBjb250ZXh0
LgotICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICBMYXllckZyYWdtZW50
cyBsYXllckZyYWdtZW50czsKKyAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50IHx8IHNob3VsZFBh
aW50T3V0bGluZSB8fCBpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKKyAgICAgICAgLy8g
Q29sbGVjdCB0aGUgZnJhZ21lbnRzLiBUaGlzIHdpbGwgY29tcHV0ZSB0aGUgY2xpcCByZWN0YW5n
bGVzIGFuZCBwYWludCBvZmZzZXRzIGZvciBlYWNoIGxheWVyIGZyYWdtZW50LCBhcyB3ZWxsIGFz
IHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50IG9mIGVhY2gKKyAgICAgICAgLy8gZnJhZ21lbnQg
c2hvdWxkIHBhaW50LgorICAgICAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbiwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsCisgICAgICAgICAgICAobG9jYWxQYWludEZs
YWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMg
OiBQYWludGluZ0NsaXBSZWN0cywKKyAgICAgICAgICAgIChsb2NhbFBhaW50RmxhZ3MgJiBQYWlu
dExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJl
c3BlY3RPdmVyZmxvd0NsaXAsICZvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIHVwZGF0ZVBhaW50
aW5nSW5mb0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8sIGxv
Y2FsUGFpbnRGbGFncywgc2hvdWxkUGFpbnRDb250ZW50LCAmb2Zmc2V0RnJvbVJvb3QpOwogICAg
IH0KLSNlbmRpZgotCisgICAgCiAgICAgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQ
YWludGluZ0NvbXBvc2l0aW5nQmFja2dyb3VuZFBoYXNlKSB7Ci0gICAgICAgIGlmIChzaG91bGRQ
YWludENvbnRlbnQgJiYgIXNlbGVjdGlvbk9ubHkpIHsKLSAgICAgICAgICAgIC8vIEJlZ2luIHRy
YW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtub3cgd2UgaGF2ZSB0byBwYWlu
dCBzb21ldGhpbmcuCi0gICAgICAgICAgICBpZiAoaGF2ZVRyYW5zcGFyZW5jeSkKLSAgICAgICAg
ICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQs
IGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0
LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKLSAgICAgICAgCi0gICAgICAgICAg
ICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gUGFpbnQgb3VyIGJhY2tncm91bmQgZmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkgY2hp
bGQgbGF5ZXJzLgotICAgICAgICAgICAgICAgIC8vIEVzdGFibGlzaCB0aGUgY2xpcCB1c2VkIHRv
IHBhaW50IG91ciBiYWNrZ3JvdW5kLgotICAgICAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgZGFtYWdlUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8v
IEJhY2tncm91bmQgcGFpbnRpbmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gUGFpbnQgdGhlIGJhY2tncm91
bmQuCi0gICAgICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBl
ZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBw
YWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8u
cmVnaW9uKTsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOwotCi0gICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlS
ZWN0KQotICAgICAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAgICAgICAgfQorICAgICAgICAvLyBQ
YWludCBvbmx5IHRoZSBiYWNrZ3JvdW5kcyBmb3IgYWxsIG9mIHRoZSBmcmFnbWVudHMgb2YgdGhl
IGxheWVyLgorICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50ICYmICFzZWxlY3Rpb25Pbmx5
KQorICAgICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRz
LCBjb250ZXh0LCB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgaGF2ZVRyYW5zcGFyZW5jeSwKKyAgICAgICAgICAgICAgICBsb2NhbFBhaW50aW5n
SW5mbywgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogCiAgICAgICAg
IC8vIE5vdyB3YWxrIHRoZSBzb3J0ZWQgbGlzdCBvZiBjaGlsZHJlbiB3aXRoIG5lZ2F0aXZlIHot
aW5kaWNlcy4KICAgICAgICAgcGFpbnRMaXN0KG5lZ1pPcmRlckxpc3QoKSwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgfQogICAgIAogICAgIGlmIChs
b2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0ZvcmVncm91bmRQ
aGFzZSkgewotICAgICAgICAvLyBOb3cgZXN0YWJsaXNoIHRoZSBhcHByb3ByaWF0ZSBjbGlwIGFu
ZCBwYWludCBvdXIgY2hpbGQgUmVuZGVyT2JqZWN0cy4KLSAgICAgICAgaWYgKHNob3VsZFBhaW50
Q29udGVudCAmJiAhY2xpcFJlY3RUb0FwcGx5LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8g
QmVnaW4gdHJhbnNwYXJlbmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZl
IHRvIHBhaW50IHNvbWV0aGluZy4KLSAgICAgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQot
ICAgICAgICAgICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVy
Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotCi0gICAgICAgICAg
ICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gU2V0IHVwIHRoZSBjbGlwIHVzZWQgd2hlbiBwYWludGluZyBvdXIgY2hpbGRyZW4uCi0g
ICAgICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBjbGlwUmVjdFRvQXBwbHkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBQYWludEluZm8gcGFp
bnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoY2xpcFJlY3RUb0FwcGx5LnJlY3Qo
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9ubHkgPyBQYWlu
dFBoYXNlU2VsZWN0aW9uIDogUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VCbGFja1RleHQgPyAoUGFpbnRCZWhhdmlv
cilQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQgOiBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jv
b3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAgICAgICAgICAgIHJl
bmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgaWYg
KCFzZWxlY3Rpb25Pbmx5KSB7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFp
bnRQaGFzZUZsb2F0OwotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5m
bywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50
UGhhc2VGb3JlZ3JvdW5kOwotICAgICAgICAgICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJl
cXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0czsKLSAgICAgICAg
ICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAg
ICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lczsKLSAg
ICAgICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBU
b0RpcnR5UmVjdCkKLSAgICAgICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgY2xpcFJlY3RUb0FwcGx5KTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50KQorICAgICAgICAgICAgcGFpbnRGb3JlZ3Jv
dW5kRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCB0cmFuc3BhcmVuY3lMYXll
ckNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgaGF2ZVRyYW5zcGFyZW5jeSwK
KyAgICAgICAgICAgICAgICBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRCZWhhdmlvciwgcGFpbnRp
bmdSb290Rm9yUmVuZGVyZXIsIHNlbGVjdGlvbk9ubHksIGZvcmNlQmxhY2tUZXh0KTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzaG91bGRQYWludE91dGxpbmUpCisgICAgICAgICAgICBwYWludE91
dGxpbmVGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKLSAgICAgICAg
aWYgKHNob3VsZFBhaW50T3V0bGluZSAmJiAhb3V0bGluZVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUKLSAgICAgICAgICAgIFBhaW50SW5mbyBw
YWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChvdXRsaW5lUmVjdC5yZWN0KCkp
LCBQYWludFBoYXNlU2VsZk91dGxpbmUsIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICAgICAgY2xpcFRvUmVj
dChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBvdXRsaW5lUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJh
ZGl1cyk7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zm
c2V0KTsKLSAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBvdXRsaW5lUmVjdCk7Ci0gICAgICAgIH0KLSAgICAKICAgICAgICAg
Ly8gUGFpbnQgYW55IGNoaWxkIGxheWVycyB0aGF0IGhhdmUgb3ZlcmZsb3cuCiAgICAgICAgIHBh
aW50TGlzdChtX25vcm1hbEZsb3dMaXN0LmdldCgpLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
bywgbG9jYWxQYWludEZsYWdzKTsKICAgICAKQEAgLTM4NDUsMzQgKzM4MDAsMjYgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgICAgICBwYWludExpc3QocG9z
Wk9yZGVyTGlzdCgpLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdz
KTsKICAgICB9CiAKLSAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7Ci0gICAg
ICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAgICAgIHBhaW50
T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQpLCBw
aXhlbFNuYXBwZWRJbnRSZWN0KGRhbWFnZVJlY3QucmVjdCgpKSwgdHJ1ZSk7Ci0gICAgICAgIHJl
c3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1h
Z2VSZWN0KTsKLSAgICB9CisgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykKKyAg
ICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBj
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbyk7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAg
ICAgaWYgKGZpbHRlclBhaW50ZXIuaGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpKSB7CiAgICAgICAg
IC8vIEFwcGx5IHRoZSBjb3JyZWN0IGNsaXBwaW5nIChpZS4gb3ZlcmZsb3c6IGhpZGRlbikuCi0g
ICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVu
Y3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VS
ZWN0KTsKKyAgICAgICAgLy8gRklYTUU6IEl0IGlzIGluY29ycmVjdCB0byBqdXN0IGNsaXAgdG8g
dGhlIGRhbWFnZVJlY3QgaGVyZSBvbmNlIG11bHRpcGxlIGZyYWdtZW50cyBhcmUgaW52b2x2ZWQu
CisgICAgICAgIENsaXBSZWN0IGJhY2tncm91bmRSZWN0ID0gbGF5ZXJGcmFnbWVudHMuaXNFbXB0
eSgpID8gQ2xpcFJlY3QoKSA6IGxheWVyRnJhZ21lbnRzWzBdLmJhY2tncm91bmRSZWN0OworICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5
TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgYmFja2dyb3Vu
ZFJlY3QpOwogICAgICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5hcHBseUZpbHRlckVmZmVj
dCgpOwotICAgICAgICByZXN0b3JlQ2xpcCh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgcmVzdG9y
ZUNsaXAodHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgYmFja2dyb3VuZFJlY3QpOwogICAgIH0KICNlbmRpZgotCisgICAgCiAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgd2Ugbm93IHVzZSB0aGUgb3JpZ2luYWwgdHJhbnNwYXJlbmN5IGNvbnRl
eHQuCiAgICAgQVNTRVJUKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCA9PSBjb250ZXh0KTsKIAog
ICAgIGlmICgobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdN
YXNrUGhhc2UpICYmIHNob3VsZFBhaW50Q29udGVudCAmJiByZW5kZXJlcigpLT5oYXNNYXNrKCkg
JiYgIXNlbGVjdGlvbk9ubHkpIHsKLSAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBU
b0RpcnR5UmVjdCkKLSAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9v
dExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdl
UmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFpbnRpbmcg
d2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KLSAgICAgICAgCi0gICAgICAgIC8vIFBhaW50
IHRoZSBtYXNrLgotICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25h
cHBlZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlTWFzaywgUGFpbnRCZWhh
dmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJl
Z2lvbik7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVj
dCkKLSAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2sgZm9y
IHRoZSBmcmFnbWVudHMuCisgICAgICAgIHBhaW50TWFza0ZvckZyYWdtZW50cyhsYXllckZyYWdt
ZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
KTsKICAgICB9CiAKICAgICAvLyBFbmQgb3VyIHRyYW5zcGFyZW5jeSBsYXllcgpAQCAtMzkwNCwx
MyArMzg1MSwxNzIgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMaXN0KFZlY3RvcjxSZW5kZQog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAg
ICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkpOwotICAgICAgICBpZiAoIWNo
aWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkgfHwgdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCkpCisgICAg
ICAgIGlmICghY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgICAgIGNoaWxkTGF5
ZXItPnBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcGFpbnRQYWdpbmF0ZWRDaGlsZExheWVyKGNoaWxkTGF5ZXIs
IGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAgICAgfQogfQogCit2b2lkIFJl
bmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBjb25zdCBM
YXlvdXRSZWN0JiBkaXJ0eVJlY3QsCisgICAgQ2xpcFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlLCBT
aG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIHJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91
dFBvaW50KiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICAvLyBUT0RPOiBDb2xsZWN0IG11bHRpcGxl
IGZyYWdtZW50cyBmb3IgbGF5ZXJzIHdpdGggYW4gZW5jbG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIu
CisgICAgLy8gRm9yIHVucGFnaW5hdGVkIGxheWVycywgdGhlcmUgaXMgb25seSBvbmUgZnJhZ21l
bnQuCisgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudDsKKyAgICBDbGlwUmVjdHNDb250ZXh0IGNs
aXBSZWN0c0NvbnRleHQocm9vdExheWVyLCByZWdpb24sIGNsaXBSZWN0c1R5cGUsIElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplLCByZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICBjYWxjdWxhdGVS
ZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBkaXJ0eVJlY3QsIGZyYWdtZW50LmxheWVyQm91bmRzLCBm
cmFnbWVudC5iYWNrZ3JvdW5kUmVjdCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QsIGZyYWdtZW50
Lm91dGxpbmVSZWN0LCBvZmZzZXRGcm9tUm9vdCk7CisgICAgZnJhZ21lbnRzLmFwcGVuZChmcmFn
bWVudCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdt
ZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYg
bG9jYWxQYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBsb2NhbFBhaW50RmxhZ3MsIGJvb2wg
c2hvdWxkUGFpbnRDb250ZW50LAorICAgIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9v
dCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkg
eworICAgICAgICBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKyAg
ICAgICAgZnJhZ21lbnQucGFpbnRPZmZzZXQgPSB0b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRz
LmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3Vi
UGl4ZWxBY2N1bXVsYXRpb24pOworICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQg
PSBzaG91bGRQYWludENvbnRlbnQ7CisgICAgICAgIGlmICh0aGlzICE9IGxvY2FsUGFpbnRpbmdJ
bmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092
ZXJmbG93Q29udGVudHMpKQorICAgICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50
ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5i
YWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb2Zmc2V0
RnJvbVJvb3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRCYWNrZ3JvdW5k
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29u
dGV4dCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwg
Ym9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWlu
dGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwKKyAgICBSZW5kZXJPYmplY3Qq
IHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFn
bWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNob3Vs
ZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEJlZ2lu
IHRyYW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtub3cgd2UgaGF2ZSB0byBw
YWludCBzb21ldGhpbmcuCisgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQorICAgICAgICAg
ICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2Nh
bFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAKKyAgICAgICAgaWYgKGxvY2FsUGFp
bnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgeworICAgICAgICAgICAgLy8gUGFpbnQgb3VyIGJh
Y2tncm91bmQgZmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkgY2hpbGQgbGF5ZXJzLgorICAgICAg
ICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3VyIGJhY2tncm91bmQu
CisgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91
bmRSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gQmFja2dyb3VuZCBw
YWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgLy8gRklYTUU6IEV2
ZW50dWFsbHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQgaXRz
ZWxmIGluc3RlYWQgb2YganVzdCBmcm9tIHRoZSBwYWludCBpbmZvLgorICAgICAgICBQYWludElu
Zm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dy
b3VuZFJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlv
ciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Cisg
ICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgZnJhZ21lbnQucGFpbnRPZmZzZXQp
OworCisgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCisgICAg
ICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBs
YXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQq
IHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3Bh
cmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlv
ciwKKyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBib29sIHNlbGVj
dGlvbk9ubHksIGJvb2wgZm9yY2VCbGFja1RleHQpCit7CisgICAgLy8gQmVnaW4gdHJhbnNwYXJl
bmN5IGlmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHBhaW50LgorICAgIGlmIChoYXZlVHJhbnNwYXJl
bmN5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZy
YWdtZW50cy5hdChpKTsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudC5zaG91bGRQYWludENvbnRl
bnQgJiYgIWZyYWdtZW50LmZvcmVncm91bmRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgUGFpbnRCZWhhdmlvciBs
b2NhbFBhaW50QmVoYXZpb3IgPSBmb3JjZUJsYWNrVGV4dCA/IChQYWludEJlaGF2aW9yKVBhaW50
QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCA6IHBhaW50QmVoYXZpb3I7CisKKyAgICAvLyBPcHRpbWl6
ZSBjbGlwcGluZyBmb3IgdGhlIHNpbmdsZSBmcmFnbWVudCBjYXNlLgorICAgIGJvb2wgc2hvdWxk
Q2xpcCA9IGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCAmJiBsYXllckZyYWdtZW50
cy5zaXplKCkgPT0gMSAmJiBsYXllckZyYWdtZW50c1swXS5zaG91bGRQYWludENvbnRlbnQgJiYg
IWxheWVyRnJhZ21lbnRzWzBdLmZvcmVncm91bmRSZWN0LmlzRW1wdHkoKTsKKyAgICBpZiAoc2hv
dWxkQ2xpcCkKKyAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIs
IGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckZyYWdtZW50
c1swXS5mb3JlZ3JvdW5kUmVjdCk7CisgICAgCisgICAgLy8gV2UgaGF2ZSB0byBsb29wIHRocm91
Z2ggZXZlcnkgZnJhZ21lbnQgbXVsdGlwbGUgdGltZXMsIHNpbmNlIHdlIGhhdmUgdG8gcmVwYWlu
dCBpbiBlYWNoIHNwZWNpZmljIHBoYXNlIGluIG9yZGVyIGZvcgorICAgIC8vIGludGVybGVhdmlu
ZyBvZiB0aGUgZnJhZ21lbnRzIHRvIHdvcmsgcHJvcGVybHkuCisgICAgcGFpbnRGb3JlZ3JvdW5k
Rm9yRnJhZ21lbnRzV2l0aFBoYXNlKHNlbGVjdGlvbk9ubHkgPyBQYWludFBoYXNlU2VsZWN0aW9u
IDogUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcywgbGF5ZXJGcmFnbWVudHMsCisgICAg
ICAgIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50
aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICAKKyAgICBpZiAoIXNlbGVjdGlvbk9ubHkpIHsKKyAg
ICAgICAgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBhaW50UGhhc2VGbG9h
dCwgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50
QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICAgICAgcGFpbnRGb3JlZ3Jv
dW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBhaW50UGhhc2VGb3JlZ3JvdW5kLCBsYXllckZyYWdt
ZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFp
bnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVu
dHNXaXRoUGhhc2UoUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMsIGxheWVyRnJhZ21lbnRzLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlcik7CisgICAgfQorICAgIAorICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICBy
ZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbGF5
ZXJGcmFnbWVudHNbMF0uZm9yZWdyb3VuZFJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpw
YWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZSBwaGFzZSwgY29u
c3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsCisgICAgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBQYWlu
dEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIpCit7CisgICAgYm9vbCBzaG91bGRDbGlwID0gbG9jYWxQYWludGluZ0luZm8uY2xpcFRv
RGlydHlSZWN0ICYmIGxheWVyRnJhZ21lbnRzLnNpemUoKSA+IDE7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVy
RnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgaWYgKCFm
cmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgfHwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaXNF
bXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAoc2hv
dWxkQ2xpcCkKKyAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQu
Zm9yZWdyb3VuZFJlY3QpOworICAgIAorICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRl
eHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QucmVjdCgpKSwg
cGhhc2UsIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50
aW5nSW5mby5yZWdpb24pOworICAgICAgICBpZiAocGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91
bmQpCisgICAgICAgICAgICBwYWludEluZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IGxvY2FsUGFp
bnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHM7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50
KHBhaW50SW5mbywgZnJhZ21lbnQucGFpbnRPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgaWYg
KHNob3VsZENsaXApCisgICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QpOworICAgIH0K
K30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sCisgICAgUGFpbnRCZWhh
dmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0
KGkpOworICAgICAgICBpZiAoZnJhZ21lbnQub3V0bGluZVJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgCisgICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0bGluZQor
ICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3Qo
ZnJhZ21lbnQub3V0bGluZVJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBwYWlu
dEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVn
aW9uKTsKKyAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5vdXRsaW5l
UmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7CisgICAgICAgIHJlbmRlcmVy
KCktPnBhaW50KHBhaW50SW5mbywgZnJhZ21lbnQucGFpbnRPZmZzZXQpOworICAgICAgICByZXN0
b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21l
bnQub3V0bGluZVJlY3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRNYXNr
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGlu
Z0luZm8sCisgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAg
ICAgICAgaWYgKCFmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQor
ICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5k
UmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFpbnRpbmcg
d2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KKyAgICAgICAgCisgICAgICAgIC8vIFBhaW50
IHRoZSBtYXNrLgorICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxlY3Qg
dGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZyb20g
dGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4
ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCBQYWludFBo
YXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50
SW5mbywgZnJhZ21lbnQucGFpbnRPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgaWYgKGxvY2Fs
UGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29u
dHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBh
aW50aW5nSW5mbykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZy
YWdtZW50cy5hdChpKTsKKyAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVu
dC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0
LCByb3VuZGVkSW50UG9pbnQoZnJhZ21lbnQucGFpbnRPZmZzZXQpLCBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOworICAgICAgICByZXN0
b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21l
bnQuYmFja2dyb3VuZFJlY3QpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRQ
YWdpbmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50
TGF5ZXJGbGFncyBwYWludEZsYWdzKQogewogICAgIC8vIFdlIG5lZWQgdG8gZG8gbXVsdGlwbGUg
cGFzc2VzLCBicmVha2luZyB1cCBvdXIgY2hpbGQgbGF5ZXIgaW50byBzdHJpcHMuCkBAIC00MDQ4
LDcgKzQxNTQsNyBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSCiAK
ICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAKLSAgICBM
YXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gcmVuZGVyZXIoKS0+aXNSZW5kZXJGbG93VGhyZWFkKCkg
PyB0b1JlbmRlckZsb3dUaHJlYWQocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKSA6IHJlbmRl
cmVyKCktPnZpZXcoKS0+ZG9jdW1lbnRSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBoaXRUZXN0QXJl
YSA9IGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpID8gdG9SZW5kZXJGbG93VGhyZWFkKHJl
bmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkgOiByZW5kZXJlcigpLT52aWV3KCktPmRvY3VtZW50
UmVjdCgpOwogICAgIGlmICghcmVxdWVzdC5pZ25vcmVDbGlwcGluZygpKQogICAgICAgICBoaXRU
ZXN0QXJlYS5pbnRlcnNlY3QoZnJhbWVWaXNpYmxlUmVjdChyZW5kZXJlcigpKSk7CiAKQEAgLTQy
NTQsMTYgKzQzNjAsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
CiAgICAgICAgIC8vIFRoaXMgbGF5ZXIgaXMgZmxhdHRlbmluZywgc28gZmxhdHRlbiB0aGUgc3Rh
dGUgcGFzc2VkIHRvIGRlc2NlbmRhbnRzLgogICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLT5m
bGF0dGVuKCk7CiAgICAgfQotICAgIAotICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3
ZSBzaG91bGQgdXNlLgotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7Ci0gICAgQ2xpcFJlY3Qg
YmdSZWN0OwotICAgIENsaXBSZWN0IGZnUmVjdDsKLSAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsK
IAotICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIGhpdFRl
c3RMb2NhdGlvbi5yZWdpb24oKSwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3Zlcmxh
eVNjcm9sbGJhclNpemUpOwotICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGhp
dFRlc3RSZWN0LCBsYXllckJvdW5kcywgYmdSZWN0LCBmZ1JlY3QsIG91dGxpbmVSZWN0KTsKLSAg
ICAKICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRo
ZSB6LWRlcHRoIG9mIHRoZSBoaXQgcG9pbnQgb2YgM2QtdHJhbnNmb3JtZWQKICAgICAvLyBkZXNj
ZW5kYW50cy4KICAgICBkb3VibGUgbG9jYWxaT2Zmc2V0ID0gLW51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OmluZmluaXR5KCk7CkBAIC00MzA4LDE3ICs0NDA1LDIzIEBAIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRMYXll
cjsKICAgICB9CiAKLSAgICAvLyBDaGVjayBmb3IgdGhlIHJlc2l6ZXIKLSAgICBpZiAoY2FuUmVz
aXplKCkgJiYgcmVzaXplckNvcm5lclJlY3QodGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChsYXll
ckJvdW5kcykpLmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKKyAg
ICAgICAgCisgICAgLy8gQ29sbGVjdCB0aGUgZnJhZ21lbnRzLiBUaGlzIHdpbGwgY29tcHV0ZSB0
aGUgY2xpcCByZWN0YW5nbGVzIGZvciBlYWNoIGxheWVyIGZyYWdtZW50LgorICAgIExheWVyRnJh
Z21lbnRzIGxheWVyRnJhZ21lbnRzOworICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVu
dHMsIHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBoaXRUZXN0UmVjdCwgUm9v
dFJlbGF0aXZlQ2xpcFJlY3RzKTsKKworICAgIGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0UmVz
aXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24pKSB7CiAgICAg
ICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBoaXRUZXN0TG9jYXRp
b24ucG9pbnQoKSk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KIAotICAgIC8vIE5leHQg
d2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRl
ck9iamVjdHMgb2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0
TG9jYXRpb24pICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIC8vIE5leHQgd2Ugd2Fu
dCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVj
dHMgb2YgdGhlIGxheWVyLiBDaGVjaworICAgIC8vIGV2ZXJ5IGZyYWdtZW50IGluIHJldmVyc2Ug
b3JkZXIuCisgICAgaWYgKGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAvLyBIaXQg
dGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQsIGJlY2F1c2Ugd2Ugb25seSB3YW50
IHRvIGNvbW1pdCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdlJ3JlIGZyb250bW9zdC4KICAgICAg
ICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0g
ICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3Vu
ZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdERlc2NlbmRhbnRzKQorICAgICAgICBib29sIGlu
c2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QgPSBmYWxzZTsKKyAgICAgICAgaWYgKGhpdFRlc3RD
b250ZW50c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgcmVxdWVzdCwgdGVtcFJlc3VsdCwg
aGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0RGVzY2VuZGFudHMsIGluc2lkZUZyYWdtZW50Rm9yZWdy
b3VuZFJlY3QpCiAgICAgICAgICAgICAmJiBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9m
ZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewog
ICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKICAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwpAQCAtNDMyOCwxMyArNDQzMSwxMyBAQCBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgICAgICAgICAvLyBGb3JlZ3JvdW5kIGNhbiBkZXB0aC1zb3J0IHdpdGgg
ZGVzY2VuZGFudCBsYXllcnMsIHNvIGtlZXAgdGhpcyBhcyBhIGNhbmRpZGF0ZS4KICAgICAgICAg
ICAgIGNhbmRpZGF0ZUxheWVyID0gdGhpczsKLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNS
ZWN0QmFzZWRUZXN0KCkpCisgICAgICAgIH0gZWxzZSBpZiAoaW5zaWRlRnJhZ21lbnRGb3JlZ3Jv
dW5kUmVjdCAmJiByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIH0KIAogICAgIC8vIE5vdyBjaGVjayBvdXIgbmVnYXRp
dmUgei1pbmRleCBjaGlsZHJlbi4KICAgICBoaXRMYXllciA9IGhpdFRlc3RMaXN0KG5lZ1pPcmRl
ckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0
TG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxU
cmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2NlbmRhbnRzUHRyLCB6T2Zmc2V0LCB1
bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0aFNvcnREZXNjZW5kYW50cyk7Cisg
ICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0
ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0RGVz
Y2VuZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAgICAgICBpZiAoIWRlcHRoU29ydERl
c2NlbmRhbnRzKQogICAgICAgICAgICAgcmV0dXJuIGhpdExheWVyOwpAQCAtNDM0NSw5ICs0NDQ4
LDEwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICBpZiAo
Y2FuZGlkYXRlTGF5ZXIpCiAgICAgICAgIHJldHVybiBjYW5kaWRhdGVMYXllcjsKIAotICAgIGlm
IChiZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIGlzU2VsZlBhaW50aW5nTGF5
ZXIoKSkgeworICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgSGl0VGVz
dFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlm
IChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRl
c3RMb2NhdGlvbiwgSGl0VGVzdFNlbGYpCisgICAgICAgIGJvb2wgaW5zaWRlRnJhZ21lbnRCYWNr
Z3JvdW5kUmVjdCA9IGZhbHNlOworICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21l
bnRzKGxheWVyRnJhZ21lbnRzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0TG9jYXRpb24s
IEhpdFRlc3RTZWxmLCBpbnNpZGVGcmFnbWVudEJhY2tncm91bmRSZWN0KQogICAgICAgICAgICAg
JiYgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5m
bGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQu
aXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVz
dWx0KTsKQEAgLTQzNTUsMTMgKzQ0NTksNDYgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpo
aXRUZXN0TGF5ZXIoUgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQotICAgICAgICBpZiAocmVzdWx0LmlzUmVj
dEJhc2VkVGVzdCgpKQorICAgICAgICBpZiAoaW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVjdCAm
JiByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRl
bXBSZXN1bHQpOwogICAgIH0KIAogICAgIHJldHVybiAwOwogfQogCitib29sIFJlbmRlckxheWVy
OjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVy
RnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LAorICAgIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBIaXRU
ZXN0RmlsdGVyIGhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdAorewor
ICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQo
aSk7CisgICAgICAgIGlmICgoaGl0VGVzdEZpbHRlciA9PSBIaXRUZXN0U2VsZiAmJiAhZnJhZ21l
bnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pKQorICAgICAgICAg
ICAgfHwgKGhpdFRlc3RGaWx0ZXIgPT0gSGl0VGVzdERlc2NlbmRhbnRzICYmICFmcmFnbWVudC5m
b3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGluc2lkZUNsaXBSZWN0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKGhp
dFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIGZyYWdtZW50LmxheWVyQm91bmRzLCBoaXRU
ZXN0TG9jYXRpb24sIGhpdFRlc3RGaWx0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllcjo6aGl0
VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVu
dHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uKSBjb25zdAoreworICAg
IGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7
CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RM
b2NhdGlvbikgJiYgcmVzaXplckNvcm5lclJlY3QodGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChm
cmFnbWVudC5sYXllckJvdW5kcykpLmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9p
bnQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorIAogYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91
dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlv
biwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKSBjb25zdAogewogICAgIEFTU0VSVChpc1Nl
bGZQYWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpOwpA
QCAtNDQwOSw3ICs0NTQ2LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGlz
dChWZQogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkpOwogICAg
ICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwogICAgICAgICBIaXRUZXN0UmVzdWx0IHRl
bXBSZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKLSAgICAgICAgaWYgKGNoaWxkTGF5
ZXItPmlzUGFnaW5hdGVkKCkgJiYgIXVzZVJlZ2lvbkJhc2VkQ29sdW1ucygpKQorICAgICAgICBp
ZiAoY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgICAgIGhpdExheWVyID0gaGl0
VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwgcm9vdExheWVyLCByZXF1ZXN0LCB0
ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLCB0cmFuc2Zvcm1TdGF0ZSwg
ek9mZnNldEZvckRlc2NlbmRhbnRzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaGl0TGF5
ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCB0aGlzLCByZXF1ZXN0LCB0
ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLCBmYWxzZSwgdHJhbnNmb3Jt
U3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CkBAIC01MzM2LDcgKzU0NzMsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jCiAgICAgYm9vbCBpc1N0YWNraW5n
ID0gYmVoYXZpb3IgPT0gU3RvcEF0U3RhY2tpbmdDb250ZXh0cyA/IGlzU3RhY2tpbmdDb250ZXh0
KCkgOiBpc1N0YWNraW5nQ29udGFpbmVyKCk7CiAgICAgLy8gT3ZlcmZsb3cgbGF5ZXJzIGFyZSBq
dXN0IHBhaW50ZWQgYnkgdGhlaXIgZW5jbG9zaW5nIGxheWVycywgc28gdGhleSBkb24ndCBnZXQg
cHV0IGluIHpvcmRlciBsaXN0cy4KICAgICBib29sIGluY2x1ZGVIaWRkZW5MYXllciA9IGluY2x1
ZGVIaWRkZW5MYXllcnMgfHwgKG1faGFzVmlzaWJsZUNvbnRlbnQgfHwgKG1faGFzVmlzaWJsZURl
c2NlbmRhbnQgJiYgaXNTdGFja2luZykpOwotICAgIGlmIChpbmNsdWRlSGlkZGVuTGF5ZXIgJiYg
IWlzTm9ybWFsRmxvd09ubHkoKSAmJiAhcmVuZGVyZXIoKS0+aXNSZW5kZXJGbG93VGhyZWFkKCkp
IHsKKyAgICBpZiAoaW5jbHVkZUhpZGRlbkxheWVyICYmICFpc05vcm1hbEZsb3dPbmx5KCkgJiYg
IWlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgIC8vIERldGVybWluZSB3
aGljaCBidWZmZXIgdGhlIGNoaWxkIHNob3VsZCBiZSBpbi4KICAgICAgICAgT3duUHRyPFZlY3Rv
cjxSZW5kZXJMYXllcio+ID4mIGJ1ZmZlciA9ICh6SW5kZXgoKSA+PSAwKSA/IHBvc0J1ZmZlciA6
IG5lZ0J1ZmZlcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJ
KHJldmlzaW9uIDE0Mzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDIyIEBAIHB1YmxpYzoKICNlbmRpZgog
fTsKIAorc3RydWN0IExheWVyRnJhZ21lbnQgeworcHVibGljOgorICAgIExheWVyRnJhZ21lbnQo
KQorICAgICAgICA6IHNob3VsZFBhaW50Q29udGVudChmYWxzZSkKKyAgICB7IH0KKworICAgIGJv
b2wgc2hvdWxkUGFpbnRDb250ZW50OworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CisgICAg
Q2xpcFJlY3QgYmFja2dyb3VuZFJlY3Q7CisgICAgQ2xpcFJlY3QgZm9yZWdyb3VuZFJlY3Q7Cisg
ICAgQ2xpcFJlY3Qgb3V0bGluZVJlY3Q7CisgICAgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQ7Cit9
OworCit0eXBlZGVmIFZlY3RvcjxMYXllckZyYWdtZW50PiBMYXllckZyYWdtZW50czsKKwogY2xh
c3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgewogcHVibGljOgogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwpAQCAtNDE4LDYgKzQzNCw3IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIAogICAgIGJvb2wgaXNQYWdpbmF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFn
aW5hdGVkOyB9CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOyB9CiAKICAgICB2b2lkIHVw
ZGF0ZVRyYW5zZm9ybSgpOwogICAgIApAQCAtNzgxLDYgKzc5OCw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKFZpZXdwb3J0Q29u
c3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIHJlYXNvbikgeyBtX3ZpZXdwb3J0Q29uc3RyYWlu
ZWROb3RDb21wb3NpdGVkUmVhc29uID0gcmVhc29uOyB9CiAgICAgVmlld3BvcnRDb25zdHJhaW5l
ZE5vdENvbXBvc2l0ZWRSZWFzb24gdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFz
b24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29t
cG9zaXRlZFJlYXNvbj4obV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbik7
IH0KICNlbmRpZgorICAgIAorICAgIGJvb2wgaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkg
Y29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgcmVu
ZGVyZXIoKS0+aXNSZW5kZXJGbG93VGhyZWFkKCk7IH0KIAogcHJpdmF0ZToKICAgICBlbnVtIENv
bGxlY3RMYXllcnNCZWhhdmlvciB7IFN0b3BBdFN0YWNraW5nQ29udGV4dHMsIFN0b3BBdFN0YWNr
aW5nQ29udGFpbmVycyB9OwpAQCAtODg5LDYgKzkwOCwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQg
cGFpbnRMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
TGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRQYWdp
bmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBw
YWludENoaWxkTGF5ZXJJbnRvQ29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNv
bnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNpemVfdCBjb2x1bW5JbmRl
eCk7CisgICAgCisgICAgdm9pZCBjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiwgY29uc3QgTGF5b3V0UmVj
dCYgZGlydHlSZWN0LAorICAgICAgICBDbGlwUmVjdHNUeXBlLCBTaG91bGRSZXNwZWN0T3ZlcmZs
b3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZy
b21Sb290ID0gMCk7CisgICAgdm9pZCB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5
ZXJGcmFnbWVudHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywg
Ym9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9v
dCk7CisgICAgdm9pZCBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxh
eWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnRE
aXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsK
KyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYsIEdyYXBoaWNzQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LAorICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5
UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBh
aW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsCisgICAg
ICAgIGJvb2wgc2VsZWN0aW9uT25seSwgYm9vbCBmb3JjZUJsYWNrVGV4dCk7CisgICAgdm9pZCBw
YWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZSwgY29uc3QgTGF5
ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYs
IFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwor
ICAgIHZvaWQgcGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwg
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9y
LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50
T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CisgICAgdm9pZCBwYWludE1h
c2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIpOwogCiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9v
dExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLApAQCAtOTEwLDYgKzk0Miw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlKiBjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBoaXRU
ZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RG
aWx0ZXIpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJl
Y3QpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXll
ckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYpIGNvbnN0OwogCiAgICAgYm9vbCBs
aXN0Q29udGVudHNPcGFxdWVJblJlY3QoY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4qLCBjb25z
dCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKQEAgLTExODQsNiArMTIxOCw5IEBAIHByb3RlY3RlZDoK
ICAgICBSZW5kZXJTY3JvbGxiYXJQYXJ0KiBtX3Njcm9sbENvcm5lcjsKICAgICBSZW5kZXJTY3Jv
bGxiYXJQYXJ0KiBtX3Jlc2l6ZXI7CiAKKyAgICAvLyBQb2ludGVyIHRvIHRoZSBlbmNsb3Npbmcg
UmVuZGVyTGF5ZXIgdGhhdCBjYXVzZWQgdXMgdG8gYmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdl
IGFyZSBub3QgcGFnaW5hdGVkLgorICAgIFJlbmRlckxheWVyKiBtX2VuY2xvc2luZ1BhZ2luYXRp
b25MYXllcjsKKwogcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91
bmRzOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5C
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uQmxvY2suY3BwCShyZXZpc2lvbiAxNDM4NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OCw4ICsxMDgsNiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlTXVsCiAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOwog
ICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShwYXJlbnRTdHlsZSk7CiAgICAgbmV3U3R5bGUtPnNl
dERpc3BsYXkoQkxPQ0spOwotICAgIG5ld1N0eWxlLT5zZXRQb3NpdGlvbihSZWxhdGl2ZVBvc2l0
aW9uKTsKLSAgICBuZXdTdHlsZS0+c2V0WkluZGV4KDApOwogICAgIG5ld1N0eWxlLT5mb250KCku
dXBkYXRlKDApOwogICAgIHJldHVybiBuZXdTdHlsZS5yZWxlYXNlKCk7CiB9CkBAIC0xNjIsNiAr
MTYwLDE1IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6ZW5zdXJlQ29sdW0KICAgICBj
b2x1bW5TZXQtPnNldFJlcXVpcmVzQmFsYW5jaW5nKHJlcXVpcmVzQmFsYW5jaW5nKCkpOwogfQog
Cit2b2lkIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCkKK3sKKyAgICBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2socmVsYXlvdXRDaGlsZHJlbiwgcGFnZUxvZ2ljYWxIZWlnaHQpOworICAg
IAorICAgIC8vIFNoaWZ0IHRoZSBmbG93IHRocmVhZCBiYWNrIHVwIHRvIHRoZSB0b3Agb2YgdGhl
IGJsb2NrLgorICAgIGlmIChmbG93VGhyZWFkKCkpCisgICAgICAgIGZsb3dUaHJlYWQoKS0+c2V0
TG9naWNhbFRvcChib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSk7Cit9CisKIGNvbnN0
IGNoYXIqIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogewogICAg
IGlmIChpc0Zsb2F0aW5nKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5CbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgJKHJldmlzaW9uIDE0Mzg1MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDYgKzUyLDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBPVkVS
UklERTsKKwogICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVMb2dpY2FsV2lkdGhBbmRDb2x1bW5XaWR0
aCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja0ZvclBhZ2luYXRpb25Mb2dpY2Fs
SGVpZ2h0Q2hhbmdlKExheW91dFVuaXQmIHBhZ2VMb2dpY2FsSGVpZ2h0LCBib29sJiBwYWdlTG9n
aWNhbEhlaWdodENoYW5nZWQsIGJvb2wmIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0KSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgcmVsYXlvdXRGb3JQYWdpbmF0aW9uKGJvb2wgaGFz
U3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQs
IExheW91dFN0YXRlTWFpbnRhaW5lciYpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCShyZXZpc2lvbiAxNDM4
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCIKIAotI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVt
bkJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCkBAIC0y
NDksMTAgKzI0OCw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBhaW50T2JqZWN0KFAK
ICAgICBpZiAoIW1fZmxvd1RocmVhZCB8fCAhaXNWYWxpZCgpIHx8IChwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VT
ZWxlY3Rpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRSZWdpb25PYmplY3RzUmVnaW9u
U3R5bGUoKTsKICAgICBwYWludENvbHVtblJ1bGVzKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwot
ICAgIHBhaW50Q29sdW1uQ29udGVudHMocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgcmVz
dG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CiB9CiAKIHZvaWQgUmVuZGVyTXVsdGlD
b2x1bW5TZXQ6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTMwOSw3NiArMzA1LDYgQEAgdm9pZCBSZW5kZXJN
dWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJNdWx0
aUNvbHVtblNldDo6cGFpbnRDb2x1bW5Db250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIC8vIEZvciBlYWNoIHJlY3Rhbmds
ZSwgc2V0IGl0IGFzIHRoZSByZWdpb24gcmVjdGFuZ2xlIGFuZCB0aGVuIGxldCBmbG93IHRocmVh
ZCBwYWludGluZyBkbyB0aGUgcmVzdC4KLSAgICAvLyBXZSBtYWtlIG11bHRpcGxlIGNhbGxzIHRv
IHBhaW50Rmxvd1RocmVhZFBvcnRpb25JblJlZ2lvbiwgY2hhbmdpbmcgdGhlIHJlY3RhbmdsZXMg
ZWFjaCB0aW1lLgotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQoKTsKLSAgICBp
ZiAoIWNvbENvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRVbml0IGNvbEdhcCA9
IGNvbHVtbkdhcCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsr
KSB7Ci0gICAgICAgIC8vIEZpcnN0IHdlIGdldCB0aGUgY29sdW1uIHJlY3QsIHdoaWNoIGlzIGlu
IG91ciBsb2NhbCBjb29yZGluYXRlIHNwYWNlLCBhbmQgd2UgbWFrZSBpdCBwaHlzaWNhbCBhbmQg
YXBwbHkKLSAgICAgICAgLy8gdGhlIHBhaW50IG9mZnNldCB0byBpdC4gVGhhdCBnaXZlcyB1cyB0
aGUgcGh5c2ljYWwgbG9jYXRpb24gdGhhdCB3ZSB3YW50IHRvIHBhaW50IHRoZSBjb2x1bW4gYXQu
Ci0gICAgICAgIExheW91dFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChpKTsKLSAgICAgICAg
ZmxpcEZvcldyaXRpbmdNb2RlKGNvbFJlY3QpOwotICAgICAgICBjb2xSZWN0Lm1vdmVCeShwYWlu
dE9mZnNldCk7Ci0gICAgICAgIAotICAgICAgICAvLyBOZXh0IHdlIGdldCB0aGUgcG9ydGlvbiBv
ZiB0aGUgZmxvdyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIGNvbHVtbi4KLSAgICAg
ICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uUmVjdEF0
KGkpOwotICAgICAgICAKLSAgICAgICAgLy8gTm93IGdldCB0aGUgb3ZlcmZsb3cgcmVjdCB0aGF0
IGNvcnJlc3BvbmRzIHRvIHRoZSBjb2x1bW4uCi0gICAgICAgIExheW91dFJlY3QgZmxvd1RocmVh
ZE92ZXJmbG93UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KGZsb3dUaHJl
YWRQb3J0aW9uLCBpLCBjb2xDb3VudCwgY29sR2FwKTsKLQotICAgICAgICAvLyBEbyB0aGUgcGFp
bnQgd2l0aCB0aGUgY29tcHV0ZWQgcmVjdHMuCi0gICAgICAgIGZsb3dUaHJlYWQoKS0+cGFpbnRG
bG93VGhyZWFkUG9ydGlvbkluUmVnaW9uKHBhaW50SW5mbywgdGhpcywgZmxvd1RocmVhZFBvcnRp
b24sIGZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24sIGNvbFJlY3QubG9jYXRpb24oKSk7Ci0gICAg
fQotfQotCi1ib29sIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCi17Ci0gICAgTGF5b3V0UG9pbnQgYWRq
dXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKLQotICAgIC8v
IENoZWNrIG91ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1lIHRo
YXQgd2UgY2FuIG9ubHkgYmUgaGl0IGluIHRoZQotICAgIC8vIGZvcmVncm91bmQgcGhhc2UgKHdo
aWNoIGlzIHRydWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KLSAgICAvLyBG
SVhNRTogT25jZSB3ZSBzdXBwb3J0IG92ZXJmbG93LCB3ZSBuZWVkIHRvIGludGVyc2VjdCB3aXRo
IHRoYXQgYW5kIG5vdCB3aXRoIHRoZSBib3VuZHMgcmVjdC4KLSAgICBMYXlvdXRSZWN0IGJvdW5k
c1JlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24obG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24o
KSk7Ci0gICAgYm91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgaWYgKCF2
aXNpYmxlVG9IaXRUZXN0aW5nKCkgfHwgYWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kIHx8ICFs
b2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICAvLyBUaGUgcG9pbnQgaXMgaW4gb25lIHNwZWNpZmljIGNvbHVt
bi4gU2luY2UgY29sdW1ucyBjYW4ndCBvdmVybGFwLCB3ZSBkb24ndCBldmVyIGhhdmUgdG8gdGVz
dAotICAgIC8vIG11bHRpcGxlIGNvbHVtbnMuIFB1dCB0aGUgCi0gICAgCi0gICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIG5pY2UgdG8ganVtcCByaWdodCB0byB0aGUgc3BlY2lmaWMgY29sdW1uIGJ5
IGp1c3QgZG9pbmcgbWF0aCBvbiB0aGUgcG9pbnQuIFNpbmNlIGNvbHVtbnMKLSAgICAvLyBjYW4n
dCBvdmVybGFwLCB3ZSBzaG91bGRuJ3QgaGF2ZSB0byB3YWxrIGV2ZXJ5IGNvbHVtbiBsaWtlIHRo
aXMuIFRoZSBvbGQgY29sdW1uIGNvZGUgd2Fsa2VkIGFsbCB0aGUgY29sdW1ucywgdGhvdWdoLAot
ICAgIC8vIHNvIHRoaXMgaXMgbm8gd29yc2UuIFdlJ2QgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHJl
Y3QtYmFzZWQgaGl0IHRlc3RpbmcsIHRob3VnaCwgd2hpY2ggYWN0dWFsbHkgY291bGQgb3Zlcmxh
cAotICAgIC8vIG11bHRpcGxlIGNvbHVtbnMuCi0gICAgTGF5b3V0VW5pdCBjb2xHYXAgPSBjb2x1
bW5HYXAoKTsKLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAgLy8gRmlyc3Qg
d2UgZ2V0IHRoZSBjb2x1bW4gcmVjdCwgd2hpY2ggaXMgaW4gb3VyIGxvY2FsIGNvb3JkaW5hdGUg
c3BhY2UsIGFuZCB3ZSBtYWtlIGl0IHBoeXNpY2FsIGFuZCBhcHBseQotICAgICAgICAvLyB0aGUg
aGl0IHRlc3Qgb2Zmc2V0IHRvIGl0LiBUaGF0IGdpdmVzIHVzIHRoZSBwaHlzaWNhbCBsb2NhdGlv
biB0aGF0IHdlIHdhbnQgdG8gcGFpbnQgdGhlIGNvbHVtbiBhdC4KLSAgICAgICAgTGF5b3V0UmVj
dCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGkpOwotICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUo
Y29sUmVjdCk7Ci0gICAgICAgIGNvbFJlY3QubW92ZUJ5KGFkanVzdGVkTG9jYXRpb24pOwotICAg
ICAgICAKLSAgICAgICAgLy8gTmV4dCB3ZSBnZXQgdGhlIHBvcnRpb24gb2YgdGhlIGZsb3cgdGhy
ZWFkIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhpcyBjb2x1bW4uCi0gICAgICAgIExheW91dFJlY3Qg
Zmxvd1RocmVhZFBvcnRpb24gPSBmbG93VGhyZWFkUG9ydGlvblJlY3RBdChpKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIE5vdyBnZXQgdGhlIG92ZXJmbG93IHJlY3QgdGhhdCBjb3JyZXNwb25kcyB0
byB0aGUgY29sdW1uLgotICAgICAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRPdmVyZmxvd1BvcnRp
b24gPSBmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdChmbG93VGhyZWFkUG9ydGlvbiwgaSwg
Y29sQ291bnQsIGNvbEdhcCk7Ci0KLSAgICAgICAgLy8gRG8gdGhlIGhpdCB0ZXN0IHdpdGggdGhl
IGNvbXB1dGVkIHJlY3RzLgotICAgICAgICBpZiAoZmxvd1RocmVhZCgpLT5oaXRUZXN0Rmxvd1Ro
cmVhZFBvcnRpb25JblJlZ2lvbih0aGlzLCBmbG93VGhyZWFkUG9ydGlvbiwgZmxvd1RocmVhZE92
ZXJmbG93UG9ydGlvbiwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBjb2xS
ZWN0LmxvY2F0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAot
ICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50
KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwotICAgIHJldHVybiAhcmVzdWx0
LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCByZXF1ZXN0LCBsb2NhdGlvbklu
Q29udGFpbmVyLCBib3VuZHNSZWN0KTsKLX0KLQogdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6
cmVwYWludEZsb3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBi
b29sIGltbWVkaWF0ZSkgY29uc3QKIHsKICAgICAvLyBGaWd1cmUgb3V0IHRoZSBzdGFydCBhbmQg
ZW5kIGNvbHVtbnMgYW5kIG9ubHkgY2hlY2sgd2l0aGluIHRoYXQgcmFuZ2Ugc28gdGhhdCB3ZSBk
b24ndCB3YWxrIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uU2V0LmgJKHJldmlzaW9uIDE0Mzg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5
NSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0
ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdCBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBw
YWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAg
dmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX2NvbXB1dGVkQ29sdW1uV2lkdGg7IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFn
ZUxvZ2ljYWxIZWlnaHQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2NvbXB1dGVkQ29sdW1u
SGVpZ2h0OyB9CkBAIC0xMTQsNyArMTEzLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKICAgICAKICAgICB2b2lkIHBhaW50Q29sdW1uUnVs
ZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKLSAgICB2b2lk
IHBhaW50Q29sdW1uQ29udGVudHMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0KTsKIAogICAgIExheW91dFVuaXQgY29sdW1uR2FwKCkgY29uc3Q7CiAgICAgTGF5b3V0
UmVjdCBjb2x1bW5SZWN0QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Owo=
</data>
<flag name="commit-queue"
          id="210514"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190207</attachid>
            <date>2013-02-25 22:28:42 -0800</date>
            <delta_ts>2013-02-26 00:32:56 -0800</delta_ts>
            <desc>Much further along.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>61528</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJ
KHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU5LDYgKzk1OSwxNiBAQCB2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dpCiAgICAgICAgIHZpZXcoKS0+Zmxvd1RocmVh
ZENvbnRyb2xsZXIoKS0+ZGVjcmVtZW50Rmxvd1RocmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWlnaHRS
ZWdpb25zKCk7CiB9CiAKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdExheWVyRnJhZ21l
bnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAg
ICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVkKTsKKyAgICAKKyAgICBmb3IgKFJlbmRlclJl
Z2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRl
ciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgICAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvbiA9ICppdGVyOworICAgICAgICByZWdpb24tPmNvbGxlY3RMYXllckZyYWdtZW50cyhs
YXllckZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0JveCwgZGlydHlSZWN0KTsKKyAgICB9Cit9CisK
IEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcjo6Q3VycmVudFJlbmRlckZsb3dUaHJl
YWRNYWludGFpbmVyKFJlbmRlckZsb3dUaHJlYWQqIHJlbmRlckZsb3dUaHJlYWQpCiAgICAgOiBt
X3JlbmRlckZsb3dUaHJlYWQocmVuZGVyRmxvd1RocmVhZCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkocmV2aXNpb24gMTQ0MDA3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBMYXll
ckZyYWdtZW50OwogY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKIGNsYXNzIFJlbmRlclN0eWxlOwog
Y2xhc3MgUmVuZGVyUmVnaW9uOwpAQCAtMTQzLDYgKzE0NCw4IEBAIHB1YmxpYzoKICAgICBib29s
IGlzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnRDb25zaXN0ZW50KCkgY29uc3Q7CiAjZW5k
aWYKIAorICAgIHZvaWQgY29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50
PiYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCk7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3QgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsNyBAQCBS
ZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlCiAgICAgLCBtX3JlZmxlY3Rp
b24oMCkKICAgICAsIG1fc2Nyb2xsQ29ybmVyKDApCiAgICAgLCBtX3Jlc2l6ZXIoMCkKKyAgICAs
IG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKDApCiB7CiAgICAgbV9pc05vcm1hbEZsb3dPbmx5
ID0gc2hvdWxkQmVOb3JtYWxGbG93T25seSgpOwogICAgIG1faXNTZWxmUGFpbnRpbmdMYXllciA9
IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTQwNSw4ICs0MDYsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUgogCiAgICAgaWYgKGZsYWdzICYgVXBk
YXRlUGFnaW5hdGlvbikKICAgICAgICAgdXBkYXRlUGFnaW5hdGlvbigpOwotICAgIGVsc2UKKyAg
ICBlbHNlIHsKICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGZhbHNlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IDA7CisgICAgfQogCiAgICAgaWYgKG1faGFzVmlzaWJsZUNv
bnRlbnQpIHsKICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsK
QEAgLTQ1MCw3ICs0NTMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
cyhSCiAjZW5kaWYKIAogICAgIGlmICh1c2VSZWdpb25CYXNlZENvbHVtbnMoKSAmJiByZW5kZXJl
cigpLT5pc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICBtX2lzUGFnaW5hdGVk
ID0gdHJ1ZTsKKyAgICAgICAgdXBkYXRlUGFnaW5hdGlvbigpOwogICAgICAgICBmbGFncyB8PSBV
cGRhdGVQYWdpbmF0aW9uOwogICAgIH0KICAgICAKQEAgLTkyMywyNSArOTI2LDMzIEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2VkQ29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1faXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2Vu
Y2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7CisKKyAgICAvLyBtZWFucyB3ZSBjYW4ganVzdCBp
c3N1ZSBtdWx0aXBsZSBwYWludHMgaW4gc3RyaXBzIGVsc2V3aGVyZS4KICAgICBpZiAoaXNDb21w
b3NpdGVkKCkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBXZSB3aWxs
IGhhdmUgdG8gZGVhbCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGluZyBsYXllcnMgc29tZWRheS4K
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUgUmVuZGVyVmlldyBjYW4ndCBi
ZSBwYWdpbmF0ZWQuICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwgbW92ZSB0byBhIG1vZGVsIHdo
ZXJlIGl0IGlzIHRob3VnaC4KLSAgICAKKwogICAgIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0
d2VlbiB0aGUgcGFnaW5hdGVkIGJvb2xlYW5zIGZvciB0aGUgb2xkIGNvbHVtbiBjb2RlIGFuZCB0
aGUgbmV3IGNvbHVtbiBjb2RlCiAgICAgLy8gaXMgdGhhdCBlYWNoIHBhZ2luYXRlZCBsYXllciBo
YXMgdG8gcGFpbnQgb24gaXRzIG93biB3aXRoIHRoZSBuZXcgY29kZS4gVGhlcmUgaXMgbm8KICAg
ICAvLyByZWN1cnJpbmcgaW50byBjaGlsZCBsYXllcnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgbV9p
c1BhZ2luYXRlZCBiaXRzIGZvciB0aGUgbmV3IGNvbHVtbiBjb2RlIGNhbid0IGp1c3QgYmUgc2V0
IG9uCiAgICAgLy8gInJvb3RzIiB0aGF0IGdldCBzcGxpdCBhbmQgcGFpbnQgYWxsIHRoZWlyIGRl
c2NlbmRhbnRzLiBJbnN0ZWFkIGVhY2ggbGF5ZXIgaGFzIHRvIGJlIGNoZWNrZWQgaW5kaXZpZHVh
bGx5IGFuZAogICAgIC8vIGdlbnVpbmVseSBrbm93IGlmIGl0IGlzIGdvaW5nIHRvIGhhdmUgdG8g
c3BsaXQgaXRzZWxmIHVwIHdoZW4gcGFpbnRpbmcgb25seSBpdHMgY29udGVudHMgKGFuZCBub3Qg
YW55IG90aGVyIGRlc2NlbmRhbnQKLSAgICAvLyBsYXllcnMpLgorICAgIC8vIGxheWVycykuIFdl
IHRyYWNrIGFuIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllciBpbnN0ZWFkIG9mIHVzaW5nIGEgc2lt
cGxlIGJpdCwgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGdldCBiYWNrCisgICAgLy8gdG8g
dGhhdCBsYXllciBlYXNpbHkuCiAgICAgYm9vbCBuZXdDb2x1bW5zVXNlZCA9IHVzZVJlZ2lvbkJh
c2VkQ29sdW1ucygpOwogICAgIGlmIChuZXdDb2x1bW5zVXNlZCAmJiByZW5kZXJlcigpLT5pc0lu
Rmxvd1JlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICBtX2lzUGFnaW5hdGVkID0gdHJ1ZTsK
KyAgICAgICAgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgPSB0aGlzOwogICAgICAgICByZXR1
cm47CiAgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBIYW5kbGUgdHJhbnNmb3Jtcy4KKyAgICBp
ZiAobmV3Q29sdW1uc1VzZWQgJiYgaGFzVHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChpc05vcm1hbEZsb3dPbmx5KCkpIHsKICAgICAgICAgaWYgKG5ld0NvbHVtbnNVc2Vk
KQotICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IHBhcmVudCgpLT5pc1BhZ2luYXRlZCgpOwor
ICAgICAgICAgICAgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgPSBwYXJlbnQoKS0+ZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faXNQYWdp
bmF0ZWQgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKS0+aGFzQ29sdW1ucygpOwogICAgICAgICByZXR1
cm47CkBAIC05NTYsNyArOTY3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlv
bigpCiAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrICYmIGNvbnRhaW5pbmdCbG9jayAhPSB2
aWV3OwogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29u
dGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmhhc0xh
eWVyKCkpIHsKLSAgICAgICAgICAgICAgICBtX2lzUGFnaW5hdGVkID0gY29udGFpbmluZ0Jsb2Nr
LT5sYXllcigpLT5pc1BhZ2luYXRlZCgpOworICAgICAgICAgICAgICAgIG1fZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyID0gY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5lbmNsb3NpbmdQYWdpbmF0
aW9uTGF5ZXIoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTE4ODMsNyArMTg5NCw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyTGF5
ZXIqIGFjY3VtdWwKIAogICAgICAgICAvLyBXZSBzaG91bGQgbm90IHJlYWNoIFJlbmRlclZpZXcg
bGF5ZXIgcGFzdCB0aGUgUmVuZGVyRmxvd1RocmVhZCBsYXllciBmb3IgYW55CiAgICAgICAgIC8v
IGNoaWxkcmVuIG9mIHRoZSBSZW5kZXJGbG93VGhyZWFkLgotICAgICAgICBpZiAocmVuZGVyZXIt
PmluUmVuZGVyRmxvd1RocmVhZCgpICYmICFyZW5kZXJlci0+aXNSZW5kZXJGbG93VGhyZWFkKCkp
CisgICAgICAgIGlmIChyZW5kZXJlci0+aW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgIWxheWVyLT5p
c091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgIEFTU0VSVChwYXJlbnRM
YXllciAhPSByZW5kZXJlci0+dmlldygpLT5sYXllcigpKTsKIAogICAgICAgICBpZiAoZm91bmRB
bmNlc3RvckZpcnN0KSB7CkBAIC0zNzE4LDcgKzM3MjksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludExheWVyQ29udGVudHMoR3JhCiAKICAgICAgICAgICAgIC8vIFJld2lyZSB0aGUgb2xkIGNv
bnRleHQgdG8gYSBtZW1vcnkgYnVmZmVyLCBzbyB0aGF0IHdlIGNhbiBjYXB0dXJlIHRoZSBjb250
ZW50cyBvZiB0aGUgbGF5ZXIuCiAgICAgICAgICAgICAvLyBOT1RFOiBXZSBzYXZlZCB0aGUgb2xk
IGNvbnRleHQgaW4gdGhlICJ0cmFuc3BhcmVuY3lMYXllckNvbnRleHQiIGxvY2FsIHZhcmlhYmxl
LCB0byBiZSBhYmxlIHRvIHN0YXJ0IGEgdHJhbnNwYXJlbmN5IGxheWVyCi0gICAgICAgICAgICAv
LyBvbiB0aGUgb3JpZ2luYWwgY29udGV4dCBhbmQgYXZvaWQgZHVwbGljYXRpbmcgImJlZ2luRmls
dGVyRWZmZWN0IiBhZnRlciBlYWNoIHRyYW5zcGFyZW55IGxheWVyIGNhbGwuIEFsc28sIG5vdGUg
dGhhdCAKKyAgICAgICAgICAgIC8vIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IGFuZCBhdm9pZCBk
dXBsaWNhdGluZyAiYmVnaW5GaWx0ZXJFZmZlY3QiIGFmdGVyIGVhY2ggdHJhbnNwYXJlbmN5IGxh
eWVyIGNhbGwuIEFsc28sIG5vdGUgdGhhdCAKICAgICAgICAgICAgIC8vIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXJzIHdpbGwgb25seSBjcmVhdGUgYSBzaW5nbGUgbGF6eSB0cmFuc3BhcmVuY3kgbGF5
ZXIsIGV2ZW4gdGhvdWdoIGl0IGlzIGNhbGxlZCB0d2ljZSBpbiB0aGlzIG1ldGhvZC4KICAgICAg
ICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLmJlZ2luRmlsdGVyRWZmZWN0KGNvbnRleHQp
OwogCkBAIC0zNzMyLDI4ICszNzQzLDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJD
b250ZW50cyhHcmEKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSNlbmRpZgogCi0g
ICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2Ugb25seSB3aGVuIHdl
IG5lZWQgdGhlbS4KLSAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwotICAgIENsaXBSZWN0IGRh
bWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Q7Ci0gICAgTGF5b3V0UG9pbnQg
cGFpbnRPZmZzZXQ7Ci0KLSAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50IHx8IHNob3VsZFBhaW50
T3V0bGluZSB8fCBpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKLSAgICAgICAgQ2xpcFJl
Y3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwg
bG9jYWxQYWludGluZ0luZm8ucmVnaW9uLCAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclRl
bXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0
cywgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5
ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0
T3ZlcmZsb3dDbGlwKTsKLSAgICAgICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0
LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0LCAmb2Zmc2V0RnJvbVJvb3QpOwotICAgICAg
ICBwYWludE9mZnNldCA9IHRvUG9pbnQobGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJv
eExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbik7Cisg
ICAgaWYgKGZpbHRlclBhaW50ZXIuaGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFu
c3BhcmVuY3kpIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJl
bmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkgc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwg
cmF0aGVyIHRoYW4gcmlzayBhIGNoaWxkIGxheWVyIGxhemlseSBzdGFydHMgb25lIHdpdGggdGhl
IHdyb25nIGNvbnRleHQuCisgICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFy
ZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwogICAg
IH0KKyNlbmRpZgogCi0gICAgYm9vbCBmb3JjZUJsYWNrVGV4dCA9IGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQ7Ci0gICAgYm9vbCBz
ZWxlY3Rpb25Pbmx5ICA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IgJiBQYWludEJl
aGF2aW9yU2VsZWN0aW9uT25seTsKLSAgICAKLSAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZp
b3IgPSBQYWludEJlaGF2aW9yTm9ybWFsOwotICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWlu
dExheWVyUGFpbnRpbmdTa2lwUm9vdEJhY2tncm91bmQpCi0gICAgICAgIHBhaW50QmVoYXZpb3Ig
fD0gUGFpbnRCZWhhdmlvclNraXBSb290QmFja2dyb3VuZDsKLSAgICBlbHNlIGlmIChsb2NhbFBh
aW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdSb290QmFja2dyb3VuZE9ubHkpCi0gICAgICAg
IHBhaW50QmVoYXZpb3IgfD0gUGFpbnRCZWhhdmlvclJvb3RCYWNrZ3JvdW5kT25seTsKLSAgICAK
ICAgICAvLyBJZiB0aGlzIGxheWVyJ3MgcmVuZGVyZXIgaXMgYSBjaGlsZCBvZiB0aGUgcGFpbnRp
bmdSb290LCB3ZSByZW5kZXIgdW5jb25kaXRpb25hbGx5LCB3aGljaAogICAgIC8vIGlzIGRvbmUg
YnkgcGFzc2luZyBhIG5pbCBwYWludGluZ1Jvb3QgZG93biB0byBvdXIgcmVuZGVyZXIgKGFzIGlm
IG5vIHBhaW50aW5nUm9vdCB3YXMgZXZlciBzZXQpLgogICAgIC8vIEVsc2UsIG91ciByZW5kZXJl
ciB0cmVlIG1heSBvciBtYXkgbm90IGNvbnRhaW4gdGhlIHBhaW50aW5nIHJvb3QsIHNvIHdlIHBh
c3MgdGhhdCByb290IGFsb25nCkBAIC0zNzY1LDc5ICszNzYxLDQzIEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKICAgICBpZiAobG9jYWxQYWludGluZ0luZm8ub3Zl
cmxhcFRlc3RSZXF1ZXN0cyAmJiBpc1NlbGZQYWludGluZ0xheWVyKQogICAgICAgICBwZXJmb3Jt
T3ZlcmxhcFRlc3RzKCpsb2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzLCBsb2Nh
bFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRoaXMpOwogCi0gICAgLy8gV2Ugd2FudCB0byBwYWlu
dCBvdXIgbGF5ZXIsIGJ1dCBvbmx5IGlmIHdlIGludGVyc2VjdCB0aGUgZGFtYWdlIHJlY3QuCi0g
ICAgaWYgKHRoaXMgIT0gbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyIHx8ICEobG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykpCi0gICAgICAgIHNo
b3VsZFBhaW50Q29udGVudCAmPSBpbnRlcnNlY3RzRGFtYWdlUmVjdChsYXllckJvdW5kcywgZGFt
YWdlUmVjdC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm9mZnNldEZyb21S
b290KTsKKyAgICBib29sIGZvcmNlQmxhY2tUZXh0ID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvciAmIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dDsKKyAgICBib29sIHNlbGVjdGlv
bk9ubHkgID0gbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3JT
ZWxlY3Rpb25Pbmx5OworICAgIAorICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciA9IFBh
aW50QmVoYXZpb3JOb3JtYWw7CisgICAgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQ
YWludGluZ1NraXBSb290QmFja2dyb3VuZCkKKyAgICAgICAgcGFpbnRCZWhhdmlvciB8PSBQYWlu
dEJlaGF2aW9yU2tpcFJvb3RCYWNrZ3JvdW5kOworICAgIGVsc2UgaWYgKGxvY2FsUGFpbnRGbGFn
cyAmIFBhaW50TGF5ZXJQYWludGluZ1Jvb3RCYWNrZ3JvdW5kT25seSkKKyAgICAgICAgcGFpbnRC
ZWhhdmlvciB8PSBQYWludEJlaGF2aW9yUm9vdEJhY2tncm91bmRPbmx5OwogCi0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgIGlmIChmaWx0ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZl
Y3QoKSAmJiBoYXZlVHJhbnNwYXJlbmN5KSB7Ci0gICAgICAgIC8vIElmIHdlIGhhdmUgYSBmaWx0
ZXIgYW5kIHRyYW5zcGFyZW5jeSwgd2UgaGF2ZSB0byBlYWdlcmx5IHN0YXJ0IGEgdHJhbnNwYXJl
bmN5IGxheWVyIGhlcmUsIHJhdGhlciB0aGFuIHJpc2sgYSBjaGlsZCBsYXllciBsYXppbHkgc3Rh
cnRzIG9uZSB3aXRoIHRoZSB3cm9uZyBjb250ZXh0LgotICAgICAgICBiZWdpblRyYW5zcGFyZW5j
eUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWlu
dEJlaGF2aW9yKTsKKyAgICBMYXllckZyYWdtZW50cyBsYXllckZyYWdtZW50czsKKyAgICBpZiAo
c2hvdWxkUGFpbnRDb250ZW50IHx8IHNob3VsZFBhaW50T3V0bGluZSB8fCBpc1BhaW50aW5nT3Zl
cmxheVNjcm9sbGJhcnMpIHsKKyAgICAgICAgLy8gQ29sbGVjdCB0aGUgZnJhZ21lbnRzLiBUaGlz
IHdpbGwgY29tcHV0ZSB0aGUgY2xpcCByZWN0YW5nbGVzIGFuZCBwYWludCBvZmZzZXRzIGZvciBl
YWNoIGxheWVyIGZyYWdtZW50LCBhcyB3ZWxsIGFzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50
IG9mIGVhY2gKKyAgICAgICAgLy8gZnJhZ21lbnQgc2hvdWxkIHBhaW50LgorICAgICAgICBjb2xs
ZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIs
IGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbiwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsCisgICAgICAgICAgICAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNs
aXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0cywKKyAgICAg
ICAgICAgIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRl
bnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXAsICZvZmZzZXRG
cm9tUm9vdCk7CisgICAgICAgIHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncywgc2hvdWxkUGFpbnRD
b250ZW50LCAmb2Zmc2V0RnJvbVJvb3QpOwogICAgIH0KLSNlbmRpZgotCisgICAgCiAgICAgaWYg
KGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQmFja2dyb3Vu
ZFBoYXNlKSB7Ci0gICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgJiYgIXNlbGVjdGlvbk9u
bHkpIHsKLSAgICAgICAgICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5v
dyB0aGF0IHdlIGtub3cgd2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcuCi0gICAgICAgICAgICBp
ZiAoaGF2ZVRyYW5zcGFyZW5jeSkKLSAgICAgICAgICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxh
eWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXll
ciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJl
aGF2aW9yKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xp
cFRvRGlydHlSZWN0KSB7Ci0gICAgICAgICAgICAgICAgLy8gUGFpbnQgb3VyIGJhY2tncm91bmQg
Zmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkgY2hpbGQgbGF5ZXJzLgotICAgICAgICAgICAgICAg
IC8vIEVzdGFibGlzaCB0aGUgY2xpcCB1c2VkIHRvIHBhaW50IG91ciBiYWNrZ3JvdW5kLgotICAg
ICAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCwgRG9Ob3RJ
bmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIEJhY2tncm91bmQgcGFpbnRpbmcgd2lsbCBo
YW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gUGFpbnQgdGhlIGJhY2tncm91bmQuCi0gICAgICAgICAgICBQYWludEluZm8g
cGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkp
LCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAgICAgICAgICAgIHJlbmRl
cmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotCi0gICAgICAgICAgICBpZiAo
bG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQotICAgICAgICAgICAgICAgIHJlc3Rv
cmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VS
ZWN0KTsKLSAgICAgICAgfQorICAgICAgICAvLyBQYWludCBvbmx5IHRoZSBiYWNrZ3JvdW5kcyBm
b3IgYWxsIG9mIHRoZSBmcmFnbWVudHMgb2YgdGhlIGxheWVyLgorICAgICAgICBpZiAoc2hvdWxk
UGFpbnRDb250ZW50ICYmICFzZWxlY3Rpb25Pbmx5KQorICAgICAgICAgICAgcGFpbnRCYWNrZ3Jv
dW5kRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCB0cmFuc3BhcmVuY3lMYXll
ckNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgaGF2ZVRyYW5zcGFyZW5jeSwK
KyAgICAgICAgICAgICAgICBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRCZWhhdmlvciwgcGFpbnRp
bmdSb290Rm9yUmVuZGVyZXIpOwogCiAgICAgICAgIC8vIE5vdyB3YWxrIHRoZSBzb3J0ZWQgbGlz
dCBvZiBjaGlsZHJlbiB3aXRoIG5lZ2F0aXZlIHotaW5kaWNlcy4KICAgICAgICAgcGFpbnRMaXN0
KG5lZ1pPcmRlckxpc3QoKSwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRG
bGFncyk7CiAgICAgfQogICAgIAogICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVy
UGFpbnRpbmdDb21wb3NpdGluZ0ZvcmVncm91bmRQaGFzZSkgewotICAgICAgICAvLyBOb3cgZXN0
YWJsaXNoIHRoZSBhcHByb3ByaWF0ZSBjbGlwIGFuZCBwYWludCBvdXIgY2hpbGQgUmVuZGVyT2Jq
ZWN0cy4KLSAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCAmJiAhY2xpcFJlY3RUb0FwcGx5
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gQmVnaW4gdHJhbnNwYXJlbmN5IGxheWVycyBs
YXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNvbWV0aGluZy4KLSAgICAg
ICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQotICAgICAgICAgICAgICAgIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50QmVoYXZpb3IpOwotCi0gICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xp
cFRvRGlydHlSZWN0KSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHVwIHRoZSBjbGlwIHVzZWQg
d2hlbiBwYWludGluZyBvdXIgY2hpbGRyZW4uCi0gICAgICAgICAgICAgICAgY2xpcFRvUmVjdChs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBjbGlwUmVjdFRvQXBwbHkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBl
ZEludFJlY3QoY2xpcFJlY3RUb0FwcGx5LnJlY3QoKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbk9ubHkgPyBQYWludFBoYXNlU2VsZWN0aW9uIDogUGFpbnRQaGFz
ZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yY2VCbGFja1RleHQgPyAoUGFpbnRCZWhhdmlvcilQYWludEJlaGF2aW9yRm9yY2VCbGFja1Rl
eHQgOiBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGlu
Z0luZm8ucmVnaW9uKTsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywg
cGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb25Pbmx5KSB7Ci0gICAgICAg
ICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZsb2F0OwotICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAg
ICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGb3JlZ3JvdW5kOwotICAgICAgICAg
ICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8u
b3ZlcmxhcFRlc3RSZXF1ZXN0czsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChw
YWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhhc2Ug
PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lczsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5w
YWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKLSAgICAgICAgICAgICAg
ICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwg
Y2xpcFJlY3RUb0FwcGx5KTsKLSAgICAgICAgfQorICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250
ZW50KQorICAgICAgICAgICAgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21l
bnRzLCBjb250ZXh0LCB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIHBhaW50aW5nSW5mby5wYWlu
dERpcnR5UmVjdCwgaGF2ZVRyYW5zcGFyZW5jeSwKKyAgICAgICAgICAgICAgICBsb2NhbFBhaW50
aW5nSW5mbywgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIHNlbGVjdGlv
bk9ubHksIGZvcmNlQmxhY2tUZXh0KTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRQYWlu
dE91dGxpbmUpCisgICAgICAgICAgICBwYWludE91dGxpbmVGb3JGcmFnbWVudHMobGF5ZXJGcmFn
bWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlcik7CiAKLSAgICAgICAgaWYgKHNob3VsZFBhaW50T3V0bGluZSAmJiAh
b3V0bGluZVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBQYWludCBvdXIgb3duIG91
dGxpbmUKLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFw
cGVkSW50UmVjdChvdXRsaW5lUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlU2VsZk91dGxpbmUsIHBh
aW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5y
ZWdpb24pOwotICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBvdXRsaW5lUmVj
dCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7Ci0gICAgICAgICAgICByZW5kZXJl
cigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgIHJlc3RvcmVD
bGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBvdXRsaW5lUmVj
dCk7Ci0gICAgICAgIH0KLSAgICAKICAgICAgICAgLy8gUGFpbnQgYW55IGNoaWxkIGxheWVycyB0
aGF0IGhhdmUgb3ZlcmZsb3cuCiAgICAgICAgIHBhaW50TGlzdChtX25vcm1hbEZsb3dMaXN0Lmdl
dCgpLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAK
QEAgLTM4NDUsMzQgKzM4MDUsMjYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRl
bnRzKEdyYQogICAgICAgICBwYWludExpc3QocG9zWk9yZGVyTGlzdCgpLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICB9CiAKLSAgICBpZiAoaXNQYWlu
dGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7Ci0gICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVj
dCwgZGFtYWdlUmVjdCk7Ci0gICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCBy
b3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGRhbWFnZVJl
Y3QucmVjdCgpKSwgdHJ1ZSk7Ci0gICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFp
bnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAgICB9CisgICAgaWYgKGlz
UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xz
Rm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbyk7
CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgaWYgKGZpbHRlclBhaW50ZXIuaGFzU3Rh
cnRlZEZpbHRlckVmZmVjdCgpKSB7CiAgICAgICAgIC8vIEFwcGx5IHRoZSBjb3JyZWN0IGNsaXBw
aW5nIChpZS4gb3ZlcmZsb3c6IGhpZGRlbikuCi0gICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWlu
dGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgLy8gRklYTUU6IEl0
IGlzIGluY29ycmVjdCB0byBqdXN0IGNsaXAgdG8gdGhlIGRhbWFnZVJlY3QgaGVyZSBvbmNlIG11
bHRpcGxlIGZyYWdtZW50cyBhcmUgaW52b2x2ZWQuCisgICAgICAgIENsaXBSZWN0IGJhY2tncm91
bmRSZWN0ID0gbGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpID8gQ2xpcFJlY3QoKSA6IGxheWVyRnJh
Z21lbnRzWzBdLmJhY2tncm91bmRSZWN0OworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwgYmFja2dyb3VuZFJlY3QpOwogICAgICAgICBjb250ZXh0ID0g
ZmlsdGVyUGFpbnRlci5hcHBseUZpbHRlckVmZmVjdCgpOwotICAgICAgICByZXN0b3JlQ2xpcCh0
cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0
LCBkYW1hZ2VSZWN0KTsKKyAgICAgICAgcmVzdG9yZUNsaXAodHJhbnNwYXJlbmN5TGF5ZXJDb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgYmFja2dyb3VuZFJlY3QpOwog
ICAgIH0KICNlbmRpZgotCisgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Ugbm93IHVzZSB0
aGUgb3JpZ2luYWwgdHJhbnNwYXJlbmN5IGNvbnRleHQuCiAgICAgQVNTRVJUKHRyYW5zcGFyZW5j
eUxheWVyQ29udGV4dCA9PSBjb250ZXh0KTsKIAogICAgIGlmICgobG9jYWxQYWludEZsYWdzICYg
UGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdNYXNrUGhhc2UpICYmIHNob3VsZFBhaW50Q29u
dGVudCAmJiByZW5kZXJlcigpLT5oYXNNYXNrKCkgJiYgIXNlbGVjdGlvbk9ubHkpIHsKLSAgICAg
ICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKLSAgICAgICAgICAgIGNs
aXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJv
cmRlclJhZGl1cyk7IC8vIE1hc2sgcGFpbnRpbmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2Vs
Zi4KLSAgICAgICAgCi0gICAgICAgIC8vIFBhaW50IHRoZSBtYXNrLgotICAgICAgICBQYWludElu
Zm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0
KCkpLCBQYWludFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgIHJlbmRlcmVyKCkt
PnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxv
Y2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKLSAgICAgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsK
KyAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2sgZm9yIHRoZSBmcmFnbWVudHMuCisgICAgICAgIHBh
aW50TWFza0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8sIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB9CiAKICAgICAvLyBFbmQgb3Vy
IHRyYW5zcGFyZW5jeSBsYXllcgpAQCAtMzkwNCwxMyArMzg1NiwyMjUgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMaXN0KFZlY3RvcjxSZW5kZQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9
IGxpc3QtPmF0KGkpOwotICAgICAgICBpZiAoIWNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkgfHwg
dXNlUmVnaW9uQmFzZWRDb2x1bW5zKCkpCisgICAgICAgIGlmICghY2hpbGRMYXllci0+aXNQYWdp
bmF0ZWQoKSkKICAgICAgICAgICAgIGNoaWxkTGF5ZXItPnBhaW50TGF5ZXIoY29udGV4dCwgcGFp
bnRpbmdJbmZvLCBwYWludEZsYWdzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFpbnRQ
YWdpbmF0ZWRDaGlsZExheWVyKGNoaWxkTGF5ZXIsIGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFp
bnRGbGFncyk7CiAgICAgfQogfQogCit2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRz
KExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlclJlZ2lvbiogcmVnaW9uLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCisgICAg
Q2xpcFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIHJl
c3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCkKK3sK
KyAgICBpZiAoIWVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKSB7CisgICAgICAgIC8vIEZvciB1
bnBhZ2luYXRlZCBsYXllcnMsIHRoZXJlIGlzIG9ubHkgb25lIGZyYWdtZW50LgorICAgICAgICBM
YXllckZyYWdtZW50IGZyYWdtZW50OworICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0
c0NvbnRleHQocm9vdExheWVyLCByZWdpb24sIGNsaXBSZWN0c1R5cGUsIElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplLCByZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICAgICAgY2FsY3VsYXRlUmVj
dHMoY2xpcFJlY3RzQ29udGV4dCwgZGlydHlSZWN0LCBmcmFnbWVudC5sYXllckJvdW5kcywgZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0LCBmcmFnbWVudC5v
dXRsaW5lUmVjdCwgb2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBmcmFnbWVudHMuYXBwZW5kKGZy
YWdtZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBDb21wdXRlIG91
ciBvZmZzZXQgd2l0aGluIHRoZSBlbmNsb3NpbmcgcGFnaW5hdGlvbiBsYXllci4KKyAgICBMYXlv
dXRQb2ludCBvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcjsKKyAgICBjb252ZXJ0VG9MYXllckNv
b3JkcyhlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5
ZXIpOworICAgIAorICAgIC8vIENhbGN1bGF0ZSBjbGlwIHJlY3RzIHJlbGF0aXZlIHRvIHRoZSBl
bmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIuIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2FsbCBpcyB0byBk
ZXRlcm1pbmUgb3VyIGJvdW5kcyBjbGlwcGVkIHRvIGludGVybWVkaWF0ZQorICAgIC8vIGxheWVy
cyBiZXR3ZWVuIHVzIGFuZCB0aGUgcGFnaW5hdGlvbiBjb250ZXh0LiBJdCdzIGltcG9ydGFudCB0
byBtaW5pbWl6ZSB0aGUgIyBvZiBmcmFnbWVudHMgd2UgbmVlZCB0byBjcmVhdGUgYW5kIHRoaXMg
aGVscHMgd2l0aAorICAgIC8vIHRoYXQuCisgICAgQ2xpcFJlY3RzQ29udGV4dCBwYWdpbmF0aW9u
Q2xpcFJlY3RzQ29udGV4dChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgcmVnaW9uLCBjbGlw
UmVjdHNUeXBlLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgcmVzcGVjdE92ZXJmbG93Q2xp
cCk7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc0luRmxvd1RocmVhZDsKKyAgICBDbGlwUmVj
dCBiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5kUmVj
dEluRmxvd1RocmVhZDsKKyAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdEluRmxvd1RocmVhZDsKKyAg
ICBjYWxjdWxhdGVSZWN0cyhwYWdpbmF0aW9uQ2xpcFJlY3RzQ29udGV4dCwgUGFpbnRJbmZvOjpp
bmZpbml0ZVJlY3QoKSwgbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJhY2tncm91bmRSZWN0SW5G
bG93VGhyZWFkLCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZCwKKyAgICAgICAgb3V0bGluZVJl
Y3RJbkZsb3dUaHJlYWQsICZvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7CisgICAgCisgICAg
Ly8gVGFrZSBvdXIgYm91bmRpbmcgYm94IHdpdGhpbiB0aGUgZmxvdyB0aHJlYWQgYW5kIGNsaXAg
aXQuIFRoaXMgd2lsbCBoZWxwIG1pbmltaXplIHRoZSAjIG9mIGZyYWdtZW50cyB3ZSBoYXZlIHRv
IGNyZWF0ZS4KKyAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRpbmdCb3hJbkZsb3dUaHJlYWQgPSBi
b3VuZGluZ0JveChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgJm9mZnNldFdpdGhpblBhZ2lu
YXRlZExheWVyKTsKKyAgICBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLmludGVyc2VjdChi
YWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZC5yZWN0KCkpOworCisgICAgLy8gU2hpZnQgdGhlIGRp
cnR5IHJlY3QgaW50byBmbG93IHRocmVhZCBjb29yZGluYXRlcy4KKyAgICBMYXlvdXRQb2ludCBv
ZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290OworICAgIGVuY2xvc2luZ1BhZ2luYXRpb25M
YXllcigpLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFnaW5hdGlv
bkxheWVyRnJvbVJvb3QpOworICAgIExheW91dFJlY3QgZGlydHlSZWN0SW5GbG93VGhyZWFkKGRp
cnR5UmVjdCk7CisgICAgZGlydHlSZWN0SW5GbG93VGhyZWFkLm1vdmVCeSgtb2Zmc2V0T2ZQYWdp
bmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisKKyAgICAvLyBUZWxsIHRoZSBmbG93IHRocmVhZCB0byBj
b2xsZWN0IHRoZSBmcmFnbWVudHMuIFdlIHBhc3MgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNyZWF0
ZSBhIG1pbmltYWwgbnVtYmVyIG9mIGZyYWdtZW50cyBiYXNlZCBvZmYgdGhlIHBhZ2VzL2NvbHVt
bnMKKyAgICAvLyB0aGF0IGludGVyc2VjdCB0aGUgYWN0dWFsIGRpcnR5UmVjdCBhcyB3ZWxsIGFz
IHRoZSBwYWdlcy9jb2x1bW5zIHRoYXQgaW50ZXJzZWN0IG91ciBsYXllcidzIGJvdW5kaW5nIGJv
eC4KKyAgICBSZW5kZXJGbG93VGhyZWFkKiBlbmNsb3NpbmdGbG93VGhyZWFkID0gdG9SZW5kZXJG
bG93VGhyZWFkKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5yZW5kZXJlcigpKTsKKyAgICBl
bmNsb3NpbmdGbG93VGhyZWFkLT5jb2xsZWN0TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRzLCBsYXll
ckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLCBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQpOworICAgIAor
ICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVjdHMKKyAgICAvLyBUaGUgZnJhZ21lbnRzIGhhdmUgaGFk
IHRyYW5zbGF0aW9ucyBhbmQgY2xpcHMgc3RvcmVkIGluIHRoZW0uIE5vdyB3ZSBuZWVkIHRvIGNs
aXAgdG8gdGhlIGFuY2VzdG9ycyBvZiB0aGUgZW5jbG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7CisgICAgICAgIAor
ICAgICAgICAvLyBTZXQgb3VyIGZvdXIgcmVjdHMgd2l0aCBhbGwgY2xpcHBpbmcgYXBwbGllZCB0
aGF0IHdhcyBpbnRlcm5hbCB0byB0aGUgZmxvdyB0aHJlYWQuCisgICAgICAgIGZyYWdtZW50LnNl
dFJlY3RzKGxheWVyQm91bmRzSW5GbG93VGhyZWFkLCBiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVh
ZCwgZm9yZWdyb3VuZFJlY3RJbkZsb3dUaHJlYWQsIG91dGxpbmVSZWN0SW5GbG93VGhyZWFkKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSByb290LXJlbGF0aXZlIHBoeXNpY2Fs
IHBvc2l0aW9uIHVzZWQgd2hlbiBwYWludGluZyB0aGUgZmxvdyB0aHJlYWQgaW4gdGhpcyBmcmFn
bWVudC4KKyAgICAgICAgZnJhZ21lbnQubW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQg
KyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKKyAgICAgICAgCisgICAgICAgIC8v
IEZJWE1FOiBHZXQgdGhlIHBhcmVudCBjbGlwIHJlY3RzIG9mIHRoZSBwYWdpbmF0aW9uIGxheWVy
IGFuZCBpbnRlcnNlY3Qgd2l0aCB0aGVtLgorICAgICAgICAgCisgICAgICAgIC8vIE5vdyBpbnRl
cnNlY3Qgd2l0aCBvdXIgcGFnaW5hdGlvbiBjbGlwLiBUaGlzIHdpbGwgdHlwaWNhbGx5IG1lYW4g
d2UncmUganVzdCBpbnRlcnNlY3RpbmcgdGhlIGRpcnR5IHJlY3Qgd2l0aCB0aGUgY29sdW1uCisg
ICAgICAgIC8vIGNsaXAsIHNvIHRoZSBjb2x1bW4gY2xpcCBlbmRzIHVwIGJlaW5nIGFsbCB3ZSBh
cHBseS4KKyAgICAgICAgZnJhZ21lbnQuaW50ZXJzZWN0KGZyYWdtZW50LnBhZ2luYXRpb25DbGlw
KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZy
YWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBsb2NhbFBhaW50RmxhZ3MsIGJv
b2wgc2hvdWxkUGFpbnRDb250ZW50LAorICAgIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9t
Um9vdCkKK3sKKyAgICBBU1NFUlQob2Zmc2V0RnJvbVJvb3QpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQm
IGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICBmcmFnbWVudC5zaG91bGRQYWlu
dENvbnRlbnQgPSBzaG91bGRQYWludENvbnRlbnQ7CisgICAgICAgIGlmICh0aGlzICE9IGxvY2Fs
UGFpbnRpbmdJbmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQ
YWludGluZ092ZXJmbG93Q29udGVudHMpKSB7CisgICAgICAgICAgICBMYXlvdXRQb2ludCBuZXdP
ZmZzZXRGcm9tUm9vdCA9ICpvZmZzZXRGcm9tUm9vdCArIGZyYWdtZW50LnBhZ2luYXRpb25PZmZz
ZXQ7CisgICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0
c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0
LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCAmbmV3T2Zmc2V0RnJvbVJvb3Qp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEJhY2tncm91
bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LAorICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0
LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBh
aW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVj
dCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZy
YWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmICghZnJhZ21lbnQuc2hv
dWxkUGFpbnRDb250ZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gQmVn
aW4gdHJhbnNwYXJlbmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRv
IHBhaW50IHNvbWV0aGluZy4KKyAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCisgICAgICAg
ICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGxv
Y2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOworICAgIAorICAgICAgICBpZiAobG9jYWxQ
YWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KSB7CisgICAgICAgICAgICAvLyBQYWludCBvdXIg
YmFja2dyb3VuZCBmaXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMuCisgICAg
ICAgICAgICAvLyBFc3RhYmxpc2ggdGhlIGNsaXAgdXNlZCB0byBwYWludCBvdXIgYmFja2dyb3Vu
ZC4KKyAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBj
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuYmFja2dy
b3VuZFJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOyAvLyBCYWNrZ3JvdW5k
IHBhaW50aW5nIHdpbGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAvLyBGSVhNRTog
RXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBp
dHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50
SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNr
Z3JvdW5kUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2
aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsK
KyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0b1BvaW50KGZyYWdtZW50Lmxh
eWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGlu
Z0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKKworICAgICAgICBpZiAobG9jYWxQYWludGlu
Z0luZm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0
KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdyb3VuZEZvckZyYWdt
ZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisg
ICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2
ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZv
LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsCisgICAgUmVuZGVyT2JqZWN0KiBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgYm9vbCBzZWxlY3Rpb25Pbmx5LCBib29sIGZvcmNlQmxhY2tUZXh0
KQoreworICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBpZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBw
YWludC4KKyAgICBpZiAoaGF2ZVRyYW5zcGFyZW5jeSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBMYXll
ckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgICAgICBp
ZiAoZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICYmICFmcmFnbWVudC5mb3JlZ3JvdW5kUmVj
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0
cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdHJh
bnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3Ip
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIAorICAgIFBhaW50QmVoYXZpb3IgbG9jYWxQYWludEJlaGF2aW9yID0gZm9yY2VCbGFj
a1RleHQgPyAoUGFpbnRCZWhhdmlvcilQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQgOiBwYWlu
dEJlaGF2aW9yOworCisgICAgLy8gT3B0aW1pemUgY2xpcHBpbmcgZm9yIHRoZSBzaW5nbGUgZnJh
Z21lbnQgY2FzZS4KKyAgICBib29sIHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5mby5jbGlw
VG9EaXJ0eVJlY3QgJiYgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpID09IDEgJiYgbGF5ZXJGcmFnbWVu
dHNbMF0uc2hvdWxkUGFpbnRDb250ZW50ICYmICFsYXllckZyYWdtZW50c1swXS5mb3JlZ3JvdW5k
UmVjdC5pc0VtcHR5KCk7CisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIGNsaXBUb1JlY3Qo
bG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5w
YWludERpcnR5UmVjdCwgbGF5ZXJGcmFnbWVudHNbMF0uZm9yZWdyb3VuZFJlY3QpOworICAgIAor
ICAgIC8vIFdlIGhhdmUgdG8gbG9vcCB0aHJvdWdoIGV2ZXJ5IGZyYWdtZW50IG11bHRpcGxlIHRp
bWVzLCBzaW5jZSB3ZSBoYXZlIHRvIHJlcGFpbnQgaW4gZWFjaCBzcGVjaWZpYyBwaGFzZSBpbiBv
cmRlciBmb3IKKyAgICAvLyBpbnRlcmxlYXZpbmcgb2YgdGhlIGZyYWdtZW50cyB0byB3b3JrIHBy
b3Blcmx5LgorICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShzZWxlY3Rp
b25Pbmx5ID8gUGFpbnRQaGFzZVNlbGVjdGlvbiA6IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dy
b3VuZHMsIGxheWVyRnJhZ21lbnRzLAorICAgICAgICBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
bywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgCisg
ICAgaWYgKCFzZWxlY3Rpb25Pbmx5KSB7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdt
ZW50c1dpdGhQaGFzZShQYWludFBoYXNlRmxvYXQsIGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5k
ZXJlcik7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWlu
dFBoYXNlRm9yZWdyb3VuZCwgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICAg
ICAgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBhaW50UGhhc2VDaGlsZE91
dGxpbmVzLCBsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2Fs
UGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoc2hvdWxkQ2xpcCkKKyAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVyRnJhZ21lbnRzWzBdLmZvcmVncm91bmRSZWN0
KTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0
aFBoYXNlKFBhaW50UGhhc2UgcGhhc2UsIGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdt
ZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiBsb2NhbFBhaW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBSZW5k
ZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGJvb2wgc2hvdWxkQ2xp
cCA9IGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCAmJiBsYXllckZyYWdtZW50cy5z
aXplKCkgPiAxOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5z
aXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFn
bWVudHMuYXQoaSk7CisgICAgICAgIGlmICghZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50IHx8
IGZyYWdtZW50LmZvcmVncm91bmRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgICAgICBjbGlwVG9S
ZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0KTsKKyAgICAKKyAgICAg
ICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYWdt
ZW50LmZvcmVncm91bmRSZWN0LnJlY3QoKSksIHBoYXNlLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKKyAgICAgICAgaWYg
KHBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQorICAgICAgICAgICAgcGFpbnRJbmZvLm92
ZXJsYXBUZXN0UmVxdWVzdHMgPSBsb2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3Rz
OworICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHRvUG9pbnQoZnJhZ21lbnQu
bGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50
aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOworICAgICAgICAKKyAgICAgICAgaWYgKHNo
b3VsZENsaXApCisgICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QpOworICAgIH0KK30K
Kwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sCisgICAgUGFpbnRCZWhhdmlv
ciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkp
OworICAgICAgICBpZiAoZnJhZ21lbnQub3V0bGluZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgCisgICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0bGluZQorICAg
ICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJh
Z21lbnQub3V0bGluZVJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBwYWludEJl
aGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9u
KTsKKyAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5vdXRsaW5lUmVj
dCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7CisgICAgICAgIHJlbmRlcmVyKCkt
PnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigp
IC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11
bGF0aW9uKSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5vdXRsaW5lUmVjdCk7CisgICAgfQorfQorCit2b2lk
IFJlbmRlckxheWVyOjpwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMm
IGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywKKyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5n
Um9vdEZvclJlbmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFn
bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxh
eWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29u
dGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChsb2NhbFBhaW50aW5n
SW5mby5jbGlwVG9EaXJ0eVJlY3QpCisgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFk
aXVzKTsgLy8gTWFzayBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgorICAg
ICAgICAKKyAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2suCisgICAgICAgIC8vIEZJWE1FOiBFdmVu
dHVhbGx5IHdlIHdpbGwgY29sbGVjdCB0aGUgcmVnaW9uIGZyb20gdGhlIGZyYWdtZW50IGl0c2Vs
ZiBpbnN0ZWFkIG9mIGp1c3QgZnJvbSB0aGUgcGFpbnQgaW5mby4KKyAgICAgICAgUGFpbnRJbmZv
IHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmJhY2tncm91
bmRSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9ybWFsLCBwYWlu
dGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKKyAgICAgICAg
cmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRz
LmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3Vi
UGl4ZWxBY2N1bXVsYXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsb2NhbFBhaW50aW5n
SW5mby5jbGlwVG9EaXJ0eVJlY3QpCisgICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3Qp
OworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9y
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0lu
Zm8pCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7
ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMu
YXQoaSk7CisgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBj
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuYmFja2dy
b3VuZFJlY3QpOworICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRl
ZEludFBvaW50KHRvUG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRl
ckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikp
LAorICAgICAgICAgICAgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5yZWN0KCkpLCB0cnVlKTsKKyAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9
Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UGFnaW5hdGVkQ2hpbGRMYXllcihSZW5kZXJM
YXllciogY2hpbGRMYXllciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsK
ICAgICAvLyBXZSBuZWVkIHRvIGRvIG11bHRpcGxlIHBhc3NlcywgYnJlYWtpbmcgdXAgb3VyIGNo
aWxkIGxheWVyIGludG8gc3RyaXBzLgpAQCAtNDA0OCw3ICs0MjEyLDcgQEAgYm9vbCBSZW5kZXJM
YXllcjo6aGl0VGVzdChjb25zdCBIaXRUZXN0UgogCiAgICAgcmVuZGVyZXIoKS0+ZG9jdW1lbnQo
KS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgCi0gICAgTGF5b3V0UmVjdCBoaXRUZXN0QXJlYSA9IHJl
bmRlcmVyKCktPmlzUmVuZGVyRmxvd1RocmVhZCgpID8gdG9SZW5kZXJGbG93VGhyZWFkKHJlbmRl
cmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkgOiByZW5kZXJlcigpLT52aWV3KCktPmRvY3VtZW50UmVj
dCgpOworICAgIExheW91dFJlY3QgaGl0VGVzdEFyZWEgPSBpc091dE9mRmxvd1JlbmRlckZsb3dU
aHJlYWQoKSA/IHRvUmVuZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgp
IDogcmVuZGVyZXIoKS0+dmlldygpLT5kb2N1bWVudFJlY3QoKTsKICAgICBpZiAoIXJlcXVlc3Qu
aWdub3JlQ2xpcHBpbmcoKSkKICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KGZyYW1lVmlz
aWJsZVJlY3QocmVuZGVyZXIoKSkpOwogCkBAIC00MjU0LDE2ICs0NDE4LDcgQEAgUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICAvLyBUaGlzIGxheWVyIGlz
IGZsYXR0ZW5pbmcsIHNvIGZsYXR0ZW4gdGhlIHN0YXRlIHBhc3NlZCB0byBkZXNjZW5kYW50cy4K
ICAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS0+ZmxhdHRlbigpOwogICAgIH0KLSAgICAKLSAg
ICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxkIHVzZS4KLSAgICBMYXlvdXRS
ZWN0IGxheWVyQm91bmRzOwotICAgIENsaXBSZWN0IGJnUmVjdDsKLSAgICBDbGlwUmVjdCBmZ1Jl
Y3Q7Ci0gICAgQ2xpcFJlY3Qgb3V0bGluZVJlY3Q7CiAKLSAgICBDbGlwUmVjdHNDb250ZXh0IGNs
aXBSZWN0c0NvbnRleHQocm9vdExheWVyLCBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCksIFJvb3RS
ZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKLSAgICBjYWxj
dWxhdGVSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBoaXRUZXN0UmVjdCwgbGF5ZXJCb3VuZHMsIGJn
UmVjdCwgZmdSZWN0LCBvdXRsaW5lUmVjdCk7Ci0gICAgCiAgICAgLy8gVGhlIGZvbGxvd2luZyBh
cmUgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB0aGUgei1kZXB0aCBvZiB0aGUgaGl0IHBvaW50
IG9mIDNkLXRyYW5zZm9ybWVkCiAgICAgLy8gZGVzY2VuZGFudHMuCiAgICAgZG91YmxlIGxvY2Fs
Wk9mZnNldCA9IC1udW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwpAQCAtNDMwOCwx
NyArNDQ2MywyMiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAg
ICAgICAgIGNhbmRpZGF0ZUxheWVyID0gaGl0TGF5ZXI7CiAgICAgfQogCi0gICAgLy8gQ2hlY2sg
Zm9yIHRoZSByZXNpemVyCi0gICAgaWYgKGNhblJlc2l6ZSgpICYmIHJlc2l6ZXJDb3JuZXJSZWN0
KHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QobGF5ZXJCb3VuZHMpKS5jb250YWlucyhoaXRUZXN0
TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKSB7CisgICAgLy8gQ29sbGVjdCB0aGUgZnJhZ21lbnRz
LiBUaGlzIHdpbGwgY29tcHV0ZSB0aGUgY2xpcCByZWN0YW5nbGVzIGZvciBlYWNoIGxheWVyIGZy
YWdtZW50LgorICAgIExheWVyRnJhZ21lbnRzIGxheWVyRnJhZ21lbnRzOworICAgIGNvbGxlY3RG
cmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lv
bigpLCBoaXRUZXN0UmVjdCwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzKTsKKworICAgIGlmIChjYW5S
ZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRU
ZXN0TG9jYXRpb24pKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSk7CiAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgIH0KIAotICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBp
bnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1Jl
Y3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkg
eworICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUg
dGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLiBDaGVjaworICAgIC8vIGV2ZXJ5
IGZyYWdtZW50IGluIHJldmVyc2Ugb3JkZXIuCisgICAgaWYgKGlzU2VsZlBhaW50aW5nTGF5ZXIo
KSkgewogICAgICAgICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQs
IGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGNvbW1pdCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdl
J3JlIGZyb250bW9zdC4KICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5o
aXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwg
dGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdERlc2NlbmRh
bnRzKQorICAgICAgICBib29sIGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywg
cmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0RGVzY2VuZGFudHMs
IGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QpCiAgICAgICAgICAgICAmJiBpc0hpdENhbmRp
ZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5z
Zm9ybVN0YXRlLmdldCgpKSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRl
c3QoKSkKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwpAQCAtNDMy
OCwxMyArNDQ4OCwxMyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAvLyBGb3JlZ3JvdW5k
IGNhbiBkZXB0aC1zb3J0IHdpdGggZGVzY2VuZGFudCBsYXllcnMsIHNvIGtlZXAgdGhpcyBhcyBh
IGNhbmRpZGF0ZS4KICAgICAgICAgICAgIGNhbmRpZGF0ZUxheWVyID0gdGhpczsKLSAgICAgICAg
fSBlbHNlIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgIH0gZWxzZSBpZiAo
aW5zaWRlRnJhZ21lbnRGb3JlZ3JvdW5kUmVjdCAmJiByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkp
CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIH0KIAogICAgIC8v
IE5vdyBjaGVjayBvdXIgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbi4KICAgICBoaXRMYXllciA9
IGhpdFRlc3RMaXN0KG5lZ1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQs
IGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2Nl
bmRhbnRzUHRyLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0
aFNvcnREZXNjZW5kYW50cyk7CisgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpP
ZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0
ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAg
ICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQogICAgICAgICAgICAgcmV0dXJuIGhpdExh
eWVyOwpAQCAtNDM0NSw5ICs0NTA1LDEwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFIKICAgICBpZiAoY2FuZGlkYXRlTGF5ZXIpCiAgICAgICAgIHJldHVybiBjYW5k
aWRhdGVMYXllcjsKIAotICAgIGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24p
ICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVy
KCkpIHsKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9j
YXRpb24oKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3Vs
dCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdFNlbGYpCisgICAgICAgIGJv
b2wgaW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVjdCA9IGZhbHNlOworICAgICAgICBpZiAoaGl0
VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByZXF1ZXN0LCB0ZW1wUmVz
dWx0LCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RTZWxmLCBpbnNpZGVGcmFnbWVudEJhY2tncm91
bmRSZWN0KQogICAgICAgICAgICAgJiYgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZz
ZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKICAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKQEAgLTQzNTUsMTMgKzQ1MTYsNDYgQEAgUmVuZGVy
TGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQotICAg
ICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICBpZiAoaW5zaWRlRnJh
Z21lbnRCYWNrZ3JvdW5kUmVjdCAmJiByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIH0KIAogICAgIHJldHVybiAwOwog
fQogCitib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAorICAgIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
aGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0RmlsdGVyIGhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lk
ZUNsaXBSZWN0KSBjb25zdAoreworICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5z
aXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50
ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmICgoaGl0VGVzdEZpbHRlciA9PSBI
aXRUZXN0U2VsZiAmJiAhZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0
TG9jYXRpb24pKQorICAgICAgICAgICAgfHwgKGhpdFRlc3RGaWx0ZXIgPT0gSGl0VGVzdERlc2Nl
bmRhbnRzICYmICFmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2Nh
dGlvbikpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGluc2lkZUNsaXBSZWN0ID0g
dHJ1ZTsKKyAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIGZyYWdt
ZW50LmxheWVyQm91bmRzLCBoaXRUZXN0TG9jYXRpb24sIGhpdFRlc3RGaWx0ZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZy
YWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExv
Y2F0aW9uKSBjb25zdAoreworICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0g
bGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplckNvcm5lclJlY3QodGhpcywg
cGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcykpLmNvbnRhaW5zKGhpdFRl
c3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorIAogYm9vbCBSZW5kZXJMYXllcjo6aGl0
VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKSBjb25z
dAogewogICAgIEFTU0VSVChpc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBhaW50aW5n
TGF5ZXJEZXNjZW5kYW50KCkpOwpAQCAtNDQwOSw3ICs0NjAzLDcgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0TGlzdChWZQogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXll
ciA9IGxpc3QtPmF0KGkpOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwogICAg
ICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsK
LSAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkgJiYgIXVzZVJlZ2lvbkJhc2Vk
Q29sdW1ucygpKQorICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAg
ICAgICAgIGhpdExheWVyID0gaGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwg
cm9vdExheWVyLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0
aW9uLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExh
eWVyLCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0
aW9uLCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CkBAIC00
NjkxLDggKzQ4ODUsMTggQEAgc3RhdGljIGlubGluZSBDbGlwUmVjdCBiYWNrZ3JvdW5kQ2xpcFJl
YwogQ2xpcFJlY3QgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRDbGlwUmVjdChjb25zdCBDbGlwUmVj
dHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0KSBjb25zdAogewogICAgIEFTU0VSVChwYXJlbnQo
KSk7CisgICAgCiAgICAgQ2xpcFJlY3RzIHBhcmVudFJlY3RzOwotICAgIHBhcmVudENsaXBSZWN0
cyhjbGlwUmVjdHNDb250ZXh0LCBwYXJlbnRSZWN0cyk7CisKKyAgICAvLyBJZiB3ZSBjcm9zcyBp
bnRvIGEgZGlmZmVyZW50IHBhZ2luYXRpb24gY29udGV4dCwgdGhlbiB3ZSBjYW4ndCByZWx5IG9u
IHRoZSBjYWNoZS4KKyAgICAvLyBKdXN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIFRlbXBvcmFyeUNs
aXBSZWN0cy4KKyAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5jbGlwUmVjdHNUeXBlICE9IFRlbXBv
cmFyeUNsaXBSZWN0cyAmJiBwYXJlbnQoKS0+ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkgIT0g
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpIHsKKyAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCB0
ZW1wQ29udGV4dChjbGlwUmVjdHNDb250ZXh0KTsKKyAgICAgICAgdGVtcENvbnRleHQuY2xpcFJl
Y3RzVHlwZSA9IFRlbXBvcmFyeUNsaXBSZWN0czsKKyAgICAgICAgcGFyZW50Q2xpcFJlY3RzKHRl
bXBDb250ZXh0LCBwYXJlbnRSZWN0cyk7CisgICAgfSBlbHNlCisgICAgICAgIHBhcmVudENsaXBS
ZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBwYXJlbnRSZWN0cyk7CisgICAgCiAgICAgQ2xpcFJlY3Qg
YmFja2dyb3VuZENsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0Rm9yUG9zaXRpb24ocGFyZW50
UmVjdHMsIHJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0aW9uKCkpOwogICAgIFJlbmRlclZpZXcq
IHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgQVNTRVJUKHZpZXcpOwpAQCAtNTMzNiw3
ICs1NTQwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhib29sIGluYwogICAg
IGJvb2wgaXNTdGFja2luZyA9IGJlaGF2aW9yID09IFN0b3BBdFN0YWNraW5nQ29udGV4dHMgPyBp
c1N0YWNraW5nQ29udGV4dCgpIDogaXNTdGFja2luZ0NvbnRhaW5lcigpOwogICAgIC8vIE92ZXJm
bG93IGxheWVycyBhcmUganVzdCBwYWludGVkIGJ5IHRoZWlyIGVuY2xvc2luZyBsYXllcnMsIHNv
IHRoZXkgZG9uJ3QgZ2V0IHB1dCBpbiB6b3JkZXIgbGlzdHMuCiAgICAgYm9vbCBpbmNsdWRlSGlk
ZGVuTGF5ZXIgPSBpbmNsdWRlSGlkZGVuTGF5ZXJzIHx8IChtX2hhc1Zpc2libGVDb250ZW50IHx8
IChtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmIGlzU3RhY2tpbmcpKTsKLSAgICBpZiAoaW5jbHVk
ZUhpZGRlbkxheWVyICYmICFpc05vcm1hbEZsb3dPbmx5KCkgJiYgIXJlbmRlcmVyKCktPmlzUmVu
ZGVyRmxvd1RocmVhZCgpKSB7CisgICAgaWYgKGluY2x1ZGVIaWRkZW5MYXllciAmJiAhaXNOb3Jt
YWxGbG93T25seSgpICYmICFpc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkgewogICAgICAg
ICAvLyBEZXRlcm1pbmUgd2hpY2ggYnVmZmVyIHRoZSBjaGlsZCBzaG91bGQgYmUgaW4uCiAgICAg
ICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+JiBidWZmZXIgPSAoekluZGV4KCkgPj0g
MCkgPyBwb3NCdWZmZXIgOiBuZWdCdWZmZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBjbGFz
cyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgSGl0VGVzdFJlcXVlc3Q7CiBjbGFzcyBIaXRUZXN0
UmVzdWx0OwogY2xhc3MgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOworY2xhc3MgUmVuZGVyRmxv
d1RocmVhZDsKIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyTWFycXVlZTsK
IGNsYXNzIFJlbmRlclJlcGxpY2E7CkBAIC0xMTQsNiArMTE1LDcgQEAgcHVibGljOgogICAgIH0K
ICAgICB2b2lkIG1vdmUoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0IHkpIHsgbV9yZWN0Lm1vdmUo
eCwgeSk7IH0KICAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3JlY3Qu
bW92ZShzaXplKTsgfQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkg
eyBtX3JlY3QubW92ZUJ5KHBvaW50KTsgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0LmlzRW1wdHkoKTsgfQogICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBMYXlv
dXRSZWN0JiByZWN0KSB7IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0cyhyZWN0KTsgfQpAQCAtMjUx
LDYgKzI1Myw1MiBAQCBwdWJsaWM6CiAjZW5kaWYKIH07CiAKK3N0cnVjdCBMYXllckZyYWdtZW50
IHsKK3B1YmxpYzoKKyAgICBMYXllckZyYWdtZW50KCkKKyAgICAgICAgOiBzaG91bGRQYWludENv
bnRlbnQoZmFsc2UpCisgICAgeyB9CisKKyAgICB2b2lkIHNldFJlY3RzKGNvbnN0IExheW91dFJl
Y3QmIGJvdW5kcywgY29uc3QgQ2xpcFJlY3QmIGJhY2tncm91bmQsIGNvbnN0IENsaXBSZWN0JiBm
b3JlZ3JvdW5kLCBjb25zdCBDbGlwUmVjdCYgb3V0bGluZSkKKyAgICB7CisgICAgICAgIGxheWVy
Qm91bmRzID0gYm91bmRzOworICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IGJhY2tncm91bmQ7Cisg
ICAgICAgIGZvcmVncm91bmRSZWN0ID0gZm9yZWdyb3VuZDsKKyAgICAgICAgb3V0bGluZVJlY3Qg
PSBvdXRsaW5lOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBMYXlvdXRQb2lu
dCYgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbGF5ZXJCb3VuZHMubW92ZUJ5KG9mZnNldCk7Cisg
ICAgICAgIGJhY2tncm91bmRSZWN0Lm1vdmVCeShvZmZzZXQpOworICAgICAgICBmb3JlZ3JvdW5k
UmVjdC5tb3ZlQnkob2Zmc2V0KTsKKyAgICAgICAgb3V0bGluZVJlY3QubW92ZUJ5KG9mZnNldCk7
CisgICAgICAgIHBhZ2luYXRpb25DbGlwLm1vdmVCeShvZmZzZXQpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGludGVyc2VjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAg
YmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KHJlY3QpOworICAgICAgICBmb3JlZ3JvdW5kUmVjdC5p
bnRlcnNlY3QocmVjdCk7CisgICAgICAgIG91dGxpbmVSZWN0LmludGVyc2VjdChyZWN0KTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQ7CisgICAgTGF5b3V0UmVjdCBs
YXllckJvdW5kczsKKyAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdDsKKyAgICBDbGlwUmVjdCBm
b3JlZ3JvdW5kUmVjdDsKKyAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsKKyAgICAKKyAgICAvLyBV
bmlxdWUgdG8gcGFnaW5hdGVkIGZyYWdtZW50cy4gVGhlIHBoeXNpY2FsIHRyYW5zbGF0aW9uIHRv
IGFwcGx5IHRvIHNoaWZ0IHRoZSBsYXllciB3aGVuIHBhaW50aW5nL2hpdC10ZXN0aW5nLgorICAg
IExheW91dFBvaW50IHBhZ2luYXRpb25PZmZzZXQ7CisgICAgCisgICAgLy8gQWxzbyB1bmlxdWUg
dG8gcGFnaW5hdGVkIGZyYWdtZW50cy4gQW4gYWRkaXRpb25hbCBjbGlwIHRoYXQgYXBwbGllcyB0
byB0aGUgbGF5ZXIuIEl0IGlzIGluIGxheWVyLWxvY2FsCisgICAgLy8gKHBoeXNpY2FsKSBjb29y
ZGluYXRlcy4KKyAgICBMYXlvdXRSZWN0IHBhZ2luYXRpb25DbGlwOworfTsKKwordHlwZWRlZiBW
ZWN0b3I8TGF5ZXJGcmFnbWVudD4gTGF5ZXJGcmFnbWVudHM7CisKIGNsYXNzIFJlbmRlckxheWVy
IDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVu
ZGVyUmVwbGljYTsKQEAgLTQxOCw2ICs0NjYsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAg
ICBib29sIGlzUGFnaW5hdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BhZ2luYXRlZDsgfQorICAg
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsgfQogCiAgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0o
KTsKICAgICAKQEAgLTc4MSw2ICs4MzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaWV3cG9y
dENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbihWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29t
cG9zaXRlZFJlYXNvbiByZWFzb24pIHsgbV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRl
ZFJlYXNvbiA9IHJlYXNvbjsgfQogICAgIFZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVk
UmVhc29uIHZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Vmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24+
KG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24pOyB9CiAjZW5kaWYKKyAg
ICAKKyAgICBib29sIGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJu
IHJlbmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIHJlbmRlcmVyKCktPmlzUmVu
ZGVyRmxvd1RocmVhZCgpOyB9CiAKIHByaXZhdGU6CiAgICAgZW51bSBDb2xsZWN0TGF5ZXJzQmVo
YXZpb3IgeyBTdG9wQXRTdGFja2luZ0NvbnRleHRzLCBTdG9wQXRTdGFja2luZ0NvbnRhaW5lcnMg
fTsKQEAgLTg5MCw2ICs5NDEsMTkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50UGFnaW5hdGVk
Q2hpbGRMYXllcihSZW5kZXJMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRD
aGlsZExheWVySW50b0NvbHVtbnMoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzLCBjb25zdCBW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiYgY29sdW1uTGF5ZXJzLCBzaXplX3QgY29sdW1uSW5kZXgpOwog
CisgICAgdm9pZCBjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlS
ZWN0LAorICAgICAgICBDbGlwUmVjdHNUeXBlLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwID0g
UmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0g
MCk7CisgICAgdm9pZCB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVu
dHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgYm9vbCBzaG91
bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCk7CisgICAg
dm9pZCBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBH
cmFwaGljc0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4
dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3Qs
IGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJl
aGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lk
IHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBo
aWNzQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAor
ICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9v
bCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZp
b3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsCisgICAgICAgIGJvb2wg
c2VsZWN0aW9uT25seSwgYm9vbCBmb3JjZUJsYWNrVGV4dCk7CisgICAgdm9pZCBwYWludEZvcmVn
cm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZSwgY29uc3QgTGF5ZXJGcmFnbWVu
dHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVo
YXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQg
cGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJP
YmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dD
b250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CisgICAgdm9pZCBwYWludE1hc2tGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwor
CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBS
ZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgYm9v
bCBhcHBsaWVkVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSA9IDAsIGRvdWJsZSogek9m
ZnNldCA9IDApOwpAQCAtOTEwLDYgKzk3NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiBjb250YWluZXJUcmFu
c2Zvcm1TdGF0ZSkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJC
b3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OworICAg
IGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0OworICAgIGJv
b2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYpIGNvbnN0OwogCiAgICAgYm9vbCBsaXN0Q29udGVudHNPcGFxdWVJ
blJlY3QoY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4qLCBjb25zdCBMYXlvdXRSZWN0JikgY29u
c3Q7CiAKQEAgLTExODQsNiArMTI1MCw5IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJTY3JvbGxi
YXJQYXJ0KiBtX3Njcm9sbENvcm5lcjsKICAgICBSZW5kZXJTY3JvbGxiYXJQYXJ0KiBtX3Jlc2l6
ZXI7CiAKKyAgICAvLyBQb2ludGVyIHRvIHRoZSBlbmNsb3NpbmcgUmVuZGVyTGF5ZXIgdGhhdCBj
YXVzZWQgdXMgdG8gYmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdlIGFyZSBub3QgcGFnaW5hdGVk
LgorICAgIFJlbmRlckxheWVyKiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKKwogcHJpdmF0
ZToKICAgICBJbnRSZWN0IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3Bw
CShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5CbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsNiBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlTXVsCiAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBuZXdTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOwogICAgIG5ld1N0eWxlLT5pbmhl
cml0RnJvbShwYXJlbnRTdHlsZSk7CiAgICAgbmV3U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwot
ICAgIG5ld1N0eWxlLT5zZXRQb3NpdGlvbihSZWxhdGl2ZVBvc2l0aW9uKTsKLSAgICBuZXdTdHls
ZS0+c2V0WkluZGV4KDApOwogICAgIG5ld1N0eWxlLT5mb250KCkudXBkYXRlKDApOwogICAgIHJl
dHVybiBuZXdTdHlsZS5yZWxlYXNlKCk7CiB9CkBAIC0xNjIsNiArMTYwLDE1IEBAIHZvaWQgUmVu
ZGVyTXVsdGlDb2x1bW5CbG9jazo6ZW5zdXJlQ29sdW0KICAgICBjb2x1bW5TZXQtPnNldFJlcXVp
cmVzQmFsYW5jaW5nKHJlcXVpcmVzQmFsYW5jaW5nKCkpOwogfQogCit2b2lkIFJlbmRlck11bHRp
Q29sdW1uQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5p
dCBwYWdlTG9naWNhbEhlaWdodCkKK3sKKyAgICBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2socmVs
YXlvdXRDaGlsZHJlbiwgcGFnZUxvZ2ljYWxIZWlnaHQpOworICAgIAorICAgIC8vIFNoaWZ0IHRo
ZSBmbG93IHRocmVhZCBiYWNrIHVwIHRvIHRoZSB0b3Agb2YgdGhlIGJsb2NrLgorICAgIGlmIChm
bG93VGhyZWFkKCkpCisgICAgICAgIGZsb3dUaHJlYWQoKS0+c2V0TG9naWNhbFRvcChib3JkZXJC
ZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSk7Cit9CisKIGNvbnN0IGNoYXIqIFJlbmRlck11bHRp
Q29sdW1uQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogewogICAgIGlmIChpc0Zsb2F0aW5nKCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVt
bkJsb2NrLmgJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAg
cHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dDsKIAorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBPVkVSUklERTsKKwogICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVMb2dpY2FsV2lkdGhBbmRDb2x1bW5XaWR0aCgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBjaGVja0ZvclBhZ2luYXRpb25Mb2dpY2FsSGVpZ2h0Q2hhbmdlKExheW91
dFVuaXQmIHBhZ2VMb2dpY2FsSGVpZ2h0LCBib29sJiBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQs
IGJvb2wmIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0KSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIGJvb2wgcmVsYXlvdXRGb3JQYWdpbmF0aW9uKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2lj
YWxIZWlnaHQsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFN0YXRlTWFpbnRh
aW5lciYpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVs
dGlDb2x1bW5TZXQuaCIKIAotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJQ
YWludEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlck11
bHRpQ29sdW1uQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQu
aCIKIApAQCAtMjQ5LDEwICsyNDksNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWlu
dE9iamVjdChQCiAgICAgaWYgKCFtX2Zsb3dUaHJlYWQgfHwgIWlzVmFsaWQoKSB8fCAocGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQ
YWludFBoYXNlU2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0UmVnaW9uT2Jq
ZWN0c1JlZ2lvblN0eWxlKCk7CiAgICAgcGFpbnRDb2x1bW5SdWxlcyhwYWludEluZm8sIHBhaW50
T2Zmc2V0KTsKLSAgICBwYWludENvbHVtbkNvbnRlbnRzKHBhaW50SW5mbywgcGFpbnRPZmZzZXQp
OwotICAgIHJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpOwogfQogCiB2b2lkIFJl
bmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1bGVzKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0zMDksNzYgKzMwNiw2IEBAIHZv
aWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBhaW50Q29sdW1uUnUKICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBhaW50Q29sdW1uQ29udGVudHMoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLXsKLSAgICAvLyBGb3IgZWFj
aCByZWN0YW5nbGUsIHNldCBpdCBhcyB0aGUgcmVnaW9uIHJlY3RhbmdsZSBhbmQgdGhlbiBsZXQg
ZmxvdyB0aHJlYWQgcGFpbnRpbmcgZG8gdGhlIHJlc3QuCi0gICAgLy8gV2UgbWFrZSBtdWx0aXBs
ZSBjYWxscyB0byBwYWludEZsb3dUaHJlYWRQb3J0aW9uSW5SZWdpb24sIGNoYW5naW5nIHRoZSBy
ZWN0YW5nbGVzIGVhY2ggdGltZS4KLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50
KCk7Ci0gICAgaWYgKCFjb2xDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0VW5p
dCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29s
Q291bnQ7IGkrKykgewotICAgICAgICAvLyBGaXJzdCB3ZSBnZXQgdGhlIGNvbHVtbiByZWN0LCB3
aGljaCBpcyBpbiBvdXIgbG9jYWwgY29vcmRpbmF0ZSBzcGFjZSwgYW5kIHdlIG1ha2UgaXQgcGh5
c2ljYWwgYW5kIGFwcGx5Ci0gICAgICAgIC8vIHRoZSBwYWludCBvZmZzZXQgdG8gaXQuIFRoYXQg
Z2l2ZXMgdXMgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIHRoYXQgd2Ugd2FudCB0byBwYWludCB0aGUg
Y29sdW1uIGF0LgotICAgICAgICBMYXlvdXRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoaSk7
Ci0gICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShjb2xSZWN0KTsKLSAgICAgICAgY29sUmVjdC5t
b3ZlQnkocGFpbnRPZmZzZXQpOwotICAgICAgICAKLSAgICAgICAgLy8gTmV4dCB3ZSBnZXQgdGhl
IHBvcnRpb24gb2YgdGhlIGZsb3cgdGhyZWFkIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhpcyBjb2x1
bW4uCi0gICAgICAgIExheW91dFJlY3QgZmxvd1RocmVhZFBvcnRpb24gPSBmbG93VGhyZWFkUG9y
dGlvblJlY3RBdChpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyBnZXQgdGhlIG92ZXJmbG93
IHJlY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY29sdW1uLgotICAgICAgICBMYXlvdXRSZWN0
IGZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24gPSBmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVj
dChmbG93VGhyZWFkUG9ydGlvbiwgaSwgY29sQ291bnQsIGNvbEdhcCk7Ci0KLSAgICAgICAgLy8g
RG8gdGhlIHBhaW50IHdpdGggdGhlIGNvbXB1dGVkIHJlY3RzLgotICAgICAgICBmbG93VGhyZWFk
KCktPnBhaW50Rmxvd1RocmVhZFBvcnRpb25JblJlZ2lvbihwYWludEluZm8sIHRoaXMsIGZsb3dU
aHJlYWRQb3J0aW9uLCBmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uLCBjb2xSZWN0LmxvY2F0aW9u
KCkpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJNdWx0aUNvbHVtblNldDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQotewotICAgIExheW91
dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7
Ci0KLSAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlz
IGFzc3VtZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKLSAgICAvLyBmb3JlZ3JvdW5k
IHBoYXNlICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcyku
Ci0gICAgLy8gRklYTUU6IE9uY2Ugd2Ugc3VwcG9ydCBvdmVyZmxvdywgd2UgbmVlZCB0byBpbnRl
cnNlY3Qgd2l0aCB0aGF0IGFuZCBub3Qgd2l0aCB0aGUgYm91bmRzIHJlY3QuCi0gICAgTGF5b3V0
UmVjdCBib3VuZHNSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKGxvY2F0aW9uSW5Db250YWlu
ZXIucmVnaW9uKCkpOwotICAgIGJvdW5kc1JlY3QubW92ZUJ5KGFkanVzdGVkTG9jYXRpb24pOwot
ICAgIGlmICghdmlzaWJsZVRvSGl0VGVzdGluZygpIHx8IGFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdy
b3VuZCB8fCAhbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gVGhlIHBvaW50IGlzIGluIG9uZSBzcGVj
aWZpYyBjb2x1bW4uIFNpbmNlIGNvbHVtbnMgY2FuJ3Qgb3ZlcmxhcCwgd2UgZG9uJ3QgZXZlciBo
YXZlIHRvIHRlc3QKLSAgICAvLyBtdWx0aXBsZSBjb2x1bW5zLiBQdXQgdGhlIAotICAgIAotICAg
IC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGp1bXAgcmlnaHQgdG8gdGhlIHNwZWNpZmlj
IGNvbHVtbiBieSBqdXN0IGRvaW5nIG1hdGggb24gdGhlIHBvaW50LiBTaW5jZSBjb2x1bW5zCi0g
ICAgLy8gY2FuJ3Qgb3ZlcmxhcCwgd2Ugc2hvdWxkbid0IGhhdmUgdG8gd2FsayBldmVyeSBjb2x1
bW4gbGlrZSB0aGlzLiBUaGUgb2xkIGNvbHVtbiBjb2RlIHdhbGtlZCBhbGwgdGhlIGNvbHVtbnMs
IHRob3VnaCwKLSAgICAvLyBzbyB0aGlzIGlzIG5vIHdvcnNlLiBXZSdkIGhhdmUgdG8gd2F0Y2gg
b3V0IGZvciByZWN0LWJhc2VkIGhpdCB0ZXN0aW5nLCB0aG91Z2gsIHdoaWNoIGFjdHVhbGx5IGNv
dWxkIG92ZXJsYXAKLSAgICAvLyBtdWx0aXBsZSBjb2x1bW5zLgotICAgIExheW91dFVuaXQgY29s
R2FwID0gY29sdW1uR2FwKCk7Ci0gICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3VudCgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAg
IC8vIEZpcnN0IHdlIGdldCB0aGUgY29sdW1uIHJlY3QsIHdoaWNoIGlzIGluIG91ciBsb2NhbCBj
b29yZGluYXRlIHNwYWNlLCBhbmQgd2UgbWFrZSBpdCBwaHlzaWNhbCBhbmQgYXBwbHkKLSAgICAg
ICAgLy8gdGhlIGhpdCB0ZXN0IG9mZnNldCB0byBpdC4gVGhhdCBnaXZlcyB1cyB0aGUgcGh5c2lj
YWwgbG9jYXRpb24gdGhhdCB3ZSB3YW50IHRvIHBhaW50IHRoZSBjb2x1bW4gYXQuCi0gICAgICAg
IExheW91dFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChpKTsKLSAgICAgICAgZmxpcEZvcldy
aXRpbmdNb2RlKGNvbFJlY3QpOwotICAgICAgICBjb2xSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5leHQgd2UgZ2V0IHRoZSBwb3J0aW9uIG9mIHRo
ZSBmbG93IHRocmVhZCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgY29sdW1uLgotICAgICAgICBM
YXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9uID0gZmxvd1RocmVhZFBvcnRpb25SZWN0QXQoaSk7
Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgZ2V0IHRoZSBvdmVyZmxvdyByZWN0IHRoYXQgY29y
cmVzcG9uZHMgdG8gdGhlIGNvbHVtbi4KLSAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkT3Zl
cmZsb3dQb3J0aW9uID0gZmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoZmxvd1RocmVhZFBv
cnRpb24sIGksIGNvbENvdW50LCBjb2xHYXApOwotCi0gICAgICAgIC8vIERvIHRoZSBoaXQgdGVz
dCB3aXRoIHRoZSBjb21wdXRlZCByZWN0cy4KLSAgICAgICAgaWYgKGZsb3dUaHJlYWQoKS0+aGl0
VGVzdEZsb3dUaHJlYWRQb3J0aW9uSW5SZWdpb24odGhpcywgZmxvd1RocmVhZFBvcnRpb24sIGZs
b3dUaHJlYWRPdmVyZmxvd1BvcnRpb24sIHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRh
aW5lciwgY29sUmVjdC5sb2NhdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRh
aW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKLSAgICByZXR1
cm4gIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcmVxdWVzdCwg
bG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCk7Ci19Ci0KIHZvaWQgUmVuZGVyTXVsdGlD
b2x1bW5TZXQ6OnJlcGFpbnRGbG93VGhyZWFkQ29udGVudChjb25zdCBMYXlvdXRSZWN0JiByZXBh
aW50UmVjdCwgYm9vbCBpbW1lZGlhdGUpIGNvbnN0CiB7CiAgICAgLy8gRmlndXJlIG91dCB0aGUg
c3RhcnQgYW5kIGVuZCBjb2x1bW5zIGFuZCBvbmx5IGNoZWNrIHdpdGhpbiB0aGF0IHJhbmdlIHNv
IHRoYXQgd2UgZG9uJ3Qgd2FsayB0aGUKQEAgLTQxNyw2ICszNDQsODYgQEAgdm9pZCBSZW5kZXJN
dWx0aUNvbHVtblNldDo6cmVwYWludEZsb3dUaAogICAgIH0KIH0KIAordm9pZCBSZW5kZXJNdWx0
aUNvbHVtblNldDo6Y29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYg
ZnJhZ21lbnRzLCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94LCBjb25zdCBMYXlv
dXRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgLy8gUHV0IHRoZSBsYXllciBib3VuZHMgaW50byBm
bG93IHRocmVhZC1sb2NhbCBjb29yZGluYXRlcyBieSBmbGlwcGluZyBpdCBmaXJzdC4KKyAgICBM
YXlvdXRSZWN0IGxheWVyQm91bmRzSW5GbG93VGhyZWFkKGxheWVyQm91bmRpbmdCb3gpOworICAg
IGZsb3dUaHJlYWQoKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzSW5GbG93VGhyZWFk
KTsKKworICAgIC8vIERvIHRoZSBzYW1lIGZvciB0aGUgZGlydHkgcmVjdC4KKyAgICBMYXlvdXRS
ZWN0IGRpcnR5UmVjdEluRmxvd1RocmVhZChkaXJ0eVJlY3QpOworICAgIGZsb3dUaHJlYWQoKS0+
ZmxpcEZvcldyaXRpbmdNb2RlKGRpcnR5UmVjdEluRmxvd1RocmVhZCk7CisKKyAgICAvLyBOb3cg
d2UgY2FuIGNvbXBhcmUgd2l0aCB0aGUgZmxvdyB0aHJlYWQgcG9ydGlvbnMgb3duZWQgYnkgZWFj
aCBjb2x1bW4uIEZpcnN0IGxldCdzCisgICAgLy8gc2VlIGlmIHRoZSByZWN0IGludGVyc2VjdHMg
b3VyIGZsb3cgdGhyZWFkIHBvcnRpb24gYXQgYWxsLgorICAgIExheW91dFJlY3QgY2xpcHBlZFJl
Y3QobGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQpOworICAgIGNsaXBwZWRSZWN0LmludGVyc2VjdChS
ZW5kZXJSZWdpb246OmZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KCkpOworICAgIGlmIChj
bGlwcGVkUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBOb3cg
d2Uga25vdyB3ZSBpbnRlcnNlY3QgYXQgbGVhc3Qgb25lIGNvbHVtbi4gTGV0J3MgZmlndXJlIG91
dCB0aGUgbG9naWNhbCB0b3AgYW5kIGxvZ2ljYWwKKyAgICAvLyBib3R0b20gb2YgdGhlIGFyZWEg
d2UncmUgY2hlY2tpbmcuCisgICAgTGF5b3V0VW5pdCBsYXllckxvZ2ljYWxUb3AgPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQueSgpIDogbGF5ZXJC
b3VuZHNJbkZsb3dUaHJlYWQueCgpOworICAgIExheW91dFVuaXQgbGF5ZXJMb2dpY2FsQm90dG9t
ID0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsYXllckJvdW5kc0luRmxvd1RocmVhZC5t
YXhZKCkgOiBsYXllckJvdW5kc0luRmxvd1RocmVhZC5tYXhYKCkpIC0gMTsKKyAgICAKKyAgICAv
LyBGaWd1cmUgb3V0IHRoZSBzdGFydCBhbmQgZW5kIGNvbHVtbnMgYW5kIG9ubHkgY2hlY2sgd2l0
aGluIHRoYXQgcmFuZ2Ugc28gdGhhdCB3ZSBkb24ndCB3YWxrIHRoZQorICAgIC8vIGVudGlyZSBj
b2x1bW4gc2V0LgorICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gY29sdW1uSW5kZXhBdE9mZnNl
dChsYXllckxvZ2ljYWxUb3ApOworICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IGNvbHVtbkluZGV4
QXRPZmZzZXQobGF5ZXJMb2dpY2FsQm90dG9tKTsKKyAgICAKKyAgICBMYXlvdXRVbml0IGNvbExv
Z2ljYWxXaWR0aCA9IGNvbXB1dGVkQ29sdW1uV2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGNvbEdh
cCA9IGNvbHVtbkdhcCgpOworICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQoKTsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydENvbHVtbjsgaSA8PSBlbmRDb2x1bW47
IGkrKykgeworICAgICAgICAvLyBHZXQgdGhlIHBvcnRpb24gb2YgdGhlIGZsb3cgdGhyZWFkIHRo
YXQgY29ycmVzcG9uZHMgdG8gdGhpcyBjb2x1bW4uCisgICAgICAgIExheW91dFJlY3QgZmxvd1Ro
cmVhZFBvcnRpb24gPSBmbG93VGhyZWFkUG9ydGlvblJlY3RBdChpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIE5vdyBnZXQgdGhlIG92ZXJmbG93IHJlY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUg
Y29sdW1uLgorICAgICAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24gPSBm
bG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdChmbG93VGhyZWFkUG9ydGlvbiwgaSwgY29sQ291
bnQsIGNvbEdhcCk7CisKKyAgICAgICAgLy8gSW4gb3JkZXIgdG8gY3JlYXRlIGEgZnJhZ21lbnQg
d2UgbXVzdCBpbnRlcnNlY3QgdGhlIHBvcnRpb24gcGFpbnRlZCBieSB0aGlzIGNvbHVtbi4KKyAg
ICAgICAgTGF5b3V0UmVjdCBjbGlwcGVkUmVjdChsYXllckJvdW5kc0luRmxvd1RocmVhZCk7Cisg
ICAgICAgIGNsaXBwZWRSZWN0LmludGVyc2VjdChmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uKTsK
KyAgICAgICAgaWYgKGNsaXBwZWRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgLy8gV2UgYWxzbyBuZWVkIHRvIGludGVyc2VjdCB0aGUgZGly
dHkgcmVjdC4gV2UgaGF2ZSB0byBhcHBseSBhIHRyYW5zbGF0aW9uIGFuZCBzaGlmdCBiYXNlZCBv
ZmYKKyAgICAgICAgLy8gb3VyIGNvbHVtbiBpbmRleC4KKyAgICAgICAgTGF5b3V0UG9pbnQgdHJh
bnNsYXRpb25PZmZzZXQ7CisgICAgICAgIExheW91dFVuaXQgaW5saW5lT2Zmc2V0ID0gaSAqIChj
b2xMb2dpY2FsV2lkdGggKyBjb2xHYXApOworICAgICAgICBpZiAoIXN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgICAgIGlubGluZU9mZnNldCA9IC1pbmxpbmVPZmZz
ZXQ7CisgICAgICAgIHRyYW5zbGF0aW9uT2Zmc2V0LnNldFgoaW5saW5lT2Zmc2V0KTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBibG9ja09mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAt
Zmxvd1RocmVhZFBvcnRpb24ueSgpIDogLWZsb3dUaHJlYWRQb3J0aW9uLngoKTsKKyAgICAgICAg
aWYgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHN0eWxlKCktPndyaXRpbmdNb2RlKCkpKQor
ICAgICAgICAgICAgYmxvY2tPZmZzZXQgPSAtYmxvY2tPZmZzZXQ7CisgICAgICAgIHRyYW5zbGF0
aW9uT2Zmc2V0LnNldFkoYmxvY2tPZmZzZXQpOworICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCisgICAgICAgICAgICB0cmFuc2xhdGlvbk9mZnNldCA9IHRyYW5zbGF0aW9u
T2Zmc2V0LnRyYW5zcG9zZWRQb2ludCgpOworICAgICAgICAKKyAgICAgICAgLy8gU2hpZnQgdGhl
IGRpcnR5IHJlY3QgdG8gYmUgaW4gZmxvdyB0aHJlYWQgY29vcmRpbmF0ZXMgd2l0aCB0aGlzIHRy
YW5zbGF0aW9uIGFwcGxpZWQuCisgICAgICAgIExheW91dFJlY3QgdHJhbnNsYXRlZERpcnR5UmVj
dChkaXJ0eVJlY3RJbkZsb3dUaHJlYWQpOworICAgICAgICB0cmFuc2xhdGVkRGlydHlSZWN0Lm1v
dmVCeSgtdHJhbnNsYXRpb25PZmZzZXQpOworICAgICAgICAKKyAgICAgICAgLy8gU2VlIGlmIHdl
IGludGVyc2VjdCB0aGUgZGlydHkgcmVjdC4KKyAgICAgICAgY2xpcHBlZFJlY3QgPSBsYXllckJv
dW5kc0luRmxvd1RocmVhZDsKKyAgICAgICAgY2xpcHBlZFJlY3QuaW50ZXJzZWN0KHRyYW5zbGF0
ZWREaXJ0eVJlY3QpOworICAgICAgICBpZiAoY2xpcHBlZFJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBTb21ldGhpbmcgZG9lcyBuZWVk
IHRvIHBhaW50IGluIHRoaXMgY29sdW1uLiBNYWtlIGEgZnJhZ21lbnQgbm93IGFuZCBzdXBwbHkg
dGhlIHBoeXNpY2FsIHRyYW5zbGF0aW9uCisgICAgICAgIC8vIG9mZnNldCBhbmQgdGhlIGNsaXAg
cmVjdCBmb3IgdGhlIGNvbHVtbiB3aXRoIHRoYXQgb2Zmc2V0IGFwcGxpZWQuCisgICAgICAgIExh
eWVyRnJhZ21lbnQgZnJhZ21lbnQ7CisgICAgICAgIGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQg
PSB0cmFuc2xhdGlvbk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExheW91dFJlY3QgZmxpcHBl
ZEZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24oZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbik7Cisg
ICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1RocmVhZE92ZXJmbG93UG9ydGlv
bik7CisgICAgICAgIGZyYWdtZW50LnBhZ2luYXRpb25DbGlwID0gZmxpcHBlZEZsb3dUaHJlYWRP
dmVyZmxvd1BvcnRpb247CisgICAgICAgIGZyYWdtZW50cy5hcHBlbmQoZnJhZ21lbnQpOworICAg
IH0KK30KKwogY29uc3QgY2hhciogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnJlbmRlck5hbWUoKSBj
b25zdAogeyAgICAKICAgICByZXR1cm4gIlJlbmRlck11bHRpQ29sdW1uU2V0IjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCShyZXZp
c2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNiBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29u
c3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWdl
TG9naWNhbFdpZHRoKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jb21wdXRlZENvbHVtbldp
ZHRoOyB9CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV9jb21wdXRlZENvbHVtbkhlaWdodDsgfQpAQCAtMTExLDEwICsx
MTAsMTEgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludEZsb3dUaHJl
YWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGltbWVkaWF0ZSkg
Y29uc3QgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdExheWVyRnJhZ21lbnRz
KFZlY3RvcjxMYXllckZyYWdtZW50PiYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdC
b3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkgT1ZFUlJJREU7CisgICAgCiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBwYWlu
dENvbHVtblJ1bGVzKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7
Ci0gICAgdm9pZCBwYWludENvbHVtbkNvbnRlbnRzKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCk7CiAKICAgICBMYXlvdXRVbml0IGNvbHVtbkdhcCgpIGNvbnN0Owog
ICAgIExheW91dFJlY3QgY29sdW1uUmVjdEF0KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKHJldmlzaW9uIDE0NDAwNykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBMYXll
ckZyYWdtZW50OwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyQm94UmVnaW9uSW5mbzsK
IGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CkBAIC0xMjcsNiArMTI4LDggQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3QgTGF5b3V0
UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlKSBjb25zdDsKIAorICAgIHZpcnR1YWwg
dm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVudHMoVmVjdG9yPExheWVyRnJhZ21lbnQ+JiwgY29uc3Qg
TGF5b3V0UmVjdCYsIGNvbnN0IExheW91dFJlY3QmKSB7IH07CisKIHByb3RlY3RlZDoKICAgICB2
b2lkIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwogICAgIHZvaWQgcmVzdG9yZVJlZ2lv
bk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7Cg==
</data>
<flag name="commit-queue"
          id="210844"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190222</attachid>
            <date>2013-02-26 00:32:56 -0800</date>
            <delta_ts>2013-02-26 09:27:46 -0800</delta_ts>
            <desc>Make Fixed positioning work.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>67798</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24g
MTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzUwNSw4ICs3NTA1LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
b2Zmc2V0RnJvbUxvZ2ljYQogICAgIC8vIEZJWE1FOiBSaWdodCBub3csIHRoaXMgYXNzZXJ0IGlz
IGhpdCBvdXRzaWRlIGxheW91dCwgZnJvbSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCBpbiBz
ZWxlY3Rpb25HYXBSZWN0c0ZvclJlcGFpbnQgKGNhbGxlZCBmcm9tIEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3RBbGwpLgogICAgIC8vIEFTU0VSVChpblJlbmRlckZsb3dUaHJlYWQoKSk7CiAKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHNsb3dlciBwYXRoIHRoYXQgZG9lc24ndCB1c2UgbGF5b3V0IHN0
YXRlIGFuZCByZWxpZXMgb24gZ2V0dGluZyB5b3VyIGxvZ2ljYWwgdG9wIGluc2lkZSB0aGUgZW5j
bG9zaW5nIGZsb3cgdGhyZWFkLiBJdCBkb2Vzbid0Ci0gICAgLy8gd29yayB3aXRoIGNvbHVtbnMg
b3IgcGFnZXMgY3VycmVudGx5LCBidXQgaXQgc2hvdWxkIG9uY2UgdGhleSBoYXZlIGJlZW4gc3dp
dGNoZWQgb3ZlciB0byB1c2luZyBmbG93IHRocmVhZHMuCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSBzbG93ZXIgcGF0aCB0aGF0IGRvZXNuJ3QgdXNlIGxheW91dCBzdGF0ZSBhbmQgcmVsaWVzIG9u
IGdldHRpbmcgeW91ciBsb2dpY2FsIHRvcCBpbnNpZGUgdGhlIGVuY2xvc2luZyBmbG93IHRocmVh
ZC4gSXQgd29ya3MKKyAgICAvLyB3aXRoIHRoZSBuZXcgY29sdW1ucyAoYnV0IG5vdCB0aGUgb2xk
IG9uZXMgb3Igd2l0aCBwcmludGluZykuCiAgICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTc1MTUsOSArNzUxNSw4IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2EKIAogICAgIHdoaWxlIChjdXJyZW50QmxvY2sgJiYg
IWN1cnJlbnRCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKICAgICAgICAgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lckJsb2NrID0gY3VycmVudEJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLSAg
ICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrKTsKICAgICAgICAgaWYgKCFjb250YWluZXJCbG9j
aykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIDA7IC8vIFRoaXMg
Y2FuIGhhcHBlbiBmb3IgZml4ZWQvYWJzLXBvc2l0aW9uZWQgZWxlbWVudHMgaW5zaWRlIGNvbHVt
bnMuCiAgICAgICAgIExheW91dFBvaW50IGN1cnJlbnRCbG9ja0xvY2F0aW9uID0gY3VycmVudEJs
b2NrLT5sb2NhdGlvbigpOwogCiAgICAgICAgIGlmIChjb250YWluZXJCbG9jay0+c3R5bGUoKS0+
d3JpdGluZ01vZGUoKSAhPSBjdXJyZW50QmxvY2stPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJ
KHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU5LDYgKzk1OSwxNiBAQCB2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dpCiAgICAgICAgIHZpZXcoKS0+Zmxvd1RocmVh
ZENvbnRyb2xsZXIoKS0+ZGVjcmVtZW50Rmxvd1RocmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWlnaHRS
ZWdpb25zKCk7CiB9CiAKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdExheWVyRnJhZ21l
bnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAg
ICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVkKTsKKyAgICAKKyAgICBmb3IgKFJlbmRlclJl
Z2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRl
ciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgICAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvbiA9ICppdGVyOworICAgICAgICByZWdpb24tPmNvbGxlY3RMYXllckZyYWdtZW50cyhs
YXllckZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0JveCwgZGlydHlSZWN0KTsKKyAgICB9Cit9CisK
IEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcjo6Q3VycmVudFJlbmRlckZsb3dUaHJl
YWRNYWludGFpbmVyKFJlbmRlckZsb3dUaHJlYWQqIHJlbmRlckZsb3dUaHJlYWQpCiAgICAgOiBt
X3JlbmRlckZsb3dUaHJlYWQocmVuZGVyRmxvd1RocmVhZCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkocmV2aXNpb24gMTQ0MDA3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBMYXll
ckZyYWdtZW50OwogY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKIGNsYXNzIFJlbmRlclN0eWxlOwog
Y2xhc3MgUmVuZGVyUmVnaW9uOwpAQCAtMTQzLDYgKzE0NCw4IEBAIHB1YmxpYzoKICAgICBib29s
IGlzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnRDb25zaXN0ZW50KCkgY29uc3Q7CiAjZW5k
aWYKIAorICAgIHZvaWQgY29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50
PiYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCk7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3QgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsNyBAQCBS
ZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlCiAgICAgLCBtX3JlZmxlY3Rp
b24oMCkKICAgICAsIG1fc2Nyb2xsQ29ybmVyKDApCiAgICAgLCBtX3Jlc2l6ZXIoMCkKKyAgICAs
IG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKDApCiB7CiAgICAgbV9pc05vcm1hbEZsb3dPbmx5
ID0gc2hvdWxkQmVOb3JtYWxGbG93T25seSgpOwogICAgIG1faXNTZWxmUGFpbnRpbmdMYXllciA9
IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTQwNSw4ICs0MDYsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUgogCiAgICAgaWYgKGZsYWdzICYgVXBk
YXRlUGFnaW5hdGlvbikKICAgICAgICAgdXBkYXRlUGFnaW5hdGlvbigpOwotICAgIGVsc2UKKyAg
ICBlbHNlIHsKICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IGZhbHNlOworICAgICAgICBtX2VuY2xv
c2luZ1BhZ2luYXRpb25MYXllciA9IDA7CisgICAgfQogCiAgICAgaWYgKG1faGFzVmlzaWJsZUNv
bnRlbnQpIHsKICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsK
QEAgLTQ1MCw3ICs0NTMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
cyhSCiAjZW5kaWYKIAogICAgIGlmICh1c2VSZWdpb25CYXNlZENvbHVtbnMoKSAmJiByZW5kZXJl
cigpLT5pc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICBtX2lzUGFnaW5hdGVk
ID0gdHJ1ZTsKKyAgICAgICAgdXBkYXRlUGFnaW5hdGlvbigpOwogICAgICAgICBmbGFncyB8PSBV
cGRhdGVQYWdpbmF0aW9uOwogICAgIH0KICAgICAKQEAgLTkyMywyNSArOTI2LDMyIEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OnVzZVJlZ2lvbkJhc2VkQ29sdW1ucygKIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZVBhZ2luYXRpb24oKQogewogICAgIG1faXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAgICBtX2Vu
Y2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7CisKICAgICBpZiAoaXNDb21wb3NpdGVkKCkgfHwg
IXBhcmVudCgpKQogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBXZSB3aWxsIGhhdmUgdG8gZGVh
bCB3aXRoIHBhZ2luYXRlZCBjb21wb3NpdGluZyBsYXllcnMgc29tZWRheS4KICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogRm9yIG5vdyB0aGUgUmVuZGVyVmlldyBjYW4ndCBiZSBwYWdpbmF0ZWQu
ICBFdmVudHVhbGx5IHByaW50aW5nIHdpbGwgbW92ZSB0byBhIG1vZGVsIHdoZXJlIGl0IGlzIHRo
b3VnaC4KLSAgICAKKwogICAgIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcGFn
aW5hdGVkIGJvb2xlYW5zIGZvciB0aGUgb2xkIGNvbHVtbiBjb2RlIGFuZCB0aGUgbmV3IGNvbHVt
biBjb2RlCiAgICAgLy8gaXMgdGhhdCBlYWNoIHBhZ2luYXRlZCBsYXllciBoYXMgdG8gcGFpbnQg
b24gaXRzIG93biB3aXRoIHRoZSBuZXcgY29kZS4gVGhlcmUgaXMgbm8KICAgICAvLyByZWN1cnJp
bmcgaW50byBjaGlsZCBsYXllcnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgbV9pc1BhZ2luYXRlZCBi
aXRzIGZvciB0aGUgbmV3IGNvbHVtbiBjb2RlIGNhbid0IGp1c3QgYmUgc2V0IG9uCiAgICAgLy8g
InJvb3RzIiB0aGF0IGdldCBzcGxpdCBhbmQgcGFpbnQgYWxsIHRoZWlyIGRlc2NlbmRhbnRzLiBJ
bnN0ZWFkIGVhY2ggbGF5ZXIgaGFzIHRvIGJlIGNoZWNrZWQgaW5kaXZpZHVhbGx5IGFuZAogICAg
IC8vIGdlbnVpbmVseSBrbm93IGlmIGl0IGlzIGdvaW5nIHRvIGhhdmUgdG8gc3BsaXQgaXRzZWxm
IHVwIHdoZW4gcGFpbnRpbmcgb25seSBpdHMgY29udGVudHMgKGFuZCBub3QgYW55IG90aGVyIGRl
c2NlbmRhbnQKLSAgICAvLyBsYXllcnMpLgorICAgIC8vIGxheWVycykuIFdlIHRyYWNrIGFuIGVu
Y2xvc2luZ1BhZ2luYXRpb25MYXllciBpbnN0ZWFkIG9mIHVzaW5nIGEgc2ltcGxlIGJpdCwgc2lu
Y2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGdldCBiYWNrCisgICAgLy8gdG8gdGhhdCBsYXllciBl
YXNpbHkuCiAgICAgYm9vbCBuZXdDb2x1bW5zVXNlZCA9IHVzZVJlZ2lvbkJhc2VkQ29sdW1ucygp
OwogICAgIGlmIChuZXdDb2x1bW5zVXNlZCAmJiByZW5kZXJlcigpLT5pc0luRmxvd1JlbmRlckZs
b3dUaHJlYWQoKSkgewotICAgICAgICBtX2lzUGFnaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgbV9l
bmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgPSB0aGlzOwogICAgICAgICByZXR1cm47CiAgICAgfQor
ICAgIAorICAgIC8vIEZJWE1FOiBIYW5kbGUgdHJhbnNmb3Jtcy4KKyAgICBpZiAobmV3Q29sdW1u
c1VzZWQgJiYgaGFzVHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc05v
cm1hbEZsb3dPbmx5KCkpIHsKICAgICAgICAgaWYgKG5ld0NvbHVtbnNVc2VkKQotICAgICAgICAg
ICAgbV9pc1BhZ2luYXRlZCA9IHBhcmVudCgpLT5pc1BhZ2luYXRlZCgpOworICAgICAgICAgICAg
bV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgPSBwYXJlbnQoKS0+ZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJl
bnQoKS0+cmVuZGVyZXIoKS0+aGFzQ29sdW1ucygpOwogICAgICAgICByZXR1cm47CkBAIC05NTYs
NyArOTY2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlvbigpCiAgICAgICAg
ICAgICAgY29udGFpbmluZ0Jsb2NrICYmIGNvbnRhaW5pbmdCbG9jayAhPSB2aWV3OwogICAgICAg
ICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2Nr
KCkpIHsKICAgICAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmhhc0xheWVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBtX2lzUGFnaW5hdGVkID0gY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5p
c1BhZ2luYXRlZCgpOworICAgICAgICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVy
ID0gY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4
MTQsMTIgKzE4MjQsMjAgQEAgc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJMYXllciogYWNjdW11
bAogICAgIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJl
bmRlcmVyKCk7CiAgICAgRVBvc2l0aW9uIHBvc2l0aW9uID0gcmVuZGVyZXItPnN0eWxlKCktPnBv
c2l0aW9uKCk7CiAKKyAgICAvLyBGSVhNRTogU3BlY2lhbCBjYXNpbmcgUmVuZGVyRmxvd1RocmVh
ZCBzbyBtdWNoIGZvciBmaXhlZCBwb3NpdGlvbmluZyBoZXJlIGlzIG5vdCBncmVhdC4KKyAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmaXhlZEZsb3dUaHJlYWRDb250YWluZXIgPSAwOworICAgIGlmIChw
b3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYmIHJlbmRlcmVyLT5pblJlbmRlckZsb3dUaHJlYWQo
KSkgeworICAgICAgICBmaXhlZEZsb3dUaHJlYWRDb250YWluZXIgPSByZW5kZXJlci0+ZW5jbG9z
aW5nUmVuZGVyRmxvd1RocmVhZCgpOworICAgICAgICBpZiAoIWZpeGVkRmxvd1RocmVhZENvbnRh
aW5lci0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICBmaXhlZEZsb3dUaHJl
YWRDb250YWluZXIgPSAwOworICAgIH0KKwogICAgIC8vIEZJWE1FOiBQb3NpdGlvbmluZyBvZiBv
dXQtb2YtZmxvdyhmaXhlZCwgYWJzb2x1dGUpIGVsZW1lbnRzIGNvbGxlY3RlZCBpbiBhIFJlbmRl
ckZsb3dUaHJlYWQKICAgICAvLyBtYXkgbmVlZCB0byBiZSByZXZpc2l0ZWQgaW4gYSBmdXR1cmUg
cGF0Y2guCiAgICAgLy8gSWYgdGhlIGZpeGVkIHJlbmRlcmVyIGlzIGluc2lkZSBhIFJlbmRlckZs
b3dUaHJlYWQsIHdlIHNob3VsZCBub3QgY29tcHV0ZSBsb2NhdGlvbiB1c2luZyBsb2NhbFRvQWJz
b2x1dGUsCiAgICAgLy8gc2luY2UgbG9jYWxUb0Fic29sdXRlIG1hcHMgdGhlIGNvb3JkaW5hdGVz
IGZyb20gbmFtZWQgZmxvdyB0byByZWdpb25zIGNvb3JkaW5hdGVzIGFuZCByZWdpb25zIGNhbiBi
ZQogICAgIC8vIHBvc2l0aW9uZWQgaW4gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBwbGFjZSBpbiB0
aGUgdmlld3BvcnQgKFJlbmRlclZpZXcpLgotICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0
aW9uICYmICFyZW5kZXJlci0+aW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgKCFhbmNlc3RvckxheWVy
IHx8IGFuY2VzdG9yTGF5ZXIgPT0gcmVuZGVyZXItPnZpZXcoKS0+bGF5ZXIoKSkpIHsKKyAgICBp
ZiAocG9zaXRpb24gPT0gRml4ZWRQb3NpdGlvbiAmJiAhZml4ZWRGbG93VGhyZWFkQ29udGFpbmVy
ICYmICghYW5jZXN0b3JMYXllciB8fCBhbmNlc3RvckxheWVyID09IHJlbmRlcmVyLT52aWV3KCkt
PmxheWVyKCkpKSB7CiAgICAgICAgIC8vIElmIHRoZSBmaXhlZCBsYXllcidzIGNvbnRhaW5lciBp
cyB0aGUgcm9vdCwganVzdCBhZGQgaW4gdGhlIG9mZnNldCBvZiB0aGUgdmlldy4gV2UgY2FuIG9i
dGFpbiB0aGlzIGJ5IGNhbGxpbmcKICAgICAgICAgLy8gbG9jYWxUb0Fic29sdXRlKCkgb24gdGhl
IFJlbmRlclZpZXcuCiAgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXItPmxvY2Fs
VG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIElzRml4ZWQpOwpAQCAtMTgzMCw3ICsxODQ4LDcgQEAg
c3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJMYXllciogYWNjdW11bAogICAgIC8vIEZvciB0aGUg
Zml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cyBpbnNpZGUgYSByZW5kZXIgZmxvdyB0aHJlYWQsIHdl
IHNob3VsZCBhbHNvIHNraXAgdGhlIGNvZGUgcGF0aCBiZWxvdwogICAgIC8vIE90aGVyd2lzZSwg
Zm9yIHRoZSBjYXNlIG9mIGFuY2VzdG9yTGF5ZXIgPT0gcm9vdExheWVyIGFuZCBmaXhlZCBwb3Np
dGlvbmVkIGVsZW1lbnQgY2hpbGQgb2YgYSB0cmFuc2Zvcm1lZAogICAgIC8vIGVsZW1lbnQgaW4g
cmVuZGVyIGZsb3cgdGhyZWFkLCB3ZSB3aWxsIGhpdCB0aGUgZml4ZWQgcG9zaXRpb25lZCBjb250
YWluZXIgYmVmb3JlIGhpdHRpbmcgdGhlIGFuY2VzdG9yIGxheWVyLgotICAgIGlmIChwb3NpdGlv
biA9PSBGaXhlZFBvc2l0aW9uICYmICFyZW5kZXJlci0+aW5SZW5kZXJGbG93VGhyZWFkKCkpIHsK
KyAgICBpZiAocG9zaXRpb24gPT0gRml4ZWRQb3NpdGlvbiAmJiAhZml4ZWRGbG93VGhyZWFkQ29u
dGFpbmVyKSB7CiAgICAgICAgIC8vIEZvciBhIGZpeGVkIGxheWVycywgd2UgbmVlZCB0byB3YWxr
IHVwIHRvIHRoZSByb290IHRvIHNlZSBpZiB0aGVyZSdzIGEgZml4ZWQgcG9zaXRpb24gY29udGFp
bmVyCiAgICAgICAgIC8vIChlLmcuIGEgdHJhbnNmb3JtZWQgbGF5ZXIpLiBJdCdzIGFuIGVycm9y
IHRvIGNhbGwgY29udmVydFRvTGF5ZXJDb29yZHMoKSBhY3Jvc3MgYSBsYXllciB3aXRoIGEgdHJh
bnNmb3JtLAogICAgICAgICAvLyBzbyB3ZSBzaG91bGQgYWx3YXlzIGZpbmQgdGhlIGFuY2VzdG9y
IGF0IG9yIGJlZm9yZSB3ZSBmaW5kIHRoZSBmaXhlZCBwb3NpdGlvbiBjb250YWluZXIuCkBAIC0x
ODgzLDcgKzE5MDEsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlckxheWVyKiBhY2N1bXVs
CiAKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCByZWFjaCBSZW5kZXJWaWV3IGxheWVyIHBhc3Qg
dGhlIFJlbmRlckZsb3dUaHJlYWQgbGF5ZXIgZm9yIGFueQogICAgICAgICAvLyBjaGlsZHJlbiBv
ZiB0aGUgUmVuZGVyRmxvd1RocmVhZC4KLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pblJlbmRlckZs
b3dUaHJlYWQoKSAmJiAhcmVuZGVyZXItPmlzUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICBp
ZiAocmVuZGVyZXItPmluUmVuZGVyRmxvd1RocmVhZCgpICYmICFsYXllci0+aXNPdXRPZkZsb3dS
ZW5kZXJGbG93VGhyZWFkKCkpCiAgICAgICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXIgIT0gcmVu
ZGVyZXItPnZpZXcoKS0+bGF5ZXIoKSk7CiAKICAgICAgICAgaWYgKGZvdW5kQW5jZXN0b3JGaXJz
dCkgewpAQCAtMzcxOCw3ICszNzM2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNv
bnRlbnRzKEdyYQogCiAgICAgICAgICAgICAvLyBSZXdpcmUgdGhlIG9sZCBjb250ZXh0IHRvIGEg
bWVtb3J5IGJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4gY2FwdHVyZSB0aGUgY29udGVudHMgb2YgdGhl
IGxheWVyLgogICAgICAgICAgICAgLy8gTk9URTogV2Ugc2F2ZWQgdGhlIG9sZCBjb250ZXh0IGlu
IHRoZSAidHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0IiBsb2NhbCB2YXJpYWJsZSwgdG8gYmUgYWJs
ZSB0byBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllcgotICAgICAgICAgICAgLy8gb24gdGhlIG9y
aWdpbmFsIGNvbnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIg
YWZ0ZXIgZWFjaCB0cmFuc3BhcmVueSBsYXllciBjYWxsLiBBbHNvLCBub3RlIHRoYXQgCisgICAg
ICAgICAgICAvLyBvbiB0aGUgb3JpZ2luYWwgY29udGV4dCBhbmQgYXZvaWQgZHVwbGljYXRpbmcg
ImJlZ2luRmlsdGVyRWZmZWN0IiBhZnRlciBlYWNoIHRyYW5zcGFyZW5jeSBsYXllciBjYWxsLiBB
bHNvLCBub3RlIHRoYXQgCiAgICAgICAgICAgICAvLyBiZWdpblRyYW5zcGFyZW5jeUxheWVycyB3
aWxsIG9ubHkgY3JlYXRlIGEgc2luZ2xlIGxhenkgdHJhbnNwYXJlbmN5IGxheWVyLCBldmVuIHRo
b3VnaCBpdCBpcyBjYWxsZWQgdHdpY2UgaW4gdGhpcyBtZXRob2QuCiAgICAgICAgICAgICBjb250
ZXh0ID0gZmlsdGVyUGFpbnRlci5iZWdpbkZpbHRlckVmZmVjdChjb250ZXh0KTsKIApAQCAtMzcz
MiwyOCArMzc1MCwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3Jh
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKLQotICAgIC8vIENhbGN1
bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQgdXNlIG9ubHkgd2hlbiB3ZSBuZWVkIHRoZW0u
Ci0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKLSAgICBDbGlwUmVjdCBkYW1hZ2VSZWN0LCBj
bGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0OwotICAgIExheW91dFBvaW50IHBhaW50T2Zmc2V0
OwogCi0gICAgaWYgKHNob3VsZFBhaW50Q29udGVudCB8fCBzaG91bGRQYWludE91dGxpbmUgfHwg
aXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7Ci0gICAgICAgIENsaXBSZWN0c0NvbnRleHQg
Y2xpcFJlY3RzQ29udGV4dChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxvY2FsUGFpbnRp
bmdJbmZvLnJlZ2lvbiwgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplLCBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdP
dmVyZmxvd0NvbnRlbnRzID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xp
cCk7Ci0gICAgICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RU
b0FwcGx5LCBvdXRsaW5lUmVjdCwgJm9mZnNldEZyb21Sb290KTsKLSAgICAgICAgcGFpbnRPZmZz
ZXQgPSB0b1BvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigp
ICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pOworICAgIGlmIChmaWx0
ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSAmJiBoYXZlVHJhbnNwYXJlbmN5KSB7
CisgICAgICAgIC8vIElmIHdlIGhhdmUgYSBmaWx0ZXIgYW5kIHRyYW5zcGFyZW5jeSwgd2UgaGF2
ZSB0byBlYWdlcmx5IHN0YXJ0IGEgdHJhbnNwYXJlbmN5IGxheWVyIGhlcmUsIHJhdGhlciB0aGFu
IHJpc2sgYSBjaGlsZCBsYXllciBsYXppbHkgc3RhcnRzIG9uZSB3aXRoIHRoZSB3cm9uZyBjb250
ZXh0LgorICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKICAgICB9CisjZW5kaWYK
IAotICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2
aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0OwotICAgIGJvb2wgc2VsZWN0aW9uT25s
eSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvclNlbGVj
dGlvbk9ubHk7Ci0gICAgCi0gICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yID0gUGFpbnRC
ZWhhdmlvck5vcm1hbDsKLSAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50
aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQotICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVo
YXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7Ci0gICAgZWxzZSBpZiAobG9jYWxQYWludEZsYWdzICYg
UGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5KQotICAgICAgICBwYWludEJlaGF2
aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9ubHk7Ci0gICAgCiAgICAgLy8gSWYg
dGhpcyBsYXllcidzIHJlbmRlcmVyIGlzIGEgY2hpbGQgb2YgdGhlIHBhaW50aW5nUm9vdCwgd2Ug
cmVuZGVyIHVuY29uZGl0aW9uYWxseSwgd2hpY2gKICAgICAvLyBpcyBkb25lIGJ5IHBhc3Npbmcg
YSBuaWwgcGFpbnRpbmdSb290IGRvd24gdG8gb3VyIHJlbmRlcmVyIChhcyBpZiBubyBwYWludGlu
Z1Jvb3Qgd2FzIGV2ZXIgc2V0KS4KICAgICAvLyBFbHNlLCBvdXIgcmVuZGVyZXIgdHJlZSBtYXkg
b3IgbWF5IG5vdCBjb250YWluIHRoZSBwYWludGluZyByb290LCBzbyB3ZSBwYXNzIHRoYXQgcm9v
dCBhbG9uZwpAQCAtMzc2NSw3OSArMzc2OCw0MyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExh
eWVyQ29udGVudHMoR3JhCiAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVx
dWVzdHMgJiYgaXNTZWxmUGFpbnRpbmdMYXllcikKICAgICAgICAgcGVyZm9ybU92ZXJsYXBUZXN0
cygqbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cywgbG9jYWxQYWludGluZ0lu
Zm8ucm9vdExheWVyLCB0aGlzKTsKIAotICAgIC8vIFdlIHdhbnQgdG8gcGFpbnQgb3VyIGxheWVy
LCBidXQgb25seSBpZiB3ZSBpbnRlcnNlY3QgdGhlIGRhbWFnZSByZWN0LgotICAgIGlmICh0aGlz
ICE9IGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRGbGFncyAmIFBh
aW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpKQotICAgICAgICBzaG91bGRQYWludENv
bnRlbnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3QobGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QucmVj
dCgpLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9vdCk7CisgICAg
Ym9vbCBmb3JjZUJsYWNrVGV4dCA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IgJiBQ
YWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQ7CisgICAgYm9vbCBzZWxlY3Rpb25Pbmx5ICA9IGxv
Y2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yU2VsZWN0aW9uT25s
eTsKKyAgICAKKyAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IgPSBQYWludEJlaGF2aW9y
Tm9ybWFsOworICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdTa2lw
Um9vdEJhY2tncm91bmQpCisgICAgICAgIHBhaW50QmVoYXZpb3IgfD0gUGFpbnRCZWhhdmlvclNr
aXBSb290QmFja2dyb3VuZDsKKyAgICBlbHNlIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExh
eWVyUGFpbnRpbmdSb290QmFja2dyb3VuZE9ubHkpCisgICAgICAgIHBhaW50QmVoYXZpb3IgfD0g
UGFpbnRCZWhhdmlvclJvb3RCYWNrZ3JvdW5kT25seTsKIAotI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKLSAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkgJiYgaGF2
ZVRyYW5zcGFyZW5jeSkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVyIGFuZCB0cmFu
c3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllciBo
ZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0cyBvbmUgd2l0
aCB0aGUgd3JvbmcgY29udGV4dC4KLSAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJh
bnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50
aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7
CisgICAgTGF5ZXJGcmFnbWVudHMgbGF5ZXJGcmFnbWVudHM7CisgICAgaWYgKHNob3VsZFBhaW50
Q29udGVudCB8fCBzaG91bGRQYWludE91dGxpbmUgfHwgaXNQYWludGluZ092ZXJsYXlTY3JvbGxi
YXJzKSB7CisgICAgICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1
dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBhbmQgcGFpbnQgb2Zmc2V0cyBmb3IgZWFjaCBsYXllciBm
cmFnbWVudCwgYXMgd2VsbCBhcyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudCBvZiBlYWNoCisg
ICAgICAgIC8vIGZyYWdtZW50IHNob3VsZCBwYWludC4KKyAgICAgICAgY29sbGVjdEZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50
aW5nSW5mby5yZWdpb24sIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LAorICAgICAg
ICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8g
VGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsCisgICAgICAgICAgICAobG9j
YWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25v
cmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0RnJvbVJvb3QpOwor
ICAgICAgICB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxv
Y2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MsIHNob3VsZFBhaW50Q29udGVudCwgJm9m
ZnNldEZyb21Sb290KTsKICAgICB9Ci0jZW5kaWYKLQorICAgIAogICAgIGlmIChsb2NhbFBhaW50
RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0JhY2tncm91bmRQaGFzZSkgewot
ICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50ICYmICFzZWxlY3Rpb25Pbmx5KSB7Ci0gICAg
ICAgICAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBr
bm93IHdlIGhhdmUgdG8gcGFpbnQgc29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKGhhdmVUcmFu
c3BhcmVuY3kpCi0gICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNw
YXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0g
ICAgICAgIAotICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVj
dCkgewotICAgICAgICAgICAgICAgIC8vIFBhaW50IG91ciBiYWNrZ3JvdW5kIGZpcnN0LCBiZWZv
cmUgcGFpbnRpbmcgYW55IGNoaWxkIGxheWVycy4KLSAgICAgICAgICAgICAgICAvLyBFc3RhYmxp
c2ggdGhlIGNsaXAgdXNlZCB0byBwYWludCBvdXIgYmFja2dyb3VuZC4KLSAgICAgICAgICAgICAg
ICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QsIERvTm90SW5jbHVkZVNlbGZG
b3JCb3JkZXJSYWRpdXMpOyAvLyBCYWNrZ3JvdW5kIHBhaW50aW5nIHdpbGwgaGFuZGxlIGNsaXBw
aW5nIHRvIHNlbGYuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IFBhaW50IHRoZSBiYWNrZ3JvdW5kLgotICAgICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhj
b250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGRhbWFnZVJlY3QucmVjdCgpKSwgUGFpbnRQaGFz
ZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIs
IGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWlu
dChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLQotICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRp
bmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKLSAgICAgICAgICAgICAgICByZXN0b3JlQ2xpcChjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgLy8gUGFpbnQgb25seSB0aGUgYmFja2dyb3VuZHMgZm9yIGFsbCBvZiB0
aGUgZnJhZ21lbnRzIG9mIHRoZSBsYXllci4KKyAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVu
dCAmJiAhc2VsZWN0aW9uT25seSkKKyAgICAgICAgICAgIHBhaW50QmFja2dyb3VuZEZvckZyYWdt
ZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBw
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFuc3BhcmVuY3ksCisgICAgICAgICAg
ICAgICAgbG9jYWxQYWludGluZ0luZm8sIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyKTsKIAogICAgICAgICAvLyBOb3cgd2FsayB0aGUgc29ydGVkIGxpc3Qgb2YgY2hpbGRy
ZW4gd2l0aCBuZWdhdGl2ZSB6LWluZGljZXMuCiAgICAgICAgIHBhaW50TGlzdChuZWdaT3JkZXJM
aXN0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAg
IH0KICAgICAKICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29t
cG9zaXRpbmdGb3JlZ3JvdW5kUGhhc2UpIHsKLSAgICAgICAgLy8gTm93IGVzdGFibGlzaCB0aGUg
YXBwcm9wcmlhdGUgY2xpcCBhbmQgcGFpbnQgb3VyIGNoaWxkIFJlbmRlck9iamVjdHMuCi0gICAg
ICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgJiYgIWNsaXBSZWN0VG9BcHBseS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0
aGF0IHdlIGtub3cgd2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcuCi0gICAgICAgICAgICBpZiAo
aGF2ZVRyYW5zcGFyZW5jeSkKLSAgICAgICAgICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVy
cyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwg
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2
aW9yKTsKLQotICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVj
dCkgewotICAgICAgICAgICAgICAgIC8vIFNldCB1cCB0aGUgY2xpcCB1c2VkIHdoZW4gcGFpbnRp
bmcgb3VyIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVj
dCwgY2xpcFJlY3RUb0FwcGx5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNs
aXBSZWN0VG9BcHBseS5yZWN0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxlY3Rpb25Pbmx5ID8gUGFpbnRQaGFzZVNlbGVjdGlvbiA6IFBhaW50UGhhc2VDaGlsZEJsb2Nr
QmFja2dyb3VuZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlQmxhY2tU
ZXh0ID8gKFBhaW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDogcGFpbnRC
ZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lv
bik7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0
KTsKLSAgICAgICAgICAgIGlmICghc2VsZWN0aW9uT25seSkgewotICAgICAgICAgICAgICAgIHBh
aW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGbG9hdDsKLSAgICAgICAgICAgICAgICByZW5kZXJl
cigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBwYWlu
dEluZm8ucGhhc2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKLSAgICAgICAgICAgICAgICBwYWlu
dEluZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0
UmVxdWVzdHM7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBw
YWludE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFz
ZUNoaWxkT3V0bGluZXM7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJ
bmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAgICAgICAgICAgICAgcmVzdG9yZUNs
aXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9B
cHBseSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCkKKyAgICAg
ICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4
dCwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGhhdmVUcmFuc3BhcmVuY3ksCisgICAgICAgICAgICAgICAgbG9jYWxQYWludGluZ0luZm8sIHBh
aW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBzZWxlY3Rpb25Pbmx5LCBmb3Jj
ZUJsYWNrVGV4dCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkUGFpbnRPdXRsaW5lKQor
ICAgICAgICAgICAgcGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIpOwogCi0gICAgICAgIGlmIChzaG91bGRQYWludE91dGxpbmUgJiYgIW91dGxpbmVSZWN0
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gUGFpbnQgb3VyIG93biBvdXRsaW5lCi0gICAg
ICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3Qo
b3V0bGluZVJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBwYWludEJlaGF2aW9y
LCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAg
ICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgb3V0bGluZVJlY3QsIERvTm90SW5j
bHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQo
cGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgb3V0bGluZVJlY3QpOwotICAgICAg
ICB9Ci0gICAgCiAgICAgICAgIC8vIFBhaW50IGFueSBjaGlsZCBsYXllcnMgdGhhdCBoYXZlIG92
ZXJmbG93LgogICAgICAgICBwYWludExpc3QobV9ub3JtYWxGbG93TGlzdC5nZXQoKSwgY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgCkBAIC0zODQ1LDM0
ICszODEyLDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKICAg
ICAgICAgcGFpbnRMaXN0KHBvc1pPcmRlckxpc3QoKSwgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgfQogCi0gICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5
U2Nyb2xsYmFycykgewotICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJl
Y3QpOwotICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBv
aW50KHBhaW50T2Zmc2V0KSwgcGl4ZWxTbmFwcGVkSW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSks
IHRydWUpOwotICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5w
YWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAgfQorICAgIGlmIChpc1BhaW50aW5nT3Zl
cmxheVNjcm9sbGJhcnMpCisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOwogCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQogICAgIGlmIChmaWx0ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJF
ZmZlY3QoKSkgewogICAgICAgICAvLyBBcHBseSB0aGUgY29ycmVjdCBjbGlwcGluZyAoaWUuIG92
ZXJmbG93OiBoaWRkZW4pLgotICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJv
b3RMYXllciwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWlu
dERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CisgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBpbmNvcnJl
Y3QgdG8ganVzdCBjbGlwIHRvIHRoZSBkYW1hZ2VSZWN0IGhlcmUgb25jZSBtdWx0aXBsZSBmcmFn
bWVudHMgYXJlIGludm9sdmVkLgorICAgICAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdCA9IGxh
eWVyRnJhZ21lbnRzLmlzRW1wdHkoKSA/IENsaXBSZWN0KCkgOiBsYXllckZyYWdtZW50c1swXS5i
YWNrZ3JvdW5kUmVjdDsKKyAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QsIGJhY2tncm91bmRSZWN0KTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50
ZXIuYXBwbHlGaWx0ZXJFZmZlY3QoKTsKLSAgICAgICAgcmVzdG9yZUNsaXAodHJhbnNwYXJlbmN5
TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVj
dCk7CisgICAgICAgIHJlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGJhY2tncm91bmRSZWN0KTsKICAgICB9CiAjZW5k
aWYKLQorICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIG5vdyB1c2UgdGhlIG9yaWdpbmFs
IHRyYW5zcGFyZW5jeSBjb250ZXh0LgogICAgIEFTU0VSVCh0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQgPT0gY29udGV4dCk7CiAKICAgICBpZiAoKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQ
YWludGluZ0NvbXBvc2l0aW5nTWFza1BoYXNlKSAmJiBzaG91bGRQYWludENvbnRlbnQgJiYgcmVu
ZGVyZXIoKS0+aGFzTWFzaygpICYmICFzZWxlY3Rpb25Pbmx5KSB7Ci0gICAgICAgIGlmIChsb2Nh
bFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAgICAgICAgICBjbGlwVG9SZWN0KGxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMp
OyAvLyBNYXNrIHBhaW50aW5nIHdpbGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCi0gICAgICAg
IAotICAgICAgICAvLyBQYWludCB0aGUgbWFzay4KLSAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5m
byhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGRhbWFnZVJlY3QucmVjdCgpKSwgUGFpbnRQ
aGFzZU1hc2ssIFBhaW50QmVoYXZpb3JOb3JtYWwsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBs
b2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWlu
dEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChsb2NhbFBhaW50aW5n
SW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CisgICAgICAgIC8v
IFBhaW50IHRoZSBtYXNrIGZvciB0aGUgZnJhZ21lbnRzLgorICAgICAgICBwYWludE1hc2tGb3JG
cmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWlu
dGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgfQogCiAgICAgLy8gRW5kIG91ciB0cmFuc3BhcmVu
Y3kgbGF5ZXIKQEAgLTM5MDQsMTMgKzM4NjMsMjI1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
TGlzdChWZWN0b3I8UmVuZGUKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIHsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChp
KTsKLSAgICAgICAgaWYgKCFjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpIHx8IHVzZVJlZ2lvbkJh
c2VkQ29sdW1ucygpKQorICAgICAgICBpZiAoIWNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkpCiAg
ICAgICAgICAgICBjaGlsZExheWVyLT5wYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywg
cGFpbnRGbGFncyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBhaW50UGFnaW5hdGVkQ2hp
bGRMYXllcihjaGlsZExheWVyLCBjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwog
ICAgIH0KIH0KIAordm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdt
ZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWdp
b24qIHJlZ2lvbiwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LAorICAgIENsaXBSZWN0c1R5
cGUgY2xpcFJlY3RzVHlwZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCByZXNwZWN0T3ZlcmZs
b3dDbGlwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpCit7CisgICAgaWYgKCFl
bmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSkgeworICAgICAgICAvLyBGb3IgdW5wYWdpbmF0ZWQg
bGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9uZSBmcmFnbWVudC4KKyAgICAgICAgTGF5ZXJGcmFnbWVu
dCBmcmFnbWVudDsKKyAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJv
b3RMYXllciwgcmVnaW9uLCBjbGlwUmVjdHNUeXBlLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAgICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0
c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3Qs
IG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgZnJhZ21lbnRzLmFwcGVuZChmcmFnbWVudCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQ29tcHV0ZSBvdXIgb2Zmc2V0IHdp
dGhpbiB0aGUgZW5jbG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuCisgICAgTGF5b3V0UG9pbnQgb2Zm
c2V0V2l0aGluUGFnaW5hdGVkTGF5ZXI7CisgICAgY29udmVydFRvTGF5ZXJDb29yZHMoZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVyKCksIG9mZnNldFdpdGhpblBhZ2luYXRlZExheWVyKTsKKyAgICAK
KyAgICAvLyBDYWxjdWxhdGUgY2xpcCByZWN0cyByZWxhdGl2ZSB0byB0aGUgZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyLiBUaGUgcHVycG9zZSBvZiB0aGlzIGNhbGwgaXMgdG8gZGV0ZXJtaW5lIG91
ciBib3VuZHMgY2xpcHBlZCB0byBpbnRlcm1lZGlhdGUKKyAgICAvLyBsYXllcnMgYmV0d2VlbiB1
cyBhbmQgdGhlIHBhZ2luYXRpb24gY29udGV4dC4gSXQncyBpbXBvcnRhbnQgdG8gbWluaW1pemUg
dGhlICMgb2YgZnJhZ21lbnRzIHdlIG5lZWQgdG8gY3JlYXRlIGFuZCB0aGlzIGhlbHBzIHdpdGgK
KyAgICAvLyB0aGF0LgorICAgIENsaXBSZWN0c0NvbnRleHQgcGFnaW5hdGlvbkNsaXBSZWN0c0Nv
bnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwg
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIHJlc3BlY3RPdmVyZmxvd0NsaXApOworICAgIExh
eW91dFJlY3QgbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQ7CisgICAgQ2xpcFJlY3QgYmFja2dyb3Vu
ZFJlY3RJbkZsb3dUaHJlYWQ7CisgICAgQ2xpcFJlY3QgZm9yZWdyb3VuZFJlY3RJbkZsb3dUaHJl
YWQ7CisgICAgQ2xpcFJlY3Qgb3V0bGluZVJlY3RJbkZsb3dUaHJlYWQ7CisgICAgY2FsY3VsYXRl
UmVjdHMocGFnaW5hdGlvbkNsaXBSZWN0c0NvbnRleHQsIFBhaW50SW5mbzo6aW5maW5pdGVSZWN0
KCksIGxheWVyQm91bmRzSW5GbG93VGhyZWFkLCBiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZCwg
Zm9yZWdyb3VuZFJlY3RJbkZsb3dUaHJlYWQsCisgICAgICAgIG91dGxpbmVSZWN0SW5GbG93VGhy
ZWFkLCAmb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXIpOworICAgIAorICAgIC8vIFRha2Ugb3Vy
IGJvdW5kaW5nIGJveCB3aXRoaW4gdGhlIGZsb3cgdGhyZWFkIGFuZCBjbGlwIGl0LiBUaGlzIHdp
bGwgaGVscCBtaW5pbWl6ZSB0aGUgIyBvZiBmcmFnbWVudHMgd2UgaGF2ZSB0byBjcmVhdGUuCisg
ICAgTGF5b3V0UmVjdCBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkID0gYm91bmRpbmdCb3go
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksICZvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7
CisgICAgbGF5ZXJCb3VuZGluZ0JveEluRmxvd1RocmVhZC5pbnRlcnNlY3QoYmFja2dyb3VuZFJl
Y3RJbkZsb3dUaHJlYWQucmVjdCgpKTsKKworICAgIC8vIFNoaWZ0IHRoZSBkaXJ0eSByZWN0IGlu
dG8gZmxvdyB0aHJlYWQgY29vcmRpbmF0ZXMuCisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdp
bmF0aW9uTGF5ZXJGcm9tUm9vdDsKKyAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29u
dmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21S
b290KTsKKyAgICBMYXlvdXRSZWN0IGRpcnR5UmVjdEluRmxvd1RocmVhZChkaXJ0eVJlY3QpOwor
ICAgIGRpcnR5UmVjdEluRmxvd1RocmVhZC5tb3ZlQnkoLW9mZnNldE9mUGFnaW5hdGlvbkxheWVy
RnJvbVJvb3QpOworCisgICAgLy8gVGVsbCB0aGUgZmxvdyB0aHJlYWQgdG8gY29sbGVjdCB0aGUg
ZnJhZ21lbnRzLiBXZSBwYXNzIGVub3VnaCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBtaW5pbWFs
IG51bWJlciBvZiBmcmFnbWVudHMgYmFzZWQgb2ZmIHRoZSBwYWdlcy9jb2x1bW5zCisgICAgLy8g
dGhhdCBpbnRlcnNlY3QgdGhlIGFjdHVhbCBkaXJ0eVJlY3QgYXMgd2VsbCBhcyB0aGUgcGFnZXMv
Y29sdW1ucyB0aGF0IGludGVyc2VjdCBvdXIgbGF5ZXIncyBib3VuZGluZyBib3guCisgICAgUmVu
ZGVyRmxvd1RocmVhZCogZW5jbG9zaW5nRmxvd1RocmVhZCA9IHRvUmVuZGVyRmxvd1RocmVhZChl
bmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+cmVuZGVyZXIoKSk7CisgICAgZW5jbG9zaW5nRmxv
d1RocmVhZC0+Y29sbGVjdExheWVyRnJhZ21lbnRzKGZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0Jv
eEluRmxvd1RocmVhZCwgZGlydHlSZWN0SW5GbG93VGhyZWFkKTsKKyAgICAKKyAgICAvLyBDYWxj
dWxhdGUgdGhlIHJlY3RzCisgICAgLy8gVGhlIGZyYWdtZW50cyBoYXZlIGhhZCB0cmFuc2xhdGlv
bnMgYW5kIGNsaXBzIHN0b3JlZCBpbiB0aGVtLiBOb3cgd2UgbmVlZCB0byBjbGlwIHRvIHRoZSBh
bmNlc3RvcnMgb2YgdGhlIGVuY2xvc2luZyBwYWdpbmF0aW9uIGxheWVyLgorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJh
Z21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICAKKyAgICAgICAgLy8g
U2V0IG91ciBmb3VyIHJlY3RzIHdpdGggYWxsIGNsaXBwaW5nIGFwcGxpZWQgdGhhdCB3YXMgaW50
ZXJuYWwgdG8gdGhlIGZsb3cgdGhyZWFkLgorICAgICAgICBmcmFnbWVudC5zZXRSZWN0cyhsYXll
ckJvdW5kc0luRmxvd1RocmVhZCwgYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQsIGZvcmVncm91
bmRSZWN0SW5GbG93VGhyZWFkLCBvdXRsaW5lUmVjdEluRmxvd1RocmVhZCk7CisgICAgICAgIAor
ICAgICAgICAvLyBTaGlmdCB0byB0aGUgcm9vdC1yZWxhdGl2ZSBwaHlzaWNhbCBwb3NpdGlvbiB1
c2VkIHdoZW4gcGFpbnRpbmcgdGhlIGZsb3cgdGhyZWFkIGluIHRoaXMgZnJhZ21lbnQuCisgICAg
ICAgIGZyYWdtZW50Lm1vdmVCeShmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0ICsgb2Zmc2V0T2ZQ
YWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogR2V0
IHRoZSBwYXJlbnQgY2xpcCByZWN0cyBvZiB0aGUgcGFnaW5hdGlvbiBsYXllciBhbmQgaW50ZXJz
ZWN0IHdpdGggdGhlbS4KKyAgICAgICAgIAorICAgICAgICAvLyBOb3cgaW50ZXJzZWN0IHdpdGgg
b3VyIHBhZ2luYXRpb24gY2xpcC4gVGhpcyB3aWxsIHR5cGljYWxseSBtZWFuIHdlJ3JlIGp1c3Qg
aW50ZXJzZWN0aW5nIHRoZSBkaXJ0eSByZWN0IHdpdGggdGhlIGNvbHVtbgorICAgICAgICAvLyBj
bGlwLCBzbyB0aGUgY29sdW1uIGNsaXAgZW5kcyB1cCBiZWluZyBhbGwgd2UgYXBwbHkuCisgICAg
ICAgIGZyYWdtZW50LmludGVyc2VjdChmcmFnbWVudC5wYWdpbmF0aW9uQ2xpcCk7CisgICAgfQor
fQorCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5
ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFp
bnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgbG9jYWxQYWludEZsYWdzLCBib29sIHNob3VsZFBh
aW50Q29udGVudCwKKyAgICBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpCit7Cisg
ICAgQVNTRVJUKG9mZnNldEZyb21Sb290KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZy
YWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9
IGZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ID0g
c2hvdWxkUGFpbnRDb250ZW50OworICAgICAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5m
by5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVy
Zmxvd0NvbnRlbnRzKSkgeworICAgICAgICAgICAgTGF5b3V0UG9pbnQgbmV3T2Zmc2V0RnJvbVJv
b3QgPSAqb2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0OworICAgICAg
ICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0
KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290KTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAg
ICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZl
VHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8s
IFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwKKyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5n
Um9vdEZvclJlbmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFn
bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxh
eWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29u
dGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEJlZ2luIHRyYW5zcGFy
ZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtub3cgd2UgaGF2ZSB0byBwYWludCBzb21l
dGhpbmcuCisgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQorICAgICAgICAgICAgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAKKyAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZv
LmNsaXBUb0RpcnR5UmVjdCkgeworICAgICAgICAgICAgLy8gUGFpbnQgb3VyIGJhY2tncm91bmQg
Zmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkgY2hpbGQgbGF5ZXJzLgorICAgICAgICAgICAgLy8g
RXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3VyIGJhY2tncm91bmQuCisgICAgICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBE
b05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gQmFja2dyb3VuZCBwYWludGluZyB3
aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkg
d2Ugd2lsbCBjb2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQgaXRzZWxmIGluc3Rl
YWQgb2YganVzdCBmcm9tIHRoZSBwYWludCBpbmZvLgorICAgICAgICBQYWludEluZm8gcGFpbnRJ
bmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3Qu
cmVjdCgpKSwgUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgcGFpbnRp
bmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJl
bmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5s
b2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBp
eGVsQWNjdW11bGF0aW9uKSk7CisKKyAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBU
b0RpcnR5UmVjdCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQor
fQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgIGNvbnN0IExh
eW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVu
Y3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywgUGFpbnRCZWhh
dmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIsIGJvb2wgc2VsZWN0aW9uT25seSwgYm9vbCBmb3JjZUJsYWNrVGV4dCkKK3sKKyAgICAv
LyBCZWdpbiB0cmFuc3BhcmVuY3kgaWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gcGFpbnQuCisgICAg
aWYgKGhhdmVUcmFuc3BhcmVuY3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
YXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTGF5ZXJGcmFnbWVudCBm
cmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50
LnNob3VsZFBhaW50Q29udGVudCAmJiAhZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5
TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBh
aW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBQYWludEJlaGF2aW9yIGxvY2FsUGFpbnRCZWhhdmlvciA9IGZvcmNlQmxhY2tUZXh0ID8gKFBh
aW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvcjsK
KworICAgIC8vIE9wdGltaXplIGNsaXBwaW5nIGZvciB0aGUgc2luZ2xlIGZyYWdtZW50IGNhc2Uu
CisgICAgYm9vbCBzaG91bGRDbGlwID0gbG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
ICYmIGxheWVyRnJhZ21lbnRzLnNpemUoKSA9PSAxICYmIGxheWVyRnJhZ21lbnRzWzBdLnNob3Vs
ZFBhaW50Q29udGVudCAmJiAhbGF5ZXJGcmFnbWVudHNbMF0uZm9yZWdyb3VuZFJlY3QuaXNFbXB0
eSgpOworICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGxheWVyRnJhZ21lbnRzWzBdLmZvcmVncm91bmRSZWN0KTsKKyAgICAKKyAgICAvLyBXZSBo
YXZlIHRvIGxvb3AgdGhyb3VnaCBldmVyeSBmcmFnbWVudCBtdWx0aXBsZSB0aW1lcywgc2luY2Ug
d2UgaGF2ZSB0byByZXBhaW50IGluIGVhY2ggc3BlY2lmaWMgcGhhc2UgaW4gb3JkZXIgZm9yCisg
ICAgLy8gaW50ZXJsZWF2aW5nIG9mIHRoZSBmcmFnbWVudHMgdG8gd29yayBwcm9wZXJseS4KKyAg
ICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2Uoc2VsZWN0aW9uT25seSA/IFBh
aW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLCBsYXll
ckZyYWdtZW50cywKKyAgICAgICAgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFp
bnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIAorICAgIGlmICghc2Vs
ZWN0aW9uT25seSkgeworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhh
c2UoUGFpbnRQaGFzZUZsb2F0LCBsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAg
ICAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZvcmVn
cm91bmQsIGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQ
YWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgICAgIHBhaW50Rm9y
ZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlQ2hpbGRPdXRsaW5lcywgbGF5
ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVoYXZp
b3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB9CisgICAgCisgICAgaWYgKHNob3Vs
ZENsaXApCisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBsYXllckZyYWdtZW50c1swXS5mb3JlZ3JvdW5kUmVjdCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWlu
dFBoYXNlIHBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQ
YWludGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBw
YWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBib29sIHNob3VsZENsaXAgPSBsb2NhbFBh
aW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QgJiYgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpID4gMTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkp
OworICAgICAgICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCB8fCBmcmFnbWVudC5m
b3JlZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisgICAgICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBh
aW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7CisgICAgCisgICAgICAgIFBhaW50SW5m
byBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5mb3JlZ3Jv
dW5kUmVjdC5yZWN0KCkpLCBwaGFzZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIGlmIChwaGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAgICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJl
cXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0czsKKyAgICAgICAg
cmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRz
LmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3Vi
UGl4ZWxBY2N1bXVsYXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQor
ICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYg
bGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWlu
dGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLAorICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhh
dmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAg
aWYgKGZyYWdtZW50Lm91dGxpbmVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgIAorICAgICAgICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUKKyAgICAgICAgUGFpbnRJ
bmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYWdtZW50Lm91dGxp
bmVSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFp
bnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAg
IGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIERvTm90SW5j
bHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOworICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWlu
dEluZm8sIHRvUG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJv
eExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOwor
ICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdt
ZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYg
bG9jYWxQYWludGluZ0luZm8sCisgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5k
ZXJlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50
cy5hdChpKTsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRv
RGlydHlSZWN0KQorICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVu
dC5iYWNrZ3JvdW5kUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIE1h
c2sgcGFpbnRpbmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KKyAgICAgICAgCisgICAg
ICAgIC8vIFBhaW50IHRoZSBtYXNrLgorICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3
aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVhZCBv
ZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8o
Y29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0
KCkpLCBQYWludFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCkt
PnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigp
IC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11
bGF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRv
RGlydHlSZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAg
ICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsK
KyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0
b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlv
bigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKSwKKyAgICAgICAg
ICAgIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwg
dHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCiB2b2lk
IFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxk
TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
IHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7CiAgICAgLy8gV2Ug
bmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBjaGlsZCBsYXllciBp
bnRvIHN0cmlwcy4KQEAgLTQwNDgsNyArNDIxOSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRl
c3QoY29uc3QgSGl0VGVzdFIKIAogICAgIHJlbmRlcmVyKCktPmRvY3VtZW50KCktPnVwZGF0ZUxh
eW91dCgpOwogICAgIAotICAgIExheW91dFJlY3QgaGl0VGVzdEFyZWEgPSByZW5kZXJlcigpLT5p
c1JlbmRlckZsb3dUaHJlYWQoKSA/IHRvUmVuZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS0+Ym9y
ZGVyQm94UmVjdCgpIDogcmVuZGVyZXIoKS0+dmlldygpLT5kb2N1bWVudFJlY3QoKTsKKyAgICBM
YXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgPyB0
b1JlbmRlckZsb3dUaHJlYWQocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKSA6IHJlbmRlcmVy
KCktPnZpZXcoKS0+ZG9jdW1lbnRSZWN0KCk7CiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBw
aW5nKCkpCiAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChmcmFtZVZpc2libGVSZWN0KHJl
bmRlcmVyKCkpKTsKIApAQCAtNDI1NCwxNiArNDQyNSw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgLy8gVGhpcyBsYXllciBpcyBmbGF0dGVuaW5n
LCBzbyBmbGF0dGVuIHRoZSBzdGF0ZSBwYXNzZWQgdG8gZGVzY2VuZGFudHMuCiAgICAgICAgIGxv
Y2FsVHJhbnNmb3JtU3RhdGUtPmZsYXR0ZW4oKTsKICAgICB9Ci0gICAgCi0gICAgLy8gQ2FsY3Vs
YXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCi0gICAgTGF5b3V0UmVjdCBsYXllckJv
dW5kczsKLSAgICBDbGlwUmVjdCBiZ1JlY3Q7Ci0gICAgQ2xpcFJlY3QgZmdSZWN0OwotICAgIENs
aXBSZWN0IG91dGxpbmVSZWN0OwogCi0gICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250
ZXh0KHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBSb290UmVsYXRpdmVDbGlw
UmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7Ci0gICAgY2FsY3VsYXRlUmVjdHMo
Y2xpcFJlY3RzQ29udGV4dCwgaGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVj
dCwgb3V0bGluZVJlY3QpOwotICAgIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgZm9y
IGtlZXBpbmcgdHJhY2sgb2YgdGhlIHotZGVwdGggb2YgdGhlIGhpdCBwb2ludCBvZiAzZC10cmFu
c2Zvcm1lZAogICAgIC8vIGRlc2NlbmRhbnRzLgogICAgIGRvdWJsZSBsb2NhbFpPZmZzZXQgPSAt
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKQEAgLTQzMDgsMTcgKzQ0NzAsMjIg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICBjYW5k
aWRhdGVMYXllciA9IGhpdExheWVyOwogICAgIH0KIAotICAgIC8vIENoZWNrIGZvciB0aGUgcmVz
aXplcgotICAgIGlmIChjYW5SZXNpemUoKSAmJiByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBwaXhl
bFNuYXBwZWRJbnRSZWN0KGxheWVyQm91bmRzKSkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJv
dW5kZWRQb2ludCgpKSkgeworICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxs
IGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBmb3IgZWFjaCBsYXllciBmcmFnbWVudC4KKyAg
ICBMYXllckZyYWdtZW50cyBsYXllckZyYWdtZW50czsKKyAgICBjb2xsZWN0RnJhZ21lbnRzKGxh
eWVyRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVz
dFJlY3QsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cyk7CisKKyAgICBpZiAoY2FuUmVzaXplKCkgJiYg
aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9u
KSkgewogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgaGl0
VGVzdExvY2F0aW9uLnBvaW50KCkpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKLSAg
ICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBj
aGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4KLSAgICBpZiAoZmdSZWN0LmludGVyc2Vj
dHMoaGl0VGVzdExvY2F0aW9uKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAvLyBO
ZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGlsZCBS
ZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4gQ2hlY2sKKyAgICAvLyBldmVyeSBmcmFnbWVudCBp
biByZXZlcnNlIG9yZGVyLgorICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAg
ICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBvcmFyeSBIaXRUZXN0UmVzdWx0LCBiZWNhdXNlIHdl
IG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jlc3VsdCcgaWYgd2Uga25vdyB3ZSdyZSBmcm9udG1v
c3QuCiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0
aW9uKCkpOwotICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQs
IGxheWVyQm91bmRzLCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3REZXNjZW5kYW50cykKKyAgICAg
ICAgYm9vbCBpbnNpZGVGcmFnbWVudEZvcmVncm91bmRSZWN0ID0gZmFsc2U7CisgICAgICAgIGlm
IChoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJlcXVlc3QsIHRl
bXBSZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdERlc2NlbmRhbnRzLCBpbnNpZGVGcmFn
bWVudEZvcmVncm91bmRSZWN0KQogICAgICAgICAgICAgJiYgaXNIaXRDYW5kaWRhdGUodGhpcywg
ZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5n
ZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKQEAgLTQzMjgsMTMgKzQ0OTUs
MTMgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgLy8gRm9yZWdyb3VuZCBjYW4gZGVwdGgt
c29ydCB3aXRoIGRlc2NlbmRhbnQgbGF5ZXJzLCBzbyBrZWVwIHRoaXMgYXMgYSBjYW5kaWRhdGUu
CiAgICAgICAgICAgICBjYW5kaWRhdGVMYXllciA9IHRoaXM7Ci0gICAgICAgIH0gZWxzZSBpZiAo
cmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICB9IGVsc2UgaWYgKGluc2lkZUZyYWdt
ZW50Rm9yZWdyb3VuZFJlY3QgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sg
b3VyIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCiAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0TGlz
dChuZWdaT3JkZXJMaXN0KCksIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVj
dCwgaGl0VGVzdExvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwg
ek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2Vu
ZGFudHMpOworICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9yRGVz
Y2VuZGFudHNQdHIsIHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCksIGRl
cHRoU29ydERlc2NlbmRhbnRzKTsKICAgICBpZiAoaGl0TGF5ZXIpIHsKICAgICAgICAgaWYgKCFk
ZXB0aFNvcnREZXNjZW5kYW50cykKICAgICAgICAgICAgIHJldHVybiBoaXRMYXllcjsKQEAgLTQz
NDUsOSArNDUxMiwxMCBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
CiAgICAgaWYgKGNhbmRpZGF0ZUxheWVyKQogICAgICAgICByZXR1cm4gY2FuZGlkYXRlTGF5ZXI7
CiAKLSAgICBpZiAoYmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiBpc1NlbGZQ
YWludGluZ0xheWVyKCkpIHsKKyAgICBpZiAoaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAg
ICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9uKCkpOwot
ICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91
bmRzLCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RTZWxmKQorICAgICAgICBib29sIGluc2lkZUZy
YWdtZW50QmFja2dyb3VuZFJlY3QgPSBmYWxzZTsKKyAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50
c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVz
dExvY2F0aW9uLCBIaXRUZXN0U2VsZiwgaW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVjdCkKICAg
ICAgICAgICAgICYmIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVu
dHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBp
ZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQodGVtcFJlc3VsdCk7CkBAIC00MzU1LDEzICs0NTIzLDQ2IEBAIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVz
dWx0OwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJl
c3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgaWYgKGluc2lkZUZyYWdtZW50QmFja2dy
b3VuZFJlY3QgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAorYm9vbCBS
ZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwKKyAgICBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2Nh
dGlvbiwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyLCBib29sJiBpbnNpZGVDbGlwUmVjdCkg
Y29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsg
aSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJh
Z21lbnRzLmF0KGkpOworICAgICAgICBpZiAoKGhpdFRlc3RGaWx0ZXIgPT0gSGl0VGVzdFNlbGYg
JiYgIWZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSkK
KyAgICAgICAgICAgIHx8IChoaXRUZXN0RmlsdGVyID09IEhpdFRlc3REZXNjZW5kYW50cyAmJiAh
ZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnNpZGVDbGlwUmVjdCA9IHRydWU7CisgICAg
ICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBmcmFnbWVudC5sYXllckJv
dW5kcywgaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0RmlsdGVyKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxh
eWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbikgY29u
c3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+
PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21l
bnRzLmF0KGkpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0
cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIHBpeGVsU25hcHBl
ZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpKS5jb250YWlucyhoaXRUZXN0TG9jYXRpb24u
cm91bmRlZFBvaW50KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBmYWxzZTsKK30KKyAKIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50
cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRU
ZXN0TG9jYXRpb24sIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QKIHsKICAgICBB
U1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2Vu
ZGFudCgpKTsKQEAgLTQ0MDksNyArNDYxMCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
aGl0VGVzdExpc3QoVmUKICAgICAgICAgUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5h
dChpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gMDsKICAgICAgICAgSGl0VGVz
dFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlm
IChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpICYmICF1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkK
KyAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkpCiAgICAgICAgICAgICBoaXRM
YXllciA9IGhpdFRlc3RQYWdpbmF0ZWRDaGlsZExheWVyKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwg
cmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgdHJhbnNm
b3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGhpdExheWVyID0gY2hpbGRMYXllci0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgdGhpcywg
cmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2Us
IHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwpAQCAtNDY5MSw4ICs0ODky
LDE4IEBAIHN0YXRpYyBpbmxpbmUgQ2xpcFJlY3QgYmFja2dyb3VuZENsaXBSZWMKIENsaXBSZWN0
IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kQ2xpcFJlY3QoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYg
Y2xpcFJlY3RzQ29udGV4dCkgY29uc3QKIHsKICAgICBBU1NFUlQocGFyZW50KCkpOworICAgIAog
ICAgIENsaXBSZWN0cyBwYXJlbnRSZWN0czsKLSAgICBwYXJlbnRDbGlwUmVjdHMoY2xpcFJlY3Rz
Q29udGV4dCwgcGFyZW50UmVjdHMpOworCisgICAgLy8gSWYgd2UgY3Jvc3MgaW50byBhIGRpZmZl
cmVudCBwYWdpbmF0aW9uIGNvbnRleHQsIHRoZW4gd2UgY2FuJ3QgcmVseSBvbiB0aGUgY2FjaGUu
CisgICAgLy8gSnVzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBUZW1wb3JhcnlDbGlwUmVjdHMuCisg
ICAgaWYgKGNsaXBSZWN0c0NvbnRleHQuY2xpcFJlY3RzVHlwZSAhPSBUZW1wb3JhcnlDbGlwUmVj
dHMgJiYgcGFyZW50KCktPmVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpICE9IGVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllcigpKSB7CisgICAgICAgIENsaXBSZWN0c0NvbnRleHQgdGVtcENvbnRleHQo
Y2xpcFJlY3RzQ29udGV4dCk7CisgICAgICAgIHRlbXBDb250ZXh0LmNsaXBSZWN0c1R5cGUgPSBU
ZW1wb3JhcnlDbGlwUmVjdHM7CisgICAgICAgIHBhcmVudENsaXBSZWN0cyh0ZW1wQ29udGV4dCwg
cGFyZW50UmVjdHMpOworICAgIH0gZWxzZQorICAgICAgICBwYXJlbnRDbGlwUmVjdHMoY2xpcFJl
Y3RzQ29udGV4dCwgcGFyZW50UmVjdHMpOworICAgIAogICAgIENsaXBSZWN0IGJhY2tncm91bmRD
bGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdEZvclBvc2l0aW9uKHBhcmVudFJlY3RzLCByZW5k
ZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpKTsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVu
ZGVyZXIoKS0+dmlldygpOwogICAgIEFTU0VSVCh2aWV3KTsKQEAgLTUzMzYsNyArNTU0Nyw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RMYXllcnMoYm9vbCBpbmMKICAgICBib29sIGlzU3Rh
Y2tpbmcgPSBiZWhhdmlvciA9PSBTdG9wQXRTdGFja2luZ0NvbnRleHRzID8gaXNTdGFja2luZ0Nv
bnRleHQoKSA6IGlzU3RhY2tpbmdDb250YWluZXIoKTsKICAgICAvLyBPdmVyZmxvdyBsYXllcnMg
YXJlIGp1c3QgcGFpbnRlZCBieSB0aGVpciBlbmNsb3NpbmcgbGF5ZXJzLCBzbyB0aGV5IGRvbid0
IGdldCBwdXQgaW4gem9yZGVyIGxpc3RzLgogICAgIGJvb2wgaW5jbHVkZUhpZGRlbkxheWVyID0g
aW5jbHVkZUhpZGRlbkxheWVycyB8fCAobV9oYXNWaXNpYmxlQ29udGVudCB8fCAobV9oYXNWaXNp
YmxlRGVzY2VuZGFudCAmJiBpc1N0YWNraW5nKSk7Ci0gICAgaWYgKGluY2x1ZGVIaWRkZW5MYXll
ciAmJiAhaXNOb3JtYWxGbG93T25seSgpICYmICFyZW5kZXJlcigpLT5pc1JlbmRlckZsb3dUaHJl
YWQoKSkgeworICAgIGlmIChpbmNsdWRlSGlkZGVuTGF5ZXIgJiYgIWlzTm9ybWFsRmxvd09ubHko
KSAmJiAhaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpIHsKICAgICAgICAgLy8gRGV0ZXJt
aW5lIHdoaWNoIGJ1ZmZlciB0aGUgY2hpbGQgc2hvdWxkIGJlIGluLgogICAgICAgICBPd25QdHI8
VmVjdG9yPFJlbmRlckxheWVyKj4gPiYgYnVmZmVyID0gKHpJbmRleCgpID49IDApID8gcG9zQnVm
ZmVyIDogbmVnQnVmZmVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgY2xhc3MgRmlsdGVyT3Bl
cmF0aW9uczsKIGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNs
YXNzIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTsKK2NsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CiBj
bGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJlbmRlck1hcnF1ZWU7CiBjbGFzcyBSZW5k
ZXJSZXBsaWNhOwpAQCAtMTE0LDYgKzExNSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdm9pZCBt
b3ZlKExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCB5KSB7IG1fcmVjdC5tb3ZlKHgsIHkpOyB9CiAg
ICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNpemUmIHNpemUpIHsgbV9yZWN0Lm1vdmUoc2l6ZSk7
IH0KKyAgICB2b2lkIG1vdmVCeShjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIHsgbV9yZWN0Lm1v
dmVCeShwb2ludCk7IH0KIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dC5pc0VtcHR5KCk7IH0KICAgICBib29sIGludGVyc2VjdHMoY29uc3QgTGF5b3V0UmVjdCYgcmVj
dCkgeyByZXR1cm4gbV9yZWN0LmludGVyc2VjdHMocmVjdCk7IH0KQEAgLTI1MSw2ICsyNTMsNTIg
QEAgcHVibGljOgogI2VuZGlmCiB9OwogCitzdHJ1Y3QgTGF5ZXJGcmFnbWVudCB7CitwdWJsaWM6
CisgICAgTGF5ZXJGcmFnbWVudCgpCisgICAgICAgIDogc2hvdWxkUGFpbnRDb250ZW50KGZhbHNl
KQorICAgIHsgfQorCisgICAgdm9pZCBzZXRSZWN0cyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMs
IGNvbnN0IENsaXBSZWN0JiBiYWNrZ3JvdW5kLCBjb25zdCBDbGlwUmVjdCYgZm9yZWdyb3VuZCwg
Y29uc3QgQ2xpcFJlY3QmIG91dGxpbmUpCisgICAgeworICAgICAgICBsYXllckJvdW5kcyA9IGJv
dW5kczsKKyAgICAgICAgYmFja2dyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kOworICAgICAgICBmb3Jl
Z3JvdW5kUmVjdCA9IGZvcmVncm91bmQ7CisgICAgICAgIG91dGxpbmVSZWN0ID0gb3V0bGluZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZlQnkoY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldCkK
KyAgICB7CisgICAgICAgIGxheWVyQm91bmRzLm1vdmVCeShvZmZzZXQpOworICAgICAgICBiYWNr
Z3JvdW5kUmVjdC5tb3ZlQnkob2Zmc2V0KTsKKyAgICAgICAgZm9yZWdyb3VuZFJlY3QubW92ZUJ5
KG9mZnNldCk7CisgICAgICAgIG91dGxpbmVSZWN0Lm1vdmVCeShvZmZzZXQpOworICAgICAgICBw
YWdpbmF0aW9uQ2xpcC5tb3ZlQnkob2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbnRl
cnNlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGJhY2tncm91bmRS
ZWN0LmludGVyc2VjdChyZWN0KTsKKyAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHJl
Y3QpOworICAgICAgICBvdXRsaW5lUmVjdC5pbnRlcnNlY3QocmVjdCk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50OworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7
CisgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3Q7CisgICAgQ2xpcFJlY3QgZm9yZWdyb3VuZFJl
Y3Q7CisgICAgQ2xpcFJlY3Qgb3V0bGluZVJlY3Q7CisgICAgCisgICAgLy8gVW5pcXVlIHRvIHBh
Z2luYXRlZCBmcmFnbWVudHMuIFRoZSBwaHlzaWNhbCB0cmFuc2xhdGlvbiB0byBhcHBseSB0byBz
aGlmdCB0aGUgbGF5ZXIgd2hlbiBwYWludGluZy9oaXQtdGVzdGluZy4KKyAgICBMYXlvdXRQb2lu
dCBwYWdpbmF0aW9uT2Zmc2V0OworICAgIAorICAgIC8vIEFsc28gdW5pcXVlIHRvIHBhZ2luYXRl
ZCBmcmFnbWVudHMuIEFuIGFkZGl0aW9uYWwgY2xpcCB0aGF0IGFwcGxpZXMgdG8gdGhlIGxheWVy
LiBJdCBpcyBpbiBsYXllci1sb2NhbAorICAgIC8vIChwaHlzaWNhbCkgY29vcmRpbmF0ZXMuCisg
ICAgTGF5b3V0UmVjdCBwYWdpbmF0aW9uQ2xpcDsKK307CisKK3R5cGVkZWYgVmVjdG9yPExheWVy
RnJhZ21lbnQ+IExheWVyRnJhZ21lbnRzOworCiBjbGFzcyBSZW5kZXJMYXllciA6IHB1YmxpYyBT
Y3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclJlcGxpY2E7
CkBAIC00MTgsNiArNDY2LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAgYm9vbCBpc1Bh
Z2luYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYWdpbmF0ZWQ7IH0KKyAgICBSZW5kZXJMYXll
ciogZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9lbmNsb3NpbmdQ
YWdpbmF0aW9uTGF5ZXI7IH0KIAogICAgIHZvaWQgdXBkYXRlVHJhbnNmb3JtKCk7CiAgICAgCkBA
IC03ODEsNiArODMwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld3BvcnRDb25zdHJhaW5l
ZE5vdENvbXBvc2l0ZWRSZWFzb24oVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFz
b24gcmVhc29uKSB7IG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24gPSBy
ZWFzb247IH0KICAgICBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiB2aWV3
cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uPihtX3ZpZXdwb3J0
Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKTsgfQogI2VuZGlmCisgICAgCisgICAgYm9v
bCBpc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigp
LT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKTsgfQogCiBwcml2YXRlOgogICAgIGVudW0g
Q29sbGVjdExheWVyc0JlaGF2aW9yIHsgU3RvcEF0U3RhY2tpbmdDb250ZXh0cywgU3RvcEF0U3Rh
Y2tpbmdDb250YWluZXJzIH07CkBAIC04OTAsNiArOTQxLDE5IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsK
ICAgICB2b2lkIHBhaW50Q2hpbGRMYXllckludG9Db2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExh
eWVyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5
ZXJGbGFncywgY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90
IGNvbHVtbkluZGV4KTsKIAorICAgIHZvaWQgY29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50
cyYsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlclJlZ2lvbiosIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCwKKyAgICAgICAgQ2xpcFJlY3RzVHlwZSwgU2hvdWxkUmVzcGVj
dE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50KiBv
ZmZzZXRGcm9tUm9vdCA9IDApOworICAgIHZvaWQgdXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21l
bnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVy
RmxhZ3MsIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0
RnJvbVJvb3QpOworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3Bh
cmVuY3lMYXllckNvbnRleHQsCisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5j
eVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5k
ZXJlcik7CisgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5j
eUxheWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFp
bnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
LAorICAgICAgICBib29sIHNlbGVjdGlvbk9ubHksIGJvb2wgZm9yY2VCbGFja1RleHQpOworICAg
IHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBhaW50UGhhc2UsIGNv
bnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGlu
Z0luZm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRl
cmVyKTsKKyAgICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRC
ZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9p
ZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMm
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYpOworICAgIHZvaWQg
cGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9v
dEZvclJlbmRlcmVyKTsKKwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYsIGJvb2wgYXBwbGllZFRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUg
PSAwLCBkb3VibGUqIHpPZmZzZXQgPSAwKTsKQEAgLTkxMCw2ICs5NzQsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaGl0VGVz
dENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExh
eW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0Rmls
dGVyKSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBM
YXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0
KSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mKSBjb25zdDsKIAogICAgIGJvb2wgbGlz
dENvbnRlbnRzT3BhcXVlSW5SZWN0KGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiwgY29uc3Qg
TGF5b3V0UmVjdCYpIGNvbnN0OwogCkBAIC0xMTg0LDYgKzEyNTAsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgUmVuZGVyU2Nyb2xsYmFyUGFydCogbV9zY3JvbGxDb3JuZXI7CiAgICAgUmVuZGVyU2Nyb2xs
YmFyUGFydCogbV9yZXNpemVyOwogCisgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJl
bmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBh
cmUgbm90IHBhZ2luYXRlZC4KKyAgICBSZW5kZXJMYXllciogbV9lbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXI7CisKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
czsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtbkJsb2NrLmNwcAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
OCArMTA4LDYgQEAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZU11bAogICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKICAg
ICBuZXdTdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwogICAgIG5ld1N0eWxlLT5zZXRE
aXNwbGF5KEJMT0NLKTsKLSAgICBuZXdTdHlsZS0+c2V0UG9zaXRpb24oUmVsYXRpdmVQb3NpdGlv
bik7Ci0gICAgbmV3U3R5bGUtPnNldFpJbmRleCgwKTsKICAgICBuZXdTdHlsZS0+Zm9udCgpLnVw
ZGF0ZSgwKTsKICAgICByZXR1cm4gbmV3U3R5bGUucmVsZWFzZSgpOwogfQpAQCAtMTYyLDYgKzE2
MCwxNSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmVuc3VyZUNvbHVtCiAgICAgY29s
dW1uU2V0LT5zZXRSZXF1aXJlc0JhbGFuY2luZyhyZXF1aXJlc0JhbGFuY2luZygpKTsKIH0KIAor
dm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hp
bGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQpCit7CisgICAgUmVuZGVyQmxvY2s6
OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4sIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKKyAgICAK
KyAgICAvLyBTaGlmdCB0aGUgZmxvdyB0aHJlYWQgYmFjayB1cCB0byB0aGUgdG9wIG9mIHRoZSBi
bG9jay4KKyAgICBpZiAoZmxvd1RocmVhZCgpKQorICAgICAgICBmbG93VGhyZWFkKCktPnNldExv
Z2ljYWxUb3AoYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkpOworfQorCiBjb25zdCBj
aGFyKiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QKIHsKICAgICBp
ZiAoaXNGbG9hdGluZygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw2ICs1Miw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgT1ZFUlJJ
REU7CisKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lkdGgo
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhl
aWdodENoYW5nZShMYXlvdXRVbml0JiBwYWdlTG9naWNhbEhlaWdodCwgYm9vbCYgcGFnZUxvZ2lj
YWxIZWlnaHRDaGFuZ2VkLCBib29sJiBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBib29sIHJlbGF5b3V0Rm9yUGFnaW5hdGlvbihib29sIGhhc1Nw
ZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0LCBM
YXlvdXRTdGF0ZU1haW50YWluZXImKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgJKHJldmlz
aW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNiBAQCBwdWJsaWM6CiAg
ICAgflJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCgpOwogCiBwcml2YXRlOgotICAgIHZpcnR1
YWwgYm9vbCBpc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biB0cnVlOyB9Ci0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21w
dXRlZFZhbHVlcyYpIGNvbnN0IE9WRVJSSURFOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAkocmV2aXNpb24gMTQ0MDA3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU2V0LmgiCiAKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkLmgiCiAKQEAgLTI0OSwxMCArMjQ5LDcgQEAgdm9pZCBSZW5kZXJNdWx0
aUNvbHVtblNldDo6cGFpbnRPYmplY3QoUAogICAgIGlmICghbV9mbG93VGhyZWFkIHx8ICFpc1Zh
bGlkKCkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwogICAgIHBhaW50Q29sdW1uUnVsZXMo
cGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgcGFpbnRDb2x1bW5Db250ZW50cyhwYWludElu
Zm8sIHBhaW50T2Zmc2V0KTsKLSAgICByZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUo
KTsKIH0KIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdWxlcyhQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMzA5
LDc2ICszMDYsNiBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1CiAg
ICAgfQogfQogCi12b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtbkNvbnRlbnRz
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi17
Ci0gICAgLy8gRm9yIGVhY2ggcmVjdGFuZ2xlLCBzZXQgaXQgYXMgdGhlIHJlZ2lvbiByZWN0YW5n
bGUgYW5kIHRoZW4gbGV0IGZsb3cgdGhyZWFkIHBhaW50aW5nIGRvIHRoZSByZXN0LgotICAgIC8v
IFdlIG1ha2UgbXVsdGlwbGUgY2FsbHMgdG8gcGFpbnRGbG93VGhyZWFkUG9ydGlvbkluUmVnaW9u
LCBjaGFuZ2luZyB0aGUgcmVjdGFuZ2xlcyBlYWNoIHRpbWUuCi0gICAgdW5zaWduZWQgY29sQ291
bnQgPSBjb2x1bW5Db3VudCgpOwotICAgIGlmICghY29sQ291bnQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIExheW91dFVuaXQgY29sR2FwID0gY29sdW1uR2FwKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgZ2V0IHRo
ZSBjb2x1bW4gcmVjdCwgd2hpY2ggaXMgaW4gb3VyIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UsIGFu
ZCB3ZSBtYWtlIGl0IHBoeXNpY2FsIGFuZCBhcHBseQotICAgICAgICAvLyB0aGUgcGFpbnQgb2Zm
c2V0IHRvIGl0LiBUaGF0IGdpdmVzIHVzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiB0aGF0IHdlIHdh
bnQgdG8gcGFpbnQgdGhlIGNvbHVtbiBhdC4KLSAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0ID0g
Y29sdW1uUmVjdEF0KGkpOwotICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUoY29sUmVjdCk7Ci0g
ICAgICAgIGNvbFJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICAgICAgCi0gICAgICAgIC8v
IE5leHQgd2UgZ2V0IHRoZSBwb3J0aW9uIG9mIHRoZSBmbG93IHRocmVhZCB0aGF0IGNvcnJlc3Bv
bmRzIHRvIHRoaXMgY29sdW1uLgotICAgICAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9u
ID0gZmxvd1RocmVhZFBvcnRpb25SZWN0QXQoaSk7Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cg
Z2V0IHRoZSBvdmVyZmxvdyByZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGNvbHVtbi4KLSAg
ICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uID0gZmxvd1RocmVhZFBv
cnRpb25PdmVyZmxvd1JlY3QoZmxvd1RocmVhZFBvcnRpb24sIGksIGNvbENvdW50LCBjb2xHYXAp
OwotCi0gICAgICAgIC8vIERvIHRoZSBwYWludCB3aXRoIHRoZSBjb21wdXRlZCByZWN0cy4KLSAg
ICAgICAgZmxvd1RocmVhZCgpLT5wYWludEZsb3dUaHJlYWRQb3J0aW9uSW5SZWdpb24ocGFpbnRJ
bmZvLCB0aGlzLCBmbG93VGhyZWFkUG9ydGlvbiwgZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbiwg
Y29sUmVjdC5sb2NhdGlvbigpKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTXVsdGlDb2x1bW5T
ZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlv
bikKLXsKLSAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZz
ZXQgKyBsb2NhdGlvbigpOwotCi0gICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhp
cyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCi0g
ICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVu
dHMgbGlrZSBpbWFnZXMpLgotICAgIC8vIEZJWE1FOiBPbmNlIHdlIHN1cHBvcnQgb3ZlcmZsb3cs
IHdlIG5lZWQgdG8gaW50ZXJzZWN0IHdpdGggdGhhdCBhbmQgbm90IHdpdGggdGhlIGJvdW5kcyBy
ZWN0LgotICAgIExheW91dFJlY3QgYm91bmRzUmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihs
b2NhdGlvbkluQ29udGFpbmVyLnJlZ2lvbigpKTsKLSAgICBib3VuZHNSZWN0Lm1vdmVCeShhZGp1
c3RlZExvY2F0aW9uKTsKLSAgICBpZiAoIXZpc2libGVUb0hpdFRlc3RpbmcoKSB8fCBhY3Rpb24g
IT0gSGl0VGVzdEZvcmVncm91bmQgfHwgIWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhi
b3VuZHNSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIFRoZSBwb2lu
dCBpcyBpbiBvbmUgc3BlY2lmaWMgY29sdW1uLiBTaW5jZSBjb2x1bW5zIGNhbid0IG92ZXJsYXAs
IHdlIGRvbid0IGV2ZXIgaGF2ZSB0byB0ZXN0Ci0gICAgLy8gbXVsdGlwbGUgY29sdW1ucy4gUHV0
IHRoZSAKLSAgICAKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byBqdW1wIHJpZ2h0
IHRvIHRoZSBzcGVjaWZpYyBjb2x1bW4gYnkganVzdCBkb2luZyBtYXRoIG9uIHRoZSBwb2ludC4g
U2luY2UgY29sdW1ucwotICAgIC8vIGNhbid0IG92ZXJsYXAsIHdlIHNob3VsZG4ndCBoYXZlIHRv
IHdhbGsgZXZlcnkgY29sdW1uIGxpa2UgdGhpcy4gVGhlIG9sZCBjb2x1bW4gY29kZSB3YWxrZWQg
YWxsIHRoZSBjb2x1bW5zLCB0aG91Z2gsCi0gICAgLy8gc28gdGhpcyBpcyBubyB3b3JzZS4gV2Un
ZCBoYXZlIHRvIHdhdGNoIG91dCBmb3IgcmVjdC1iYXNlZCBoaXQgdGVzdGluZywgdGhvdWdoLCB3
aGljaCBhY3R1YWxseSBjb3VsZCBvdmVybGFwCi0gICAgLy8gbXVsdGlwbGUgY29sdW1ucy4KLSAg
ICBMYXlvdXRVbml0IGNvbEdhcCA9IGNvbHVtbkdhcCgpOwotICAgIHVuc2lnbmVkIGNvbENvdW50
ID0gY29sdW1uQ291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7
IGkrKykgewotICAgICAgICAvLyBGaXJzdCB3ZSBnZXQgdGhlIGNvbHVtbiByZWN0LCB3aGljaCBp
cyBpbiBvdXIgbG9jYWwgY29vcmRpbmF0ZSBzcGFjZSwgYW5kIHdlIG1ha2UgaXQgcGh5c2ljYWwg
YW5kIGFwcGx5Ci0gICAgICAgIC8vIHRoZSBoaXQgdGVzdCBvZmZzZXQgdG8gaXQuIFRoYXQgZ2l2
ZXMgdXMgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIHRoYXQgd2Ugd2FudCB0byBwYWludCB0aGUgY29s
dW1uIGF0LgotICAgICAgICBMYXlvdXRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoaSk7Ci0g
ICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShjb2xSZWN0KTsKLSAgICAgICAgY29sUmVjdC5tb3Zl
QnkoYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgICAgIAotICAgICAgICAvLyBOZXh0IHdlIGdldCB0
aGUgcG9ydGlvbiBvZiB0aGUgZmxvdyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIGNv
bHVtbi4KLSAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZsb3dUaHJlYWRQ
b3J0aW9uUmVjdEF0KGkpOwotICAgICAgICAKLSAgICAgICAgLy8gTm93IGdldCB0aGUgb3ZlcmZs
b3cgcmVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjb2x1bW4uCi0gICAgICAgIExheW91dFJl
Y3QgZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dS
ZWN0KGZsb3dUaHJlYWRQb3J0aW9uLCBpLCBjb2xDb3VudCwgY29sR2FwKTsKLQotICAgICAgICAv
LyBEbyB0aGUgaGl0IHRlc3Qgd2l0aCB0aGUgY29tcHV0ZWQgcmVjdHMuCi0gICAgICAgIGlmIChm
bG93VGhyZWFkKCktPmhpdFRlc3RGbG93VGhyZWFkUG9ydGlvbkluUmVnaW9uKHRoaXMsIGZsb3dU
aHJlYWRQb3J0aW9uLCBmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uLCByZXF1ZXN0LCByZXN1bHQs
IGxvY2F0aW9uSW5Db250YWluZXIsIGNvbFJlY3QubG9jYXRpb24oKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0
aW9uKSk7Ci0gICAgcmV0dXJuICFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChu
b2RlKCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpOwotfQotCiB2
b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpyZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3Qg
TGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlKSBjb25zdAogewogICAgIC8v
IEZpZ3VyZSBvdXQgdGhlIHN0YXJ0IGFuZCBlbmQgY29sdW1ucyBhbmQgb25seSBjaGVjayB3aXRo
aW4gdGhhdCByYW5nZSBzbyB0aGF0IHdlIGRvbid0IHdhbGsgdGhlCkBAIC00MTcsNiArMzQ0LDg2
IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnJlcGFpbnRGbG93VGgKICAgICB9CiB9CiAK
K3ZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmNvbGxlY3RMYXllckZyYWdtZW50cyhWZWN0b3I8
TGF5ZXJGcmFnbWVudD4mIGZyYWdtZW50cywgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGlu
Z0JveCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQoreworICAgIC8vIFB1dCB0aGUgbGF5
ZXIgYm91bmRzIGludG8gZmxvdyB0aHJlYWQtbG9jYWwgY29vcmRpbmF0ZXMgYnkgZmxpcHBpbmcg
aXQgZmlyc3QuCisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc0luRmxvd1RocmVhZChsYXllckJv
dW5kaW5nQm94KTsKKyAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZShsYXllckJv
dW5kc0luRmxvd1RocmVhZCk7CisKKyAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdGhlIGRpcnR5IHJl
Y3QuCisgICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQoZGlydHlSZWN0KTsKKyAg
ICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZShkaXJ0eVJlY3RJbkZsb3dUaHJlYWQp
OworCisgICAgLy8gTm93IHdlIGNhbiBjb21wYXJlIHdpdGggdGhlIGZsb3cgdGhyZWFkIHBvcnRp
b25zIG93bmVkIGJ5IGVhY2ggY29sdW1uLiBGaXJzdCBsZXQncworICAgIC8vIHNlZSBpZiB0aGUg
cmVjdCBpbnRlcnNlY3RzIG91ciBmbG93IHRocmVhZCBwb3J0aW9uIGF0IGFsbC4KKyAgICBMYXlv
dXRSZWN0IGNsaXBwZWRSZWN0KGxheWVyQm91bmRzSW5GbG93VGhyZWFkKTsKKyAgICBjbGlwcGVk
UmVjdC5pbnRlcnNlY3QoUmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVj
dCgpKTsKKyAgICBpZiAoY2xpcHBlZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gTm93IHdlIGtub3cgd2UgaW50ZXJzZWN0IGF0IGxlYXN0IG9uZSBjb2x1bW4u
IExldCdzIGZpZ3VyZSBvdXQgdGhlIGxvZ2ljYWwgdG9wIGFuZCBsb2dpY2FsCisgICAgLy8gYm90
dG9tIG9mIHRoZSBhcmVhIHdlJ3JlIGNoZWNraW5nLgorICAgIExheW91dFVuaXQgbGF5ZXJMb2dp
Y2FsVG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxheWVyQm91bmRzSW5GbG93VGhy
ZWFkLnkoKSA6IGxheWVyQm91bmRzSW5GbG93VGhyZWFkLngoKTsKKyAgICBMYXlvdXRVbml0IGxh
eWVyTG9naWNhbEJvdHRvbSA9IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbGF5ZXJCb3Vu
ZHNJbkZsb3dUaHJlYWQubWF4WSgpIDogbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQubWF4WCgpKSAt
IDE7CisgICAgCisgICAgLy8gRmlndXJlIG91dCB0aGUgc3RhcnQgYW5kIGVuZCBjb2x1bW5zIGFu
ZCBvbmx5IGNoZWNrIHdpdGhpbiB0aGF0IHJhbmdlIHNvIHRoYXQgd2UgZG9uJ3Qgd2FsayB0aGUK
KyAgICAvLyBlbnRpcmUgY29sdW1uIHNldC4KKyAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGNv
bHVtbkluZGV4QXRPZmZzZXQobGF5ZXJMb2dpY2FsVG9wKTsKKyAgICB1bnNpZ25lZCBlbmRDb2x1
bW4gPSBjb2x1bW5JbmRleEF0T2Zmc2V0KGxheWVyTG9naWNhbEJvdHRvbSk7CisgICAgCisgICAg
TGF5b3V0VW5pdCBjb2xMb2dpY2FsV2lkdGggPSBjb21wdXRlZENvbHVtbldpZHRoKCk7CisgICAg
TGF5b3V0VW5pdCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9
IGNvbHVtbkNvdW50KCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRDb2x1bW47
IGkgPD0gZW5kQ29sdW1uOyBpKyspIHsKKyAgICAgICAgLy8gR2V0IHRoZSBwb3J0aW9uIG9mIHRo
ZSBmbG93IHRocmVhZCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgY29sdW1uLgorICAgICAgICBM
YXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9uID0gZmxvd1RocmVhZFBvcnRpb25SZWN0QXQoaSk7
CisgICAgICAgIAorICAgICAgICAvLyBOb3cgZ2V0IHRoZSBvdmVyZmxvdyByZWN0IHRoYXQgY29y
cmVzcG9uZHMgdG8gdGhlIGNvbHVtbi4KKyAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkT3Zl
cmZsb3dQb3J0aW9uID0gZmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoZmxvd1RocmVhZFBv
cnRpb24sIGksIGNvbENvdW50LCBjb2xHYXApOworCisgICAgICAgIC8vIEluIG9yZGVyIHRvIGNy
ZWF0ZSBhIGZyYWdtZW50IHdlIG11c3QgaW50ZXJzZWN0IHRoZSBwb3J0aW9uIHBhaW50ZWQgYnkg
dGhpcyBjb2x1bW4uCisgICAgICAgIExheW91dFJlY3QgY2xpcHBlZFJlY3QobGF5ZXJCb3VuZHNJ
bkZsb3dUaHJlYWQpOworICAgICAgICBjbGlwcGVkUmVjdC5pbnRlcnNlY3QoZmxvd1RocmVhZE92
ZXJmbG93UG9ydGlvbik7CisgICAgICAgIGlmIChjbGlwcGVkUmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGFsc28gbmVlZCB0byBp
bnRlcnNlY3QgdGhlIGRpcnR5IHJlY3QuIFdlIGhhdmUgdG8gYXBwbHkgYSB0cmFuc2xhdGlvbiBh
bmQgc2hpZnQgYmFzZWQgb2ZmCisgICAgICAgIC8vIG91ciBjb2x1bW4gaW5kZXguCisgICAgICAg
IExheW91dFBvaW50IHRyYW5zbGF0aW9uT2Zmc2V0OworICAgICAgICBMYXlvdXRVbml0IGlubGlu
ZU9mZnNldCA9IGkgKiAoY29sTG9naWNhbFdpZHRoICsgY29sR2FwKTsKKyAgICAgICAgaWYgKCFz
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgICAgICBpbmxpbmVPZmZz
ZXQgPSAtaW5saW5lT2Zmc2V0OworICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5zZXRYKGlubGlu
ZU9mZnNldCk7CisgICAgICAgIExheW91dFVuaXQgYmxvY2tPZmZzZXQgPSBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gLWZsb3dUaHJlYWRQb3J0aW9uLnkoKSA6IC1mbG93VGhyZWFkUG9ydGlv
bi54KCk7CisgICAgICAgIGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZShzdHlsZSgpLT53
cml0aW5nTW9kZSgpKSkKKyAgICAgICAgICAgIGJsb2NrT2Zmc2V0ID0gLWJsb2NrT2Zmc2V0Owor
ICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5zZXRZKGJsb2NrT2Zmc2V0KTsKKyAgICAgICAgaWYg
KCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAgdHJhbnNsYXRpb25PZmZz
ZXQgPSB0cmFuc2xhdGlvbk9mZnNldC50cmFuc3Bvc2VkUG9pbnQoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFNoaWZ0IHRoZSBkaXJ0eSByZWN0IHRvIGJlIGluIGZsb3cgdGhyZWFkIGNvb3JkaW5h
dGVzIHdpdGggdGhpcyB0cmFuc2xhdGlvbiBhcHBsaWVkLgorICAgICAgICBMYXlvdXRSZWN0IHRy
YW5zbGF0ZWREaXJ0eVJlY3QoZGlydHlSZWN0SW5GbG93VGhyZWFkKTsKKyAgICAgICAgdHJhbnNs
YXRlZERpcnR5UmVjdC5tb3ZlQnkoLXRyYW5zbGF0aW9uT2Zmc2V0KTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFNlZSBpZiB3ZSBpbnRlcnNlY3QgdGhlIGRpcnR5IHJlY3QuCisgICAgICAgIGNsaXBw
ZWRSZWN0ID0gbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQ7CisgICAgICAgIGNsaXBwZWRSZWN0Lmlu
dGVyc2VjdCh0cmFuc2xhdGVkRGlydHlSZWN0KTsKKyAgICAgICAgaWYgKGNsaXBwZWRSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gU29t
ZXRoaW5nIGRvZXMgbmVlZCB0byBwYWludCBpbiB0aGlzIGNvbHVtbi4gTWFrZSBhIGZyYWdtZW50
IG5vdyBhbmQgc3VwcGx5IHRoZSBwaHlzaWNhbCB0cmFuc2xhdGlvbgorICAgICAgICAvLyBvZmZz
ZXQgYW5kIHRoZSBjbGlwIHJlY3QgZm9yIHRoZSBjb2x1bW4gd2l0aCB0aGF0IG9mZnNldCBhcHBs
aWVkLgorICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50OworICAgICAgICBmcmFnbWVudC5w
YWdpbmF0aW9uT2Zmc2V0ID0gdHJhbnNsYXRpb25PZmZzZXQ7CisgICAgICAgIAorICAgICAgICBM
YXlvdXRSZWN0IGZsaXBwZWRGbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uKGZsb3dUaHJlYWRPdmVy
Zmxvd1BvcnRpb24pOworICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUoZmxpcHBlZEZsb3dUaHJl
YWRPdmVyZmxvd1BvcnRpb24pOworICAgICAgICBmcmFnbWVudC5wYWdpbmF0aW9uQ2xpcCA9IGZs
aXBwZWRGbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uOworICAgICAgICBmcmFnbWVudHMuYXBwZW5k
KGZyYWdtZW50KTsKKyAgICB9Cit9CisKIGNvbnN0IGNoYXIqIFJlbmRlck11bHRpQ29sdW1uU2V0
OjpyZW5kZXJOYW1lKCkgY29uc3QKIHsgICAgCiAgICAgcmV0dXJuICJSZW5kZXJNdWx0aUNvbHVt
blNldCI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5T
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5TZXQuaAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDYgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21w
dXRlZFZhbHVlcyYpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2Jq
ZWN0KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFs
IExheW91dFVuaXQgcGFnZUxvZ2ljYWxXaWR0aCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
Y29tcHV0ZWRDb2x1bW5XaWR0aDsgfQogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWdlTG9naWNh
bEhlaWdodCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY29tcHV0ZWRDb2x1bW5IZWlnaHQ7
IH0KQEAgLTExMSwxMCArMTEwLDExIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCB2b2lk
IHJlcGFpbnRGbG93VGhyZWFkQ29udGVudChjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCwg
Ym9vbCBpbW1lZGlhdGUpIGNvbnN0IE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIGNvbGxl
Y3RMYXllckZyYWdtZW50cyhWZWN0b3I8TGF5ZXJGcmFnbWVudD4mLCBjb25zdCBMYXlvdXRSZWN0
JiBsYXllckJvdW5kaW5nQm94LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpIE9WRVJSSURF
OworICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogICAg
IAogICAgIHZvaWQgcGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQpOwotICAgIHZvaWQgcGFpbnRDb2x1bW5Db250ZW50cyhQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwogCiAgICAgTGF5b3V0VW5pdCBjb2x1
bW5HYXAoKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IGNvbHVtblJlY3RBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMTcsNyArMjMxNyw3IEBAIFJlbmRlck9iamVj
dCogUmVuZGVyT2JqZWN0Ojpjb250YWluZXIoY28KICNlbmRpZgogICAgICAgICAgICAgLy8gVGhl
IHJlbmRlciBmbG93IHRocmVhZCBpcyB0aGUgdG9wIG1vc3QgY29udGFpbmluZyBibG9jawogICAg
ICAgICAgICAgLy8gZm9yIHRoZSBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzLgotICAgICAgICAg
ICAgaWYgKG8tPmlzUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICAgICAgaWYgKG8tPmlzT3V0
T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICBpZiAocmVwYWludENvbnRhaW5lclNraXBwZWQgJiYgbyA9PSByZXBhaW50Q29udGFp
bmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNp
b24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zODEsNyArMzgxLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0
IHsgcmV0dXJuIGlzUmVuZGVyRmxvd1RocmVhZCgpICYmICFpc091dE9mRmxvd1Bvc2l0aW9uZWQo
KTsgfQorICAgIGJvb2wgaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1
cm4gaXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCk7IH0KIAog
ICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck11bHRpQ29sdW1uQmxvY2soKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck11bHRpQ29sdW1uU2V0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTczMiw3ICs3MzMsNyBAQCBwdWJsaWM6CiAjaWYgRU5B
QkxFKFNWRykKICAgICAgICAgICAgICAgICB8fCBpc1NWR0ZvcmVpZ25PYmplY3QoKQogI2VuZGlm
Ci0gICAgICAgICAgICAgICAgfHwgaXNSZW5kZXJGbG93VGhyZWFkKCk7CisgICAgICAgICAgICAg
ICAgfHwgaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCk7CiAgICAgfQogCiAgICAgLy8gQ29u
dmVydCB0aGUgZ2l2ZW4gbG9jYWwgcG9pbnQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKHJldmlzaW9uIDE0NDAwNykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBMYXll
ckZyYWdtZW50OwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyQm94UmVnaW9uSW5mbzsK
IGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CkBAIC0xMjcsNiArMTI4LDggQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3QgTGF5b3V0
UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlKSBjb25zdDsKIAorICAgIHZpcnR1YWwg
dm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVudHMoVmVjdG9yPExheWVyRnJhZ21lbnQ+JiwgY29uc3Qg
TGF5b3V0UmVjdCYsIGNvbnN0IExheW91dFJlY3QmKSB7IH07CisKIHByb3RlY3RlZDoKICAgICB2
b2lkIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwogICAgIHZvaWQgcmVzdG9yZVJlZ2lv
bk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7Cg==
</data>
<flag name="commit-queue"
          id="210880"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190303</attachid>
            <date>2013-02-26 09:27:46 -0800</date>
            <delta_ts>2013-02-26 18:00:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>72885</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24g
MTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzUwNSw4ICs3NTA1LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
b2Zmc2V0RnJvbUxvZ2ljYQogICAgIC8vIEZJWE1FOiBSaWdodCBub3csIHRoaXMgYXNzZXJ0IGlz
IGhpdCBvdXRzaWRlIGxheW91dCwgZnJvbSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCBpbiBz
ZWxlY3Rpb25HYXBSZWN0c0ZvclJlcGFpbnQgKGNhbGxlZCBmcm9tIEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3RBbGwpLgogICAgIC8vIEFTU0VSVChpblJlbmRlckZsb3dUaHJlYWQoKSk7CiAKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHNsb3dlciBwYXRoIHRoYXQgZG9lc24ndCB1c2UgbGF5b3V0IHN0
YXRlIGFuZCByZWxpZXMgb24gZ2V0dGluZyB5b3VyIGxvZ2ljYWwgdG9wIGluc2lkZSB0aGUgZW5j
bG9zaW5nIGZsb3cgdGhyZWFkLiBJdCBkb2Vzbid0Ci0gICAgLy8gd29yayB3aXRoIGNvbHVtbnMg
b3IgcGFnZXMgY3VycmVudGx5LCBidXQgaXQgc2hvdWxkIG9uY2UgdGhleSBoYXZlIGJlZW4gc3dp
dGNoZWQgb3ZlciB0byB1c2luZyBmbG93IHRocmVhZHMuCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSBzbG93ZXIgcGF0aCB0aGF0IGRvZXNuJ3QgdXNlIGxheW91dCBzdGF0ZSBhbmQgcmVsaWVzIG9u
IGdldHRpbmcgeW91ciBsb2dpY2FsIHRvcCBpbnNpZGUgdGhlIGVuY2xvc2luZyBmbG93IHRocmVh
ZC4gSXQgd29ya3MKKyAgICAvLyB3aXRoIHRoZSBuZXcgY29sdW1ucyAoYnV0IG5vdCB0aGUgb2xk
IG9uZXMgb3Igd2l0aCBwcmludGluZykuCiAgICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTc1MTUsOSArNzUxNSw4IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2EKIAogICAgIHdoaWxlIChjdXJyZW50QmxvY2sgJiYg
IWN1cnJlbnRCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKICAgICAgICAgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lckJsb2NrID0gY3VycmVudEJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLSAg
ICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrKTsKICAgICAgICAgaWYgKCFjb250YWluZXJCbG9j
aykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIDA7IC8vIFRoaXMg
Y2FuIGhhcHBlbiBmb3IgZml4ZWQvYWJzLXBvc2l0aW9uZWQgZWxlbWVudHMgaW5zaWRlIGNvbHVt
bnMuCiAgICAgICAgIExheW91dFBvaW50IGN1cnJlbnRCbG9ja0xvY2F0aW9uID0gY3VycmVudEJs
b2NrLT5sb2NhdGlvbigpOwogCiAgICAgICAgIGlmIChjb250YWluZXJCbG9jay0+c3R5bGUoKS0+
d3JpdGluZ01vZGUoKSAhPSBjdXJyZW50QmxvY2stPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJ
KHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU5LDYgKzk1OSwzNyBAQCB2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dpCiAgICAgICAgIHZpZXcoKS0+Zmxvd1RocmVh
ZENvbnRyb2xsZXIoKS0+ZGVjcmVtZW50Rmxvd1RocmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWlnaHRS
ZWdpb25zKCk7CiB9CiAKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdExheWVyRnJhZ21l
bnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAg
ICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVkKTsKKyAgICAKKyAgICBmb3IgKFJlbmRlclJl
Z2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRl
ciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgICAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvbiA9ICppdGVyOworICAgICAgICByZWdpb24tPmNvbGxlY3RMYXllckZyYWdtZW50cyhs
YXllckZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0JveCwgZGlydHlSZWN0KTsKKyAgICB9Cit9CisK
K0xheW91dFJlY3QgUmVuZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCkKK3sKKyAgICBBU1NFUlQoIW1fcmVnaW9uc0lu
dmFsaWRhdGVkKTsKKyAgICAKKyAgICBMYXlvdXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKFJlbmRl
clJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsg
aXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgICAgICBSZW5kZXJSZWdp
b24qIHJlZ2lvbiA9ICppdGVyOworICAgICAgICBMYXllckZyYWdtZW50cyBmcmFnbWVudHM7Cisg
ICAgICAgIHJlZ2lvbi0+Y29sbGVjdExheWVyRnJhZ21lbnRzKGZyYWdtZW50cywgbGF5ZXJCb3Vu
ZGluZ0JveCwgUGFpbnRJbmZvOjppbmZpbml0ZVJlY3QoKSk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBMYXllckZy
YWdtZW50IGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICAgICAgTGF5b3V0UmVj
dCBmcmFnbWVudFJlY3QobGF5ZXJCb3VuZGluZ0JveCk7CisgICAgICAgICAgICBmcmFnbWVudFJl
Y3QuaW50ZXJzZWN0KGZyYWdtZW50LnBhZ2luYXRpb25DbGlwKTsKKyAgICAgICAgICAgIGZyYWdt
ZW50UmVjdC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCk7CisgICAgICAgICAgICBy
ZXN1bHQudW5pdGUoZnJhZ21lbnRSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXI6OkN1
cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcihSZW5kZXJGbG93VGhyZWFkKiByZW5kZXJG
bG93VGhyZWFkKQogICAgIDogbV9yZW5kZXJGbG93VGhyZWFkKHJlbmRlckZsb3dUaHJlYWQpCiB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgJKHJl
dmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdHJ1Y3QgTGF5ZXJGcmFnbWVudDsKIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CiBj
bGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJlbmRlclJlZ2lvbjsKQEAgLTE0Myw2ICsxNDQsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lz
dGVudCgpIGNvbnN0OwogI2VuZGlmCiAKKyAgICB2b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhW
ZWN0b3I8TGF5ZXJGcmFnbWVudD4mLCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94
LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOworICAgIExheW91dFJlY3QgZnJhZ21lbnRz
Qm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCk7CisKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCA9IDA7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA1LDggKzQwNiwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDUwLDcgKzQ1Myw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIzLDI1ICs5MjYsMzIgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXNlUmVnaW9uQmFz
ZWRDb2x1bW5zKAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlvbigpCiB7CiAgICAg
bV9pc1BhZ2luYXRlZCA9IGZhbHNlOworICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0g
MDsKKwogICAgIGlmIChpc0NvbXBvc2l0ZWQoKSB8fCAhcGFyZW50KCkpCiAgICAgICAgIHJldHVy
bjsgLy8gRklYTUU6IFdlIHdpbGwgaGF2ZSB0byBkZWFsIHdpdGggcGFnaW5hdGVkIGNvbXBvc2l0
aW5nIGxheWVycyBzb21lZGF5LgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHRo
ZSBSZW5kZXJWaWV3IGNhbid0IGJlIHBhZ2luYXRlZC4gIEV2ZW50dWFsbHkgcHJpbnRpbmcgd2ls
bCBtb3ZlIHRvIGEgbW9kZWwgd2hlcmUgaXQgaXMgdGhvdWdoLgotICAgIAorCiAgICAgLy8gVGhl
IG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwYWdpbmF0ZWQgYm9vbGVhbnMgZm9yIHRoZSBv
bGQgY29sdW1uIGNvZGUgYW5kIHRoZSBuZXcgY29sdW1uIGNvZGUKICAgICAvLyBpcyB0aGF0IGVh
Y2ggcGFnaW5hdGVkIGxheWVyIGhhcyB0byBwYWludCBvbiBpdHMgb3duIHdpdGggdGhlIG5ldyBj
b2RlLiBUaGVyZSBpcyBubwogICAgIC8vIHJlY3VycmluZyBpbnRvIGNoaWxkIGxheWVycy4gVGhp
cyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMgZm9yIHRoZSBuZXcgY29sdW1uIGNv
ZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9vdHMiIHRoYXQgZ2V0IHNwbGl0IGFu
ZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3RlYWQgZWFjaCBsYXllciBoYXMgdG8g
YmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8gZ2VudWluZWx5IGtub3cgaWYgaXQg
aXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAgd2hlbiBwYWludGluZyBvbmx5IGl0
cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2VuZGFudAotICAgIC8vIGxheWVycyku
CisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyIGlu
c3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8g
Z2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2lseS4KICAgICBib29sIG5ld0NvbHVt
bnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAgICAgaWYgKG5ld0NvbHVtbnNVc2Vk
ICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIG1f
aXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9
IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgLy8gRklYTUU6IEhhbmRs
ZSB0cmFuc2Zvcm1zLgorICAgIGlmIChuZXdDb2x1bW5zVXNlZCAmJiBoYXNUcmFuc2Zvcm0oKSkK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTm9ybWFsRmxvd09ubHkoKSkgewogICAgICAg
ICBpZiAobmV3Q29sdW1uc1VzZWQpCi0gICAgICAgICAgICBtX2lzUGFnaW5hdGVkID0gcGFyZW50
KCktPmlzUGFnaW5hdGVkKCk7CisgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXll
ciA9IHBhcmVudCgpLT5lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IHBhcmVudCgpLT5yZW5kZXJlcigpLT5oYXNDb2x1
bW5zKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTk1Niw3ICs5NjYsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVQYWdpbmF0aW9uKCkKICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgJiYg
Y29udGFpbmluZ0Jsb2NrICE9IHZpZXc7CiAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0g
Y29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKSkgewogICAgICAgICAgICAgaWYgKGNv
bnRhaW5pbmdCbG9jay0+aGFzTGF5ZXIoKSkgewotICAgICAgICAgICAgICAgIG1faXNQYWdpbmF0
ZWQgPSBjb250YWluaW5nQmxvY2stPmxheWVyKCktPmlzUGFnaW5hdGVkKCk7CisgICAgICAgICAg
ICAgICAgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgPSBjb250YWluaW5nQmxvY2stPmxheWVy
KCktPmVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTU4Miw3ICsxNTkyLDcgQEAgc3RhdGljIExh
eW91dFJlY3QgdHJhbnNwYXJlbmN5Q2xpcEJveChjbwogICAgICAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlKGRlbHRhLngoKSwgZGVsdGEueSgpKTsKICAgICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3Jt
ICogKmxheWVyLT50cmFuc2Zvcm0oKTsKIAotICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0g
bGF5ZXItPmJvdW5kaW5nQm94KGxheWVyKTsKKyAgICAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9
IGxheWVyLT5ib3VuZGluZ0JveChsYXllciwgUmVuZGVyTGF5ZXI6OlVzZUZyYWdtZW50Qm94ZXMp
OwogICAgICAgICBleHBhbmRDbGlwUmVjdEZvckRlc2NlbmRhbnRzQW5kUmVmbGVjdGlvbihjbGlw
UmVjdCwgbGF5ZXIsIGxheWVyLCBwYWludEJlaGF2aW9yKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCiAgICAgICAgIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5maWx0ZXJPdXRzZXRzKCku
ZXhwYW5kUmVjdChjbGlwUmVjdCk7CkBAIC0xNTkwLDcgKzE2MDAsNyBAQCBzdGF0aWMgTGF5b3V0
UmVjdCB0cmFuc3BhcmVuY3lDbGlwQm94KGNvCiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm0ubWFw
UmVjdChjbGlwUmVjdCk7CiAgICAgfQogICAgIAotICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBs
YXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyKTsKKyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0g
bGF5ZXItPmJvdW5kaW5nQm94KHJvb3RMYXllciwgUmVuZGVyTGF5ZXI6OlVzZUZyYWdtZW50Qm94
ZXMpOwogICAgIGV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9uKGNsaXBS
ZWN0LCBsYXllciwgcm9vdExheWVyLCBwYWludEJlaGF2aW9yKTsKICNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCiAgICAgbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmZpbHRlck91dHNldHMoKS5l
eHBhbmRSZWN0KGNsaXBSZWN0KTsKQEAgLTE4MTQsMTIgKzE4MjQsMjAgQEAgc3RhdGljIGlubGlu
ZSBjb25zdCBSZW5kZXJMYXllciogYWNjdW11bAogICAgIGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7CiAgICAgRVBvc2l0aW9uIHBvc2l0
aW9uID0gcmVuZGVyZXItPnN0eWxlKCktPnBvc2l0aW9uKCk7CiAKKyAgICAvLyBGSVhNRTogU3Bl
Y2lhbCBjYXNpbmcgUmVuZGVyRmxvd1RocmVhZCBzbyBtdWNoIGZvciBmaXhlZCBwb3NpdGlvbmlu
ZyBoZXJlIGlzIG5vdCBncmVhdC4KKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmaXhlZEZsb3dUaHJl
YWRDb250YWluZXIgPSAwOworICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYmIHJl
bmRlcmVyLT5pblJlbmRlckZsb3dUaHJlYWQoKSkgeworICAgICAgICBmaXhlZEZsb3dUaHJlYWRD
b250YWluZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpOworICAgICAg
ICBpZiAoIWZpeGVkRmxvd1RocmVhZENvbnRhaW5lci0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
CisgICAgICAgICAgICBmaXhlZEZsb3dUaHJlYWRDb250YWluZXIgPSAwOworICAgIH0KKwogICAg
IC8vIEZJWE1FOiBQb3NpdGlvbmluZyBvZiBvdXQtb2YtZmxvdyhmaXhlZCwgYWJzb2x1dGUpIGVs
ZW1lbnRzIGNvbGxlY3RlZCBpbiBhIFJlbmRlckZsb3dUaHJlYWQKICAgICAvLyBtYXkgbmVlZCB0
byBiZSByZXZpc2l0ZWQgaW4gYSBmdXR1cmUgcGF0Y2guCiAgICAgLy8gSWYgdGhlIGZpeGVkIHJl
bmRlcmVyIGlzIGluc2lkZSBhIFJlbmRlckZsb3dUaHJlYWQsIHdlIHNob3VsZCBub3QgY29tcHV0
ZSBsb2NhdGlvbiB1c2luZyBsb2NhbFRvQWJzb2x1dGUsCiAgICAgLy8gc2luY2UgbG9jYWxUb0Fi
c29sdXRlIG1hcHMgdGhlIGNvb3JkaW5hdGVzIGZyb20gbmFtZWQgZmxvdyB0byByZWdpb25zIGNv
b3JkaW5hdGVzIGFuZCByZWdpb25zIGNhbiBiZQogICAgIC8vIHBvc2l0aW9uZWQgaW4gYSBjb21w
bGV0ZWx5IGRpZmZlcmVudCBwbGFjZSBpbiB0aGUgdmlld3BvcnQgKFJlbmRlclZpZXcpLgotICAg
IGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYmICFyZW5kZXJlci0+aW5SZW5kZXJGbG93
VGhyZWFkKCkgJiYgKCFhbmNlc3RvckxheWVyIHx8IGFuY2VzdG9yTGF5ZXIgPT0gcmVuZGVyZXIt
PnZpZXcoKS0+bGF5ZXIoKSkpIHsKKyAgICBpZiAocG9zaXRpb24gPT0gRml4ZWRQb3NpdGlvbiAm
JiAhZml4ZWRGbG93VGhyZWFkQ29udGFpbmVyICYmICghYW5jZXN0b3JMYXllciB8fCBhbmNlc3Rv
ckxheWVyID09IHJlbmRlcmVyLT52aWV3KCktPmxheWVyKCkpKSB7CiAgICAgICAgIC8vIElmIHRo
ZSBmaXhlZCBsYXllcidzIGNvbnRhaW5lciBpcyB0aGUgcm9vdCwganVzdCBhZGQgaW4gdGhlIG9m
ZnNldCBvZiB0aGUgdmlldy4gV2UgY2FuIG9idGFpbiB0aGlzIGJ5IGNhbGxpbmcKICAgICAgICAg
Ly8gbG9jYWxUb0Fic29sdXRlKCkgb24gdGhlIFJlbmRlclZpZXcuCiAgICAgICAgIEZsb2F0UG9p
bnQgYWJzUG9zID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIElzRml4
ZWQpOwpAQCAtMTgzMCw3ICsxODQ4LDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJMYXll
ciogYWNjdW11bAogICAgIC8vIEZvciB0aGUgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cyBpbnNp
ZGUgYSByZW5kZXIgZmxvdyB0aHJlYWQsIHdlIHNob3VsZCBhbHNvIHNraXAgdGhlIGNvZGUgcGF0
aCBiZWxvdwogICAgIC8vIE90aGVyd2lzZSwgZm9yIHRoZSBjYXNlIG9mIGFuY2VzdG9yTGF5ZXIg
PT0gcm9vdExheWVyIGFuZCBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnQgY2hpbGQgb2YgYSB0cmFu
c2Zvcm1lZAogICAgIC8vIGVsZW1lbnQgaW4gcmVuZGVyIGZsb3cgdGhyZWFkLCB3ZSB3aWxsIGhp
dCB0aGUgZml4ZWQgcG9zaXRpb25lZCBjb250YWluZXIgYmVmb3JlIGhpdHRpbmcgdGhlIGFuY2Vz
dG9yIGxheWVyLgotICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYmICFyZW5kZXJl
ci0+aW5SZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICBpZiAocG9zaXRpb24gPT0gRml4ZWRQb3Np
dGlvbiAmJiAhZml4ZWRGbG93VGhyZWFkQ29udGFpbmVyKSB7CiAgICAgICAgIC8vIEZvciBhIGZp
eGVkIGxheWVycywgd2UgbmVlZCB0byB3YWxrIHVwIHRvIHRoZSByb290IHRvIHNlZSBpZiB0aGVy
ZSdzIGEgZml4ZWQgcG9zaXRpb24gY29udGFpbmVyCiAgICAgICAgIC8vIChlLmcuIGEgdHJhbnNm
b3JtZWQgbGF5ZXIpLiBJdCdzIGFuIGVycm9yIHRvIGNhbGwgY29udmVydFRvTGF5ZXJDb29yZHMo
KSBhY3Jvc3MgYSBsYXllciB3aXRoIGEgdHJhbnNmb3JtLAogICAgICAgICAvLyBzbyB3ZSBzaG91
bGQgYWx3YXlzIGZpbmQgdGhlIGFuY2VzdG9yIGF0IG9yIGJlZm9yZSB3ZSBmaW5kIHRoZSBmaXhl
ZCBwb3NpdGlvbiBjb250YWluZXIuCkBAIC0xODgzLDcgKzE5MDEsNyBAQCBzdGF0aWMgaW5saW5l
IGNvbnN0IFJlbmRlckxheWVyKiBhY2N1bXVsCiAKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBy
ZWFjaCBSZW5kZXJWaWV3IGxheWVyIHBhc3QgdGhlIFJlbmRlckZsb3dUaHJlYWQgbGF5ZXIgZm9y
IGFueQogICAgICAgICAvLyBjaGlsZHJlbiBvZiB0aGUgUmVuZGVyRmxvd1RocmVhZC4KLSAgICAg
ICAgaWYgKHJlbmRlcmVyLT5pblJlbmRlckZsb3dUaHJlYWQoKSAmJiAhcmVuZGVyZXItPmlzUmVu
ZGVyRmxvd1RocmVhZCgpKQorICAgICAgICBpZiAocmVuZGVyZXItPmluUmVuZGVyRmxvd1RocmVh
ZCgpICYmICFsYXllci0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpCiAgICAgICAgICAg
ICBBU1NFUlQocGFyZW50TGF5ZXIgIT0gcmVuZGVyZXItPnZpZXcoKS0+bGF5ZXIoKSk7CiAKICAg
ICAgICAgaWYgKGZvdW5kQW5jZXN0b3JGaXJzdCkgewpAQCAtMzcxOCw3ICszNzM2LDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogCiAgICAgICAgICAgICAvLyBS
ZXdpcmUgdGhlIG9sZCBjb250ZXh0IHRvIGEgbWVtb3J5IGJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4g
Y2FwdHVyZSB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyLgogICAgICAgICAgICAgLy8gTk9URTog
V2Ugc2F2ZWQgdGhlIG9sZCBjb250ZXh0IGluIHRoZSAidHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0
IiBsb2NhbCB2YXJpYWJsZSwgdG8gYmUgYWJsZSB0byBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXll
cgotICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNvbnRleHQgYW5kIGF2b2lkIGR1cGxp
Y2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFjaCB0cmFuc3BhcmVueSBsYXllciBj
YWxsLiBBbHNvLCBub3RlIHRoYXQgCisgICAgICAgICAgICAvLyBvbiB0aGUgb3JpZ2luYWwgY29u
dGV4dCBhbmQgYXZvaWQgZHVwbGljYXRpbmcgImJlZ2luRmlsdGVyRWZmZWN0IiBhZnRlciBlYWNo
IHRyYW5zcGFyZW5jeSBsYXllciBjYWxsLiBBbHNvLCBub3RlIHRoYXQgCiAgICAgICAgICAgICAv
LyBiZWdpblRyYW5zcGFyZW5jeUxheWVycyB3aWxsIG9ubHkgY3JlYXRlIGEgc2luZ2xlIGxhenkg
dHJhbnNwYXJlbmN5IGxheWVyLCBldmVuIHRob3VnaCBpdCBpcyBjYWxsZWQgdHdpY2UgaW4gdGhp
cyBtZXRob2QuCiAgICAgICAgICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5iZWdpbkZpbHRl
ckVmZmVjdChjb250ZXh0KTsKIApAQCAtMzczMiwyOCArMzc1MCwxMyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9Ci0jZW5kaWYKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQg
dXNlIG9ubHkgd2hlbiB3ZSBuZWVkIHRoZW0uCi0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsK
LSAgICBDbGlwUmVjdCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0Owot
ICAgIExheW91dFBvaW50IHBhaW50T2Zmc2V0OwogCi0gICAgaWYgKHNob3VsZFBhaW50Q29udGVu
dCB8fCBzaG91bGRQYWludE91dGxpbmUgfHwgaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7
Ci0gICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbiwgKGxvY2FsUGFpbnRGbGFn
cyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDog
UGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBsb2NhbFBhaW50
RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzID8gSWdub3JlT3ZlcmZs
b3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xpcCk7Ci0gICAgICAgIGNhbGN1bGF0ZVJlY3RzKGNs
aXBSZWN0c0NvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckJv
dW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgJm9mZnNldEZy
b21Sb290KTsKLSAgICAgICAgcGFpbnRPZmZzZXQgPSB0b1BvaW50KGxheWVyQm91bmRzLmxvY2F0
aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxB
Y2N1bXVsYXRpb24pOworICAgIGlmIChmaWx0ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZl
Y3QoKSAmJiBoYXZlVHJhbnNwYXJlbmN5KSB7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYSBmaWx0
ZXIgYW5kIHRyYW5zcGFyZW5jeSwgd2UgaGF2ZSB0byBlYWdlcmx5IHN0YXJ0IGEgdHJhbnNwYXJl
bmN5IGxheWVyIGhlcmUsIHJhdGhlciB0aGFuIHJpc2sgYSBjaGlsZCBsYXllciBsYXppbHkgc3Rh
cnRzIG9uZSB3aXRoIHRoZSB3cm9uZyBjb250ZXh0LgorICAgICAgICBiZWdpblRyYW5zcGFyZW5j
eUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWlu
dEJlaGF2aW9yKTsKICAgICB9CisjZW5kaWYKIAotICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBs
b2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tU
ZXh0OwotICAgIGJvb2wgc2VsZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJl
aGF2aW9yICYgUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHk7Ci0gICAgCi0gICAgUGFpbnRCZWhh
dmlvciBwYWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKLSAgICBpZiAobG9jYWxQ
YWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQotICAgICAg
ICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7Ci0gICAg
ZWxzZSBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91
bmRPbmx5KQotICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dy
b3VuZE9ubHk7Ci0gICAgCiAgICAgLy8gSWYgdGhpcyBsYXllcidzIHJlbmRlcmVyIGlzIGEgY2hp
bGQgb2YgdGhlIHBhaW50aW5nUm9vdCwgd2UgcmVuZGVyIHVuY29uZGl0aW9uYWxseSwgd2hpY2gK
ICAgICAvLyBpcyBkb25lIGJ5IHBhc3NpbmcgYSBuaWwgcGFpbnRpbmdSb290IGRvd24gdG8gb3Vy
IHJlbmRlcmVyIChhcyBpZiBubyBwYWludGluZ1Jvb3Qgd2FzIGV2ZXIgc2V0KS4KICAgICAvLyBF
bHNlLCBvdXIgcmVuZGVyZXIgdHJlZSBtYXkgb3IgbWF5IG5vdCBjb250YWluIHRoZSBwYWludGlu
ZyByb290LCBzbyB3ZSBwYXNzIHRoYXQgcm9vdCBhbG9uZwpAQCAtMzc2NSw3OSArMzc2OCw0MyBA
QCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgaWYgKGxvY2Fs
UGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMgJiYgaXNTZWxmUGFpbnRpbmdMYXllcikK
ICAgICAgICAgcGVyZm9ybU92ZXJsYXBUZXN0cygqbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRl
c3RSZXF1ZXN0cywgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0aGlzKTsKIAotICAgIC8v
IFdlIHdhbnQgdG8gcGFpbnQgb3VyIGxheWVyLCBidXQgb25seSBpZiB3ZSBpbnRlcnNlY3QgdGhl
IGRhbWFnZSByZWN0LgotICAgIGlmICh0aGlzICE9IGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXll
ciB8fCAhKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVu
dHMpKQotICAgICAgICBzaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3Qo
bGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QucmVjdCgpLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsICZvZmZzZXRGcm9tUm9vdCk7CisgICAgYm9vbCBmb3JjZUJsYWNrVGV4dCA9IGxvY2FsUGFp
bnRpbmdJbmZvLnBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQ7Cisg
ICAgYm9vbCBzZWxlY3Rpb25Pbmx5ICA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3Ig
JiBQYWludEJlaGF2aW9yU2VsZWN0aW9uT25seTsKKyAgICAKKyAgICBQYWludEJlaGF2aW9yIHBh
aW50QmVoYXZpb3IgPSBQYWludEJlaGF2aW9yTm9ybWFsOworICAgIGlmIChsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyUGFpbnRpbmdTa2lwUm9vdEJhY2tncm91bmQpCisgICAgICAgIHBhaW50
QmVoYXZpb3IgfD0gUGFpbnRCZWhhdmlvclNraXBSb290QmFja2dyb3VuZDsKKyAgICBlbHNlIGlm
IChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdSb290QmFja2dyb3VuZE9ubHkp
CisgICAgICAgIHBhaW50QmVoYXZpb3IgfD0gUGFpbnRCZWhhdmlvclJvb3RCYWNrZ3JvdW5kT25s
eTsKIAotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNT
dGFydGVkRmlsdGVyRWZmZWN0KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgewotICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgZmlsdGVyIGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBz
dGFydCBhIHRyYW5zcGFyZW5jeSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQg
bGF5ZXIgbGF6aWx5IHN0YXJ0cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KLSAgICAgICAg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7CisgICAgTGF5ZXJGcmFnbWVudHMgbGF5ZXJGcmFn
bWVudHM7CisgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCB8fCBzaG91bGRQYWludE91dGxpbmUg
fHwgaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7CisgICAgICAgIC8vIENvbGxlY3QgdGhl
IGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBhbmQgcGFp
bnQgb2Zmc2V0cyBmb3IgZWFjaCBsYXllciBmcmFnbWVudCwgYXMgd2VsbCBhcyB3aGV0aGVyIG9y
IG5vdCB0aGUgY29udGVudCBvZiBlYWNoCisgICAgICAgIC8vIGZyYWdtZW50IHNob3VsZCBwYWlu
dC4KKyAgICAgICAgY29sbGVjdEZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24sIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50
TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdD
bGlwUmVjdHMsCisgICAgICAgICAgICAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50
aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZs
b3dDbGlwLCAmb2Zmc2V0RnJvbVJvb3QpOworICAgICAgICB1cGRhdGVQYWludGluZ0luZm9Gb3JG
cmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50Rmxh
Z3MsIHNob3VsZFBhaW50Q29udGVudCwgJm9mZnNldEZyb21Sb290KTsKICAgICB9Ci0jZW5kaWYK
LQorICAgIAogICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21w
b3NpdGluZ0JhY2tncm91bmRQaGFzZSkgewotICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50
ICYmICFzZWxlY3Rpb25Pbmx5KSB7Ci0gICAgICAgICAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kg
bGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUgdG8gcGFpbnQgc29tZXRoaW5n
LgotICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0gICAgICAgICAgICAgICAgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWlu
dGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKGxvY2Fs
UGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgewotICAgICAgICAgICAgICAgIC8vIFBhaW50
IG91ciBiYWNrZ3JvdW5kIGZpcnN0LCBiZWZvcmUgcGFpbnRpbmcgYW55IGNoaWxkIGxheWVycy4K
LSAgICAgICAgICAgICAgICAvLyBFc3RhYmxpc2ggdGhlIGNsaXAgdXNlZCB0byBwYWludCBvdXIg
YmFja2dyb3VuZC4KLSAgICAgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZv
LnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRh
bWFnZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOyAvLyBCYWNrZ3JvdW5k
IHBhaW50aW5nIHdpbGwgaGFuZGxlIGNsaXBwaW5nIHRvIHNlbGYuCi0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kLgotICAgICAg
ICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGRh
bWFnZVJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlv
ciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0g
ICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLQot
ICAgICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKLSAgICAg
ICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gUGFpbnQgb25seSB0
aGUgYmFja2dyb3VuZHMgZm9yIGFsbCBvZiB0aGUgZnJhZ21lbnRzIG9mIHRoZSBsYXllci4KKyAg
ICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCAmJiAhc2VsZWN0aW9uT25seSkKKyAgICAgICAg
ICAgIHBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwg
dHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGhh
dmVUcmFuc3BhcmVuY3ksCisgICAgICAgICAgICAgICAgbG9jYWxQYWludGluZ0luZm8sIHBhaW50
QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKIAogICAgICAgICAvLyBOb3cgd2Fs
ayB0aGUgc29ydGVkIGxpc3Qgb2YgY2hpbGRyZW4gd2l0aCBuZWdhdGl2ZSB6LWluZGljZXMuCiAg
ICAgICAgIHBhaW50TGlzdChuZWdaT3JkZXJMaXN0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIH0KICAgICAKICAgICBpZiAobG9jYWxQYWludEZs
YWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdGb3JlZ3JvdW5kUGhhc2UpIHsKLSAg
ICAgICAgLy8gTm93IGVzdGFibGlzaCB0aGUgYXBwcm9wcmlhdGUgY2xpcCBhbmQgcGFpbnQgb3Vy
IGNoaWxkIFJlbmRlck9iamVjdHMuCi0gICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgJiYg
IWNsaXBSZWN0VG9BcHBseS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIEJlZ2luIHRyYW5z
cGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtub3cgd2UgaGF2ZSB0byBwYWludCBz
b21ldGhpbmcuCi0gICAgICAgICAgICBpZiAoaGF2ZVRyYW5zcGFyZW5jeSkKLSAgICAgICAgICAg
ICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBs
b2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKLQotICAgICAgICAgICAgaWYgKGxvY2Fs
UGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgewotICAgICAgICAgICAgICAgIC8vIFNldCB1
cCB0aGUgY2xpcCB1c2VkIHdoZW4gcGFpbnRpbmcgb3VyIGNoaWxkcmVuLgotICAgICAgICAgICAg
ICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgY2xpcFJlY3RUb0FwcGx5KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250
ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBSZWN0VG9BcHBseS5yZWN0KCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Pbmx5ID8gUGFpbnRQaGFzZVNlbGVj
dGlvbiA6IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcmNlQmxhY2tUZXh0ID8gKFBhaW50QmVoYXZpb3IpUGFpbnRCZWhh
dmlvckZvcmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVy
ZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5w
YWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghc2VsZWN0aW9u
T25seSkgewotICAgICAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGbG9h
dDsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zm
c2V0KTsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRm9yZWdy
b3VuZDsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IGxv
Y2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHM7Ci0gICAgICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICAgICAg
cGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXM7Ci0gICAgICAgICAgICAg
ICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3Qp
Ci0gICAgICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KHNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdt
ZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBw
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFuc3BhcmVuY3ksCisgICAgICAgICAg
ICAgICAgbG9jYWxQYWludGluZ0luZm8sIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyLCBzZWxlY3Rpb25Pbmx5LCBmb3JjZUJsYWNrVGV4dCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoc2hvdWxkUGFpbnRPdXRsaW5lKQorICAgICAgICAgICAgcGFpbnRPdXRsaW5lRm9yRnJh
Z21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRC
ZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogCi0gICAgICAgIGlmIChzaG91bGRQ
YWludE91dGxpbmUgJiYgIW91dGxpbmVSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8g
UGFpbnQgb3VyIG93biBvdXRsaW5lCi0gICAgICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNv
bnRleHQsIHBpeGVsU25hcHBlZEludFJlY3Qob3V0bGluZVJlY3QucmVjdCgpKSwgUGFpbnRQaGFz
ZVNlbGZPdXRsaW5lLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9j
YWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAgICAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWlu
dGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgb3V0bGluZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOwotICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAg
ICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgb3V0bGluZVJlY3QpOwotICAgICAgICB9Ci0gICAgCiAgICAgICAgIC8vIFBhaW50IGFu
eSBjaGlsZCBsYXllcnMgdGhhdCBoYXZlIG92ZXJmbG93LgogICAgICAgICBwYWludExpc3QobV9u
b3JtYWxGbG93TGlzdC5nZXQoKSwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFp
bnRGbGFncyk7CiAgICAgCkBAIC0zODQ1LDM0ICszODEyLDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50TGF5ZXJDb250ZW50cyhHcmEKICAgICAgICAgcGFpbnRMaXN0KHBvc1pPcmRlckxpc3Qo
KSwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgfQog
Ci0gICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycykgewotICAgICAgICBjbGlwVG9S
ZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAgICAgICBwYWludE92ZXJmbG93Q29u
dHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHBhaW50T2Zmc2V0KSwgcGl4ZWxTbmFwcGVk
SW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSksIHRydWUpOwotICAgICAgICByZXN0b3JlQ2xpcChj
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7Ci0g
ICAgfQorICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpCisgICAgICAgIHBhaW50
T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8pOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgIGlmIChmaWx0
ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSkgewogICAgICAgICAvLyBBcHBseSB0
aGUgY29ycmVjdCBjbGlwcGluZyAoaWUuIG92ZXJmbG93OiBoaWRkZW4pLgotICAgICAgICBjbGlw
VG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5TGF5ZXJDb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CisgICAg
ICAgIC8vIEZJWE1FOiBJdCBpcyBpbmNvcnJlY3QgdG8ganVzdCBjbGlwIHRvIHRoZSBkYW1hZ2VS
ZWN0IGhlcmUgb25jZSBtdWx0aXBsZSBmcmFnbWVudHMgYXJlIGludm9sdmVkLgorICAgICAgICBD
bGlwUmVjdCBiYWNrZ3JvdW5kUmVjdCA9IGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSA/IENsaXBS
ZWN0KCkgOiBsYXllckZyYWdtZW50c1swXS5iYWNrZ3JvdW5kUmVjdDsKKyAgICAgICAgY2xpcFRv
UmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGJhY2tncm91bmRSZWN0KTsKICAg
ICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYXBwbHlGaWx0ZXJFZmZlY3QoKTsKLSAgICAg
ICAgcmVzdG9yZUNsaXAodHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
by5wYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CisgICAgICAgIHJlc3RvcmVDbGlwKHRyYW5z
cGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGJh
Y2tncm91bmRSZWN0KTsKICAgICB9CiAjZW5kaWYKLQorICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHdlIG5vdyB1c2UgdGhlIG9yaWdpbmFsIHRyYW5zcGFyZW5jeSBjb250ZXh0LgogICAgIEFT
U0VSVCh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQgPT0gY29udGV4dCk7CiAKICAgICBpZiAoKGxv
Y2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nTWFza1BoYXNlKSAm
JiBzaG91bGRQYWludENvbnRlbnQgJiYgcmVuZGVyZXIoKS0+aGFzTWFzaygpICYmICFzZWxlY3Rp
b25Pbmx5KSB7Ci0gICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3Qp
Ci0gICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QsIERvTm90
SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOyAvLyBNYXNrIHBhaW50aW5nIHdpbGwgaGFuZGxl
IGNsaXBwaW5nIHRvIHNlbGYuCi0gICAgICAgIAotICAgICAgICAvLyBQYWludCB0aGUgbWFzay4K
LSAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0
KGRhbWFnZVJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZU1hc2ssIFBhaW50QmVoYXZpb3JOb3JtYWws
IHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAg
ICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAgICAg
ICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVj
dCwgZGFtYWdlUmVjdCk7CisgICAgICAgIC8vIFBhaW50IHRoZSBtYXNrIGZvciB0aGUgZnJhZ21l
bnRzLgorICAgICAgICBwYWludE1hc2tGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgfQog
CiAgICAgLy8gRW5kIG91ciB0cmFuc3BhcmVuY3kgbGF5ZXIKQEAgLTM5MDQsMTMgKzM4NjMsMjI1
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGlzdChWZWN0b3I8UmVuZGUKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVuZGVyTGF5
ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgaWYgKCFjaGlsZExheWVyLT5p
c1BhZ2luYXRlZCgpIHx8IHVzZVJlZ2lvbkJhc2VkQ29sdW1ucygpKQorICAgICAgICBpZiAoIWNo
aWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkpCiAgICAgICAgICAgICBjaGlsZExheWVyLT5wYWludExh
eWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHBhaW50UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCBjb250ZXh0LCBw
YWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogICAgIH0KIH0KIAordm9pZCBSZW5kZXJMYXllcjo6
Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJM
YXllciogcm9vdExheWVyLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgY29uc3QgTGF5b3V0UmVjdCYg
ZGlydHlSZWN0LAorICAgIENsaXBSZWN0c1R5cGUgY2xpcFJlY3RzVHlwZSwgU2hvdWxkUmVzcGVj
dE92ZXJmbG93Q2xpcCByZXNwZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zm
c2V0RnJvbVJvb3QpCit7CisgICAgaWYgKCFlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSkgewor
ICAgICAgICAvLyBGb3IgdW5wYWdpbmF0ZWQgbGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9uZSBmcmFn
bWVudC4KKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudDsKKyAgICAgICAgQ2xpcFJlY3Rz
Q29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgcmVnaW9uLCBjbGlwUmVjdHNUeXBl
LCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAg
ICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQu
bGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5k
UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgZnJh
Z21lbnRzLmFwcGVuZChmcmFnbWVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gQ29tcHV0ZSBvdXIgb2Zmc2V0IHdpdGhpbiB0aGUgZW5jbG9zaW5nIHBhZ2luYXRpb24g
bGF5ZXIuCisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXI7CisgICAg
Y29udmVydFRvTGF5ZXJDb29yZHMoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIG9mZnNldFdp
dGhpblBhZ2luYXRlZExheWVyKTsKKyAgICAKKyAgICAvLyBDYWxjdWxhdGUgY2xpcCByZWN0cyBy
ZWxhdGl2ZSB0byB0aGUgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyLiBUaGUgcHVycG9zZSBvZiB0
aGlzIGNhbGwgaXMgdG8gZGV0ZXJtaW5lIG91ciBib3VuZHMgY2xpcHBlZCB0byBpbnRlcm1lZGlh
dGUKKyAgICAvLyBsYXllcnMgYmV0d2VlbiB1cyBhbmQgdGhlIHBhZ2luYXRpb24gY29udGV4dC4g
SXQncyBpbXBvcnRhbnQgdG8gbWluaW1pemUgdGhlICMgb2YgZnJhZ21lbnRzIHdlIG5lZWQgdG8g
Y3JlYXRlIGFuZCB0aGlzIGhlbHBzIHdpdGgKKyAgICAvLyB0aGF0LgorICAgIENsaXBSZWN0c0Nv
bnRleHQgcGFnaW5hdGlvbkNsaXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVy
KCksIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIHJl
c3BlY3RPdmVyZmxvd0NsaXApOworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNJbkZsb3dUaHJl
YWQ7CisgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQ7CisgICAgQ2xpcFJl
Y3QgZm9yZWdyb3VuZFJlY3RJbkZsb3dUaHJlYWQ7CisgICAgQ2xpcFJlY3Qgb3V0bGluZVJlY3RJ
bkZsb3dUaHJlYWQ7CisgICAgY2FsY3VsYXRlUmVjdHMocGFnaW5hdGlvbkNsaXBSZWN0c0NvbnRl
eHQsIFBhaW50SW5mbzo6aW5maW5pdGVSZWN0KCksIGxheWVyQm91bmRzSW5GbG93VGhyZWFkLCBi
YWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZCwgZm9yZWdyb3VuZFJlY3RJbkZsb3dUaHJlYWQsCisg
ICAgICAgIG91dGxpbmVSZWN0SW5GbG93VGhyZWFkLCAmb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5
ZXIpOworICAgIAorICAgIC8vIFRha2Ugb3VyIGJvdW5kaW5nIGJveCB3aXRoaW4gdGhlIGZsb3cg
dGhyZWFkIGFuZCBjbGlwIGl0LiBUaGlzIHdpbGwgaGVscCBtaW5pbWl6ZSB0aGUgIyBvZiBmcmFn
bWVudHMgd2UgaGF2ZSB0byBjcmVhdGUuCisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kaW5nQm94
SW5GbG93VGhyZWFkID0gYm91bmRpbmdCb3goZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIDAs
ICZvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7CisgICAgbGF5ZXJCb3VuZGluZ0JveEluRmxv
d1RocmVhZC5pbnRlcnNlY3QoYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQucmVjdCgpKTsKKwor
ICAgIC8vIFNoaWZ0IHRoZSBkaXJ0eSByZWN0IGludG8gZmxvdyB0aHJlYWQgY29vcmRpbmF0ZXMu
CisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKKyAgICBl
bmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVy
LCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKKyAgICBMYXlvdXRSZWN0IGRpcnR5
UmVjdEluRmxvd1RocmVhZChkaXJ0eVJlY3QpOworICAgIGRpcnR5UmVjdEluRmxvd1RocmVhZC5t
b3ZlQnkoLW9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOworCisgICAgLy8gVGVsbCB0
aGUgZmxvdyB0aHJlYWQgdG8gY29sbGVjdCB0aGUgZnJhZ21lbnRzLiBXZSBwYXNzIGVub3VnaCBp
bmZvcm1hdGlvbiB0byBjcmVhdGUgYSBtaW5pbWFsIG51bWJlciBvZiBmcmFnbWVudHMgYmFzZWQg
b2ZmIHRoZSBwYWdlcy9jb2x1bW5zCisgICAgLy8gdGhhdCBpbnRlcnNlY3QgdGhlIGFjdHVhbCBk
aXJ0eVJlY3QgYXMgd2VsbCBhcyB0aGUgcGFnZXMvY29sdW1ucyB0aGF0IGludGVyc2VjdCBvdXIg
bGF5ZXIncyBib3VuZGluZyBib3guCisgICAgUmVuZGVyRmxvd1RocmVhZCogZW5jbG9zaW5nRmxv
d1RocmVhZCA9IHRvUmVuZGVyRmxvd1RocmVhZChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+
cmVuZGVyZXIoKSk7CisgICAgZW5jbG9zaW5nRmxvd1RocmVhZC0+Y29sbGVjdExheWVyRnJhZ21l
bnRzKGZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0JveEluRmxvd1RocmVhZCwgZGlydHlSZWN0SW5G
bG93VGhyZWFkKTsKKyAgICAKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHJlY3RzCisgICAgLy8gVGhl
IGZyYWdtZW50cyBoYXZlIGhhZCB0cmFuc2xhdGlvbnMgYW5kIGNsaXBzIHN0b3JlZCBpbiB0aGVt
LiBOb3cgd2UgbmVlZCB0byBjbGlwIHRvIHRoZSBhbmNlc3RvcnMgb2YgdGhlIGVuY2xvc2luZyBw
YWdpbmF0aW9uIGxheWVyLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRz
LmF0KGkpOworICAgICAgICAKKyAgICAgICAgLy8gU2V0IG91ciBmb3VyIHJlY3RzIHdpdGggYWxs
IGNsaXBwaW5nIGFwcGxpZWQgdGhhdCB3YXMgaW50ZXJuYWwgdG8gdGhlIGZsb3cgdGhyZWFkLgor
ICAgICAgICBmcmFnbWVudC5zZXRSZWN0cyhsYXllckJvdW5kc0luRmxvd1RocmVhZCwgYmFja2dy
b3VuZFJlY3RJbkZsb3dUaHJlYWQsIGZvcmVncm91bmRSZWN0SW5GbG93VGhyZWFkLCBvdXRsaW5l
UmVjdEluRmxvd1RocmVhZCk7CisgICAgICAgIAorICAgICAgICAvLyBTaGlmdCB0byB0aGUgcm9v
dC1yZWxhdGl2ZSBwaHlzaWNhbCBwb3NpdGlvbiB1c2VkIHdoZW4gcGFpbnRpbmcgdGhlIGZsb3cg
dGhyZWFkIGluIHRoaXMgZnJhZ21lbnQuCisgICAgICAgIGZyYWdtZW50Lm1vdmVCeShmcmFnbWVu
dC5wYWdpbmF0aW9uT2Zmc2V0ICsgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogR2V0IHRoZSBwYXJlbnQgY2xpcCByZWN0cyBvZiB0
aGUgcGFnaW5hdGlvbiBsYXllciBhbmQgaW50ZXJzZWN0IHdpdGggdGhlbS4KKyAgICAgICAgIAor
ICAgICAgICAvLyBOb3cgaW50ZXJzZWN0IHdpdGggb3VyIHBhZ2luYXRpb24gY2xpcC4gVGhpcyB3
aWxsIHR5cGljYWxseSBtZWFuIHdlJ3JlIGp1c3QgaW50ZXJzZWN0aW5nIHRoZSBkaXJ0eSByZWN0
IHdpdGggdGhlIGNvbHVtbgorICAgICAgICAvLyBjbGlwLCBzbyB0aGUgY29sdW1uIGNsaXAgZW5k
cyB1cCBiZWluZyBhbGwgd2UgYXBwbHkuCisgICAgICAgIGZyYWdtZW50LmludGVyc2VjdChmcmFn
bWVudC5wYWdpbmF0aW9uQ2xpcCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3Mg
bG9jYWxQYWludEZsYWdzLCBib29sIHNob3VsZFBhaW50Q29udGVudCwKKyAgICBjb25zdCBMYXlv
dXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpCit7CisgICAgQVNTRVJUKG9mZnNldEZyb21Sb290KTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAg
ICAgICBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKyAgICAgICAg
ZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ID0gc2hvdWxkUGFpbnRDb250ZW50OworICAgICAg
ICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50
RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkgeworICAgICAgICAg
ICAgTGF5b3V0UG9pbnQgbmV3T2Zmc2V0RnJvbVJvb3QgPSAqb2Zmc2V0RnJvbVJvb3QgKyBmcmFn
bWVudC5wYWdpbmF0aW9uT2Zmc2V0OworICAgICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRD
b250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwg
Jm5ld09mZnNldEZyb21Sb290KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBs
YXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQq
IHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3Bh
cmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlv
ciwKKyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAg
ICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0
IHdlIGtub3cgd2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcuCisgICAgICAgIGlmIChoYXZlVHJh
bnNwYXJlbmN5KQorICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJl
bmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5j
eVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAK
KyAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgeworICAgICAg
ICAgICAgLy8gUGFpbnQgb3VyIGJhY2tncm91bmQgZmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkg
Y2hpbGQgbGF5ZXJzLgorICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8g
cGFpbnQgb3VyIGJhY2tncm91bmQuCisgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFk
aXVzKTsgLy8gQmFja2dyb3VuZCBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxm
LgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4K
KyAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSByZWdpb24g
ZnJvbSB0aGUgZnJhZ21lbnQgaXRzZWxmIGluc3RlYWQgb2YganVzdCBmcm9tIHRoZSBwYWludCBp
bmZvLgorICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZElu
dFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZUJsb2NrQmFj
a2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFp
bnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywg
dG9Qb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRp
b24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CisKKyAgICAg
ICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAgIHJl
c3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21l
bnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJl
bmN5TGF5ZXJDb250ZXh0LAorICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50
RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiBsb2NhbFBhaW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJl
bmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGJvb2wgc2VsZWN0aW9uT25seSwg
Ym9vbCBmb3JjZUJsYWNrVGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgaWYgd2Ug
aGF2ZSBzb21ldGhpbmcgdG8gcGFpbnQuCisgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0
KGkpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCAmJiAhZnJh
Z21lbnQuZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBQYWludEJlaGF2aW9yIGxvY2FsUGFpbnRC
ZWhhdmlvciA9IGZvcmNlQmxhY2tUZXh0ID8gKFBhaW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZv
cmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvcjsKKworICAgIC8vIE9wdGltaXplIGNsaXBwaW5n
IGZvciB0aGUgc2luZ2xlIGZyYWdtZW50IGNhc2UuCisgICAgYm9vbCBzaG91bGRDbGlwID0gbG9j
YWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ICYmIGxheWVyRnJhZ21lbnRzLnNpemUoKSA9
PSAxICYmIGxheWVyRnJhZ21lbnRzWzBdLnNob3VsZFBhaW50Q29udGVudCAmJiAhbGF5ZXJGcmFn
bWVudHNbMF0uZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpOworICAgIGlmIChzaG91bGRDbGlwKQor
ICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVyRnJhZ21lbnRzWzBdLmZvcmVn
cm91bmRSZWN0KTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIGxvb3AgdGhyb3VnaCBldmVyeSBm
cmFnbWVudCBtdWx0aXBsZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0byByZXBhaW50IGluIGVhY2gg
c3BlY2lmaWMgcGhhc2UgaW4gb3JkZXIgZm9yCisgICAgLy8gaW50ZXJsZWF2aW5nIG9mIHRoZSBm
cmFnbWVudHMgdG8gd29yayBwcm9wZXJseS4KKyAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVu
dHNXaXRoUGhhc2Uoc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBo
YXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLCBsYXllckZyYWdtZW50cywKKyAgICAgICAgY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOworICAgIAorICAgIGlmICghc2VsZWN0aW9uT25seSkgeworICAgICAgICBwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZsb2F0LCBsYXllckZy
YWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwg
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZvcmVncm91bmQsIGxheWVyRnJhZ21lbnRzLCBjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlcik7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFz
ZShQYWludFBoYXNlQ2hpbGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
KTsKKyAgICB9CisgICAgCisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckZyYWdtZW50
c1swXS5mb3JlZ3JvdW5kUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdy
b3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBoYXNlLCBjb25zdCBMYXllckZy
YWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3Ig
cGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sK
KyAgICBib29sIHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3Qg
JiYgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpID4gMTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBm
cmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNo
b3VsZFBhaW50Q29udGVudCB8fCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQor
ICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5k
UmVjdCk7CisgICAgCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxT
bmFwcGVkSW50UmVjdChmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5yZWN0KCkpLCBwaGFzZSwgcGFp
bnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJl
Z2lvbik7CisgICAgICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAg
ICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8u
b3ZlcmxhcFRlc3RSZXF1ZXN0czsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCB0b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2Nh
dGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmZvcmVncm91
bmRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZv
LAorICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJh
Z21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBs
YXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgaWYgKGZyYWdtZW50Lm91dGxpbmVSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICAvLyBQYWludCBv
dXIgb3duIG91dGxpbmUKKyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhl
bFNuYXBwZWRJbnRSZWN0KGZyYWdtZW50Lm91dGxpbmVSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VT
ZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2Fs
UGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0lu
Zm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwg
ZnJhZ21lbnQub3V0bGluZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOwor
ICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHRvUG9pbnQoZnJhZ21lbnQubGF5
ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5n
SW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOworICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3Qp
OworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sCisgICAgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJh
Z21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgaWYgKCFmcmFn
bWVudC5zaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgY2xp
cFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCwgRG9Ob3RJbmNs
dWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFpbnRpbmcgd2lsbCBoYW5kbGUgY2xp
cHBpbmcgdG8gc2VsZi4KKyAgICAgICAgCisgICAgICAgIC8vIFBhaW50IHRoZSBtYXNrLgorICAg
ICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9t
IHRoZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8u
CisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVj
dChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlTWFzaywgUGFpbnRC
ZWhhdmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZv
LnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChm
cmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxv
Y2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CisgICAgICAgIAorICAgICAg
ICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgcmVz
dG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJG
cmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIGxvY2FsUGFpbnRpbmdJbmZvKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5
ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVu
dCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRy
b2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRz
LmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3Vi
UGl4ZWxBY2N1bXVsYXRpb24pKSwKKyAgICAgICAgICAgIHBpeGVsU25hcHBlZEludFJlY3QoZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNr
Z3JvdW5kUmVjdCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRl
ZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZs
YWdzIHBhaW50RmxhZ3MpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMs
IGJyZWFraW5nIHVwIG91ciBjaGlsZCBsYXllciBpbnRvIHN0cmlwcy4KQEAgLTQwNDgsNyArNDIx
OSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFIKIAogICAgIHJl
bmRlcmVyKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgIAotICAgIExheW91dFJl
Y3QgaGl0VGVzdEFyZWEgPSByZW5kZXJlcigpLT5pc1JlbmRlckZsb3dUaHJlYWQoKSA/IHRvUmVu
ZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpIDogcmVuZGVyZXIoKS0+
dmlldygpLT5kb2N1bWVudFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gaXNP
dXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgPyB0b1JlbmRlckZsb3dUaHJlYWQocmVuZGVyZXIo
KSktPmJvcmRlckJveFJlY3QoKSA6IHJlbmRlcmVyKCktPnZpZXcoKS0+ZG9jdW1lbnRSZWN0KCk7
CiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBwaW5nKCkpCiAgICAgICAgIGhpdFRlc3RBcmVh
LmludGVyc2VjdChmcmFtZVZpc2libGVSZWN0KHJlbmRlcmVyKCkpKTsKIApAQCAtNDI1NCwxNiAr
NDQyNSw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAg
ICAgLy8gVGhpcyBsYXllciBpcyBmbGF0dGVuaW5nLCBzbyBmbGF0dGVuIHRoZSBzdGF0ZSBwYXNz
ZWQgdG8gZGVzY2VuZGFudHMuCiAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUtPmZsYXR0ZW4o
KTsKICAgICB9Ci0gICAgCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3Vs
ZCB1c2UuCi0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKLSAgICBDbGlwUmVjdCBiZ1JlY3Q7
Ci0gICAgQ2xpcFJlY3QgZmdSZWN0OwotICAgIENsaXBSZWN0IG91dGxpbmVSZWN0OwogCi0gICAg
Q2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgaGl0VGVzdExvY2F0
aW9uLnJlZ2lvbigpLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSk7Ci0gICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgaGl0VGVzdFJl
Y3QsIGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QpOwotICAgIAogICAg
IC8vIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHotZGVw
dGggb2YgdGhlIGhpdCBwb2ludCBvZiAzZC10cmFuc2Zvcm1lZAogICAgIC8vIGRlc2NlbmRhbnRz
LgogICAgIGRvdWJsZSBsb2NhbFpPZmZzZXQgPSAtbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKTsKQEAgLTQzMDgsMTcgKzQ0NzAsMjIgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICBjYW5kaWRhdGVMYXllciA9IGhpdExheWVyOwogICAg
IH0KIAotICAgIC8vIENoZWNrIGZvciB0aGUgcmVzaXplcgotICAgIGlmIChjYW5SZXNpemUoKSAm
JiByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheWVyQm91bmRz
KSkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgeworICAgIC8vIENv
bGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xl
cyBmb3IgZWFjaCBsYXllciBmcmFnbWVudC4KKyAgICBMYXllckZyYWdtZW50cyBsYXllckZyYWdt
ZW50czsKKyAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByb290TGF5ZXIsIGhp
dFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0
cyk7CisKKyAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhs
YXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uKSkgewogICAgICAgICByZW5kZXJlcigpLT51
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgaGl0VGVzdExvY2F0aW9uLnBvaW50KCkpOwogICAg
ICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKLSAgICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlm
IHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBs
YXllci4KLSAgICBpZiAoZmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiBpc1Nl
bGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBt
b3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4g
Q2hlY2sKKyAgICAvLyBldmVyeSBmcmFnbWVudCBpbiByZXZlcnNlIG9yZGVyLgorICAgIGlmIChp
c1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBv
cmFyeSBIaXRUZXN0UmVzdWx0LCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jl
c3VsdCcgaWYgd2Uga25vdyB3ZSdyZSBmcm9udG1vc3QuCiAgICAgICAgIEhpdFRlc3RSZXN1bHQg
dGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9uKCkpOwotICAgICAgICBpZiAoaGl0VGVz
dENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0TG9jYXRp
b24sIEhpdFRlc3REZXNjZW5kYW50cykKKyAgICAgICAgYm9vbCBpbnNpZGVGcmFnbWVudEZvcmVn
cm91bmRSZWN0ID0gZmFsc2U7CisgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVu
dHMobGF5ZXJGcmFnbWVudHMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwg
SGl0VGVzdERlc2NlbmRhbnRzLCBpbnNpZGVGcmFnbWVudEZvcmVncm91bmRSZWN0KQogICAgICAg
ICAgICAgJiYgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0
ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0
ZW1wUmVzdWx0KTsKQEAgLTQzMjgsMTMgKzQ0OTUsMTMgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg
ICAgICAgLy8gRm9yZWdyb3VuZCBjYW4gZGVwdGgtc29ydCB3aXRoIGRlc2NlbmRhbnQgbGF5ZXJz
LCBzbyBrZWVwIHRoaXMgYXMgYSBjYW5kaWRhdGUuCiAgICAgICAgICAgICBjYW5kaWRhdGVMYXll
ciA9IHRoaXM7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQor
ICAgICAgICB9IGVsc2UgaWYgKGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QgJiYgcmVzdWx0
LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0
KTsKICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sgb3VyIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRy
ZW4uCiAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0TGlzdChuZWdaT3JkZXJMaXN0KCksIHJvb3RMYXll
ciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0
KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zv
cm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFudHMpOworICAgICAgICBsb2NhbFRyYW5z
Zm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQdHIsIHpPZmZzZXQsIHVuZmxh
dHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCksIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKICAgICBp
ZiAoaGl0TGF5ZXIpIHsKICAgICAgICAgaWYgKCFkZXB0aFNvcnREZXNjZW5kYW50cykKICAgICAg
ICAgICAgIHJldHVybiBoaXRMYXllcjsKQEAgLTQzNDUsOSArNDUxMiwxMCBAQCBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgaWYgKGNhbmRpZGF0ZUxheWVyKQog
ICAgICAgICByZXR1cm4gY2FuZGlkYXRlTGF5ZXI7CiAKLSAgICBpZiAoYmdSZWN0LmludGVyc2Vj
dHMoaGl0VGVzdExvY2F0aW9uKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICBpZiAo
aXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3Vs
dChyZXN1bHQuaGl0VGVzdExvY2F0aW9uKCkpOwotICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRz
KHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0TG9jYXRpb24sIEhpdFRl
c3RTZWxmKQorICAgICAgICBib29sIGluc2lkZUZyYWdtZW50QmFja2dyb3VuZFJlY3QgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50
cywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0U2VsZiwgaW5z
aWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVjdCkKICAgICAgICAgICAgICYmIGlzSGl0Q2FuZGlkYXRl
KHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3Jt
U3RhdGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgp
KQogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CkBAIC00MzU1LDEz
ICs0NTIzLDQ2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAg
ICAgICAgaWYgKGluc2lkZUZyYWdtZW50QmFja2dyb3VuZFJlY3QgJiYgcmVzdWx0LmlzUmVjdEJh
c2VkVGVzdCgpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9
CiAKICAgICByZXR1cm4gMDsKIH0KIAorYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRz
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKKyAgICBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdEZpbHRlciBoaXRUZXN0
RmlsdGVyLCBib29sJiBpbnNpZGVDbGlwUmVjdCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFn
bWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBp
ID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5
ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAo
KGhpdFRlc3RGaWx0ZXIgPT0gSGl0VGVzdFNlbGYgJiYgIWZyYWdtZW50LmJhY2tncm91bmRSZWN0
LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSkKKyAgICAgICAgICAgIHx8IChoaXRUZXN0Rmls
dGVyID09IEhpdFRlc3REZXNjZW5kYW50cyAmJiAhZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaW50
ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpbnNpZGVDbGlwUmVjdCA9IHRydWU7CisgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVx
dWVzdCwgcmVzdWx0LCBmcmFnbWVudC5sYXllckJvdW5kcywgaGl0VGVzdExvY2F0aW9uLCBoaXRU
ZXN0RmlsdGVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbikgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVu
dHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0g
bGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJG
cmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6
ZXJDb3JuZXJSZWN0KHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3Vu
ZHMpKS5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKyAKIGJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5k
cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RGaWx0ZXIg
aGl0VGVzdEZpbHRlcikgY29uc3QKIHsKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigp
IHx8IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKQEAgLTQ0MDksNyArNDYxMCw3
IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmUKICAgICAgICAgUmVu
ZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIq
IGhpdExheWVyID0gMDsKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5o
aXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgp
ICYmICF1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlz
UGFnaW5hdGVkKCkpCiAgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdpbmF0ZWRDaGls
ZExheWVyKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVz
dFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5k
YW50cyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRMYXllci0+
aGl0VGVzdExheWVyKHJvb3RMYXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVz
dFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9y
RGVzY2VuZGFudHMpOwpAQCAtNDY5MSw4ICs0ODkyLDE4IEBAIHN0YXRpYyBpbmxpbmUgQ2xpcFJl
Y3QgYmFja2dyb3VuZENsaXBSZWMKIENsaXBSZWN0IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kQ2xp
cFJlY3QoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCkgY29uc3QKIHsK
ICAgICBBU1NFUlQocGFyZW50KCkpOworICAgIAogICAgIENsaXBSZWN0cyBwYXJlbnRSZWN0czsK
LSAgICBwYXJlbnRDbGlwUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgcGFyZW50UmVjdHMpOworCisg
ICAgLy8gSWYgd2UgY3Jvc3MgaW50byBhIGRpZmZlcmVudCBwYWdpbmF0aW9uIGNvbnRleHQsIHRo
ZW4gd2UgY2FuJ3QgcmVseSBvbiB0aGUgY2FjaGUuCisgICAgLy8gSnVzdCBzd2l0Y2ggb3ZlciB0
byB1c2luZyBUZW1wb3JhcnlDbGlwUmVjdHMuCisgICAgaWYgKGNsaXBSZWN0c0NvbnRleHQuY2xp
cFJlY3RzVHlwZSAhPSBUZW1wb3JhcnlDbGlwUmVjdHMgJiYgcGFyZW50KCktPmVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllcigpICE9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKSB7CisgICAgICAg
IENsaXBSZWN0c0NvbnRleHQgdGVtcENvbnRleHQoY2xpcFJlY3RzQ29udGV4dCk7CisgICAgICAg
IHRlbXBDb250ZXh0LmNsaXBSZWN0c1R5cGUgPSBUZW1wb3JhcnlDbGlwUmVjdHM7CisgICAgICAg
IHBhcmVudENsaXBSZWN0cyh0ZW1wQ29udGV4dCwgcGFyZW50UmVjdHMpOworICAgIH0gZWxzZQor
ICAgICAgICBwYXJlbnRDbGlwUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgcGFyZW50UmVjdHMpOwor
ICAgIAogICAgIENsaXBSZWN0IGJhY2tncm91bmRDbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVj
dEZvclBvc2l0aW9uKHBhcmVudFJlY3RzLCByZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigp
KTsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwogICAgIEFTU0VS
VCh2aWV3KTsKQEAgLTQ4NjAsNyArNTA3MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2Vj
dHNEYW1hZ2VSZWN0KGMKICAgICAgICAgCiAgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY29t
cHV0ZSB0aGUgYm91bmRpbmcgYm94IG9mIHRoaXMgc2luZ2xlIGxheWVyIGFuZCBzZWUgaWYgaXQg
aW50ZXJzZWN0cwogICAgIC8vIHRoZSBkYW1hZ2UgcmVjdC4KLSAgICByZXR1cm4gYm91bmRpbmdC
b3gocm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCkuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KTsKKyAg
ICByZXR1cm4gYm91bmRpbmdCb3gocm9vdExheWVyLCAwLCBvZmZzZXRGcm9tUm9vdCkuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KTsKIH0KIAogTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxCb3Vu
ZGluZ0JveChDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdApAQCAtNDkxMSwx
NCArNTEyMiwzMyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbEJvdW5kaW5nQm94CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdC
b3goY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBv
ZmZzZXRGcm9tUm9vdCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBDYWxjdWxhdGVMYXllckJvdW5kc0Zs
YWdzIGZsYWdzLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpIGNvbnN0CiB7ICAg
IAotICAgIExheW91dFJlY3QgcmVzdWx0ID0gbG9jYWxCb3VuZGluZ0JveCgpOworICAgIExheW91
dFJlY3QgcmVzdWx0ID0gbG9jYWxCb3VuZGluZ0JveChmbGFncyk7CiAgICAgaWYgKHJlbmRlcmVy
KCktPmlzQm94KCkpCiAgICAgICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVz
dWx0KTsKICAgICBlbHNlCiAgICAgICAgIHJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5m
bGlwRm9yV3JpdGluZ01vZGUocmVzdWx0KTsKIAorICAgIGlmIChlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKSAmJiAoZmxhZ3MgJiBVc2VGcmFnbWVudEJveGVzKSkgeworICAgICAgICAvLyBTcGxp
dCBvdXIgYm94IHVwIGludG8gdGhlIGFjdHVhbCBmcmFnbWVudCBib3hlcyB0aGF0IHJlbmRlciBp
biB0aGUgY29sdW1ucy9wYWdlcyBhbmQgdW5pdGUgdGhvc2UgdG9nZXRoZXIgdG8KKyAgICAgICAg
Ly8gZ2V0IG91ciB0cnVlIGJvdW5kaW5nIGJveC4KKyAgICAgICAgTGF5b3V0UG9pbnQgb2Zmc2V0
V2l0aGluUGFnaW5hdGlvbkxheWVyOworICAgICAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhlbmNs
b3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgb2Zmc2V0V2l0aGluUGFnaW5hdGlvbkxheWVyKTsgICAg
ICAgIAorICAgICAgICByZXN1bHQubW92ZUJ5KG9mZnNldFdpdGhpblBhZ2luYXRpb25MYXllcik7
CisKKyAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZW5jbG9zaW5nRmxvd1RocmVhZCA9IHRvUmVu
ZGVyRmxvd1RocmVhZChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+cmVuZGVyZXIoKSk7Cisg
ICAgICAgIHJlc3VsdCA9IGVuY2xvc2luZ0Zsb3dUaHJlYWQtPmZyYWdtZW50c0JvdW5kaW5nQm94
KHJlc3VsdCk7CisgICAgICAgIAorICAgICAgICBMYXlvdXRQb2ludCBkZWx0YTsKKyAgICAgICAg
aWYgKG9mZnNldEZyb21Sb290KQorICAgICAgICAgICAgZGVsdGEgPSAqb2Zmc2V0RnJvbVJvb3Q7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5j
b252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBkZWx0YSk7CisgICAgICAgIHJlc3Vs
dC5tb3ZlQnkoZGVsdGEpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIExh
eW91dFBvaW50IGRlbHRhOwogICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKICAgICAgICAgZGVsdGEg
PSAqb2Zmc2V0RnJvbVJvb3Q7CkBAIC01MzM2LDcgKzU1NjYsNyBAQCB2b2lkIFJlbmRlckxheWVy
Ojpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jCiAgICAgYm9vbCBpc1N0YWNraW5nID0gYmVoYXZpb3Ig
PT0gU3RvcEF0U3RhY2tpbmdDb250ZXh0cyA/IGlzU3RhY2tpbmdDb250ZXh0KCkgOiBpc1N0YWNr
aW5nQ29udGFpbmVyKCk7CiAgICAgLy8gT3ZlcmZsb3cgbGF5ZXJzIGFyZSBqdXN0IHBhaW50ZWQg
YnkgdGhlaXIgZW5jbG9zaW5nIGxheWVycywgc28gdGhleSBkb24ndCBnZXQgcHV0IGluIHpvcmRl
ciBsaXN0cy4KICAgICBib29sIGluY2x1ZGVIaWRkZW5MYXllciA9IGluY2x1ZGVIaWRkZW5MYXll
cnMgfHwgKG1faGFzVmlzaWJsZUNvbnRlbnQgfHwgKG1faGFzVmlzaWJsZURlc2NlbmRhbnQgJiYg
aXNTdGFja2luZykpOwotICAgIGlmIChpbmNsdWRlSGlkZGVuTGF5ZXIgJiYgIWlzTm9ybWFsRmxv
d09ubHkoKSAmJiAhcmVuZGVyZXIoKS0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICBpZiAo
aW5jbHVkZUhpZGRlbkxheWVyICYmICFpc05vcm1hbEZsb3dPbmx5KCkgJiYgIWlzT3V0T2ZGbG93
UmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgIC8vIERldGVybWluZSB3aGljaCBidWZmZXIg
dGhlIGNoaWxkIHNob3VsZCBiZSBpbi4KICAgICAgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXll
cio+ID4mIGJ1ZmZlciA9ICh6SW5kZXgoKSA+PSAwKSA/IHBvc0J1ZmZlciA6IG5lZ0J1ZmZlcjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDE0
NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw2ICs2Miw3IEBAIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBI
aXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU7CitjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwogY2xhc3MgUmVuZGVyR2VvbWV0
cnlNYXA7CiBjbGFzcyBSZW5kZXJNYXJxdWVlOwogY2xhc3MgUmVuZGVyUmVwbGljYTsKQEAgLTEx
NCw2ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQgbW92ZShMYXlvdXRVbml0IHgs
IExheW91dFVuaXQgeSkgeyBtX3JlY3QubW92ZSh4LCB5KTsgfQogICAgIHZvaWQgbW92ZShjb25z
dCBMYXlvdXRTaXplJiBzaXplKSB7IG1fcmVjdC5tb3ZlKHNpemUpOyB9CisgICAgdm9pZCBtb3Zl
QnkoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSB7IG1fcmVjdC5tb3ZlQnkocG9pbnQpOyB9CiAK
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3JlY3QuaXNFbXB0eSgpOyB9CiAg
ICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IExheW91dFJlY3QmIHJlY3QpIHsgcmV0dXJuIG1fcmVj
dC5pbnRlcnNlY3RzKHJlY3QpOyB9CkBAIC0yNTEsNiArMjUzLDUyIEBAIHB1YmxpYzoKICNlbmRp
ZgogfTsKIAorc3RydWN0IExheWVyRnJhZ21lbnQgeworcHVibGljOgorICAgIExheWVyRnJhZ21l
bnQoKQorICAgICAgICA6IHNob3VsZFBhaW50Q29udGVudChmYWxzZSkKKyAgICB7IH0KKworICAg
IHZvaWQgc2V0UmVjdHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzLCBjb25zdCBDbGlwUmVjdCYg
YmFja2dyb3VuZCwgY29uc3QgQ2xpcFJlY3QmIGZvcmVncm91bmQsIGNvbnN0IENsaXBSZWN0JiBv
dXRsaW5lKQorICAgIHsKKyAgICAgICAgbGF5ZXJCb3VuZHMgPSBib3VuZHM7CisgICAgICAgIGJh
Y2tncm91bmRSZWN0ID0gYmFja2dyb3VuZDsKKyAgICAgICAgZm9yZWdyb3VuZFJlY3QgPSBmb3Jl
Z3JvdW5kOworICAgICAgICBvdXRsaW5lUmVjdCA9IG91dGxpbmU7CisgICAgfQorICAgIAorICAg
IHZvaWQgbW92ZUJ5KGNvbnN0IExheW91dFBvaW50JiBvZmZzZXQpCisgICAgeworICAgICAgICBs
YXllckJvdW5kcy5tb3ZlQnkob2Zmc2V0KTsKKyAgICAgICAgYmFja2dyb3VuZFJlY3QubW92ZUJ5
KG9mZnNldCk7CisgICAgICAgIGZvcmVncm91bmRSZWN0Lm1vdmVCeShvZmZzZXQpOworICAgICAg
ICBvdXRsaW5lUmVjdC5tb3ZlQnkob2Zmc2V0KTsKKyAgICAgICAgcGFnaW5hdGlvbkNsaXAubW92
ZUJ5KG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IExheW91
dFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QocmVj
dCk7CisgICAgICAgIGZvcmVncm91bmRSZWN0LmludGVyc2VjdChyZWN0KTsKKyAgICAgICAgb3V0
bGluZVJlY3QuaW50ZXJzZWN0KHJlY3QpOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFBh
aW50Q29udGVudDsKKyAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOworICAgIENsaXBSZWN0IGJh
Y2tncm91bmRSZWN0OworICAgIENsaXBSZWN0IGZvcmVncm91bmRSZWN0OworICAgIENsaXBSZWN0
IG91dGxpbmVSZWN0OworICAgIAorICAgIC8vIFVuaXF1ZSB0byBwYWdpbmF0ZWQgZnJhZ21lbnRz
LiBUaGUgcGh5c2ljYWwgdHJhbnNsYXRpb24gdG8gYXBwbHkgdG8gc2hpZnQgdGhlIGxheWVyIHdo
ZW4gcGFpbnRpbmcvaGl0LXRlc3RpbmcuCisgICAgTGF5b3V0UG9pbnQgcGFnaW5hdGlvbk9mZnNl
dDsKKyAgICAKKyAgICAvLyBBbHNvIHVuaXF1ZSB0byBwYWdpbmF0ZWQgZnJhZ21lbnRzLiBBbiBh
ZGRpdGlvbmFsIGNsaXAgdGhhdCBhcHBsaWVzIHRvIHRoZSBsYXllci4gSXQgaXMgaW4gbGF5ZXIt
bG9jYWwKKyAgICAvLyAocGh5c2ljYWwpIGNvb3JkaW5hdGVzLgorICAgIExheW91dFJlY3QgcGFn
aW5hdGlvbkNsaXA7Cit9OworCit0eXBlZGVmIFZlY3RvcjxMYXllckZyYWdtZW50PiBMYXllckZy
YWdtZW50czsKKwogY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgewog
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwpAQCAtNDE4LDYgKzQ2Niw3
IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAogICAgIGJvb2wgaXNQYWdpbmF0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzUGFnaW5hdGVkOyB9CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOyB9
CiAKICAgICB2b2lkIHVwZGF0ZVRyYW5zZm9ybSgpOwogICAgIApAQCAtNjIyLDEyICs2NzEsMTMg
QEAgcHVibGljOgogICAgICAgICBFeGNsdWRlSGlkZGVuRGVzY2VuZGFudHMgPSAxIDw8IDMsCiAg
ICAgICAgIERvbnRDb25zdHJhaW5Gb3JNYXNrID0gMSA8PCA0LAogICAgICAgICBJbmNsdWRlQ29t
cG9zaXRlZERlc2NlbmRhbnRzID0gMSA8PCA1LAotICAgICAgICBEZWZhdWx0Q2FsY3VsYXRlTGF5
ZXJCb3VuZHNGbGFncyA9ICBJbmNsdWRlU2VsZlRyYW5zZm9ybSB8IFVzZUxvY2FsQ2xpcFJlY3RJ
ZlBvc3NpYmxlIHwgSW5jbHVkZUxheWVyRmlsdGVyT3V0c2V0cworICAgICAgICBVc2VGcmFnbWVu
dEJveGVzID0gMSA8PCA2LAorICAgICAgICBEZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFn
cyA9ICBJbmNsdWRlU2VsZlRyYW5zZm9ybSB8IFVzZUxvY2FsQ2xpcFJlY3RJZlBvc3NpYmxlIHwg
SW5jbHVkZUxheWVyRmlsdGVyT3V0c2V0cyB8IFVzZUZyYWdtZW50Qm94ZXMKICAgICB9OwogICAg
IHR5cGVkZWYgdW5zaWduZWQgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFnczsKIAogICAgIC8vIEJv
dW5kaW5nIGJveCByZWxhdGl2ZSB0byBzb21lIGFuY2VzdG9yIGxheWVyLiBQYXNzIG9mZnNldEZy
b21Sb290IGlmIGtub3duLgotICAgIExheW91dFJlY3QgYm91bmRpbmdCb3goY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gMCkg
Y29uc3Q7CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveChjb25zdCBSZW5kZXJMYXllciogcm9v
dExheWVyLCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzID0gMCwgY29uc3QgTGF5b3V0UG9pbnQq
IG9mZnNldEZyb21Sb290ID0gMCkgY29uc3Q7CiAgICAgLy8gQm91bmRpbmcgYm94IGluIHRoZSBj
b29yZGluYXRlcyBvZiB0aGlzIGxheWVyLgogICAgIExheW91dFJlY3QgbG9jYWxCb3VuZGluZ0Jv
eChDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzID0gMCkgY29uc3Q7CiAgICAgLy8gUGl4ZWwgc25h
cHBlZCBib3VuZGluZyBib3ggcmVsYXRpdmUgdG8gdGhlIHJvb3QuCkBAIC03ODEsNiArODMxLDgg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRS
ZWFzb24oVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24gcmVhc29uKSB7IG1f
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24gPSByZWFzb247IH0KICAgICBW
aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiB2aWV3cG9ydENvbnN0cmFpbmVk
Tm90Q29tcG9zaXRlZFJlYXNvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFZpZXdwb3J0
Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uPihtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RD
b21wb3NpdGVkUmVhc29uKTsgfQogI2VuZGlmCisgICAgCisgICAgYm9vbCBpc091dE9mRmxvd1Jl
bmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5pc091dE9mRmxvd1Jl
bmRlckZsb3dUaHJlYWQoKTsgfQogCiBwcml2YXRlOgogICAgIGVudW0gQ29sbGVjdExheWVyc0Jl
aGF2aW9yIHsgU3RvcEF0U3RhY2tpbmdDb250ZXh0cywgU3RvcEF0U3RhY2tpbmdDb250YWluZXJz
IH07CkBAIC04OTAsNiArOTQyLDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludFBhZ2luYXRl
ZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKICAgICB2b2lkIHBhaW50
Q2hpbGRMYXllckludG9Db2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgY29uc3Qg
VmVjdG9yPFJlbmRlckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90IGNvbHVtbkluZGV4KTsK
IAorICAgIHZvaWQgY29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNvbnN0IFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIFJlbmRlclJlZ2lvbiosIGNvbnN0IExheW91dFJlY3QmIGRpcnR5
UmVjdCwKKyAgICAgICAgQ2xpcFJlY3RzVHlwZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCA9
IFJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9
IDApOworICAgIHZvaWQgdXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVyRnJhZ21l
bnRzJiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGJvb2wgc2hv
dWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpOworICAg
IHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwg
R3JhcGhpY3NDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQsCisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0
LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRC
ZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9p
ZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFw
aGljc0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwK
KyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJv
b2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2
aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLAorICAgICAgICBib29s
IHNlbGVjdGlvbk9ubHksIGJvb2wgZm9yY2VCbGFja1RleHQpOworICAgIHZvaWQgcGFpbnRGb3Jl
Z3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBhaW50UGhhc2UsIGNvbnN0IExheWVyRnJhZ21l
bnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJl
aGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lk
IHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVy
T2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9pZCBwYWludE92ZXJmbG93
Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYpOworICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJh
Z21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsK
KwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
UmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGJv
b2wgYXBwbGllZFRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUgPSAwLCBkb3VibGUqIHpP
ZmZzZXQgPSAwKTsKQEAgLTkxMCw2ICs5NzUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVyVHJh
bnNmb3JtU3RhdGUpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVy
Qm91bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKKyAg
ICBib29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYs
IGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKKyAgICBi
b29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mKSBjb25zdDsKIAogICAgIGJvb2wgbGlzdENvbnRlbnRzT3BhcXVl
SW5SZWN0KGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiwgY29uc3QgTGF5b3V0UmVjdCYpIGNv
bnN0OwogCkBAIC0xMTg0LDYgKzEyNTEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyU2Nyb2xs
YmFyUGFydCogbV9zY3JvbGxDb3JuZXI7CiAgICAgUmVuZGVyU2Nyb2xsYmFyUGFydCogbV9yZXNp
emVyOwogCisgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQg
Y2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRl
ZC4KKyAgICBSZW5kZXJMYXllciogbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7CisKIHByaXZh
dGU6CiAgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNw
cAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDYgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZU11bAogICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gbmV3U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKICAgICBuZXdTdHlsZS0+aW5o
ZXJpdEZyb20ocGFyZW50U3R5bGUpOwogICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsK
LSAgICBuZXdTdHlsZS0+c2V0UG9zaXRpb24oUmVsYXRpdmVQb3NpdGlvbik7Ci0gICAgbmV3U3R5
bGUtPnNldFpJbmRleCgwKTsKICAgICBuZXdTdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKICAgICBy
ZXR1cm4gbmV3U3R5bGUucmVsZWFzZSgpOwogfQpAQCAtMTYyLDYgKzE2MCwxNSBAQCB2b2lkIFJl
bmRlck11bHRpQ29sdW1uQmxvY2s6OmVuc3VyZUNvbHVtCiAgICAgY29sdW1uU2V0LT5zZXRSZXF1
aXJlc0JhbGFuY2luZyhyZXF1aXJlc0JhbGFuY2luZygpKTsKIH0KIAordm9pZCBSZW5kZXJNdWx0
aUNvbHVtbkJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQgcGFnZUxvZ2ljYWxIZWlnaHQpCit7CisgICAgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKHJl
bGF5b3V0Q2hpbGRyZW4sIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKKyAgICAKKyAgICAvLyBTaGlmdCB0
aGUgZmxvdyB0aHJlYWQgYmFjayB1cCB0byB0aGUgdG9wIG9mIHRoZSBibG9jay4KKyAgICBpZiAo
Zmxvd1RocmVhZCgpKQorICAgICAgICBmbG93VGhyZWFkKCktPnNldExvZ2ljYWxUb3AoYm9yZGVy
QmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkpOworfQorCiBjb25zdCBjaGFyKiBSZW5kZXJNdWx0
aUNvbHVtbkJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QKIHsKICAgICBpZiAoaXNGbG9hdGluZygp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5CbG9jay5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw4IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29u
c3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVu
LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgT1ZFUlJJREU7CisKICAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lkdGgoKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhlaWdodENoYW5nZShMYXlv
dXRVbml0JiBwYWdlTG9naWNhbEhlaWdodCwgYm9vbCYgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2Vk
LCBib29sJiBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBib29sIHJlbGF5b3V0Rm9yUGFnaW5hdGlvbihib29sIGhhc1NwZWNpZmllZFBhZ2VMb2dp
Y2FsSGVpZ2h0LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50
YWluZXImKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgJKHJldmlzaW9uIDE0NDAwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNiBAQCBwdWJsaWM6CiAgICAgflJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZCgpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc0luRmxv
d1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9Ci0KICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYpIGNv
bnN0IE9WRVJSSURFOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlck11
bHRpQ29sdW1uU2V0LmgiCiAKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAi
UGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJN
dWx0aUNvbHVtbkJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
LmgiCiAKQEAgLTI0OSwxMCArMjQ5LDcgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFp
bnRPYmplY3QoUAogICAgIGlmICghbV9mbG93VGhyZWFkIHx8ICFpc1ZhbGlkKCkgfHwgKHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZVNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldFJlZ2lvbk9i
amVjdHNSZWdpb25TdHlsZSgpOwogICAgIHBhaW50Q29sdW1uUnVsZXMocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCk7Ci0gICAgcGFpbnRDb2x1bW5Db250ZW50cyhwYWludEluZm8sIHBhaW50T2Zmc2V0
KTsKLSAgICByZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKTsKIH0KIAogdm9pZCBS
ZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMzA5LDc2ICszMDYsNiBAQCB2
b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1CiAgICAgfQogfQogCi12b2lk
IFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtbkNvbnRlbnRzKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAgLy8gRm9yIGVh
Y2ggcmVjdGFuZ2xlLCBzZXQgaXQgYXMgdGhlIHJlZ2lvbiByZWN0YW5nbGUgYW5kIHRoZW4gbGV0
IGZsb3cgdGhyZWFkIHBhaW50aW5nIGRvIHRoZSByZXN0LgotICAgIC8vIFdlIG1ha2UgbXVsdGlw
bGUgY2FsbHMgdG8gcGFpbnRGbG93VGhyZWFkUG9ydGlvbkluUmVnaW9uLCBjaGFuZ2luZyB0aGUg
cmVjdGFuZ2xlcyBlYWNoIHRpbWUuCi0gICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3Vu
dCgpOwotICAgIGlmICghY29sQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91dFVu
aXQgY29sR2FwID0gY29sdW1uR2FwKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
bENvdW50OyBpKyspIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgZ2V0IHRoZSBjb2x1bW4gcmVjdCwg
d2hpY2ggaXMgaW4gb3VyIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UsIGFuZCB3ZSBtYWtlIGl0IHBo
eXNpY2FsIGFuZCBhcHBseQotICAgICAgICAvLyB0aGUgcGFpbnQgb2Zmc2V0IHRvIGl0LiBUaGF0
IGdpdmVzIHVzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiB0aGF0IHdlIHdhbnQgdG8gcGFpbnQgdGhl
IGNvbHVtbiBhdC4KLSAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGkp
OwotICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUoY29sUmVjdCk7Ci0gICAgICAgIGNvbFJlY3Qu
bW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5leHQgd2UgZ2V0IHRo
ZSBwb3J0aW9uIG9mIHRoZSBmbG93IHRocmVhZCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgY29s
dW1uLgotICAgICAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9uID0gZmxvd1RocmVhZFBv
cnRpb25SZWN0QXQoaSk7Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgZ2V0IHRoZSBvdmVyZmxv
dyByZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGNvbHVtbi4KLSAgICAgICAgTGF5b3V0UmVj
dCBmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uID0gZmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1Jl
Y3QoZmxvd1RocmVhZFBvcnRpb24sIGksIGNvbENvdW50LCBjb2xHYXApOwotCi0gICAgICAgIC8v
IERvIHRoZSBwYWludCB3aXRoIHRoZSBjb21wdXRlZCByZWN0cy4KLSAgICAgICAgZmxvd1RocmVh
ZCgpLT5wYWludEZsb3dUaHJlYWRQb3J0aW9uSW5SZWdpb24ocGFpbnRJbmZvLCB0aGlzLCBmbG93
VGhyZWFkUG9ydGlvbiwgZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbiwgY29sUmVjdC5sb2NhdGlv
bigpKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKLXsKLSAgICBMYXlv
dXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigp
OwotCi0gICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlIGFsd2F5
cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCi0gICAgLy8gZm9yZWdyb3Vu
ZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBpbWFnZXMp
LgotICAgIC8vIEZJWE1FOiBPbmNlIHdlIHN1cHBvcnQgb3ZlcmZsb3csIHdlIG5lZWQgdG8gaW50
ZXJzZWN0IHdpdGggdGhhdCBhbmQgbm90IHdpdGggdGhlIGJvdW5kcyByZWN0LgotICAgIExheW91
dFJlY3QgYm91bmRzUmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihsb2NhdGlvbkluQ29udGFp
bmVyLnJlZ2lvbigpKTsKLSAgICBib3VuZHNSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsK
LSAgICBpZiAoIXZpc2libGVUb0hpdFRlc3RpbmcoKSB8fCBhY3Rpb24gIT0gSGl0VGVzdEZvcmVn
cm91bmQgfHwgIWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIFRoZSBwb2ludCBpcyBpbiBvbmUgc3Bl
Y2lmaWMgY29sdW1uLiBTaW5jZSBjb2x1bW5zIGNhbid0IG92ZXJsYXAsIHdlIGRvbid0IGV2ZXIg
aGF2ZSB0byB0ZXN0Ci0gICAgLy8gbXVsdGlwbGUgY29sdW1ucy4gUHV0IHRoZSAKLSAgICAKLSAg
ICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byBqdW1wIHJpZ2h0IHRvIHRoZSBzcGVjaWZp
YyBjb2x1bW4gYnkganVzdCBkb2luZyBtYXRoIG9uIHRoZSBwb2ludC4gU2luY2UgY29sdW1ucwot
ICAgIC8vIGNhbid0IG92ZXJsYXAsIHdlIHNob3VsZG4ndCBoYXZlIHRvIHdhbGsgZXZlcnkgY29s
dW1uIGxpa2UgdGhpcy4gVGhlIG9sZCBjb2x1bW4gY29kZSB3YWxrZWQgYWxsIHRoZSBjb2x1bW5z
LCB0aG91Z2gsCi0gICAgLy8gc28gdGhpcyBpcyBubyB3b3JzZS4gV2UnZCBoYXZlIHRvIHdhdGNo
IG91dCBmb3IgcmVjdC1iYXNlZCBoaXQgdGVzdGluZywgdGhvdWdoLCB3aGljaCBhY3R1YWxseSBj
b3VsZCBvdmVybGFwCi0gICAgLy8gbXVsdGlwbGUgY29sdW1ucy4KLSAgICBMYXlvdXRVbml0IGNv
bEdhcCA9IGNvbHVtbkdhcCgpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewotICAgICAg
ICAvLyBGaXJzdCB3ZSBnZXQgdGhlIGNvbHVtbiByZWN0LCB3aGljaCBpcyBpbiBvdXIgbG9jYWwg
Y29vcmRpbmF0ZSBzcGFjZSwgYW5kIHdlIG1ha2UgaXQgcGh5c2ljYWwgYW5kIGFwcGx5Ci0gICAg
ICAgIC8vIHRoZSBoaXQgdGVzdCBvZmZzZXQgdG8gaXQuIFRoYXQgZ2l2ZXMgdXMgdGhlIHBoeXNp
Y2FsIGxvY2F0aW9uIHRoYXQgd2Ugd2FudCB0byBwYWludCB0aGUgY29sdW1uIGF0LgotICAgICAg
ICBMYXlvdXRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoaSk7Ci0gICAgICAgIGZsaXBGb3JX
cml0aW5nTW9kZShjb2xSZWN0KTsKLSAgICAgICAgY29sUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2Nh
dGlvbik7Ci0gICAgICAgIAotICAgICAgICAvLyBOZXh0IHdlIGdldCB0aGUgcG9ydGlvbiBvZiB0
aGUgZmxvdyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIGNvbHVtbi4KLSAgICAgICAg
TGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uUmVjdEF0KGkp
OwotICAgICAgICAKLSAgICAgICAgLy8gTm93IGdldCB0aGUgb3ZlcmZsb3cgcmVjdCB0aGF0IGNv
cnJlc3BvbmRzIHRvIHRoZSBjb2x1bW4uCi0gICAgICAgIExheW91dFJlY3QgZmxvd1RocmVhZE92
ZXJmbG93UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KGZsb3dUaHJlYWRQ
b3J0aW9uLCBpLCBjb2xDb3VudCwgY29sR2FwKTsKLQotICAgICAgICAvLyBEbyB0aGUgaGl0IHRl
c3Qgd2l0aCB0aGUgY29tcHV0ZWQgcmVjdHMuCi0gICAgICAgIGlmIChmbG93VGhyZWFkKCktPmhp
dFRlc3RGbG93VGhyZWFkUG9ydGlvbkluUmVnaW9uKHRoaXMsIGZsb3dUaHJlYWRQb3J0aW9uLCBm
bG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uLCByZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbFJlY3QubG9jYXRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250
YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7Ci0gICAgcmV0
dXJuICFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHJlcXVlc3Qs
IGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpOwotfQotCiB2b2lkIFJlbmRlck11bHRp
Q29sdW1uU2V0OjpyZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3QgTGF5b3V0UmVjdCYgcmVw
YWludFJlY3QsIGJvb2wgaW1tZWRpYXRlKSBjb25zdAogewogICAgIC8vIEZpZ3VyZSBvdXQgdGhl
IHN0YXJ0IGFuZCBlbmQgY29sdW1ucyBhbmQgb25seSBjaGVjayB3aXRoaW4gdGhhdCByYW5nZSBz
byB0aGF0IHdlIGRvbid0IHdhbGsgdGhlCkBAIC00MTcsNiArMzQ0LDg4IEBAIHZvaWQgUmVuZGVy
TXVsdGlDb2x1bW5TZXQ6OnJlcGFpbnRGbG93VGgKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5TZXQ6OmNvbGxlY3RMYXllckZyYWdtZW50cyhWZWN0b3I8TGF5ZXJGcmFnbWVudD4m
IGZyYWdtZW50cywgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCwgY29uc3QgTGF5
b3V0UmVjdCYgZGlydHlSZWN0KQoreworICAgIC8vIFB1dCB0aGUgbGF5ZXIgYm91bmRzIGludG8g
ZmxvdyB0aHJlYWQtbG9jYWwgY29vcmRpbmF0ZXMgYnkgZmxpcHBpbmcgaXQgZmlyc3QuCisgICAg
TGF5b3V0UmVjdCBsYXllckJvdW5kc0luRmxvd1RocmVhZChsYXllckJvdW5kaW5nQm94KTsKKyAg
ICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZShsYXllckJvdW5kc0luRmxvd1RocmVh
ZCk7CisKKyAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdGhlIGRpcnR5IHJlY3QuCisgICAgTGF5b3V0
UmVjdCBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQoZGlydHlSZWN0KTsKKyAgICBmbG93VGhyZWFkKCkt
PmZsaXBGb3JXcml0aW5nTW9kZShkaXJ0eVJlY3RJbkZsb3dUaHJlYWQpOworCisgICAgLy8gTm93
IHdlIGNhbiBjb21wYXJlIHdpdGggdGhlIGZsb3cgdGhyZWFkIHBvcnRpb25zIG93bmVkIGJ5IGVh
Y2ggY29sdW1uLiBGaXJzdCBsZXQncworICAgIC8vIHNlZSBpZiB0aGUgcmVjdCBpbnRlcnNlY3Rz
IG91ciBmbG93IHRocmVhZCBwb3J0aW9uIGF0IGFsbC4KKyAgICBMYXlvdXRSZWN0IGNsaXBwZWRS
ZWN0KGxheWVyQm91bmRzSW5GbG93VGhyZWFkKTsKKyAgICBjbGlwcGVkUmVjdC5pbnRlcnNlY3Qo
UmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdCgpKTsKKyAgICBpZiAo
Y2xpcHBlZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gTm93
IHdlIGtub3cgd2UgaW50ZXJzZWN0IGF0IGxlYXN0IG9uZSBjb2x1bW4uIExldCdzIGZpZ3VyZSBv
dXQgdGhlIGxvZ2ljYWwgdG9wIGFuZCBsb2dpY2FsCisgICAgLy8gYm90dG9tIG9mIHRoZSBhcmVh
IHdlJ3JlIGNoZWNraW5nLgorICAgIExheW91dFVuaXQgbGF5ZXJMb2dpY2FsVG9wID0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IGxheWVyQm91bmRzSW5GbG93VGhyZWFkLnkoKSA6IGxheWVy
Qm91bmRzSW5GbG93VGhyZWFkLngoKTsKKyAgICBMYXlvdXRVbml0IGxheWVyTG9naWNhbEJvdHRv
bSA9IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQu
bWF4WSgpIDogbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQubWF4WCgpKSAtIDE7CisgICAgCisgICAg
Ly8gRmlndXJlIG91dCB0aGUgc3RhcnQgYW5kIGVuZCBjb2x1bW5zIGFuZCBvbmx5IGNoZWNrIHdp
dGhpbiB0aGF0IHJhbmdlIHNvIHRoYXQgd2UgZG9uJ3Qgd2FsayB0aGUKKyAgICAvLyBlbnRpcmUg
Y29sdW1uIHNldC4KKyAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGNvbHVtbkluZGV4QXRPZmZz
ZXQobGF5ZXJMb2dpY2FsVG9wKTsKKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSBjb2x1bW5JbmRl
eEF0T2Zmc2V0KGxheWVyTG9naWNhbEJvdHRvbSk7CisgICAgCisgICAgTGF5b3V0VW5pdCBjb2xM
b2dpY2FsV2lkdGggPSBjb21wdXRlZENvbHVtbldpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBjb2xH
YXAgPSBjb2x1bW5HYXAoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KCk7
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRDb2x1bW47IGkgPD0gZW5kQ29sdW1u
OyBpKyspIHsKKyAgICAgICAgLy8gR2V0IHRoZSBwb3J0aW9uIG9mIHRoZSBmbG93IHRocmVhZCB0
aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgY29sdW1uLgorICAgICAgICBMYXlvdXRSZWN0IGZsb3dU
aHJlYWRQb3J0aW9uID0gZmxvd1RocmVhZFBvcnRpb25SZWN0QXQoaSk7CisgICAgICAgIAorICAg
ICAgICAvLyBOb3cgZ2V0IHRoZSBvdmVyZmxvdyByZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhl
IGNvbHVtbi4KKyAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uID0g
Zmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoZmxvd1RocmVhZFBvcnRpb24sIGksIGNvbENv
dW50LCBjb2xHYXApOworCisgICAgICAgIC8vIEluIG9yZGVyIHRvIGNyZWF0ZSBhIGZyYWdtZW50
IHdlIG11c3QgaW50ZXJzZWN0IHRoZSBwb3J0aW9uIHBhaW50ZWQgYnkgdGhpcyBjb2x1bW4uCisg
ICAgICAgIExheW91dFJlY3QgY2xpcHBlZFJlY3QobGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQpOwor
ICAgICAgICBjbGlwcGVkUmVjdC5pbnRlcnNlY3QoZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbik7
CisgICAgICAgIGlmIChjbGlwcGVkUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGFsc28gbmVlZCB0byBpbnRlcnNlY3QgdGhlIGRp
cnR5IHJlY3QuIFdlIGhhdmUgdG8gYXBwbHkgYSB0cmFuc2xhdGlvbiBhbmQgc2hpZnQgYmFzZWQg
b2ZmCisgICAgICAgIC8vIG91ciBjb2x1bW4gaW5kZXguCisgICAgICAgIExheW91dFBvaW50IHRy
YW5zbGF0aW9uT2Zmc2V0OworICAgICAgICBMYXlvdXRVbml0IGlubGluZU9mZnNldCA9IGkgKiAo
Y29sTG9naWNhbFdpZHRoICsgY29sR2FwKTsKKyAgICAgICAgaWYgKCFzdHlsZSgpLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgICAgICBpbmxpbmVPZmZzZXQgPSAtaW5saW5lT2Zm
c2V0OworICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5zZXRYKGlubGluZU9mZnNldCk7CisgICAg
ICAgIExheW91dFVuaXQgYmxvY2tPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
LWZsb3dUaHJlYWRQb3J0aW9uLnkoKSA6IC1mbG93VGhyZWFkUG9ydGlvbi54KCk7CisgICAgICAg
IGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZShzdHlsZSgpLT53cml0aW5nTW9kZSgpKSkK
KyAgICAgICAgICAgIGJsb2NrT2Zmc2V0ID0gLWJsb2NrT2Zmc2V0OworICAgICAgICB0cmFuc2xh
dGlvbk9mZnNldC5zZXRZKGJsb2NrT2Zmc2V0KTsKKyAgICAgICAgaWYgKCFpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQorICAgICAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQgPSB0cmFuc2xhdGlv
bk9mZnNldC50cmFuc3Bvc2VkUG9pbnQoKTsKKyAgICAgICAgLy8gRklYTUU6IFRoZSB0cmFuc2xh
dGlvbiBuZWVkcyB0byBpbmNsdWRlIHRoZSBtdWx0aWNvbHVtbiBzZXQncyBjb250ZW50IG9mZnNl
dCB3aXRoaW4gdGhlCisgICAgICAgIC8vIG11bHRpY29sdW1uIGJsb2NrIGFzIHdlbGwuIFRoaXMg
d29uJ3QgYmUgYW4gaXNzdWUgdW50aWwgd2Ugc3RhcnQgY3JlYXRpbmcgbXVsdGlwbGUgbXVsdGlj
b2x1bW4gc2V0cy4KKworICAgICAgICAvLyBTaGlmdCB0aGUgZGlydHkgcmVjdCB0byBiZSBpbiBm
bG93IHRocmVhZCBjb29yZGluYXRlcyB3aXRoIHRoaXMgdHJhbnNsYXRpb24gYXBwbGllZC4KKyAg
ICAgICAgTGF5b3V0UmVjdCB0cmFuc2xhdGVkRGlydHlSZWN0KGRpcnR5UmVjdEluRmxvd1RocmVh
ZCk7CisgICAgICAgIHRyYW5zbGF0ZWREaXJ0eVJlY3QubW92ZUJ5KC10cmFuc2xhdGlvbk9mZnNl
dCk7CisgICAgICAgIAorICAgICAgICAvLyBTZWUgaWYgd2UgaW50ZXJzZWN0IHRoZSBkaXJ0eSBy
ZWN0LgorICAgICAgICBjbGlwcGVkUmVjdCA9IGxheWVyQm91bmRzSW5GbG93VGhyZWFkOworICAg
ICAgICBjbGlwcGVkUmVjdC5pbnRlcnNlY3QodHJhbnNsYXRlZERpcnR5UmVjdCk7CisgICAgICAg
IGlmIChjbGlwcGVkUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFNvbWV0aGluZyBkb2VzIG5lZWQgdG8gcGFpbnQgaW4gdGhpcyBjb2x1
bW4uIE1ha2UgYSBmcmFnbWVudCBub3cgYW5kIHN1cHBseSB0aGUgcGh5c2ljYWwgdHJhbnNsYXRp
b24KKyAgICAgICAgLy8gb2Zmc2V0IGFuZCB0aGUgY2xpcCByZWN0IGZvciB0aGUgY29sdW1uIHdp
dGggdGhhdCBvZmZzZXQgYXBwbGllZC4KKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudDsK
KyAgICAgICAgZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCA9IHRyYW5zbGF0aW9uT2Zmc2V0Owor
ICAgICAgICAKKyAgICAgICAgTGF5b3V0UmVjdCBmbGlwcGVkRmxvd1RocmVhZE92ZXJmbG93UG9y
dGlvbihmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uKTsKKyAgICAgICAgZmxpcEZvcldyaXRpbmdN
b2RlKGZsaXBwZWRGbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uKTsKKyAgICAgICAgZnJhZ21lbnQu
cGFnaW5hdGlvbkNsaXAgPSBmbGlwcGVkRmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbjsKKyAgICAg
ICAgZnJhZ21lbnRzLmFwcGVuZChmcmFnbWVudCk7CisgICAgfQorfQorCiBjb25zdCBjaGFyKiBS
ZW5kZXJNdWx0aUNvbHVtblNldDo6cmVuZGVyTmFtZSgpIGNvbnN0CiB7ICAgIAogICAgIHJldHVy
biAiUmVuZGVyTXVsdGlDb2x1bW5TZXQiOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmgJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NSw3ICs5NSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dp
Y2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdCBPVkVSUklERTsKIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJS
SURFOwogCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX2NvbXB1dGVkQ29sdW1uV2lkdGg7IH0KICAgICB2aXJ0dWFsIExh
eW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2Nv
bXB1dGVkQ29sdW1uSGVpZ2h0OyB9CkBAIC0xMTEsMTAgKzExMCwxMSBAQCBwcml2YXRlOgogICAg
IAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3QgTGF5b3V0
UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlKSBjb25zdCBPVkVSUklERTsKIAorICAg
IHZpcnR1YWwgdm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVudHMoVmVjdG9yPExheWVyRnJhZ21lbnQ+
JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGlydHlSZWN0KSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0OwogICAgIAogICAgIHZvaWQgcGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwotICAgIHZvaWQgcGFpbnRDb2x1bW5Db250
ZW50cyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwogCiAgICAg
TGF5b3V0VW5pdCBjb2x1bW5HYXAoKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IGNvbHVtblJlY3RB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMTcsNyArMjMxNyw3
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Ojpjb250YWluZXIoY28KICNlbmRpZgogICAg
ICAgICAgICAgLy8gVGhlIHJlbmRlciBmbG93IHRocmVhZCBpcyB0aGUgdG9wIG1vc3QgY29udGFp
bmluZyBibG9jawogICAgICAgICAgICAgLy8gZm9yIHRoZSBmaXhlZCBwb3NpdGlvbmVkIGVsZW1l
bnRzLgotICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICAg
ICAgaWYgKG8tPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICBpZiAocmVwYWludENvbnRhaW5lclNraXBwZWQgJiYgbyA9
PSByZXBhaW50Q29udGFpbmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODEsNyArMzgxLDggQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbkZsb3dSZW5kZXJGbG93VGhy
ZWFkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzSW5GbG93UmVuZGVyRmxv
d1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGlzUmVuZGVyRmxvd1RocmVhZCgpICYmICFpc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKTsgfQorICAgIGJvb2wgaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFk
KCkgY29uc3QgeyByZXR1cm4gaXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgaXNPdXRPZkZsb3dQb3Np
dGlvbmVkKCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck11bHRpQ29sdW1uQmxvY2so
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck11bHRp
Q29sdW1uU2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTczMiw3ICs3MzMsNyBAQCBw
dWJsaWM6CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgICAgICAgICB8fCBpc1NWR0ZvcmVpZ25P
YmplY3QoKQogI2VuZGlmCi0gICAgICAgICAgICAgICAgfHwgaXNSZW5kZXJGbG93VGhyZWFkKCk7
CisgICAgICAgICAgICAgICAgfHwgaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCk7CiAgICAg
fQogCiAgICAgLy8gQ29udmVydCB0aGUgZ2l2ZW4gbG9jYWwgcG9pbnQgdG8gYWJzb2x1dGUgY29v
cmRpbmF0ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKHJl
dmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0cnVjdCBMYXllckZyYWdtZW50OwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVy
Qm94UmVnaW9uSW5mbzsKIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CkBAIC0xMjcsNiArMTI4LDgg
QEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRl
bnQoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlKSBjb25zdDsK
IAorICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVudHMoVmVjdG9yPExheWVyRnJh
Z21lbnQ+JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IExheW91dFJlY3QmKSB7IH0KKwogcHJv
dGVjdGVkOgogICAgIHZvaWQgc2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7CiAgICAgdm9p
ZCByZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKTsK
</data>
<flag name="commit-queue"
          id="210963"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190406</attachid>
            <date>2013-02-26 18:00:53 -0800</date>
            <delta_ts>2013-02-26 22:14:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>89881</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24g
MTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzUwNSw4ICs3NTA1LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
b2Zmc2V0RnJvbUxvZ2ljYQogICAgIC8vIEZJWE1FOiBSaWdodCBub3csIHRoaXMgYXNzZXJ0IGlz
IGhpdCBvdXRzaWRlIGxheW91dCwgZnJvbSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCBpbiBz
ZWxlY3Rpb25HYXBSZWN0c0ZvclJlcGFpbnQgKGNhbGxlZCBmcm9tIEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3RBbGwpLgogICAgIC8vIEFTU0VSVChpblJlbmRlckZsb3dUaHJlYWQoKSk7CiAKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHNsb3dlciBwYXRoIHRoYXQgZG9lc24ndCB1c2UgbGF5b3V0IHN0
YXRlIGFuZCByZWxpZXMgb24gZ2V0dGluZyB5b3VyIGxvZ2ljYWwgdG9wIGluc2lkZSB0aGUgZW5j
bG9zaW5nIGZsb3cgdGhyZWFkLiBJdCBkb2Vzbid0Ci0gICAgLy8gd29yayB3aXRoIGNvbHVtbnMg
b3IgcGFnZXMgY3VycmVudGx5LCBidXQgaXQgc2hvdWxkIG9uY2UgdGhleSBoYXZlIGJlZW4gc3dp
dGNoZWQgb3ZlciB0byB1c2luZyBmbG93IHRocmVhZHMuCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSBzbG93ZXIgcGF0aCB0aGF0IGRvZXNuJ3QgdXNlIGxheW91dCBzdGF0ZSBhbmQgcmVsaWVzIG9u
IGdldHRpbmcgeW91ciBsb2dpY2FsIHRvcCBpbnNpZGUgdGhlIGVuY2xvc2luZyBmbG93IHRocmVh
ZC4gSXQgd29ya3MKKyAgICAvLyB3aXRoIHRoZSBuZXcgY29sdW1ucyAoYnV0IG5vdCB0aGUgb2xk
IG9uZXMgb3Igd2l0aCBwcmludGluZykuCiAgICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTc1MTUsOSArNzUxNSw4IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2EKIAogICAgIHdoaWxlIChjdXJyZW50QmxvY2sgJiYg
IWN1cnJlbnRCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKICAgICAgICAgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lckJsb2NrID0gY3VycmVudEJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLSAg
ICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrKTsKICAgICAgICAgaWYgKCFjb250YWluZXJCbG9j
aykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIDA7IC8vIFRoaXMg
Y2FuIGhhcHBlbiBmb3IgZml4ZWQvYWJzLXBvc2l0aW9uZWQgZWxlbWVudHMgaW5zaWRlIGNvbHVt
bnMuCiAgICAgICAgIExheW91dFBvaW50IGN1cnJlbnRCbG9ja0xvY2F0aW9uID0gY3VycmVudEJs
b2NrLT5sb2NhdGlvbigpOwogCiAgICAgICAgIGlmIChjb250YWluZXJCbG9jay0+c3R5bGUoKS0+
d3JpdGluZ01vZGUoKSAhPSBjdXJyZW50QmxvY2stPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJ
KHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU5LDYgKzk1OSwzNyBAQCB2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dpCiAgICAgICAgIHZpZXcoKS0+Zmxvd1RocmVh
ZENvbnRyb2xsZXIoKS0+ZGVjcmVtZW50Rmxvd1RocmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWlnaHRS
ZWdpb25zKCk7CiB9CiAKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdExheWVyRnJhZ21l
bnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAg
ICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVkKTsKKyAgICAKKyAgICBmb3IgKFJlbmRlclJl
Z2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRl
ciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgICAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvbiA9ICppdGVyOworICAgICAgICByZWdpb24tPmNvbGxlY3RMYXllckZyYWdtZW50cyhs
YXllckZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0JveCwgZGlydHlSZWN0KTsKKyAgICB9Cit9CisK
K0xheW91dFJlY3QgUmVuZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCkKK3sKKyAgICBBU1NFUlQoIW1fcmVnaW9uc0lu
dmFsaWRhdGVkKTsKKyAgICAKKyAgICBMYXlvdXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKFJlbmRl
clJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsg
aXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgICAgICBSZW5kZXJSZWdp
b24qIHJlZ2lvbiA9ICppdGVyOworICAgICAgICBMYXllckZyYWdtZW50cyBmcmFnbWVudHM7Cisg
ICAgICAgIHJlZ2lvbi0+Y29sbGVjdExheWVyRnJhZ21lbnRzKGZyYWdtZW50cywgbGF5ZXJCb3Vu
ZGluZ0JveCwgUGFpbnRJbmZvOjppbmZpbml0ZVJlY3QoKSk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBMYXllckZy
YWdtZW50IGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAgICAgICAgICAgTGF5b3V0UmVj
dCBmcmFnbWVudFJlY3QobGF5ZXJCb3VuZGluZ0JveCk7CisgICAgICAgICAgICBmcmFnbWVudFJl
Y3QuaW50ZXJzZWN0KGZyYWdtZW50LnBhZ2luYXRpb25DbGlwKTsKKyAgICAgICAgICAgIGZyYWdt
ZW50UmVjdC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCk7CisgICAgICAgICAgICBy
ZXN1bHQudW5pdGUoZnJhZ21lbnRSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXI6OkN1
cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcihSZW5kZXJGbG93VGhyZWFkKiByZW5kZXJG
bG93VGhyZWFkKQogICAgIDogbV9yZW5kZXJGbG93VGhyZWFkKHJlbmRlckZsb3dUaHJlYWQpCiB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgJKHJl
dmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdHJ1Y3QgTGF5ZXJGcmFnbWVudDsKIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CiBj
bGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJlbmRlclJlZ2lvbjsKQEAgLTE0Myw2ICsxNDQsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lz
dGVudCgpIGNvbnN0OwogI2VuZGlmCiAKKyAgICB2b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhW
ZWN0b3I8TGF5ZXJGcmFnbWVudD4mLCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94
LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOworICAgIExheW91dFJlY3QgZnJhZ21lbnRz
Qm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCk7CisKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCA9IDA7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
MTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3Ju
ZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAgICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNDA1LDggKzQwNiwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBVcGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1
cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBtX2lzUGFn
aW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsK
KyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewogICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwpAQCAtNDUwLDcgKzQ1Myw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVz
ZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQog
ICAgIApAQCAtOTIzLDI2ICs5MjYsMzEgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXNlUmVnaW9uQmFz
ZWRDb2x1bW5zKAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlvbigpCiB7CiAgICAg
bV9pc1BhZ2luYXRlZCA9IGZhbHNlOworICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0g
MDsKKwogICAgIGlmIChpc0NvbXBvc2l0ZWQoKSB8fCAhcGFyZW50KCkpCiAgICAgICAgIHJldHVy
bjsgLy8gRklYTUU6IFdlIHdpbGwgaGF2ZSB0byBkZWFsIHdpdGggcGFnaW5hdGVkIGNvbXBvc2l0
aW5nIGxheWVycyBzb21lZGF5LgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHRo
ZSBSZW5kZXJWaWV3IGNhbid0IGJlIHBhZ2luYXRlZC4gIEV2ZW50dWFsbHkgcHJpbnRpbmcgd2ls
bCBtb3ZlIHRvIGEgbW9kZWwgd2hlcmUgaXQgaXMgdGhvdWdoLgotICAgIAorCiAgICAgLy8gVGhl
IG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwYWdpbmF0ZWQgYm9vbGVhbnMgZm9yIHRoZSBv
bGQgY29sdW1uIGNvZGUgYW5kIHRoZSBuZXcgY29sdW1uIGNvZGUKICAgICAvLyBpcyB0aGF0IGVh
Y2ggcGFnaW5hdGVkIGxheWVyIGhhcyB0byBwYWludCBvbiBpdHMgb3duIHdpdGggdGhlIG5ldyBj
b2RlLiBUaGVyZSBpcyBubwogICAgIC8vIHJlY3VycmluZyBpbnRvIGNoaWxkIGxheWVycy4gVGhp
cyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVkIGJpdHMgZm9yIHRoZSBuZXcgY29sdW1uIGNv
ZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAvLyAicm9vdHMiIHRoYXQgZ2V0IHNwbGl0IGFu
ZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMuIEluc3RlYWQgZWFjaCBsYXllciBoYXMgdG8g
YmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAgICAgLy8gZ2VudWluZWx5IGtub3cgaWYgaXQg
aXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNlbGYgdXAgd2hlbiBwYWludGluZyBvbmx5IGl0
cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIgZGVzY2VuZGFudAotICAgIC8vIGxheWVycyku
CisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4gZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyIGlu
c3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8g
Z2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVyIGVhc2lseS4KICAgICBib29sIG5ld0NvbHVt
bnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCk7CiAgICAgaWYgKG5ld0NvbHVtbnNVc2Vk
ICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIG1f
aXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9
IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoaXNOb3JtYWxGbG93T25s
eSgpKSB7Ci0gICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkKLSAgICAgICAgICAgIG1faXNQYWdp
bmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQoKTsKLSAgICAgICAgZWxzZQorICAgICAgICBp
ZiAobmV3Q29sdW1uc1VzZWQpIHsKKyAgICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxh
eWVyID0gcGFyZW50KCktPmVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpOworICAgICAgICAgICAg
aWYgKG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyICYmIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxh
eWVyLT5oYXNUcmFuc2Zvcm0oKSkKKyAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2luYXRp
b25MYXllciA9IDA7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9
IHBhcmVudCgpLT5yZW5kZXJlcigpLT5oYXNDb2x1bW5zKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC05NTYsNyArOTY0LDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlv
bigpCiAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrICYmIGNvbnRhaW5pbmdCbG9jayAhPSB2
aWV3OwogICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29u
dGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmhhc0xh
eWVyKCkpIHsKLSAgICAgICAgICAgICAgICBtX2lzUGFnaW5hdGVkID0gY29udGFpbmluZ0Jsb2Nr
LT5sYXllcigpLT5pc1BhZ2luYXRlZCgpOworICAgICAgICAgICAgICAgIG1fZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyID0gY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5lbmNsb3NpbmdQYWdpbmF0
aW9uTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIgJiYgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXItPmhhc1RyYW5zZm9ybSgpKQorICAgICAg
ICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTgyLDcgKzE1OTIs
NyBAQCBzdGF0aWMgTGF5b3V0UmVjdCB0cmFuc3BhcmVuY3lDbGlwQm94KGNvCiAgICAgICAgIHRy
YW5zZm9ybS50cmFuc2xhdGUoZGVsdGEueCgpLCBkZWx0YS55KCkpOwogICAgICAgICB0cmFuc2Zv
cm0gPSB0cmFuc2Zvcm0gKiAqbGF5ZXItPnRyYW5zZm9ybSgpOwogCi0gICAgICAgIExheW91dFJl
Y3QgY2xpcFJlY3QgPSBsYXllci0+Ym91bmRpbmdCb3gobGF5ZXIpOworICAgICAgICBMYXlvdXRS
ZWN0IGNsaXBSZWN0ID0gbGF5ZXItPmJvdW5kaW5nQm94KGxheWVyLCBSZW5kZXJMYXllcjo6VXNl
RnJhZ21lbnRCb3hlcyk7CiAgICAgICAgIGV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRS
ZWZsZWN0aW9uKGNsaXBSZWN0LCBsYXllciwgbGF5ZXIsIHBhaW50QmVoYXZpb3IpOwogI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKICAgICAgICAgbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmZp
bHRlck91dHNldHMoKS5leHBhbmRSZWN0KGNsaXBSZWN0KTsKQEAgLTE1OTAsNyArMTYwMCw3IEBA
IHN0YXRpYyBMYXlvdXRSZWN0IHRyYW5zcGFyZW5jeUNsaXBCb3goY28KICAgICAgICAgcmV0dXJu
IHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBSZWN0KTsKICAgICB9CiAgICAgCi0gICAgTGF5b3V0UmVj
dCBjbGlwUmVjdCA9IGxheWVyLT5ib3VuZGluZ0JveChyb290TGF5ZXIpOworICAgIExheW91dFJl
Y3QgY2xpcFJlY3QgPSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyLCBSZW5kZXJMYXllcjo6
VXNlRnJhZ21lbnRCb3hlcyk7CiAgICAgZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50c0FuZFJl
ZmxlY3Rpb24oY2xpcFJlY3QsIGxheWVyLCByb290TGF5ZXIsIHBhaW50QmVoYXZpb3IpOwogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKICAgICBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zmls
dGVyT3V0c2V0cygpLmV4cGFuZFJlY3QoY2xpcFJlY3QpOwpAQCAtMTgxNCwxMiArMTgyNCwyMCBA
QCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlckxheWVyKiBhY2N1bXVsCiAgICAgY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKICAgICBF
UG9zaXRpb24gcG9zaXRpb24gPSByZW5kZXJlci0+c3R5bGUoKS0+cG9zaXRpb24oKTsKIAorICAg
IC8vIEZJWE1FOiBTcGVjaWFsIGNhc2luZyBSZW5kZXJGbG93VGhyZWFkIHNvIG11Y2ggZm9yIGZp
eGVkIHBvc2l0aW9uaW5nIGhlcmUgaXMgbm90IGdyZWF0LgorICAgIFJlbmRlckZsb3dUaHJlYWQq
IGZpeGVkRmxvd1RocmVhZENvbnRhaW5lciA9IDA7CisgICAgaWYgKHBvc2l0aW9uID09IEZpeGVk
UG9zaXRpb24gJiYgcmVuZGVyZXItPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CisgICAgICAgIGZp
eGVkRmxvd1RocmVhZENvbnRhaW5lciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdSZW5kZXJGbG93VGhy
ZWFkKCk7CisgICAgICAgIGlmICghZml4ZWRGbG93VGhyZWFkQ29udGFpbmVyLT5pc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIGZpeGVkRmxvd1RocmVhZENvbnRhaW5lciA9IDA7
CisgICAgfQorCiAgICAgLy8gRklYTUU6IFBvc2l0aW9uaW5nIG9mIG91dC1vZi1mbG93KGZpeGVk
LCBhYnNvbHV0ZSkgZWxlbWVudHMgY29sbGVjdGVkIGluIGEgUmVuZGVyRmxvd1RocmVhZAogICAg
IC8vIG1heSBuZWVkIHRvIGJlIHJldmlzaXRlZCBpbiBhIGZ1dHVyZSBwYXRjaC4KICAgICAvLyBJ
ZiB0aGUgZml4ZWQgcmVuZGVyZXIgaXMgaW5zaWRlIGEgUmVuZGVyRmxvd1RocmVhZCwgd2Ugc2hv
dWxkIG5vdCBjb21wdXRlIGxvY2F0aW9uIHVzaW5nIGxvY2FsVG9BYnNvbHV0ZSwKICAgICAvLyBz
aW5jZSBsb2NhbFRvQWJzb2x1dGUgbWFwcyB0aGUgY29vcmRpbmF0ZXMgZnJvbSBuYW1lZCBmbG93
IHRvIHJlZ2lvbnMgY29vcmRpbmF0ZXMgYW5kIHJlZ2lvbnMgY2FuIGJlCiAgICAgLy8gcG9zaXRp
b25lZCBpbiBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHBsYWNlIGluIHRoZSB2aWV3cG9ydCAoUmVu
ZGVyVmlldykuCi0gICAgaWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgIXJlbmRlcmVy
LT5pblJlbmRlckZsb3dUaHJlYWQoKSAmJiAoIWFuY2VzdG9yTGF5ZXIgfHwgYW5jZXN0b3JMYXll
ciA9PSByZW5kZXJlci0+dmlldygpLT5sYXllcigpKSkgeworICAgIGlmIChwb3NpdGlvbiA9PSBG
aXhlZFBvc2l0aW9uICYmICFmaXhlZEZsb3dUaHJlYWRDb250YWluZXIgJiYgKCFhbmNlc3Rvckxh
eWVyIHx8IGFuY2VzdG9yTGF5ZXIgPT0gcmVuZGVyZXItPnZpZXcoKS0+bGF5ZXIoKSkpIHsKICAg
ICAgICAgLy8gSWYgdGhlIGZpeGVkIGxheWVyJ3MgY29udGFpbmVyIGlzIHRoZSByb290LCBqdXN0
IGFkZCBpbiB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3LiBXZSBjYW4gb2J0YWluIHRoaXMgYnkgY2Fs
bGluZwogICAgICAgICAvLyBsb2NhbFRvQWJzb2x1dGUoKSBvbiB0aGUgUmVuZGVyVmlldy4KICAg
ICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0
UG9pbnQoKSwgSXNGaXhlZCk7CkBAIC0xODMwLDcgKzE4NDgsNyBAQCBzdGF0aWMgaW5saW5lIGNv
bnN0IFJlbmRlckxheWVyKiBhY2N1bXVsCiAgICAgLy8gRm9yIHRoZSBmaXhlZCBwb3NpdGlvbmVk
IGVsZW1lbnRzIGluc2lkZSBhIHJlbmRlciBmbG93IHRocmVhZCwgd2Ugc2hvdWxkIGFsc28gc2tp
cCB0aGUgY29kZSBwYXRoIGJlbG93CiAgICAgLy8gT3RoZXJ3aXNlLCBmb3IgdGhlIGNhc2Ugb2Yg
YW5jZXN0b3JMYXllciA9PSByb290TGF5ZXIgYW5kIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudCBj
aGlsZCBvZiBhIHRyYW5zZm9ybWVkCiAgICAgLy8gZWxlbWVudCBpbiByZW5kZXIgZmxvdyB0aHJl
YWQsIHdlIHdpbGwgaGl0IHRoZSBmaXhlZCBwb3NpdGlvbmVkIGNvbnRhaW5lciBiZWZvcmUgaGl0
dGluZyB0aGUgYW5jZXN0b3IgbGF5ZXIuCi0gICAgaWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRp
b24gJiYgIXJlbmRlcmVyLT5pblJlbmRlckZsb3dUaHJlYWQoKSkgeworICAgIGlmIChwb3NpdGlv
biA9PSBGaXhlZFBvc2l0aW9uICYmICFmaXhlZEZsb3dUaHJlYWRDb250YWluZXIpIHsKICAgICAg
ICAgLy8gRm9yIGEgZml4ZWQgbGF5ZXJzLCB3ZSBuZWVkIHRvIHdhbGsgdXAgdG8gdGhlIHJvb3Qg
dG8gc2VlIGlmIHRoZXJlJ3MgYSBmaXhlZCBwb3NpdGlvbiBjb250YWluZXIKICAgICAgICAgLy8g
KGUuZy4gYSB0cmFuc2Zvcm1lZCBsYXllcikuIEl0J3MgYW4gZXJyb3IgdG8gY2FsbCBjb252ZXJ0
VG9MYXllckNvb3JkcygpIGFjcm9zcyBhIGxheWVyIHdpdGggYSB0cmFuc2Zvcm0sCiAgICAgICAg
IC8vIHNvIHdlIHNob3VsZCBhbHdheXMgZmluZCB0aGUgYW5jZXN0b3IgYXQgb3IgYmVmb3JlIHdl
IGZpbmQgdGhlIGZpeGVkIHBvc2l0aW9uIGNvbnRhaW5lci4KQEAgLTE4ODMsNyArMTkwMSw3IEBA
IHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyTGF5ZXIqIGFjY3VtdWwKIAogICAgICAgICAvLyBX
ZSBzaG91bGQgbm90IHJlYWNoIFJlbmRlclZpZXcgbGF5ZXIgcGFzdCB0aGUgUmVuZGVyRmxvd1Ro
cmVhZCBsYXllciBmb3IgYW55CiAgICAgICAgIC8vIGNoaWxkcmVuIG9mIHRoZSBSZW5kZXJGbG93
VGhyZWFkLgotICAgICAgICBpZiAocmVuZGVyZXItPmluUmVuZGVyRmxvd1RocmVhZCgpICYmICFy
ZW5kZXJlci0+aXNSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgIGlmIChyZW5kZXJlci0+aW5S
ZW5kZXJGbG93VGhyZWFkKCkgJiYgIWxheWVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQo
KSkKICAgICAgICAgICAgIEFTU0VSVChwYXJlbnRMYXllciAhPSByZW5kZXJlci0+dmlldygpLT5s
YXllcigpKTsKIAogICAgICAgICBpZiAoZm91bmRBbmNlc3RvckZpcnN0KSB7CkBAIC0zNTA1LDcg
KzM1MjMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkU3VwcHJlc3NQYWludGluCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi0KIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZv
LCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCkBAIC0zNTU3LDYgKzM1NzQsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRM
YXllcihHcmFwaGljc0NvbgogICAgICAgICAgICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJz
KGNvbnRleHQsIHBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgcGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwogICAgICAgICB9CiAKKyAgICAgICAg
aWYgKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKSB7CisgICAgICAgICAgICBwYWludFRyYW5z
Zm9ybWVkTGF5ZXJJbnRvRnJhZ21lbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFn
cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICAvLyBNYWtlIHN1
cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQuCiAgICAgICAg
IENsaXBSZWN0IGNsaXBSZWN0ID0gcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0OwogICAgICAg
ICBpZiAocGFyZW50KCkpIHsKQEAgLTM1NjksMjUgKzM1OTEsNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyKEdyYXBoaWNzQ29uCiAgICAgICAgICAgICBwYXJlbnQoKS0+Y2xpcFRvUmVj
dChwYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsIGNsaXBSZWN0KTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEFkanVzdCB0aGUgdHJh
bnNmb3JtIHN1Y2ggdGhhdCB0aGUgcmVuZGVyZXIncyB1cHBlciBsZWZ0IGNvcm5lciB3aWxsIHBh
aW50IGF0ICgwLDApIGluIHVzZXIgc3BhY2UuCi0gICAgICAgIC8vIFRoaXMgaW52b2x2ZXMgc3Vi
dHJhY3Rpbmcgb3V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIgaW4gb3VyIGN1cnJlbnQgY29v
cmRpbmF0ZSBzcGFjZSwgYnV0IHByZXNlcnZpbmcKLSAgICAgICAgLy8gdGhlIGFjY3VtdWxhdGVk
IGVycm9yIGZvciBzdWItcGl4ZWwgbGF5b3V0LgotICAgICAgICBMYXlvdXRQb2ludCBkZWx0YTsK
LSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgZGVs
dGEpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0obGF5ZXJUcmFuc2Zv
cm0pOwotICAgICAgICBJbnRQb2ludCByb3VuZGVkRGVsdGEgPSByb3VuZGVkSW50UG9pbnQoZGVs
dGEpOwotICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQocm91bmRlZERlbHRhLngoKSwg
cm91bmRlZERlbHRhLnkoKSk7Ci0gICAgICAgIExheW91dFNpemUgYWRqdXN0ZWRTdWJQaXhlbEFj
Y3VtdWxhdGlvbiA9IHBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbiArIChkZWx0YSAt
IHJvdW5kZWREZWx0YSk7Ci0gICAgICAgIAotICAgICAgICAvLyBBcHBseSB0aGUgdHJhbnNmb3Jt
LgotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKmNvbnRleHQpOwotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9y
bS50b0FmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgICAgICAgICAgLy8gTm93IGRvIGEgcGFpbnQg
d2l0aCB0aGUgcm9vdCBsYXllciBzaGlmdGVkIHRvIGJlIHVzLgotICAgICAgICAgICAgTGF5ZXJQ
YWludGluZ0luZm8gdHJhbnNmb3JtZWRQYWludGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVj
dCh0cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QocGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0
KSksIHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yLCBhZGp1c3RlZFN1YlBpeGVsQWNjdW11bGF0
aW9uLCBwYWludGluZ0luZm8ucGFpbnRpbmdSb290LCBwYWludGluZ0luZm8ucmVnaW9uLCBwYWlu
dGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyk7Ci0gICAgICAgICAgICBwYWludExheWVyQ29u
dGVudHNBbmRSZWZsZWN0aW9uKGNvbnRleHQsIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvLCBwYWlu
dEZsYWdzKTsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIHBhaW50TGF5ZXJCeUFwcGx5aW5n
VHJhbnNmb3JtKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKICAgICAgICAg
Ly8gUmVzdG9yZSB0aGUgY2xpcC4KICAgICAgICAgaWYgKHBhcmVudCgpKQpAQCAtMzcxOCw3ICsz
NzIyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogCiAgICAg
ICAgICAgICAvLyBSZXdpcmUgdGhlIG9sZCBjb250ZXh0IHRvIGEgbWVtb3J5IGJ1ZmZlciwgc28g
dGhhdCB3ZSBjYW4gY2FwdHVyZSB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyLgogICAgICAgICAg
ICAgLy8gTk9URTogV2Ugc2F2ZWQgdGhlIG9sZCBjb250ZXh0IGluIHRoZSAidHJhbnNwYXJlbmN5
TGF5ZXJDb250ZXh0IiBsb2NhbCB2YXJpYWJsZSwgdG8gYmUgYWJsZSB0byBzdGFydCBhIHRyYW5z
cGFyZW5jeSBsYXllcgotICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNvbnRleHQgYW5k
IGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFjaCB0cmFuc3Bh
cmVueSBsYXllciBjYWxsLiBBbHNvLCBub3RlIHRoYXQgCisgICAgICAgICAgICAvLyBvbiB0aGUg
b3JpZ2luYWwgY29udGV4dCBhbmQgYXZvaWQgZHVwbGljYXRpbmcgImJlZ2luRmlsdGVyRWZmZWN0
IiBhZnRlciBlYWNoIHRyYW5zcGFyZW5jeSBsYXllciBjYWxsLiBBbHNvLCBub3RlIHRoYXQgCiAg
ICAgICAgICAgICAvLyBiZWdpblRyYW5zcGFyZW5jeUxheWVycyB3aWxsIG9ubHkgY3JlYXRlIGEg
c2luZ2xlIGxhenkgdHJhbnNwYXJlbmN5IGxheWVyLCBldmVuIHRob3VnaCBpdCBpcyBjYWxsZWQg
dHdpY2UgaW4gdGhpcyBtZXRob2QuCiAgICAgICAgICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRl
ci5iZWdpbkZpbHRlckVmZmVjdChjb250ZXh0KTsKIApAQCAtMzczMiwyOCArMzczNiwxMyBAQCB2
b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0jZW5kaWYKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0
cyB3ZSBzaG91bGQgdXNlIG9ubHkgd2hlbiB3ZSBuZWVkIHRoZW0uCi0gICAgTGF5b3V0UmVjdCBs
YXllckJvdW5kczsKLSAgICBDbGlwUmVjdCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91
dGxpbmVSZWN0OwotICAgIExheW91dFBvaW50IHBhaW50T2Zmc2V0OwogCi0gICAgaWYgKHNob3Vs
ZFBhaW50Q29udGVudCB8fCBzaG91bGRQYWludE91dGxpbmUgfHwgaXNQYWludGluZ092ZXJsYXlT
Y3JvbGxiYXJzKSB7Ci0gICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbiwgKGxv
Y2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5
Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
LCBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzID8g
SWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xpcCk7Ci0gICAgICAgIGNhbGN1
bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVj
dCwgJm9mZnNldEZyb21Sb290KTsKLSAgICAgICAgcGFpbnRPZmZzZXQgPSB0b1BvaW50KGxheWVy
Qm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0lu
Zm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pOworICAgIGlmIChmaWx0ZXJQYWludGVyLmhhc1N0YXJ0
ZWRGaWx0ZXJFZmZlY3QoKSAmJiBoYXZlVHJhbnNwYXJlbmN5KSB7CisgICAgICAgIC8vIElmIHdl
IGhhdmUgYSBmaWx0ZXIgYW5kIHRyYW5zcGFyZW5jeSwgd2UgaGF2ZSB0byBlYWdlcmx5IHN0YXJ0
IGEgdHJhbnNwYXJlbmN5IGxheWVyIGhlcmUsIHJhdGhlciB0aGFuIHJpc2sgYSBjaGlsZCBsYXll
ciBsYXppbHkgc3RhcnRzIG9uZSB3aXRoIHRoZSB3cm9uZyBjb250ZXh0LgorICAgICAgICBiZWdp
blRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50
aW5nSW5mby5wYWludEJlaGF2aW9yKTsKICAgICB9CisjZW5kaWYKIAotICAgIGJvb2wgZm9yY2VC
bGFja1RleHQgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlv
ckZvcmNlQmxhY2tUZXh0OwotICAgIGJvb2wgc2VsZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5n
SW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHk7Ci0gICAgCi0g
ICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKLSAg
ICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3Jv
dW5kKQotICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tn
cm91bmQ7Ci0gICAgZWxzZSBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5n
Um9vdEJhY2tncm91bmRPbmx5KQotICAgICAgICBwYWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZp
b3JSb290QmFja2dyb3VuZE9ubHk7Ci0gICAgCiAgICAgLy8gSWYgdGhpcyBsYXllcidzIHJlbmRl
cmVyIGlzIGEgY2hpbGQgb2YgdGhlIHBhaW50aW5nUm9vdCwgd2UgcmVuZGVyIHVuY29uZGl0aW9u
YWxseSwgd2hpY2gKICAgICAvLyBpcyBkb25lIGJ5IHBhc3NpbmcgYSBuaWwgcGFpbnRpbmdSb290
IGRvd24gdG8gb3VyIHJlbmRlcmVyIChhcyBpZiBubyBwYWludGluZ1Jvb3Qgd2FzIGV2ZXIgc2V0
KS4KICAgICAvLyBFbHNlLCBvdXIgcmVuZGVyZXIgdHJlZSBtYXkgb3IgbWF5IG5vdCBjb250YWlu
IHRoZSBwYWludGluZyByb290LCBzbyB3ZSBwYXNzIHRoYXQgcm9vdCBhbG9uZwpAQCAtMzc2NSw3
OSArMzc1NCw0MyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAg
ICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMgJiYgaXNTZWxmUGFp
bnRpbmdMYXllcikKICAgICAgICAgcGVyZm9ybU92ZXJsYXBUZXN0cygqbG9jYWxQYWludGluZ0lu
Zm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cywgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0aGlz
KTsKIAotICAgIC8vIFdlIHdhbnQgdG8gcGFpbnQgb3VyIGxheWVyLCBidXQgb25seSBpZiB3ZSBp
bnRlcnNlY3QgdGhlIGRhbWFnZSByZWN0LgotICAgIGlmICh0aGlzICE9IGxvY2FsUGFpbnRpbmdJ
bmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092
ZXJmbG93Q29udGVudHMpKQotICAgICAgICBzaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0
c0RhbWFnZVJlY3QobGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QucmVjdCgpLCBsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9vdCk7CisgICAgYm9vbCBmb3JjZUJsYWNrVGV4
dCA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yRm9yY2VC
bGFja1RleHQ7CisgICAgYm9vbCBzZWxlY3Rpb25Pbmx5ICA9IGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yU2VsZWN0aW9uT25seTsKKyAgICAKKyAgICBQYWlu
dEJlaGF2aW9yIHBhaW50QmVoYXZpb3IgPSBQYWludEJlaGF2aW9yTm9ybWFsOworICAgIGlmIChs
b2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdTa2lwUm9vdEJhY2tncm91bmQpCisg
ICAgICAgIHBhaW50QmVoYXZpb3IgfD0gUGFpbnRCZWhhdmlvclNraXBSb290QmFja2dyb3VuZDsK
KyAgICBlbHNlIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdSb290QmFj
a2dyb3VuZE9ubHkpCisgICAgICAgIHBhaW50QmVoYXZpb3IgfD0gUGFpbnRCZWhhdmlvclJvb3RC
YWNrZ3JvdW5kT25seTsKIAotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBpZiAoZmlsdGVy
UGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgewot
ICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVyIGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUg
dG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiBy
aXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4
dC4KLSAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7CisgICAgTGF5ZXJGcmFnbWVu
dHMgbGF5ZXJGcmFnbWVudHM7CisgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCB8fCBzaG91bGRQ
YWludE91dGxpbmUgfHwgaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7CisgICAgICAgIC8v
IENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFu
Z2xlcyBhbmQgcGFpbnQgb2Zmc2V0cyBmb3IgZWFjaCBsYXllciBmcmFnbWVudCwgYXMgd2VsbCBh
cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudCBvZiBlYWNoCisgICAgICAgIC8vIGZyYWdtZW50
IHNob3VsZCBwYWludC4KKyAgICAgICAgY29sbGVjdEZyYWdtZW50cyhsYXllckZyYWdtZW50cywg
bG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24sIGxv
Y2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LAorICAgICAgICAgICAgKGxvY2FsUGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3Rz
IDogUGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLAorICAgICAg
ICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVu
dHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xpcCwgJm9mZnNldEZy
b21Sb290KTsKKyAgICAgICAgdXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKGxheWVyRnJh
Z21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzLCBzaG91bGRQYWludENv
bnRlbnQsICZvZmZzZXRGcm9tUm9vdCk7CiAgICAgfQotI2VuZGlmCi0KKyAgICAKICAgICBpZiAo
bG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdCYWNrZ3JvdW5k
UGhhc2UpIHsKLSAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCAmJiAhc2VsZWN0aW9uT25s
eSkgewotICAgICAgICAgICAgLy8gQmVnaW4gdHJhbnNwYXJlbmN5IGxheWVycyBsYXppbHkgbm93
IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50IHNvbWV0aGluZy4KLSAgICAgICAgICAgIGlm
IChoYXZlVHJhbnNwYXJlbmN5KQotICAgICAgICAgICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVy
LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVo
YXZpb3IpOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlw
VG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAgICAvLyBQYWludCBvdXIgYmFja2dyb3VuZCBm
aXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGlsZCBsYXllcnMuCi0gICAgICAgICAgICAgICAg
Ly8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3VyIGJhY2tncm91bmQuCi0gICAg
ICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0LCBEb05vdElu
Y2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gQmFja2dyb3VuZCBwYWludGluZyB3aWxsIGhh
bmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KLSAgICAgICAgICAgIFBhaW50SW5mbyBw
YWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSks
IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZv
clJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0KLSAgICAgICAgICAgIGlmIChs
b2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCi0gICAgICAgICAgICAgICAgcmVzdG9y
ZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJl
Y3QpOwotICAgICAgICB9CisgICAgICAgIC8vIFBhaW50IG9ubHkgdGhlIGJhY2tncm91bmRzIGZv
ciBhbGwgb2YgdGhlIGZyYWdtZW50cyBvZiB0aGUgbGF5ZXIuCisgICAgICAgIGlmIChzaG91bGRQ
YWludENvbnRlbnQgJiYgIXNlbGVjdGlvbk9ubHkpCisgICAgICAgICAgICBwYWludEJhY2tncm91
bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVy
Q29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAor
ICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICAgICAgLy8gTm93IHdhbGsgdGhlIHNvcnRlZCBsaXN0
IG9mIGNoaWxkcmVuIHdpdGggbmVnYXRpdmUgei1pbmRpY2VzLgogICAgICAgICBwYWludExpc3Qo
bmVnWk9yZGVyTGlzdCgpLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZs
YWdzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQ
YWludGluZ0NvbXBvc2l0aW5nRm9yZWdyb3VuZFBoYXNlKSB7Ci0gICAgICAgIC8vIE5vdyBlc3Rh
Ymxpc2ggdGhlIGFwcHJvcHJpYXRlIGNsaXAgYW5kIHBhaW50IG91ciBjaGlsZCBSZW5kZXJPYmpl
Y3RzLgotICAgICAgICBpZiAoc2hvdWxkUGFpbnRDb250ZW50ICYmICFjbGlwUmVjdFRvQXBwbHku
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgbGF5ZXJzIGxh
emlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUgdG8gcGFpbnQgc29tZXRoaW5nLgotICAgICAg
ICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0gICAgICAgICAgICAgICAgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5y
b290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnRCZWhhdmlvcik7Ci0KLSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlw
VG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXQgdXAgdGhlIGNsaXAgdXNlZCB3
aGVuIHBhaW50aW5nIG91ciBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICBjbGlwVG9SZWN0KGxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVk
SW50UmVjdChjbGlwUmVjdFRvQXBwbHkucmVjdCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNl
Q2hpbGRCbG9ja0JhY2tncm91bmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JjZUJsYWNrVGV4dCA/IChQYWludEJlaGF2aW9yKVBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4
dCA6IHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5n
SW5mby5yZWdpb24pOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBw
YWludE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXNlbGVjdGlvbk9ubHkpIHsKLSAgICAgICAg
ICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxvYXQ7Ci0gICAgICAgICAgICAg
ICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVncm91bmQ7Ci0gICAgICAgICAg
ICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMgPSBsb2NhbFBhaW50aW5nSW5mby5v
dmVybGFwVGVzdFJlcXVlc3RzOwotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBh
aW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9
IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOwotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnBh
aW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQotICAgICAgICAgICAgICAg
IHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBj
bGlwUmVjdFRvQXBwbHkpOwotICAgICAgICB9CisgICAgICAgIGlmIChzaG91bGRQYWludENvbnRl
bnQpCisgICAgICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVu
dHMsIGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50
RGlydHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRp
bmdJbmZvLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgc2VsZWN0aW9u
T25seSwgZm9yY2VCbGFja1RleHQpOworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFBhaW50
T3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhsYXllckZyYWdt
ZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHBhaW50QmVoYXZpb3IsIHBhaW50aW5n
Um9vdEZvclJlbmRlcmVyKTsKIAotICAgICAgICBpZiAoc2hvdWxkUGFpbnRPdXRsaW5lICYmICFv
dXRsaW5lUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0
bGluZQotICAgICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBw
ZWRJbnRSZWN0KG91dGxpbmVSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFp
bnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJl
Z2lvbik7Ci0gICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXll
ciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0
LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsKLSAgICAgICAgICAgIHJlbmRlcmVy
KCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgcmVzdG9yZUNs
aXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0
KTsKLSAgICAgICAgfQotICAgIAogICAgICAgICAvLyBQYWludCBhbnkgY2hpbGQgbGF5ZXJzIHRo
YXQgaGF2ZSBvdmVyZmxvdy4KICAgICAgICAgcGFpbnRMaXN0KG1fbm9ybWFsRmxvd0xpc3QuZ2V0
KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIApA
QCAtMzg0NSwzNCArMzc5OCwyNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVu
dHMoR3JhCiAgICAgICAgIHBhaW50TGlzdChwb3NaT3JkZXJMaXN0KCksIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIH0KIAotICAgIGlmIChpc1BhaW50
aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKLSAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0
LCBkYW1hZ2VSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJv
dW5kZWRJbnRQb2ludChwYWludE9mZnNldCksIHBpeGVsU25hcHBlZEludFJlY3QoZGFtYWdlUmVj
dC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAgIH0KKyAgICBpZiAoaXNQ
YWludGluZ092ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHNG
b3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsK
IAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFy
dGVkRmlsdGVyRWZmZWN0KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIGNvcnJlY3QgY2xpcHBp
bmcgKGllLiBvdmVyZmxvdzogaGlkZGVuKS4KLSAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50
aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICAvLyBGSVhNRTogSXQg
aXMgaW5jb3JyZWN0IHRvIGp1c3QgY2xpcCB0byB0aGUgZGFtYWdlUmVjdCBoZXJlIG9uY2UgbXVs
dGlwbGUgZnJhZ21lbnRzIGFyZSBpbnZvbHZlZC4KKyAgICAgICAgQ2xpcFJlY3QgYmFja2dyb3Vu
ZFJlY3QgPSBsYXllckZyYWdtZW50cy5pc0VtcHR5KCkgPyBDbGlwUmVjdCgpIDogbGF5ZXJGcmFn
bWVudHNbMF0uYmFja2dyb3VuZFJlY3Q7CisgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CiAgICAgICAgIGNvbnRleHQgPSBm
aWx0ZXJQYWludGVyLmFwcGx5RmlsdGVyRWZmZWN0KCk7Ci0gICAgICAgIHJlc3RvcmVDbGlwKHRy
YW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGRhbWFnZVJlY3QpOworICAgICAgICByZXN0b3JlQ2xpcCh0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CiAg
ICAgfQogI2VuZGlmCi0KKyAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBub3cgdXNlIHRo
ZSBvcmlnaW5hbCB0cmFuc3BhcmVuY3kgY29udGV4dC4KICAgICBBU1NFUlQodHJhbnNwYXJlbmN5
TGF5ZXJDb250ZXh0ID09IGNvbnRleHQpOwogCiAgICAgaWYgKChsb2NhbFBhaW50RmxhZ3MgJiBQ
YWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ01hc2tQaGFzZSkgJiYgc2hvdWxkUGFpbnRDb250
ZW50ICYmIHJlbmRlcmVyKCktPmhhc01hc2soKSAmJiAhc2VsZWN0aW9uT25seSkgewotICAgICAg
ICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQotICAgICAgICAgICAgY2xp
cFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9y
ZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxm
LgotICAgICAgICAKLSAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2suCi0gICAgICAgIFBhaW50SW5m
byBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChkYW1hZ2VSZWN0LnJlY3Qo
KSksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9ybWFsLCBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVnaW9uKTsKLSAgICAgICAgcmVuZGVyZXIoKS0+
cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9j
YWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQotICAgICAgICAgICAgcmVzdG9yZUNsaXAo
Y29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwor
ICAgICAgICAvLyBQYWludCB0aGUgbWFzayBmb3IgdGhlIGZyYWdtZW50cy4KKyAgICAgICAgcGFp
bnRNYXNrRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mbywgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIH0KIAogICAgIC8vIEVuZCBvdXIg
dHJhbnNwYXJlbmN5IGxheWVyCkBAIC0zOTA0LDEzICszODQ5LDI5MSBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludExpc3QoVmVjdG9yPFJlbmRlCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlbmRlckxheWVyKiBjaGlsZExheWVyID0g
bGlzdC0+YXQoaSk7Ci0gICAgICAgIGlmICghY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSB8fCB1
c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAgICAgaWYgKCFjaGlsZExheWVyLT5pc1BhZ2lu
YXRlZCgpKQogICAgICAgICAgICAgY2hpbGRMYXllci0+cGFpbnRMYXllcihjb250ZXh0LCBwYWlu
dGluZ0luZm8sIHBhaW50RmxhZ3MpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwYWludFBh
Z2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwgY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWlu
dEZsYWdzKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMo
TGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
UmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwKKyAgICBD
bGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIFNob3VsZFJlc3BlY3RPdmVyZmxvd0Ns
aXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290
KQoreworICAgIGlmICghZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkgfHwgaGFzVHJhbnNmb3Jt
KCkpIHsKKyAgICAgICAgLy8gRm9yIHVucGFnaW5hdGVkIGxheWVycywgdGhlcmUgaXMgb25seSBv
bmUgZnJhZ21lbnQuCisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQ7CisgICAgICAgIENs
aXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIHJlZ2lvbiwgY2xpcFJl
Y3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93
Q2xpcCk7CisgICAgICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGRpcnR5UmVj
dCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBmcmFnbWVu
dC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIG9mZnNldEZyb21Sb290KTsK
KyAgICAgICAgZnJhZ21lbnRzLmFwcGVuZChmcmFnbWVudCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgLy8gQ29tcHV0ZSBvdXIgb2Zmc2V0IHdpdGhpbiB0aGUgZW5jbG9zaW5n
IHBhZ2luYXRpb24gbGF5ZXIuCisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0V2l0aGluUGFnaW5hdGVk
TGF5ZXI7CisgICAgY29udmVydFRvTGF5ZXJDb29yZHMoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVy
KCksIG9mZnNldFdpdGhpblBhZ2luYXRlZExheWVyKTsKKyAgICAKKyAgICAvLyBDYWxjdWxhdGUg
Y2xpcCByZWN0cyByZWxhdGl2ZSB0byB0aGUgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyLiBUaGUg
cHVycG9zZSBvZiB0aGlzIGNhbGwgaXMgdG8gZGV0ZXJtaW5lIG91ciBib3VuZHMgY2xpcHBlZCB0
byBpbnRlcm1lZGlhdGUKKyAgICAvLyBsYXllcnMgYmV0d2VlbiB1cyBhbmQgdGhlIHBhZ2luYXRp
b24gY29udGV4dC4gSXQncyBpbXBvcnRhbnQgdG8gbWluaW1pemUgdGhlICMgb2YgZnJhZ21lbnRz
IHdlIG5lZWQgdG8gY3JlYXRlIGFuZCB0aGlzIGhlbHBzIHdpdGgKKyAgICAvLyB0aGF0LgorICAg
IENsaXBSZWN0c0NvbnRleHQgcGFnaW5hdGlvbkNsaXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyKCksIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAgTGF5b3V0UmVjdCBsYXll
ckJvdW5kc0luRmxvd1RocmVhZDsKKyAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdEluRmxvd1Ro
cmVhZDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZDsKKyAgICBDbGlw
UmVjdCBvdXRsaW5lUmVjdEluRmxvd1RocmVhZDsKKyAgICBjYWxjdWxhdGVSZWN0cyhwYWdpbmF0
aW9uQ2xpcFJlY3RzQ29udGV4dCwgUGFpbnRJbmZvOjppbmZpbml0ZVJlY3QoKSwgbGF5ZXJCb3Vu
ZHNJbkZsb3dUaHJlYWQsIGJhY2tncm91bmRSZWN0SW5GbG93VGhyZWFkLCBmb3JlZ3JvdW5kUmVj
dEluRmxvd1RocmVhZCwKKyAgICAgICAgb3V0bGluZVJlY3RJbkZsb3dUaHJlYWQsICZvZmZzZXRX
aXRoaW5QYWdpbmF0ZWRMYXllcik7CisgICAgCisgICAgLy8gVGFrZSBvdXIgYm91bmRpbmcgYm94
IHdpdGhpbiB0aGUgZmxvdyB0aHJlYWQgYW5kIGNsaXAgaXQuIFRoaXMgd2lsbCBoZWxwIG1pbmlt
aXplIHRoZSAjIG9mIGZyYWdtZW50cyB3ZSBoYXZlIHRvIGNyZWF0ZS4KKyAgICBMYXlvdXRSZWN0
IGxheWVyQm91bmRpbmdCb3hJbkZsb3dUaHJlYWQgPSBib3VuZGluZ0JveChlbmNsb3NpbmdQYWdp
bmF0aW9uTGF5ZXIoKSwgMCwgJm9mZnNldFdpdGhpblBhZ2luYXRlZExheWVyKTsKKyAgICBsYXll
ckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLmludGVyc2VjdChiYWNrZ3JvdW5kUmVjdEluRmxvd1Ro
cmVhZC5yZWN0KCkpOworCisgICAgLy8gU2hpZnQgdGhlIGRpcnR5IHJlY3QgaW50byBmbG93IHRo
cmVhZCBjb29yZGluYXRlcy4KKyAgICBMYXlvdXRQb2ludCBvZmZzZXRPZlBhZ2luYXRpb25MYXll
ckZyb21Sb290OworICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5jb252ZXJ0VG9MYXll
ckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOworICAg
IExheW91dFJlY3QgZGlydHlSZWN0SW5GbG93VGhyZWFkKGRpcnR5UmVjdCk7CisgICAgZGlydHlS
ZWN0SW5GbG93VGhyZWFkLm1vdmVCeSgtb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7
CisKKyAgICAvLyBUZWxsIHRoZSBmbG93IHRocmVhZCB0byBjb2xsZWN0IHRoZSBmcmFnbWVudHMu
IFdlIHBhc3MgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBhIG1pbmltYWwgbnVtYmVyIG9m
IGZyYWdtZW50cyBiYXNlZCBvZmYgdGhlIHBhZ2VzL2NvbHVtbnMKKyAgICAvLyB0aGF0IGludGVy
c2VjdCB0aGUgYWN0dWFsIGRpcnR5UmVjdCBhcyB3ZWxsIGFzIHRoZSBwYWdlcy9jb2x1bW5zIHRo
YXQgaW50ZXJzZWN0IG91ciBsYXllcidzIGJvdW5kaW5nIGJveC4KKyAgICBSZW5kZXJGbG93VGhy
ZWFkKiBlbmNsb3NpbmdGbG93VGhyZWFkID0gdG9SZW5kZXJGbG93VGhyZWFkKGVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllcigpLT5yZW5kZXJlcigpKTsKKyAgICBlbmNsb3NpbmdGbG93VGhyZWFkLT5j
b2xsZWN0TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRzLCBsYXllckJvdW5kaW5nQm94SW5GbG93VGhy
ZWFkLCBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQpOworICAgIAorICAgIGlmIChmcmFnbWVudHMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR2V0IHRoZSBwYXJlbnQgY2xp
cCByZWN0cyBvZiB0aGUgcGFnaW5hdGlvbiBsYXllciwgc2luY2Ugd2UgbmVlZCB0byBpbnRlcnNl
Y3Qgd2l0aCB0aGF0IHdoZW4gcGFpbnRpbmcgY29sdW1uIGNvbnRlbnRzLgorICAgIENsaXBSZWN0
IGFuY2VzdG9yQ2xpcFJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRp
b25MYXllcigpLT5wYXJlbnQoKSkgeworICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0
c0NvbnRleHQocm9vdExheWVyLCByZWdpb24sIGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxvd0NsaXApOworICAgICAgICBhbmNlc3Rv
ckNsaXBSZWN0ID0gZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPmJhY2tncm91bmRDbGlwUmVj
dChjbGlwUmVjdHNDb250ZXh0KTsKKyAgICAgICAgYW5jZXN0b3JDbGlwUmVjdC5pbnRlcnNlY3Qo
ZGlydHlSZWN0KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50
cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdt
ZW50cy5hdChpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNldCBvdXIgZm91ciByZWN0cyB3aXRo
IGFsbCBjbGlwcGluZyBhcHBsaWVkIHRoYXQgd2FzIGludGVybmFsIHRvIHRoZSBmbG93IHRocmVh
ZC4KKyAgICAgICAgZnJhZ21lbnQuc2V0UmVjdHMobGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJh
Y2tncm91bmRSZWN0SW5GbG93VGhyZWFkLCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZCwgb3V0
bGluZVJlY3RJbkZsb3dUaHJlYWQpOworICAgICAgICAKKyAgICAgICAgLy8gU2hpZnQgdG8gdGhl
IHJvb3QtcmVsYXRpdmUgcGh5c2ljYWwgcG9zaXRpb24gdXNlZCB3aGVuIHBhaW50aW5nIHRoZSBm
bG93IHRocmVhZCBpbiB0aGlzIGZyYWdtZW50LgorICAgICAgICBmcmFnbWVudC5tb3ZlQnkoZnJh
Z21lbnQucGFnaW5hdGlvbk9mZnNldCArIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3Qp
OworCisgICAgICAgIC8vIEludGVyc2VjdCB0aGUgZnJhZ21lbnQgd2l0aCBvdXIgYW5jZXN0b3In
cyBiYWNrZ3JvdW5kIGNsaXAgc28gdGhhdCBlLmcuLCBjb2x1bW5zIGluIGFuIG92ZXJmbG93Omhp
ZGRlbiBibG9jayBhcmUKKyAgICAgICAgLy8gcHJvcGVybHkgY2xpcHBlZCBieSB0aGUgb3ZlcmZs
b3cuCisgICAgICAgIGZyYWdtZW50LmludGVyc2VjdChhbmNlc3RvckNsaXBSZWN0LnJlY3QoKSk7
CisgICAgICAgIAorICAgICAgICAvLyBOb3cgaW50ZXJzZWN0IHdpdGggb3VyIHBhZ2luYXRpb24g
Y2xpcC4gVGhpcyB3aWxsIHR5cGljYWxseSBtZWFuIHdlJ3JlIGp1c3QgaW50ZXJzZWN0aW5nIHRo
ZSBkaXJ0eSByZWN0IHdpdGggdGhlIGNvbHVtbgorICAgICAgICAvLyBjbGlwLCBzbyB0aGUgY29s
dW1uIGNsaXAgZW5kcyB1cCBiZWluZyBhbGwgd2UgYXBwbHkuCisgICAgICAgIGZyYWdtZW50Lmlu
dGVyc2VjdChmcmFnbWVudC5wYWdpbmF0aW9uQ2xpcCk7CisgICAgfQorfQorCit2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZy
YWdtZW50cywgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBQYWlu
dExheWVyRmxhZ3MgbG9jYWxQYWludEZsYWdzLAorICAgIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50
LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpCit7CisgICAgQVNTRVJUKG9mZnNl
dEZyb21Sb290KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7
ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChp
KTsKKyAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ID0gc2hvdWxkUGFpbnRDb250
ZW50OworICAgICAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIgfHwg
IShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkg
eworICAgICAgICAgICAgTGF5b3V0UG9pbnQgbmV3T2Zmc2V0RnJvbVJvb3QgPSAqb2Zmc2V0RnJv
bVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0OworICAgICAgICAgICAgZnJhZ21lbnQu
c2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0KGZyYWdtZW50LmxheWVy
Qm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZv
LnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290KTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQ
YWludExheWVyRmxhZ3MgcGFpbnRGbGFncywgY29uc3QgTGF5b3V0UG9pbnQmIHRyYW5zbGF0aW9u
T2Zmc2V0KQoreworICAgIC8vIEFkanVzdCB0aGUgdHJhbnNmb3JtIHN1Y2ggdGhhdCB0aGUgcmVu
ZGVyZXIncyB1cHBlciBsZWZ0IGNvcm5lciB3aWxsIHBhaW50IGF0ICgwLDApIGluIHVzZXIgc3Bh
Y2UuCisgICAgLy8gVGhpcyBpbnZvbHZlcyBzdWJ0cmFjdGluZyBvdXQgdGhlIHBvc2l0aW9uIG9m
IHRoZSBsYXllciBpbiBvdXIgY3VycmVudCBjb29yZGluYXRlIHNwYWNlLCBidXQgcHJlc2Vydmlu
ZworICAgIC8vIHRoZSBhY2N1bXVsYXRlZCBlcnJvciBmb3Igc3ViLXBpeGVsIGxheW91dC4KKyAg
ICBMYXlvdXRQb2ludCBkZWx0YTsKKyAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhwYWludGluZ0lu
Zm8ucm9vdExheWVyLCBkZWx0YSk7CisgICAgZGVsdGEubW92ZUJ5KHRyYW5zbGF0aW9uT2Zmc2V0
KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0ocmVuZGVyYWJsZVRyYW5zZm9y
bShwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcikpOworICAgIEludFBvaW50IHJvdW5kZWREZWx0
YSA9IHJvdW5kZWRJbnRQb2ludChkZWx0YSk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0
KHJvdW5kZWREZWx0YS54KCksIHJvdW5kZWREZWx0YS55KCkpOworICAgIExheW91dFNpemUgYWRq
dXN0ZWRTdWJQaXhlbEFjY3VtdWxhdGlvbiA9IHBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxh
dGlvbiArIChkZWx0YSAtIHJvdW5kZWREZWx0YSk7CisKKyAgICAvLyBBcHBseSB0aGUgdHJhbnNm
b3JtLgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7
CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpKTsK
KworICAgIC8vIE5vdyBkbyBhIHBhaW50IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBi
ZSB1cy4KKyAgICBMYXllclBhaW50aW5nSW5mbyB0cmFuc2Zvcm1lZFBhaW50aW5nSW5mbyh0aGlz
LCBlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChwYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QpKSwgcGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IsCisgICAgICAg
IGFkanVzdGVkU3ViUGl4ZWxBY2N1bXVsYXRpb24sIHBhaW50aW5nSW5mby5wYWludGluZ1Jvb3Qs
IHBhaW50aW5nSW5mby5yZWdpb24sIHBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzKTsK
KyAgICBwYWludExheWVyQ29udGVudHNBbmRSZWZsZWN0aW9uKGNvbnRleHQsIHRyYW5zZm9ybWVk
UGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRU
cmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWlu
dEZsYWdzKQoreworICAgIExheWVyRnJhZ21lbnRzIGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVu
dHM7CisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKKyAg
ICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQ
YWdpbmF0aW9uRnJhZ21lbnRzLCBwYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8u
cmVnaW9uLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsCisgICAgICAgIChwYWludEZsYWdz
ICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQ
YWludGluZ0NsaXBSZWN0cywgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsCisgICAgICAgIChw
YWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVP
dmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5
ZXJGcm9tUm9vdCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbmNsb3NpbmdQ
YWdpbmF0aW9uRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IExheWVyRnJh
Z21lbnQmIGZyYWdtZW50ID0gZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cy5hdChpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEFwcGx5IHRoZSBwYWdlL2NvbHVtbiBjbGlwIGZvciB0aGlzIGZy
YWdtZW50LCBhcyB3ZWxsIGFzIGFueSBjbGlwcyBlc3RhYmxpc2hlZCBieSBsYXllcnMgaW4gYmV0
d2VlbiB1cyBhbmQKKyAgICAgICAgLy8gdGhlIGVuY2xvc2luZyBwYWdpbmF0aW9uIGxheWVyLgor
ICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVj
dCgpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGNvbXB1dGUgdGhlIGNsaXBzIHdpdGhpbiBh
IGdpdmVuIGZyYWdtZW50CisgICAgICAgIGlmIChwYXJlbnQoKSAhPSBlbmNsb3NpbmdQYWdpbmF0
aW9uTGF5ZXIoKSkgeworICAgICAgICAgICAgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPmNv
bnZlcnRUb0xheWVyQ29vcmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9mZnNldE9mUGFnaW5h
dGlvbkxheWVyRnJvbVJvb3QpOworICAgIAorICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBj
bGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCBwYWludGluZ0luZm8u
cmVnaW9uLCAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVt
cG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsCisgICAgICAgICAgICAgICAgSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5n
T3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dD
bGlwKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5k
Q2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCkucmVjdCgpOworICAgICAgICAgICAgcGFyZW50Q2xp
cFJlY3QubW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRp
b25MYXllckZyb21Sb290KTsKKyAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRD
bGlwUmVjdCk7CisgICAgICAgIH0KKworICAgICAgICBwYXJlbnQoKS0+Y2xpcFRvUmVjdChwYWlu
dGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGNsaXBSZWN0KTsKKyAgICAgICAgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oY29udGV4
dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzLCBmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0KTsK
KyAgICAgICAgcGFyZW50KCktPnJlc3RvcmVDbGlwKGNvbnRleHQsIHBhaW50aW5nSW5mby5wYWlu
dERpcnR5UmVjdCwgY2xpcFJlY3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdt
ZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFy
ZW5jeUxheWVyQ29udGV4dCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWlu
dERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwKKyAgICBS
ZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJG
cmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZy
YWdtZW50LnNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtub3cg
d2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcuCisgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5
KQorICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGly
dHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAKKyAgICAgICAg
aWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgeworICAgICAgICAgICAgLy8g
UGFpbnQgb3VyIGJhY2tncm91bmQgZmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkgY2hpbGQgbGF5
ZXJzLgorICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3Vy
IGJhY2tncm91bmQuCisgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJv
b3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8g
QmFja2dyb3VuZCBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAg
Ly8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUg
ZnJhZ21lbnQgaXRzZWxmIGluc3RlYWQgb2YganVzdCBmcm9tIHRoZSBwYWludCBpbmZvLgorICAg
ICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwg
cGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZv
LnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChm
cmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxv
Y2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CisKKyAgICAgICAgaWYgKGxv
Y2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNr
Z3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEZvcmVncm91
bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LAorICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0
LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBh
aW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVj
dCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGJvb2wgc2VsZWN0aW9uT25seSwgYm9vbCBmb3Jj
ZUJsYWNrVGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgaWYgd2UgaGF2ZSBzb21l
dGhpbmcgdG8gcGFpbnQuCisgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAg
ICAgICAgICAgaWYgKGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCAmJiAhZnJhZ21lbnQuZm9y
ZWdyb3VuZFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWlu
dEJlaGF2aW9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBQYWludEJlaGF2aW9yIGxvY2FsUGFpbnRCZWhhdmlvciA9
IGZvcmNlQmxhY2tUZXh0ID8gKFBhaW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tU
ZXh0IDogcGFpbnRCZWhhdmlvcjsKKworICAgIC8vIE9wdGltaXplIGNsaXBwaW5nIGZvciB0aGUg
c2luZ2xlIGZyYWdtZW50IGNhc2UuCisgICAgYm9vbCBzaG91bGRDbGlwID0gbG9jYWxQYWludGlu
Z0luZm8uY2xpcFRvRGlydHlSZWN0ICYmIGxheWVyRnJhZ21lbnRzLnNpemUoKSA9PSAxICYmIGxh
eWVyRnJhZ21lbnRzWzBdLnNob3VsZFBhaW50Q29udGVudCAmJiAhbGF5ZXJGcmFnbWVudHNbMF0u
Zm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpOworICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICBj
bGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVyRnJhZ21lbnRzWzBdLmZvcmVncm91bmRSZWN0
KTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIGxvb3AgdGhyb3VnaCBldmVyeSBmcmFnbWVudCBt
dWx0aXBsZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0byByZXBhaW50IGluIGVhY2ggc3BlY2lmaWMg
cGhhc2UgaW4gb3JkZXIgZm9yCisgICAgLy8gaW50ZXJsZWF2aW5nIG9mIHRoZSBmcmFnbWVudHMg
dG8gd29yayBwcm9wZXJseS4KKyAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhh
c2Uoc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRC
bG9ja0JhY2tncm91bmRzLCBsYXllckZyYWdtZW50cywKKyAgICAgICAgY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIp
OworICAgIAorICAgIGlmICghc2VsZWN0aW9uT25seSkgeworICAgICAgICBwYWludEZvcmVncm91
bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZsb2F0LCBsYXllckZyYWdtZW50cywg
Y29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdS
b290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRo
UGhhc2UoUGFpbnRQaGFzZUZvcmVncm91bmQsIGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJl
cik7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBo
YXNlQ2hpbGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB9
CisgICAgCisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQs
IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckZyYWdtZW50c1swXS5mb3Jl
Z3JvdW5kUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdyb3VuZEZvckZy
YWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYg
bGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhh
dmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBib29s
IHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QgJiYgbGF5ZXJG
cmFnbWVudHMuc2l6ZSgpID4gMTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJG
cmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9
IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50
Q29udGVudCB8fCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICAg
ICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7Cisg
ICAgCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50
UmVjdChmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5yZWN0KCkpLCBwaGFzZSwgcGFpbnRCZWhhdmlv
ciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Cisg
ICAgICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAgICAgICAgIHBh
aW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRl
c3RSZXF1ZXN0czsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0b1BvaW50
KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsg
bG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0KTsK
KyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLAorICAgIFBh
aW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdt
ZW50cy5hdChpKTsKKyAgICAgICAgaWYgKGZyYWdtZW50Lm91dGxpbmVSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICAvLyBQYWludCBvdXIgb3duIG91
dGxpbmUKKyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50Lm91dGxpbmVSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VTZWxmT3V0bGlu
ZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJ
bmZvLnJlZ2lvbik7CisgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQu
b3V0bGluZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOworICAgICAgICBy
ZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHRvUG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMu
bG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQ
aXhlbEFjY3VtdWxhdGlvbikpOworICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QpOworICAgIH0K
K30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sCisgICAgUmVuZGVyT2JqZWN0
KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJh
Z21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5zaG91
bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobG9j
YWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgY2xpcFRvUmVjdChs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZv
ckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFpbnRpbmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8g
c2VsZi4KKyAgICAgICAgCisgICAgICAgIC8vIFBhaW50IHRoZSBtYXNrLgorICAgICAgICAvLyBG
SVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFn
bWVudCBpdHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCisgICAgICAg
IFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVu
dC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5v
cm1hbCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7
CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChmcmFnbWVudC5s
YXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRp
bmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBpZiAobG9j
YWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAo
Y29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dD
b250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMs
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2Fs
UGFpbnRpbmdJbmZvKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVy
RnJhZ21lbnRzLmF0KGkpOworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJv
b3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRl
eHQsIHJvdW5kZWRJbnRQb2ludCh0b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9u
KCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1
bXVsYXRpb24pKSwKKyAgICAgICAgICAgIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFj
a2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQs
IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRlZENoaWxkTGF5
ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50
RmxhZ3MpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5n
IHVwIG91ciBjaGlsZCBsYXllciBpbnRvIHN0cmlwcy4KQEAgLTQwNDgsNyArNDI3MSw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFIKIAogICAgIHJlbmRlcmVyKCkt
PmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgIAotICAgIExheW91dFJlY3QgaGl0VGVz
dEFyZWEgPSByZW5kZXJlcigpLT5pc1JlbmRlckZsb3dUaHJlYWQoKSA/IHRvUmVuZGVyRmxvd1Ro
cmVhZChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpIDogcmVuZGVyZXIoKS0+dmlldygpLT5k
b2N1bWVudFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gaXNPdXRPZkZsb3dS
ZW5kZXJGbG93VGhyZWFkKCkgPyB0b1JlbmRlckZsb3dUaHJlYWQocmVuZGVyZXIoKSktPmJvcmRl
ckJveFJlY3QoKSA6IHJlbmRlcmVyKCktPnZpZXcoKS0+ZG9jdW1lbnRSZWN0KCk7CiAgICAgaWYg
KCFyZXF1ZXN0Lmlnbm9yZUNsaXBwaW5nKCkpCiAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2Vj
dChmcmFtZVZpc2libGVSZWN0KHJlbmRlcmVyKCkpKTsKIApAQCAtNDExOSw3ICs0MzQyLDcgQEAg
c3RhdGljIGRvdWJsZSBjb21wdXRlWk9mZnNldChjb25zdCBIaXRUZQogCiBQYXNzUmVmUHRyPEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gUmVuZGVyTGF5ZXI6OmNyZWF0ZUxvY2FsVHJhbnNmb3Jt
U3RhdGUoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJl
Y3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlKSBjb25zdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUsIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xh
dGlvbk9mZnNldCkgY29uc3QKIHsKICAgICBSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
PiB0cmFuc2Zvcm1TdGF0ZTsKICAgICBMYXlvdXRQb2ludCBvZmZzZXQ7CkBAIC00MTM0LDYgKzQz
NTcsOCBAQCBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gUmVuCiAgICAgICAg
IGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgb2Zmc2V0KTsKICAgICB9CiAgICAgCisg
ICAgb2Zmc2V0Lm1vdmVCeSh0cmFuc2xhdGlvbk9mZnNldCk7CisKICAgICBSZW5kZXJPYmplY3Qq
IGNvbnRhaW5lclJlbmRlcmVyID0gY29udGFpbmVyTGF5ZXIgPyBjb250YWluZXJMYXllci0+cmVu
ZGVyZXIoKSA6IDA7CiAgICAgaWYgKHJlbmRlcmVyKCktPnNob3VsZFVzZVRyYW5zZm9ybUZyb21D
b250YWluZXIoY29udGFpbmVyUmVuZGVyZXIpKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGNvbnRhaW5lclRyYW5zZm9ybTsKQEAgLTQxOTAsNiArNDQxNSw5IEBAIFJlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKIAogICAgIC8vIEFwcGx5IGEgdHJhbnNmb3Jt
IGlmIHdlIGhhdmUgb25lLgogICAgIGlmICh0cmFuc2Zvcm0oKSAmJiAhYXBwbGllZFRyYW5zZm9y
bSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpCisgICAgICAgICAg
ICByZXR1cm4gaGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhyb290TGF5ZXIsIGNv
bnRhaW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRp
b24sIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0KTsKKwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhl
IHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQuCiAgICAgICAgIGlmIChw
YXJlbnQoKSkgewogICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0
KHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBSb290UmVsYXRpdmVDbGlwUmVj
dHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CkBAIC00MTk4LDMxICs0NDI2LDggQEAg
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICAgICAgaWYg
KCFjbGlwUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBDcmVhdGUgYSB0cmFuc2Zvcm0gc3Rh
dGUgdG8gYWNjdW11bGF0ZSB0aGlzIHRyYW5zZm9ybS4KLSAgICAgICAgUmVmUHRyPEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9y
bVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9j
YXRpb24sIHRyYW5zZm9ybVN0YXRlKTsKLQotICAgICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNh
bid0IGJlIGludmVydGVkLCB0aGVuIGRvbid0IGhpdCB0ZXN0IHRoaXMgbGF5ZXIgYXQgYWxsLgot
ICAgICAgICBpZiAoIW5ld1RyYW5zZm9ybVN0YXRlLT5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmlz
SW52ZXJ0aWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgcG9pbnQgYW5kIHRoZSBoaXQgdGVzdCByZWN0IGluIHRoZSBjb29yZHMgb2YgdGhpcyBs
YXllciBieSB1c2luZyB0aGUgdmFsdWVzCi0gICAgICAgIC8vIGZyb20gdGhlIHRyYW5zZm9ybVN0
YXRlLCB3aGljaCBzdG9yZSB0aGUgcG9pbnQgYW5kIHF1YWQgaW4gdGhlIGNvb3JkcyBvZiB0aGUg
bGFzdCBmbGF0dGVuZWQKLSAgICAgICAgLy8gbGF5ZXIsIGFuZCB0aGUgYWNjdW11bGF0ZWQgdHJh
bnNmb3JtIHdoaWNoIGxldHMgdXAgbWFwIHRocm91Z2ggcHJlc2VydmUtM2QgbGF5ZXJzLgotICAg
ICAgICAvLwotICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IG1hcCBoaXRUZXN0TG9jYXRpb24gYW5k
IGhpdFRlc3RSZWN0IGJlY2F1c2UgdGhleSBtYXkgaGF2ZSBiZWVuIGZsYXR0ZW5lZCAobG9zaW5n
IHopCi0gICAgICAgIC8vIGJ5IG91ciBjb250YWluZXIuCi0gICAgICAgIEZsb2F0UG9pbnQgbG9j
YWxQb2ludCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRQb2ludCgpOwotICAgICAgICBGbG9h
dFF1YWQgbG9jYWxQb2ludFF1YWQgPSBuZXdUcmFuc2Zvcm1TdGF0ZS0+bWFwcGVkUXVhZCgpOwot
ICAgICAgICBMYXlvdXRSZWN0IGxvY2FsSGl0VGVzdFJlY3QgPSBuZXdUcmFuc2Zvcm1TdGF0ZS0+
Ym91bmRzT2ZNYXBwZWRBcmVhKCk7Ci0gICAgICAgIEhpdFRlc3RMb2NhdGlvbiBuZXdIaXRUZXN0
TG9jYXRpb247Ci0gICAgICAgIGlmIChoaXRUZXN0TG9jYXRpb24uaXNSZWN0QmFzZWRUZXN0KCkp
Ci0gICAgICAgICAgICBuZXdIaXRUZXN0TG9jYXRpb24gPSBIaXRUZXN0TG9jYXRpb24obG9jYWxQ
b2ludCwgbG9jYWxQb2ludFF1YWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdIaXRU
ZXN0TG9jYXRpb24gPSBIaXRUZXN0TG9jYXRpb24obG9jYWxQb2ludCk7Ci0KLSAgICAgICAgLy8g
Tm93IGRvIGEgaGl0IHRlc3Qgd2l0aCB0aGUgcm9vdCBsYXllciBzaGlmdGVkIHRvIGJlIHVzLgot
ICAgICAgICByZXR1cm4gaGl0VGVzdExheWVyKHRoaXMsIGNvbnRhaW5lckxheWVyLCByZXF1ZXN0
LCByZXN1bHQsIGxvY2FsSGl0VGVzdFJlY3QsIG5ld0hpdFRlc3RMb2NhdGlvbiwgdHJ1ZSwgbmV3
VHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IGhpdFRlc3RMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0ocm9vdExheWVyLCBjb250YWluZXJMYXll
ciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLCB0cmFuc2Zv
cm1TdGF0ZSwgek9mZnNldCk7CiAgICAgfQogCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhbmQg
M2Qgc3RhdHVzIGFyZSB1cC10by1kYXRlLgpAQCAtNDI1NCwxNiArNDQ1OSw3IEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgLy8gVGhpcyBsYXllciBp
cyBmbGF0dGVuaW5nLCBzbyBmbGF0dGVuIHRoZSBzdGF0ZSBwYXNzZWQgdG8gZGVzY2VuZGFudHMu
CiAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUtPmZsYXR0ZW4oKTsKICAgICB9Ci0gICAgCi0g
ICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCi0gICAgTGF5b3V0
UmVjdCBsYXllckJvdW5kczsKLSAgICBDbGlwUmVjdCBiZ1JlY3Q7Ci0gICAgQ2xpcFJlY3QgZmdS
ZWN0OwotICAgIENsaXBSZWN0IG91dGxpbmVSZWN0OwogCi0gICAgQ2xpcFJlY3RzQ29udGV4dCBj
bGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBSb290
UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7Ci0gICAgY2Fs
Y3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgaGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBi
Z1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QpOwotICAgIAogICAgIC8vIFRoZSBmb2xsb3dpbmcg
YXJlIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHotZGVwdGggb2YgdGhlIGhpdCBwb2lu
dCBvZiAzZC10cmFuc2Zvcm1lZAogICAgIC8vIGRlc2NlbmRhbnRzLgogICAgIGRvdWJsZSBsb2Nh
bFpPZmZzZXQgPSAtbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKQEAgLTQzMDgs
MTcgKzQ1MDQsMjIgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgog
ICAgICAgICBjYW5kaWRhdGVMYXllciA9IGhpdExheWVyOwogICAgIH0KIAotICAgIC8vIENoZWNr
IGZvciB0aGUgcmVzaXplcgotICAgIGlmIChjYW5SZXNpemUoKSAmJiByZXNpemVyQ29ybmVyUmVj
dCh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheWVyQm91bmRzKSkuY29udGFpbnMoaGl0VGVz
dExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgeworICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50
cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBmb3IgZWFjaCBsYXllciBm
cmFnbWVudC4KKyAgICBMYXllckZyYWdtZW50cyBsYXllckZyYWdtZW50czsKKyAgICBjb2xsZWN0
RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdp
b24oKSwgaGl0VGVzdFJlY3QsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlT
Y3JvbGxiYXJTaXplKTsKKworICAgIGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplcklu
RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24pKSB7CiAgICAgICAgIHJl
bmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9p
bnQoKSk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KIAotICAgIC8vIE5leHQgd2Ugd2Fu
dCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVj
dHMgb2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRp
b24pICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIC8vIE5leHQgd2Ugd2FudCB0byBz
ZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2Yg
dGhlIGxheWVyLiBDaGVjaworICAgIC8vIGV2ZXJ5IGZyYWdtZW50IGluIHJldmVyc2Ugb3JkZXIu
CisgICAgaWYgKGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAvLyBIaXQgdGVzdCB3
aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQsIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGNv
bW1pdCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdlJ3JlIGZyb250bW9zdC4KICAgICAgICAgSGl0
VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAg
IGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhp
dFRlc3RMb2NhdGlvbiwgSGl0VGVzdERlc2NlbmRhbnRzKQorICAgICAgICBib29sIGluc2lkZUZy
YWdtZW50Rm9yZWdyb3VuZFJlY3QgPSBmYWxzZTsKKyAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50
c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVz
dExvY2F0aW9uLCBIaXRUZXN0RGVzY2VuZGFudHMsIGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJl
Y3QpCiAgICAgICAgICAgICAmJiBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZv
ckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewogICAgICAg
ICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKICAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwpAQCAtNDMyOCwxMyArNDUyOSwxMyBAQCBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgICAgICAgICAvLyBGb3JlZ3JvdW5kIGNhbiBkZXB0aC1zb3J0IHdpdGggZGVzY2Vu
ZGFudCBsYXllcnMsIHNvIGtlZXAgdGhpcyBhcyBhIGNhbmRpZGF0ZS4KICAgICAgICAgICAgIGNh
bmRpZGF0ZUxheWVyID0gdGhpczsKLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNSZWN0QmFz
ZWRUZXN0KCkpCisgICAgICAgIH0gZWxzZSBpZiAoaW5zaWRlRnJhZ21lbnRGb3JlZ3JvdW5kUmVj
dCAmJiByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHRlbXBSZXN1bHQpOwogICAgIH0KIAogICAgIC8vIE5vdyBjaGVjayBvdXIgbmVnYXRpdmUgei1p
bmRleCBjaGlsZHJlbi4KICAgICBoaXRMYXllciA9IGhpdFRlc3RMaXN0KG5lZ1pPcmRlckxpc3Qo
KSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRp
b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zv
cm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2NlbmRhbnRzUHRyLCB6T2Zmc2V0LCB1bmZsYXR0
ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0aFNvcnREZXNjZW5kYW50cyk7CisgICAgICAg
IGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9m
ZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFu
dHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRh
bnRzKQogICAgICAgICAgICAgcmV0dXJuIGhpdExheWVyOwpAQCAtNDM0NSw5ICs0NTQ2LDEwIEBA
IFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICBpZiAoY2FuZGlk
YXRlTGF5ZXIpCiAgICAgICAgIHJldHVybiBjYW5kaWRhdGVMYXllcjsKIAotICAgIGlmIChiZ1Jl
Y3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkg
eworICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgSGl0VGVzdFJlc3Vs
dCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChoaXRU
ZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RMb2Nh
dGlvbiwgSGl0VGVzdFNlbGYpCisgICAgICAgIGJvb2wgaW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5k
UmVjdCA9IGZhbHNlOworICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGxh
eWVyRnJhZ21lbnRzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0TG9jYXRpb24sIEhpdFRl
c3RTZWxmLCBpbnNpZGVGcmFnbWVudEJhY2tncm91bmRSZWN0KQogICAgICAgICAgICAgJiYgaXNI
aXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVu
ZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0
QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsK
QEAgLTQzNTUsMjAgKzQ1NTcsMTE4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVz
dExheWVyKFIKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNl
ZFRlc3QoKSkKKyAgICAgICAgaWYgKGluc2lkZUZyYWdtZW50QmFja2dyb3VuZFJlY3QgJiYgcmVz
dWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVz
dWx0KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAorYm9vbCBSZW5kZXJMYXllcjo6aGl0
VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdt
ZW50cywgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwKKyAgICBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdEZp
bHRlciBoaXRUZXN0RmlsdGVyLCBib29sJiBpbnNpZGVDbGlwUmVjdCkgY29uc3QKK3sKKyAgICBp
ZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsK
KyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOwor
ICAgICAgICBpZiAoKGhpdFRlc3RGaWx0ZXIgPT0gSGl0VGVzdFNlbGYgJiYgIWZyYWdtZW50LmJh
Y2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSkKKyAgICAgICAgICAgIHx8
IChoaXRUZXN0RmlsdGVyID09IEhpdFRlc3REZXNjZW5kYW50cyAmJiAhZnJhZ21lbnQuZm9yZWdy
b3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpbnNpZGVDbGlwUmVjdCA9IHRydWU7CisgICAgICAgIGlmIChoaXRUZXN0
Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBmcmFnbWVudC5sYXllckJvdW5kcywgaGl0VGVzdExv
Y2F0aW9uLCBoaXRUZXN0RmlsdGVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RS
ZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbikgY29uc3QKK3sKKyAgICBpZiAo
bGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBm
b3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAg
ICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRp
b24pICYmIHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21l
bnQubGF5ZXJCb3VuZHMpKS5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXJCeUFwcGx5aW5n
VHJhbnNmb3JtKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJM
YXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJh
bnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCwKKyAgICBjb25zdCBMYXlvdXRQb2ludCYgdHJh
bnNsYXRpb25PZmZzZXQpCit7CisgICAgLy8gQ3JlYXRlIGEgdHJhbnNmb3JtIHN0YXRlIHRvIGFj
Y3VtdWxhdGUgdGhpcyB0cmFuc2Zvcm0uCisgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZT4gbmV3VHJhbnNmb3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RM
YXllciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5z
Zm9ybVN0YXRlLCB0cmFuc2xhdGlvbk9mZnNldCk7CisKKyAgICAvLyBJZiB0aGUgdHJhbnNmb3Jt
IGNhbid0IGJlIGludmVydGVkLCB0aGVuIGRvbid0IGhpdCB0ZXN0IHRoaXMgbGF5ZXIgYXQgYWxs
LgorICAgIGlmICghbmV3VHJhbnNmb3JtU3RhdGUtPm1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uaXNJ
bnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQ29tcHV0ZSB0aGUgcG9p
bnQgYW5kIHRoZSBoaXQgdGVzdCByZWN0IGluIHRoZSBjb29yZHMgb2YgdGhpcyBsYXllciBieSB1
c2luZyB0aGUgdmFsdWVzCisgICAgLy8gZnJvbSB0aGUgdHJhbnNmb3JtU3RhdGUsIHdoaWNoIHN0
b3JlIHRoZSBwb2ludCBhbmQgcXVhZCBpbiB0aGUgY29vcmRzIG9mIHRoZSBsYXN0IGZsYXR0ZW5l
ZAorICAgIC8vIGxheWVyLCBhbmQgdGhlIGFjY3VtdWxhdGVkIHRyYW5zZm9ybSB3aGljaCBsZXRz
IHVwIG1hcCB0aHJvdWdoIHByZXNlcnZlLTNkIGxheWVycy4KKyAgICAvLworICAgIC8vIFdlIGNh
bid0IGp1c3QgbWFwIGhpdFRlc3RMb2NhdGlvbiBhbmQgaGl0VGVzdFJlY3QgYmVjYXVzZSB0aGV5
IG1heSBoYXZlIGJlZW4gZmxhdHRlbmVkIChsb3NpbmcgeikKKyAgICAvLyBieSBvdXIgY29udGFp
bmVyLgorICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBw
ZWRQb2ludCgpOworICAgIEZsb2F0UXVhZCBsb2NhbFBvaW50UXVhZCA9IG5ld1RyYW5zZm9ybVN0
YXRlLT5tYXBwZWRRdWFkKCk7CisgICAgTGF5b3V0UmVjdCBsb2NhbEhpdFRlc3RSZWN0ID0gbmV3
VHJhbnNmb3JtU3RhdGUtPmJvdW5kc09mTWFwcGVkQXJlYSgpOworICAgIEhpdFRlc3RMb2NhdGlv
biBuZXdIaXRUZXN0TG9jYXRpb247CisgICAgaWYgKGhpdFRlc3RMb2NhdGlvbi5pc1JlY3RCYXNl
ZFRlc3QoKSkKKyAgICAgICAgbmV3SGl0VGVzdExvY2F0aW9uID0gSGl0VGVzdExvY2F0aW9uKGxv
Y2FsUG9pbnQsIGxvY2FsUG9pbnRRdWFkKTsKKyAgICBlbHNlCisgICAgICAgIG5ld0hpdFRlc3RM
b2NhdGlvbiA9IEhpdFRlc3RMb2NhdGlvbihsb2NhbFBvaW50KTsKKworICAgIC8vIE5vdyBkbyBh
IGhpdCB0ZXN0IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KKyAgICByZXR1
cm4gaGl0VGVzdExheWVyKHRoaXMsIGNvbnRhaW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGxv
Y2FsSGl0VGVzdFJlY3QsIG5ld0hpdFRlc3RMb2NhdGlvbiwgdHJ1ZSwgbmV3VHJhbnNmb3JtU3Rh
dGUuZ2V0KCksIHpPZmZzZXQpOworfQorCitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRl
c3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVu
ZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LAorICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQoreworICAg
IExheWVyRnJhZ21lbnRzIGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHM7CisgICAgTGF5b3V0
UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKKyAgICBlbmNsb3NpbmdQYWdp
bmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21l
bnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsCisg
ICAgICAgIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXpl
LCBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7
CisKKyAgICBmb3IgKGludCBpID0gZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cy5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVu
dCA9IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMuYXQoaSk7CisgICAgICAgIAorICAgICAg
ICAvLyBBcHBseSB0aGUgcGFnZS9jb2x1bW4gY2xpcCBmb3IgdGhpcyBmcmFnbWVudCwgYXMgd2Vs
bCBhcyBhbnkgY2xpcHMgZXN0YWJsaXNoZWQgYnkgbGF5ZXJzIGluIGJldHdlZW4gdXMgYW5kCisg
ICAgICAgIC8vIHRoZSBlbmNsb3NpbmcgcGFnaW5hdGlvbiBsYXllci4KKyAgICAgICAgTGF5b3V0
UmVjdCBjbGlwUmVjdCA9IGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE5vdyBjb21wdXRlIHRoZSBjbGlwcyB3aXRoaW4gYSBnaXZlbiBmcmFnbWVu
dAorICAgICAgICBpZiAocGFyZW50KCkgIT0gZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpIHsK
KyAgICAgICAgICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5jb252ZXJ0VG9MYXllckNv
b3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOworICAgIAor
ICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllcigpLCBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCksIFJvb3RSZWxhdGl2ZUNs
aXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICAgICAgICAgIExheW91
dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4
dCkucmVjdCgpOworICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3QubW92ZUJ5KGZyYWdtZW50LnBh
Z2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKKyAgICAg
ICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRDbGlwUmVjdCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmICghaGl0VGVzdExvY2F0aW9uLmludGVyc2VjdHMoY2xpcFJlY3Qp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVy
ID0gaGl0VGVzdExheWVyQnlBcHBseWluZ1RyYW5zZm9ybShyb290TGF5ZXIsIGNvbnRhaW5lckxh
eWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sCisgICAg
ICAgICAgICB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldCwgZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNl
dCk7CisgICAgICAgIGlmIChoaXRMYXllcikKKyAgICAgICAgICAgIHJldHVybiBoaXRMYXllcjsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRl
c3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc1NlbGZQYWludGluZ0xh
eWVyRGVzY2VuZGFudCgpKTsKIAotICAgIGlmICghcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b0xheW91dFBvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXRUZXN0RmlsdGVyKSkgeworICAgIGlm
ICghcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwg
dG9MYXlvdXRQb2ludChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24o
KSksIGhpdFRlc3RGaWx0ZXIpKSB7CiAgICAgICAgIC8vIEl0J3Mgd3JvbmcgdG8gc2V0IGlubmVy
Tm9kZSwgYnV0IHRoZW4gY2xhaW0gdGhhdCB5b3UgZGlkbid0IGhpdCBhbnl0aGluZywgdW5sZXNz
IGl0IGlzCiAgICAgICAgIC8vIGEgcmVjdC1iYXNlZCB0ZXN0LgogICAgICAgICBBU1NFUlQoIXJl
c3VsdC5pbm5lck5vZGUoKSB8fCAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpICYmIHJlc3VsdC5y
ZWN0QmFzZWRUZXN0UmVzdWx0KCkuc2l6ZSgpKSk7CkBAIC00NDA5LDcgKzQ3MDksNyBAQCBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KFZlCiAgICAgICAgIFJlbmRlckxheWVy
KiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7CiAgICAgICAgIFJlbmRlckxheWVyKiBoaXRMYXll
ciA9IDA7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExv
Y2F0aW9uKCkpOwotICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSAmJiAhdXNl
UmVnaW9uQmFzZWRDb2x1bW5zKCkpCisgICAgICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRl
ZCgpKQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihj
aGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBo
aXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5ZXItPmhpdFRlc3RM
YXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBo
aXRUZXN0TG9jYXRpb24sIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRh
bnRzKTsKQEAgLTQ2OTEsOCArNDk5MSwxOCBAQCBzdGF0aWMgaW5saW5lIENsaXBSZWN0IGJhY2tn
cm91bmRDbGlwUmVjCiBDbGlwUmVjdCBSZW5kZXJMYXllcjo6YmFja2dyb3VuZENsaXBSZWN0KGNv
bnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKHBhcmVudCgpKTsKKyAgICAKICAgICBDbGlwUmVjdHMgcGFyZW50UmVjdHM7Ci0gICAgcGFy
ZW50Q2xpcFJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIHBhcmVudFJlY3RzKTsKKworICAgIC8vIElm
IHdlIGNyb3NzIGludG8gYSBkaWZmZXJlbnQgcGFnaW5hdGlvbiBjb250ZXh0LCB0aGVuIHdlIGNh
bid0IHJlbHkgb24gdGhlIGNhY2hlLgorICAgIC8vIEp1c3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcg
VGVtcG9yYXJ5Q2xpcFJlY3RzLgorICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LmNsaXBSZWN0c1R5
cGUgIT0gVGVtcG9yYXJ5Q2xpcFJlY3RzICYmIHBhcmVudCgpLT5lbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKSAhPSBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSkgeworICAgICAgICBDbGlwUmVj
dHNDb250ZXh0IHRlbXBDb250ZXh0KGNsaXBSZWN0c0NvbnRleHQpOworICAgICAgICB0ZW1wQ29u
dGV4dC5jbGlwUmVjdHNUeXBlID0gVGVtcG9yYXJ5Q2xpcFJlY3RzOworICAgICAgICBwYXJlbnRD
bGlwUmVjdHModGVtcENvbnRleHQsIHBhcmVudFJlY3RzKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
cGFyZW50Q2xpcFJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIHBhcmVudFJlY3RzKTsKKyAgICAKICAg
ICBDbGlwUmVjdCBiYWNrZ3JvdW5kQ2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3RGb3JQb3Np
dGlvbihwYXJlbnRSZWN0cywgcmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSk7CiAgICAg
UmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKICAgICBBU1NFUlQodmlldyk7
CkBAIC00ODYwLDcgKzUxNzAsNyBAQCBib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdl
UmVjdChjCiAgICAgICAgIAogICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhl
IGJvdW5kaW5nIGJveCBvZiB0aGlzIHNpbmdsZSBsYXllciBhbmQgc2VlIGlmIGl0IGludGVyc2Vj
dHMKICAgICAvLyB0aGUgZGFtYWdlIHJlY3QuCi0gICAgcmV0dXJuIGJvdW5kaW5nQm94KHJvb3RM
YXllciwgb2Zmc2V0RnJvbVJvb3QpLmludGVyc2VjdHMoZGFtYWdlUmVjdCk7CisgICAgcmV0dXJu
IGJvdW5kaW5nQm94KHJvb3RMYXllciwgMCwgb2Zmc2V0RnJvbVJvb3QpLmludGVyc2VjdHMoZGFt
YWdlUmVjdCk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmxvY2FsQm91bmRpbmdCb3go
Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncykgY29uc3QKQEAgLTQ5MTEsMTQgKzUyMjEs
MzMgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxCb3VuZGluZ0JveAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0
IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJv
bVJvb3QpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpib3VuZGluZ0JveChjb25zdCBS
ZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFn
cywgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KSBjb25zdAogeyAgICAKLSAgICBM
YXlvdXRSZWN0IHJlc3VsdCA9IGxvY2FsQm91bmRpbmdCb3goKTsKKyAgICBMYXlvdXRSZWN0IHJl
c3VsdCA9IGxvY2FsQm91bmRpbmdCb3goZmxhZ3MpOwogICAgIGlmIChyZW5kZXJlcigpLT5pc0Jv
eCgpKQogICAgICAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlc3VsdCk7CiAg
ICAgZWxzZQogICAgICAgICByZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKS0+ZmxpcEZvcldy
aXRpbmdNb2RlKHJlc3VsdCk7CiAKKyAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkg
JiYgKGZsYWdzICYgVXNlRnJhZ21lbnRCb3hlcykpIHsKKyAgICAgICAgLy8gU3BsaXQgb3VyIGJv
eCB1cCBpbnRvIHRoZSBhY3R1YWwgZnJhZ21lbnQgYm94ZXMgdGhhdCByZW5kZXIgaW4gdGhlIGNv
bHVtbnMvcGFnZXMgYW5kIHVuaXRlIHRob3NlIHRvZ2V0aGVyIHRvCisgICAgICAgIC8vIGdldCBv
dXIgdHJ1ZSBib3VuZGluZyBib3guCisgICAgICAgIExheW91dFBvaW50IG9mZnNldFdpdGhpblBh
Z2luYXRpb25MYXllcjsKKyAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMoZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyKCksIG9mZnNldFdpdGhpblBhZ2luYXRpb25MYXllcik7ICAgICAgICAKKyAg
ICAgICAgcmVzdWx0Lm1vdmVCeShvZmZzZXRXaXRoaW5QYWdpbmF0aW9uTGF5ZXIpOworCisgICAg
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGVuY2xvc2luZ0Zsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dU
aHJlYWQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPnJlbmRlcmVyKCkpOworICAgICAgICBy
ZXN1bHQgPSBlbmNsb3NpbmdGbG93VGhyZWFkLT5mcmFnbWVudHNCb3VuZGluZ0JveChyZXN1bHQp
OworICAgICAgICAKKyAgICAgICAgTGF5b3V0UG9pbnQgZGVsdGE7CisgICAgICAgIGlmIChvZmZz
ZXRGcm9tUm9vdCkKKyAgICAgICAgICAgIGRlbHRhID0gKm9mZnNldEZyb21Sb290OworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29udmVydFRv
TGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgZGVsdGEpOworICAgICAgICByZXN1bHQubW92ZUJ5
KGRlbHRhKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBMYXlvdXRQb2lu
dCBkZWx0YTsKICAgICBpZiAob2Zmc2V0RnJvbVJvb3QpCiAgICAgICAgIGRlbHRhID0gKm9mZnNl
dEZyb21Sb290OwpAQCAtNTMzNiw3ICs1NjY1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVj
dExheWVycyhib29sIGluYwogICAgIGJvb2wgaXNTdGFja2luZyA9IGJlaGF2aW9yID09IFN0b3BB
dFN0YWNraW5nQ29udGV4dHMgPyBpc1N0YWNraW5nQ29udGV4dCgpIDogaXNTdGFja2luZ0NvbnRh
aW5lcigpOwogICAgIC8vIE92ZXJmbG93IGxheWVycyBhcmUganVzdCBwYWludGVkIGJ5IHRoZWly
IGVuY2xvc2luZyBsYXllcnMsIHNvIHRoZXkgZG9uJ3QgZ2V0IHB1dCBpbiB6b3JkZXIgbGlzdHMu
CiAgICAgYm9vbCBpbmNsdWRlSGlkZGVuTGF5ZXIgPSBpbmNsdWRlSGlkZGVuTGF5ZXJzIHx8ICht
X2hhc1Zpc2libGVDb250ZW50IHx8IChtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmIGlzU3RhY2tp
bmcpKTsKLSAgICBpZiAoaW5jbHVkZUhpZGRlbkxheWVyICYmICFpc05vcm1hbEZsb3dPbmx5KCkg
JiYgIXJlbmRlcmVyKCktPmlzUmVuZGVyRmxvd1RocmVhZCgpKSB7CisgICAgaWYgKGluY2x1ZGVI
aWRkZW5MYXllciAmJiAhaXNOb3JtYWxGbG93T25seSgpICYmICFpc091dE9mRmxvd1JlbmRlckZs
b3dUaHJlYWQoKSkgewogICAgICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggYnVmZmVyIHRoZSBjaGls
ZCBzaG91bGQgYmUgaW4uCiAgICAgICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+JiBi
dWZmZXIgPSAoekluZGV4KCkgPj0gMCkgPyBwb3NCdWZmZXIgOiBuZWdCdWZmZXI7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiAxNDQwMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjIsNiArNjIsNyBAQCBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgSGl0VGVzdFJl
cXVlc3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlOworY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwOwog
Y2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJlbmRlclJlcGxpY2E7CkBAIC0xMTQsNiArMTE1
LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2b2lkIG1vdmUoTGF5b3V0VW5pdCB4LCBMYXlvdXRV
bml0IHkpIHsgbV9yZWN0Lm1vdmUoeCwgeSk7IH0KICAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkgeyBtX3JlY3QubW92ZShzaXplKTsgfQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0
IExheW91dFBvaW50JiBwb2ludCkgeyBtX3JlY3QubW92ZUJ5KHBvaW50KTsgfQogCiAgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmlzRW1wdHkoKTsgfQogICAgIGJvb2wg
aW50ZXJzZWN0cyhjb25zdCBMYXlvdXRSZWN0JiByZWN0KSB7IHJldHVybiBtX3JlY3QuaW50ZXJz
ZWN0cyhyZWN0KTsgfQpAQCAtMjUxLDYgKzI1Myw1MiBAQCBwdWJsaWM6CiAjZW5kaWYKIH07CiAK
K3N0cnVjdCBMYXllckZyYWdtZW50IHsKK3B1YmxpYzoKKyAgICBMYXllckZyYWdtZW50KCkKKyAg
ICAgICAgOiBzaG91bGRQYWludENvbnRlbnQoZmFsc2UpCisgICAgeyB9CisKKyAgICB2b2lkIHNl
dFJlY3RzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcywgY29uc3QgQ2xpcFJlY3QmIGJhY2tncm91
bmQsIGNvbnN0IENsaXBSZWN0JiBmb3JlZ3JvdW5kLCBjb25zdCBDbGlwUmVjdCYgb3V0bGluZSkK
KyAgICB7CisgICAgICAgIGxheWVyQm91bmRzID0gYm91bmRzOworICAgICAgICBiYWNrZ3JvdW5k
UmVjdCA9IGJhY2tncm91bmQ7CisgICAgICAgIGZvcmVncm91bmRSZWN0ID0gZm9yZWdyb3VuZDsK
KyAgICAgICAgb3V0bGluZVJlY3QgPSBvdXRsaW5lOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1v
dmVCeShjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbGF5ZXJCb3Vu
ZHMubW92ZUJ5KG9mZnNldCk7CisgICAgICAgIGJhY2tncm91bmRSZWN0Lm1vdmVCeShvZmZzZXQp
OworICAgICAgICBmb3JlZ3JvdW5kUmVjdC5tb3ZlQnkob2Zmc2V0KTsKKyAgICAgICAgb3V0bGlu
ZVJlY3QubW92ZUJ5KG9mZnNldCk7CisgICAgICAgIHBhZ2luYXRpb25DbGlwLm1vdmVCeShvZmZz
ZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGludGVyc2VjdChjb25zdCBMYXlvdXRSZWN0JiBy
ZWN0KQorICAgIHsKKyAgICAgICAgYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KHJlY3QpOworICAg
ICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QocmVjdCk7CisgICAgICAgIG91dGxpbmVSZWN0
LmludGVyc2VjdChyZWN0KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRQYWludENvbnRl
bnQ7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKKyAgICBDbGlwUmVjdCBiYWNrZ3JvdW5k
UmVjdDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5kUmVjdDsKKyAgICBDbGlwUmVjdCBvdXRsaW5l
UmVjdDsKKyAgICAKKyAgICAvLyBVbmlxdWUgdG8gcGFnaW5hdGVkIGZyYWdtZW50cy4gVGhlIHBo
eXNpY2FsIHRyYW5zbGF0aW9uIHRvIGFwcGx5IHRvIHNoaWZ0IHRoZSBsYXllciB3aGVuIHBhaW50
aW5nL2hpdC10ZXN0aW5nLgorICAgIExheW91dFBvaW50IHBhZ2luYXRpb25PZmZzZXQ7CisgICAg
CisgICAgLy8gQWxzbyB1bmlxdWUgdG8gcGFnaW5hdGVkIGZyYWdtZW50cy4gQW4gYWRkaXRpb25h
bCBjbGlwIHRoYXQgYXBwbGllcyB0byB0aGUgbGF5ZXIuIEl0IGlzIGluIGxheWVyLWxvY2FsCisg
ICAgLy8gKHBoeXNpY2FsKSBjb29yZGluYXRlcy4KKyAgICBMYXlvdXRSZWN0IHBhZ2luYXRpb25D
bGlwOworfTsKKwordHlwZWRlZiBWZWN0b3I8TGF5ZXJGcmFnbWVudD4gTGF5ZXJGcmFnbWVudHM7
CisKIGNsYXNzIFJlbmRlckxheWVyIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKQEAgLTQxOCw2ICs0NjYsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICAKICAgICBib29sIGlzUGFnaW5hdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc1BhZ2luYXRlZDsgfQorICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsgfQogCiAgICAg
dm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKICAgICAKQEAgLTYyMiwxMiArNjcxLDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgRXhjbHVkZUhpZGRlbkRlc2NlbmRhbnRzID0gMSA8PCAzLAogICAgICAgICBE
b250Q29uc3RyYWluRm9yTWFzayA9IDEgPDwgNCwKICAgICAgICAgSW5jbHVkZUNvbXBvc2l0ZWRE
ZXNjZW5kYW50cyA9IDEgPDwgNSwKLSAgICAgICAgRGVmYXVsdENhbGN1bGF0ZUxheWVyQm91bmRz
RmxhZ3MgPSAgSW5jbHVkZVNlbGZUcmFuc2Zvcm0gfCBVc2VMb2NhbENsaXBSZWN0SWZQb3NzaWJs
ZSB8IEluY2x1ZGVMYXllckZpbHRlck91dHNldHMKKyAgICAgICAgVXNlRnJhZ21lbnRCb3hlcyA9
IDEgPDwgNiwKKyAgICAgICAgRGVmYXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAgSW5j
bHVkZVNlbGZUcmFuc2Zvcm0gfCBVc2VMb2NhbENsaXBSZWN0SWZQb3NzaWJsZSB8IEluY2x1ZGVM
YXllckZpbHRlck91dHNldHMgfCBVc2VGcmFnbWVudEJveGVzCiAgICAgfTsKICAgICB0eXBlZGVm
IHVuc2lnbmVkIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3M7CiAKICAgICAvLyBCb3VuZGluZyBi
b3ggcmVsYXRpdmUgdG8gc29tZSBhbmNlc3RvciBsYXllci4gUGFzcyBvZmZzZXRGcm9tUm9vdCBp
ZiBrbm93bi4KLSAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBy
b290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDApIGNvbnN0Owor
ICAgIExheW91dFJlY3QgYm91bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IDAsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRG
cm9tUm9vdCA9IDApIGNvbnN0OwogICAgIC8vIEJvdW5kaW5nIGJveCBpbiB0aGUgY29vcmRpbmF0
ZXMgb2YgdGhpcyBsYXllci4KICAgICBMYXlvdXRSZWN0IGxvY2FsQm91bmRpbmdCb3goQ2FsY3Vs
YXRlTGF5ZXJCb3VuZHNGbGFncyA9IDApIGNvbnN0OwogICAgIC8vIFBpeGVsIHNuYXBwZWQgYm91
bmRpbmcgYm94IHJlbGF0aXZlIHRvIHRoZSByb290LgpAQCAtNzgxLDYgKzgzMSw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKFZp
ZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIHJlYXNvbikgeyBtX3ZpZXdwb3J0
Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uID0gcmVhc29uOyB9CiAgICAgVmlld3BvcnRD
b25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24gdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBv
c2l0ZWRSZWFzb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxWaWV3cG9ydENvbnN0cmFp
bmVkTm90Q29tcG9zaXRlZFJlYXNvbj4obV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRl
ZFJlYXNvbik7IH0KICNlbmRpZgorICAgIAorICAgIGJvb2wgaXNPdXRPZkZsb3dSZW5kZXJGbG93
VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+aXNPdXRPZkZsb3dSZW5kZXJGbG93
VGhyZWFkKCk7IH0KIAogcHJpdmF0ZToKICAgICBlbnVtIENvbGxlY3RMYXllcnNCZWhhdmlvciB7
IFN0b3BBdFN0YWNraW5nQ29udGV4dHMsIFN0b3BBdFN0YWNraW5nQ29udGFpbmVycyB9OwpAQCAt
ODg2LDEzICs5MzgsMzIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50TGF5ZXIoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwogICAg
IHZvaWQgcGFpbnRMYXllckNvbnRlbnRzQW5kUmVmbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWlu
dExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBQYWludExheWVyRmxhZ3MpOworICAgIHZvaWQgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zv
cm0oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVy
RmxhZ3MsIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFBvaW50
KCkpOwogICAgIHZvaWQgcGFpbnRMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwogICAg
IHZvaWQgcGFpbnRQYWdpbmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFn
cyk7CiAgICAgdm9pZCBwYWludENoaWxkTGF5ZXJJbnRvQ29sdW1ucyhSZW5kZXJMYXllciogY2hp
bGRMYXllciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWlu
dExheWVyRmxhZ3MsIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNp
emVfdCBjb2x1bW5JbmRleCk7CiAKKyAgICB2b2lkIGNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFn
bWVudHMmLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWdpb24qLCBjb25z
dCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCisgICAgICAgIENsaXBSZWN0c1R5cGUsIE92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJ
Z25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwKKyAgICAgICAgU2hvdWxkUmVzcGVjdE92ZXJmbG93
Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9t
Um9vdCA9IDApOworICAgIHZvaWQgdXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVy
RnJhZ21lbnRzJiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGJv
b2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3Qp
OworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXll
ckNvbnRleHQsCisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGly
dHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwg
UGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7Cisg
ICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMm
LCBHcmFwaGljc0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29u
dGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJl
Y3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWlu
dEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLAorICAgICAg
ICBib29sIHNlbGVjdGlvbk9ubHksIGJvb2wgZm9yY2VCbGFja1RleHQpOworICAgIHZvaWQgcGFp
bnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBhaW50UGhhc2UsIGNvbnN0IExheWVy
RnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQ
YWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAg
ICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwg
UmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9pZCBwYWludE92
ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYpOworICAgIHZvaWQgcGFpbnRNYXNr
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRl
cmVyKTsKKyAgICB2b2lkIHBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFnbWVudHMoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwor
CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBS
ZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgYm9v
bCBhcHBsaWVkVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSA9IDAsIGRvdWJsZSogek9m
ZnNldCA9IDApOworICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJhbnNm
b3JtKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKKyAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSAwLCBkb3VibGUqIHpPZmZzZXQgPSAwLAorICAgICAgICBj
b25zdCBMYXlvdXRQb2ludCYgdHJhbnNsYXRpb25PZmZzZXQgPSBMYXlvdXRQb2ludCgpKTsKICAg
ICBSZW5kZXJMYXllciogaGl0VGVzdExpc3QoVmVjdG9yPFJlbmRlckxheWVyKj4qLCBSZW5kZXJM
YXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRS
ZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1T
dGF0ZSwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsIGRvdWJsZSogek9mZnNldCwKQEAg
LTkwNyw5ICs5NzgsMTQgQEAgcHJpdmF0ZToKIAogICAgIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlPiBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKFJlbmRlckxheWVyKiByb290
TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlKSBjb25zdDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRy
YW5zZm9ybVN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFBv
aW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFBvaW50KCkpIGNvbnN0OwogICAgIAogICAg
IGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
LCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdt
ZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGlu
c2lkZUNsaXBSZWN0KSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mKSBjb25zdDsKKyAg
ICBSZW5kZXJMYXllciogaGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJM
YXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhp
dFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGUqID0gMCwgZG91YmxlKiB6T2Zmc2V0ID0gMCk7CiAKICAgICBib29sIGxpc3RDb250
ZW50c09wYXF1ZUluUmVjdChjb25zdCBWZWN0b3I8UmVuZGVyTGF5ZXIqPiosIGNvbnN0IExheW91
dFJlY3QmKSBjb25zdDsKIApAQCAtMTE4NCw2ICsxMjYwLDkgQEAgcHJvdGVjdGVkOgogICAgIFJl
bmRlclNjcm9sbGJhclBhcnQqIG1fc2Nyb2xsQ29ybmVyOwogICAgIFJlbmRlclNjcm9sbGJhclBh
cnQqIG1fcmVzaXplcjsKIAorICAgIC8vIFBvaW50ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5kZXJM
YXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJlIG5v
dCBwYWdpbmF0ZWQuCisgICAgUmVuZGVyTGF5ZXIqIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVy
OworCiBwcml2YXRlOgogICAgIEludFJlY3QgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5CbG9jay5jcHAJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDggKzEw
OCw2IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVNdWwKICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CiAgICAgbmV3
U3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKICAgICBuZXdTdHlsZS0+c2V0RGlzcGxh
eShCTE9DSyk7Ci0gICAgbmV3U3R5bGUtPnNldFBvc2l0aW9uKFJlbGF0aXZlUG9zaXRpb24pOwot
ICAgIG5ld1N0eWxlLT5zZXRaSW5kZXgoMCk7CiAgICAgbmV3U3R5bGUtPmZvbnQoKS51cGRhdGUo
MCk7CiAgICAgcmV0dXJuIG5ld1N0eWxlLnJlbGVhc2UoKTsKIH0KQEAgLTE2Miw2ICsxNjAsMTUg
QEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjplbnN1cmVDb2x1bQogICAgIGNvbHVtblNl
dC0+c2V0UmVxdWlyZXNCYWxhbmNpbmcocmVxdWlyZXNCYWxhbmNpbmcoKSk7CiB9CiAKK3ZvaWQg
UmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVu
LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KQoreworICAgIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9jayhyZWxheW91dENoaWxkcmVuLCBwYWdlTG9naWNhbEhlaWdodCk7CisgICAgCisgICAg
Ly8gU2hpZnQgdGhlIGZsb3cgdGhyZWFkIGJhY2sgdXAgdG8gdGhlIHRvcCBvZiB0aGUgYmxvY2su
CisgICAgaWYgKGZsb3dUaHJlYWQoKSkKKyAgICAgICAgZmxvd1RocmVhZCgpLT5zZXRMb2dpY2Fs
VG9wKGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpKTsKK30KKwogY29uc3QgY2hhciog
UmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6cmVuZGVyTmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlz
RmxvYXRpbmcoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtbkJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uQmxvY2suaAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NiArNTIsOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIE9WRVJSSURFOwor
CiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUxvZ2ljYWxXaWR0aEFuZENvbHVtbldpZHRoKCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRD
aGFuZ2UoTGF5b3V0VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wmIHBhZ2VMb2dpY2FsSGVp
Z2h0Q2hhbmdlZCwgYm9vbCYgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgYm9vbCByZWxheW91dEZvclBhZ2luYXRpb24oYm9vbCBoYXNTcGVjaWZp
ZWRQYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0
U3RhdGVNYWludGFpbmVyJikgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oCShyZXZpc2lvbiAx
NDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93
VGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDYgQEAgcHVibGljOgogICAgIH5S
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQoKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJv
b2wgaXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1
ZTsgfQotCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRW
YWx1ZXMmKSBjb25zdCBPVkVSUklERTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAJKHJldmlzaW9uIDE0NDAwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtblNldC5oIgogCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZC5oIgogCkBAIC0yNDksMTAgKzI0OSw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1
bW5TZXQ6OnBhaW50T2JqZWN0KFAKICAgICBpZiAoIW1fZmxvd1RocmVhZCB8fCAhaXNWYWxpZCgp
IHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBz
ZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKTsKICAgICBwYWludENvbHVtblJ1bGVzKHBhaW50
SW5mbywgcGFpbnRPZmZzZXQpOwotICAgIHBhaW50Q29sdW1uQ29udGVudHMocGFpbnRJbmZvLCBw
YWludE9mZnNldCk7Ci0gICAgcmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CiB9
CiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTMwOSw3NiAr
MzA2LDYgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdQogICAgIH0K
IH0KIAotdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5Db250ZW50cyhQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAg
IC8vIEZvciBlYWNoIHJlY3RhbmdsZSwgc2V0IGl0IGFzIHRoZSByZWdpb24gcmVjdGFuZ2xlIGFu
ZCB0aGVuIGxldCBmbG93IHRocmVhZCBwYWludGluZyBkbyB0aGUgcmVzdC4KLSAgICAvLyBXZSBt
YWtlIG11bHRpcGxlIGNhbGxzIHRvIHBhaW50Rmxvd1RocmVhZFBvcnRpb25JblJlZ2lvbiwgY2hh
bmdpbmcgdGhlIHJlY3RhbmdsZXMgZWFjaCB0aW1lLgotICAgIHVuc2lnbmVkIGNvbENvdW50ID0g
Y29sdW1uQ291bnQoKTsKLSAgICBpZiAoIWNvbENvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBMYXlvdXRVbml0IGNvbEdhcCA9IGNvbHVtbkdhcCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAgIC8vIEZpcnN0IHdlIGdldCB0aGUgY29s
dW1uIHJlY3QsIHdoaWNoIGlzIGluIG91ciBsb2NhbCBjb29yZGluYXRlIHNwYWNlLCBhbmQgd2Ug
bWFrZSBpdCBwaHlzaWNhbCBhbmQgYXBwbHkKLSAgICAgICAgLy8gdGhlIHBhaW50IG9mZnNldCB0
byBpdC4gVGhhdCBnaXZlcyB1cyB0aGUgcGh5c2ljYWwgbG9jYXRpb24gdGhhdCB3ZSB3YW50IHRv
IHBhaW50IHRoZSBjb2x1bW4gYXQuCi0gICAgICAgIExheW91dFJlY3QgY29sUmVjdCA9IGNvbHVt
blJlY3RBdChpKTsKLSAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKGNvbFJlY3QpOwotICAgICAg
ICBjb2xSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgICAgIAotICAgICAgICAvLyBOZXh0
IHdlIGdldCB0aGUgcG9ydGlvbiBvZiB0aGUgZmxvdyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0
byB0aGlzIGNvbHVtbi4KLSAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZs
b3dUaHJlYWRQb3J0aW9uUmVjdEF0KGkpOwotICAgICAgICAKLSAgICAgICAgLy8gTm93IGdldCB0
aGUgb3ZlcmZsb3cgcmVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjb2x1bW4uCi0gICAgICAg
IExheW91dFJlY3QgZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9u
T3ZlcmZsb3dSZWN0KGZsb3dUaHJlYWRQb3J0aW9uLCBpLCBjb2xDb3VudCwgY29sR2FwKTsKLQot
ICAgICAgICAvLyBEbyB0aGUgcGFpbnQgd2l0aCB0aGUgY29tcHV0ZWQgcmVjdHMuCi0gICAgICAg
IGZsb3dUaHJlYWQoKS0+cGFpbnRGbG93VGhyZWFkUG9ydGlvbkluUmVnaW9uKHBhaW50SW5mbywg
dGhpcywgZmxvd1RocmVhZFBvcnRpb24sIGZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24sIGNvbFJl
Y3QubG9jYXRpb24oKSk7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCi17
Ci0gICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsg
bG9jYXRpb24oKTsKLQotICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVy
cG9zZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2FuIG9ubHkgYmUgaGl0IGluIHRoZQotICAgIC8v
IGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRydWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxp
a2UgaW1hZ2VzKS4KLSAgICAvLyBGSVhNRTogT25jZSB3ZSBzdXBwb3J0IG92ZXJmbG93LCB3ZSBu
ZWVkIHRvIGludGVyc2VjdCB3aXRoIHRoYXQgYW5kIG5vdCB3aXRoIHRoZSBib3VuZHMgcmVjdC4K
LSAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24obG9jYXRp
b25JbkNvbnRhaW5lci5yZWdpb24oKSk7Ci0gICAgYm91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRM
b2NhdGlvbik7Ci0gICAgaWYgKCF2aXNpYmxlVG9IaXRUZXN0aW5nKCkgfHwgYWN0aW9uICE9IEhp
dFRlc3RGb3JlZ3JvdW5kIHx8ICFsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRz
UmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBUaGUgcG9pbnQgaXMg
aW4gb25lIHNwZWNpZmljIGNvbHVtbi4gU2luY2UgY29sdW1ucyBjYW4ndCBvdmVybGFwLCB3ZSBk
b24ndCBldmVyIGhhdmUgdG8gdGVzdAotICAgIC8vIG11bHRpcGxlIGNvbHVtbnMuIFB1dCB0aGUg
Ci0gICAgCi0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8ganVtcCByaWdodCB0byB0
aGUgc3BlY2lmaWMgY29sdW1uIGJ5IGp1c3QgZG9pbmcgbWF0aCBvbiB0aGUgcG9pbnQuIFNpbmNl
IGNvbHVtbnMKLSAgICAvLyBjYW4ndCBvdmVybGFwLCB3ZSBzaG91bGRuJ3QgaGF2ZSB0byB3YWxr
IGV2ZXJ5IGNvbHVtbiBsaWtlIHRoaXMuIFRoZSBvbGQgY29sdW1uIGNvZGUgd2Fsa2VkIGFsbCB0
aGUgY29sdW1ucywgdGhvdWdoLAotICAgIC8vIHNvIHRoaXMgaXMgbm8gd29yc2UuIFdlJ2QgaGF2
ZSB0byB3YXRjaCBvdXQgZm9yIHJlY3QtYmFzZWQgaGl0IHRlc3RpbmcsIHRob3VnaCwgd2hpY2gg
YWN0dWFsbHkgY291bGQgb3ZlcmxhcAotICAgIC8vIG11bHRpcGxlIGNvbHVtbnMuCi0gICAgTGF5
b3V0VW5pdCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNv
bHVtbkNvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKysp
IHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgZ2V0IHRoZSBjb2x1bW4gcmVjdCwgd2hpY2ggaXMgaW4g
b3VyIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UsIGFuZCB3ZSBtYWtlIGl0IHBoeXNpY2FsIGFuZCBh
cHBseQotICAgICAgICAvLyB0aGUgaGl0IHRlc3Qgb2Zmc2V0IHRvIGl0LiBUaGF0IGdpdmVzIHVz
IHRoZSBwaHlzaWNhbCBsb2NhdGlvbiB0aGF0IHdlIHdhbnQgdG8gcGFpbnQgdGhlIGNvbHVtbiBh
dC4KLSAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGkpOwotICAgICAg
ICBmbGlwRm9yV3JpdGluZ01vZGUoY29sUmVjdCk7Ci0gICAgICAgIGNvbFJlY3QubW92ZUJ5KGFk
anVzdGVkTG9jYXRpb24pOwotICAgICAgICAKLSAgICAgICAgLy8gTmV4dCB3ZSBnZXQgdGhlIHBv
cnRpb24gb2YgdGhlIGZsb3cgdGhyZWFkIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhpcyBjb2x1bW4u
Ci0gICAgICAgIExheW91dFJlY3QgZmxvd1RocmVhZFBvcnRpb24gPSBmbG93VGhyZWFkUG9ydGlv
blJlY3RBdChpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyBnZXQgdGhlIG92ZXJmbG93IHJl
Y3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY29sdW1uLgotICAgICAgICBMYXlvdXRSZWN0IGZs
b3dUaHJlYWRPdmVyZmxvd1BvcnRpb24gPSBmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdChm
bG93VGhyZWFkUG9ydGlvbiwgaSwgY29sQ291bnQsIGNvbEdhcCk7Ci0KLSAgICAgICAgLy8gRG8g
dGhlIGhpdCB0ZXN0IHdpdGggdGhlIGNvbXB1dGVkIHJlY3RzLgotICAgICAgICBpZiAoZmxvd1Ro
cmVhZCgpLT5oaXRUZXN0Rmxvd1RocmVhZFBvcnRpb25JblJlZ2lvbih0aGlzLCBmbG93VGhyZWFk
UG9ydGlvbiwgZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbiwgcmVxdWVzdCwgcmVzdWx0LCBsb2Nh
dGlvbkluQ29udGFpbmVyLCBjb2xSZWN0LmxvY2F0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIAotICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2Nh
dGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikp
OwotICAgIHJldHVybiAhcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgp
LCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNSZWN0KTsKLX0KLQogdm9pZCBS
ZW5kZXJNdWx0aUNvbHVtblNldDo6cmVwYWludEZsb3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91
dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGltbWVkaWF0ZSkgY29uc3QKIHsKICAgICAvLyBGaWd1
cmUgb3V0IHRoZSBzdGFydCBhbmQgZW5kIGNvbHVtbnMgYW5kIG9ubHkgY2hlY2sgd2l0aGluIHRo
YXQgcmFuZ2Ugc28gdGhhdCB3ZSBkb24ndCB3YWxrIHRoZQpAQCAtNDE3LDYgKzM0NCw4OCBAQCB2
b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpyZXBhaW50Rmxvd1RoCiAgICAgfQogfQogCit2b2lk
IFJlbmRlck11bHRpQ29sdW1uU2V0Ojpjb2xsZWN0TGF5ZXJGcmFnbWVudHMoVmVjdG9yPExheWVy
RnJhZ21lbnQ+JiBmcmFnbWVudHMsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gs
IGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICAvLyBQdXQgdGhlIGxheWVyIGJv
dW5kcyBpbnRvIGZsb3cgdGhyZWFkLWxvY2FsIGNvb3JkaW5hdGVzIGJ5IGZsaXBwaW5nIGl0IGZp
cnN0LgorICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQobGF5ZXJCb3VuZGlu
Z0JveCk7CisgICAgZmxvd1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGUobGF5ZXJCb3VuZHNJ
bkZsb3dUaHJlYWQpOworCisgICAgLy8gRG8gdGhlIHNhbWUgZm9yIHRoZSBkaXJ0eSByZWN0Lgor
ICAgIExheW91dFJlY3QgZGlydHlSZWN0SW5GbG93VGhyZWFkKGRpcnR5UmVjdCk7CisgICAgZmxv
d1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGUoZGlydHlSZWN0SW5GbG93VGhyZWFkKTsKKwor
ICAgIC8vIE5vdyB3ZSBjYW4gY29tcGFyZSB3aXRoIHRoZSBmbG93IHRocmVhZCBwb3J0aW9ucyBv
d25lZCBieSBlYWNoIGNvbHVtbi4gRmlyc3QgbGV0J3MKKyAgICAvLyBzZWUgaWYgdGhlIHJlY3Qg
aW50ZXJzZWN0cyBvdXIgZmxvdyB0aHJlYWQgcG9ydGlvbiBhdCBhbGwuCisgICAgTGF5b3V0UmVj
dCBjbGlwcGVkUmVjdChsYXllckJvdW5kc0luRmxvd1RocmVhZCk7CisgICAgY2xpcHBlZFJlY3Qu
aW50ZXJzZWN0KFJlbmRlclJlZ2lvbjo6Zmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKSk7
CisgICAgaWYgKGNsaXBwZWRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIC8vIE5vdyB3ZSBrbm93IHdlIGludGVyc2VjdCBhdCBsZWFzdCBvbmUgY29sdW1uLiBMZXQn
cyBmaWd1cmUgb3V0IHRoZSBsb2dpY2FsIHRvcCBhbmQgbG9naWNhbAorICAgIC8vIGJvdHRvbSBv
ZiB0aGUgYXJlYSB3ZSdyZSBjaGVja2luZy4KKyAgICBMYXlvdXRVbml0IGxheWVyTG9naWNhbFRv
cCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsYXllckJvdW5kc0luRmxvd1RocmVhZC55
KCkgOiBsYXllckJvdW5kc0luRmxvd1RocmVhZC54KCk7CisgICAgTGF5b3V0VW5pdCBsYXllckxv
Z2ljYWxCb3R0b20gPSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxheWVyQm91bmRzSW5G
bG93VGhyZWFkLm1heFkoKSA6IGxheWVyQm91bmRzSW5GbG93VGhyZWFkLm1heFgoKSkgLSAxOwor
ICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHN0YXJ0IGFuZCBlbmQgY29sdW1ucyBhbmQgb25s
eSBjaGVjayB3aXRoaW4gdGhhdCByYW5nZSBzbyB0aGF0IHdlIGRvbid0IHdhbGsgdGhlCisgICAg
Ly8gZW50aXJlIGNvbHVtbiBzZXQuCisgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBjb2x1bW5J
bmRleEF0T2Zmc2V0KGxheWVyTG9naWNhbFRvcCk7CisgICAgdW5zaWduZWQgZW5kQ29sdW1uID0g
Y29sdW1uSW5kZXhBdE9mZnNldChsYXllckxvZ2ljYWxCb3R0b20pOworICAgIAorICAgIExheW91
dFVuaXQgY29sTG9naWNhbFdpZHRoID0gY29tcHV0ZWRDb2x1bW5XaWR0aCgpOworICAgIExheW91
dFVuaXQgY29sR2FwID0gY29sdW1uR2FwKCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1
bW5Db3VudCgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0Q29sdW1uOyBpIDw9
IGVuZENvbHVtbjsgaSsrKSB7CisgICAgICAgIC8vIEdldCB0aGUgcG9ydGlvbiBvZiB0aGUgZmxv
dyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIGNvbHVtbi4KKyAgICAgICAgTGF5b3V0
UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uUmVjdEF0KGkpOworICAg
ICAgICAKKyAgICAgICAgLy8gTm93IGdldCB0aGUgb3ZlcmZsb3cgcmVjdCB0aGF0IGNvcnJlc3Bv
bmRzIHRvIHRoZSBjb2x1bW4uCisgICAgICAgIExheW91dFJlY3QgZmxvd1RocmVhZE92ZXJmbG93
UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KGZsb3dUaHJlYWRQb3J0aW9u
LCBpLCBjb2xDb3VudCwgY29sR2FwKTsKKworICAgICAgICAvLyBJbiBvcmRlciB0byBjcmVhdGUg
YSBmcmFnbWVudCB3ZSBtdXN0IGludGVyc2VjdCB0aGUgcG9ydGlvbiBwYWludGVkIGJ5IHRoaXMg
Y29sdW1uLgorICAgICAgICBMYXlvdXRSZWN0IGNsaXBwZWRSZWN0KGxheWVyQm91bmRzSW5GbG93
VGhyZWFkKTsKKyAgICAgICAgY2xpcHBlZFJlY3QuaW50ZXJzZWN0KGZsb3dUaHJlYWRPdmVyZmxv
d1BvcnRpb24pOworICAgICAgICBpZiAoY2xpcHBlZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gaW50ZXJz
ZWN0IHRoZSBkaXJ0eSByZWN0LiBXZSBoYXZlIHRvIGFwcGx5IGEgdHJhbnNsYXRpb24gYW5kIHNo
aWZ0IGJhc2VkIG9mZgorICAgICAgICAvLyBvdXIgY29sdW1uIGluZGV4LgorICAgICAgICBMYXlv
dXRQb2ludCB0cmFuc2xhdGlvbk9mZnNldDsKKyAgICAgICAgTGF5b3V0VW5pdCBpbmxpbmVPZmZz
ZXQgPSBpICogKGNvbExvZ2ljYWxXaWR0aCArIGNvbEdhcCk7CisgICAgICAgIGlmICghc3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAgICAgaW5saW5lT2Zmc2V0ID0g
LWlubGluZU9mZnNldDsKKyAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQuc2V0WChpbmxpbmVPZmZz
ZXQpOworICAgICAgICBMYXlvdXRVbml0IGJsb2NrT2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IC1mbG93VGhyZWFkUG9ydGlvbi55KCkgOiAtZmxvd1RocmVhZFBvcnRpb24ueCgp
OworICAgICAgICBpZiAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoc3R5bGUoKS0+d3JpdGlu
Z01vZGUoKSkpCisgICAgICAgICAgICBibG9ja09mZnNldCA9IC1ibG9ja09mZnNldDsKKyAgICAg
ICAgdHJhbnNsYXRpb25PZmZzZXQuc2V0WShibG9ja09mZnNldCk7CisgICAgICAgIGlmICghaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHRyYW5zbGF0aW9uT2Zmc2V0ID0g
dHJhbnNsYXRpb25PZmZzZXQudHJhbnNwb3NlZFBvaW50KCk7CisgICAgICAgIC8vIEZJWE1FOiBU
aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gaW5jbHVkZSB0aGUgbXVsdGljb2x1bW4gc2V0J3MgY29u
dGVudCBvZmZzZXQgd2l0aGluIHRoZQorICAgICAgICAvLyBtdWx0aWNvbHVtbiBibG9jayBhcyB3
ZWxsLiBUaGlzIHdvbid0IGJlIGFuIGlzc3VlIHVudGlsIHdlIHN0YXJ0IGNyZWF0aW5nIG11bHRp
cGxlIG11bHRpY29sdW1uIHNldHMuCisKKyAgICAgICAgLy8gU2hpZnQgdGhlIGRpcnR5IHJlY3Qg
dG8gYmUgaW4gZmxvdyB0aHJlYWQgY29vcmRpbmF0ZXMgd2l0aCB0aGlzIHRyYW5zbGF0aW9uIGFw
cGxpZWQuCisgICAgICAgIExheW91dFJlY3QgdHJhbnNsYXRlZERpcnR5UmVjdChkaXJ0eVJlY3RJ
bkZsb3dUaHJlYWQpOworICAgICAgICB0cmFuc2xhdGVkRGlydHlSZWN0Lm1vdmVCeSgtdHJhbnNs
YXRpb25PZmZzZXQpOworICAgICAgICAKKyAgICAgICAgLy8gU2VlIGlmIHdlIGludGVyc2VjdCB0
aGUgZGlydHkgcmVjdC4KKyAgICAgICAgY2xpcHBlZFJlY3QgPSBsYXllckJvdW5kc0luRmxvd1Ro
cmVhZDsKKyAgICAgICAgY2xpcHBlZFJlY3QuaW50ZXJzZWN0KHRyYW5zbGF0ZWREaXJ0eVJlY3Qp
OworICAgICAgICBpZiAoY2xpcHBlZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICAvLyBTb21ldGhpbmcgZG9lcyBuZWVkIHRvIHBhaW50IGlu
IHRoaXMgY29sdW1uLiBNYWtlIGEgZnJhZ21lbnQgbm93IGFuZCBzdXBwbHkgdGhlIHBoeXNpY2Fs
IHRyYW5zbGF0aW9uCisgICAgICAgIC8vIG9mZnNldCBhbmQgdGhlIGNsaXAgcmVjdCBmb3IgdGhl
IGNvbHVtbiB3aXRoIHRoYXQgb2Zmc2V0IGFwcGxpZWQuCisgICAgICAgIExheWVyRnJhZ21lbnQg
ZnJhZ21lbnQ7CisgICAgICAgIGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgPSB0cmFuc2xhdGlv
bk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExheW91dFJlY3QgZmxpcHBlZEZsb3dUaHJlYWRP
dmVyZmxvd1BvcnRpb24oZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbik7CisgICAgICAgIGZsaXBG
b3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbik7CisgICAgICAg
IGZyYWdtZW50LnBhZ2luYXRpb25DbGlwID0gZmxpcHBlZEZsb3dUaHJlYWRPdmVyZmxvd1BvcnRp
b247CisgICAgICAgIGZyYWdtZW50cy5hcHBlbmQoZnJhZ21lbnQpOworICAgIH0KK30KKwogY29u
c3QgY2hhciogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnJlbmRlck5hbWUoKSBjb25zdAogeyAgICAK
ICAgICByZXR1cm4gIlJlbmRlck11bHRpQ29sdW1uU2V0IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCShyZXZpc2lvbiAxNDQwMDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQg
bG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29uc3QgT1ZFUlJJREU7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbFdpZHRo
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jb21wdXRlZENvbHVtbldpZHRoOyB9CiAgICAg
dmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9jb21wdXRlZENvbHVtbkhlaWdodDsgfQpAQCAtMTExLDEwICsxMTAsMTEgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludEZsb3dUaHJlYWRDb250ZW50KGNv
bnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGltbWVkaWF0ZSkgY29uc3QgT1ZFUlJJ
REU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXll
ckZyYWdtZW50PiYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCkgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdDsKICAgICAKICAgICB2b2lkIHBhaW50Q29sdW1uUnVsZXMoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKLSAgICB2b2lkIHBhaW50
Q29sdW1uQ29udGVudHMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KTsKIAogICAgIExheW91dFVuaXQgY29sdW1uR2FwKCkgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBj
b2x1bW5SZWN0QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzE3
LDcgKzIzMTcsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6Y29udGFpbmVyKGNvCiAj
ZW5kaWYKICAgICAgICAgICAgIC8vIFRoZSByZW5kZXIgZmxvdyB0aHJlYWQgaXMgdGhlIHRvcCBt
b3N0IGNvbnRhaW5pbmcgYmxvY2sKICAgICAgICAgICAgIC8vIGZvciB0aGUgZml4ZWQgcG9zaXRp
b25lZCBlbGVtZW50cy4KLSAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkK
KyAgICAgICAgICAgIGlmIChvLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgaWYgKHJlcGFpbnRDb250YWluZXJTa2lw
cGVkICYmIG8gPT0gcmVwYWludENvbnRhaW5lcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzgxLDcgKzM4MSw4IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck5hbWVkRmxvd1RocmVh
ZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzSW5GbG93UmVu
ZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0luRmxv
d1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBpc1JlbmRlckZsb3dUaHJlYWQoKSAm
JiAhaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCk7IH0KKyAgICBib29sIGlzT3V0T2ZGbG93UmVuZGVy
Rmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGlzUmVuZGVyRmxvd1RocmVhZCgpICYmIGlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNdWx0aUNv
bHVtbkJsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNS
ZW5kZXJNdWx0aUNvbHVtblNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC03MzIsNyAr
NzMzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgICAgICAgICAgfHwgaXNT
VkdGb3JlaWduT2JqZWN0KCkKICNlbmRpZgotICAgICAgICAgICAgICAgIHx8IGlzUmVuZGVyRmxv
d1RocmVhZCgpOworICAgICAgICAgICAgICAgIHx8IGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVh
ZCgpOwogICAgIH0KIAogICAgIC8vIENvbnZlcnQgdGhlIGdpdmVuIGxvY2FsIHBvaW50IHRvIGFi
c29sdXRlIGNvb3JkaW5hdGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitzdHJ1Y3QgTGF5ZXJGcmFnbWVudDsKIGNsYXNzIFJlbmRlckJveDsKIGNs
YXNzIFJlbmRlckJveFJlZ2lvbkluZm87CiBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwpAQCAtMTI3
LDYgKzEyOCw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludEZsb3dU
aHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGltbWVkaWF0
ZSkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3Rv
cjxMYXllckZyYWdtZW50PiYsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBMYXlvdXRSZWN0Jikg
eyB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgp
OwogICAgIHZvaWQgcmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190443</attachid>
            <date>2013-02-26 22:14:32 -0800</date>
            <delta_ts>2013-02-26 22:18:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>100334</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDE0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NyBAQAorMjAxMy0wMi0yNiAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gUmV3
cml0ZSB0aGUgcGFpbnRpbmcvc3RhY2tpbmcgbW9kZWwgdG8gYmUgc3BlYyBjb21wbGlhbnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA2MjQuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbXBsZW1lbnRzIGEgbmV3IHBhaW50aW5nIGFuZCBoaXQgdGVzdGluZyBtb2RlbCBmb3IgY29s
dW1ucyB0aGF0IGlzCisgICAgICAgIHNwZWMtY29tcGxpYW50IHdpdGggU2VjdGlvbiAzLjUgb2Yg
dGhlIG11bHRpY29sdW1uIHNwZWNpZmljYXRpb24sIHdoaWNoIHN0YXRlczoKKyAgICAgICAgCisg
ICAgICAgICJBbGwgY29sdW1uIGJveGVzIGluIGEgbXVsdGktY29sdW1uIGVsZW1lbnQgYXJlIGlu
IHRoZSBzYW1lIHN0YWNraW5nIGNvbnRleHQgYW5kCisgICAgICAgIHRoZSBkcmF3aW5nIG9yZGVy
IG9mIHRoZWlyIGNvbnRlbnRzIGlzIGFzIHNwZWNpZmllZCBpbiBDU1MgMi4xLiBDb2x1bW4gYm94
ZXMgZG8KKyAgICAgICAgbm90IGVzdGFibGlzaCBuZXcgc3RhY2tpbmcgY29udGV4dHMuIgorICAg
ICAgICAKKyAgICAgICAgV2hhdCB0aGlzIHN0YXRlbWVudCBtZWFucyBpcyB0aGF0IHlvdSBjYW5u
b3QgcGFpbnQgYSBsYXllciBhbmQgYWxsIGl0cyBzdGFja2luZworICAgICAgICBjb250ZXh0IGRl
c2NlbmRhbnRzIGluIGEgc3RyaXAgaW4gZWFjaCBjb2x1bW4sIHNpbmNlIHNvbWUgb2YgdGhvc2Ug
ZGVzY2VuZGFudHMKKyAgICAgICAgbWlnaHQgYWN0dWFsbHkgImJyZWFrIG91dCIgb2YgdGhlIHBh
Z2luYXRpb24gKGxpa2UgZml4ZWQgcG9zaXRpb25lZCBkZXNjZW5kYW50cykKKyAgICAgICAgYW5k
IG92ZXJsYXAgbXVsdGlwbGUgY29sdW1ucy4gSW4gYWRkaXRpb24gY2xpcHMgbWF5IGFwcGx5IGFj
cm9zcyBwYWdpbmF0aW9uCisgICAgICAgIGJvdW5kYXJpZXMsIGFuZCBhbnkgb3ZlcmxhcCBjYXVz
ZWQgYnkgb3BhY2l0eSBoYXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZAorICAgICAgICB0cmVh
dCB0aGUgcGFnaW5hdGVkIGFuZCB1bnBhZ2luYXRlZCBjb21wb25lbnRzIHRvZ2V0aGVyIGFzIGEg
c2luZ2xlIHVuaXQuCisgICAgICAgIAorICAgICAgICBUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9i
bGVtIGlzIHRvIGludHJvZHVjZSB0aGUgY29uY2VwdCBvZiBhIExheWVyRnJhZ21lbnQuIE5vdwor
ICAgICAgICBhbGwgbGF5ZXJzIHdoZW4gcGFpbnRpbmcgb3IgaGl0IHRlc3RpbmcgY29tcHV0ZSBh
IGZyYWdtZW50IGxpc3QsIGFuZCB0aGF0IGxpc3QKKyAgICAgICAgaXMgdGhlbiB3YWxrZWQgaW4g
b3JkZXIgdG8gZG8gcGFpbnRpbmcgYW5kIGhpdCB0ZXN0aW5nIG9mIGxheWVycy4gSW4gdGhlIHNp
bXBsZQorICAgICAgICB1bnBhZ2luYXRlZCBjYXNlLCBhIGxheWVyIGhhcyBvbmUgTGF5ZXJGcmFn
bWVudCwgYnV0IGluIHRoZSBjYXNlIG9mIGNvbHVtbnMgdGhlCisgICAgICAgIGxheWVyIG1heSBi
ZSBicm9rZW4gdXAgaW50byBtdWx0aXBsZSBmcmFnbWVudHMgcmVwcmVzZW50aW5nIGJveGVzIGlu
IHNlcGFyYXRlCisgICAgICAgIGNvbHVtbnMuCisgICAgICAgIAorICAgICAgICBNdWNoIG9mIHRo
aXMgcGF0Y2ggY29uc2lzdHMgb2YgcmVmYWN0b3JpbmcgYWxsIG9mIHRoZSBwYWludGluZyBhbmQg
aGl0IHRlc3RpbmcKKyAgICAgICAgY29kZSB0byBvcGVyYXRlIG9uIHRoZXNlIGZyYWdtZW50cy4K
KworICAgICAgICBUZXN0OiBmYXN0L211bHRpY29sL21peGVkLXBvc2l0aW9uaW5nLXN0YWNraW5n
LW9yZGVyLmh0bWwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb2xsZWN0TGF5ZXJGcmFnbWVu
dHMpOgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIFJlbmRlckxheWVyIGNv
ZGUgdG8gZmV0Y2ggdGhlIGxheWVyIGZyYWdtZW50cyBmcm9tCisgICAgICAgIHRoZSByZWdpb25z
IG9mIGEgZmxvdyB0aHJlYWQuIFRoZSBmbG93IHRocmVhZCBqdXN0IHR1cm5zIGFyb3VuZCBhbmQg
Y2FsbHMgaW50bworICAgICAgICBlYWNoIG9mIGl0cyByZWdpb25zIG9uZSBieSBvbmUgdG8gZ2V0
IHRoZSBmcmFnbWVudHMgZnJvbSBlYWNoIHJlZ2lvbi4KKworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRzQm91bmRpbmdCb3gpOgorICAgICAgICBBIG5ldyBmdW5j
dGlvbiB0aGF0IGNvbGxlY3RzIExheWVyRnJhZ21lbnRzIGFuZCB0aGVuIGRldGVybWluZXMgdGhl
IGJvdW5kaW5nCisgICAgICAgIGJveCB0aGF0IGVuY2xvc2VzIGFsbCBvZiB0aGUgZnJhZ21lbnRz
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaDoKKyAgICAgICAgRGVj
bGFyYXRpb25zIG9mIHRoZSBuZXcgbWV0aG9kcyBmb3Igb2J0YWluaW5nIGxheWVyIGZyYWdtZW50
cyBhbmQgYm91bmRpbmcKKyAgICAgICAgYm94IGluZm9ybWF0aW9uIGZvciBmcmFnbWVudHMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlUGFnaW5hdGlvbik6CisgICAgICAgIFJlbmRlckxheWVycyBub3cgdHJhY2sgYW4gZW5j
bG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuIElmIHRoaXMgaXMgc2V0LCB0aGVuIHRoZSBsYXllciBr
bm93cyBpdAorICAgICAgICBuZWVkcyB0byBjaGVjayB3aXRoIHRoZSBlbmNsb3NpbmcgcGFnaW5h
dGlvbiBsYXllcidzIGZsb3cgdGhyZWFkIHJlbmRlcmVyIHRvCisgICAgICAgIG9idGFpbiBsYXll
ciBmcmFnbWVudHMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6dHJhbnNwYXJlbmN5Q2xp
cEJveCk6CisgICAgICAgIE1vZGlmaWVkIHRvIG9idGFpbiBhIGZyYWdtZW50cyBib3VuZGluZyBi
b3ggc28gdGhhdCBvcGFjaXR5IGNhbiBvcGVyYXRlIGNvcnJlY3RseSBvbgorICAgICAgICBjb2x1
bW4gYm94ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OmFjY3VtdWxhdGVPZmZzZXRUb3dhcmRzQW5j
ZXN0b3IpOgorICAgICAgICBUaGlzIG1ldGhvZCBoYXMgYmVlbiBwYXRjaGVkIHRvIGFsbG93IGZv
ciBmaXhlZCBwb3NpdGlvbmVkIG9iamVjdHMgdG8gZXNjYXBlCisgICAgICAgIGluLWZsb3cgUmVu
ZGVyRmxvd1RocmVhZHMuIE91ciBpbi1mbG93IFJlbmRlckZsb3dUaHJlYWRzIGJlaGF2ZSBkaWZm
ZXJlbnRseSBmcm9tCisgICAgICAgIENTUyBSZWdpb25zIGZsb3cgdGhyZWFkcyBpbiB0aGF0IHRo
ZXkgYXJlbid0IG5lY2Vzc3NhcmlseSBhY3RpbmcgYXMgdGhlIGNvbnRhaW5pbmcKKyAgICAgICAg
YmxvY2sgZm9yIGFsbCBvZiB0aGVpciBkZXNjZW5kYW50cy4gQ29udGVudCBpcyBhbGxvd2VkIHRv
ICJlc2NhcGUiIGZyb20gdGhlIGZsb3cKKyAgICAgICAgdGhyZWFkLgorCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyk6CisgICAgICAgIEEgbmV3IG1ldGhv
ZCB0aGF0IGNvbGxlY3RzIGZyYWdtZW50cyBmcm9tIHRoZSBmbG93IHRocmVhZCBhbmQgc2V0cyB1
cCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgY2xpcHMgYW5kIHRyYW5zbGF0aW9ucyBvbiBlYWNo
IGZyYWdtZW50LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50VHJhbnNmb3JtZWRMYXllckludG9G
cmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50QmFja2dyb3Vu
ZEZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRGb3Jl
Z3JvdW5kRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAgICBS
ZWZhY3RvcmluZyBvZiBwYWludGluZyB0byBicmVhayBhbGwgaW5kaXZpZHVhbCBwYWludGluZyBz
dGVwcyBvdXQgaW50byBtZXRob2RzIHRoYXQgd2FsayBvdmVyCisgICAgICAgIGZyYWdtZW50IGJv
eGVzLiBUaGlzIGFjdHVhbGx5IGhhZCB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFraW5nIHRoZSBtYWlu
IHBhaW50aW5nIGZ1bmN0aW9uLAorICAgICAgICBwYWludExheWVyQ29udGVudHMsIG11Y2ggY2xl
YW5lciBhbmQgZWFzaWVyIHRvIHJlYWQuIDopCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNy
ZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdENv
bnRlbnRzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0UmVzaXplckluRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KToKKyAgICAgICAgUmVmYWN0b3Jpbmcgb2YgaGl0IHRl
c3RpbmcgdG8gYnJlYWsgYWxsIGluZGl2aWR1YWwgaGl0IHRlc3Rpbmcgc3RlcHMgb3V0IGludG8g
bWV0aG9kcyB0aGF0IHdhbGsgb3ZlcgorICAgICAgICBmcmFnbWVudCBib3hlcy4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmFja2dyb3VuZENsaXBSZWN0KToKKyAg
ICAgICAgTW9kaWZpZWQgdG8gYXZvaWQgdXNpbmcgdGhlIGNsaXAgcmVjdHMgY2FjaGUgd2hlbiBj
cm9zc2luZyBpbnRvIGRpZmZlcmVudCBwYWdpbmF0aW9uIGNvbnRleHRzLAorICAgICAgICBlLmcu
LCBmcm9tIHVucGFnaW5hdGVkIHRvIHBhZ2luYXRlZC4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KToKKyAgICAgICAgTW9kaWZpZWQgYm91bmRpbmdC
b3ggdG8gd29yayB3aXRoIGZyYWdtZW50cy4gQSBuZXcgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRl
IHdoZXRoZXIgb3Igbm90CisgICAgICAgIHRoZSBib3VuZHMgb2YgZnJhZ21lbnRzIG9yIHRoZSBv
cmlnaW5hbCB1bnNwbGl0IGJveCBhcmUgYmVpbmcgY29tcHV0ZWQuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbGxlY3RMYXllcnMpOgorICAgICAgICBGaXggbGF5
ZXIgY29sbGVjdGlvbiBzbyB0aGF0IGluLWZsb3cgUmVuZGVyRmxvd1RocmVhZHMgY2FuIHN0aWxs
IGJlIGNvbGxlY3RlZCwgc2luY2UgaW4tZmxvdworICAgICAgICBSZW5kZXJGbG93VGhyZWFkcyBk
byBub3QgZXN0YWJsaXNoIHN0YWNraW5nIGNvbnRleHRzLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwUmVjdDo6bW92ZUJ5KToKKyAg
ICAgICAgQWRkZWQgYSBtb3ZlQnkgbWV0aG9kIHRoYXQganVzdCB3cmFwIHRoZSBjb3JyZXNwb25k
aW5nIExheW91dFJlY3QgbWV0aG9kLgorCisgICAgICAgIChMYXllckZyYWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRnJhZ21lbnQ6OkxheWVyRnJhZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJGcmFnbWVudDo6c2V0UmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJG
cmFnbWVudDo6bW92ZUJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRnJhZ21lbnQ6OmludGVy
c2VjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKToKKyAgICAgICAgVGhlIG5ldyBMYXllckZyYWdtZW50IHN0cnVjdC4gSG9sZHMgY2xp
cHMgYW5kIHRyYW5zbGF0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGZyYWdtZW50IGJveC4KKwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVh
ZCk6CisgICAgICAgIEhlbHBlciBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIHRoZSByZW5kZXJl
ciBpcyBhbiBvdXQtb2YtZmxvdyBSZW5kZXJGbG93VGhyZWFkLgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
TXVsdGlDb2x1bW5GbG93VGhyZWFkU3R5bGUpOgorICAgICAgICBDaGFuZ2UgdGhlIGZsb3cgdGhy
ZWFkIHN0eWxlIHRvIG5vIGxvbmdlciBlc3RhYmxpc2ggYSBzdGFja2luZyBjb250ZXh0LgorICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmxheW91dEJs
b2NrKToKKyAgICAgICAgUGF0Y2hlZCB0byBtb3ZlIHRoZSBmbG93IHRocmVhZCB0byBhIHBvc2l0
aW9uIHRoYXQgYWxsb3dzIGl0IHRvIGJlIHVudHJhbnNsYXRlZCBpbiB0aGUKKyAgICAgICAgaW5p
dGlhbCBjb2x1bW4uCisKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmg6CisgICAgICAgIChSZW5kZXJNdWx0aUNvbHVtbkJsb2Nr
KToKKyAgICAgICAgbGF5b3V0QmxvY2sgaXMgc3ViY2xhc3NlZCB0byB0d2VhayB0aGUgZmxvdyB0
aHJlYWQncyBwb3NpdGlvbi4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQuaDoKKyAgICAgICAgKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCk6Cisg
ICAgICAgIFRoZSBmbG93IHRocmVhZCBmb3IgbXVsdGktY29sdW1uIGJsb2NrcyBpbXBsZW1lbnRz
IGNvbGxlY3RMYXllckZyYWdtZW50cyB0byBoYW5kIGJhY2sgTGF5ZXJGcmFnbWVudAorICAgICAg
ICBpbmZvcm1hdGlvbiBiYXNlZCBvZmYgaXRzIFJlbmRlck11bHRpQ29sdW1uU2V0cy4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRPYmplY3QpOgorICAgICAgICBDaGFuZ2Vk
IHRvIG5vIGxvbmdlciBwYWludCBjb2x1bW4gY29udGVudHMsIHNpbmNlIHRoZSBsYXllciBjb2Rl
IGlzIGp1c3QgZG9pbmcgdGhhdCBub3cuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRp
Q29sdW1uU2V0Ojpjb2xsZWN0TGF5ZXJGcmFnbWVudHMpOgorICAgICAgICBUaGUgbWV0aG9kIHRo
YXQgZmlndXJlcyBvdXQgd2hhdCBjb2x1bW5zIGFyZSBpbnRlcnNlY3RlZCBieSBhIGxheWVyIGFu
ZCBoYW5kcyBiYWNrCisgICAgICAgIGluaXRpYWwgZnJhZ21lbnQgaW5mb3JtYXRpb24uCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaDoKKyAgICAgICAgKFJlbmRl
ck11bHRpQ29sdW1uU2V0KToKKyAgICAgICAgRGVjbGFyYXRpb24gb2YgY29sbGVjdExheWVyRnJh
Z21lbnRzLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29udGFpbmVyKToKKyAgICAgICAgUGF0
Y2ggY29udGFpbmVyKCkgdG8gYWxsb3cgZml4ZWQgcG9zaXRpb25lZCBvYmplY3RzIHRvIGVzY2Fw
ZSBpbi1mbG93IFJlbmRlckZsb3dUaHJlYWRzLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzSW5G
bG93UmVuZGVyRmxvd1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omlz
T3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCk6CisgICAgICAgIE1ldGhvZHMgZm9yIGRpc3Rpbmd1
aXNoaW5nIGJldHdlZW4gaW4tZmxvdyBhbmQgb3V0LW9mLWZsb3cgUmVuZGVyRmxvd1RocmVhZHMu
CisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2FuQ29udGFpbkZpeGVkUG9zaXRp
b25PYmplY3RzKToKKyAgICAgICAgUGF0Y2ggY2FuQ29udGFpbkZpeGVkUG9zaXRpb25PYmplY3Rz
KCkgdG8gYWxsb3cgZml4ZWQgcG9zaXRpb25lZCBvYmplY3RzIHRvIGVzY2FwZQorICAgICAgICBp
bi1mbG93IFJlbmRlckZsb3dUaHJlYWRzLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbGxlY3RM
YXllckZyYWdtZW50cyk6CisgICAgICAgIChSZW5kZXJSZWdpb24pOgorICAgICAgICBUaGUgdmly
dHVhbCBmdW5jdGlvbnMgb24gUmVnaW9uIGZvciBmcmFnbWVudCBjb2xsZWN0aW9uLgorCiAyMDEz
LTAyLTI2ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
VjhdIFJlbW92ZSBFdmVudDo6ZGF0YVRyYW5zZmVyQXR0ckdldHRlckN1c3RvbSgpIGFuZCBFdmVu
dDo6dmFsdWVBdHRyU2V0dGVyQ3VzdG9tKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTU5LDYgKzk1OSwzNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dp
CiAgICAgICAgIHZpZXcoKS0+Zmxvd1RocmVhZENvbnRyb2xsZXIoKS0+ZGVjcmVtZW50Rmxvd1Ro
cmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCk7CiB9CiAKK3ZvaWQgUmVuZGVyRmxv
d1RocmVhZDo6Y29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYgbGF5
ZXJGcmFnbWVudHMsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVk
KTsKKyAgICAKKyAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOworICAgICAgICByZWdp
b24tPmNvbGxlY3RMYXllckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0Jv
eCwgZGlydHlSZWN0KTsKKyAgICB9Cit9CisKK0xheW91dFJlY3QgUmVuZGVyRmxvd1RocmVhZDo6
ZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCkK
K3sKKyAgICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVkKTsKKyAgICAKKyAgICBMYXlvdXRS
ZWN0IHJlc3VsdDsKKyAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsr
aXRlcikgeworICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOworICAgICAgICBM
YXllckZyYWdtZW50cyBmcmFnbWVudHM7CisgICAgICAgIHJlZ2lvbi0+Y29sbGVjdExheWVyRnJh
Z21lbnRzKGZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0JveCwgUGFpbnRJbmZvOjppbmZpbml0ZVJl
Y3QoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0
KGkpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBmcmFnbWVudFJlY3QobGF5ZXJCb3VuZGluZ0Jv
eCk7CisgICAgICAgICAgICBmcmFnbWVudFJlY3QuaW50ZXJzZWN0KGZyYWdtZW50LnBhZ2luYXRp
b25DbGlwKTsKKyAgICAgICAgICAgIGZyYWdtZW50UmVjdC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5h
dGlvbk9mZnNldCk7CisgICAgICAgICAgICByZXN1bHQudW5pdGUoZnJhZ21lbnRSZWN0KTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBDdXJyZW50UmVu
ZGVyRmxvd1RocmVhZE1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5l
cihSZW5kZXJGbG93VGhyZWFkKiByZW5kZXJGbG93VGhyZWFkKQogICAgIDogbV9yZW5kZXJGbG93
VGhyZWFkKHJlbmRlckZsb3dUaHJlYWQpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmgJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgTGF5ZXJGcmFnbWVudDsK
IGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJlbmRl
clJlZ2lvbjsKQEAgLTE0Myw2ICsxNDQsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0F1dG9Mb2dp
Y2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCgpIGNvbnN0OwogI2VuZGlmCiAKKyAgICB2
b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhWZWN0b3I8TGF5ZXJGcmFnbWVudD4mLCBjb25zdCBM
YXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3Qp
OworICAgIExheW91dFJlY3QgZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYg
bGF5ZXJCb3VuZGluZ0JveCk7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBA
IFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVj
dGlvbigwKQogICAgICwgbV9zY3JvbGxDb3JuZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAg
ICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09u
bHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVy
ID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOwpAQCAtNDA1LDggKzQwNiwxMCBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBV
cGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQor
ICAgIGVsc2UgewogICAgICAgICBtX2lzUGFnaW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsKKyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxl
Q29udGVudCkgewogICAgICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygp
OwpAQCAtNDUwLDcgKzQ1Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVzZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRl
cmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0
ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQYWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9
IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQogICAgIApAQCAtOTIzLDI2ICs5MjYsMzEgQEAgYm9v
bCBSZW5kZXJMYXllcjo6dXNlUmVnaW9uQmFzZWRDb2x1bW5zKAogdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlUGFnaW5hdGlvbigpCiB7CiAgICAgbV9pc1BhZ2luYXRlZCA9IGZhbHNlOworICAgIG1f
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsKKwogICAgIGlmIChpc0NvbXBvc2l0ZWQoKSB8
fCAhcGFyZW50KCkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFdlIHdpbGwgaGF2ZSB0byBk
ZWFsIHdpdGggcGFnaW5hdGVkIGNvbXBvc2l0aW5nIGxheWVycyBzb21lZGF5LgogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHRoZSBSZW5kZXJWaWV3IGNhbid0IGJlIHBhZ2luYXRl
ZC4gIEV2ZW50dWFsbHkgcHJpbnRpbmcgd2lsbCBtb3ZlIHRvIGEgbW9kZWwgd2hlcmUgaXQgaXMg
dGhvdWdoLgotICAgIAorCiAgICAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBw
YWdpbmF0ZWQgYm9vbGVhbnMgZm9yIHRoZSBvbGQgY29sdW1uIGNvZGUgYW5kIHRoZSBuZXcgY29s
dW1uIGNvZGUKICAgICAvLyBpcyB0aGF0IGVhY2ggcGFnaW5hdGVkIGxheWVyIGhhcyB0byBwYWlu
dCBvbiBpdHMgb3duIHdpdGggdGhlIG5ldyBjb2RlLiBUaGVyZSBpcyBubwogICAgIC8vIHJlY3Vy
cmluZyBpbnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVk
IGJpdHMgZm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAv
LyAicm9vdHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMu
IEluc3RlYWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAg
ICAgLy8gZ2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNl
bGYgdXAgd2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIg
ZGVzY2VuZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4g
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBz
aW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVy
IGVhc2lseS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5z
KCk7CiAgICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVy
Rmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBt
X2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7Ci0gICAgICAgIGlmIChuZXdDb2x1bW5z
VXNlZCkKLSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQo
KTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobmV3Q29sdW1uc1VzZWQpIHsKKyAgICAgICAg
ICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpOworICAgICAgICAgICAgaWYgKG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVy
ICYmIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyLT5oYXNUcmFuc2Zvcm0oKSkKKyAgICAgICAg
ICAgICAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7CisgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IHBhcmVudCgpLT5yZW5kZXJlcigpLT5oYXNDb2x1
bW5zKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05NTYsNyArOTY0LDkgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlvbigpCiAgICAgICAgICAgICAgY29udGFpbmluZ0Js
b2NrICYmIGNvbnRhaW5pbmdCbG9jayAhPSB2aWV3OwogICAgICAgICAgICAgIGNvbnRhaW5pbmdC
bG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgICAg
IGlmIChjb250YWluaW5nQmxvY2stPmhhc0xheWVyKCkpIHsKLSAgICAgICAgICAgICAgICBtX2lz
UGFnaW5hdGVkID0gY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5pc1BhZ2luYXRlZCgpOworICAg
ICAgICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gY29udGFpbmluZ0Jsb2Nr
LT5sYXllcigpLT5lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgJiYgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXItPmhhc1RyYW5zZm9ybSgpKQorICAgICAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IDA7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0xNTgyLDcgKzE1OTIsNyBAQCBzdGF0aWMgTGF5b3V0UmVjdCB0cmFuc3Bh
cmVuY3lDbGlwQm94KGNvCiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGVsdGEueCgpLCBk
ZWx0YS55KCkpOwogICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiAqbGF5ZXItPnRyYW5z
Zm9ybSgpOwogCi0gICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBsYXllci0+Ym91bmRpbmdC
b3gobGF5ZXIpOworICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gbGF5ZXItPmJvdW5kaW5n
Qm94KGxheWVyLCBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlcyk7CiAgICAgICAgIGV4cGFu
ZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9uKGNsaXBSZWN0LCBsYXllciwgbGF5
ZXIsIHBhaW50QmVoYXZpb3IpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAgICAgbGF5
ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmZpbHRlck91dHNldHMoKS5leHBhbmRSZWN0KGNsaXBS
ZWN0KTsKQEAgLTE1OTAsNyArMTYwMCw3IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHRyYW5zcGFyZW5j
eUNsaXBCb3goY28KICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBSZWN0KTsK
ICAgICB9CiAgICAgCi0gICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGxheWVyLT5ib3VuZGluZ0Jv
eChyb290TGF5ZXIpOworICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBsYXllci0+Ym91bmRpbmdC
b3gocm9vdExheWVyLCBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlcyk7CiAgICAgZXhwYW5k
Q2xpcFJlY3RGb3JEZXNjZW5kYW50c0FuZFJlZmxlY3Rpb24oY2xpcFJlY3QsIGxheWVyLCByb290
TGF5ZXIsIHBhaW50QmVoYXZpb3IpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICBsYXll
ci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZmlsdGVyT3V0c2V0cygpLmV4cGFuZFJlY3QoY2xpcFJl
Y3QpOwpAQCAtMTgxNCwxMiArMTgyNCwyMCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlckxh
eWVyKiBhY2N1bXVsCiAgICAgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVuZGVyZXIg
PSBsYXllci0+cmVuZGVyZXIoKTsKICAgICBFUG9zaXRpb24gcG9zaXRpb24gPSByZW5kZXJlci0+
c3R5bGUoKS0+cG9zaXRpb24oKTsKIAorICAgIC8vIEZJWE1FOiBTcGVjaWFsIGNhc2luZyBSZW5k
ZXJGbG93VGhyZWFkIHNvIG11Y2ggZm9yIGZpeGVkIHBvc2l0aW9uaW5nIGhlcmUgaXMgbm90IGdy
ZWF0LgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZpeGVkRmxvd1RocmVhZENvbnRhaW5lciA9IDA7
CisgICAgaWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgcmVuZGVyZXItPmluUmVuZGVy
Rmxvd1RocmVhZCgpKSB7CisgICAgICAgIGZpeGVkRmxvd1RocmVhZENvbnRhaW5lciA9IHJlbmRl
cmVyLT5lbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCk7CisgICAgICAgIGlmICghZml4ZWRGbG93
VGhyZWFkQ29udGFpbmVyLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIGZp
eGVkRmxvd1RocmVhZENvbnRhaW5lciA9IDA7CisgICAgfQorCiAgICAgLy8gRklYTUU6IFBvc2l0
aW9uaW5nIG9mIG91dC1vZi1mbG93KGZpeGVkLCBhYnNvbHV0ZSkgZWxlbWVudHMgY29sbGVjdGVk
IGluIGEgUmVuZGVyRmxvd1RocmVhZAogICAgIC8vIG1heSBuZWVkIHRvIGJlIHJldmlzaXRlZCBp
biBhIGZ1dHVyZSBwYXRjaC4KICAgICAvLyBJZiB0aGUgZml4ZWQgcmVuZGVyZXIgaXMgaW5zaWRl
IGEgUmVuZGVyRmxvd1RocmVhZCwgd2Ugc2hvdWxkIG5vdCBjb21wdXRlIGxvY2F0aW9uIHVzaW5n
IGxvY2FsVG9BYnNvbHV0ZSwKICAgICAvLyBzaW5jZSBsb2NhbFRvQWJzb2x1dGUgbWFwcyB0aGUg
Y29vcmRpbmF0ZXMgZnJvbSBuYW1lZCBmbG93IHRvIHJlZ2lvbnMgY29vcmRpbmF0ZXMgYW5kIHJl
Z2lvbnMgY2FuIGJlCiAgICAgLy8gcG9zaXRpb25lZCBpbiBhIGNvbXBsZXRlbHkgZGlmZmVyZW50
IHBsYWNlIGluIHRoZSB2aWV3cG9ydCAoUmVuZGVyVmlldykuCi0gICAgaWYgKHBvc2l0aW9uID09
IEZpeGVkUG9zaXRpb24gJiYgIXJlbmRlcmVyLT5pblJlbmRlckZsb3dUaHJlYWQoKSAmJiAoIWFu
Y2VzdG9yTGF5ZXIgfHwgYW5jZXN0b3JMYXllciA9PSByZW5kZXJlci0+dmlldygpLT5sYXllcigp
KSkgeworICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYmICFmaXhlZEZsb3dUaHJl
YWRDb250YWluZXIgJiYgKCFhbmNlc3RvckxheWVyIHx8IGFuY2VzdG9yTGF5ZXIgPT0gcmVuZGVy
ZXItPnZpZXcoKS0+bGF5ZXIoKSkpIHsKICAgICAgICAgLy8gSWYgdGhlIGZpeGVkIGxheWVyJ3Mg
Y29udGFpbmVyIGlzIHRoZSByb290LCBqdXN0IGFkZCBpbiB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3
LiBXZSBjYW4gb2J0YWluIHRoaXMgYnkgY2FsbGluZwogICAgICAgICAvLyBsb2NhbFRvQWJzb2x1
dGUoKSBvbiB0aGUgUmVuZGVyVmlldy4KICAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSByZW5k
ZXJlci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgSXNGaXhlZCk7CkBAIC0xODMwLDcg
KzE4NDgsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlckxheWVyKiBhY2N1bXVsCiAgICAg
Ly8gRm9yIHRoZSBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGluc2lkZSBhIHJlbmRlciBmbG93
IHRocmVhZCwgd2Ugc2hvdWxkIGFsc28gc2tpcCB0aGUgY29kZSBwYXRoIGJlbG93CiAgICAgLy8g
T3RoZXJ3aXNlLCBmb3IgdGhlIGNhc2Ugb2YgYW5jZXN0b3JMYXllciA9PSByb290TGF5ZXIgYW5k
IGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudCBjaGlsZCBvZiBhIHRyYW5zZm9ybWVkCiAgICAgLy8g
ZWxlbWVudCBpbiByZW5kZXIgZmxvdyB0aHJlYWQsIHdlIHdpbGwgaGl0IHRoZSBmaXhlZCBwb3Np
dGlvbmVkIGNvbnRhaW5lciBiZWZvcmUgaGl0dGluZyB0aGUgYW5jZXN0b3IgbGF5ZXIuCi0gICAg
aWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgIXJlbmRlcmVyLT5pblJlbmRlckZsb3dU
aHJlYWQoKSkgeworICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYmICFmaXhlZEZs
b3dUaHJlYWRDb250YWluZXIpIHsKICAgICAgICAgLy8gRm9yIGEgZml4ZWQgbGF5ZXJzLCB3ZSBu
ZWVkIHRvIHdhbGsgdXAgdG8gdGhlIHJvb3QgdG8gc2VlIGlmIHRoZXJlJ3MgYSBmaXhlZCBwb3Np
dGlvbiBjb250YWluZXIKICAgICAgICAgLy8gKGUuZy4gYSB0cmFuc2Zvcm1lZCBsYXllcikuIEl0
J3MgYW4gZXJyb3IgdG8gY2FsbCBjb252ZXJ0VG9MYXllckNvb3JkcygpIGFjcm9zcyBhIGxheWVy
IHdpdGggYSB0cmFuc2Zvcm0sCiAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBhbHdheXMgZmluZCB0
aGUgYW5jZXN0b3IgYXQgb3IgYmVmb3JlIHdlIGZpbmQgdGhlIGZpeGVkIHBvc2l0aW9uIGNvbnRh
aW5lci4KQEAgLTE4ODMsNyArMTkwMSw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyTGF5
ZXIqIGFjY3VtdWwKIAogICAgICAgICAvLyBXZSBzaG91bGQgbm90IHJlYWNoIFJlbmRlclZpZXcg
bGF5ZXIgcGFzdCB0aGUgUmVuZGVyRmxvd1RocmVhZCBsYXllciBmb3IgYW55CiAgICAgICAgIC8v
IGNoaWxkcmVuIG9mIHRoZSBSZW5kZXJGbG93VGhyZWFkLgotICAgICAgICBpZiAocmVuZGVyZXIt
PmluUmVuZGVyRmxvd1RocmVhZCgpICYmICFyZW5kZXJlci0+aXNSZW5kZXJGbG93VGhyZWFkKCkp
CisgICAgICAgIGlmIChyZW5kZXJlci0+aW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgIWxheWVyLT5p
c091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgIEFTU0VSVChwYXJlbnRM
YXllciAhPSByZW5kZXJlci0+dmlldygpLT5sYXllcigpKTsKIAogICAgICAgICBpZiAoZm91bmRB
bmNlc3RvckZpcnN0KSB7CkBAIC0zNTA1LDcgKzM1MjMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2hvdWxkU3VwcHJlc3NQYWludGluCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0KIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykK
IHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0zNTU3LDYgKzM1NzQsMTEg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbgogICAgICAgICAgICAg
ICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKGNvbnRleHQsIHBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgcGFpbnRpbmdJbmZvLnBhaW50QmVoYXZp
b3IpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigp
KSB7CisgICAgICAgICAgICBwYWludFRyYW5zZm9ybWVkTGF5ZXJJbnRvRnJhZ21lbnRzKGNvbnRl
eHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2
ZSBiZWVuIGNhbGN1bGF0ZWQuCiAgICAgICAgIENsaXBSZWN0IGNsaXBSZWN0ID0gcGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0OwogICAgICAgICBpZiAocGFyZW50KCkpIHsKQEAgLTM1NjksMjUg
KzM1OTEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29uCiAgICAg
ICAgICAgICBwYXJlbnQoKS0+Y2xpcFRvUmVjdChwYWludGluZ0luZm8ucm9vdExheWVyLCBjb250
ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0KTsKICAgICAgICAgfQog
Ci0gICAgICAgIC8vIEFkanVzdCB0aGUgdHJhbnNmb3JtIHN1Y2ggdGhhdCB0aGUgcmVuZGVyZXIn
cyB1cHBlciBsZWZ0IGNvcm5lciB3aWxsIHBhaW50IGF0ICgwLDApIGluIHVzZXIgc3BhY2UuCi0g
ICAgICAgIC8vIFRoaXMgaW52b2x2ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBwb3NpdGlvbiBvZiB0
aGUgbGF5ZXIgaW4gb3VyIGN1cnJlbnQgY29vcmRpbmF0ZSBzcGFjZSwgYnV0IHByZXNlcnZpbmcK
LSAgICAgICAgLy8gdGhlIGFjY3VtdWxhdGVkIGVycm9yIGZvciBzdWItcGl4ZWwgbGF5b3V0Lgot
ICAgICAgICBMYXlvdXRQb2ludCBkZWx0YTsKLSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMo
cGFpbnRpbmdJbmZvLnJvb3RMYXllciwgZGVsdGEpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm0obGF5ZXJUcmFuc2Zvcm0pOwotICAgICAgICBJbnRQb2ludCByb3VuZGVk
RGVsdGEgPSByb3VuZGVkSW50UG9pbnQoZGVsdGEpOwotICAgICAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlUmlnaHQocm91bmRlZERlbHRhLngoKSwgcm91bmRlZERlbHRhLnkoKSk7Ci0gICAgICAgIExh
eW91dFNpemUgYWRqdXN0ZWRTdWJQaXhlbEFjY3VtdWxhdGlvbiA9IHBhaW50aW5nSW5mby5zdWJQ
aXhlbEFjY3VtdWxhdGlvbiArIChkZWx0YSAtIHJvdW5kZWREZWx0YSk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBBcHBseSB0aGUgdHJhbnNmb3JtLgotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotICAgICAgICAgICAg
Y29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpKTsKLQotICAg
ICAgICAgICAgLy8gTm93IGRvIGEgcGFpbnQgd2l0aCB0aGUgcm9vdCBsYXllciBzaGlmdGVkIHRv
IGJlIHVzLgotICAgICAgICAgICAgTGF5ZXJQYWludGluZ0luZm8gdHJhbnNmb3JtZWRQYWludGlu
Z0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3Qo
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KSksIHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
LCBhZGp1c3RlZFN1YlBpeGVsQWNjdW11bGF0aW9uLCBwYWludGluZ0luZm8ucGFpbnRpbmdSb290
LCBwYWludGluZ0luZm8ucmVnaW9uLCBwYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyk7
Ci0gICAgICAgICAgICBwYWludExheWVyQ29udGVudHNBbmRSZWZsZWN0aW9uKGNvbnRleHQsIHRy
YW5zZm9ybWVkUGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKLSAgICAgICAgfSAgICAgICAgCisg
ICAgICAgIHBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKGNvbnRleHQsIHBhaW50aW5nSW5m
bywgcGFpbnRGbGFncyk7CiAKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2xpcC4KICAgICAgICAg
aWYgKHBhcmVudCgpKQpAQCAtMzcxOCw3ICszNzIyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKEdyYQogCiAgICAgICAgICAgICAvLyBSZXdpcmUgdGhlIG9sZCBjb250
ZXh0IHRvIGEgbWVtb3J5IGJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4gY2FwdHVyZSB0aGUgY29udGVu
dHMgb2YgdGhlIGxheWVyLgogICAgICAgICAgICAgLy8gTk9URTogV2Ugc2F2ZWQgdGhlIG9sZCBj
b250ZXh0IGluIHRoZSAidHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0IiBsb2NhbCB2YXJpYWJsZSwg
dG8gYmUgYWJsZSB0byBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllcgotICAgICAgICAgICAgLy8g
b24gdGhlIG9yaWdpbmFsIGNvbnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRl
ckVmZmVjdCIgYWZ0ZXIgZWFjaCB0cmFuc3BhcmVueSBsYXllciBjYWxsLiBBbHNvLCBub3RlIHRo
YXQgCisgICAgICAgICAgICAvLyBvbiB0aGUgb3JpZ2luYWwgY29udGV4dCBhbmQgYXZvaWQgZHVw
bGljYXRpbmcgImJlZ2luRmlsdGVyRWZmZWN0IiBhZnRlciBlYWNoIHRyYW5zcGFyZW5jeSBsYXll
ciBjYWxsLiBBbHNvLCBub3RlIHRoYXQgCiAgICAgICAgICAgICAvLyBiZWdpblRyYW5zcGFyZW5j
eUxheWVycyB3aWxsIG9ubHkgY3JlYXRlIGEgc2luZ2xlIGxhenkgdHJhbnNwYXJlbmN5IGxheWVy
LCBldmVuIHRob3VnaCBpdCBpcyBjYWxsZWQgdHdpY2UgaW4gdGhpcyBtZXRob2QuCiAgICAgICAg
ICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5iZWdpbkZpbHRlckVmZmVjdChjb250ZXh0KTsK
IApAQCAtMzczMiwyOCArMzczNiwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29u
dGVudHMoR3JhCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKLQotICAg
IC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQgdXNlIG9ubHkgd2hlbiB3ZSBu
ZWVkIHRoZW0uCi0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKLSAgICBDbGlwUmVjdCBkYW1h
Z2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0OwotICAgIExheW91dFBvaW50IHBh
aW50T2Zmc2V0OwogCi0gICAgaWYgKHNob3VsZFBhaW50Q29udGVudCB8fCBzaG91bGRQYWludE91
dGxpbmUgfHwgaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7Ci0gICAgICAgIENsaXBSZWN0
c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJlZ2lvbiwgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1w
b3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMs
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVy
UGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92
ZXJmbG93Q2xpcCk7Ci0gICAgICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwg
Y2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgJm9mZnNldEZyb21Sb290KTsKLSAgICAgICAg
cGFpbnRPZmZzZXQgPSB0b1BvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hM
b2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pOworICAg
IGlmIChmaWx0ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSAmJiBoYXZlVHJhbnNw
YXJlbmN5KSB7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYSBmaWx0ZXIgYW5kIHRyYW5zcGFyZW5j
eSwgd2UgaGF2ZSB0byBlYWdlcmx5IHN0YXJ0IGEgdHJhbnNwYXJlbmN5IGxheWVyIGhlcmUsIHJh
dGhlciB0aGFuIHJpc2sgYSBjaGlsZCBsYXllciBsYXppbHkgc3RhcnRzIG9uZSB3aXRoIHRoZSB3
cm9uZyBjb250ZXh0LgorICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVu
Y3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKICAgICB9
CisjZW5kaWYKIAotICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBhaW50aW5nSW5mby5w
YWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0OwotICAgIGJvb2wgc2Vs
ZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhh
dmlvclNlbGVjdGlvbk9ubHk7Ci0gICAgCi0gICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9y
ID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKLSAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRM
YXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQotICAgICAgICBwYWludEJlaGF2aW9yIHw9
IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7Ci0gICAgZWxzZSBpZiAobG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5KQotICAgICAgICBw
YWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9ubHk7Ci0gICAgCiAg
ICAgLy8gSWYgdGhpcyBsYXllcidzIHJlbmRlcmVyIGlzIGEgY2hpbGQgb2YgdGhlIHBhaW50aW5n
Um9vdCwgd2UgcmVuZGVyIHVuY29uZGl0aW9uYWxseSwgd2hpY2gKICAgICAvLyBpcyBkb25lIGJ5
IHBhc3NpbmcgYSBuaWwgcGFpbnRpbmdSb290IGRvd24gdG8gb3VyIHJlbmRlcmVyIChhcyBpZiBu
byBwYWludGluZ1Jvb3Qgd2FzIGV2ZXIgc2V0KS4KICAgICAvLyBFbHNlLCBvdXIgcmVuZGVyZXIg
dHJlZSBtYXkgb3IgbWF5IG5vdCBjb250YWluIHRoZSBwYWludGluZyByb290LCBzbyB3ZSBwYXNz
IHRoYXQgcm9vdCBhbG9uZwpAQCAtMzc2NSw3OSArMzc1NCw0MyBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJs
YXBUZXN0UmVxdWVzdHMgJiYgaXNTZWxmUGFpbnRpbmdMYXllcikKICAgICAgICAgcGVyZm9ybU92
ZXJsYXBUZXN0cygqbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cywgbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCB0aGlzKTsKIAotICAgIC8vIFdlIHdhbnQgdG8gcGFpbnQg
b3VyIGxheWVyLCBidXQgb25seSBpZiB3ZSBpbnRlcnNlY3QgdGhlIGRhbWFnZSByZWN0LgotICAg
IGlmICh0aGlzICE9IGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpKQotICAgICAgICBzaG91
bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3QobGF5ZXJCb3VuZHMsIGRhbWFn
ZVJlY3QucmVjdCgpLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9v
dCk7CisgICAgYm9vbCBmb3JjZUJsYWNrVGV4dCA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVo
YXZpb3IgJiBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQ7CisgICAgYm9vbCBzZWxlY3Rpb25P
bmx5ICA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yU2Vs
ZWN0aW9uT25seTsKKyAgICAKKyAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IgPSBQYWlu
dEJlaGF2aW9yTm9ybWFsOworICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFp
bnRpbmdTa2lwUm9vdEJhY2tncm91bmQpCisgICAgICAgIHBhaW50QmVoYXZpb3IgfD0gUGFpbnRC
ZWhhdmlvclNraXBSb290QmFja2dyb3VuZDsKKyAgICBlbHNlIGlmIChsb2NhbFBhaW50RmxhZ3Mg
JiBQYWludExheWVyUGFpbnRpbmdSb290QmFja2dyb3VuZE9ubHkpCisgICAgICAgIHBhaW50QmVo
YXZpb3IgfD0gUGFpbnRCZWhhdmlvclJvb3RCYWNrZ3JvdW5kT25seTsKIAotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0
KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVy
IGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFyZW5j
eSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0
cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KLSAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvcik7CisgICAgTGF5ZXJGcmFnbWVudHMgbGF5ZXJGcmFnbWVudHM7CisgICAgaWYgKHNo
b3VsZFBhaW50Q29udGVudCB8fCBzaG91bGRQYWludE91dGxpbmUgfHwgaXNQYWludGluZ092ZXJs
YXlTY3JvbGxiYXJzKSB7CisgICAgICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3
aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBhbmQgcGFpbnQgb2Zmc2V0cyBmb3IgZWFj
aCBsYXllciBmcmFnbWVudCwgYXMgd2VsbCBhcyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudCBv
ZiBlYWNoCisgICAgICAgIC8vIGZyYWdtZW50IHNob3VsZCBwYWludC4KKyAgICAgICAgY29sbGVj
dEZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBs
b2NhbFBhaW50aW5nSW5mby5yZWdpb24sIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0
LAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplLAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50
TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVz
cGVjdE92ZXJmbG93Q2xpcCwgJm9mZnNldEZyb21Sb290KTsKKyAgICAgICAgdXBkYXRlUGFpbnRp
bmdJbmZvRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9j
YWxQYWludEZsYWdzLCBzaG91bGRQYWludENvbnRlbnQsICZvZmZzZXRGcm9tUm9vdCk7CiAgICAg
fQotI2VuZGlmCi0KKyAgICAKICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBh
aW50aW5nQ29tcG9zaXRpbmdCYWNrZ3JvdW5kUGhhc2UpIHsKLSAgICAgICAgaWYgKHNob3VsZFBh
aW50Q29udGVudCAmJiAhc2VsZWN0aW9uT25seSkgewotICAgICAgICAgICAgLy8gQmVnaW4gdHJh
bnNwYXJlbmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50
IHNvbWV0aGluZy4KLSAgICAgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQotICAgICAgICAg
ICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgICAgICAKLSAgICAgICAgICAg
IGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAg
ICAvLyBQYWludCBvdXIgYmFja2dyb3VuZCBmaXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGls
ZCBsYXllcnMuCi0gICAgICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8g
cGFpbnQgb3VyIGJhY2tncm91bmQuCi0gICAgICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBh
aW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBkYW1hZ2VSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8g
QmFja2dyb3VuZCBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3Vu
ZC4KLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVk
SW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIHBh
aW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5y
ZWdpb24pOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7Ci0KLSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJl
Y3QpCi0gICAgICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAgICAgICB9CisgICAgICAgIC8vIFBh
aW50IG9ubHkgdGhlIGJhY2tncm91bmRzIGZvciBhbGwgb2YgdGhlIGZyYWdtZW50cyBvZiB0aGUg
bGF5ZXIuCisgICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgJiYgIXNlbGVjdGlvbk9ubHkp
CisgICAgICAgICAgICBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMs
IGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJ
bmZvLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICAgICAg
Ly8gTm93IHdhbGsgdGhlIHNvcnRlZCBsaXN0IG9mIGNoaWxkcmVuIHdpdGggbmVnYXRpdmUgei1p
bmRpY2VzLgogICAgICAgICBwYWludExpc3QobmVnWk9yZGVyTGlzdCgpLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGxv
Y2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nRm9yZWdyb3VuZFBo
YXNlKSB7Ci0gICAgICAgIC8vIE5vdyBlc3RhYmxpc2ggdGhlIGFwcHJvcHJpYXRlIGNsaXAgYW5k
IHBhaW50IG91ciBjaGlsZCBSZW5kZXJPYmplY3RzLgotICAgICAgICBpZiAoc2hvdWxkUGFpbnRD
b250ZW50ICYmICFjbGlwUmVjdFRvQXBwbHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBC
ZWdpbiB0cmFuc3BhcmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUg
dG8gcGFpbnQgc29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0g
ICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0KLSAgICAgICAgICAg
IGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAg
ICAvLyBTZXQgdXAgdGhlIGNsaXAgdXNlZCB3aGVuIHBhaW50aW5nIG91ciBjaGlsZHJlbi4KLSAg
ICAgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWlu
dEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwUmVjdFRvQXBwbHkucmVjdCgp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uT25seSA/IFBhaW50
UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUJsYWNrVGV4dCA/IChQYWludEJlaGF2aW9y
KVBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCA6IHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9v
dEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
IXNlbGVjdGlvbk9ubHkpIHsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWlu
dFBoYXNlRmxvYXQ7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQ
aGFzZUZvcmVncm91bmQ7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVx
dWVzdHMgPSBsb2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzOwotICAgICAgICAg
ICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAg
ICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOwotICAg
ICAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRv
RGlydHlSZWN0KQotICAgICAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFp
bnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBjbGlwUmVjdFRvQXBwbHkpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBwYWludEZvcmVncm91
bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVy
Q29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAor
ICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgc2VsZWN0aW9uT25seSwgZm9yY2VCbGFja1RleHQpOworICAgICAg
ICAKKyAgICAgICAgaWYgKHNob3VsZFBhaW50T3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0
bGluZUZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8sIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKIAotICAgICAgICBp
ZiAoc2hvdWxkUGFpbnRPdXRsaW5lICYmICFvdXRsaW5lUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0bGluZQotICAgICAgICAgICAgUGFpbnRJbmZvIHBh
aW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KG91dGxpbmVSZWN0LnJlY3QoKSks
IFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICBjbGlwVG9SZWN0
KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFk
aXVzKTsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOwotICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAgICAgfQotICAgIAogICAgICAgICAv
LyBQYWludCBhbnkgY2hpbGQgbGF5ZXJzIHRoYXQgaGF2ZSBvdmVyZmxvdy4KICAgICAgICAgcGFp
bnRMaXN0KG1fbm9ybWFsRmxvd0xpc3QuZ2V0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIApAQCAtMzg0NSwzNCArMzc5OCwyNiBAQCB2b2lkIFJl
bmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgICAgIHBhaW50TGlzdChwb3Na
T3JkZXJMaXN0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3Mp
OwogICAgIH0KIAotICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKLSAgICAg
ICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAgICAgICAgcGFpbnRP
dmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCksIHBp
eGVsU25hcHBlZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVz
dG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFn
ZVJlY3QpOwotICAgIH0KKyAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKQorICAg
ICAgICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAg
ICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkpIHsKICAgICAgICAg
Ly8gQXBwbHkgdGhlIGNvcnJlY3QgY2xpcHBpbmcgKGllLiBvdmVyZmxvdzogaGlkZGVuKS4KLSAg
ICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5j
eUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJl
Y3QpOworICAgICAgICAvLyBGSVhNRTogSXQgaXMgaW5jb3JyZWN0IHRvIGp1c3QgY2xpcCB0byB0
aGUgZGFtYWdlUmVjdCBoZXJlIG9uY2UgbXVsdGlwbGUgZnJhZ21lbnRzIGFyZSBpbnZvbHZlZC4K
KyAgICAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3QgPSBsYXllckZyYWdtZW50cy5pc0VtcHR5
KCkgPyBDbGlwUmVjdCgpIDogbGF5ZXJGcmFnbWVudHNbMF0uYmFja2dyb3VuZFJlY3Q7CisgICAg
ICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lM
YXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5k
UmVjdCk7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLmFwcGx5RmlsdGVyRWZmZWN0
KCk7Ci0gICAgICAgIHJlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICByZXN0b3Jl
Q2xpcCh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CiAgICAgfQogI2VuZGlmCi0KKyAgICAKICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB3ZSBub3cgdXNlIHRoZSBvcmlnaW5hbCB0cmFuc3BhcmVuY3kgY29udGV4
dC4KICAgICBBU1NFUlQodHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0ID09IGNvbnRleHQpOwogCiAg
ICAgaWYgKChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ01h
c2tQaGFzZSkgJiYgc2hvdWxkUGFpbnRDb250ZW50ICYmIHJlbmRlcmVyKCktPmhhc01hc2soKSAm
JiAhc2VsZWN0aW9uT25seSkgewotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRv
RGlydHlSZWN0KQotICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VS
ZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3
aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAKLSAgICAgICAgLy8gUGFpbnQg
dGhlIG1hc2suCi0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFw
cGVkSW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2
aW9yTm9ybWFsLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVn
aW9uKTsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQotICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICAvLyBQYWludCB0aGUgbWFzayBmb3Ig
dGhlIGZyYWdtZW50cy4KKyAgICAgICAgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21l
bnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIp
OwogICAgIH0KIAogICAgIC8vIEVuZCBvdXIgdHJhbnNwYXJlbmN5IGxheWVyCkBAIC0zOTA0LDEz
ICszODQ5LDI5MSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExpc3QoVmVjdG9yPFJlbmRlCiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgIGlmICghY2hp
bGRMYXllci0+aXNQYWdpbmF0ZWQoKSB8fCB1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAg
ICAgaWYgKCFjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgY2hpbGRMYXll
ci0+cGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwg
Y29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCwKKyAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3ksIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3Qg
TGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQoreworICAgIGlmICghZW5jbG9zaW5nUGFnaW5h
dGlvbkxheWVyKCkgfHwgaGFzVHJhbnNmb3JtKCkpIHsKKyAgICAgICAgLy8gRm9yIHVucGFnaW5h
dGVkIGxheWVycywgdGhlcmUgaXMgb25seSBvbmUgZnJhZ21lbnQuCisgICAgICAgIExheWVyRnJh
Z21lbnQgZnJhZ21lbnQ7CisgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4
dChyb290TGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAgICAgIGNhbGN1bGF0ZVJlY3Rz
KGNsaXBSZWN0c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21lbnQub3V0
bGluZVJlY3QsIG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgZnJhZ21lbnRzLmFwcGVuZChmcmFn
bWVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQ29tcHV0ZSBvdXIg
b2Zmc2V0IHdpdGhpbiB0aGUgZW5jbG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuCisgICAgTGF5b3V0
UG9pbnQgb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXI7CisgICAgY29udmVydFRvTGF5ZXJDb29y
ZHMoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIG9mZnNldFdpdGhpblBhZ2luYXRlZExheWVy
KTsKKyAgICAKKyAgICAvLyBDYWxjdWxhdGUgY2xpcCByZWN0cyByZWxhdGl2ZSB0byB0aGUgZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyLiBUaGUgcHVycG9zZSBvZiB0aGlzIGNhbGwgaXMgdG8gZGV0
ZXJtaW5lIG91ciBib3VuZHMgY2xpcHBlZCB0byBpbnRlcm1lZGlhdGUKKyAgICAvLyBsYXllcnMg
YmV0d2VlbiB1cyBhbmQgdGhlIHBhZ2luYXRpb24gY29udGV4dC4gSXQncyBpbXBvcnRhbnQgdG8g
bWluaW1pemUgdGhlICMgb2YgZnJhZ21lbnRzIHdlIG5lZWQgdG8gY3JlYXRlIGFuZCB0aGlzIGhl
bHBzIHdpdGgKKyAgICAvLyB0aGF0LgorICAgIENsaXBSZWN0c0NvbnRleHQgcGFnaW5hdGlvbkNs
aXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIHJlZ2lvbiwgY2xpcFJl
Y3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93
Q2xpcCk7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc0luRmxvd1RocmVhZDsKKyAgICBDbGlw
UmVjdCBiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5k
UmVjdEluRmxvd1RocmVhZDsKKyAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdEluRmxvd1RocmVhZDsK
KyAgICBjYWxjdWxhdGVSZWN0cyhwYWdpbmF0aW9uQ2xpcFJlY3RzQ29udGV4dCwgUGFpbnRJbmZv
OjppbmZpbml0ZVJlY3QoKSwgbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJhY2tncm91bmRSZWN0
SW5GbG93VGhyZWFkLCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZCwKKyAgICAgICAgb3V0bGlu
ZVJlY3RJbkZsb3dUaHJlYWQsICZvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7CisgICAgCisg
ICAgLy8gVGFrZSBvdXIgYm91bmRpbmcgYm94IHdpdGhpbiB0aGUgZmxvdyB0aHJlYWQgYW5kIGNs
aXAgaXQuIFRoaXMgd2lsbCBoZWxwIG1pbmltaXplIHRoZSAjIG9mIGZyYWdtZW50cyB3ZSBoYXZl
IHRvIGNyZWF0ZS4KKyAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRpbmdCb3hJbkZsb3dUaHJlYWQg
PSBib3VuZGluZ0JveChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgMCwgJm9mZnNldFdpdGhp
blBhZ2luYXRlZExheWVyKTsKKyAgICBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLmludGVy
c2VjdChiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZC5yZWN0KCkpOworCisgICAgLy8gU2hpZnQg
dGhlIGRpcnR5IHJlY3QgaW50byBmbG93IHRocmVhZCBjb29yZGluYXRlcy4KKyAgICBMYXlvdXRQ
b2ludCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290OworICAgIGVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFn
aW5hdGlvbkxheWVyRnJvbVJvb3QpOworICAgIExheW91dFJlY3QgZGlydHlSZWN0SW5GbG93VGhy
ZWFkKGRpcnR5UmVjdCk7CisgICAgZGlydHlSZWN0SW5GbG93VGhyZWFkLm1vdmVCeSgtb2Zmc2V0
T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisKKyAgICAvLyBUZWxsIHRoZSBmbG93IHRocmVh
ZCB0byBjb2xsZWN0IHRoZSBmcmFnbWVudHMuIFdlIHBhc3MgZW5vdWdoIGluZm9ybWF0aW9uIHRv
IGNyZWF0ZSBhIG1pbmltYWwgbnVtYmVyIG9mIGZyYWdtZW50cyBiYXNlZCBvZmYgdGhlIHBhZ2Vz
L2NvbHVtbnMKKyAgICAvLyB0aGF0IGludGVyc2VjdCB0aGUgYWN0dWFsIGRpcnR5UmVjdCBhcyB3
ZWxsIGFzIHRoZSBwYWdlcy9jb2x1bW5zIHRoYXQgaW50ZXJzZWN0IG91ciBsYXllcidzIGJvdW5k
aW5nIGJveC4KKyAgICBSZW5kZXJGbG93VGhyZWFkKiBlbmNsb3NpbmdGbG93VGhyZWFkID0gdG9S
ZW5kZXJGbG93VGhyZWFkKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5yZW5kZXJlcigpKTsK
KyAgICBlbmNsb3NpbmdGbG93VGhyZWFkLT5jb2xsZWN0TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRz
LCBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLCBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQpOwor
ICAgIAorICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gR2V0IHRoZSBwYXJlbnQgY2xpcCByZWN0cyBvZiB0aGUgcGFnaW5hdGlvbiBsYXll
ciwgc2luY2Ugd2UgbmVlZCB0byBpbnRlcnNlY3Qgd2l0aCB0aGF0IHdoZW4gcGFpbnRpbmcgY29s
dW1uIGNvbnRlbnRzLgorICAgIENsaXBSZWN0IGFuY2VzdG9yQ2xpcFJlY3QgPSBkaXJ0eVJlY3Q7
CisgICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5wYXJlbnQoKSkgeworICAgICAg
ICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCByZWdpb24sIGNs
aXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVy
Zmxvd0NsaXApOworICAgICAgICBhbmNlc3RvckNsaXBSZWN0ID0gZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKCktPmJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KTsKKyAgICAgICAg
YW5jZXN0b3JDbGlwUmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKKyAgICB9CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXll
ckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFNldCBvdXIgZm91ciByZWN0cyB3aXRoIGFsbCBjbGlwcGluZyBhcHBsaWVkIHRoYXQgd2Fz
IGludGVybmFsIHRvIHRoZSBmbG93IHRocmVhZC4KKyAgICAgICAgZnJhZ21lbnQuc2V0UmVjdHMo
bGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJhY2tncm91bmRSZWN0SW5GbG93VGhyZWFkLCBmb3Jl
Z3JvdW5kUmVjdEluRmxvd1RocmVhZCwgb3V0bGluZVJlY3RJbkZsb3dUaHJlYWQpOworICAgICAg
ICAKKyAgICAgICAgLy8gU2hpZnQgdG8gdGhlIHJvb3QtcmVsYXRpdmUgcGh5c2ljYWwgcG9zaXRp
b24gdXNlZCB3aGVuIHBhaW50aW5nIHRoZSBmbG93IHRocmVhZCBpbiB0aGlzIGZyYWdtZW50Lgor
ICAgICAgICBmcmFnbWVudC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCArIG9mZnNl
dE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOworCisgICAgICAgIC8vIEludGVyc2VjdCB0aGUg
ZnJhZ21lbnQgd2l0aCBvdXIgYW5jZXN0b3IncyBiYWNrZ3JvdW5kIGNsaXAgc28gdGhhdCBlLmcu
LCBjb2x1bW5zIGluIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayBhcmUKKyAgICAgICAgLy8gcHJv
cGVybHkgY2xpcHBlZCBieSB0aGUgb3ZlcmZsb3cuCisgICAgICAgIGZyYWdtZW50LmludGVyc2Vj
dChhbmNlc3RvckNsaXBSZWN0LnJlY3QoKSk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgaW50
ZXJzZWN0IHdpdGggb3VyIHBhZ2luYXRpb24gY2xpcC4gVGhpcyB3aWxsIHR5cGljYWxseSBtZWFu
IHdlJ3JlIGp1c3QgaW50ZXJzZWN0aW5nIHRoZSBkaXJ0eSByZWN0IHdpdGggdGhlIGNvbHVtbgor
ICAgICAgICAvLyBjbGlwLCBzbyB0aGUgY29sdW1uIGNsaXAgZW5kcyB1cCBiZWluZyBhbGwgd2Ug
YXBwbHkuCisgICAgICAgIGZyYWdtZW50LmludGVyc2VjdChmcmFnbWVudC5wYWdpbmF0aW9uQ2xp
cCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWludGluZ0luZm9Gb3JG
cmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgbG9jYWxQYWludEZsYWdzLAor
ICAgIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJv
bVJvb3QpCit7CisgICAgQVNTRVJUKG9mZnNldEZyb21Sb290KTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50
JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFp
bnRDb250ZW50ID0gc2hvdWxkUGFpbnRDb250ZW50OworICAgICAgICBpZiAodGhpcyAhPSBsb2Nh
bFBhaW50aW5nSW5mby5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVy
UGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkgeworICAgICAgICAgICAgTGF5b3V0UG9pbnQgbmV3
T2Zmc2V0RnJvbVJvb3QgPSAqb2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zm
c2V0OworICAgICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2Vj
dHNEYW1hZ2VSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5
QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncywgY29u
c3QgTGF5b3V0UG9pbnQmIHRyYW5zbGF0aW9uT2Zmc2V0KQoreworICAgIC8vIEFkanVzdCB0aGUg
dHJhbnNmb3JtIHN1Y2ggdGhhdCB0aGUgcmVuZGVyZXIncyB1cHBlciBsZWZ0IGNvcm5lciB3aWxs
IHBhaW50IGF0ICgwLDApIGluIHVzZXIgc3BhY2UuCisgICAgLy8gVGhpcyBpbnZvbHZlcyBzdWJ0
cmFjdGluZyBvdXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXllciBpbiBvdXIgY3VycmVudCBjb29y
ZGluYXRlIHNwYWNlLCBidXQgcHJlc2VydmluZworICAgIC8vIHRoZSBhY2N1bXVsYXRlZCBlcnJv
ciBmb3Igc3ViLXBpeGVsIGxheW91dC4KKyAgICBMYXlvdXRQb2ludCBkZWx0YTsKKyAgICBjb252
ZXJ0VG9MYXllckNvb3JkcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBkZWx0YSk7CisgICAgZGVs
dGEubW92ZUJ5KHRyYW5zbGF0aW9uT2Zmc2V0KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0ocmVuZGVyYWJsZVRyYW5zZm9ybShwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcikp
OworICAgIEludFBvaW50IHJvdW5kZWREZWx0YSA9IHJvdW5kZWRJbnRQb2ludChkZWx0YSk7Cisg
ICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KHJvdW5kZWREZWx0YS54KCksIHJvdW5kZWREZWx0
YS55KCkpOworICAgIExheW91dFNpemUgYWRqdXN0ZWRTdWJQaXhlbEFjY3VtdWxhdGlvbiA9IHBh
aW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbiArIChkZWx0YSAtIHJvdW5kZWREZWx0YSk7
CisKKyAgICAvLyBBcHBseSB0aGUgdHJhbnNmb3JtLgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5z
Zm9ybS50b0FmZmluZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIE5vdyBkbyBhIHBhaW50IHdpdGgg
dGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KKyAgICBMYXllclBhaW50aW5nSW5mbyB0
cmFuc2Zvcm1lZFBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybS5p
bnZlcnNlKCkubWFwUmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpKSwgcGFpbnRpbmdJ
bmZvLnBhaW50QmVoYXZpb3IsCisgICAgICAgIGFkanVzdGVkU3ViUGl4ZWxBY2N1bXVsYXRpb24s
IHBhaW50aW5nSW5mby5wYWludGluZ1Jvb3QsIHBhaW50aW5nSW5mby5yZWdpb24sIHBhaW50aW5n
SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzKTsKKyAgICBwYWludExheWVyQ29udGVudHNBbmRSZWZs
ZWN0aW9uKGNvbnRleHQsIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGlu
Z0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQoreworICAgIExheWVyRnJhZ21lbnRz
IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHM7CisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQ
YWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKKyAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+
Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCBwYWludGluZ0lu
Zm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucmVnaW9uLCBwYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsCisgICAgICAgIChwYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0
cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0cywgSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUsCisgICAgICAgIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5n
T3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dD
bGlwLCAmb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisgICAgCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gZW5jbG9zaW5nUGFn
aW5hdGlvbkZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFwcGx5IHRoZSBw
YWdlL2NvbHVtbiBjbGlwIGZvciB0aGlzIGZyYWdtZW50LCBhcyB3ZWxsIGFzIGFueSBjbGlwcyBl
c3RhYmxpc2hlZCBieSBsYXllcnMgaW4gYmV0d2VlbiB1cyBhbmQKKyAgICAgICAgLy8gdGhlIGVu
Y2xvc2luZyBwYWdpbmF0aW9uIGxheWVyLgorICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0g
ZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpOworICAgICAgICAKKyAgICAgICAgLy8gTm93
IGNvbXB1dGUgdGhlIGNsaXBzIHdpdGhpbiBhIGdpdmVuIGZyYWdtZW50CisgICAgICAgIGlmIChw
YXJlbnQoKSAhPSBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSkgeworICAgICAgICAgICAgZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHBhaW50aW5nSW5m
by5yb290TGF5ZXIsIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOworICAgIAorICAg
ICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpLCBwYWludGluZ0luZm8ucmVnaW9uLCAocGFpbnRGbGFncyAmIFBhaW50TGF5
ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlw
UmVjdHMsCisgICAgICAgICAgICAgICAgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIChwYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVy
Zmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICAgICAgICAgIExheW91dFJlY3Qg
cGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCkucmVj
dCgpOworICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3QubW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRp
b25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKKyAgICAgICAgICAg
IGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRDbGlwUmVjdCk7CisgICAgICAgIH0KKworICAgICAg
ICBwYXJlbnQoKS0+Y2xpcFRvUmVjdChwYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBw
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0KTsKKyAgICAgICAgcGFpbnRMYXll
ckJ5QXBwbHlpbmdUcmFuc2Zvcm0oY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzLCBm
cmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0KTsKKyAgICAgICAgcGFyZW50KCktPnJlc3RvcmVDbGlw
KGNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgY2xpcFJlY3QpOworICAgIH0K
K30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICBjb25zdCBM
YXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJl
bmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciwKKyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21l
bnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBsYXll
cnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtub3cgd2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcuCisg
ICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQorICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWlu
dEJlaGF2aW9yKTsKKyAgICAKKyAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0Rp
cnR5UmVjdCkgeworICAgICAgICAgICAgLy8gUGFpbnQgb3VyIGJhY2tncm91bmQgZmlyc3QsIGJl
Zm9yZSBwYWludGluZyBhbnkgY2hpbGQgbGF5ZXJzLgorICAgICAgICAgICAgLy8gRXN0YWJsaXNo
IHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3VyIGJhY2tncm91bmQuCisgICAgICAgICAgICBjbGlw
VG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBEb05vdEluY2x1
ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gQmFja2dyb3VuZCBwYWludGluZyB3aWxsIGhhbmRs
ZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQYWlu
dCB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBj
b2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQgaXRzZWxmIGluc3RlYWQgb2YganVz
dCBmcm9tIHRoZSBwYWludCBpbmZvLgorICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRl
eHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwg
UGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCkt
PnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigp
IC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11
bGF0aW9uKSk7CisKKyAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVj
dCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lk
IFJlbmRlckxheWVyOjpwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgIGNvbnN0IExheW91dFJlY3Qm
IHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWlu
dEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGJv
b2wgc2VsZWN0aW9uT25seSwgYm9vbCBmb3JjZUJsYWNrVGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0
cmFuc3BhcmVuY3kgaWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gcGFpbnQuCisgICAgaWYgKGhhdmVU
cmFuc3BhcmVuY3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdt
ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9
IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNob3VsZFBh
aW50Q29udGVudCAmJiAhZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlS
ZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBQYWludEJl
aGF2aW9yIGxvY2FsUGFpbnRCZWhhdmlvciA9IGZvcmNlQmxhY2tUZXh0ID8gKFBhaW50QmVoYXZp
b3IpUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvcjsKKworICAgIC8v
IE9wdGltaXplIGNsaXBwaW5nIGZvciB0aGUgc2luZ2xlIGZyYWdtZW50IGNhc2UuCisgICAgYm9v
bCBzaG91bGRDbGlwID0gbG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ICYmIGxheWVy
RnJhZ21lbnRzLnNpemUoKSA9PSAxICYmIGxheWVyRnJhZ21lbnRzWzBdLnNob3VsZFBhaW50Q29u
dGVudCAmJiAhbGF5ZXJGcmFnbWVudHNbMF0uZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpOworICAg
IGlmIChzaG91bGRDbGlwKQorICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJv
b3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVy
RnJhZ21lbnRzWzBdLmZvcmVncm91bmRSZWN0KTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIGxv
b3AgdGhyb3VnaCBldmVyeSBmcmFnbWVudCBtdWx0aXBsZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0
byByZXBhaW50IGluIGVhY2ggc3BlY2lmaWMgcGhhc2UgaW4gb3JkZXIgZm9yCisgICAgLy8gaW50
ZXJsZWF2aW5nIG9mIHRoZSBmcmFnbWVudHMgdG8gd29yayBwcm9wZXJseS4KKyAgICBwYWludEZv
cmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2Uoc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VT
ZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLCBsYXllckZyYWdtZW50
cywKKyAgICAgICAgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlv
ciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIAorICAgIGlmICghc2VsZWN0aW9uT25s
eSkgeworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQ
aGFzZUZsb2F0LCBsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxv
Y2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZvcmVncm91bmQsIGxh
eWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2
aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZv
ckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlQ2hpbGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVu
dHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50
aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB9CisgICAgCisgICAgaWYgKHNob3VsZENsaXApCisg
ICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBsYXllckZyYWdtZW50c1swXS5mb3JlZ3JvdW5kUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBo
YXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwKKyAgICBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0lu
Zm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jv
b3RGb3JSZW5kZXJlcikKK3sKKyAgICBib29sIHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5m
by5jbGlwVG9EaXJ0eVJlY3QgJiYgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpID4gMTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAg
ICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCB8fCBmcmFnbWVudC5mb3JlZ3JvdW5k
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAg
IGlmIChzaG91bGRDbGlwKQorICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5m
by5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBm
cmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7CisgICAgCisgICAgICAgIFBhaW50SW5mbyBwYWludElu
Zm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5y
ZWN0KCkpLCBwaGFzZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkKKyAgICAgICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0g
bG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0czsKKyAgICAgICAgcmVuZGVyZXIo
KS0+cGFpbnQocGFpbnRJbmZvLCB0b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9u
KCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1
bXVsYXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICAg
ICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGZyYWdtZW50LmZvcmVncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFn
bWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
IGxvY2FsUGFpbnRpbmdJbmZvLAorICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJh
Z21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgaWYgKGZyYWdt
ZW50Lm91dGxpbmVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIAor
ICAgICAgICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUKKyAgICAgICAgUGFpbnRJbmZvIHBhaW50
SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYWdtZW50Lm91dGxpbmVSZWN0LnJl
Y3QoKSksIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290
Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIGNsaXBUb1Jl
Y3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
by5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIERvTm90SW5jbHVkZVNlbGZG
b3JCb3JkZXJSYWRpdXMpOworICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHRv
UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9u
KCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOworICAgICAgICBy
ZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJh
Z21lbnQub3V0bGluZVJlY3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRN
YXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWlu
dGluZ0luZm8sCisgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsK
KyAgICAgICAgaWYgKCFmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQorICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFpbnRp
bmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KKyAgICAgICAgCisgICAgICAgIC8vIFBh
aW50IHRoZSBtYXNrLgorICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxl
Y3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZy
b20gdGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwg
cGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCBQYWlu
dFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIs
IGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBh
aW50SW5mbywgdG9Qb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVy
Qm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7
CisgICAgICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXll
ckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5
ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBjbGlw
VG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICAgICAg
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b1BvaW50KGZy
YWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9j
YWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKSwKKyAgICAgICAgICAgIHBpeGVs
U25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7Cisg
ICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxh
eWVyOjpwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5n
SW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBk
byBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBjaGlsZCBsYXllciBpbnRvIHN0cmlw
cy4KQEAgLTQwNDgsNyArNDI3MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3Qg
SGl0VGVzdFIKIAogICAgIHJlbmRlcmVyKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwog
ICAgIAotICAgIExheW91dFJlY3QgaGl0VGVzdEFyZWEgPSByZW5kZXJlcigpLT5pc1JlbmRlckZs
b3dUaHJlYWQoKSA/IHRvUmVuZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVj
dCgpIDogcmVuZGVyZXIoKS0+dmlldygpLT5kb2N1bWVudFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0
IGhpdFRlc3RBcmVhID0gaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgPyB0b1JlbmRlckZs
b3dUaHJlYWQocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKSA6IHJlbmRlcmVyKCktPnZpZXco
KS0+ZG9jdW1lbnRSZWN0KCk7CiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBwaW5nKCkpCiAg
ICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChmcmFtZVZpc2libGVSZWN0KHJlbmRlcmVyKCkp
KTsKIApAQCAtNDExOSw3ICs0MzQyLDcgQEAgc3RhdGljIGRvdWJsZSBjb21wdXRlWk9mZnNldChj
b25zdCBIaXRUZQogCiBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gUmVuZGVy
TGF5ZXI6OmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
UmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5z
Zm9ybVN0YXRlKSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUs
IGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCkgY29uc3QKIHsKICAgICBSZWZQ
dHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiB0cmFuc2Zvcm1TdGF0ZTsKICAgICBMYXlvdXRQ
b2ludCBvZmZzZXQ7CkBAIC00MTM0LDYgKzQzNTcsOCBAQCBQYXNzUmVmUHRyPEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZT4gUmVuCiAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXll
ciwgb2Zmc2V0KTsKICAgICB9CiAgICAgCisgICAgb2Zmc2V0Lm1vdmVCeSh0cmFuc2xhdGlvbk9m
ZnNldCk7CisKICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lclJlbmRlcmVyID0gY29udGFpbmVy
TGF5ZXIgPyBjb250YWluZXJMYXllci0+cmVuZGVyZXIoKSA6IDA7CiAgICAgaWYgKHJlbmRlcmVy
KCktPnNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyUmVuZGVyZXIpKSB7
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRhaW5lclRyYW5zZm9ybTsKQEAgLTQx
OTAsNiArNDQxNSw5IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIK
IAogICAgIC8vIEFwcGx5IGEgdHJhbnNmb3JtIGlmIHdlIGhhdmUgb25lLgogICAgIGlmICh0cmFu
c2Zvcm0oKSAmJiAhYXBwbGllZFRyYW5zZm9ybSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyKCkpCisgICAgICAgICAgICByZXR1cm4gaGl0VGVzdFRyYW5zZm9ybWVkTGF5
ZXJJbkZyYWdtZW50cyhyb290TGF5ZXIsIGNvbnRhaW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQs
IGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0KTsK
KwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2ZSBiZWVu
IGNhbGN1bGF0ZWQuCiAgICAgICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICAgICAgQ2xpcFJl
Y3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJl
Z2lvbigpLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSk7CkBAIC00MTk4LDMxICs0NDI2LDggQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRU
ZXN0TGF5ZXIoUgogICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RM
b2NhdGlvbikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLQotICAgICAg
ICAvLyBDcmVhdGUgYSB0cmFuc2Zvcm0gc3RhdGUgdG8gYWNjdW11bGF0ZSB0aGlzIHRyYW5zZm9y
bS4KLSAgICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3Jt
U3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5
ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRlKTsKLQotICAg
ICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0IGJlIGludmVydGVkLCB0aGVuIGRvbid0IGhp
dCB0ZXN0IHRoaXMgbGF5ZXIgYXQgYWxsLgotICAgICAgICBpZiAoIW5ld1RyYW5zZm9ybVN0YXRl
LT5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcG9pbnQgYW5kIHRoZSBoaXQgdGVzdCBy
ZWN0IGluIHRoZSBjb29yZHMgb2YgdGhpcyBsYXllciBieSB1c2luZyB0aGUgdmFsdWVzCi0gICAg
ICAgIC8vIGZyb20gdGhlIHRyYW5zZm9ybVN0YXRlLCB3aGljaCBzdG9yZSB0aGUgcG9pbnQgYW5k
IHF1YWQgaW4gdGhlIGNvb3JkcyBvZiB0aGUgbGFzdCBmbGF0dGVuZWQKLSAgICAgICAgLy8gbGF5
ZXIsIGFuZCB0aGUgYWNjdW11bGF0ZWQgdHJhbnNmb3JtIHdoaWNoIGxldHMgdXAgbWFwIHRocm91
Z2ggcHJlc2VydmUtM2QgbGF5ZXJzLgotICAgICAgICAvLwotICAgICAgICAvLyBXZSBjYW4ndCBq
dXN0IG1hcCBoaXRUZXN0TG9jYXRpb24gYW5kIGhpdFRlc3RSZWN0IGJlY2F1c2UgdGhleSBtYXkg
aGF2ZSBiZWVuIGZsYXR0ZW5lZCAobG9zaW5nIHopCi0gICAgICAgIC8vIGJ5IG91ciBjb250YWlu
ZXIuCi0gICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5t
YXBwZWRQb2ludCgpOwotICAgICAgICBGbG9hdFF1YWQgbG9jYWxQb2ludFF1YWQgPSBuZXdUcmFu
c2Zvcm1TdGF0ZS0+bWFwcGVkUXVhZCgpOwotICAgICAgICBMYXlvdXRSZWN0IGxvY2FsSGl0VGVz
dFJlY3QgPSBuZXdUcmFuc2Zvcm1TdGF0ZS0+Ym91bmRzT2ZNYXBwZWRBcmVhKCk7Ci0gICAgICAg
IEhpdFRlc3RMb2NhdGlvbiBuZXdIaXRUZXN0TG9jYXRpb247Ci0gICAgICAgIGlmIChoaXRUZXN0
TG9jYXRpb24uaXNSZWN0QmFzZWRUZXN0KCkpCi0gICAgICAgICAgICBuZXdIaXRUZXN0TG9jYXRp
b24gPSBIaXRUZXN0TG9jYXRpb24obG9jYWxQb2ludCwgbG9jYWxQb2ludFF1YWQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBuZXdIaXRUZXN0TG9jYXRpb24gPSBIaXRUZXN0TG9jYXRpb24o
bG9jYWxQb2ludCk7Ci0KLSAgICAgICAgLy8gTm93IGRvIGEgaGl0IHRlc3Qgd2l0aCB0aGUgcm9v
dCBsYXllciBzaGlmdGVkIHRvIGJlIHVzLgotICAgICAgICByZXR1cm4gaGl0VGVzdExheWVyKHRo
aXMsIGNvbnRhaW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGxvY2FsSGl0VGVzdFJlY3QsIG5l
d0hpdFRlc3RMb2NhdGlvbiwgdHJ1ZSwgbmV3VHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXQp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGhpdFRlc3RMYXllckJ5QXBwbHlpbmdUcmFuc2Zv
cm0ocm9vdExheWVyLCBjb250YWluZXJMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVj
dCwgaGl0VGVzdExvY2F0aW9uLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldCk7CiAgICAgfQogCiAg
ICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhbmQgM2Qgc3RhdHVzIGFyZSB1cC10by1kYXRlLgpAQCAt
NDI1NCwxNiArNDQ1OSw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFIKICAgICAgICAgLy8gVGhpcyBsYXllciBpcyBmbGF0dGVuaW5nLCBzbyBmbGF0dGVuIHRoZSBz
dGF0ZSBwYXNzZWQgdG8gZGVzY2VuZGFudHMuCiAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUt
PmZsYXR0ZW4oKTsKICAgICB9Ci0gICAgCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3Rz
IHdlIHNob3VsZCB1c2UuCi0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKLSAgICBDbGlwUmVj
dCBiZ1JlY3Q7Ci0gICAgQ2xpcFJlY3QgZmdSZWN0OwotICAgIENsaXBSZWN0IG91dGxpbmVSZWN0
OwogCi0gICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgaGl0
VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSk7Ci0gICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwg
aGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QpOwot
ICAgIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2Yg
dGhlIHotZGVwdGggb2YgdGhlIGhpdCBwb2ludCBvZiAzZC10cmFuc2Zvcm1lZAogICAgIC8vIGRl
c2NlbmRhbnRzLgogICAgIGRvdWJsZSBsb2NhbFpPZmZzZXQgPSAtbnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKTsKQEAgLTQzMDgsMTcgKzQ1MDQsMjIgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICBjYW5kaWRhdGVMYXllciA9IGhpdExh
eWVyOwogICAgIH0KIAotICAgIC8vIENoZWNrIGZvciB0aGUgcmVzaXplcgotICAgIGlmIChjYW5S
ZXNpemUoKSAmJiByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGxh
eWVyQm91bmRzKSkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgewor
ICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAg
cmVjdGFuZ2xlcyBmb3IgZWFjaCBsYXllciBmcmFnbWVudC4KKyAgICBMYXllckZyYWdtZW50cyBs
YXllckZyYWdtZW50czsKKyAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByb290
TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsIFJvb3RSZWxhdGl2
ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKworICAgIGlmIChjYW5S
ZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRU
ZXN0TG9jYXRpb24pKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSk7CiAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgIH0KIAotICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBp
bnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1Jl
Y3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkg
eworICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUg
dGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLiBDaGVjaworICAgIC8vIGV2ZXJ5
IGZyYWdtZW50IGluIHJldmVyc2Ugb3JkZXIuCisgICAgaWYgKGlzU2VsZlBhaW50aW5nTGF5ZXIo
KSkgewogICAgICAgICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQs
IGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGNvbW1pdCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdl
J3JlIGZyb250bW9zdC4KICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5o
aXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwg
dGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdERlc2NlbmRh
bnRzKQorICAgICAgICBib29sIGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywg
cmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0RGVzY2VuZGFudHMs
IGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QpCiAgICAgICAgICAgICAmJiBpc0hpdENhbmRp
ZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5z
Zm9ybVN0YXRlLmdldCgpKSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRl
c3QoKSkKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwpAQCAtNDMy
OCwxMyArNDUyOSwxMyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAvLyBGb3JlZ3JvdW5k
IGNhbiBkZXB0aC1zb3J0IHdpdGggZGVzY2VuZGFudCBsYXllcnMsIHNvIGtlZXAgdGhpcyBhcyBh
IGNhbmRpZGF0ZS4KICAgICAgICAgICAgIGNhbmRpZGF0ZUxheWVyID0gdGhpczsKLSAgICAgICAg
fSBlbHNlIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgIH0gZWxzZSBpZiAo
aW5zaWRlRnJhZ21lbnRGb3JlZ3JvdW5kUmVjdCAmJiByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkp
CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIH0KIAogICAgIC8v
IE5vdyBjaGVjayBvdXIgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbi4KICAgICBoaXRMYXllciA9
IGhpdFRlc3RMaXN0KG5lZ1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQs
IGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2Nl
bmRhbnRzUHRyLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0
aFNvcnREZXNjZW5kYW50cyk7CisgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpP
ZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0
ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAg
ICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQogICAgICAgICAgICAgcmV0dXJuIGhpdExh
eWVyOwpAQCAtNDM0NSw5ICs0NTQ2LDEwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFIKICAgICBpZiAoY2FuZGlkYXRlTGF5ZXIpCiAgICAgICAgIHJldHVybiBjYW5k
aWRhdGVMYXllcjsKIAotICAgIGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24p
ICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVy
KCkpIHsKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9j
YXRpb24oKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3Vs
dCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdFNlbGYpCisgICAgICAgIGJv
b2wgaW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVjdCA9IGZhbHNlOworICAgICAgICBpZiAoaGl0
VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByZXF1ZXN0LCB0ZW1wUmVz
dWx0LCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RTZWxmLCBpbnNpZGVGcmFnbWVudEJhY2tncm91
bmRSZWN0KQogICAgICAgICAgICAgJiYgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZz
ZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKICAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKQEAgLTQzNTUsMjAgKzQ1NTcsMTE4IEBAIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgICAgICAgICByZXN1
bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgaWYgKGluc2lkZUZy
YWdtZW50QmFja2dyb3VuZFJlY3QgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsK
IH0KIAorYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKKyAgICBjb25zdCBIaXRUZXN0TG9jYXRpb24m
IGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyLCBib29sJiBpbnNp
ZGVDbGlwUmVjdCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMu
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVu
dCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoKGhpdFRlc3RGaWx0ZXIgPT0g
SGl0VGVzdFNlbGYgJiYgIWZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVz
dExvY2F0aW9uKSkKKyAgICAgICAgICAgIHx8IChoaXRUZXN0RmlsdGVyID09IEhpdFRlc3REZXNj
ZW5kYW50cyAmJiAhZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9j
YXRpb24pKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnNpZGVDbGlwUmVjdCA9
IHRydWU7CisgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBmcmFn
bWVudC5sYXllckJvdW5kcywgaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0RmlsdGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RM
b2NhdGlvbikgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9
IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJl
Y3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMs
IHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpKS5jb250YWlucyhoaXRU
ZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjpoaXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRU
ZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCwK
KyAgICBjb25zdCBMYXlvdXRQb2ludCYgdHJhbnNsYXRpb25PZmZzZXQpCit7CisgICAgLy8gQ3Jl
YXRlIGEgdHJhbnNmb3JtIHN0YXRlIHRvIGFjY3VtdWxhdGUgdGhpcyB0cmFuc2Zvcm0uCisgICAg
UmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3JtU3RhdGUgPSBjcmVh
dGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RS
ZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRlLCB0cmFuc2xhdGlvbk9mZnNldCk7
CisKKyAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0IGJlIGludmVydGVkLCB0aGVuIGRvbid0
IGhpdCB0ZXN0IHRoaXMgbGF5ZXIgYXQgYWxsLgorICAgIGlmICghbmV3VHJhbnNmb3JtU3RhdGUt
Pm1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gQ29tcHV0ZSB0aGUgcG9pbnQgYW5kIHRoZSBoaXQgdGVzdCByZWN0IGluIHRo
ZSBjb29yZHMgb2YgdGhpcyBsYXllciBieSB1c2luZyB0aGUgdmFsdWVzCisgICAgLy8gZnJvbSB0
aGUgdHJhbnNmb3JtU3RhdGUsIHdoaWNoIHN0b3JlIHRoZSBwb2ludCBhbmQgcXVhZCBpbiB0aGUg
Y29vcmRzIG9mIHRoZSBsYXN0IGZsYXR0ZW5lZAorICAgIC8vIGxheWVyLCBhbmQgdGhlIGFjY3Vt
dWxhdGVkIHRyYW5zZm9ybSB3aGljaCBsZXRzIHVwIG1hcCB0aHJvdWdoIHByZXNlcnZlLTNkIGxh
eWVycy4KKyAgICAvLworICAgIC8vIFdlIGNhbid0IGp1c3QgbWFwIGhpdFRlc3RMb2NhdGlvbiBh
bmQgaGl0VGVzdFJlY3QgYmVjYXVzZSB0aGV5IG1heSBoYXZlIGJlZW4gZmxhdHRlbmVkIChsb3Np
bmcgeikKKyAgICAvLyBieSBvdXIgY29udGFpbmVyLgorICAgIEZsb2F0UG9pbnQgbG9jYWxQb2lu
dCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRQb2ludCgpOworICAgIEZsb2F0UXVhZCBsb2Nh
bFBvaW50UXVhZCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRRdWFkKCk7CisgICAgTGF5b3V0
UmVjdCBsb2NhbEhpdFRlc3RSZWN0ID0gbmV3VHJhbnNmb3JtU3RhdGUtPmJvdW5kc09mTWFwcGVk
QXJlYSgpOworICAgIEhpdFRlc3RMb2NhdGlvbiBuZXdIaXRUZXN0TG9jYXRpb247CisgICAgaWYg
KGhpdFRlc3RMb2NhdGlvbi5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgbmV3SGl0VGVzdExv
Y2F0aW9uID0gSGl0VGVzdExvY2F0aW9uKGxvY2FsUG9pbnQsIGxvY2FsUG9pbnRRdWFkKTsKKyAg
ICBlbHNlCisgICAgICAgIG5ld0hpdFRlc3RMb2NhdGlvbiA9IEhpdFRlc3RMb2NhdGlvbihsb2Nh
bFBvaW50KTsKKworICAgIC8vIE5vdyBkbyBhIGhpdCB0ZXN0IHdpdGggdGhlIHJvb3QgbGF5ZXIg
c2hpZnRlZCB0byBiZSB1cy4KKyAgICByZXR1cm4gaGl0VGVzdExheWVyKHRoaXMsIGNvbnRhaW5l
ckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGxvY2FsSGl0VGVzdFJlY3QsIG5ld0hpdFRlc3RMb2Nh
dGlvbiwgdHJ1ZSwgbmV3VHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXQpOworfQorCitSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMo
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAorICAgIGNv
bnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRl
c3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0
ZSwgZG91YmxlKiB6T2Zmc2V0KQoreworICAgIExheWVyRnJhZ21lbnRzIGVuY2xvc2luZ1BhZ2lu
YXRpb25GcmFnbWVudHM7CisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJG
cm9tUm9vdDsKKyAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50
cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlv
bi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsCisgICAgICAgIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywg
SW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0
T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisKKyAgICBmb3IgKGludCBpID0gZW5jbG9zaW5n
UGFnaW5hdGlvbkZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBj
b25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVu
dHMuYXQoaSk7CisgICAgICAgIAorICAgICAgICAvLyBBcHBseSB0aGUgcGFnZS9jb2x1bW4gY2xp
cCBmb3IgdGhpcyBmcmFnbWVudCwgYXMgd2VsbCBhcyBhbnkgY2xpcHMgZXN0YWJsaXNoZWQgYnkg
bGF5ZXJzIGluIGJldHdlZW4gdXMgYW5kCisgICAgICAgIC8vIHRoZSBlbmNsb3NpbmcgcGFnaW5h
dGlvbiBsYXllci4KKyAgICAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0LnJlY3QoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBjb21wdXRlIHRoZSBj
bGlwcyB3aXRoaW4gYSBnaXZlbiBmcmFnbWVudAorICAgICAgICBpZiAocGFyZW50KCkgIT0gZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpIHsKKyAgICAgICAgICAgIGVuY2xvc2luZ1BhZ2luYXRp
b25MYXllcigpLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFnaW5h
dGlvbkxheWVyRnJvbVJvb3QpOworICAgIAorICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBj
bGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCBoaXRUZXN0TG9jYXRp
b24ucmVnaW9uKCksIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxi
YXJTaXplKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3Jv
dW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCkucmVjdCgpOworICAgICAgICAgICAgcGFyZW50
Q2xpcFJlY3QubW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2lu
YXRpb25MYXllckZyb21Sb290KTsKKyAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJl
bnRDbGlwUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghaGl0VGVzdExv
Y2F0aW9uLmludGVyc2VjdHMoY2xpcFJlY3QpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gaGl0VGVzdExheWVyQnlBcHBseWluZ1RyYW5z
Zm9ybShyb290TGF5ZXIsIGNvbnRhaW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RS
ZWN0LCBoaXRUZXN0TG9jYXRpb24sCisgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNl
dCwgZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCk7CisgICAgICAgIGlmIChoaXRMYXllcikKKyAg
ICAgICAgICAgIHJldHVybiBoaXRMYXllcjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9
CisKIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXll
ckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RG
aWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QKIHsKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdM
YXllcigpIHx8IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKIAotICAgIGlmICgh
cmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b0xheW91dFBvaW50KGxheWVyQm91bmRzLmxvY2F0
aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoaXRUZXN0RmlsdGVyKSkgeworICAgIGlmICghcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwgdG9MYXlvdXRQb2ludChsYXllckJvdW5kcy5sb2Nh
dGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSksIGhpdFRlc3RGaWx0ZXIpKSB7CiAgICAgICAg
IC8vIEl0J3Mgd3JvbmcgdG8gc2V0IGlubmVyTm9kZSwgYnV0IHRoZW4gY2xhaW0gdGhhdCB5b3Ug
ZGlkbid0IGhpdCBhbnl0aGluZywgdW5sZXNzIGl0IGlzCiAgICAgICAgIC8vIGEgcmVjdC1iYXNl
ZCB0ZXN0LgogICAgICAgICBBU1NFUlQoIXJlc3VsdC5pbm5lck5vZGUoKSB8fCAocmVzdWx0Lmlz
UmVjdEJhc2VkVGVzdCgpICYmIHJlc3VsdC5yZWN0QmFzZWRUZXN0UmVzdWx0KCkuc2l6ZSgpKSk7
CkBAIC00NDA5LDcgKzQ3MDksNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
aXN0KFZlCiAgICAgICAgIFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7CiAg
ICAgICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IDA7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQg
dGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9uKCkpOwotICAgICAgICBpZiAoY2hpbGRM
YXllci0+aXNQYWdpbmF0ZWQoKSAmJiAhdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCkpCisgICAgICAg
IGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBo
aXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3Qs
IHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRl
LCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBoaXRM
YXllciA9IGNoaWxkTGF5ZXItPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3Qs
IHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlLCB0cmFuc2Zv
cm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKQEAgLTQ2OTEsOCArNDk5MSwxOCBAQCBz
dGF0aWMgaW5saW5lIENsaXBSZWN0IGJhY2tncm91bmRDbGlwUmVjCiBDbGlwUmVjdCBSZW5kZXJM
YXllcjo6YmFja2dyb3VuZENsaXBSZWN0KGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0
c0NvbnRleHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHBhcmVudCgpKTsKKyAgICAKICAgICBDbGlw
UmVjdHMgcGFyZW50UmVjdHM7Ci0gICAgcGFyZW50Q2xpcFJlY3RzKGNsaXBSZWN0c0NvbnRleHQs
IHBhcmVudFJlY3RzKTsKKworICAgIC8vIElmIHdlIGNyb3NzIGludG8gYSBkaWZmZXJlbnQgcGFn
aW5hdGlvbiBjb250ZXh0LCB0aGVuIHdlIGNhbid0IHJlbHkgb24gdGhlIGNhY2hlLgorICAgIC8v
IEp1c3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgVGVtcG9yYXJ5Q2xpcFJlY3RzLgorICAgIGlmIChj
bGlwUmVjdHNDb250ZXh0LmNsaXBSZWN0c1R5cGUgIT0gVGVtcG9yYXJ5Q2xpcFJlY3RzICYmIHBh
cmVudCgpLT5lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSAhPSBlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKSkgeworICAgICAgICBDbGlwUmVjdHNDb250ZXh0IHRlbXBDb250ZXh0KGNsaXBSZWN0
c0NvbnRleHQpOworICAgICAgICB0ZW1wQ29udGV4dC5jbGlwUmVjdHNUeXBlID0gVGVtcG9yYXJ5
Q2xpcFJlY3RzOworICAgICAgICBwYXJlbnRDbGlwUmVjdHModGVtcENvbnRleHQsIHBhcmVudFJl
Y3RzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGFyZW50Q2xpcFJlY3RzKGNsaXBSZWN0c0NvbnRl
eHQsIHBhcmVudFJlY3RzKTsKKyAgICAKICAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kQ2xpcFJlY3Qg
PSBiYWNrZ3JvdW5kQ2xpcFJlY3RGb3JQb3NpdGlvbihwYXJlbnRSZWN0cywgcmVuZGVyZXIoKS0+
c3R5bGUoKS0+cG9zaXRpb24oKSk7CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCkt
PnZpZXcoKTsKICAgICBBU1NFUlQodmlldyk7CkBAIC00ODYwLDcgKzUxNzAsNyBAQCBib29sIFJl
bmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjCiAgICAgICAgIAogICAgIC8vIE90aGVy
d2lzZSB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGlzIHNpbmdsZSBs
YXllciBhbmQgc2VlIGlmIGl0IGludGVyc2VjdHMKICAgICAvLyB0aGUgZGFtYWdlIHJlY3QuCi0g
ICAgcmV0dXJuIGJvdW5kaW5nQm94KHJvb3RMYXllciwgb2Zmc2V0RnJvbVJvb3QpLmludGVyc2Vj
dHMoZGFtYWdlUmVjdCk7CisgICAgcmV0dXJuIGJvdW5kaW5nQm94KHJvb3RMYXllciwgMCwgb2Zm
c2V0RnJvbVJvb3QpLmludGVyc2VjdHMoZGFtYWdlUmVjdCk7CiB9CiAKIExheW91dFJlY3QgUmVu
ZGVyTGF5ZXI6OmxvY2FsQm91bmRpbmdCb3goQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFn
cykgY29uc3QKQEAgLTQ5MTEsMTQgKzUyMjEsMzMgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6
bG9jYWxCb3VuZGluZ0JveAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBj
b25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRl
ckxheWVyOjpib3VuZGluZ0JveChjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ2Fs
Y3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncywgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZy
b21Sb290KSBjb25zdAogeyAgICAKLSAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGxvY2FsQm91bmRp
bmdCb3goKTsKKyAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGxvY2FsQm91bmRpbmdCb3goZmxhZ3Mp
OwogICAgIGlmIChyZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZW5kZXJCb3goKS0+Zmxp
cEZvcldyaXRpbmdNb2RlKHJlc3VsdCk7CiAgICAgZWxzZQogICAgICAgICByZW5kZXJlcigpLT5j
b250YWluaW5nQmxvY2soKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlc3VsdCk7CiAKKyAgICBpZiAo
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkgJiYgKGZsYWdzICYgVXNlRnJhZ21lbnRCb3hlcykp
IHsKKyAgICAgICAgLy8gU3BsaXQgb3VyIGJveCB1cCBpbnRvIHRoZSBhY3R1YWwgZnJhZ21lbnQg
Ym94ZXMgdGhhdCByZW5kZXIgaW4gdGhlIGNvbHVtbnMvcGFnZXMgYW5kIHVuaXRlIHRob3NlIHRv
Z2V0aGVyIHRvCisgICAgICAgIC8vIGdldCBvdXIgdHJ1ZSBib3VuZGluZyBib3guCisgICAgICAg
IExheW91dFBvaW50IG9mZnNldFdpdGhpblBhZ2luYXRpb25MYXllcjsKKyAgICAgICAgY29udmVy
dFRvTGF5ZXJDb29yZHMoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIG9mZnNldFdpdGhpblBh
Z2luYXRpb25MYXllcik7ICAgICAgICAKKyAgICAgICAgcmVzdWx0Lm1vdmVCeShvZmZzZXRXaXRo
aW5QYWdpbmF0aW9uTGF5ZXIpOworCisgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGVuY2xvc2lu
Z0Zsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dUaHJlYWQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVy
KCktPnJlbmRlcmVyKCkpOworICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdGbG93VGhyZWFkLT5m
cmFnbWVudHNCb3VuZGluZ0JveChyZXN1bHQpOworICAgICAgICAKKyAgICAgICAgTGF5b3V0UG9p
bnQgZGVsdGE7CisgICAgICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKKyAgICAgICAgICAgIGRlbHRh
ID0gKm9mZnNldEZyb21Sb290OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmNsb3NpbmdQ
YWdpbmF0aW9uTGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgZGVs
dGEpOworICAgICAgICByZXN1bHQubW92ZUJ5KGRlbHRhKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKICAgICBMYXlvdXRQb2ludCBkZWx0YTsKICAgICBpZiAob2Zmc2V0RnJvbVJv
b3QpCiAgICAgICAgIGRlbHRhID0gKm9mZnNldEZyb21Sb290OwpAQCAtNTMzNiw3ICs1NjY1LDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhib29sIGluYwogICAgIGJvb2wgaXNT
dGFja2luZyA9IGJlaGF2aW9yID09IFN0b3BBdFN0YWNraW5nQ29udGV4dHMgPyBpc1N0YWNraW5n
Q29udGV4dCgpIDogaXNTdGFja2luZ0NvbnRhaW5lcigpOwogICAgIC8vIE92ZXJmbG93IGxheWVy
cyBhcmUganVzdCBwYWludGVkIGJ5IHRoZWlyIGVuY2xvc2luZyBsYXllcnMsIHNvIHRoZXkgZG9u
J3QgZ2V0IHB1dCBpbiB6b3JkZXIgbGlzdHMuCiAgICAgYm9vbCBpbmNsdWRlSGlkZGVuTGF5ZXIg
PSBpbmNsdWRlSGlkZGVuTGF5ZXJzIHx8IChtX2hhc1Zpc2libGVDb250ZW50IHx8IChtX2hhc1Zp
c2libGVEZXNjZW5kYW50ICYmIGlzU3RhY2tpbmcpKTsKLSAgICBpZiAoaW5jbHVkZUhpZGRlbkxh
eWVyICYmICFpc05vcm1hbEZsb3dPbmx5KCkgJiYgIXJlbmRlcmVyKCktPmlzUmVuZGVyRmxvd1Ro
cmVhZCgpKSB7CisgICAgaWYgKGluY2x1ZGVIaWRkZW5MYXllciAmJiAhaXNOb3JtYWxGbG93T25s
eSgpICYmICFpc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkgewogICAgICAgICAvLyBEZXRl
cm1pbmUgd2hpY2ggYnVmZmVyIHRoZSBjaGlsZCBzaG91bGQgYmUgaW4uCiAgICAgICAgIE93blB0
cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+JiBidWZmZXIgPSAoekluZGV4KCkgPj0gMCkgPyBwb3NC
dWZmZXIgOiBuZWdCdWZmZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBjbGFzcyBGaWx0ZXJP
cGVyYXRpb25zOwogY2xhc3MgSGl0VGVzdFJlcXVlc3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0Owog
Y2xhc3MgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOworY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsK
IGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJl
bmRlclJlcGxpY2E7CkBAIC0xMTQsNiArMTE1LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2b2lk
IG1vdmUoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0IHkpIHsgbV9yZWN0Lm1vdmUoeCwgeSk7IH0K
ICAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3JlY3QubW92ZShzaXpl
KTsgfQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgeyBtX3JlY3Qu
bW92ZUJ5KHBvaW50KTsgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0LmlzRW1wdHkoKTsgfQogICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBMYXlvdXRSZWN0JiBy
ZWN0KSB7IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0cyhyZWN0KTsgfQpAQCAtMjUxLDYgKzI1Myw1
MiBAQCBwdWJsaWM6CiAjZW5kaWYKIH07CiAKK3N0cnVjdCBMYXllckZyYWdtZW50IHsKK3B1Ymxp
YzoKKyAgICBMYXllckZyYWdtZW50KCkKKyAgICAgICAgOiBzaG91bGRQYWludENvbnRlbnQoZmFs
c2UpCisgICAgeyB9CisKKyAgICB2b2lkIHNldFJlY3RzKGNvbnN0IExheW91dFJlY3QmIGJvdW5k
cywgY29uc3QgQ2xpcFJlY3QmIGJhY2tncm91bmQsIGNvbnN0IENsaXBSZWN0JiBmb3JlZ3JvdW5k
LCBjb25zdCBDbGlwUmVjdCYgb3V0bGluZSkKKyAgICB7CisgICAgICAgIGxheWVyQm91bmRzID0g
Ym91bmRzOworICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IGJhY2tncm91bmQ7CisgICAgICAgIGZv
cmVncm91bmRSZWN0ID0gZm9yZWdyb3VuZDsKKyAgICAgICAgb3V0bGluZVJlY3QgPSBvdXRsaW5l
OworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgbGF5ZXJCb3VuZHMubW92ZUJ5KG9mZnNldCk7CisgICAgICAgIGJh
Y2tncm91bmRSZWN0Lm1vdmVCeShvZmZzZXQpOworICAgICAgICBmb3JlZ3JvdW5kUmVjdC5tb3Zl
Qnkob2Zmc2V0KTsKKyAgICAgICAgb3V0bGluZVJlY3QubW92ZUJ5KG9mZnNldCk7CisgICAgICAg
IHBhZ2luYXRpb25DbGlwLm1vdmVCeShvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGlu
dGVyc2VjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgYmFja2dyb3Vu
ZFJlY3QuaW50ZXJzZWN0KHJlY3QpOworICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3Qo
cmVjdCk7CisgICAgICAgIG91dGxpbmVSZWN0LmludGVyc2VjdChyZWN0KTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQ7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5k
czsKKyAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5k
UmVjdDsKKyAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsKKyAgICAKKyAgICAvLyBVbmlxdWUgdG8g
cGFnaW5hdGVkIGZyYWdtZW50cy4gVGhlIHBoeXNpY2FsIHRyYW5zbGF0aW9uIHRvIGFwcGx5IHRv
IHNoaWZ0IHRoZSBsYXllciB3aGVuIHBhaW50aW5nL2hpdC10ZXN0aW5nLgorICAgIExheW91dFBv
aW50IHBhZ2luYXRpb25PZmZzZXQ7CisgICAgCisgICAgLy8gQWxzbyB1bmlxdWUgdG8gcGFnaW5h
dGVkIGZyYWdtZW50cy4gQW4gYWRkaXRpb25hbCBjbGlwIHRoYXQgYXBwbGllcyB0byB0aGUgbGF5
ZXIuIEl0IGlzIGluIGxheWVyLWxvY2FsCisgICAgLy8gKHBoeXNpY2FsKSBjb29yZGluYXRlcy4K
KyAgICBMYXlvdXRSZWN0IHBhZ2luYXRpb25DbGlwOworfTsKKwordHlwZWRlZiBWZWN0b3I8TGF5
ZXJGcmFnbWVudD4gTGF5ZXJGcmFnbWVudHM7CisKIGNsYXNzIFJlbmRlckxheWVyIDogcHVibGlj
IFNjcm9sbGFibGVBcmVhIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGlj
YTsKQEAgLTQxOCw2ICs0NjYsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAgICBib29sIGlz
UGFnaW5hdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BhZ2luYXRlZDsgfQorICAgIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2VuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcjsgfQogCiAgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKICAgICAK
QEAgLTYyMiwxMiArNjcxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgRXhjbHVkZUhpZGRlbkRlc2Nl
bmRhbnRzID0gMSA8PCAzLAogICAgICAgICBEb250Q29uc3RyYWluRm9yTWFzayA9IDEgPDwgNCwK
ICAgICAgICAgSW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyA9IDEgPDwgNSwKLSAgICAgICAg
RGVmYXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAgSW5jbHVkZVNlbGZUcmFuc2Zvcm0g
fCBVc2VMb2NhbENsaXBSZWN0SWZQb3NzaWJsZSB8IEluY2x1ZGVMYXllckZpbHRlck91dHNldHMK
KyAgICAgICAgVXNlRnJhZ21lbnRCb3hlcyA9IDEgPDwgNiwKKyAgICAgICAgRGVmYXVsdENhbGN1
bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAgSW5jbHVkZVNlbGZUcmFuc2Zvcm0gfCBVc2VMb2NhbENs
aXBSZWN0SWZQb3NzaWJsZSB8IEluY2x1ZGVMYXllckZpbHRlck91dHNldHMgfCBVc2VGcmFnbWVu
dEJveGVzCiAgICAgfTsKICAgICB0eXBlZGVmIHVuc2lnbmVkIENhbGN1bGF0ZUxheWVyQm91bmRz
RmxhZ3M7CiAKICAgICAvLyBCb3VuZGluZyBib3ggcmVsYXRpdmUgdG8gc29tZSBhbmNlc3RvciBs
YXllci4gUGFzcyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93bi4KLSAgICBMYXlvdXRSZWN0IGJvdW5k
aW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBv
ZmZzZXRGcm9tUm9vdCA9IDApIGNvbnN0OworICAgIExheW91dFJlY3QgYm91bmRpbmdCb3goY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IDAs
IGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDApIGNvbnN0OwogICAgIC8vIEJv
dW5kaW5nIGJveCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhpcyBsYXllci4KICAgICBMYXlvdXRS
ZWN0IGxvY2FsQm91bmRpbmdCb3goQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IDApIGNvbnN0
OwogICAgIC8vIFBpeGVsIHNuYXBwZWQgYm91bmRpbmcgYm94IHJlbGF0aXZlIHRvIHRoZSByb290
LgpAQCAtNzgxLDYgKzgzMSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdwb3J0Q29uc3Ry
YWluZWROb3RDb21wb3NpdGVkUmVhc29uKFZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVk
UmVhc29uIHJlYXNvbikgeyBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29u
ID0gcmVhc29uOyB9CiAgICAgVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24g
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbj4obV92aWV3
cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbik7IH0KICNlbmRpZgorICAgIAorICAg
IGJvb2wgaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gcmVuZGVy
ZXIoKS0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCk7IH0KIAogcHJpdmF0ZToKICAgICBl
bnVtIENvbGxlY3RMYXllcnNCZWhhdmlvciB7IFN0b3BBdFN0YWNraW5nQ29udGV4dHMsIFN0b3BB
dFN0YWNraW5nQ29udGFpbmVycyB9OwpAQCAtODg2LDEzICs5MzgsMzIgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBhaW50TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzQW5kUmVm
bGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50
TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOworICAgIHZvaWQg
cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExheW91dFBvaW50JiB0cmFu
c2xhdGlvbk9mZnNldCA9IExheW91dFBvaW50KCkpOwogICAgIHZvaWQgcGFpbnRMaXN0KFZlY3Rv
cjxSZW5kZXJMYXllcio+KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRQYWdpbmF0ZWRDaGlsZExheWVy
KFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludENoaWxkTGF5ZXJJ
bnRvQ29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IFZlY3RvcjxSZW5k
ZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNpemVfdCBjb2x1bW5JbmRleCk7CiAKKyAgICB2b2lk
IGNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBSZW5kZXJMYXllciogcm9v
dExheWVyLCBSZW5kZXJSZWdpb24qLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCisgICAg
ICAgIENsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwKKyAg
ICAgICAgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXAsIGNv
bnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDApOworICAgIHZvaWQgdXBkYXRlUGFp
bnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgTGF5ZXJQYWludGlu
Z0luZm8mLCBQYWludExheWVyRmxhZ3MsIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBM
YXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpOworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9y
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgR3JhcGhp
Y3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisgICAgICAgIGNvbnN0IExheW91
dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ks
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBw
YWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBHcmFwaGljc0Nv
bnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVj
dCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50
aW5nUm9vdEZvclJlbmRlcmVyLAorICAgICAgICBib29sIHNlbGVjdGlvbk9ubHksIGJvb2wgZm9y
Y2VCbGFja1RleHQpOworICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBo
YXNlKFBhaW50UGhhc2UsIGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBh
aW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50
cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlcik7CisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29u
c3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYpOworICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBSZW5kZXJP
YmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50VHJhbnNmb3Jt
ZWRMYXllckludG9GcmFnbWVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGlu
Z0luZm8mLCBQYWludExheWVyRmxhZ3MpOworCiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXll
cihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFu
c2Zvcm1TdGF0ZSA9IDAsIGRvdWJsZSogek9mZnNldCA9IDApOworICAgIFJlbmRlckxheWVyKiBo
aXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJl
bmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSAwLCBkb3Vi
bGUqIHpPZmZzZXQgPSAwLAorICAgICAgICBjb25zdCBMYXlvdXRQb2ludCYgdHJhbnNsYXRpb25P
ZmZzZXQgPSBMYXlvdXRQb2ludCgpKTsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdExpc3QoVmVj
dG9yPFJlbmRlckxheWVyKj4qLCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2Vu
ZGFudHMsIGRvdWJsZSogek9mZnNldCwKQEAgLTkwNyw5ICs5NzgsMTQgQEAgcHJpdmF0ZToKIAog
ICAgIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBjcmVhdGVMb2NhbFRyYW5z
Zm9ybVN0YXRlKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJM
YXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRU
ZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0
YXRlKSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91
dFBvaW50KCkpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91
bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKKyAgICBi
b29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKKyAgICBib29s
IGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogaGl0VGVzdFRyYW5zZm9y
bWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciog
Y29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCisg
ICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gMCwgZG91YmxlKiB6T2Zmc2V0
ID0gMCk7CiAKICAgICBib29sIGxpc3RDb250ZW50c09wYXF1ZUluUmVjdChjb25zdCBWZWN0b3I8
UmVuZGVyTGF5ZXIqPiosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtMTE4NCw2ICsx
MjYwLDkgQEAgcHJvdGVjdGVkOgogICAgIFJlbmRlclNjcm9sbGJhclBhcnQqIG1fc2Nyb2xsQ29y
bmVyOwogICAgIFJlbmRlclNjcm9sbGJhclBhcnQqIG1fcmVzaXplcjsKIAorICAgIC8vIFBvaW50
ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5kZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdp
bmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJlIG5vdCBwYWdpbmF0ZWQuCisgICAgUmVuZGVyTGF5ZXIq
IG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOworCiBwcml2YXRlOgogICAgIEludFJlY3QgbV9i
bG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAJKHJldmlzaW9uIDE0NDAwNykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCw2IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBjcmVhdGVNdWwKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlKFJlbmRl
clN0eWxlOjpjcmVhdGUoKSk7CiAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxl
KTsKICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgbmV3U3R5bGUtPnNldFBv
c2l0aW9uKFJlbGF0aXZlUG9zaXRpb24pOwotICAgIG5ld1N0eWxlLT5zZXRaSW5kZXgoMCk7CiAg
ICAgbmV3U3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7CiAgICAgcmV0dXJuIG5ld1N0eWxlLnJlbGVh
c2UoKTsKIH0KQEAgLTE2Miw2ICsxNjAsMTUgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2Nr
OjplbnN1cmVDb2x1bQogICAgIGNvbHVtblNldC0+c2V0UmVxdWlyZXNCYWxhbmNpbmcocmVxdWly
ZXNCYWxhbmNpbmcoKSk7CiB9CiAKK3ZvaWQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6bGF5b3V0
QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0
KQoreworICAgIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhyZWxheW91dENoaWxkcmVuLCBwYWdl
TG9naWNhbEhlaWdodCk7CisgICAgCisgICAgLy8gU2hpZnQgdGhlIGZsb3cgdGhyZWFkIGJhY2sg
dXAgdG8gdGhlIHRvcCBvZiB0aGUgYmxvY2suCisgICAgaWYgKGZsb3dUaHJlYWQoKSkKKyAgICAg
ICAgZmxvd1RocmVhZCgpLT5zZXRMb2dpY2FsVG9wKGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0Jl
Zm9yZSgpKTsKK30KKwogY29uc3QgY2hhciogUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6cmVuZGVy
TmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRmxvYXRpbmcoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suaAkocmV2aXNpb24g
MTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBwcml2YXRlOgogICAgIAogICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogCisgICAgdmlydHVhbCB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbEhlaWdodCA9IDApIE9WRVJSSURFOworCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUxvZ2lj
YWxXaWR0aEFuZENvbHVtbldpZHRoKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNr
Rm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoTGF5b3V0VW5pdCYgcGFnZUxvZ2ljYWxI
ZWlnaHQsIGJvb2wmIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgYm9vbCYgaGFzU3BlY2lmaWVk
UGFnZUxvZ2ljYWxIZWlnaHQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCByZWxheW91dEZv
clBhZ2luYXRpb24oYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0VW5p
dCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJikgT1ZFUlJJREU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZC5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDggKzM3LDYgQEAgcHVibGljOgogICAgIH5SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQoKTsK
IAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVM
b2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdCBPVkVSUklERTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNl
dC5jcHAJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtblNldC5oIgogCi0j
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oIgog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgogCkBAIC0yNDksMTAgKzI0
OSw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBhaW50T2JqZWN0KFAKICAgICBpZiAo
IW1fZmxvd1RocmVhZCB8fCAhaXNWYWxpZCgpIHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24p
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKTsK
ICAgICBwYWludENvbHVtblJ1bGVzKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgIHBhaW50
Q29sdW1uQ29udGVudHMocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgcmVzdG9yZVJlZ2lv
bk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CiB9CiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6
OnBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKQEAgLTMwOSw3NiArMzA2LDYgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVt
blNldDo6cGFpbnRDb2x1bW5SdQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNl
dDo6cGFpbnRDb2x1bW5Db250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIC8vIEZvciBlYWNoIHJlY3RhbmdsZSwgc2V0IGl0
IGFzIHRoZSByZWdpb24gcmVjdGFuZ2xlIGFuZCB0aGVuIGxldCBmbG93IHRocmVhZCBwYWludGlu
ZyBkbyB0aGUgcmVzdC4KLSAgICAvLyBXZSBtYWtlIG11bHRpcGxlIGNhbGxzIHRvIHBhaW50Rmxv
d1RocmVhZFBvcnRpb25JblJlZ2lvbiwgY2hhbmdpbmcgdGhlIHJlY3RhbmdsZXMgZWFjaCB0aW1l
LgotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQoKTsKLSAgICBpZiAoIWNvbENv
dW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRVbml0IGNvbEdhcCA9IGNvbHVtbkdh
cCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAg
ICAgIC8vIEZpcnN0IHdlIGdldCB0aGUgY29sdW1uIHJlY3QsIHdoaWNoIGlzIGluIG91ciBsb2Nh
bCBjb29yZGluYXRlIHNwYWNlLCBhbmQgd2UgbWFrZSBpdCBwaHlzaWNhbCBhbmQgYXBwbHkKLSAg
ICAgICAgLy8gdGhlIHBhaW50IG9mZnNldCB0byBpdC4gVGhhdCBnaXZlcyB1cyB0aGUgcGh5c2lj
YWwgbG9jYXRpb24gdGhhdCB3ZSB3YW50IHRvIHBhaW50IHRoZSBjb2x1bW4gYXQuCi0gICAgICAg
IExheW91dFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChpKTsKLSAgICAgICAgZmxpcEZvcldy
aXRpbmdNb2RlKGNvbFJlY3QpOwotICAgICAgICBjb2xSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBOZXh0IHdlIGdldCB0aGUgcG9ydGlvbiBvZiB0aGUgZmxv
dyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIGNvbHVtbi4KLSAgICAgICAgTGF5b3V0
UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uUmVjdEF0KGkpOwotICAg
ICAgICAKLSAgICAgICAgLy8gTm93IGdldCB0aGUgb3ZlcmZsb3cgcmVjdCB0aGF0IGNvcnJlc3Bv
bmRzIHRvIHRoZSBjb2x1bW4uCi0gICAgICAgIExheW91dFJlY3QgZmxvd1RocmVhZE92ZXJmbG93
UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KGZsb3dUaHJlYWRQb3J0aW9u
LCBpLCBjb2xDb3VudCwgY29sR2FwKTsKLQotICAgICAgICAvLyBEbyB0aGUgcGFpbnQgd2l0aCB0
aGUgY29tcHV0ZWQgcmVjdHMuCi0gICAgICAgIGZsb3dUaHJlYWQoKS0+cGFpbnRGbG93VGhyZWFk
UG9ydGlvbkluUmVnaW9uKHBhaW50SW5mbywgdGhpcywgZmxvd1RocmVhZFBvcnRpb24sIGZsb3dU
aHJlYWRPdmVyZmxvd1BvcnRpb24sIGNvbFJlY3QubG9jYXRpb24oKSk7Ci0gICAgfQotfQotCi1i
b29sIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
IGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCi17Ci0gICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2Nh
dGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKLQotICAgIC8vIENoZWNrIG91
ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2Fu
IG9ubHkgYmUgaGl0IGluIHRoZQotICAgIC8vIGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRy
dWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KLSAgICAvLyBGSVhNRTogT25j
ZSB3ZSBzdXBwb3J0IG92ZXJmbG93LCB3ZSBuZWVkIHRvIGludGVyc2VjdCB3aXRoIHRoYXQgYW5k
IG5vdCB3aXRoIHRoZSBib3VuZHMgcmVjdC4KLSAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QgPSBi
b3JkZXJCb3hSZWN0SW5SZWdpb24obG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24oKSk7Ci0gICAg
Ym91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgaWYgKCF2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgfHwgYWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kIHx8ICFsb2NhdGlvbklu
Q29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICAvLyBUaGUgcG9pbnQgaXMgaW4gb25lIHNwZWNpZmljIGNvbHVtbi4gU2luY2Ug
Y29sdW1ucyBjYW4ndCBvdmVybGFwLCB3ZSBkb24ndCBldmVyIGhhdmUgdG8gdGVzdAotICAgIC8v
IG11bHRpcGxlIGNvbHVtbnMuIFB1dCB0aGUgCi0gICAgCi0gICAgLy8gRklYTUU6IEl0IHdvdWxk
IGJlIG5pY2UgdG8ganVtcCByaWdodCB0byB0aGUgc3BlY2lmaWMgY29sdW1uIGJ5IGp1c3QgZG9p
bmcgbWF0aCBvbiB0aGUgcG9pbnQuIFNpbmNlIGNvbHVtbnMKLSAgICAvLyBjYW4ndCBvdmVybGFw
LCB3ZSBzaG91bGRuJ3QgaGF2ZSB0byB3YWxrIGV2ZXJ5IGNvbHVtbiBsaWtlIHRoaXMuIFRoZSBv
bGQgY29sdW1uIGNvZGUgd2Fsa2VkIGFsbCB0aGUgY29sdW1ucywgdGhvdWdoLAotICAgIC8vIHNv
IHRoaXMgaXMgbm8gd29yc2UuIFdlJ2QgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHJlY3QtYmFzZWQg
aGl0IHRlc3RpbmcsIHRob3VnaCwgd2hpY2ggYWN0dWFsbHkgY291bGQgb3ZlcmxhcAotICAgIC8v
IG11bHRpcGxlIGNvbHVtbnMuCi0gICAgTGF5b3V0VW5pdCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsK
LSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgZ2V0IHRo
ZSBjb2x1bW4gcmVjdCwgd2hpY2ggaXMgaW4gb3VyIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UsIGFu
ZCB3ZSBtYWtlIGl0IHBoeXNpY2FsIGFuZCBhcHBseQotICAgICAgICAvLyB0aGUgaGl0IHRlc3Qg
b2Zmc2V0IHRvIGl0LiBUaGF0IGdpdmVzIHVzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiB0aGF0IHdl
IHdhbnQgdG8gcGFpbnQgdGhlIGNvbHVtbiBhdC4KLSAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0
ID0gY29sdW1uUmVjdEF0KGkpOwotICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUoY29sUmVjdCk7
Ci0gICAgICAgIGNvbFJlY3QubW92ZUJ5KGFkanVzdGVkTG9jYXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgLy8gTmV4dCB3ZSBnZXQgdGhlIHBvcnRpb24gb2YgdGhlIGZsb3cgdGhyZWFkIHRoYXQg
Y29ycmVzcG9uZHMgdG8gdGhpcyBjb2x1bW4uCi0gICAgICAgIExheW91dFJlY3QgZmxvd1RocmVh
ZFBvcnRpb24gPSBmbG93VGhyZWFkUG9ydGlvblJlY3RBdChpKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIE5vdyBnZXQgdGhlIG92ZXJmbG93IHJlY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY29s
dW1uLgotICAgICAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24gPSBmbG93
VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdChmbG93VGhyZWFkUG9ydGlvbiwgaSwgY29sQ291bnQs
IGNvbEdhcCk7Ci0KLSAgICAgICAgLy8gRG8gdGhlIGhpdCB0ZXN0IHdpdGggdGhlIGNvbXB1dGVk
IHJlY3RzLgotICAgICAgICBpZiAoZmxvd1RocmVhZCgpLT5oaXRUZXN0Rmxvd1RocmVhZFBvcnRp
b25JblJlZ2lvbih0aGlzLCBmbG93VGhyZWFkUG9ydGlvbiwgZmxvd1RocmVhZE92ZXJmbG93UG9y
dGlvbiwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBjb2xSZWN0LmxvY2F0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xh
eW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwotICAgIHJldHVybiAhcmVzdWx0LmFkZE5vZGVU
b1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVy
LCBib3VuZHNSZWN0KTsKLX0KLQogdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cmVwYWludEZs
b3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGltbWVk
aWF0ZSkgY29uc3QKIHsKICAgICAvLyBGaWd1cmUgb3V0IHRoZSBzdGFydCBhbmQgZW5kIGNvbHVt
bnMgYW5kIG9ubHkgY2hlY2sgd2l0aGluIHRoYXQgcmFuZ2Ugc28gdGhhdCB3ZSBkb24ndCB3YWxr
IHRoZQpAQCAtNDE3LDYgKzM0NCw4OCBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpyZXBh
aW50Rmxvd1RoCiAgICAgfQogfQogCit2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpjb2xsZWN0
TGF5ZXJGcmFnbWVudHMoVmVjdG9yPExheWVyRnJhZ21lbnQ+JiBmcmFnbWVudHMsIGNvbnN0IExh
eW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICAvLyBQdXQgdGhlIGxheWVyIGJvdW5kcyBpbnRvIGZsb3cgdGhyZWFkLWxvY2FsIGNv
b3JkaW5hdGVzIGJ5IGZsaXBwaW5nIGl0IGZpcnN0LgorICAgIExheW91dFJlY3QgbGF5ZXJCb3Vu
ZHNJbkZsb3dUaHJlYWQobGF5ZXJCb3VuZGluZ0JveCk7CisgICAgZmxvd1RocmVhZCgpLT5mbGlw
Rm9yV3JpdGluZ01vZGUobGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQpOworCisgICAgLy8gRG8gdGhl
IHNhbWUgZm9yIHRoZSBkaXJ0eSByZWN0LgorICAgIExheW91dFJlY3QgZGlydHlSZWN0SW5GbG93
VGhyZWFkKGRpcnR5UmVjdCk7CisgICAgZmxvd1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGUo
ZGlydHlSZWN0SW5GbG93VGhyZWFkKTsKKworICAgIC8vIE5vdyB3ZSBjYW4gY29tcGFyZSB3aXRo
IHRoZSBmbG93IHRocmVhZCBwb3J0aW9ucyBvd25lZCBieSBlYWNoIGNvbHVtbi4gRmlyc3QgbGV0
J3MKKyAgICAvLyBzZWUgaWYgdGhlIHJlY3QgaW50ZXJzZWN0cyBvdXIgZmxvdyB0aHJlYWQgcG9y
dGlvbiBhdCBhbGwuCisgICAgTGF5b3V0UmVjdCBjbGlwcGVkUmVjdChsYXllckJvdW5kc0luRmxv
d1RocmVhZCk7CisgICAgY2xpcHBlZFJlY3QuaW50ZXJzZWN0KFJlbmRlclJlZ2lvbjo6Zmxvd1Ro
cmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKSk7CisgICAgaWYgKGNsaXBwZWRSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHdlIGludGVyc2Vj
dCBhdCBsZWFzdCBvbmUgY29sdW1uLiBMZXQncyBmaWd1cmUgb3V0IHRoZSBsb2dpY2FsIHRvcCBh
bmQgbG9naWNhbAorICAgIC8vIGJvdHRvbSBvZiB0aGUgYXJlYSB3ZSdyZSBjaGVja2luZy4KKyAg
ICBMYXlvdXRVbml0IGxheWVyTG9naWNhbFRvcCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBsYXllckJvdW5kc0luRmxvd1RocmVhZC55KCkgOiBsYXllckJvdW5kc0luRmxvd1RocmVhZC54
KCk7CisgICAgTGF5b3V0VW5pdCBsYXllckxvZ2ljYWxCb3R0b20gPSAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGxheWVyQm91bmRzSW5GbG93VGhyZWFkLm1heFkoKSA6IGxheWVyQm91bmRz
SW5GbG93VGhyZWFkLm1heFgoKSkgLSAxOworICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHN0
YXJ0IGFuZCBlbmQgY29sdW1ucyBhbmQgb25seSBjaGVjayB3aXRoaW4gdGhhdCByYW5nZSBzbyB0
aGF0IHdlIGRvbid0IHdhbGsgdGhlCisgICAgLy8gZW50aXJlIGNvbHVtbiBzZXQuCisgICAgdW5z
aWduZWQgc3RhcnRDb2x1bW4gPSBjb2x1bW5JbmRleEF0T2Zmc2V0KGxheWVyTG9naWNhbFRvcCk7
CisgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gY29sdW1uSW5kZXhBdE9mZnNldChsYXllckxvZ2lj
YWxCb3R0b20pOworICAgIAorICAgIExheW91dFVuaXQgY29sTG9naWNhbFdpZHRoID0gY29tcHV0
ZWRDb2x1bW5XaWR0aCgpOworICAgIExheW91dFVuaXQgY29sR2FwID0gY29sdW1uR2FwKCk7Cisg
ICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3VudCgpOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IHN0YXJ0Q29sdW1uOyBpIDw9IGVuZENvbHVtbjsgaSsrKSB7CisgICAgICAgIC8v
IEdldCB0aGUgcG9ydGlvbiBvZiB0aGUgZmxvdyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0byB0
aGlzIGNvbHVtbi4KKyAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZsb3dU
aHJlYWRQb3J0aW9uUmVjdEF0KGkpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGdldCB0aGUg
b3ZlcmZsb3cgcmVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjb2x1bW4uCisgICAgICAgIExh
eW91dFJlY3QgZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uT3Zl
cmZsb3dSZWN0KGZsb3dUaHJlYWRQb3J0aW9uLCBpLCBjb2xDb3VudCwgY29sR2FwKTsKKworICAg
ICAgICAvLyBJbiBvcmRlciB0byBjcmVhdGUgYSBmcmFnbWVudCB3ZSBtdXN0IGludGVyc2VjdCB0
aGUgcG9ydGlvbiBwYWludGVkIGJ5IHRoaXMgY29sdW1uLgorICAgICAgICBMYXlvdXRSZWN0IGNs
aXBwZWRSZWN0KGxheWVyQm91bmRzSW5GbG93VGhyZWFkKTsKKyAgICAgICAgY2xpcHBlZFJlY3Qu
aW50ZXJzZWN0KGZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24pOworICAgICAgICBpZiAoY2xpcHBl
ZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAg
ICAvLyBXZSBhbHNvIG5lZWQgdG8gaW50ZXJzZWN0IHRoZSBkaXJ0eSByZWN0LiBXZSBoYXZlIHRv
IGFwcGx5IGEgdHJhbnNsYXRpb24gYW5kIHNoaWZ0IGJhc2VkIG9mZgorICAgICAgICAvLyBvdXIg
Y29sdW1uIGluZGV4LgorICAgICAgICBMYXlvdXRQb2ludCB0cmFuc2xhdGlvbk9mZnNldDsKKyAg
ICAgICAgTGF5b3V0VW5pdCBpbmxpbmVPZmZzZXQgPSBpICogKGNvbExvZ2ljYWxXaWR0aCArIGNv
bEdhcCk7CisgICAgICAgIGlmICghc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQor
ICAgICAgICAgICAgaW5saW5lT2Zmc2V0ID0gLWlubGluZU9mZnNldDsKKyAgICAgICAgdHJhbnNs
YXRpb25PZmZzZXQuc2V0WChpbmxpbmVPZmZzZXQpOworICAgICAgICBMYXlvdXRVbml0IGJsb2Nr
T2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IC1mbG93VGhyZWFkUG9ydGlvbi55
KCkgOiAtZmxvd1RocmVhZFBvcnRpb24ueCgpOworICAgICAgICBpZiAoaXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSkpCisgICAgICAgICAgICBibG9ja09m
ZnNldCA9IC1ibG9ja09mZnNldDsKKyAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQuc2V0WShibG9j
a09mZnNldCk7CisgICAgICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAg
ICAgICAgIHRyYW5zbGF0aW9uT2Zmc2V0ID0gdHJhbnNsYXRpb25PZmZzZXQudHJhbnNwb3NlZFBv
aW50KCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gaW5jbHVk
ZSB0aGUgbXVsdGljb2x1bW4gc2V0J3MgY29udGVudCBvZmZzZXQgd2l0aGluIHRoZQorICAgICAg
ICAvLyBtdWx0aWNvbHVtbiBibG9jayBhcyB3ZWxsLiBUaGlzIHdvbid0IGJlIGFuIGlzc3VlIHVu
dGlsIHdlIHN0YXJ0IGNyZWF0aW5nIG11bHRpcGxlIG11bHRpY29sdW1uIHNldHMuCisKKyAgICAg
ICAgLy8gU2hpZnQgdGhlIGRpcnR5IHJlY3QgdG8gYmUgaW4gZmxvdyB0aHJlYWQgY29vcmRpbmF0
ZXMgd2l0aCB0aGlzIHRyYW5zbGF0aW9uIGFwcGxpZWQuCisgICAgICAgIExheW91dFJlY3QgdHJh
bnNsYXRlZERpcnR5UmVjdChkaXJ0eVJlY3RJbkZsb3dUaHJlYWQpOworICAgICAgICB0cmFuc2xh
dGVkRGlydHlSZWN0Lm1vdmVCeSgtdHJhbnNsYXRpb25PZmZzZXQpOworICAgICAgICAKKyAgICAg
ICAgLy8gU2VlIGlmIHdlIGludGVyc2VjdCB0aGUgZGlydHkgcmVjdC4KKyAgICAgICAgY2xpcHBl
ZFJlY3QgPSBsYXllckJvdW5kc0luRmxvd1RocmVhZDsKKyAgICAgICAgY2xpcHBlZFJlY3QuaW50
ZXJzZWN0KHRyYW5zbGF0ZWREaXJ0eVJlY3QpOworICAgICAgICBpZiAoY2xpcHBlZFJlY3QuaXNF
bXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBTb21l
dGhpbmcgZG9lcyBuZWVkIHRvIHBhaW50IGluIHRoaXMgY29sdW1uLiBNYWtlIGEgZnJhZ21lbnQg
bm93IGFuZCBzdXBwbHkgdGhlIHBoeXNpY2FsIHRyYW5zbGF0aW9uCisgICAgICAgIC8vIG9mZnNl
dCBhbmQgdGhlIGNsaXAgcmVjdCBmb3IgdGhlIGNvbHVtbiB3aXRoIHRoYXQgb2Zmc2V0IGFwcGxp
ZWQuCisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQ7CisgICAgICAgIGZyYWdtZW50LnBh
Z2luYXRpb25PZmZzZXQgPSB0cmFuc2xhdGlvbk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExh
eW91dFJlY3QgZmxpcHBlZEZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24oZmxvd1RocmVhZE92ZXJm
bG93UG9ydGlvbik7CisgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1RocmVh
ZE92ZXJmbG93UG9ydGlvbik7CisgICAgICAgIGZyYWdtZW50LnBhZ2luYXRpb25DbGlwID0gZmxp
cHBlZEZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb247CisgICAgICAgIGZyYWdtZW50cy5hcHBlbmQo
ZnJhZ21lbnQpOworICAgIH0KK30KKwogY29uc3QgY2hhciogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6
OnJlbmRlck5hbWUoKSBjb25zdAogeyAgICAKICAgICByZXR1cm4gIlJlbmRlck11bHRpQ29sdW1u
U2V0IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtblNldC5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1
dGVkVmFsdWVzJikgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmpl
Y3QoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBwYWdlTG9naWNhbFdpZHRoKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9j
b21wdXRlZENvbHVtbldpZHRoOyB9CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2Fs
SGVpZ2h0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jb21wdXRlZENvbHVtbkhlaWdodDsg
fQpAQCAtMTExLDEwICsxMTAsMTEgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludEZsb3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBi
b29sIGltbWVkaWF0ZSkgY29uc3QgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVj
dExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYsIGNvbnN0IExheW91dFJlY3Qm
IGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkgT1ZFUlJJREU7
CisKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKICAgICAKICAg
ICB2b2lkIHBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0KTsKLSAgICB2b2lkIHBhaW50Q29sdW1uQ29udGVudHMoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKIAogICAgIExheW91dFVuaXQgY29sdW1uR2Fw
KCkgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBjb2x1bW5SZWN0QXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzE3LDcgKzIzMTcsNyBAQCBSZW5kZXJPYmplY3QqIFJl
bmRlck9iamVjdDo6Y29udGFpbmVyKGNvCiAjZW5kaWYKICAgICAgICAgICAgIC8vIFRoZSByZW5k
ZXIgZmxvdyB0aHJlYWQgaXMgdGhlIHRvcCBtb3N0IGNvbnRhaW5pbmcgYmxvY2sKICAgICAgICAg
ICAgIC8vIGZvciB0aGUgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cy4KLSAgICAgICAgICAgIGlm
IChvLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAgICAgIGlmIChvLT5pc091dE9mRmxv
d1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgaWYgKHJlcGFpbnRDb250YWluZXJTa2lwcGVkICYmIG8gPT0gcmVwYWludENvbnRhaW5lcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE0
NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgxLDcgKzM4MSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBp
c1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJl
dHVybiBpc1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCk7IH0K
KyAgICBib29sIGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGlz
UmVuZGVyRmxvd1RocmVhZCgpICYmIGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpOyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtblNldCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC03MzIsNyArNzMzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShT
VkcpCiAgICAgICAgICAgICAgICAgfHwgaXNTVkdGb3JlaWduT2JqZWN0KCkKICNlbmRpZgotICAg
ICAgICAgICAgICAgIHx8IGlzUmVuZGVyRmxvd1RocmVhZCgpOworICAgICAgICAgICAgICAgIHx8
IGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpOwogICAgIH0KIAogICAgIC8vIENvbnZlcnQg
dGhlIGdpdmVuIGxvY2FsIHBvaW50IHRvIGFic29sdXRlIGNvb3JkaW5hdGVzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgTGF5ZXJGcmFn
bWVudDsKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlckJveFJlZ2lvbkluZm87CiBjbGFz
cyBSZW5kZXJGbG93VGhyZWFkOwpAQCAtMTI3LDYgKzEyOCw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgcmVwYWludEZsb3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3Qm
IHJlcGFpbnRSZWN0LCBib29sIGltbWVkaWF0ZSkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
Y29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYsIGNvbnN0IExheW91
dFJlY3QmLCBjb25zdCBMYXlvdXRSZWN0JikgeyB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHNl
dFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwogICAgIHZvaWQgcmVzdG9yZVJlZ2lvbk9iamVj
dHNPcmlnaW5hbFN0eWxlKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQxNDIpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMi0y
NiAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBhIHNob3J0
IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qv
bXVsdGljb2wvbWl4ZWQtcG9zaXRpb25pbmctc3RhY2tpbmctb3JkZXItZXhwZWN0ZWQuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9tdWx0aWNvbC9taXhlZC1wb3NpdGlvbmluZy1zdGFja2lu
Zy1vcmRlci5odG1sOiBBZGRlZC4KKwogMjAxMy0wMi0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBPU1IgZXhpdCBkb2Vzbid0IGtub3cgd2hpY2ggdmly
dHVhbCByZWdpc3RlciB0byB1c2UgZm9yIHRoZSBsYXN0IHJlc3VsdCByZWdpc3RlciBmb3IgcG9z
dF9pbmMgYW5kIHBvc3RfZGVjCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21peGVk
LXBvc2l0aW9uaW5nLXN0YWNraW5nLW9yZGVyLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9taXhlZC1wb3NpdGlvbmluZy1zdGFja2luZy1vcmRl
ci1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNv
bC9taXhlZC1wb3NpdGlvbmluZy1zdGFja2luZy1vcmRlci1leHBlY3RlZC5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDggQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8ZGl2IHN0eWxl
PSJoZWlnaHQ6MjAwcHg7Ym9yZGVyOjVweCBzb2xpZCBibGFjaztwb3NpdGlvbjpyZWxhdGl2ZTt3
aWR0aDoyMTBweCI+Cis8ZGl2IHN0eWxlPSJ3aWR0aDoyMTBweDtoZWlnaHQ6MjAwcHg7YmFja2dy
b3VuZC1jb2xvcjpwdXJwbGU7Ij4zPC9kaXY+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0
ZTtiYWNrZ3JvdW5kLWNvbG9yOmdvbGQ7bGVmdDo1NXB4O3RvcDowcHg7aGVpZ2h0OjIwMHB4O3dp
ZHRoOjEwMHB4Ij4yPC9kaXY+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3Jv
dW5kLWNvbG9yOmxpZ2h0Ymx1ZTt3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7bGVmdDowO2JvdHRv
bTowIj4xPC9kaXY+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNv
bG9yOmxpZ2h0Ymx1ZTt3aWR0aDoxMDBweDtsZWZ0OjExMHB4O3RvcDowO2hlaWdodDoxMDBweCI+
PC9kaXY+Cis8L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbWl4ZWQtcG9z
aXRpb25pbmctc3RhY2tpbmctb3JkZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L211bHRpY29sL21peGVkLXBvc2l0aW9uaW5nLXN0YWNraW5nLW9yZGVyLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21peGVkLXBvc2l0aW9uaW5nLXN0
YWNraW5nLW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKzwhZG9jdHlw
ZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpbnRlcm5hbHMuc2V0dGluZ3Muc2V0
UmVnaW9uQmFzZWRDb2x1bW5zRW5hYmxlZCh0cnVlKQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgc3R5bGU9Ii1tb3otY29sdW1uLXdpZHRoOjEwMHB4OyB3aWR0aDoyMTBweDsgaGVp
Z2h0OjIwMHB4O2JvcmRlcjo1cHggc29saWQgYmxhY2s7IC13ZWJraXQtY29sdW1uLXdpZHRoOjEw
MHB4Oy13ZWJraXQtY29sdW1uLWdhcDoxMHB4OyAtbW96LWNvbHVtbi1nYXA6MTBweCI+CisKKzxk
aXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyI+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNv
bHV0ZTt0b3A6MDtsZWZ0OjA7IGhlaWdodDo0MDBweDsgd2lkdGg6MTAwcHgiPgorPGRpdiBzdHls
ZT0id2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtY29sb3I6cHVycGxlOyI+Mzwv
ZGl2PgorPGRpdiBzdHlsZT0iaGVpZ2h0OjIwMHB4Ij48L2Rpdj4KKzxkaXYgc3R5bGU9IndpZHRo
OjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOnB1cnBsZTsiPjM8L2Rpdj4KKzwv
ZGl2PgorPGRpdiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHotaW5kZXg6MTsgYmFja2dyb3Vu
ZC1jb2xvcjpsaWdodGJsdWU7IHdpZHRoOjEwMCU7IGhlaWdodDoyMDBweDsgdG9wOjEwMHB4Ij4x
PC9kaXY+CisKKzxkaXYgc3R5bGU9InBvc2l0aW9uOmZpeGVkO2JhY2tncm91bmQtY29sb3I6Z29s
ZDtsZWZ0OjY4cHg7dG9wOjEzcHg7aGVpZ2h0OjIwMHB4O3dpZHRoOjEwMHB4Ij4yPC9kaXY+Cis8
L2Rpdj4KKzwvZGl2Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190444</attachid>
            <date>2013-02-26 22:18:15 -0800</date>
            <delta_ts>2013-02-27 13:31:20 -0800</delta_ts>
            <desc>Patch that fixes ChangeLog</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>100398</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDE0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NyBAQAorMjAxMy0wMi0yNiAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gUmV3
cml0ZSB0aGUgcGFpbnRpbmcvc3RhY2tpbmcgbW9kZWwgdG8gYmUgc3BlYyBjb21wbGlhbnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA2MjQuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbXBsZW1lbnRzIGEgbmV3IHBhaW50aW5nIGFuZCBoaXQgdGVzdGluZyBtb2RlbCBmb3IgY29s
dW1ucyB0aGF0IGlzCisgICAgICAgIHNwZWMtY29tcGxpYW50IHdpdGggU2VjdGlvbiAzLjUgb2Yg
dGhlIG11bHRpY29sdW1uIHNwZWNpZmljYXRpb24sIHdoaWNoIHN0YXRlczoKKyAgICAgICAgCisg
ICAgICAgICJBbGwgY29sdW1uIGJveGVzIGluIGEgbXVsdGktY29sdW1uIGVsZW1lbnQgYXJlIGlu
IHRoZSBzYW1lIHN0YWNraW5nIGNvbnRleHQgYW5kCisgICAgICAgIHRoZSBkcmF3aW5nIG9yZGVy
IG9mIHRoZWlyIGNvbnRlbnRzIGlzIGFzIHNwZWNpZmllZCBpbiBDU1MgMi4xLiBDb2x1bW4gYm94
ZXMgZG8KKyAgICAgICAgbm90IGVzdGFibGlzaCBuZXcgc3RhY2tpbmcgY29udGV4dHMuIgorICAg
ICAgICAKKyAgICAgICAgV2hhdCB0aGlzIHN0YXRlbWVudCBtZWFucyBpcyB0aGF0IHlvdSBjYW5u
b3QgcGFpbnQgYSBsYXllciBhbmQgYWxsIGl0cyBzdGFja2luZworICAgICAgICBjb250ZXh0IGRl
c2NlbmRhbnRzIGluIGEgc3RyaXAgaW4gZWFjaCBjb2x1bW4sIHNpbmNlIHNvbWUgb2YgdGhvc2Ug
ZGVzY2VuZGFudHMKKyAgICAgICAgbWlnaHQgYWN0dWFsbHkgImJyZWFrIG91dCIgb2YgdGhlIHBh
Z2luYXRpb24gKGxpa2UgZml4ZWQgcG9zaXRpb25lZCBkZXNjZW5kYW50cykKKyAgICAgICAgYW5k
IG92ZXJsYXAgbXVsdGlwbGUgY29sdW1ucy4gSW4gYWRkaXRpb24gY2xpcHMgbWF5IGFwcGx5IGFj
cm9zcyBwYWdpbmF0aW9uCisgICAgICAgIGJvdW5kYXJpZXMsIGFuZCBhbnkgb3ZlcmxhcCBjYXVz
ZWQgYnkgb3BhY2l0eSBoYXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZAorICAgICAgICB0cmVh
dCB0aGUgcGFnaW5hdGVkIGFuZCB1bnBhZ2luYXRlZCBjb21wb25lbnRzIHRvZ2V0aGVyIGFzIGEg
c2luZ2xlIHVuaXQuCisgICAgICAgIAorICAgICAgICBUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9i
bGVtIGlzIHRvIGludHJvZHVjZSB0aGUgY29uY2VwdCBvZiBhIExheWVyRnJhZ21lbnQuIE5vdwor
ICAgICAgICBhbGwgbGF5ZXJzIHdoZW4gcGFpbnRpbmcgb3IgaGl0IHRlc3RpbmcgY29tcHV0ZSBh
IGZyYWdtZW50IGxpc3QsIGFuZCB0aGF0IGxpc3QKKyAgICAgICAgaXMgdGhlbiB3YWxrZWQgaW4g
b3JkZXIgdG8gZG8gcGFpbnRpbmcgYW5kIGhpdCB0ZXN0aW5nIG9mIGxheWVycy4gSW4gdGhlIHNp
bXBsZQorICAgICAgICB1bnBhZ2luYXRlZCBjYXNlLCBhIGxheWVyIGhhcyBvbmUgTGF5ZXJGcmFn
bWVudCwgYnV0IGluIHRoZSBjYXNlIG9mIGNvbHVtbnMgdGhlCisgICAgICAgIGxheWVyIG1heSBi
ZSBicm9rZW4gdXAgaW50byBtdWx0aXBsZSBmcmFnbWVudHMgcmVwcmVzZW50aW5nIGJveGVzIGlu
IHNlcGFyYXRlCisgICAgICAgIGNvbHVtbnMuCisgICAgICAgIAorICAgICAgICBNdWNoIG9mIHRo
aXMgcGF0Y2ggY29uc2lzdHMgb2YgcmVmYWN0b3JpbmcgYWxsIG9mIHRoZSBwYWludGluZyBhbmQg
aGl0IHRlc3RpbmcKKyAgICAgICAgY29kZSB0byBvcGVyYXRlIG9uIHRoZXNlIGZyYWdtZW50cy4K
KworICAgICAgICBUZXN0OiBmYXN0L211bHRpY29sL21peGVkLXBvc2l0aW9uaW5nLXN0YWNraW5n
LW9yZGVyLmh0bWwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb2xsZWN0TGF5ZXJGcmFnbWVu
dHMpOgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIFJlbmRlckxheWVyIGNv
ZGUgdG8gZmV0Y2ggdGhlIGxheWVyIGZyYWdtZW50cyBmcm9tCisgICAgICAgIHRoZSByZWdpb25z
IG9mIGEgZmxvdyB0aHJlYWQuIFRoZSBmbG93IHRocmVhZCBqdXN0IHR1cm5zIGFyb3VuZCBhbmQg
Y2FsbHMgaW50bworICAgICAgICBlYWNoIG9mIGl0cyByZWdpb25zIG9uZSBieSBvbmUgdG8gZ2V0
IHRoZSBmcmFnbWVudHMgZnJvbSBlYWNoIHJlZ2lvbi4KKworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRzQm91bmRpbmdCb3gpOgorICAgICAgICBBIG5ldyBmdW5j
dGlvbiB0aGF0IGNvbGxlY3RzIExheWVyRnJhZ21lbnRzIGFuZCB0aGVuIGRldGVybWluZXMgdGhl
IGJvdW5kaW5nCisgICAgICAgIGJveCB0aGF0IGVuY2xvc2VzIGFsbCBvZiB0aGUgZnJhZ21lbnRz
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaDoKKyAgICAgICAgRGVj
bGFyYXRpb25zIG9mIHRoZSBuZXcgbWV0aG9kcyBmb3Igb2J0YWluaW5nIGxheWVyIGZyYWdtZW50
cyBhbmQgYm91bmRpbmcKKyAgICAgICAgYm94IGluZm9ybWF0aW9uIGZvciBmcmFnbWVudHMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlUGFnaW5hdGlvbik6CisgICAgICAgIFJlbmRlckxheWVycyBub3cgdHJhY2sgYW4gZW5j
bG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuIElmIHRoaXMgaXMgc2V0LCB0aGVuIHRoZSBsYXllciBr
bm93cyBpdAorICAgICAgICBuZWVkcyB0byBjaGVjayB3aXRoIHRoZSBlbmNsb3NpbmcgcGFnaW5h
dGlvbiBsYXllcidzIGZsb3cgdGhyZWFkIHJlbmRlcmVyIHRvCisgICAgICAgIG9idGFpbiBsYXll
ciBmcmFnbWVudHMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6dHJhbnNwYXJlbmN5Q2xp
cEJveCk6CisgICAgICAgIE1vZGlmaWVkIHRvIG9idGFpbiBhIGZyYWdtZW50cyBib3VuZGluZyBi
b3ggc28gdGhhdCBvcGFjaXR5IGNhbiBvcGVyYXRlIGNvcnJlY3RseSBvbgorICAgICAgICBjb2x1
bW4gYm94ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OmFjY3VtdWxhdGVPZmZzZXRUb3dhcmRzQW5j
ZXN0b3IpOgorICAgICAgICBUaGlzIG1ldGhvZCBoYXMgYmVlbiBwYXRjaGVkIHRvIGFsbG93IGZv
ciBmaXhlZCBwb3NpdGlvbmVkIG9iamVjdHMgdG8gZXNjYXBlCisgICAgICAgIGluLWZsb3cgUmVu
ZGVyRmxvd1RocmVhZHMuIE91ciBpbi1mbG93IFJlbmRlckZsb3dUaHJlYWRzIGJlaGF2ZSBkaWZm
ZXJlbnRseSBmcm9tCisgICAgICAgIENTUyBSZWdpb25zIGZsb3cgdGhyZWFkcyBpbiB0aGF0IHRo
ZXkgYXJlbid0IG5lY2Vzc3NhcmlseSBhY3RpbmcgYXMgdGhlIGNvbnRhaW5pbmcKKyAgICAgICAg
YmxvY2sgZm9yIGFsbCBvZiB0aGVpciBkZXNjZW5kYW50cy4gQ29udGVudCBpcyBhbGxvd2VkIHRv
ICJlc2NhcGUiIGZyb20gdGhlIGZsb3cKKyAgICAgICAgdGhyZWFkLgorCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyk6CisgICAgICAgIEEgbmV3IG1ldGhv
ZCB0aGF0IGNvbGxlY3RzIGZyYWdtZW50cyBmcm9tIHRoZSBmbG93IHRocmVhZCBhbmQgc2V0cyB1
cCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgY2xpcHMgYW5kIHRyYW5zbGF0aW9ucyBvbiBlYWNo
IGZyYWdtZW50LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50VHJhbnNmb3JtZWRMYXllckludG9G
cmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50QmFja2dyb3Vu
ZEZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRGb3Jl
Z3JvdW5kRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAgICBS
ZWZhY3RvcmluZyBvZiBwYWludGluZyB0byBicmVhayBhbGwgaW5kaXZpZHVhbCBwYWludGluZyBz
dGVwcyBvdXQgaW50byBtZXRob2RzIHRoYXQgd2FsayBvdmVyCisgICAgICAgIGZyYWdtZW50IGJv
eGVzLiBUaGlzIGFjdHVhbGx5IGhhZCB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFraW5nIHRoZSBtYWlu
IHBhaW50aW5nIGZ1bmN0aW9uLAorICAgICAgICBwYWludExheWVyQ29udGVudHMsIG11Y2ggY2xl
YW5lciBhbmQgZWFzaWVyIHRvIHJlYWQuIDopCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNy
ZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdENv
bnRlbnRzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0UmVzaXplckluRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KToKKyAgICAgICAgUmVmYWN0b3Jpbmcgb2YgaGl0IHRl
c3RpbmcgdG8gYnJlYWsgYWxsIGluZGl2aWR1YWwgaGl0IHRlc3Rpbmcgc3RlcHMgb3V0IGludG8g
bWV0aG9kcyB0aGF0IHdhbGsgb3ZlcgorICAgICAgICBmcmFnbWVudCBib3hlcy4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmFja2dyb3VuZENsaXBSZWN0KToKKyAg
ICAgICAgTW9kaWZpZWQgdG8gYXZvaWQgdXNpbmcgdGhlIGNsaXAgcmVjdHMgY2FjaGUgd2hlbiBj
cm9zc2luZyBpbnRvIGRpZmZlcmVudCBwYWdpbmF0aW9uIGNvbnRleHRzLAorICAgICAgICBlLmcu
LCBmcm9tIHVucGFnaW5hdGVkIHRvIHBhZ2luYXRlZC4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KToKKyAgICAgICAgTW9kaWZpZWQgYm91bmRpbmdC
b3ggdG8gd29yayB3aXRoIGZyYWdtZW50cy4gQSBuZXcgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRl
IHdoZXRoZXIgb3Igbm90CisgICAgICAgIHRoZSBib3VuZHMgb2YgZnJhZ21lbnRzIG9yIHRoZSBv
cmlnaW5hbCB1bnNwbGl0IGJveCBhcmUgYmVpbmcgY29tcHV0ZWQuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbGxlY3RMYXllcnMpOgorICAgICAgICBGaXggbGF5
ZXIgY29sbGVjdGlvbiBzbyB0aGF0IGluLWZsb3cgUmVuZGVyRmxvd1RocmVhZHMgY2FuIHN0aWxs
IGJlIGNvbGxlY3RlZCwgc2luY2UgaW4tZmxvdworICAgICAgICBSZW5kZXJGbG93VGhyZWFkcyBk
byBub3QgZXN0YWJsaXNoIHN0YWNraW5nIGNvbnRleHRzLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwUmVjdDo6bW92ZUJ5KToKKyAg
ICAgICAgQWRkZWQgYSBtb3ZlQnkgbWV0aG9kIHRoYXQganVzdCB3cmFwIHRoZSBjb3JyZXNwb25k
aW5nIExheW91dFJlY3QgbWV0aG9kLgorCisgICAgICAgIChMYXllckZyYWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRnJhZ21lbnQ6OkxheWVyRnJhZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJGcmFnbWVudDo6c2V0UmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJG
cmFnbWVudDo6bW92ZUJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRnJhZ21lbnQ6OmludGVy
c2VjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKToKKyAgICAgICAgVGhlIG5ldyBMYXllckZyYWdtZW50IHN0cnVjdC4gSG9sZHMgY2xp
cHMgYW5kIHRyYW5zbGF0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGZyYWdtZW50IGJveC4KKwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVh
ZCk6CisgICAgICAgIEhlbHBlciBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIHRoZSByZW5kZXJl
ciBpcyBhbiBvdXQtb2YtZmxvdyBSZW5kZXJGbG93VGhyZWFkLgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
TXVsdGlDb2x1bW5GbG93VGhyZWFkU3R5bGUpOgorICAgICAgICBDaGFuZ2UgdGhlIGZsb3cgdGhy
ZWFkIHN0eWxlIHRvIG5vIGxvbmdlciBlc3RhYmxpc2ggYSBzdGFja2luZyBjb250ZXh0LgorICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmxheW91dEJs
b2NrKToKKyAgICAgICAgUGF0Y2hlZCB0byBtb3ZlIHRoZSBmbG93IHRocmVhZCB0byBhIHBvc2l0
aW9uIHRoYXQgYWxsb3dzIGl0IHRvIGJlIHVudHJhbnNsYXRlZCBpbiB0aGUKKyAgICAgICAgaW5p
dGlhbCBjb2x1bW4uCisKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmg6CisgICAgICAgIChSZW5kZXJNdWx0aUNvbHVtbkJsb2Nr
KToKKyAgICAgICAgbGF5b3V0QmxvY2sgaXMgc3ViY2xhc3NlZCB0byB0d2VhayB0aGUgZmxvdyB0
aHJlYWQncyBwb3NpdGlvbi4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQuaDoKKyAgICAgICAgKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCk6Cisg
ICAgICAgIFRoZSBmbG93IHRocmVhZCBmb3IgbXVsdGktY29sdW1uIGJsb2NrcyBpbXBsZW1lbnRz
IGNvbGxlY3RMYXllckZyYWdtZW50cyB0byBoYW5kIGJhY2sgTGF5ZXJGcmFnbWVudAorICAgICAg
ICBpbmZvcm1hdGlvbiBiYXNlZCBvZmYgaXRzIFJlbmRlck11bHRpQ29sdW1uU2V0cy4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRPYmplY3QpOgorICAgICAgICBDaGFuZ2Vk
IHRvIG5vIGxvbmdlciBwYWludCBjb2x1bW4gY29udGVudHMsIHNpbmNlIHRoZSBsYXllciBjb2Rl
IGlzIGp1c3QgZG9pbmcgdGhhdCBub3cuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRp
Q29sdW1uU2V0Ojpjb2xsZWN0TGF5ZXJGcmFnbWVudHMpOgorICAgICAgICBUaGUgbWV0aG9kIHRo
YXQgZmlndXJlcyBvdXQgd2hhdCBjb2x1bW5zIGFyZSBpbnRlcnNlY3RlZCBieSBhIGxheWVyIGFu
ZCBoYW5kcyBiYWNrCisgICAgICAgIGluaXRpYWwgZnJhZ21lbnQgaW5mb3JtYXRpb24uCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaDoKKyAgICAgICAgKFJlbmRl
ck11bHRpQ29sdW1uU2V0KToKKyAgICAgICAgRGVjbGFyYXRpb24gb2YgY29sbGVjdExheWVyRnJh
Z21lbnRzLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29udGFpbmVyKToKKyAgICAgICAgUGF0
Y2ggY29udGFpbmVyKCkgdG8gYWxsb3cgZml4ZWQgcG9zaXRpb25lZCBvYmplY3RzIHRvIGVzY2Fw
ZSBpbi1mbG93IFJlbmRlckZsb3dUaHJlYWRzLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzSW5G
bG93UmVuZGVyRmxvd1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omlz
T3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCk6CisgICAgICAgIE1ldGhvZHMgZm9yIGRpc3Rpbmd1
aXNoaW5nIGJldHdlZW4gaW4tZmxvdyBhbmQgb3V0LW9mLWZsb3cgUmVuZGVyRmxvd1RocmVhZHMu
CisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2FuQ29udGFpbkZpeGVkUG9zaXRp
b25PYmplY3RzKToKKyAgICAgICAgUGF0Y2ggY2FuQ29udGFpbkZpeGVkUG9zaXRpb25PYmplY3Rz
KCkgdG8gYWxsb3cgZml4ZWQgcG9zaXRpb25lZCBvYmplY3RzIHRvIGVzY2FwZQorICAgICAgICBp
bi1mbG93IFJlbmRlckZsb3dUaHJlYWRzLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbGxlY3RM
YXllckZyYWdtZW50cyk6CisgICAgICAgIChSZW5kZXJSZWdpb24pOgorICAgICAgICBUaGUgdmly
dHVhbCBmdW5jdGlvbnMgb24gUmVnaW9uIGZvciBmcmFnbWVudCBjb2xsZWN0aW9uLgorCiAyMDEz
LTAyLTI2ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
VjhdIFJlbW92ZSBFdmVudDo6ZGF0YVRyYW5zZmVyQXR0ckdldHRlckN1c3RvbSgpIGFuZCBFdmVu
dDo6dmFsdWVBdHRyU2V0dGVyQ3VzdG9tKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTU5LDYgKzk1OSwzNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dp
CiAgICAgICAgIHZpZXcoKS0+Zmxvd1RocmVhZENvbnRyb2xsZXIoKS0+ZGVjcmVtZW50Rmxvd1Ro
cmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCk7CiB9CiAKK3ZvaWQgUmVuZGVyRmxv
d1RocmVhZDo6Y29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYgbGF5
ZXJGcmFnbWVudHMsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVk
KTsKKyAgICAKKyAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOworICAgICAgICByZWdp
b24tPmNvbGxlY3RMYXllckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0Jv
eCwgZGlydHlSZWN0KTsKKyAgICB9Cit9CisKK0xheW91dFJlY3QgUmVuZGVyRmxvd1RocmVhZDo6
ZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCkK
K3sKKyAgICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVkKTsKKyAgICAKKyAgICBMYXlvdXRS
ZWN0IHJlc3VsdDsKKyAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsr
aXRlcikgeworICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOworICAgICAgICBM
YXllckZyYWdtZW50cyBmcmFnbWVudHM7CisgICAgICAgIHJlZ2lvbi0+Y29sbGVjdExheWVyRnJh
Z21lbnRzKGZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0JveCwgUGFpbnRJbmZvOjppbmZpbml0ZVJl
Y3QoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhZ21lbnRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBMYXllckZyYWdtZW50IGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0
KGkpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBmcmFnbWVudFJlY3QobGF5ZXJCb3VuZGluZ0Jv
eCk7CisgICAgICAgICAgICBmcmFnbWVudFJlY3QuaW50ZXJzZWN0KGZyYWdtZW50LnBhZ2luYXRp
b25DbGlwKTsKKyAgICAgICAgICAgIGZyYWdtZW50UmVjdC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5h
dGlvbk9mZnNldCk7CisgICAgICAgICAgICByZXN1bHQudW5pdGUoZnJhZ21lbnRSZWN0KTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBDdXJyZW50UmVu
ZGVyRmxvd1RocmVhZE1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5l
cihSZW5kZXJGbG93VGhyZWFkKiByZW5kZXJGbG93VGhyZWFkKQogICAgIDogbV9yZW5kZXJGbG93
VGhyZWFkKHJlbmRlckZsb3dUaHJlYWQpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmgJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgTGF5ZXJGcmFnbWVudDsK
IGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJlbmRl
clJlZ2lvbjsKQEAgLTE0Myw2ICsxNDQsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0F1dG9Mb2dp
Y2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCgpIGNvbnN0OwogI2VuZGlmCiAKKyAgICB2
b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhWZWN0b3I8TGF5ZXJGcmFnbWVudD4mLCBjb25zdCBM
YXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3Qp
OworICAgIExheW91dFJlY3QgZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYg
bGF5ZXJCb3VuZGluZ0JveCk7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBA
IFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGUKICAgICAsIG1fcmVmbGVj
dGlvbigwKQogICAgICwgbV9zY3JvbGxDb3JuZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQorICAg
ICwgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09u
bHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCk7CiAgICAgbV9pc1NlbGZQYWludGluZ0xheWVy
ID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOwpAQCAtNDA1LDggKzQwNiwxMCBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSCiAKICAgICBpZiAoZmxhZ3MgJiBV
cGRhdGVQYWdpbmF0aW9uKQogICAgICAgICB1cGRhdGVQYWdpbmF0aW9uKCk7Ci0gICAgZWxzZQor
ICAgIGVsc2UgewogICAgICAgICBtX2lzUGFnaW5hdGVkID0gZmFsc2U7CisgICAgICAgIG1fZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsKKyAgICB9CiAKICAgICBpZiAobV9oYXNWaXNpYmxl
Q29udGVudCkgewogICAgICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygp
OwpAQCAtNDUwLDcgKzQ1Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zKFIKICNlbmRpZgogCiAgICAgaWYgKHVzZVJlZ2lvbkJhc2VkQ29sdW1ucygpICYmIHJlbmRl
cmVyKCktPmlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0
ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVQYWdpbmF0aW9uKCk7CiAgICAgICAgIGZsYWdzIHw9
IFVwZGF0ZVBhZ2luYXRpb247CiAgICAgfQogICAgIApAQCAtOTIzLDI2ICs5MjYsMzEgQEAgYm9v
bCBSZW5kZXJMYXllcjo6dXNlUmVnaW9uQmFzZWRDb2x1bW5zKAogdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlUGFnaW5hdGlvbigpCiB7CiAgICAgbV9pc1BhZ2luYXRlZCA9IGZhbHNlOworICAgIG1f
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsKKwogICAgIGlmIChpc0NvbXBvc2l0ZWQoKSB8
fCAhcGFyZW50KCkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFdlIHdpbGwgaGF2ZSB0byBk
ZWFsIHdpdGggcGFnaW5hdGVkIGNvbXBvc2l0aW5nIGxheWVycyBzb21lZGF5LgogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHRoZSBSZW5kZXJWaWV3IGNhbid0IGJlIHBhZ2luYXRl
ZC4gIEV2ZW50dWFsbHkgcHJpbnRpbmcgd2lsbCBtb3ZlIHRvIGEgbW9kZWwgd2hlcmUgaXQgaXMg
dGhvdWdoLgotICAgIAorCiAgICAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBw
YWdpbmF0ZWQgYm9vbGVhbnMgZm9yIHRoZSBvbGQgY29sdW1uIGNvZGUgYW5kIHRoZSBuZXcgY29s
dW1uIGNvZGUKICAgICAvLyBpcyB0aGF0IGVhY2ggcGFnaW5hdGVkIGxheWVyIGhhcyB0byBwYWlu
dCBvbiBpdHMgb3duIHdpdGggdGhlIG5ldyBjb2RlLiBUaGVyZSBpcyBubwogICAgIC8vIHJlY3Vy
cmluZyBpbnRvIGNoaWxkIGxheWVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtX2lzUGFnaW5hdGVk
IGJpdHMgZm9yIHRoZSBuZXcgY29sdW1uIGNvZGUgY2FuJ3QganVzdCBiZSBzZXQgb24KICAgICAv
LyAicm9vdHMiIHRoYXQgZ2V0IHNwbGl0IGFuZCBwYWludCBhbGwgdGhlaXIgZGVzY2VuZGFudHMu
IEluc3RlYWQgZWFjaCBsYXllciBoYXMgdG8gYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgYW5kCiAg
ICAgLy8gZ2VudWluZWx5IGtub3cgaWYgaXQgaXMgZ29pbmcgdG8gaGF2ZSB0byBzcGxpdCBpdHNl
bGYgdXAgd2hlbiBwYWludGluZyBvbmx5IGl0cyBjb250ZW50cyAoYW5kIG5vdCBhbnkgb3RoZXIg
ZGVzY2VuZGFudAotICAgIC8vIGxheWVycykuCisgICAgLy8gbGF5ZXJzKS4gV2UgdHJhY2sgYW4g
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyIGluc3RlYWQgb2YgdXNpbmcgYSBzaW1wbGUgYml0LCBz
aW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sKKyAgICAvLyB0byB0aGF0IGxheWVy
IGVhc2lseS4KICAgICBib29sIG5ld0NvbHVtbnNVc2VkID0gdXNlUmVnaW9uQmFzZWRDb2x1bW5z
KCk7CiAgICAgaWYgKG5ld0NvbHVtbnNVc2VkICYmIHJlbmRlcmVyKCktPmlzSW5GbG93UmVuZGVy
Rmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIG1faXNQYWdpbmF0ZWQgPSB0cnVlOworICAgICAgICBt
X2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IHRoaXM7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoaXNOb3JtYWxGbG93T25seSgpKSB7Ci0gICAgICAgIGlmIChuZXdDb2x1bW5z
VXNlZCkKLSAgICAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBwYXJlbnQoKS0+aXNQYWdpbmF0ZWQo
KTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobmV3Q29sdW1uc1VzZWQpIHsKKyAgICAgICAg
ICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gcGFyZW50KCktPmVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpOworICAgICAgICAgICAgaWYgKG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVy
ICYmIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyLT5oYXNUcmFuc2Zvcm0oKSkKKyAgICAgICAg
ICAgICAgICBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciA9IDA7CisgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IHBhcmVudCgpLT5yZW5kZXJlcigpLT5oYXNDb2x1
bW5zKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05NTYsNyArOTY0LDkgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlvbigpCiAgICAgICAgICAgICAgY29udGFpbmluZ0Js
b2NrICYmIGNvbnRhaW5pbmdCbG9jayAhPSB2aWV3OwogICAgICAgICAgICAgIGNvbnRhaW5pbmdC
bG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgICAg
IGlmIChjb250YWluaW5nQmxvY2stPmhhc0xheWVyKCkpIHsKLSAgICAgICAgICAgICAgICBtX2lz
UGFnaW5hdGVkID0gY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5pc1BhZ2luYXRlZCgpOworICAg
ICAgICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gY29udGFpbmluZ0Jsb2Nr
LT5sYXllcigpLT5lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgJiYgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXItPmhhc1RyYW5zZm9ybSgpKQorICAgICAgICAgICAgICAgICAgICBtX2VuY2xvc2luZ1BhZ2lu
YXRpb25MYXllciA9IDA7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0xNTgyLDcgKzE1OTIsNyBAQCBzdGF0aWMgTGF5b3V0UmVjdCB0cmFuc3Bh
cmVuY3lDbGlwQm94KGNvCiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGVsdGEueCgpLCBk
ZWx0YS55KCkpOwogICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiAqbGF5ZXItPnRyYW5z
Zm9ybSgpOwogCi0gICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBsYXllci0+Ym91bmRpbmdC
b3gobGF5ZXIpOworICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gbGF5ZXItPmJvdW5kaW5n
Qm94KGxheWVyLCBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlcyk7CiAgICAgICAgIGV4cGFu
ZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9uKGNsaXBSZWN0LCBsYXllciwgbGF5
ZXIsIHBhaW50QmVoYXZpb3IpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAgICAgbGF5
ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmZpbHRlck91dHNldHMoKS5leHBhbmRSZWN0KGNsaXBS
ZWN0KTsKQEAgLTE1OTAsNyArMTYwMCw3IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHRyYW5zcGFyZW5j
eUNsaXBCb3goY28KICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBSZWN0KTsK
ICAgICB9CiAgICAgCi0gICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGxheWVyLT5ib3VuZGluZ0Jv
eChyb290TGF5ZXIpOworICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBsYXllci0+Ym91bmRpbmdC
b3gocm9vdExheWVyLCBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlcyk7CiAgICAgZXhwYW5k
Q2xpcFJlY3RGb3JEZXNjZW5kYW50c0FuZFJlZmxlY3Rpb24oY2xpcFJlY3QsIGxheWVyLCByb290
TGF5ZXIsIHBhaW50QmVoYXZpb3IpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICBsYXll
ci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZmlsdGVyT3V0c2V0cygpLmV4cGFuZFJlY3QoY2xpcFJl
Y3QpOwpAQCAtMTgxNCwxMiArMTgyNCwyMCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlckxh
eWVyKiBhY2N1bXVsCiAgICAgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVuZGVyZXIg
PSBsYXllci0+cmVuZGVyZXIoKTsKICAgICBFUG9zaXRpb24gcG9zaXRpb24gPSByZW5kZXJlci0+
c3R5bGUoKS0+cG9zaXRpb24oKTsKIAorICAgIC8vIEZJWE1FOiBTcGVjaWFsIGNhc2luZyBSZW5k
ZXJGbG93VGhyZWFkIHNvIG11Y2ggZm9yIGZpeGVkIHBvc2l0aW9uaW5nIGhlcmUgaXMgbm90IGdy
ZWF0LgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZpeGVkRmxvd1RocmVhZENvbnRhaW5lciA9IDA7
CisgICAgaWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgcmVuZGVyZXItPmluUmVuZGVy
Rmxvd1RocmVhZCgpKSB7CisgICAgICAgIGZpeGVkRmxvd1RocmVhZENvbnRhaW5lciA9IHJlbmRl
cmVyLT5lbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCk7CisgICAgICAgIGlmICghZml4ZWRGbG93
VGhyZWFkQ29udGFpbmVyLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIGZp
eGVkRmxvd1RocmVhZENvbnRhaW5lciA9IDA7CisgICAgfQorCiAgICAgLy8gRklYTUU6IFBvc2l0
aW9uaW5nIG9mIG91dC1vZi1mbG93KGZpeGVkLCBhYnNvbHV0ZSkgZWxlbWVudHMgY29sbGVjdGVk
IGluIGEgUmVuZGVyRmxvd1RocmVhZAogICAgIC8vIG1heSBuZWVkIHRvIGJlIHJldmlzaXRlZCBp
biBhIGZ1dHVyZSBwYXRjaC4KICAgICAvLyBJZiB0aGUgZml4ZWQgcmVuZGVyZXIgaXMgaW5zaWRl
IGEgUmVuZGVyRmxvd1RocmVhZCwgd2Ugc2hvdWxkIG5vdCBjb21wdXRlIGxvY2F0aW9uIHVzaW5n
IGxvY2FsVG9BYnNvbHV0ZSwKICAgICAvLyBzaW5jZSBsb2NhbFRvQWJzb2x1dGUgbWFwcyB0aGUg
Y29vcmRpbmF0ZXMgZnJvbSBuYW1lZCBmbG93IHRvIHJlZ2lvbnMgY29vcmRpbmF0ZXMgYW5kIHJl
Z2lvbnMgY2FuIGJlCiAgICAgLy8gcG9zaXRpb25lZCBpbiBhIGNvbXBsZXRlbHkgZGlmZmVyZW50
IHBsYWNlIGluIHRoZSB2aWV3cG9ydCAoUmVuZGVyVmlldykuCi0gICAgaWYgKHBvc2l0aW9uID09
IEZpeGVkUG9zaXRpb24gJiYgIXJlbmRlcmVyLT5pblJlbmRlckZsb3dUaHJlYWQoKSAmJiAoIWFu
Y2VzdG9yTGF5ZXIgfHwgYW5jZXN0b3JMYXllciA9PSByZW5kZXJlci0+dmlldygpLT5sYXllcigp
KSkgeworICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYmICFmaXhlZEZsb3dUaHJl
YWRDb250YWluZXIgJiYgKCFhbmNlc3RvckxheWVyIHx8IGFuY2VzdG9yTGF5ZXIgPT0gcmVuZGVy
ZXItPnZpZXcoKS0+bGF5ZXIoKSkpIHsKICAgICAgICAgLy8gSWYgdGhlIGZpeGVkIGxheWVyJ3Mg
Y29udGFpbmVyIGlzIHRoZSByb290LCBqdXN0IGFkZCBpbiB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3
LiBXZSBjYW4gb2J0YWluIHRoaXMgYnkgY2FsbGluZwogICAgICAgICAvLyBsb2NhbFRvQWJzb2x1
dGUoKSBvbiB0aGUgUmVuZGVyVmlldy4KICAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSByZW5k
ZXJlci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgSXNGaXhlZCk7CkBAIC0xODMwLDcg
KzE4NDgsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlckxheWVyKiBhY2N1bXVsCiAgICAg
Ly8gRm9yIHRoZSBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGluc2lkZSBhIHJlbmRlciBmbG93
IHRocmVhZCwgd2Ugc2hvdWxkIGFsc28gc2tpcCB0aGUgY29kZSBwYXRoIGJlbG93CiAgICAgLy8g
T3RoZXJ3aXNlLCBmb3IgdGhlIGNhc2Ugb2YgYW5jZXN0b3JMYXllciA9PSByb290TGF5ZXIgYW5k
IGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudCBjaGlsZCBvZiBhIHRyYW5zZm9ybWVkCiAgICAgLy8g
ZWxlbWVudCBpbiByZW5kZXIgZmxvdyB0aHJlYWQsIHdlIHdpbGwgaGl0IHRoZSBmaXhlZCBwb3Np
dGlvbmVkIGNvbnRhaW5lciBiZWZvcmUgaGl0dGluZyB0aGUgYW5jZXN0b3IgbGF5ZXIuCi0gICAg
aWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgIXJlbmRlcmVyLT5pblJlbmRlckZsb3dU
aHJlYWQoKSkgeworICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYmICFmaXhlZEZs
b3dUaHJlYWRDb250YWluZXIpIHsKICAgICAgICAgLy8gRm9yIGEgZml4ZWQgbGF5ZXJzLCB3ZSBu
ZWVkIHRvIHdhbGsgdXAgdG8gdGhlIHJvb3QgdG8gc2VlIGlmIHRoZXJlJ3MgYSBmaXhlZCBwb3Np
dGlvbiBjb250YWluZXIKICAgICAgICAgLy8gKGUuZy4gYSB0cmFuc2Zvcm1lZCBsYXllcikuIEl0
J3MgYW4gZXJyb3IgdG8gY2FsbCBjb252ZXJ0VG9MYXllckNvb3JkcygpIGFjcm9zcyBhIGxheWVy
IHdpdGggYSB0cmFuc2Zvcm0sCiAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBhbHdheXMgZmluZCB0
aGUgYW5jZXN0b3IgYXQgb3IgYmVmb3JlIHdlIGZpbmQgdGhlIGZpeGVkIHBvc2l0aW9uIGNvbnRh
aW5lci4KQEAgLTE4ODMsNyArMTkwMSw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyTGF5
ZXIqIGFjY3VtdWwKIAogICAgICAgICAvLyBXZSBzaG91bGQgbm90IHJlYWNoIFJlbmRlclZpZXcg
bGF5ZXIgcGFzdCB0aGUgUmVuZGVyRmxvd1RocmVhZCBsYXllciBmb3IgYW55CiAgICAgICAgIC8v
IGNoaWxkcmVuIG9mIHRoZSBSZW5kZXJGbG93VGhyZWFkLgotICAgICAgICBpZiAocmVuZGVyZXIt
PmluUmVuZGVyRmxvd1RocmVhZCgpICYmICFyZW5kZXJlci0+aXNSZW5kZXJGbG93VGhyZWFkKCkp
CisgICAgICAgIGlmIChyZW5kZXJlci0+aW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgIWxheWVyLT5p
c091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgIEFTU0VSVChwYXJlbnRM
YXllciAhPSByZW5kZXJlci0+dmlldygpLT5sYXllcigpKTsKIAogICAgICAgICBpZiAoZm91bmRB
bmNlc3RvckZpcnN0KSB7CkBAIC0zNTA1LDcgKzM1MjMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2hvdWxkU3VwcHJlc3NQYWludGluCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0KIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykK
IHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0zNTU3LDYgKzM1NzQsMTEg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbgogICAgICAgICAgICAg
ICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKGNvbnRleHQsIHBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgcGFpbnRpbmdJbmZvLnBhaW50QmVoYXZp
b3IpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigp
KSB7CisgICAgICAgICAgICBwYWludFRyYW5zZm9ybWVkTGF5ZXJJbnRvRnJhZ21lbnRzKGNvbnRl
eHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2
ZSBiZWVuIGNhbGN1bGF0ZWQuCiAgICAgICAgIENsaXBSZWN0IGNsaXBSZWN0ID0gcGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0OwogICAgICAgICBpZiAocGFyZW50KCkpIHsKQEAgLTM1NjksMjUg
KzM1OTEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29uCiAgICAg
ICAgICAgICBwYXJlbnQoKS0+Y2xpcFRvUmVjdChwYWludGluZ0luZm8ucm9vdExheWVyLCBjb250
ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0KTsKICAgICAgICAgfQog
Ci0gICAgICAgIC8vIEFkanVzdCB0aGUgdHJhbnNmb3JtIHN1Y2ggdGhhdCB0aGUgcmVuZGVyZXIn
cyB1cHBlciBsZWZ0IGNvcm5lciB3aWxsIHBhaW50IGF0ICgwLDApIGluIHVzZXIgc3BhY2UuCi0g
ICAgICAgIC8vIFRoaXMgaW52b2x2ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBwb3NpdGlvbiBvZiB0
aGUgbGF5ZXIgaW4gb3VyIGN1cnJlbnQgY29vcmRpbmF0ZSBzcGFjZSwgYnV0IHByZXNlcnZpbmcK
LSAgICAgICAgLy8gdGhlIGFjY3VtdWxhdGVkIGVycm9yIGZvciBzdWItcGl4ZWwgbGF5b3V0Lgot
ICAgICAgICBMYXlvdXRQb2ludCBkZWx0YTsKLSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMo
cGFpbnRpbmdJbmZvLnJvb3RMYXllciwgZGVsdGEpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm0obGF5ZXJUcmFuc2Zvcm0pOwotICAgICAgICBJbnRQb2ludCByb3VuZGVk
RGVsdGEgPSByb3VuZGVkSW50UG9pbnQoZGVsdGEpOwotICAgICAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlUmlnaHQocm91bmRlZERlbHRhLngoKSwgcm91bmRlZERlbHRhLnkoKSk7Ci0gICAgICAgIExh
eW91dFNpemUgYWRqdXN0ZWRTdWJQaXhlbEFjY3VtdWxhdGlvbiA9IHBhaW50aW5nSW5mby5zdWJQ
aXhlbEFjY3VtdWxhdGlvbiArIChkZWx0YSAtIHJvdW5kZWREZWx0YSk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBBcHBseSB0aGUgdHJhbnNmb3JtLgotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotICAgICAgICAgICAg
Y29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpKTsKLQotICAg
ICAgICAgICAgLy8gTm93IGRvIGEgcGFpbnQgd2l0aCB0aGUgcm9vdCBsYXllciBzaGlmdGVkIHRv
IGJlIHVzLgotICAgICAgICAgICAgTGF5ZXJQYWludGluZ0luZm8gdHJhbnNmb3JtZWRQYWludGlu
Z0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3Qo
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KSksIHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
LCBhZGp1c3RlZFN1YlBpeGVsQWNjdW11bGF0aW9uLCBwYWludGluZ0luZm8ucGFpbnRpbmdSb290
LCBwYWludGluZ0luZm8ucmVnaW9uLCBwYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyk7
Ci0gICAgICAgICAgICBwYWludExheWVyQ29udGVudHNBbmRSZWZsZWN0aW9uKGNvbnRleHQsIHRy
YW5zZm9ybWVkUGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKLSAgICAgICAgfSAgICAgICAgCisg
ICAgICAgIHBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKGNvbnRleHQsIHBhaW50aW5nSW5m
bywgcGFpbnRGbGFncyk7CiAKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2xpcC4KICAgICAgICAg
aWYgKHBhcmVudCgpKQpAQCAtMzcxOCw3ICszNzIyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKEdyYQogCiAgICAgICAgICAgICAvLyBSZXdpcmUgdGhlIG9sZCBjb250
ZXh0IHRvIGEgbWVtb3J5IGJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4gY2FwdHVyZSB0aGUgY29udGVu
dHMgb2YgdGhlIGxheWVyLgogICAgICAgICAgICAgLy8gTk9URTogV2Ugc2F2ZWQgdGhlIG9sZCBj
b250ZXh0IGluIHRoZSAidHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0IiBsb2NhbCB2YXJpYWJsZSwg
dG8gYmUgYWJsZSB0byBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllcgotICAgICAgICAgICAgLy8g
b24gdGhlIG9yaWdpbmFsIGNvbnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRl
ckVmZmVjdCIgYWZ0ZXIgZWFjaCB0cmFuc3BhcmVueSBsYXllciBjYWxsLiBBbHNvLCBub3RlIHRo
YXQgCisgICAgICAgICAgICAvLyBvbiB0aGUgb3JpZ2luYWwgY29udGV4dCBhbmQgYXZvaWQgZHVw
bGljYXRpbmcgImJlZ2luRmlsdGVyRWZmZWN0IiBhZnRlciBlYWNoIHRyYW5zcGFyZW5jeSBsYXll
ciBjYWxsLiBBbHNvLCBub3RlIHRoYXQgCiAgICAgICAgICAgICAvLyBiZWdpblRyYW5zcGFyZW5j
eUxheWVycyB3aWxsIG9ubHkgY3JlYXRlIGEgc2luZ2xlIGxhenkgdHJhbnNwYXJlbmN5IGxheWVy
LCBldmVuIHRob3VnaCBpdCBpcyBjYWxsZWQgdHdpY2UgaW4gdGhpcyBtZXRob2QuCiAgICAgICAg
ICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5iZWdpbkZpbHRlckVmZmVjdChjb250ZXh0KTsK
IApAQCAtMzczMiwyOCArMzczNiwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29u
dGVudHMoR3JhCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKLQotICAg
IC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQgdXNlIG9ubHkgd2hlbiB3ZSBu
ZWVkIHRoZW0uCi0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKLSAgICBDbGlwUmVjdCBkYW1h
Z2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0OwotICAgIExheW91dFBvaW50IHBh
aW50T2Zmc2V0OwogCi0gICAgaWYgKHNob3VsZFBhaW50Q29udGVudCB8fCBzaG91bGRQYWludE91
dGxpbmUgfHwgaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7Ci0gICAgICAgIENsaXBSZWN0
c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJlZ2lvbiwgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1w
b3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMs
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVy
UGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92
ZXJmbG93Q2xpcCk7Ci0gICAgICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwg
Y2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgJm9mZnNldEZyb21Sb290KTsKLSAgICAgICAg
cGFpbnRPZmZzZXQgPSB0b1BvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hM
b2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pOworICAg
IGlmIChmaWx0ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSAmJiBoYXZlVHJhbnNw
YXJlbmN5KSB7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYSBmaWx0ZXIgYW5kIHRyYW5zcGFyZW5j
eSwgd2UgaGF2ZSB0byBlYWdlcmx5IHN0YXJ0IGEgdHJhbnNwYXJlbmN5IGxheWVyIGhlcmUsIHJh
dGhlciB0aGFuIHJpc2sgYSBjaGlsZCBsYXllciBsYXppbHkgc3RhcnRzIG9uZSB3aXRoIHRoZSB3
cm9uZyBjb250ZXh0LgorICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVu
Y3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKICAgICB9
CisjZW5kaWYKIAotICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBhaW50aW5nSW5mby5w
YWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0OwotICAgIGJvb2wgc2Vs
ZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhh
dmlvclNlbGVjdGlvbk9ubHk7Ci0gICAgCi0gICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9y
ID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKLSAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRM
YXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQotICAgICAgICBwYWludEJlaGF2aW9yIHw9
IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7Ci0gICAgZWxzZSBpZiAobG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5KQotICAgICAgICBw
YWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9ubHk7Ci0gICAgCiAg
ICAgLy8gSWYgdGhpcyBsYXllcidzIHJlbmRlcmVyIGlzIGEgY2hpbGQgb2YgdGhlIHBhaW50aW5n
Um9vdCwgd2UgcmVuZGVyIHVuY29uZGl0aW9uYWxseSwgd2hpY2gKICAgICAvLyBpcyBkb25lIGJ5
IHBhc3NpbmcgYSBuaWwgcGFpbnRpbmdSb290IGRvd24gdG8gb3VyIHJlbmRlcmVyIChhcyBpZiBu
byBwYWludGluZ1Jvb3Qgd2FzIGV2ZXIgc2V0KS4KICAgICAvLyBFbHNlLCBvdXIgcmVuZGVyZXIg
dHJlZSBtYXkgb3IgbWF5IG5vdCBjb250YWluIHRoZSBwYWludGluZyByb290LCBzbyB3ZSBwYXNz
IHRoYXQgcm9vdCBhbG9uZwpAQCAtMzc2NSw3OSArMzc1NCw0MyBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJs
YXBUZXN0UmVxdWVzdHMgJiYgaXNTZWxmUGFpbnRpbmdMYXllcikKICAgICAgICAgcGVyZm9ybU92
ZXJsYXBUZXN0cygqbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cywgbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCB0aGlzKTsKIAotICAgIC8vIFdlIHdhbnQgdG8gcGFpbnQg
b3VyIGxheWVyLCBidXQgb25seSBpZiB3ZSBpbnRlcnNlY3QgdGhlIGRhbWFnZSByZWN0LgotICAg
IGlmICh0aGlzICE9IGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpKQotICAgICAgICBzaG91
bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3QobGF5ZXJCb3VuZHMsIGRhbWFn
ZVJlY3QucmVjdCgpLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9v
dCk7CisgICAgYm9vbCBmb3JjZUJsYWNrVGV4dCA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVo
YXZpb3IgJiBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQ7CisgICAgYm9vbCBzZWxlY3Rpb25P
bmx5ICA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yU2Vs
ZWN0aW9uT25seTsKKyAgICAKKyAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IgPSBQYWlu
dEJlaGF2aW9yTm9ybWFsOworICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFp
bnRpbmdTa2lwUm9vdEJhY2tncm91bmQpCisgICAgICAgIHBhaW50QmVoYXZpb3IgfD0gUGFpbnRC
ZWhhdmlvclNraXBSb290QmFja2dyb3VuZDsKKyAgICBlbHNlIGlmIChsb2NhbFBhaW50RmxhZ3Mg
JiBQYWludExheWVyUGFpbnRpbmdSb290QmFja2dyb3VuZE9ubHkpCisgICAgICAgIHBhaW50QmVo
YXZpb3IgfD0gUGFpbnRCZWhhdmlvclJvb3RCYWNrZ3JvdW5kT25seTsKIAotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0
KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVy
IGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFyZW5j
eSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0
cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KLSAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvcik7CisgICAgTGF5ZXJGcmFnbWVudHMgbGF5ZXJGcmFnbWVudHM7CisgICAgaWYgKHNo
b3VsZFBhaW50Q29udGVudCB8fCBzaG91bGRQYWludE91dGxpbmUgfHwgaXNQYWludGluZ092ZXJs
YXlTY3JvbGxiYXJzKSB7CisgICAgICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3
aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBhbmQgcGFpbnQgb2Zmc2V0cyBmb3IgZWFj
aCBsYXllciBmcmFnbWVudCwgYXMgd2VsbCBhcyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudCBv
ZiBlYWNoCisgICAgICAgIC8vIGZyYWdtZW50IHNob3VsZCBwYWludC4KKyAgICAgICAgY29sbGVj
dEZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBs
b2NhbFBhaW50aW5nSW5mby5yZWdpb24sIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0
LAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplLAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50
TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVz
cGVjdE92ZXJmbG93Q2xpcCwgJm9mZnNldEZyb21Sb290KTsKKyAgICAgICAgdXBkYXRlUGFpbnRp
bmdJbmZvRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9j
YWxQYWludEZsYWdzLCBzaG91bGRQYWludENvbnRlbnQsICZvZmZzZXRGcm9tUm9vdCk7CiAgICAg
fQotI2VuZGlmCi0KKyAgICAKICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBh
aW50aW5nQ29tcG9zaXRpbmdCYWNrZ3JvdW5kUGhhc2UpIHsKLSAgICAgICAgaWYgKHNob3VsZFBh
aW50Q29udGVudCAmJiAhc2VsZWN0aW9uT25seSkgewotICAgICAgICAgICAgLy8gQmVnaW4gdHJh
bnNwYXJlbmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50
IHNvbWV0aGluZy4KLSAgICAgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQotICAgICAgICAg
ICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgICAgICAKLSAgICAgICAgICAg
IGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAg
ICAvLyBQYWludCBvdXIgYmFja2dyb3VuZCBmaXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGls
ZCBsYXllcnMuCi0gICAgICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8g
cGFpbnQgb3VyIGJhY2tncm91bmQuCi0gICAgICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBh
aW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBkYW1hZ2VSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8g
QmFja2dyb3VuZCBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3Vu
ZC4KLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVk
SW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIHBh
aW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5y
ZWdpb24pOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7Ci0KLSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJl
Y3QpCi0gICAgICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAgICAgICB9CisgICAgICAgIC8vIFBh
aW50IG9ubHkgdGhlIGJhY2tncm91bmRzIGZvciBhbGwgb2YgdGhlIGZyYWdtZW50cyBvZiB0aGUg
bGF5ZXIuCisgICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgJiYgIXNlbGVjdGlvbk9ubHkp
CisgICAgICAgICAgICBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMs
IGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJ
bmZvLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICAgICAg
Ly8gTm93IHdhbGsgdGhlIHNvcnRlZCBsaXN0IG9mIGNoaWxkcmVuIHdpdGggbmVnYXRpdmUgei1p
bmRpY2VzLgogICAgICAgICBwYWludExpc3QobmVnWk9yZGVyTGlzdCgpLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGxv
Y2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nRm9yZWdyb3VuZFBo
YXNlKSB7Ci0gICAgICAgIC8vIE5vdyBlc3RhYmxpc2ggdGhlIGFwcHJvcHJpYXRlIGNsaXAgYW5k
IHBhaW50IG91ciBjaGlsZCBSZW5kZXJPYmplY3RzLgotICAgICAgICBpZiAoc2hvdWxkUGFpbnRD
b250ZW50ICYmICFjbGlwUmVjdFRvQXBwbHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBC
ZWdpbiB0cmFuc3BhcmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUg
dG8gcGFpbnQgc29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0g
ICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0KLSAgICAgICAgICAg
IGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAg
ICAvLyBTZXQgdXAgdGhlIGNsaXAgdXNlZCB3aGVuIHBhaW50aW5nIG91ciBjaGlsZHJlbi4KLSAg
ICAgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWlu
dEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwUmVjdFRvQXBwbHkucmVjdCgp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uT25seSA/IFBhaW50
UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUJsYWNrVGV4dCA/IChQYWludEJlaGF2aW9y
KVBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCA6IHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9v
dEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
IXNlbGVjdGlvbk9ubHkpIHsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWlu
dFBoYXNlRmxvYXQ7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQ
aGFzZUZvcmVncm91bmQ7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVx
dWVzdHMgPSBsb2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzOwotICAgICAgICAg
ICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAg
ICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOwotICAg
ICAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRv
RGlydHlSZWN0KQotICAgICAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFp
bnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBjbGlwUmVjdFRvQXBwbHkpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBwYWludEZvcmVncm91
bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVy
Q29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAor
ICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgc2VsZWN0aW9uT25seSwgZm9yY2VCbGFja1RleHQpOworICAgICAg
ICAKKyAgICAgICAgaWYgKHNob3VsZFBhaW50T3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0
bGluZUZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8sIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKIAotICAgICAgICBp
ZiAoc2hvdWxkUGFpbnRPdXRsaW5lICYmICFvdXRsaW5lUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0bGluZQotICAgICAgICAgICAgUGFpbnRJbmZvIHBh
aW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KG91dGxpbmVSZWN0LnJlY3QoKSks
IFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICBjbGlwVG9SZWN0
KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFk
aXVzKTsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOwotICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAgICAgfQotICAgIAogICAgICAgICAv
LyBQYWludCBhbnkgY2hpbGQgbGF5ZXJzIHRoYXQgaGF2ZSBvdmVyZmxvdy4KICAgICAgICAgcGFp
bnRMaXN0KG1fbm9ybWFsRmxvd0xpc3QuZ2V0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIApAQCAtMzg0NSwzNCArMzc5OCwyNiBAQCB2b2lkIFJl
bmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgICAgIHBhaW50TGlzdChwb3Na
T3JkZXJMaXN0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3Mp
OwogICAgIH0KIAotICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKLSAgICAg
ICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAgICAgICAgcGFpbnRP
dmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCksIHBp
eGVsU25hcHBlZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVz
dG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFn
ZVJlY3QpOwotICAgIH0KKyAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKQorICAg
ICAgICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAg
ICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkpIHsKICAgICAgICAg
Ly8gQXBwbHkgdGhlIGNvcnJlY3QgY2xpcHBpbmcgKGllLiBvdmVyZmxvdzogaGlkZGVuKS4KLSAg
ICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5j
eUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJl
Y3QpOworICAgICAgICAvLyBGSVhNRTogSXQgaXMgaW5jb3JyZWN0IHRvIGp1c3QgY2xpcCB0byB0
aGUgZGFtYWdlUmVjdCBoZXJlIG9uY2UgbXVsdGlwbGUgZnJhZ21lbnRzIGFyZSBpbnZvbHZlZC4K
KyAgICAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3QgPSBsYXllckZyYWdtZW50cy5pc0VtcHR5
KCkgPyBDbGlwUmVjdCgpIDogbGF5ZXJGcmFnbWVudHNbMF0uYmFja2dyb3VuZFJlY3Q7CisgICAg
ICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lM
YXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5k
UmVjdCk7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLmFwcGx5RmlsdGVyRWZmZWN0
KCk7Ci0gICAgICAgIHJlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICByZXN0b3Jl
Q2xpcCh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CiAgICAgfQogI2VuZGlmCi0KKyAgICAKICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB3ZSBub3cgdXNlIHRoZSBvcmlnaW5hbCB0cmFuc3BhcmVuY3kgY29udGV4
dC4KICAgICBBU1NFUlQodHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0ID09IGNvbnRleHQpOwogCiAg
ICAgaWYgKChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ01h
c2tQaGFzZSkgJiYgc2hvdWxkUGFpbnRDb250ZW50ICYmIHJlbmRlcmVyKCktPmhhc01hc2soKSAm
JiAhc2VsZWN0aW9uT25seSkgewotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRv
RGlydHlSZWN0KQotICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VS
ZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3
aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAKLSAgICAgICAgLy8gUGFpbnQg
dGhlIG1hc2suCi0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFw
cGVkSW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2
aW9yTm9ybWFsLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVn
aW9uKTsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQotICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICAvLyBQYWludCB0aGUgbWFzayBmb3Ig
dGhlIGZyYWdtZW50cy4KKyAgICAgICAgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21l
bnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIp
OwogICAgIH0KIAogICAgIC8vIEVuZCBvdXIgdHJhbnNwYXJlbmN5IGxheWVyCkBAIC0zOTA0LDEz
ICszODQ5LDI5MSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExpc3QoVmVjdG9yPFJlbmRlCiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgIGlmICghY2hp
bGRMYXllci0+aXNQYWdpbmF0ZWQoKSB8fCB1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAg
ICAgaWYgKCFjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgY2hpbGRMYXll
ci0+cGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwg
Y29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCwKKyAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3ksIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3Qg
TGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQoreworICAgIGlmICghZW5jbG9zaW5nUGFnaW5h
dGlvbkxheWVyKCkgfHwgaGFzVHJhbnNmb3JtKCkpIHsKKyAgICAgICAgLy8gRm9yIHVucGFnaW5h
dGVkIGxheWVycywgdGhlcmUgaXMgb25seSBvbmUgZnJhZ21lbnQuCisgICAgICAgIExheWVyRnJh
Z21lbnQgZnJhZ21lbnQ7CisgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4
dChyb290TGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAgICAgIGNhbGN1bGF0ZVJlY3Rz
KGNsaXBSZWN0c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21lbnQub3V0
bGluZVJlY3QsIG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgZnJhZ21lbnRzLmFwcGVuZChmcmFn
bWVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQ29tcHV0ZSBvdXIg
b2Zmc2V0IHdpdGhpbiB0aGUgZW5jbG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuCisgICAgTGF5b3V0
UG9pbnQgb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXI7CisgICAgY29udmVydFRvTGF5ZXJDb29y
ZHMoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIG9mZnNldFdpdGhpblBhZ2luYXRlZExheWVy
KTsKKyAgICAKKyAgICAvLyBDYWxjdWxhdGUgY2xpcCByZWN0cyByZWxhdGl2ZSB0byB0aGUgZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyLiBUaGUgcHVycG9zZSBvZiB0aGlzIGNhbGwgaXMgdG8gZGV0
ZXJtaW5lIG91ciBib3VuZHMgY2xpcHBlZCB0byBpbnRlcm1lZGlhdGUKKyAgICAvLyBsYXllcnMg
YmV0d2VlbiB1cyBhbmQgdGhlIHBhZ2luYXRpb24gY29udGV4dC4gSXQncyBpbXBvcnRhbnQgdG8g
bWluaW1pemUgdGhlICMgb2YgZnJhZ21lbnRzIHdlIG5lZWQgdG8gY3JlYXRlIGFuZCB0aGlzIGhl
bHBzIHdpdGgKKyAgICAvLyB0aGF0LgorICAgIENsaXBSZWN0c0NvbnRleHQgcGFnaW5hdGlvbkNs
aXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIHJlZ2lvbiwgY2xpcFJl
Y3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93
Q2xpcCk7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc0luRmxvd1RocmVhZDsKKyAgICBDbGlw
UmVjdCBiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5k
UmVjdEluRmxvd1RocmVhZDsKKyAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdEluRmxvd1RocmVhZDsK
KyAgICBjYWxjdWxhdGVSZWN0cyhwYWdpbmF0aW9uQ2xpcFJlY3RzQ29udGV4dCwgUGFpbnRJbmZv
OjppbmZpbml0ZVJlY3QoKSwgbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJhY2tncm91bmRSZWN0
SW5GbG93VGhyZWFkLCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZCwKKyAgICAgICAgb3V0bGlu
ZVJlY3RJbkZsb3dUaHJlYWQsICZvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7CisgICAgCisg
ICAgLy8gVGFrZSBvdXIgYm91bmRpbmcgYm94IHdpdGhpbiB0aGUgZmxvdyB0aHJlYWQgYW5kIGNs
aXAgaXQuIFRoaXMgd2lsbCBoZWxwIG1pbmltaXplIHRoZSAjIG9mIGZyYWdtZW50cyB3ZSBoYXZl
IHRvIGNyZWF0ZS4KKyAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRpbmdCb3hJbkZsb3dUaHJlYWQg
PSBib3VuZGluZ0JveChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgMCwgJm9mZnNldFdpdGhp
blBhZ2luYXRlZExheWVyKTsKKyAgICBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLmludGVy
c2VjdChiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZC5yZWN0KCkpOworCisgICAgLy8gU2hpZnQg
dGhlIGRpcnR5IHJlY3QgaW50byBmbG93IHRocmVhZCBjb29yZGluYXRlcy4KKyAgICBMYXlvdXRQ
b2ludCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290OworICAgIGVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFn
aW5hdGlvbkxheWVyRnJvbVJvb3QpOworICAgIExheW91dFJlY3QgZGlydHlSZWN0SW5GbG93VGhy
ZWFkKGRpcnR5UmVjdCk7CisgICAgZGlydHlSZWN0SW5GbG93VGhyZWFkLm1vdmVCeSgtb2Zmc2V0
T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisKKyAgICAvLyBUZWxsIHRoZSBmbG93IHRocmVh
ZCB0byBjb2xsZWN0IHRoZSBmcmFnbWVudHMuIFdlIHBhc3MgZW5vdWdoIGluZm9ybWF0aW9uIHRv
IGNyZWF0ZSBhIG1pbmltYWwgbnVtYmVyIG9mIGZyYWdtZW50cyBiYXNlZCBvZmYgdGhlIHBhZ2Vz
L2NvbHVtbnMKKyAgICAvLyB0aGF0IGludGVyc2VjdCB0aGUgYWN0dWFsIGRpcnR5UmVjdCBhcyB3
ZWxsIGFzIHRoZSBwYWdlcy9jb2x1bW5zIHRoYXQgaW50ZXJzZWN0IG91ciBsYXllcidzIGJvdW5k
aW5nIGJveC4KKyAgICBSZW5kZXJGbG93VGhyZWFkKiBlbmNsb3NpbmdGbG93VGhyZWFkID0gdG9S
ZW5kZXJGbG93VGhyZWFkKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5yZW5kZXJlcigpKTsK
KyAgICBlbmNsb3NpbmdGbG93VGhyZWFkLT5jb2xsZWN0TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRz
LCBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLCBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQpOwor
ICAgIAorICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gR2V0IHRoZSBwYXJlbnQgY2xpcCByZWN0cyBvZiB0aGUgcGFnaW5hdGlvbiBsYXll
ciwgc2luY2Ugd2UgbmVlZCB0byBpbnRlcnNlY3Qgd2l0aCB0aGF0IHdoZW4gcGFpbnRpbmcgY29s
dW1uIGNvbnRlbnRzLgorICAgIENsaXBSZWN0IGFuY2VzdG9yQ2xpcFJlY3QgPSBkaXJ0eVJlY3Q7
CisgICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5wYXJlbnQoKSkgeworICAgICAg
ICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCByZWdpb24sIGNs
aXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVy
Zmxvd0NsaXApOworICAgICAgICBhbmNlc3RvckNsaXBSZWN0ID0gZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKCktPmJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KTsKKyAgICAgICAg
YW5jZXN0b3JDbGlwUmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKKyAgICB9CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXll
ckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFNldCBvdXIgZm91ciByZWN0cyB3aXRoIGFsbCBjbGlwcGluZyBhcHBsaWVkIHRoYXQgd2Fz
IGludGVybmFsIHRvIHRoZSBmbG93IHRocmVhZC4KKyAgICAgICAgZnJhZ21lbnQuc2V0UmVjdHMo
bGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJhY2tncm91bmRSZWN0SW5GbG93VGhyZWFkLCBmb3Jl
Z3JvdW5kUmVjdEluRmxvd1RocmVhZCwgb3V0bGluZVJlY3RJbkZsb3dUaHJlYWQpOworICAgICAg
ICAKKyAgICAgICAgLy8gU2hpZnQgdG8gdGhlIHJvb3QtcmVsYXRpdmUgcGh5c2ljYWwgcG9zaXRp
b24gdXNlZCB3aGVuIHBhaW50aW5nIHRoZSBmbG93IHRocmVhZCBpbiB0aGlzIGZyYWdtZW50Lgor
ICAgICAgICBmcmFnbWVudC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCArIG9mZnNl
dE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOworCisgICAgICAgIC8vIEludGVyc2VjdCB0aGUg
ZnJhZ21lbnQgd2l0aCBvdXIgYW5jZXN0b3IncyBiYWNrZ3JvdW5kIGNsaXAgc28gdGhhdCBlLmcu
LCBjb2x1bW5zIGluIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayBhcmUKKyAgICAgICAgLy8gcHJv
cGVybHkgY2xpcHBlZCBieSB0aGUgb3ZlcmZsb3cuCisgICAgICAgIGZyYWdtZW50LmludGVyc2Vj
dChhbmNlc3RvckNsaXBSZWN0LnJlY3QoKSk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgaW50
ZXJzZWN0IHdpdGggb3VyIHBhZ2luYXRpb24gY2xpcC4gVGhpcyB3aWxsIHR5cGljYWxseSBtZWFu
IHdlJ3JlIGp1c3QgaW50ZXJzZWN0aW5nIHRoZSBkaXJ0eSByZWN0IHdpdGggdGhlIGNvbHVtbgor
ICAgICAgICAvLyBjbGlwLCBzbyB0aGUgY29sdW1uIGNsaXAgZW5kcyB1cCBiZWluZyBhbGwgd2Ug
YXBwbHkuCisgICAgICAgIGZyYWdtZW50LmludGVyc2VjdChmcmFnbWVudC5wYWdpbmF0aW9uQ2xp
cCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWludGluZ0luZm9Gb3JG
cmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgbG9jYWxQYWludEZsYWdzLAor
ICAgIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJv
bVJvb3QpCit7CisgICAgQVNTRVJUKG9mZnNldEZyb21Sb290KTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50
JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFp
bnRDb250ZW50ID0gc2hvdWxkUGFpbnRDb250ZW50OworICAgICAgICBpZiAodGhpcyAhPSBsb2Nh
bFBhaW50aW5nSW5mby5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVy
UGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkgeworICAgICAgICAgICAgTGF5b3V0UG9pbnQgbmV3
T2Zmc2V0RnJvbVJvb3QgPSAqb2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zm
c2V0OworICAgICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2Vj
dHNEYW1hZ2VSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5
QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncywgY29u
c3QgTGF5b3V0UG9pbnQmIHRyYW5zbGF0aW9uT2Zmc2V0KQoreworICAgIC8vIEFkanVzdCB0aGUg
dHJhbnNmb3JtIHN1Y2ggdGhhdCB0aGUgcmVuZGVyZXIncyB1cHBlciBsZWZ0IGNvcm5lciB3aWxs
IHBhaW50IGF0ICgwLDApIGluIHVzZXIgc3BhY2UuCisgICAgLy8gVGhpcyBpbnZvbHZlcyBzdWJ0
cmFjdGluZyBvdXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXllciBpbiBvdXIgY3VycmVudCBjb29y
ZGluYXRlIHNwYWNlLCBidXQgcHJlc2VydmluZworICAgIC8vIHRoZSBhY2N1bXVsYXRlZCBlcnJv
ciBmb3Igc3ViLXBpeGVsIGxheW91dC4KKyAgICBMYXlvdXRQb2ludCBkZWx0YTsKKyAgICBjb252
ZXJ0VG9MYXllckNvb3JkcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBkZWx0YSk7CisgICAgZGVs
dGEubW92ZUJ5KHRyYW5zbGF0aW9uT2Zmc2V0KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0ocmVuZGVyYWJsZVRyYW5zZm9ybShwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcikp
OworICAgIEludFBvaW50IHJvdW5kZWREZWx0YSA9IHJvdW5kZWRJbnRQb2ludChkZWx0YSk7Cisg
ICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KHJvdW5kZWREZWx0YS54KCksIHJvdW5kZWREZWx0
YS55KCkpOworICAgIExheW91dFNpemUgYWRqdXN0ZWRTdWJQaXhlbEFjY3VtdWxhdGlvbiA9IHBh
aW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbiArIChkZWx0YSAtIHJvdW5kZWREZWx0YSk7
CisKKyAgICAvLyBBcHBseSB0aGUgdHJhbnNmb3JtLgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5z
Zm9ybS50b0FmZmluZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIE5vdyBkbyBhIHBhaW50IHdpdGgg
dGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KKyAgICBMYXllclBhaW50aW5nSW5mbyB0
cmFuc2Zvcm1lZFBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybS5p
bnZlcnNlKCkubWFwUmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpKSwgcGFpbnRpbmdJ
bmZvLnBhaW50QmVoYXZpb3IsCisgICAgICAgIGFkanVzdGVkU3ViUGl4ZWxBY2N1bXVsYXRpb24s
IHBhaW50aW5nSW5mby5wYWludGluZ1Jvb3QsIHBhaW50aW5nSW5mby5yZWdpb24sIHBhaW50aW5n
SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzKTsKKyAgICBwYWludExheWVyQ29udGVudHNBbmRSZWZs
ZWN0aW9uKGNvbnRleHQsIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGlu
Z0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQoreworICAgIExheWVyRnJhZ21lbnRz
IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHM7CisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQ
YWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKKyAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+
Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCBwYWludGluZ0lu
Zm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucmVnaW9uLCBwYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QsCisgICAgICAgIChwYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0
cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0cywgSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUsCisgICAgICAgIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5n
T3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dD
bGlwLCAmb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisgICAgCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gZW5jbG9zaW5nUGFn
aW5hdGlvbkZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFwcGx5IHRoZSBw
YWdlL2NvbHVtbiBjbGlwIGZvciB0aGlzIGZyYWdtZW50LCBhcyB3ZWxsIGFzIGFueSBjbGlwcyBl
c3RhYmxpc2hlZCBieSBsYXllcnMgaW4gYmV0d2VlbiB1cyBhbmQKKyAgICAgICAgLy8gdGhlIGVu
Y2xvc2luZyBwYWdpbmF0aW9uIGxheWVyLgorICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0g
ZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpOworICAgICAgICAKKyAgICAgICAgLy8gTm93
IGNvbXB1dGUgdGhlIGNsaXBzIHdpdGhpbiBhIGdpdmVuIGZyYWdtZW50CisgICAgICAgIGlmIChw
YXJlbnQoKSAhPSBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSkgeworICAgICAgICAgICAgZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHBhaW50aW5nSW5m
by5yb290TGF5ZXIsIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOworICAgIAorICAg
ICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpLCBwYWludGluZ0luZm8ucmVnaW9uLCAocGFpbnRGbGFncyAmIFBhaW50TGF5
ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlw
UmVjdHMsCisgICAgICAgICAgICAgICAgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIChwYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVy
Zmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICAgICAgICAgIExheW91dFJlY3Qg
cGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCkucmVj
dCgpOworICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3QubW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRp
b25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKKyAgICAgICAgICAg
IGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRDbGlwUmVjdCk7CisgICAgICAgIH0KKworICAgICAg
ICBwYXJlbnQoKS0+Y2xpcFRvUmVjdChwYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBw
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0KTsKKyAgICAgICAgcGFpbnRMYXll
ckJ5QXBwbHlpbmdUcmFuc2Zvcm0oY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzLCBm
cmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0KTsKKyAgICAgICAgcGFyZW50KCktPnJlc3RvcmVDbGlw
KGNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgY2xpcFJlY3QpOworICAgIH0K
K30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICBjb25zdCBM
YXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJl
bmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciwKKyAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21l
bnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEJlZ2luIHRyYW5zcGFyZW5jeSBsYXll
cnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtub3cgd2UgaGF2ZSB0byBwYWludCBzb21ldGhpbmcuCisg
ICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQorICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWlu
dEJlaGF2aW9yKTsKKyAgICAKKyAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0Rp
cnR5UmVjdCkgeworICAgICAgICAgICAgLy8gUGFpbnQgb3VyIGJhY2tncm91bmQgZmlyc3QsIGJl
Zm9yZSBwYWludGluZyBhbnkgY2hpbGQgbGF5ZXJzLgorICAgICAgICAgICAgLy8gRXN0YWJsaXNo
IHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3VyIGJhY2tncm91bmQuCisgICAgICAgICAgICBjbGlw
VG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBEb05vdEluY2x1
ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gQmFja2dyb3VuZCBwYWludGluZyB3aWxsIGhhbmRs
ZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQYWlu
dCB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBj
b2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQgaXRzZWxmIGluc3RlYWQgb2YganVz
dCBmcm9tIHRoZSBwYWludCBpbmZvLgorICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRl
eHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwg
UGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCkt
PnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigp
IC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11
bGF0aW9uKSk7CisKKyAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVj
dCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCit2b2lk
IFJlbmRlckxheWVyOjpwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgIGNvbnN0IExheW91dFJlY3Qm
IHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywgUGFpbnRCZWhhdmlvciBwYWlu
dEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGJv
b2wgc2VsZWN0aW9uT25seSwgYm9vbCBmb3JjZUJsYWNrVGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0
cmFuc3BhcmVuY3kgaWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gcGFpbnQuCisgICAgaWYgKGhhdmVU
cmFuc3BhcmVuY3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckZyYWdt
ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9
IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNob3VsZFBh
aW50Q29udGVudCAmJiAhZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlS
ZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBQYWludEJl
aGF2aW9yIGxvY2FsUGFpbnRCZWhhdmlvciA9IGZvcmNlQmxhY2tUZXh0ID8gKFBhaW50QmVoYXZp
b3IpUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDogcGFpbnRCZWhhdmlvcjsKKworICAgIC8v
IE9wdGltaXplIGNsaXBwaW5nIGZvciB0aGUgc2luZ2xlIGZyYWdtZW50IGNhc2UuCisgICAgYm9v
bCBzaG91bGRDbGlwID0gbG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ICYmIGxheWVy
RnJhZ21lbnRzLnNpemUoKSA9PSAxICYmIGxheWVyRnJhZ21lbnRzWzBdLnNob3VsZFBhaW50Q29u
dGVudCAmJiAhbGF5ZXJGcmFnbWVudHNbMF0uZm9yZWdyb3VuZFJlY3QuaXNFbXB0eSgpOworICAg
IGlmIChzaG91bGRDbGlwKQorICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJv
b3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxheWVy
RnJhZ21lbnRzWzBdLmZvcmVncm91bmRSZWN0KTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIGxv
b3AgdGhyb3VnaCBldmVyeSBmcmFnbWVudCBtdWx0aXBsZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0
byByZXBhaW50IGluIGVhY2ggc3BlY2lmaWMgcGhhc2UgaW4gb3JkZXIgZm9yCisgICAgLy8gaW50
ZXJsZWF2aW5nIG9mIHRoZSBmcmFnbWVudHMgdG8gd29yayBwcm9wZXJseS4KKyAgICBwYWludEZv
cmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2Uoc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VT
ZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLCBsYXllckZyYWdtZW50
cywKKyAgICAgICAgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlv
ciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIAorICAgIGlmICghc2VsZWN0aW9uT25s
eSkgeworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQ
aGFzZUZsb2F0LCBsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxv
Y2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgICAgICBwYWlu
dEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZvcmVncm91bmQsIGxh
eWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEJlaGF2
aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZv
ckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlQ2hpbGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVu
dHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50QmVoYXZpb3IsIHBhaW50
aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB9CisgICAgCisgICAgaWYgKHNob3VsZENsaXApCisg
ICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBsYXllckZyYWdtZW50c1swXS5mb3JlZ3JvdW5kUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBo
YXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwKKyAgICBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0lu
Zm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jv
b3RGb3JSZW5kZXJlcikKK3sKKyAgICBib29sIHNob3VsZENsaXAgPSBsb2NhbFBhaW50aW5nSW5m
by5jbGlwVG9EaXJ0eVJlY3QgJiYgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpID4gMTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAg
ICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCB8fCBmcmFnbWVudC5mb3JlZ3JvdW5k
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAg
IGlmIChzaG91bGRDbGlwKQorICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5m
by5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBm
cmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7CisgICAgCisgICAgICAgIFBhaW50SW5mbyBwYWludElu
Zm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5y
ZWN0KCkpLCBwaGFzZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkKKyAgICAgICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0g
bG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0czsKKyAgICAgICAgcmVuZGVyZXIo
KS0+cGFpbnQocGFpbnRJbmZvLCB0b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9u
KCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1
bXVsYXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICAg
ICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGZyYWdtZW50LmZvcmVncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFn
bWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
IGxvY2FsUGFpbnRpbmdJbmZvLAorICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJh
Z21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgaWYgKGZyYWdt
ZW50Lm91dGxpbmVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIAor
ICAgICAgICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUKKyAgICAgICAgUGFpbnRJbmZvIHBhaW50
SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYWdtZW50Lm91dGxpbmVSZWN0LnJl
Y3QoKSksIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290
Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIGNsaXBUb1Jl
Y3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
by5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIERvTm90SW5jbHVkZVNlbGZG
b3JCb3JkZXJSYWRpdXMpOworICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHRv
UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9u
KCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOworICAgICAgICBy
ZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJh
Z21lbnQub3V0bGluZVJlY3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRN
YXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWlu
dGluZ0luZm8sCisgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsK
KyAgICAgICAgaWYgKCFmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQorICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7IC8vIE1hc2sgcGFpbnRp
bmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4KKyAgICAgICAgCisgICAgICAgIC8vIFBh
aW50IHRoZSBtYXNrLgorICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxl
Y3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZy
b20gdGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwg
cGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCBQYWlu
dFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIs
IGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBh
aW50SW5mbywgdG9Qb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVy
Qm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7
CisgICAgICAgIAorICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXll
ckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5
ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBjbGlw
VG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICAgICAg
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b1BvaW50KGZy
YWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9j
YWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKSwKKyAgICAgICAgICAgIHBpeGVs
U25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7Cisg
ICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxh
eWVyOjpwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5n
SW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBk
byBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBjaGlsZCBsYXllciBpbnRvIHN0cmlw
cy4KQEAgLTQwNDgsNyArNDI3MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3Qg
SGl0VGVzdFIKIAogICAgIHJlbmRlcmVyKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwog
ICAgIAotICAgIExheW91dFJlY3QgaGl0VGVzdEFyZWEgPSByZW5kZXJlcigpLT5pc1JlbmRlckZs
b3dUaHJlYWQoKSA/IHRvUmVuZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVj
dCgpIDogcmVuZGVyZXIoKS0+dmlldygpLT5kb2N1bWVudFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0
IGhpdFRlc3RBcmVhID0gaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgPyB0b1JlbmRlckZs
b3dUaHJlYWQocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKSA6IHJlbmRlcmVyKCktPnZpZXco
KS0+ZG9jdW1lbnRSZWN0KCk7CiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBwaW5nKCkpCiAg
ICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChmcmFtZVZpc2libGVSZWN0KHJlbmRlcmVyKCkp
KTsKIApAQCAtNDExOSw3ICs0MzQyLDcgQEAgc3RhdGljIGRvdWJsZSBjb21wdXRlWk9mZnNldChj
b25zdCBIaXRUZQogCiBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gUmVuZGVy
TGF5ZXI6OmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
UmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5z
Zm9ybVN0YXRlKSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUs
IGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCkgY29uc3QKIHsKICAgICBSZWZQ
dHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiB0cmFuc2Zvcm1TdGF0ZTsKICAgICBMYXlvdXRQ
b2ludCBvZmZzZXQ7CkBAIC00MTM0LDYgKzQzNTcsOCBAQCBQYXNzUmVmUHRyPEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZT4gUmVuCiAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXll
ciwgb2Zmc2V0KTsKICAgICB9CiAgICAgCisgICAgb2Zmc2V0Lm1vdmVCeSh0cmFuc2xhdGlvbk9m
ZnNldCk7CisKICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lclJlbmRlcmVyID0gY29udGFpbmVy
TGF5ZXIgPyBjb250YWluZXJMYXllci0+cmVuZGVyZXIoKSA6IDA7CiAgICAgaWYgKHJlbmRlcmVy
KCktPnNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyUmVuZGVyZXIpKSB7
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRhaW5lclRyYW5zZm9ybTsKQEAgLTQx
OTAsNiArNDQxNSw5IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIK
IAogICAgIC8vIEFwcGx5IGEgdHJhbnNmb3JtIGlmIHdlIGhhdmUgb25lLgogICAgIGlmICh0cmFu
c2Zvcm0oKSAmJiAhYXBwbGllZFRyYW5zZm9ybSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyKCkpCisgICAgICAgICAgICByZXR1cm4gaGl0VGVzdFRyYW5zZm9ybWVkTGF5
ZXJJbkZyYWdtZW50cyhyb290TGF5ZXIsIGNvbnRhaW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQs
IGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0KTsK
KwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2ZSBiZWVu
IGNhbGN1bGF0ZWQuCiAgICAgICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICAgICAgQ2xpcFJl
Y3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJl
Z2lvbigpLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSk7CkBAIC00MTk4LDMxICs0NDI2LDggQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRU
ZXN0TGF5ZXIoUgogICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RM
b2NhdGlvbikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLQotICAgICAg
ICAvLyBDcmVhdGUgYSB0cmFuc2Zvcm0gc3RhdGUgdG8gYWNjdW11bGF0ZSB0aGlzIHRyYW5zZm9y
bS4KLSAgICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3Jt
U3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5
ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRlKTsKLQotICAg
ICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0IGJlIGludmVydGVkLCB0aGVuIGRvbid0IGhp
dCB0ZXN0IHRoaXMgbGF5ZXIgYXQgYWxsLgotICAgICAgICBpZiAoIW5ld1RyYW5zZm9ybVN0YXRl
LT5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcG9pbnQgYW5kIHRoZSBoaXQgdGVzdCBy
ZWN0IGluIHRoZSBjb29yZHMgb2YgdGhpcyBsYXllciBieSB1c2luZyB0aGUgdmFsdWVzCi0gICAg
ICAgIC8vIGZyb20gdGhlIHRyYW5zZm9ybVN0YXRlLCB3aGljaCBzdG9yZSB0aGUgcG9pbnQgYW5k
IHF1YWQgaW4gdGhlIGNvb3JkcyBvZiB0aGUgbGFzdCBmbGF0dGVuZWQKLSAgICAgICAgLy8gbGF5
ZXIsIGFuZCB0aGUgYWNjdW11bGF0ZWQgdHJhbnNmb3JtIHdoaWNoIGxldHMgdXAgbWFwIHRocm91
Z2ggcHJlc2VydmUtM2QgbGF5ZXJzLgotICAgICAgICAvLwotICAgICAgICAvLyBXZSBjYW4ndCBq
dXN0IG1hcCBoaXRUZXN0TG9jYXRpb24gYW5kIGhpdFRlc3RSZWN0IGJlY2F1c2UgdGhleSBtYXkg
aGF2ZSBiZWVuIGZsYXR0ZW5lZCAobG9zaW5nIHopCi0gICAgICAgIC8vIGJ5IG91ciBjb250YWlu
ZXIuCi0gICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5t
YXBwZWRQb2ludCgpOwotICAgICAgICBGbG9hdFF1YWQgbG9jYWxQb2ludFF1YWQgPSBuZXdUcmFu
c2Zvcm1TdGF0ZS0+bWFwcGVkUXVhZCgpOwotICAgICAgICBMYXlvdXRSZWN0IGxvY2FsSGl0VGVz
dFJlY3QgPSBuZXdUcmFuc2Zvcm1TdGF0ZS0+Ym91bmRzT2ZNYXBwZWRBcmVhKCk7Ci0gICAgICAg
IEhpdFRlc3RMb2NhdGlvbiBuZXdIaXRUZXN0TG9jYXRpb247Ci0gICAgICAgIGlmIChoaXRUZXN0
TG9jYXRpb24uaXNSZWN0QmFzZWRUZXN0KCkpCi0gICAgICAgICAgICBuZXdIaXRUZXN0TG9jYXRp
b24gPSBIaXRUZXN0TG9jYXRpb24obG9jYWxQb2ludCwgbG9jYWxQb2ludFF1YWQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBuZXdIaXRUZXN0TG9jYXRpb24gPSBIaXRUZXN0TG9jYXRpb24o
bG9jYWxQb2ludCk7Ci0KLSAgICAgICAgLy8gTm93IGRvIGEgaGl0IHRlc3Qgd2l0aCB0aGUgcm9v
dCBsYXllciBzaGlmdGVkIHRvIGJlIHVzLgotICAgICAgICByZXR1cm4gaGl0VGVzdExheWVyKHRo
aXMsIGNvbnRhaW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGxvY2FsSGl0VGVzdFJlY3QsIG5l
d0hpdFRlc3RMb2NhdGlvbiwgdHJ1ZSwgbmV3VHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXQp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGhpdFRlc3RMYXllckJ5QXBwbHlpbmdUcmFuc2Zv
cm0ocm9vdExheWVyLCBjb250YWluZXJMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVj
dCwgaGl0VGVzdExvY2F0aW9uLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldCk7CiAgICAgfQogCiAg
ICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhbmQgM2Qgc3RhdHVzIGFyZSB1cC10by1kYXRlLgpAQCAt
NDI1NCwxNiArNDQ1OSw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFIKICAgICAgICAgLy8gVGhpcyBsYXllciBpcyBmbGF0dGVuaW5nLCBzbyBmbGF0dGVuIHRoZSBz
dGF0ZSBwYXNzZWQgdG8gZGVzY2VuZGFudHMuCiAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUt
PmZsYXR0ZW4oKTsKICAgICB9Ci0gICAgCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3Rz
IHdlIHNob3VsZCB1c2UuCi0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKLSAgICBDbGlwUmVj
dCBiZ1JlY3Q7Ci0gICAgQ2xpcFJlY3QgZmdSZWN0OwotICAgIENsaXBSZWN0IG91dGxpbmVSZWN0
OwogCi0gICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgaGl0
VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSk7Ci0gICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwg
aGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QpOwot
ICAgIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2Yg
dGhlIHotZGVwdGggb2YgdGhlIGhpdCBwb2ludCBvZiAzZC10cmFuc2Zvcm1lZAogICAgIC8vIGRl
c2NlbmRhbnRzLgogICAgIGRvdWJsZSBsb2NhbFpPZmZzZXQgPSAtbnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKTsKQEAgLTQzMDgsMTcgKzQ1MDQsMjIgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICBjYW5kaWRhdGVMYXllciA9IGhpdExh
eWVyOwogICAgIH0KIAotICAgIC8vIENoZWNrIGZvciB0aGUgcmVzaXplcgotICAgIGlmIChjYW5S
ZXNpemUoKSAmJiByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGxh
eWVyQm91bmRzKSkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgewor
ICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAg
cmVjdGFuZ2xlcyBmb3IgZWFjaCBsYXllciBmcmFnbWVudC4KKyAgICBMYXllckZyYWdtZW50cyBs
YXllckZyYWdtZW50czsKKyAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByb290
TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsIFJvb3RSZWxhdGl2
ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKworICAgIGlmIChjYW5S
ZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRU
ZXN0TG9jYXRpb24pKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSk7CiAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgIH0KIAotICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBp
bnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1Jl
Y3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkg
eworICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUg
dGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLiBDaGVjaworICAgIC8vIGV2ZXJ5
IGZyYWdtZW50IGluIHJldmVyc2Ugb3JkZXIuCisgICAgaWYgKGlzU2VsZlBhaW50aW5nTGF5ZXIo
KSkgewogICAgICAgICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQs
IGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGNvbW1pdCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdl
J3JlIGZyb250bW9zdC4KICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5o
aXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwg
dGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdERlc2NlbmRh
bnRzKQorICAgICAgICBib29sIGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywg
cmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0RGVzY2VuZGFudHMs
IGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QpCiAgICAgICAgICAgICAmJiBpc0hpdENhbmRp
ZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5z
Zm9ybVN0YXRlLmdldCgpKSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRl
c3QoKSkKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwpAQCAtNDMy
OCwxMyArNDUyOSwxMyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAvLyBGb3JlZ3JvdW5k
IGNhbiBkZXB0aC1zb3J0IHdpdGggZGVzY2VuZGFudCBsYXllcnMsIHNvIGtlZXAgdGhpcyBhcyBh
IGNhbmRpZGF0ZS4KICAgICAgICAgICAgIGNhbmRpZGF0ZUxheWVyID0gdGhpczsKLSAgICAgICAg
fSBlbHNlIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgIH0gZWxzZSBpZiAo
aW5zaWRlRnJhZ21lbnRGb3JlZ3JvdW5kUmVjdCAmJiByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkp
CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIH0KIAogICAgIC8v
IE5vdyBjaGVjayBvdXIgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbi4KICAgICBoaXRMYXllciA9
IGhpdFRlc3RMaXN0KG5lZ1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQs
IGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2Nl
bmRhbnRzUHRyLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0
aFNvcnREZXNjZW5kYW50cyk7CisgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpP
ZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0
ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAg
ICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQogICAgICAgICAgICAgcmV0dXJuIGhpdExh
eWVyOwpAQCAtNDM0NSw5ICs0NTQ2LDEwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFIKICAgICBpZiAoY2FuZGlkYXRlTGF5ZXIpCiAgICAgICAgIHJldHVybiBjYW5k
aWRhdGVMYXllcjsKIAotICAgIGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24p
ICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVy
KCkpIHsKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9j
YXRpb24oKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3Vs
dCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdFNlbGYpCisgICAgICAgIGJv
b2wgaW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVjdCA9IGZhbHNlOworICAgICAgICBpZiAoaGl0
VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByZXF1ZXN0LCB0ZW1wUmVz
dWx0LCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RTZWxmLCBpbnNpZGVGcmFnbWVudEJhY2tncm91
bmRSZWN0KQogICAgICAgICAgICAgJiYgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZz
ZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKICAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKQEAgLTQzNTUsMjAgKzQ1NTcsMTE4IEBAIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgICAgICAgICByZXN1
bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgaWYgKGluc2lkZUZy
YWdtZW50QmFja2dyb3VuZFJlY3QgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsK
IH0KIAorYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKKyAgICBjb25zdCBIaXRUZXN0TG9jYXRpb24m
IGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyLCBib29sJiBpbnNp
ZGVDbGlwUmVjdCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMu
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVu
dCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoKGhpdFRlc3RGaWx0ZXIgPT0g
SGl0VGVzdFNlbGYgJiYgIWZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVz
dExvY2F0aW9uKSkKKyAgICAgICAgICAgIHx8IChoaXRUZXN0RmlsdGVyID09IEhpdFRlc3REZXNj
ZW5kYW50cyAmJiAhZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9j
YXRpb24pKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnNpZGVDbGlwUmVjdCA9
IHRydWU7CisgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBmcmFn
bWVudC5sYXllckJvdW5kcywgaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0RmlsdGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RM
b2NhdGlvbikgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9
IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJl
Y3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMs
IHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpKS5jb250YWlucyhoaXRU
ZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjpoaXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRU
ZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCwK
KyAgICBjb25zdCBMYXlvdXRQb2ludCYgdHJhbnNsYXRpb25PZmZzZXQpCit7CisgICAgLy8gQ3Jl
YXRlIGEgdHJhbnNmb3JtIHN0YXRlIHRvIGFjY3VtdWxhdGUgdGhpcyB0cmFuc2Zvcm0uCisgICAg
UmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3JtU3RhdGUgPSBjcmVh
dGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RS
ZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRlLCB0cmFuc2xhdGlvbk9mZnNldCk7
CisKKyAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0IGJlIGludmVydGVkLCB0aGVuIGRvbid0
IGhpdCB0ZXN0IHRoaXMgbGF5ZXIgYXQgYWxsLgorICAgIGlmICghbmV3VHJhbnNmb3JtU3RhdGUt
Pm1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gQ29tcHV0ZSB0aGUgcG9pbnQgYW5kIHRoZSBoaXQgdGVzdCByZWN0IGluIHRo
ZSBjb29yZHMgb2YgdGhpcyBsYXllciBieSB1c2luZyB0aGUgdmFsdWVzCisgICAgLy8gZnJvbSB0
aGUgdHJhbnNmb3JtU3RhdGUsIHdoaWNoIHN0b3JlIHRoZSBwb2ludCBhbmQgcXVhZCBpbiB0aGUg
Y29vcmRzIG9mIHRoZSBsYXN0IGZsYXR0ZW5lZAorICAgIC8vIGxheWVyLCBhbmQgdGhlIGFjY3Vt
dWxhdGVkIHRyYW5zZm9ybSB3aGljaCBsZXRzIHVwIG1hcCB0aHJvdWdoIHByZXNlcnZlLTNkIGxh
eWVycy4KKyAgICAvLworICAgIC8vIFdlIGNhbid0IGp1c3QgbWFwIGhpdFRlc3RMb2NhdGlvbiBh
bmQgaGl0VGVzdFJlY3QgYmVjYXVzZSB0aGV5IG1heSBoYXZlIGJlZW4gZmxhdHRlbmVkIChsb3Np
bmcgeikKKyAgICAvLyBieSBvdXIgY29udGFpbmVyLgorICAgIEZsb2F0UG9pbnQgbG9jYWxQb2lu
dCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRQb2ludCgpOworICAgIEZsb2F0UXVhZCBsb2Nh
bFBvaW50UXVhZCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRRdWFkKCk7CisgICAgTGF5b3V0
UmVjdCBsb2NhbEhpdFRlc3RSZWN0ID0gbmV3VHJhbnNmb3JtU3RhdGUtPmJvdW5kc09mTWFwcGVk
QXJlYSgpOworICAgIEhpdFRlc3RMb2NhdGlvbiBuZXdIaXRUZXN0TG9jYXRpb247CisgICAgaWYg
KGhpdFRlc3RMb2NhdGlvbi5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgbmV3SGl0VGVzdExv
Y2F0aW9uID0gSGl0VGVzdExvY2F0aW9uKGxvY2FsUG9pbnQsIGxvY2FsUG9pbnRRdWFkKTsKKyAg
ICBlbHNlCisgICAgICAgIG5ld0hpdFRlc3RMb2NhdGlvbiA9IEhpdFRlc3RMb2NhdGlvbihsb2Nh
bFBvaW50KTsKKworICAgIC8vIE5vdyBkbyBhIGhpdCB0ZXN0IHdpdGggdGhlIHJvb3QgbGF5ZXIg
c2hpZnRlZCB0byBiZSB1cy4KKyAgICByZXR1cm4gaGl0VGVzdExheWVyKHRoaXMsIGNvbnRhaW5l
ckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGxvY2FsSGl0VGVzdFJlY3QsIG5ld0hpdFRlc3RMb2Nh
dGlvbiwgdHJ1ZSwgbmV3VHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXQpOworfQorCitSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMo
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAorICAgIGNv
bnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRl
c3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0
ZSwgZG91YmxlKiB6T2Zmc2V0KQoreworICAgIExheWVyRnJhZ21lbnRzIGVuY2xvc2luZ1BhZ2lu
YXRpb25GcmFnbWVudHM7CisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJG
cm9tUm9vdDsKKyAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50
cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlv
bi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsCisgICAgICAgIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywg
SW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0
T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisKKyAgICBmb3IgKGludCBpID0gZW5jbG9zaW5n
UGFnaW5hdGlvbkZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBj
b25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVu
dHMuYXQoaSk7CisgICAgICAgIAorICAgICAgICAvLyBBcHBseSB0aGUgcGFnZS9jb2x1bW4gY2xp
cCBmb3IgdGhpcyBmcmFnbWVudCwgYXMgd2VsbCBhcyBhbnkgY2xpcHMgZXN0YWJsaXNoZWQgYnkg
bGF5ZXJzIGluIGJldHdlZW4gdXMgYW5kCisgICAgICAgIC8vIHRoZSBlbmNsb3NpbmcgcGFnaW5h
dGlvbiBsYXllci4KKyAgICAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0LnJlY3QoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBjb21wdXRlIHRoZSBj
bGlwcyB3aXRoaW4gYSBnaXZlbiBmcmFnbWVudAorICAgICAgICBpZiAocGFyZW50KCkgIT0gZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpIHsKKyAgICAgICAgICAgIGVuY2xvc2luZ1BhZ2luYXRp
b25MYXllcigpLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFnaW5h
dGlvbkxheWVyRnJvbVJvb3QpOworICAgIAorICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBj
bGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCBoaXRUZXN0TG9jYXRp
b24ucmVnaW9uKCksIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxi
YXJTaXplKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3Jv
dW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCkucmVjdCgpOworICAgICAgICAgICAgcGFyZW50
Q2xpcFJlY3QubW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2lu
YXRpb25MYXllckZyb21Sb290KTsKKyAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJl
bnRDbGlwUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghaGl0VGVzdExv
Y2F0aW9uLmludGVyc2VjdHMoY2xpcFJlY3QpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gaGl0VGVzdExheWVyQnlBcHBseWluZ1RyYW5z
Zm9ybShyb290TGF5ZXIsIGNvbnRhaW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RS
ZWN0LCBoaXRUZXN0TG9jYXRpb24sCisgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNl
dCwgZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCk7CisgICAgICAgIGlmIChoaXRMYXllcikKKyAg
ICAgICAgICAgIHJldHVybiBoaXRMYXllcjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9
CisKIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXll
ckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RG
aWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QKIHsKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdM
YXllcigpIHx8IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKIAotICAgIGlmICgh
cmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b0xheW91dFBvaW50KGxheWVyQm91bmRzLmxvY2F0
aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoaXRUZXN0RmlsdGVyKSkgeworICAgIGlmICghcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwgdG9MYXlvdXRQb2ludChsYXllckJvdW5kcy5sb2Nh
dGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSksIGhpdFRlc3RGaWx0ZXIpKSB7CiAgICAgICAg
IC8vIEl0J3Mgd3JvbmcgdG8gc2V0IGlubmVyTm9kZSwgYnV0IHRoZW4gY2xhaW0gdGhhdCB5b3Ug
ZGlkbid0IGhpdCBhbnl0aGluZywgdW5sZXNzIGl0IGlzCiAgICAgICAgIC8vIGEgcmVjdC1iYXNl
ZCB0ZXN0LgogICAgICAgICBBU1NFUlQoIXJlc3VsdC5pbm5lck5vZGUoKSB8fCAocmVzdWx0Lmlz
UmVjdEJhc2VkVGVzdCgpICYmIHJlc3VsdC5yZWN0QmFzZWRUZXN0UmVzdWx0KCkuc2l6ZSgpKSk7
CkBAIC00NDA5LDcgKzQ3MDksNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
aXN0KFZlCiAgICAgICAgIFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7CiAg
ICAgICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IDA7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQg
dGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9uKCkpOwotICAgICAgICBpZiAoY2hpbGRM
YXllci0+aXNQYWdpbmF0ZWQoKSAmJiAhdXNlUmVnaW9uQmFzZWRDb2x1bW5zKCkpCisgICAgICAg
IGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBo
aXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3Qs
IHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRl
LCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBoaXRM
YXllciA9IGNoaWxkTGF5ZXItPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3Qs
IHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlLCB0cmFuc2Zv
cm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKQEAgLTQ2OTEsOCArNDk5MSwxOCBAQCBz
dGF0aWMgaW5saW5lIENsaXBSZWN0IGJhY2tncm91bmRDbGlwUmVjCiBDbGlwUmVjdCBSZW5kZXJM
YXllcjo6YmFja2dyb3VuZENsaXBSZWN0KGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0
c0NvbnRleHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHBhcmVudCgpKTsKKyAgICAKICAgICBDbGlw
UmVjdHMgcGFyZW50UmVjdHM7Ci0gICAgcGFyZW50Q2xpcFJlY3RzKGNsaXBSZWN0c0NvbnRleHQs
IHBhcmVudFJlY3RzKTsKKworICAgIC8vIElmIHdlIGNyb3NzIGludG8gYSBkaWZmZXJlbnQgcGFn
aW5hdGlvbiBjb250ZXh0LCB0aGVuIHdlIGNhbid0IHJlbHkgb24gdGhlIGNhY2hlLgorICAgIC8v
IEp1c3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgVGVtcG9yYXJ5Q2xpcFJlY3RzLgorICAgIGlmIChj
bGlwUmVjdHNDb250ZXh0LmNsaXBSZWN0c1R5cGUgIT0gVGVtcG9yYXJ5Q2xpcFJlY3RzICYmIHBh
cmVudCgpLT5lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSAhPSBlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKSkgeworICAgICAgICBDbGlwUmVjdHNDb250ZXh0IHRlbXBDb250ZXh0KGNsaXBSZWN0
c0NvbnRleHQpOworICAgICAgICB0ZW1wQ29udGV4dC5jbGlwUmVjdHNUeXBlID0gVGVtcG9yYXJ5
Q2xpcFJlY3RzOworICAgICAgICBwYXJlbnRDbGlwUmVjdHModGVtcENvbnRleHQsIHBhcmVudFJl
Y3RzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGFyZW50Q2xpcFJlY3RzKGNsaXBSZWN0c0NvbnRl
eHQsIHBhcmVudFJlY3RzKTsKKyAgICAKICAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kQ2xpcFJlY3Qg
PSBiYWNrZ3JvdW5kQ2xpcFJlY3RGb3JQb3NpdGlvbihwYXJlbnRSZWN0cywgcmVuZGVyZXIoKS0+
c3R5bGUoKS0+cG9zaXRpb24oKSk7CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCkt
PnZpZXcoKTsKICAgICBBU1NFUlQodmlldyk7CkBAIC00ODYwLDcgKzUxNzAsNyBAQCBib29sIFJl
bmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjCiAgICAgICAgIAogICAgIC8vIE90aGVy
d2lzZSB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGlzIHNpbmdsZSBs
YXllciBhbmQgc2VlIGlmIGl0IGludGVyc2VjdHMKICAgICAvLyB0aGUgZGFtYWdlIHJlY3QuCi0g
ICAgcmV0dXJuIGJvdW5kaW5nQm94KHJvb3RMYXllciwgb2Zmc2V0RnJvbVJvb3QpLmludGVyc2Vj
dHMoZGFtYWdlUmVjdCk7CisgICAgcmV0dXJuIGJvdW5kaW5nQm94KHJvb3RMYXllciwgMCwgb2Zm
c2V0RnJvbVJvb3QpLmludGVyc2VjdHMoZGFtYWdlUmVjdCk7CiB9CiAKIExheW91dFJlY3QgUmVu
ZGVyTGF5ZXI6OmxvY2FsQm91bmRpbmdCb3goQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFn
cykgY29uc3QKQEAgLTQ5MTEsMTQgKzUyMjEsMzMgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6
bG9jYWxCb3VuZGluZ0JveAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBj
b25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRl
ckxheWVyOjpib3VuZGluZ0JveChjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ2Fs
Y3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncywgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZy
b21Sb290KSBjb25zdAogeyAgICAKLSAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGxvY2FsQm91bmRp
bmdCb3goKTsKKyAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGxvY2FsQm91bmRpbmdCb3goZmxhZ3Mp
OwogICAgIGlmIChyZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZW5kZXJCb3goKS0+Zmxp
cEZvcldyaXRpbmdNb2RlKHJlc3VsdCk7CiAgICAgZWxzZQogICAgICAgICByZW5kZXJlcigpLT5j
b250YWluaW5nQmxvY2soKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlc3VsdCk7CiAKKyAgICBpZiAo
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkgJiYgKGZsYWdzICYgVXNlRnJhZ21lbnRCb3hlcykp
IHsKKyAgICAgICAgLy8gU3BsaXQgb3VyIGJveCB1cCBpbnRvIHRoZSBhY3R1YWwgZnJhZ21lbnQg
Ym94ZXMgdGhhdCByZW5kZXIgaW4gdGhlIGNvbHVtbnMvcGFnZXMgYW5kIHVuaXRlIHRob3NlIHRv
Z2V0aGVyIHRvCisgICAgICAgIC8vIGdldCBvdXIgdHJ1ZSBib3VuZGluZyBib3guCisgICAgICAg
IExheW91dFBvaW50IG9mZnNldFdpdGhpblBhZ2luYXRpb25MYXllcjsKKyAgICAgICAgY29udmVy
dFRvTGF5ZXJDb29yZHMoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIG9mZnNldFdpdGhpblBh
Z2luYXRpb25MYXllcik7ICAgICAgICAKKyAgICAgICAgcmVzdWx0Lm1vdmVCeShvZmZzZXRXaXRo
aW5QYWdpbmF0aW9uTGF5ZXIpOworCisgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGVuY2xvc2lu
Z0Zsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dUaHJlYWQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVy
KCktPnJlbmRlcmVyKCkpOworICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdGbG93VGhyZWFkLT5m
cmFnbWVudHNCb3VuZGluZ0JveChyZXN1bHQpOworICAgICAgICAKKyAgICAgICAgTGF5b3V0UG9p
bnQgZGVsdGE7CisgICAgICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKKyAgICAgICAgICAgIGRlbHRh
ID0gKm9mZnNldEZyb21Sb290OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmNsb3NpbmdQ
YWdpbmF0aW9uTGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgZGVs
dGEpOworICAgICAgICByZXN1bHQubW92ZUJ5KGRlbHRhKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKICAgICBMYXlvdXRQb2ludCBkZWx0YTsKICAgICBpZiAob2Zmc2V0RnJvbVJv
b3QpCiAgICAgICAgIGRlbHRhID0gKm9mZnNldEZyb21Sb290OwpAQCAtNTMzNiw3ICs1NjY1LDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhib29sIGluYwogICAgIGJvb2wgaXNT
dGFja2luZyA9IGJlaGF2aW9yID09IFN0b3BBdFN0YWNraW5nQ29udGV4dHMgPyBpc1N0YWNraW5n
Q29udGV4dCgpIDogaXNTdGFja2luZ0NvbnRhaW5lcigpOwogICAgIC8vIE92ZXJmbG93IGxheWVy
cyBhcmUganVzdCBwYWludGVkIGJ5IHRoZWlyIGVuY2xvc2luZyBsYXllcnMsIHNvIHRoZXkgZG9u
J3QgZ2V0IHB1dCBpbiB6b3JkZXIgbGlzdHMuCiAgICAgYm9vbCBpbmNsdWRlSGlkZGVuTGF5ZXIg
PSBpbmNsdWRlSGlkZGVuTGF5ZXJzIHx8IChtX2hhc1Zpc2libGVDb250ZW50IHx8IChtX2hhc1Zp
c2libGVEZXNjZW5kYW50ICYmIGlzU3RhY2tpbmcpKTsKLSAgICBpZiAoaW5jbHVkZUhpZGRlbkxh
eWVyICYmICFpc05vcm1hbEZsb3dPbmx5KCkgJiYgIXJlbmRlcmVyKCktPmlzUmVuZGVyRmxvd1Ro
cmVhZCgpKSB7CisgICAgaWYgKGluY2x1ZGVIaWRkZW5MYXllciAmJiAhaXNOb3JtYWxGbG93T25s
eSgpICYmICFpc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkgewogICAgICAgICAvLyBEZXRl
cm1pbmUgd2hpY2ggYnVmZmVyIHRoZSBjaGlsZCBzaG91bGQgYmUgaW4uCiAgICAgICAgIE93blB0
cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+JiBidWZmZXIgPSAoekluZGV4KCkgPj0gMCkgPyBwb3NC
dWZmZXIgOiBuZWdCdWZmZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBjbGFzcyBGaWx0ZXJP
cGVyYXRpb25zOwogY2xhc3MgSGl0VGVzdFJlcXVlc3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0Owog
Y2xhc3MgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOworY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsK
IGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJl
bmRlclJlcGxpY2E7CkBAIC0xMTQsNiArMTE1LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2b2lk
IG1vdmUoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0IHkpIHsgbV9yZWN0Lm1vdmUoeCwgeSk7IH0K
ICAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3JlY3QubW92ZShzaXpl
KTsgfQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgeyBtX3JlY3Qu
bW92ZUJ5KHBvaW50KTsgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0LmlzRW1wdHkoKTsgfQogICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBMYXlvdXRSZWN0JiBy
ZWN0KSB7IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0cyhyZWN0KTsgfQpAQCAtMjUxLDYgKzI1Myw1
MiBAQCBwdWJsaWM6CiAjZW5kaWYKIH07CiAKK3N0cnVjdCBMYXllckZyYWdtZW50IHsKK3B1Ymxp
YzoKKyAgICBMYXllckZyYWdtZW50KCkKKyAgICAgICAgOiBzaG91bGRQYWludENvbnRlbnQoZmFs
c2UpCisgICAgeyB9CisKKyAgICB2b2lkIHNldFJlY3RzKGNvbnN0IExheW91dFJlY3QmIGJvdW5k
cywgY29uc3QgQ2xpcFJlY3QmIGJhY2tncm91bmQsIGNvbnN0IENsaXBSZWN0JiBmb3JlZ3JvdW5k
LCBjb25zdCBDbGlwUmVjdCYgb3V0bGluZSkKKyAgICB7CisgICAgICAgIGxheWVyQm91bmRzID0g
Ym91bmRzOworICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IGJhY2tncm91bmQ7CisgICAgICAgIGZv
cmVncm91bmRSZWN0ID0gZm9yZWdyb3VuZDsKKyAgICAgICAgb3V0bGluZVJlY3QgPSBvdXRsaW5l
OworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgbGF5ZXJCb3VuZHMubW92ZUJ5KG9mZnNldCk7CisgICAgICAgIGJh
Y2tncm91bmRSZWN0Lm1vdmVCeShvZmZzZXQpOworICAgICAgICBmb3JlZ3JvdW5kUmVjdC5tb3Zl
Qnkob2Zmc2V0KTsKKyAgICAgICAgb3V0bGluZVJlY3QubW92ZUJ5KG9mZnNldCk7CisgICAgICAg
IHBhZ2luYXRpb25DbGlwLm1vdmVCeShvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGlu
dGVyc2VjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgYmFja2dyb3Vu
ZFJlY3QuaW50ZXJzZWN0KHJlY3QpOworICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3Qo
cmVjdCk7CisgICAgICAgIG91dGxpbmVSZWN0LmludGVyc2VjdChyZWN0KTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQ7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5k
czsKKyAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5k
UmVjdDsKKyAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsKKyAgICAKKyAgICAvLyBVbmlxdWUgdG8g
cGFnaW5hdGVkIGZyYWdtZW50cy4gVGhlIHBoeXNpY2FsIHRyYW5zbGF0aW9uIHRvIGFwcGx5IHRv
IHNoaWZ0IHRoZSBsYXllciB3aGVuIHBhaW50aW5nL2hpdC10ZXN0aW5nLgorICAgIExheW91dFBv
aW50IHBhZ2luYXRpb25PZmZzZXQ7CisgICAgCisgICAgLy8gQWxzbyB1bmlxdWUgdG8gcGFnaW5h
dGVkIGZyYWdtZW50cy4gQW4gYWRkaXRpb25hbCBjbGlwIHRoYXQgYXBwbGllcyB0byB0aGUgbGF5
ZXIuIEl0IGlzIGluIGxheWVyLWxvY2FsCisgICAgLy8gKHBoeXNpY2FsKSBjb29yZGluYXRlcy4K
KyAgICBMYXlvdXRSZWN0IHBhZ2luYXRpb25DbGlwOworfTsKKwordHlwZWRlZiBWZWN0b3I8TGF5
ZXJGcmFnbWVudD4gTGF5ZXJGcmFnbWVudHM7CisKIGNsYXNzIFJlbmRlckxheWVyIDogcHVibGlj
IFNjcm9sbGFibGVBcmVhIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGlj
YTsKQEAgLTQxOCw2ICs0NjYsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAgICBib29sIGlz
UGFnaW5hdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BhZ2luYXRlZDsgfQorICAgIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2VuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcjsgfQogCiAgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKICAgICAK
QEAgLTYyMiwxMiArNjcxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgRXhjbHVkZUhpZGRlbkRlc2Nl
bmRhbnRzID0gMSA8PCAzLAogICAgICAgICBEb250Q29uc3RyYWluRm9yTWFzayA9IDEgPDwgNCwK
ICAgICAgICAgSW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyA9IDEgPDwgNSwKLSAgICAgICAg
RGVmYXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAgSW5jbHVkZVNlbGZUcmFuc2Zvcm0g
fCBVc2VMb2NhbENsaXBSZWN0SWZQb3NzaWJsZSB8IEluY2x1ZGVMYXllckZpbHRlck91dHNldHMK
KyAgICAgICAgVXNlRnJhZ21lbnRCb3hlcyA9IDEgPDwgNiwKKyAgICAgICAgRGVmYXVsdENhbGN1
bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAgSW5jbHVkZVNlbGZUcmFuc2Zvcm0gfCBVc2VMb2NhbENs
aXBSZWN0SWZQb3NzaWJsZSB8IEluY2x1ZGVMYXllckZpbHRlck91dHNldHMgfCBVc2VGcmFnbWVu
dEJveGVzCiAgICAgfTsKICAgICB0eXBlZGVmIHVuc2lnbmVkIENhbGN1bGF0ZUxheWVyQm91bmRz
RmxhZ3M7CiAKICAgICAvLyBCb3VuZGluZyBib3ggcmVsYXRpdmUgdG8gc29tZSBhbmNlc3RvciBs
YXllci4gUGFzcyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93bi4KLSAgICBMYXlvdXRSZWN0IGJvdW5k
aW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBv
ZmZzZXRGcm9tUm9vdCA9IDApIGNvbnN0OworICAgIExheW91dFJlY3QgYm91bmRpbmdCb3goY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IDAs
IGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDApIGNvbnN0OwogICAgIC8vIEJv
dW5kaW5nIGJveCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhpcyBsYXllci4KICAgICBMYXlvdXRS
ZWN0IGxvY2FsQm91bmRpbmdCb3goQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IDApIGNvbnN0
OwogICAgIC8vIFBpeGVsIHNuYXBwZWQgYm91bmRpbmcgYm94IHJlbGF0aXZlIHRvIHRoZSByb290
LgpAQCAtNzgxLDYgKzgzMSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdwb3J0Q29uc3Ry
YWluZWROb3RDb21wb3NpdGVkUmVhc29uKFZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVk
UmVhc29uIHJlYXNvbikgeyBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29u
ID0gcmVhc29uOyB9CiAgICAgVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24g
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbj4obV92aWV3
cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbik7IH0KICNlbmRpZgorICAgIAorICAg
IGJvb2wgaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gcmVuZGVy
ZXIoKS0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCk7IH0KIAogcHJpdmF0ZToKICAgICBl
bnVtIENvbGxlY3RMYXllcnNCZWhhdmlvciB7IFN0b3BBdFN0YWNraW5nQ29udGV4dHMsIFN0b3BB
dFN0YWNraW5nQ29udGFpbmVycyB9OwpAQCAtODg2LDEzICs5MzgsMzIgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBhaW50TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzQW5kUmVm
bGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50
TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOworICAgIHZvaWQg
cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExheW91dFBvaW50JiB0cmFu
c2xhdGlvbk9mZnNldCA9IExheW91dFBvaW50KCkpOwogICAgIHZvaWQgcGFpbnRMaXN0KFZlY3Rv
cjxSZW5kZXJMYXllcio+KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRQYWdpbmF0ZWRDaGlsZExheWVy
KFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludENoaWxkTGF5ZXJJ
bnRvQ29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IFZlY3RvcjxSZW5k
ZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNpemVfdCBjb2x1bW5JbmRleCk7CiAKKyAgICB2b2lk
IGNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBSZW5kZXJMYXllciogcm9v
dExheWVyLCBSZW5kZXJSZWdpb24qLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCisgICAg
ICAgIENsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwKKyAg
ICAgICAgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXAsIGNv
bnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDApOworICAgIHZvaWQgdXBkYXRlUGFp
bnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgTGF5ZXJQYWludGlu
Z0luZm8mLCBQYWludExheWVyRmxhZ3MsIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBM
YXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpOworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9y
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgR3JhcGhp
Y3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisgICAgICAgIGNvbnN0IExheW91
dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ks
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBw
YWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBHcmFwaGljc0Nv
bnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVj
dCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50
aW5nUm9vdEZvclJlbmRlcmVyLAorICAgICAgICBib29sIHNlbGVjdGlvbk9ubHksIGJvb2wgZm9y
Y2VCbGFja1RleHQpOworICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBo
YXNlKFBhaW50UGhhc2UsIGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBh
aW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50
cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlcik7CisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29u
c3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYpOworICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBSZW5kZXJP
YmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50VHJhbnNmb3Jt
ZWRMYXllckludG9GcmFnbWVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGlu
Z0luZm8mLCBQYWludExheWVyRmxhZ3MpOworCiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXll
cihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFu
c2Zvcm1TdGF0ZSA9IDAsIGRvdWJsZSogek9mZnNldCA9IDApOworICAgIFJlbmRlckxheWVyKiBo
aXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJl
bmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSAwLCBkb3Vi
bGUqIHpPZmZzZXQgPSAwLAorICAgICAgICBjb25zdCBMYXlvdXRQb2ludCYgdHJhbnNsYXRpb25P
ZmZzZXQgPSBMYXlvdXRQb2ludCgpKTsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdExpc3QoVmVj
dG9yPFJlbmRlckxheWVyKj4qLCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2Vu
ZGFudHMsIGRvdWJsZSogek9mZnNldCwKQEAgLTkwNyw5ICs5NzgsMTQgQEAgcHJpdmF0ZToKIAog
ICAgIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBjcmVhdGVMb2NhbFRyYW5z
Zm9ybVN0YXRlKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJM
YXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRU
ZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0
YXRlKSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91
dFBvaW50KCkpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91
bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKKyAgICBi
b29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKKyAgICBib29s
IGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogaGl0VGVzdFRyYW5zZm9y
bWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciog
Y29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCisg
ICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gMCwgZG91YmxlKiB6T2Zmc2V0
ID0gMCk7CiAKICAgICBib29sIGxpc3RDb250ZW50c09wYXF1ZUluUmVjdChjb25zdCBWZWN0b3I8
UmVuZGVyTGF5ZXIqPiosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtMTE4NCw2ICsx
MjYwLDkgQEAgcHJvdGVjdGVkOgogICAgIFJlbmRlclNjcm9sbGJhclBhcnQqIG1fc2Nyb2xsQ29y
bmVyOwogICAgIFJlbmRlclNjcm9sbGJhclBhcnQqIG1fcmVzaXplcjsKIAorICAgIC8vIFBvaW50
ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5kZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdp
bmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJlIG5vdCBwYWdpbmF0ZWQuCisgICAgUmVuZGVyTGF5ZXIq
IG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOworCiBwcml2YXRlOgogICAgIEludFJlY3QgbV9i
bG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAJKHJldmlzaW9uIDE0NDAwNykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCw2IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBjcmVhdGVNdWwKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlKFJlbmRl
clN0eWxlOjpjcmVhdGUoKSk7CiAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxl
KTsKICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgbmV3U3R5bGUtPnNldFBv
c2l0aW9uKFJlbGF0aXZlUG9zaXRpb24pOwotICAgIG5ld1N0eWxlLT5zZXRaSW5kZXgoMCk7CiAg
ICAgbmV3U3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7CiAgICAgcmV0dXJuIG5ld1N0eWxlLnJlbGVh
c2UoKTsKIH0KQEAgLTE2Miw2ICsxNjAsMTUgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2Nr
OjplbnN1cmVDb2x1bQogICAgIGNvbHVtblNldC0+c2V0UmVxdWlyZXNCYWxhbmNpbmcocmVxdWly
ZXNCYWxhbmNpbmcoKSk7CiB9CiAKK3ZvaWQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6bGF5b3V0
QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0
KQoreworICAgIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhyZWxheW91dENoaWxkcmVuLCBwYWdl
TG9naWNhbEhlaWdodCk7CisgICAgCisgICAgLy8gU2hpZnQgdGhlIGZsb3cgdGhyZWFkIGJhY2sg
dXAgdG8gdGhlIHRvcCBvZiB0aGUgYmxvY2suCisgICAgaWYgKGZsb3dUaHJlYWQoKSkKKyAgICAg
ICAgZmxvd1RocmVhZCgpLT5zZXRMb2dpY2FsVG9wKGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0Jl
Zm9yZSgpKTsKK30KKwogY29uc3QgY2hhciogUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6cmVuZGVy
TmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRmxvYXRpbmcoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suaAkocmV2aXNpb24g
MTQ0MDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBwcml2YXRlOgogICAgIAogICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogCisgICAgdmlydHVhbCB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbEhlaWdodCA9IDApIE9WRVJSSURFOworCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUxvZ2lj
YWxXaWR0aEFuZENvbHVtbldpZHRoKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNr
Rm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoTGF5b3V0VW5pdCYgcGFnZUxvZ2ljYWxI
ZWlnaHQsIGJvb2wmIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgYm9vbCYgaGFzU3BlY2lmaWVk
UGFnZUxvZ2ljYWxIZWlnaHQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCByZWxheW91dEZv
clBhZ2luYXRpb24oYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0VW5p
dCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJikgT1ZFUlJJREU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZC5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDggKzM3LDYgQEAgcHVibGljOgogICAgIH5SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQoKTsK
IAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVM
b2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdCBPVkVSUklERTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNl
dC5jcHAJKHJldmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtblNldC5oIgogCi0j
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oIgog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgogCkBAIC0yNDksMTAgKzI0
OSw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBhaW50T2JqZWN0KFAKICAgICBpZiAo
IW1fZmxvd1RocmVhZCB8fCAhaXNWYWxpZCgpIHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24p
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKTsK
ICAgICBwYWludENvbHVtblJ1bGVzKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgIHBhaW50
Q29sdW1uQ29udGVudHMocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgcmVzdG9yZVJlZ2lv
bk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CiB9CiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6
OnBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKQEAgLTMwOSw3NiArMzA2LDYgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVt
blNldDo6cGFpbnRDb2x1bW5SdQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNl
dDo6cGFpbnRDb2x1bW5Db250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIC8vIEZvciBlYWNoIHJlY3RhbmdsZSwgc2V0IGl0
IGFzIHRoZSByZWdpb24gcmVjdGFuZ2xlIGFuZCB0aGVuIGxldCBmbG93IHRocmVhZCBwYWludGlu
ZyBkbyB0aGUgcmVzdC4KLSAgICAvLyBXZSBtYWtlIG11bHRpcGxlIGNhbGxzIHRvIHBhaW50Rmxv
d1RocmVhZFBvcnRpb25JblJlZ2lvbiwgY2hhbmdpbmcgdGhlIHJlY3RhbmdsZXMgZWFjaCB0aW1l
LgotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQoKTsKLSAgICBpZiAoIWNvbENv
dW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRVbml0IGNvbEdhcCA9IGNvbHVtbkdh
cCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAg
ICAgIC8vIEZpcnN0IHdlIGdldCB0aGUgY29sdW1uIHJlY3QsIHdoaWNoIGlzIGluIG91ciBsb2Nh
bCBjb29yZGluYXRlIHNwYWNlLCBhbmQgd2UgbWFrZSBpdCBwaHlzaWNhbCBhbmQgYXBwbHkKLSAg
ICAgICAgLy8gdGhlIHBhaW50IG9mZnNldCB0byBpdC4gVGhhdCBnaXZlcyB1cyB0aGUgcGh5c2lj
YWwgbG9jYXRpb24gdGhhdCB3ZSB3YW50IHRvIHBhaW50IHRoZSBjb2x1bW4gYXQuCi0gICAgICAg
IExheW91dFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChpKTsKLSAgICAgICAgZmxpcEZvcldy
aXRpbmdNb2RlKGNvbFJlY3QpOwotICAgICAgICBjb2xSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBOZXh0IHdlIGdldCB0aGUgcG9ydGlvbiBvZiB0aGUgZmxv
dyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIGNvbHVtbi4KLSAgICAgICAgTGF5b3V0
UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uUmVjdEF0KGkpOwotICAg
ICAgICAKLSAgICAgICAgLy8gTm93IGdldCB0aGUgb3ZlcmZsb3cgcmVjdCB0aGF0IGNvcnJlc3Bv
bmRzIHRvIHRoZSBjb2x1bW4uCi0gICAgICAgIExheW91dFJlY3QgZmxvd1RocmVhZE92ZXJmbG93
UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KGZsb3dUaHJlYWRQb3J0aW9u
LCBpLCBjb2xDb3VudCwgY29sR2FwKTsKLQotICAgICAgICAvLyBEbyB0aGUgcGFpbnQgd2l0aCB0
aGUgY29tcHV0ZWQgcmVjdHMuCi0gICAgICAgIGZsb3dUaHJlYWQoKS0+cGFpbnRGbG93VGhyZWFk
UG9ydGlvbkluUmVnaW9uKHBhaW50SW5mbywgdGhpcywgZmxvd1RocmVhZFBvcnRpb24sIGZsb3dU
aHJlYWRPdmVyZmxvd1BvcnRpb24sIGNvbFJlY3QubG9jYXRpb24oKSk7Ci0gICAgfQotfQotCi1i
b29sIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
IGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCi17Ci0gICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2Nh
dGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKLQotICAgIC8vIENoZWNrIG91
ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2Fu
IG9ubHkgYmUgaGl0IGluIHRoZQotICAgIC8vIGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRy
dWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KLSAgICAvLyBGSVhNRTogT25j
ZSB3ZSBzdXBwb3J0IG92ZXJmbG93LCB3ZSBuZWVkIHRvIGludGVyc2VjdCB3aXRoIHRoYXQgYW5k
IG5vdCB3aXRoIHRoZSBib3VuZHMgcmVjdC4KLSAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QgPSBi
b3JkZXJCb3hSZWN0SW5SZWdpb24obG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24oKSk7Ci0gICAg
Ym91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgaWYgKCF2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgfHwgYWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kIHx8ICFsb2NhdGlvbklu
Q29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICAvLyBUaGUgcG9pbnQgaXMgaW4gb25lIHNwZWNpZmljIGNvbHVtbi4gU2luY2Ug
Y29sdW1ucyBjYW4ndCBvdmVybGFwLCB3ZSBkb24ndCBldmVyIGhhdmUgdG8gdGVzdAotICAgIC8v
IG11bHRpcGxlIGNvbHVtbnMuIFB1dCB0aGUgCi0gICAgCi0gICAgLy8gRklYTUU6IEl0IHdvdWxk
IGJlIG5pY2UgdG8ganVtcCByaWdodCB0byB0aGUgc3BlY2lmaWMgY29sdW1uIGJ5IGp1c3QgZG9p
bmcgbWF0aCBvbiB0aGUgcG9pbnQuIFNpbmNlIGNvbHVtbnMKLSAgICAvLyBjYW4ndCBvdmVybGFw
LCB3ZSBzaG91bGRuJ3QgaGF2ZSB0byB3YWxrIGV2ZXJ5IGNvbHVtbiBsaWtlIHRoaXMuIFRoZSBv
bGQgY29sdW1uIGNvZGUgd2Fsa2VkIGFsbCB0aGUgY29sdW1ucywgdGhvdWdoLAotICAgIC8vIHNv
IHRoaXMgaXMgbm8gd29yc2UuIFdlJ2QgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHJlY3QtYmFzZWQg
aGl0IHRlc3RpbmcsIHRob3VnaCwgd2hpY2ggYWN0dWFsbHkgY291bGQgb3ZlcmxhcAotICAgIC8v
IG11bHRpcGxlIGNvbHVtbnMuCi0gICAgTGF5b3V0VW5pdCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsK
LSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgZ2V0IHRo
ZSBjb2x1bW4gcmVjdCwgd2hpY2ggaXMgaW4gb3VyIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UsIGFu
ZCB3ZSBtYWtlIGl0IHBoeXNpY2FsIGFuZCBhcHBseQotICAgICAgICAvLyB0aGUgaGl0IHRlc3Qg
b2Zmc2V0IHRvIGl0LiBUaGF0IGdpdmVzIHVzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiB0aGF0IHdl
IHdhbnQgdG8gcGFpbnQgdGhlIGNvbHVtbiBhdC4KLSAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0
ID0gY29sdW1uUmVjdEF0KGkpOwotICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUoY29sUmVjdCk7
Ci0gICAgICAgIGNvbFJlY3QubW92ZUJ5KGFkanVzdGVkTG9jYXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgLy8gTmV4dCB3ZSBnZXQgdGhlIHBvcnRpb24gb2YgdGhlIGZsb3cgdGhyZWFkIHRoYXQg
Y29ycmVzcG9uZHMgdG8gdGhpcyBjb2x1bW4uCi0gICAgICAgIExheW91dFJlY3QgZmxvd1RocmVh
ZFBvcnRpb24gPSBmbG93VGhyZWFkUG9ydGlvblJlY3RBdChpKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIE5vdyBnZXQgdGhlIG92ZXJmbG93IHJlY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY29s
dW1uLgotICAgICAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24gPSBmbG93
VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdChmbG93VGhyZWFkUG9ydGlvbiwgaSwgY29sQ291bnQs
IGNvbEdhcCk7Ci0KLSAgICAgICAgLy8gRG8gdGhlIGhpdCB0ZXN0IHdpdGggdGhlIGNvbXB1dGVk
IHJlY3RzLgotICAgICAgICBpZiAoZmxvd1RocmVhZCgpLT5oaXRUZXN0Rmxvd1RocmVhZFBvcnRp
b25JblJlZ2lvbih0aGlzLCBmbG93VGhyZWFkUG9ydGlvbiwgZmxvd1RocmVhZE92ZXJmbG93UG9y
dGlvbiwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBjb2xSZWN0LmxvY2F0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xh
eW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwotICAgIHJldHVybiAhcmVzdWx0LmFkZE5vZGVU
b1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVy
LCBib3VuZHNSZWN0KTsKLX0KLQogdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cmVwYWludEZs
b3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGltbWVk
aWF0ZSkgY29uc3QKIHsKICAgICAvLyBGaWd1cmUgb3V0IHRoZSBzdGFydCBhbmQgZW5kIGNvbHVt
bnMgYW5kIG9ubHkgY2hlY2sgd2l0aGluIHRoYXQgcmFuZ2Ugc28gdGhhdCB3ZSBkb24ndCB3YWxr
IHRoZQpAQCAtNDE3LDYgKzM0NCw4OCBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpyZXBh
aW50Rmxvd1RoCiAgICAgfQogfQogCit2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpjb2xsZWN0
TGF5ZXJGcmFnbWVudHMoVmVjdG9yPExheWVyRnJhZ21lbnQ+JiBmcmFnbWVudHMsIGNvbnN0IExh
eW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICAvLyBQdXQgdGhlIGxheWVyIGJvdW5kcyBpbnRvIGZsb3cgdGhyZWFkLWxvY2FsIGNv
b3JkaW5hdGVzIGJ5IGZsaXBwaW5nIGl0IGZpcnN0LgorICAgIExheW91dFJlY3QgbGF5ZXJCb3Vu
ZHNJbkZsb3dUaHJlYWQobGF5ZXJCb3VuZGluZ0JveCk7CisgICAgZmxvd1RocmVhZCgpLT5mbGlw
Rm9yV3JpdGluZ01vZGUobGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQpOworCisgICAgLy8gRG8gdGhl
IHNhbWUgZm9yIHRoZSBkaXJ0eSByZWN0LgorICAgIExheW91dFJlY3QgZGlydHlSZWN0SW5GbG93
VGhyZWFkKGRpcnR5UmVjdCk7CisgICAgZmxvd1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGUo
ZGlydHlSZWN0SW5GbG93VGhyZWFkKTsKKworICAgIC8vIE5vdyB3ZSBjYW4gY29tcGFyZSB3aXRo
IHRoZSBmbG93IHRocmVhZCBwb3J0aW9ucyBvd25lZCBieSBlYWNoIGNvbHVtbi4gRmlyc3QgbGV0
J3MKKyAgICAvLyBzZWUgaWYgdGhlIHJlY3QgaW50ZXJzZWN0cyBvdXIgZmxvdyB0aHJlYWQgcG9y
dGlvbiBhdCBhbGwuCisgICAgTGF5b3V0UmVjdCBjbGlwcGVkUmVjdChsYXllckJvdW5kc0luRmxv
d1RocmVhZCk7CisgICAgY2xpcHBlZFJlY3QuaW50ZXJzZWN0KFJlbmRlclJlZ2lvbjo6Zmxvd1Ro
cmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKSk7CisgICAgaWYgKGNsaXBwZWRSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHdlIGludGVyc2Vj
dCBhdCBsZWFzdCBvbmUgY29sdW1uLiBMZXQncyBmaWd1cmUgb3V0IHRoZSBsb2dpY2FsIHRvcCBh
bmQgbG9naWNhbAorICAgIC8vIGJvdHRvbSBvZiB0aGUgYXJlYSB3ZSdyZSBjaGVja2luZy4KKyAg
ICBMYXlvdXRVbml0IGxheWVyTG9naWNhbFRvcCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBsYXllckJvdW5kc0luRmxvd1RocmVhZC55KCkgOiBsYXllckJvdW5kc0luRmxvd1RocmVhZC54
KCk7CisgICAgTGF5b3V0VW5pdCBsYXllckxvZ2ljYWxCb3R0b20gPSAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGxheWVyQm91bmRzSW5GbG93VGhyZWFkLm1heFkoKSA6IGxheWVyQm91bmRz
SW5GbG93VGhyZWFkLm1heFgoKSkgLSAxOworICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHN0
YXJ0IGFuZCBlbmQgY29sdW1ucyBhbmQgb25seSBjaGVjayB3aXRoaW4gdGhhdCByYW5nZSBzbyB0
aGF0IHdlIGRvbid0IHdhbGsgdGhlCisgICAgLy8gZW50aXJlIGNvbHVtbiBzZXQuCisgICAgdW5z
aWduZWQgc3RhcnRDb2x1bW4gPSBjb2x1bW5JbmRleEF0T2Zmc2V0KGxheWVyTG9naWNhbFRvcCk7
CisgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gY29sdW1uSW5kZXhBdE9mZnNldChsYXllckxvZ2lj
YWxCb3R0b20pOworICAgIAorICAgIExheW91dFVuaXQgY29sTG9naWNhbFdpZHRoID0gY29tcHV0
ZWRDb2x1bW5XaWR0aCgpOworICAgIExheW91dFVuaXQgY29sR2FwID0gY29sdW1uR2FwKCk7Cisg
ICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3VudCgpOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IHN0YXJ0Q29sdW1uOyBpIDw9IGVuZENvbHVtbjsgaSsrKSB7CisgICAgICAgIC8v
IEdldCB0aGUgcG9ydGlvbiBvZiB0aGUgZmxvdyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0byB0
aGlzIGNvbHVtbi4KKyAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZsb3dU
aHJlYWRQb3J0aW9uUmVjdEF0KGkpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGdldCB0aGUg
b3ZlcmZsb3cgcmVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjb2x1bW4uCisgICAgICAgIExh
eW91dFJlY3QgZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uT3Zl
cmZsb3dSZWN0KGZsb3dUaHJlYWRQb3J0aW9uLCBpLCBjb2xDb3VudCwgY29sR2FwKTsKKworICAg
ICAgICAvLyBJbiBvcmRlciB0byBjcmVhdGUgYSBmcmFnbWVudCB3ZSBtdXN0IGludGVyc2VjdCB0
aGUgcG9ydGlvbiBwYWludGVkIGJ5IHRoaXMgY29sdW1uLgorICAgICAgICBMYXlvdXRSZWN0IGNs
aXBwZWRSZWN0KGxheWVyQm91bmRzSW5GbG93VGhyZWFkKTsKKyAgICAgICAgY2xpcHBlZFJlY3Qu
aW50ZXJzZWN0KGZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24pOworICAgICAgICBpZiAoY2xpcHBl
ZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAg
ICAvLyBXZSBhbHNvIG5lZWQgdG8gaW50ZXJzZWN0IHRoZSBkaXJ0eSByZWN0LiBXZSBoYXZlIHRv
IGFwcGx5IGEgdHJhbnNsYXRpb24gYW5kIHNoaWZ0IGJhc2VkIG9mZgorICAgICAgICAvLyBvdXIg
Y29sdW1uIGluZGV4LgorICAgICAgICBMYXlvdXRQb2ludCB0cmFuc2xhdGlvbk9mZnNldDsKKyAg
ICAgICAgTGF5b3V0VW5pdCBpbmxpbmVPZmZzZXQgPSBpICogKGNvbExvZ2ljYWxXaWR0aCArIGNv
bEdhcCk7CisgICAgICAgIGlmICghc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQor
ICAgICAgICAgICAgaW5saW5lT2Zmc2V0ID0gLWlubGluZU9mZnNldDsKKyAgICAgICAgdHJhbnNs
YXRpb25PZmZzZXQuc2V0WChpbmxpbmVPZmZzZXQpOworICAgICAgICBMYXlvdXRVbml0IGJsb2Nr
T2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IC1mbG93VGhyZWFkUG9ydGlvbi55
KCkgOiAtZmxvd1RocmVhZFBvcnRpb24ueCgpOworICAgICAgICBpZiAoaXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSkpCisgICAgICAgICAgICBibG9ja09m
ZnNldCA9IC1ibG9ja09mZnNldDsKKyAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQuc2V0WShibG9j
a09mZnNldCk7CisgICAgICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAg
ICAgICAgIHRyYW5zbGF0aW9uT2Zmc2V0ID0gdHJhbnNsYXRpb25PZmZzZXQudHJhbnNwb3NlZFBv
aW50KCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gaW5jbHVk
ZSB0aGUgbXVsdGljb2x1bW4gc2V0J3MgY29udGVudCBvZmZzZXQgd2l0aGluIHRoZQorICAgICAg
ICAvLyBtdWx0aWNvbHVtbiBibG9jayBhcyB3ZWxsLiBUaGlzIHdvbid0IGJlIGFuIGlzc3VlIHVu
dGlsIHdlIHN0YXJ0IGNyZWF0aW5nIG11bHRpcGxlIG11bHRpY29sdW1uIHNldHMuCisKKyAgICAg
ICAgLy8gU2hpZnQgdGhlIGRpcnR5IHJlY3QgdG8gYmUgaW4gZmxvdyB0aHJlYWQgY29vcmRpbmF0
ZXMgd2l0aCB0aGlzIHRyYW5zbGF0aW9uIGFwcGxpZWQuCisgICAgICAgIExheW91dFJlY3QgdHJh
bnNsYXRlZERpcnR5UmVjdChkaXJ0eVJlY3RJbkZsb3dUaHJlYWQpOworICAgICAgICB0cmFuc2xh
dGVkRGlydHlSZWN0Lm1vdmVCeSgtdHJhbnNsYXRpb25PZmZzZXQpOworICAgICAgICAKKyAgICAg
ICAgLy8gU2VlIGlmIHdlIGludGVyc2VjdCB0aGUgZGlydHkgcmVjdC4KKyAgICAgICAgY2xpcHBl
ZFJlY3QgPSBsYXllckJvdW5kc0luRmxvd1RocmVhZDsKKyAgICAgICAgY2xpcHBlZFJlY3QuaW50
ZXJzZWN0KHRyYW5zbGF0ZWREaXJ0eVJlY3QpOworICAgICAgICBpZiAoY2xpcHBlZFJlY3QuaXNF
bXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBTb21l
dGhpbmcgZG9lcyBuZWVkIHRvIHBhaW50IGluIHRoaXMgY29sdW1uLiBNYWtlIGEgZnJhZ21lbnQg
bm93IGFuZCBzdXBwbHkgdGhlIHBoeXNpY2FsIHRyYW5zbGF0aW9uCisgICAgICAgIC8vIG9mZnNl
dCBhbmQgdGhlIGNsaXAgcmVjdCBmb3IgdGhlIGNvbHVtbiB3aXRoIHRoYXQgb2Zmc2V0IGFwcGxp
ZWQuCisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQ7CisgICAgICAgIGZyYWdtZW50LnBh
Z2luYXRpb25PZmZzZXQgPSB0cmFuc2xhdGlvbk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExh
eW91dFJlY3QgZmxpcHBlZEZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb24oZmxvd1RocmVhZE92ZXJm
bG93UG9ydGlvbik7CisgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1RocmVh
ZE92ZXJmbG93UG9ydGlvbik7CisgICAgICAgIGZyYWdtZW50LnBhZ2luYXRpb25DbGlwID0gZmxp
cHBlZEZsb3dUaHJlYWRPdmVyZmxvd1BvcnRpb247CisgICAgICAgIGZyYWdtZW50cy5hcHBlbmQo
ZnJhZ21lbnQpOworICAgIH0KK30KKwogY29uc3QgY2hhciogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6
OnJlbmRlck5hbWUoKSBjb25zdAogeyAgICAKICAgICByZXR1cm4gIlJlbmRlck11bHRpQ29sdW1u
U2V0IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtblNldC5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1
dGVkVmFsdWVzJikgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmpl
Y3QoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBwYWdlTG9naWNhbFdpZHRoKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9j
b21wdXRlZENvbHVtbldpZHRoOyB9CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2Fs
SGVpZ2h0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jb21wdXRlZENvbHVtbkhlaWdodDsg
fQpAQCAtMTExLDEwICsxMTAsMTEgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludEZsb3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBi
b29sIGltbWVkaWF0ZSkgY29uc3QgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVj
dExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYsIGNvbnN0IExheW91dFJlY3Qm
IGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkgT1ZFUlJJREU7
CisKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKICAgICAKICAg
ICB2b2lkIHBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0KTsKLSAgICB2b2lkIHBhaW50Q29sdW1uQ29udGVudHMoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKIAogICAgIExheW91dFVuaXQgY29sdW1uR2Fw
KCkgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBjb2x1bW5SZWN0QXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDE0NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzE3LDcgKzIzMTcsNyBAQCBSZW5kZXJPYmplY3QqIFJl
bmRlck9iamVjdDo6Y29udGFpbmVyKGNvCiAjZW5kaWYKICAgICAgICAgICAgIC8vIFRoZSByZW5k
ZXIgZmxvdyB0aHJlYWQgaXMgdGhlIHRvcCBtb3N0IGNvbnRhaW5pbmcgYmxvY2sKICAgICAgICAg
ICAgIC8vIGZvciB0aGUgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cy4KLSAgICAgICAgICAgIGlm
IChvLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAgICAgIGlmIChvLT5pc091dE9mRmxv
d1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgaWYgKHJlcGFpbnRDb250YWluZXJTa2lwcGVkICYmIG8gPT0gcmVwYWludENvbnRhaW5lcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE0
NDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgxLDcgKzM4MSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBp
c1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJl
dHVybiBpc1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCk7IH0K
KyAgICBib29sIGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGlz
UmVuZGVyRmxvd1RocmVhZCgpICYmIGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpOyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtblNldCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC03MzIsNyArNzMzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShT
VkcpCiAgICAgICAgICAgICAgICAgfHwgaXNTVkdGb3JlaWduT2JqZWN0KCkKICNlbmRpZgotICAg
ICAgICAgICAgICAgIHx8IGlzUmVuZGVyRmxvd1RocmVhZCgpOworICAgICAgICAgICAgICAgIHx8
IGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpOwogICAgIH0KIAogICAgIC8vIENvbnZlcnQg
dGhlIGdpdmVuIGxvY2FsIHBvaW50IHRvIGFic29sdXRlIGNvb3JkaW5hdGVzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCShyZXZpc2lvbiAxNDQwMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgTGF5ZXJGcmFn
bWVudDsKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlckJveFJlZ2lvbkluZm87CiBjbGFz
cyBSZW5kZXJGbG93VGhyZWFkOwpAQCAtMTI3LDYgKzEyOCw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgcmVwYWludEZsb3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3Qm
IHJlcGFpbnRSZWN0LCBib29sIGltbWVkaWF0ZSkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
Y29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50PiYsIGNvbnN0IExheW91
dFJlY3QmLCBjb25zdCBMYXlvdXRSZWN0JikgeyB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHNl
dFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwogICAgIHZvaWQgcmVzdG9yZVJlZ2lvbk9iamVj
dHNPcmlnaW5hbFN0eWxlKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQxNDIpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMi0y
NiAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgW05ldyBNdWx0aWNv
bHVtbl0gUmV3cml0ZSB0aGUgcGFpbnRpbmcvc3RhY2tpbmcgbW9kZWwgdG8gYmUgc3BlYyBjb21w
bGlhbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTA2MjQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBmYXN0L211bHRpY29sL21peGVkLXBvc2l0aW9uaW5nLXN0YWNraW5nLW9yZGVyLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXVsdGljb2wvbWl4ZWQtcG9zaXRpb25pbmct
c3RhY2tpbmctb3JkZXIuaHRtbDogQWRkZWQuCisKIDIwMTMtMDItMjYgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgT1NSIGV4aXQgZG9lc24ndCBrbm93IHdo
aWNoIHZpcnR1YWwgcmVnaXN0ZXIgdG8gdXNlIGZvciB0aGUgbGFzdCByZXN1bHQgcmVnaXN0ZXIg
Zm9yIHBvc3RfaW5jIGFuZCBwb3N0X2RlYwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNv
bC9taXhlZC1wb3NpdGlvbmluZy1zdGFja2luZy1vcmRlci1leHBlY3RlZC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbWl4ZWQtcG9zaXRpb25pbmctc3RhY2tp
bmctb3JkZXItZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
bXVsdGljb2wvbWl4ZWQtcG9zaXRpb25pbmctc3RhY2tpbmctb3JkZXItZXhwZWN0ZWQuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGRp
diBzdHlsZT0iaGVpZ2h0OjIwMHB4O2JvcmRlcjo1cHggc29saWQgYmxhY2s7cG9zaXRpb246cmVs
YXRpdmU7d2lkdGg6MjEwcHgiPgorPGRpdiBzdHlsZT0id2lkdGg6MjEwcHg7aGVpZ2h0OjIwMHB4
O2JhY2tncm91bmQtY29sb3I6cHVycGxlOyI+MzwvZGl2PgorPGRpdiBzdHlsZT0icG9zaXRpb246
YWJzb2x1dGU7YmFja2dyb3VuZC1jb2xvcjpnb2xkO2xlZnQ6NTVweDt0b3A6MHB4O2hlaWdodDoy
MDBweDt3aWR0aDoxMDBweCI+MjwvZGl2PgorPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7
YmFja2dyb3VuZC1jb2xvcjpsaWdodGJsdWU7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2xlZnQ6
MDtib3R0b206MCI+MTwvZGl2PgorPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7YmFja2dy
b3VuZC1jb2xvcjpsaWdodGJsdWU7d2lkdGg6MTAwcHg7bGVmdDoxMTBweDt0b3A6MDtoZWlnaHQ6
MTAwcHgiPjwvZGl2PgorPC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21p
eGVkLXBvc2l0aW9uaW5nLXN0YWNraW5nLW9yZGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9tdWx0aWNvbC9taXhlZC1wb3NpdGlvbmluZy1zdGFja2luZy1vcmRlci5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9taXhlZC1wb3NpdGlv
bmluZy1zdGFja2luZy1vcmRlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACis8
IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraW50ZXJuYWxzLnNldHRp
bmdzLnNldFJlZ2lvbkJhc2VkQ29sdW1uc0VuYWJsZWQodHJ1ZSkKKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8ZGl2IHN0eWxlPSItbW96LWNvbHVtbi13aWR0aDoxMDBweDsgd2lkdGg6MjEw
cHg7IGhlaWdodDoyMDBweDtib3JkZXI6NXB4IHNvbGlkIGJsYWNrOyAtd2Via2l0LWNvbHVtbi13
aWR0aDoxMDBweDstd2Via2l0LWNvbHVtbi1nYXA6MTBweDsgLW1vei1jb2x1bW4tZ2FwOjEwcHgi
PgorCis8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiPgorPGRpdiBzdHlsZT0icG9zaXRp
b246YWJzb2x1dGU7dG9wOjA7bGVmdDowOyBoZWlnaHQ6NDAwcHg7IHdpZHRoOjEwMHB4Ij4KKzxk
aXYgc3R5bGU9IndpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOnB1cnBs
ZTsiPjM8L2Rpdj4KKzxkaXYgc3R5bGU9ImhlaWdodDoyMDBweCI+PC9kaXY+Cis8ZGl2IHN0eWxl
PSJ3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1jb2xvcjpwdXJwbGU7Ij4zPC9k
aXY+Cis8L2Rpdj4KKzxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjE7IGJh
Y2tncm91bmQtY29sb3I6bGlnaHRibHVlOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MjAwcHg7IHRvcDox
MDBweCI+MTwvZGl2PgorCis8ZGl2IHN0eWxlPSJwb3NpdGlvbjpmaXhlZDtiYWNrZ3JvdW5kLWNv
bG9yOmdvbGQ7bGVmdDo2OHB4O3RvcDoxM3B4O2hlaWdodDoyMDBweDt3aWR0aDoxMDBweCI+Mjwv
ZGl2PgorPC9kaXY+Cis8L2Rpdj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190593</attachid>
            <date>2013-02-27 13:31:20 -0800</date>
            <delta_ts>2013-02-27 21:08:04 -0800</delta_ts>
            <desc>New patch with the paint transform refactoring removed.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>91658</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDIyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NSBAQAorMjAxMy0wMi0yNiAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gUmV3
cml0ZSB0aGUgcGFpbnRpbmcvc3RhY2tpbmcgbW9kZWwgdG8gYmUgc3BlYyBjb21wbGlhbnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA2MjQuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbXBsZW1lbnRzIGEgbmV3IHBhaW50aW5nIGFuZCBoaXQgdGVzdGluZyBtb2RlbCBmb3IgY29s
dW1ucyB0aGF0IGlzCisgICAgICAgIHNwZWMtY29tcGxpYW50IHdpdGggU2VjdGlvbiAzLjUgb2Yg
dGhlIG11bHRpY29sdW1uIHNwZWNpZmljYXRpb24sIHdoaWNoIHN0YXRlczoKKyAgICAgICAgCisg
ICAgICAgICJBbGwgY29sdW1uIGJveGVzIGluIGEgbXVsdGktY29sdW1uIGVsZW1lbnQgYXJlIGlu
IHRoZSBzYW1lIHN0YWNraW5nIGNvbnRleHQgYW5kCisgICAgICAgIHRoZSBkcmF3aW5nIG9yZGVy
IG9mIHRoZWlyIGNvbnRlbnRzIGlzIGFzIHNwZWNpZmllZCBpbiBDU1MgMi4xLiBDb2x1bW4gYm94
ZXMgZG8KKyAgICAgICAgbm90IGVzdGFibGlzaCBuZXcgc3RhY2tpbmcgY29udGV4dHMuIgorICAg
ICAgICAKKyAgICAgICAgV2hhdCB0aGlzIHN0YXRlbWVudCBtZWFucyBpcyB0aGF0IHlvdSBjYW5u
b3QgcGFpbnQgYSBsYXllciBhbmQgYWxsIGl0cyBzdGFja2luZworICAgICAgICBjb250ZXh0IGRl
c2NlbmRhbnRzIGluIGEgc3RyaXAgaW4gZWFjaCBjb2x1bW4sIHNpbmNlIHNvbWUgb2YgdGhvc2Ug
ZGVzY2VuZGFudHMKKyAgICAgICAgbWlnaHQgYWN0dWFsbHkgImJyZWFrIG91dCIgb2YgdGhlIHBh
Z2luYXRpb24gKGxpa2UgZml4ZWQgcG9zaXRpb25lZCBkZXNjZW5kYW50cykKKyAgICAgICAgYW5k
IG92ZXJsYXAgbXVsdGlwbGUgY29sdW1ucy4gSW4gYWRkaXRpb24gY2xpcHMgbWF5IGFwcGx5IGFj
cm9zcyBwYWdpbmF0aW9uCisgICAgICAgIGJvdW5kYXJpZXMsIGFuZCBhbnkgb3ZlcmxhcCBjYXVz
ZWQgYnkgb3BhY2l0eSBoYXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZAorICAgICAgICB0cmVh
dCB0aGUgcGFnaW5hdGVkIGFuZCB1bnBhZ2luYXRlZCBjb21wb25lbnRzIHRvZ2V0aGVyIGFzIGEg
c2luZ2xlIHVuaXQuCisgICAgICAgIAorICAgICAgICBUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9i
bGVtIGlzIHRvIGludHJvZHVjZSB0aGUgY29uY2VwdCBvZiBhIExheWVyRnJhZ21lbnQuIE5vdwor
ICAgICAgICBhbGwgbGF5ZXJzIHdoZW4gcGFpbnRpbmcgb3IgaGl0IHRlc3RpbmcgY29tcHV0ZSBh
IGZyYWdtZW50IGxpc3QsIGFuZCB0aGF0IGxpc3QKKyAgICAgICAgaXMgdGhlbiB3YWxrZWQgaW4g
b3JkZXIgdG8gZG8gcGFpbnRpbmcgYW5kIGhpdCB0ZXN0aW5nIG9mIGxheWVycy4gSW4gdGhlIHNp
bXBsZQorICAgICAgICB1bnBhZ2luYXRlZCBjYXNlLCBhIGxheWVyIGhhcyBvbmUgTGF5ZXJGcmFn
bWVudCwgYnV0IGluIHRoZSBjYXNlIG9mIGNvbHVtbnMgdGhlCisgICAgICAgIGxheWVyIG1heSBi
ZSBicm9rZW4gdXAgaW50byBtdWx0aXBsZSBmcmFnbWVudHMgcmVwcmVzZW50aW5nIGJveGVzIGlu
IHNlcGFyYXRlCisgICAgICAgIGNvbHVtbnMuCisgICAgICAgIAorICAgICAgICBNdWNoIG9mIHRo
aXMgcGF0Y2ggY29uc2lzdHMgb2YgcmVmYWN0b3JpbmcgYWxsIG9mIHRoZSBwYWludGluZyBhbmQg
aGl0IHRlc3RpbmcKKyAgICAgICAgY29kZSB0byBvcGVyYXRlIG9uIHRoZXNlIGZyYWdtZW50cy4K
KworICAgICAgICBUZXN0OiBmYXN0L211bHRpY29sL21peGVkLXBvc2l0aW9uaW5nLXN0YWNraW5n
LW9yZGVyLmh0bWwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb2xsZWN0TGF5ZXJGcmFnbWVu
dHMpOgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIFJlbmRlckxheWVyIGNv
ZGUgdG8gZmV0Y2ggdGhlIGxheWVyIGZyYWdtZW50cyBmcm9tCisgICAgICAgIHRoZSByZWdpb25z
IG9mIGEgZmxvdyB0aHJlYWQuIFRoZSBmbG93IHRocmVhZCBqdXN0IHR1cm5zIGFyb3VuZCBhbmQg
Y2FsbHMgaW50bworICAgICAgICBlYWNoIG9mIGl0cyByZWdpb25zIG9uZSBieSBvbmUgdG8gZ2V0
IHRoZSBmcmFnbWVudHMgZnJvbSBlYWNoIHJlZ2lvbi4KKworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRzQm91bmRpbmdCb3gpOgorICAgICAgICBBIG5ldyBmdW5j
dGlvbiB0aGF0IGNvbGxlY3RzIExheWVyRnJhZ21lbnRzIGFuZCB0aGVuIGRldGVybWluZXMgdGhl
IGJvdW5kaW5nCisgICAgICAgIGJveCB0aGF0IGVuY2xvc2VzIGFsbCBvZiB0aGUgZnJhZ21lbnRz
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaDoKKyAgICAgICAgRGVj
bGFyYXRpb25zIG9mIHRoZSBuZXcgbWV0aG9kcyBmb3Igb2J0YWluaW5nIGxheWVyIGZyYWdtZW50
cyBhbmQgYm91bmRpbmcKKyAgICAgICAgYm94IGluZm9ybWF0aW9uIGZvciBmcmFnbWVudHMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlUGFnaW5hdGlvbik6CisgICAgICAgIFJlbmRlckxheWVycyBub3cgdHJhY2sgYW4gZW5j
bG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuIElmIHRoaXMgaXMgc2V0LCB0aGVuIHRoZSBsYXllciBr
bm93cyBpdAorICAgICAgICBuZWVkcyB0byBjaGVjayB3aXRoIHRoZSBlbmNsb3NpbmcgcGFnaW5h
dGlvbiBsYXllcidzIGZsb3cgdGhyZWFkIHJlbmRlcmVyIHRvCisgICAgICAgIG9idGFpbiBsYXll
ciBmcmFnbWVudHMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6dHJhbnNwYXJlbmN5Q2xp
cEJveCk6CisgICAgICAgIE1vZGlmaWVkIHRvIG9idGFpbiBhIGZyYWdtZW50cyBib3VuZGluZyBi
b3ggc28gdGhhdCBvcGFjaXR5IGNhbiBvcGVyYXRlIGNvcnJlY3RseSBvbgorICAgICAgICBjb2x1
bW4gYm94ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OmFjY3VtdWxhdGVPZmZzZXRUb3dhcmRzQW5j
ZXN0b3IpOgorICAgICAgICBUaGlzIG1ldGhvZCBoYXMgYmVlbiBwYXRjaGVkIHRvIGFsbG93IGZv
ciBmaXhlZCBwb3NpdGlvbmVkIG9iamVjdHMgdG8gZXNjYXBlCisgICAgICAgIGluLWZsb3cgUmVu
ZGVyRmxvd1RocmVhZHMuIE91ciBpbi1mbG93IFJlbmRlckZsb3dUaHJlYWRzIGJlaGF2ZSBkaWZm
ZXJlbnRseSBmcm9tCisgICAgICAgIENTUyBSZWdpb25zIGZsb3cgdGhyZWFkcyBpbiB0aGF0IHRo
ZXkgYXJlbid0IG5lY2Vzc3NhcmlseSBhY3RpbmcgYXMgdGhlIGNvbnRhaW5pbmcKKyAgICAgICAg
YmxvY2sgZm9yIGFsbCBvZiB0aGVpciBkZXNjZW5kYW50cy4gQ29udGVudCBpcyBhbGxvd2VkIHRv
ICJlc2NhcGUiIGZyb20gdGhlIGZsb3cKKyAgICAgICAgdGhyZWFkLgorCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyk6CisgICAgICAgIEEgbmV3IG1ldGhv
ZCB0aGF0IGNvbGxlY3RzIGZyYWdtZW50cyBmcm9tIHRoZSBmbG93IHRocmVhZCBhbmQgc2V0cyB1
cCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgY2xpcHMgYW5kIHRyYW5zbGF0aW9ucyBvbiBlYWNo
IGZyYWdtZW50LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRCYWNrZ3JvdW5kRm9yRnJh
Z21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludEZvcmVncm91bmRG
b3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdy
b3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpwYWludE1hc2tGb3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyk6CisgICAgICAgIFJlZmFjdG9y
aW5nIG9mIHBhaW50aW5nIHRvIGJyZWFrIGFsbCBpbmRpdmlkdWFsIHBhaW50aW5nIHN0ZXBzIG91
dCBpbnRvIG1ldGhvZHMgdGhhdCB3YWxrIG92ZXIKKyAgICAgICAgZnJhZ21lbnQgYm94ZXMuIFRo
aXMgYWN0dWFsbHkgaGFkIHRoZSBzaWRlIGVmZmVjdCBvZiBtYWtpbmcgdGhlIG1haW4gcGFpbnRp
bmcgZnVuY3Rpb24sCisgICAgICAgIHBhaW50TGF5ZXJDb250ZW50cywgbXVjaCBjbGVhbmVyIGFu
ZCBlYXNpZXIgdG8gcmVhZC4gOikKKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlTG9j
YWxUcmFuc2Zvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVz
dExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNG
b3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RU
cmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmhpdFRlc3RDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0
VGVzdExpc3QpOgorICAgICAgICBSZWZhY3RvcmluZyBvZiBoaXQgdGVzdGluZyB0byBicmVhayBh
bGwgaW5kaXZpZHVhbCBoaXQgdGVzdGluZyBzdGVwcyBvdXQgaW50byBtZXRob2RzIHRoYXQgd2Fs
ayBvdmVyCisgICAgICAgIGZyYWdtZW50IGJveGVzLgorICAgICAgICAKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpiYWNrZ3JvdW5kQ2xpcFJlY3QpOgorICAgICAgICBNb2RpZmllZCB0
byBhdm9pZCB1c2luZyB0aGUgY2xpcCByZWN0cyBjYWNoZSB3aGVuIGNyb3NzaW5nIGludG8gZGlm
ZmVyZW50IHBhZ2luYXRpb24gY29udGV4dHMsCisgICAgICAgIGUuZy4sIGZyb20gdW5wYWdpbmF0
ZWQgdG8gcGFnaW5hdGVkLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjppbnRlcnNlY3RzRGFtYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Ym91bmRpbmdCb3gpOgorICAgICAgICBNb2RpZmllZCBib3VuZGluZ0JveCB0byB3b3JrIHdpdGgg
ZnJhZ21lbnRzLiBBIG5ldyBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QK
KyAgICAgICAgdGhlIGJvdW5kcyBvZiBmcmFnbWVudHMgb3IgdGhlIG9yaWdpbmFsIHVuc3BsaXQg
Ym94IGFyZSBiZWluZyBjb21wdXRlZC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6Y29sbGVjdExheWVycyk6CisgICAgICAgIEZpeCBsYXllciBjb2xsZWN0aW9uIHNv
IHRoYXQgaW4tZmxvdyBSZW5kZXJGbG93VGhyZWFkcyBjYW4gc3RpbGwgYmUgY29sbGVjdGVkLCBz
aW5jZSBpbi1mbG93CisgICAgICAgIFJlbmRlckZsb3dUaHJlYWRzIGRvIG5vdCBlc3RhYmxpc2gg
c3RhY2tpbmcgY29udGV4dHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBSZWN0Ojptb3ZlQnkpOgorICAgICAgICBBZGRlZCBhIG1v
dmVCeSBtZXRob2QgdGhhdCBqdXN0IHdyYXAgdGhlIGNvcnJlc3BvbmRpbmcgTGF5b3V0UmVjdCBt
ZXRob2QuCisKKyAgICAgICAgKExheWVyRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJGcmFnbWVudDo6TGF5ZXJGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZyYWdt
ZW50OjpzZXRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZyYWdtZW50Ojptb3ZlQnkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGcmFnbWVudDo6aW50ZXJzZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIpOgorICAgICAg
ICBUaGUgbmV3IExheWVyRnJhZ21lbnQgc3RydWN0LiBIb2xkcyBjbGlwcyBhbmQgdHJhbnNsYXRp
b24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZnJhZ21lbnQgYm94LgorCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKToKKyAgICAgICAgSGVs
cGVyIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhlIHJlbmRlcmVyIGlzIGFuIG91dC1vZi1m
bG93IFJlbmRlckZsb3dUaHJlYWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5CbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNdWx0aUNvbHVtbkZsb3dU
aHJlYWRTdHlsZSk6CisgICAgICAgIENoYW5nZSB0aGUgZmxvdyB0aHJlYWQgc3R5bGUgdG8gbm8g
bG9uZ2VyIGVzdGFibGlzaCBhIHN0YWNraW5nIGNvbnRleHQuCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICBQ
YXRjaGVkIHRvIG1vdmUgdGhlIGZsb3cgdGhyZWFkIHRvIGEgcG9zaXRpb24gdGhhdCBhbGxvd3Mg
aXQgdG8gYmUgdW50cmFuc2xhdGVkIGluIHRoZQorICAgICAgICBpbml0aWFsIGNvbHVtbi4KKwor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
QmxvY2suaDoKKyAgICAgICAgKFJlbmRlck11bHRpQ29sdW1uQmxvY2spOgorICAgICAgICBsYXlv
dXRCbG9jayBpcyBzdWJjbGFzc2VkIHRvIHR3ZWFrIHRoZSBmbG93IHRocmVhZCdzIHBvc2l0aW9u
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oOgor
ICAgICAgICAoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKToKKyAgICAgICAgVGhlIGZsb3cg
dGhyZWFkIGZvciBtdWx0aS1jb2x1bW4gYmxvY2tzIGltcGxlbWVudHMgY29sbGVjdExheWVyRnJh
Z21lbnRzIHRvIGhhbmQgYmFjayBMYXllckZyYWdtZW50CisgICAgICAgIGluZm9ybWF0aW9uIGJh
c2VkIG9mZiBpdHMgUmVuZGVyTXVsdGlDb2x1bW5TZXRzLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRp
Q29sdW1uU2V0OjpwYWludE9iamVjdCk6CisgICAgICAgIENoYW5nZWQgdG8gbm8gbG9uZ2VyIHBh
aW50IGNvbHVtbiBjb250ZW50cywgc2luY2UgdGhlIGxheWVyIGNvZGUgaXMganVzdCBkb2luZyB0
aGF0IG5vdy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmNvbGxl
Y3RMYXllckZyYWdtZW50cyk6CisgICAgICAgIFRoZSBtZXRob2QgdGhhdCBmaWd1cmVzIG91dCB3
aGF0IGNvbHVtbnMgYXJlIGludGVyc2VjdGVkIGJ5IGEgbGF5ZXIgYW5kIGhhbmRzIGJhY2sKKyAg
ICAgICAgaW5pdGlhbCBmcmFnbWVudCBpbmZvcm1hdGlvbi4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtblNldC5oOgorICAgICAgICAoUmVuZGVyTXVsdGlDb2x1bW5TZXQp
OgorICAgICAgICBEZWNsYXJhdGlvbiBvZiBjb2xsZWN0TGF5ZXJGcmFnbWVudHMuCisgICAgICAg
IAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0Ojpjb250YWluZXIpOgorICAgICAgICBQYXRjaCBjb250YWluZXIoKSB0
byBhbGxvdyBmaXhlZCBwb3NpdGlvbmVkIG9iamVjdHMgdG8gZXNjYXBlIGluLWZsb3cgUmVuZGVy
Rmxvd1RocmVhZHMuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNJbkZsb3dSZW5kZXJGbG93VGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNPdXRPZkZsb3dSZW5kZXJG
bG93VGhyZWFkKToKKyAgICAgICAgTWV0aG9kcyBmb3IgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBp
bi1mbG93IGFuZCBvdXQtb2YtZmxvdyBSZW5kZXJGbG93VGhyZWFkcy4KKworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0OjpjYW5Db250YWluRml4ZWRQb3NpdGlvbk9iamVjdHMpOgorICAg
ICAgICBQYXRjaCBjYW5Db250YWluRml4ZWRQb3NpdGlvbk9iamVjdHMoKSB0byBhbGxvdyBmaXhl
ZCBwb3NpdGlvbmVkIG9iamVjdHMgdG8gZXNjYXBlCisgICAgICAgIGluLWZsb3cgUmVuZGVyRmxv
d1RocmVhZHMuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6Y29sbGVjdExheWVyRnJhZ21lbnRzKToK
KyAgICAgICAgKFJlbmRlclJlZ2lvbik6CisgICAgICAgIFRoZSB2aXJ0dWFsIGZ1bmN0aW9ucyBv
biBSZWdpb24gZm9yIGZyYWdtZW50IGNvbGxlY3Rpb24uCisKIDIwMTMtMDItMjcgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIHRyYW5zZm9ybSBwYWlu
dGluZy9oaXQgdGVzdGluZyBjb2RlIGluIFJlbmRlckxheWVyLgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTQ0MjI3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NTksNiArOTU5LDM3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6ZGVjcmVt
ZW50QXV0b0xvZ2kKICAgICAgICAgdmlldygpLT5mbG93VGhyZWFkQ29udHJvbGxlcigpLT5kZWNy
ZW1lbnRGbG93VGhyZWFkc1dpdGhBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKIH0KIAordm9p
ZCBSZW5kZXJGbG93VGhyZWFkOjpjb2xsZWN0TGF5ZXJGcmFnbWVudHMoVmVjdG9yPExheWVyRnJh
Z21lbnQ+JiBsYXllckZyYWdtZW50cywgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0Jv
eCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQoreworICAgIEFTU0VSVCghbV9yZWdpb25z
SW52YWxpZGF0ZWQpOworICAgIAorICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7Cisg
ICAgICAgIHJlZ2lvbi0+Y29sbGVjdExheWVyRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsYXll
ckJvdW5kaW5nQm94LCBkaXJ0eVJlY3QpOworICAgIH0KK30KKworTGF5b3V0UmVjdCBSZW5kZXJG
bG93VGhyZWFkOjpmcmFnbWVudHNCb3VuZGluZ0JveChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJv
dW5kaW5nQm94KQoreworICAgIEFTU0VSVCghbV9yZWdpb25zSW52YWxpZGF0ZWQpOworICAgIAor
ICAgIExheW91dFJlY3QgcmVzdWx0OworICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlz
dC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7
CisgICAgICAgIExheWVyRnJhZ21lbnRzIGZyYWdtZW50czsKKyAgICAgICAgcmVnaW9uLT5jb2xs
ZWN0TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRzLCBsYXllckJvdW5kaW5nQm94LCBQYWludEluZm86
OmluZmluaXRlUmVjdCgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFnbWVu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBm
cmFnbWVudHMuYXQoaSk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGZyYWdtZW50UmVjdChsYXll
ckJvdW5kaW5nQm94KTsKKyAgICAgICAgICAgIGZyYWdtZW50UmVjdC5pbnRlcnNlY3QoZnJhZ21l
bnQucGFnaW5hdGlvbkNsaXApOworICAgICAgICAgICAgZnJhZ21lbnRSZWN0Lm1vdmVCeShmcmFn
bWVudC5wYWdpbmF0aW9uT2Zmc2V0KTsKKyAgICAgICAgICAgIHJlc3VsdC51bml0ZShmcmFnbWVu
dFJlY3QpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcjo6Q3VycmVudFJlbmRlckZsb3dUaHJl
YWRNYWludGFpbmVyKFJlbmRlckZsb3dUaHJlYWQqIHJlbmRlckZsb3dUaHJlYWQpCiAgICAgOiBt
X3JlbmRlckZsb3dUaHJlYWQocmVuZGVyRmxvd1RocmVhZCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkocmV2aXNpb24gMTQ0MjI3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBMYXll
ckZyYWdtZW50OwogY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKIGNsYXNzIFJlbmRlclN0eWxlOwog
Y2xhc3MgUmVuZGVyUmVnaW9uOwpAQCAtMTQzLDYgKzE0NCw5IEBAIHB1YmxpYzoKICAgICBib29s
IGlzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnRDb25zaXN0ZW50KCkgY29uc3Q7CiAjZW5k
aWYKIAorICAgIHZvaWQgY29sbGVjdExheWVyRnJhZ21lbnRzKFZlY3RvcjxMYXllckZyYWdtZW50
PiYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCk7CisgICAgTGF5b3V0UmVjdCBmcmFnbWVudHNCb3VuZGluZ0JveChjb25zdCBM
YXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94KTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0ID0gMDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxNDQyMjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMs
NiArMTkzLDcgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZQogICAg
ICwgbV9yZWZsZWN0aW9uKDApCiAgICAgLCBtX3Njcm9sbENvcm5lcigwKQogICAgICwgbV9yZXNp
emVyKDApCisgICAgLCBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcigwKQogewogICAgIG1faXNO
b3JtYWxGbG93T25seSA9IHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKTsKICAgICBtX2lzU2VsZlBh
aW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7CkBAIC00MTAsOCArNDEx
LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFIKIAogICAgIGlm
IChmbGFncyAmIFVwZGF0ZVBhZ2luYXRpb24pCiAgICAgICAgIHVwZGF0ZVBhZ2luYXRpb24oKTsK
LSAgICBlbHNlCisgICAgZWxzZSB7CiAgICAgICAgIG1faXNQYWdpbmF0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgPSAwOworICAgIH0KIAogICAgIGlmICht
X2hhc1Zpc2libGVDb250ZW50KSB7CiAgICAgICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJl
cigpLT52aWV3KCk7CkBAIC00NTUsNyArNDU4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnMoUgogI2VuZGlmCiAKICAgICBpZiAodXNlUmVnaW9uQmFzZWRDb2x1bW5z
KCkgJiYgcmVuZGVyZXIoKS0+aXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpIHsKLSAgICAgICAg
bV9pc1BhZ2luYXRlZCA9IHRydWU7CisgICAgICAgIHVwZGF0ZVBhZ2luYXRpb24oKTsKICAgICAg
ICAgZmxhZ3MgfD0gVXBkYXRlUGFnaW5hdGlvbjsKICAgICB9CiAgICAgCkBAIC05MjgsMjYgKzkz
MSwzMSBAQCBib29sIFJlbmRlckxheWVyOjp1c2VSZWdpb25CYXNlZENvbHVtbnMoCiB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVQYWdpbmF0aW9uKCkKIHsKICAgICBtX2lzUGFnaW5hdGVkID0gZmFs
c2U7CisgICAgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgPSAwOworCiAgICAgaWYgKGlzQ29t
cG9zaXRlZCgpIHx8ICFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogV2Ugd2ls
bCBoYXZlIHRvIGRlYWwgd2l0aCBwYWdpbmF0ZWQgY29tcG9zaXRpbmcgbGF5ZXJzIHNvbWVkYXku
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgdGhlIFJlbmRlclZpZXcgY2FuJ3Qg
YmUgcGFnaW5hdGVkLiAgRXZlbnR1YWxseSBwcmludGluZyB3aWxsIG1vdmUgdG8gYSBtb2RlbCB3
aGVyZSBpdCBpcyB0aG91Z2guCi0gICAgCisKICAgICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJl
dHdlZW4gdGhlIHBhZ2luYXRlZCBib29sZWFucyBmb3IgdGhlIG9sZCBjb2x1bW4gY29kZSBhbmQg
dGhlIG5ldyBjb2x1bW4gY29kZQogICAgIC8vIGlzIHRoYXQgZWFjaCBwYWdpbmF0ZWQgbGF5ZXIg
aGFzIHRvIHBhaW50IG9uIGl0cyBvd24gd2l0aCB0aGUgbmV3IGNvZGUuIFRoZXJlIGlzIG5vCiAg
ICAgLy8gcmVjdXJyaW5nIGludG8gY2hpbGQgbGF5ZXJzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1f
aXNQYWdpbmF0ZWQgYml0cyBmb3IgdGhlIG5ldyBjb2x1bW4gY29kZSBjYW4ndCBqdXN0IGJlIHNl
dCBvbgogICAgIC8vICJyb290cyIgdGhhdCBnZXQgc3BsaXQgYW5kIHBhaW50IGFsbCB0aGVpciBk
ZXNjZW5kYW50cy4gSW5zdGVhZCBlYWNoIGxheWVyIGhhcyB0byBiZSBjaGVja2VkIGluZGl2aWR1
YWxseSBhbmQKICAgICAvLyBnZW51aW5lbHkga25vdyBpZiBpdCBpcyBnb2luZyB0byBoYXZlIHRv
IHNwbGl0IGl0c2VsZiB1cCB3aGVuIHBhaW50aW5nIG9ubHkgaXRzIGNvbnRlbnRzIChhbmQgbm90
IGFueSBvdGhlciBkZXNjZW5kYW50Ci0gICAgLy8gbGF5ZXJzKS4KKyAgICAvLyBsYXllcnMpLiBX
ZSB0cmFjayBhbiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgaW5zdGVhZCBvZiB1c2luZyBhIHNp
bXBsZSBiaXQsIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBnZXQgYmFjaworICAgIC8vIHRv
IHRoYXQgbGF5ZXIgZWFzaWx5LgogICAgIGJvb2wgbmV3Q29sdW1uc1VzZWQgPSB1c2VSZWdpb25C
YXNlZENvbHVtbnMoKTsKICAgICBpZiAobmV3Q29sdW1uc1VzZWQgJiYgcmVuZGVyZXIoKS0+aXNJ
bkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpIHsKLSAgICAgICAgbV9pc1BhZ2luYXRlZCA9IHRydWU7
CisgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gdGhpczsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChpc05vcm1hbEZsb3dPbmx5KCkpIHsKLSAgICAgICAgaWYg
KG5ld0NvbHVtbnNVc2VkKQotICAgICAgICAgICAgbV9pc1BhZ2luYXRlZCA9IHBhcmVudCgpLT5p
c1BhZ2luYXRlZCgpOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChuZXdDb2x1bW5zVXNlZCkg
eworICAgICAgICAgICAgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgPSBwYXJlbnQoKS0+ZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyKCk7CisgICAgICAgICAgICBpZiAobV9lbmNsb3NpbmdQYWdp
bmF0aW9uTGF5ZXIgJiYgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXItPmhhc1RyYW5zZm9ybSgp
KQorICAgICAgICAgICAgICAgIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsKKyAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBtX2lzUGFnaW5hdGVkID0gcGFyZW50KCktPnJlbmRlcmVy
KCktPmhhc0NvbHVtbnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk2MSw3ICs5Njks
OSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWdpbmF0aW9uKCkKICAgICAgICAgICAgICBj
b250YWluaW5nQmxvY2sgJiYgY29udGFpbmluZ0Jsb2NrICE9IHZpZXc7CiAgICAgICAgICAgICAg
Y29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKSkgewog
ICAgICAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aGFzTGF5ZXIoKSkgewotICAgICAgICAg
ICAgICAgIG1faXNQYWdpbmF0ZWQgPSBjb250YWluaW5nQmxvY2stPmxheWVyKCktPmlzUGFnaW5h
dGVkKCk7CisgICAgICAgICAgICAgICAgbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIgPSBjb250
YWluaW5nQmxvY2stPmxheWVyKCktPmVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpOworICAgICAg
ICAgICAgICAgIGlmIChtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllciAmJiBtX2VuY2xvc2luZ1Bh
Z2luYXRpb25MYXllci0+aGFzVHJhbnNmb3JtKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyID0gMDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE1ODcsNyArMTU5Nyw3IEBAIHN0YXRpYyBMYXlvdXRS
ZWN0IHRyYW5zcGFyZW5jeUNsaXBCb3goY28KICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShk
ZWx0YS54KCksIGRlbHRhLnkoKSk7CiAgICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqICps
YXllci0+dHJhbnNmb3JtKCk7CiAKLSAgICAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGxheWVy
LT5ib3VuZGluZ0JveChsYXllcik7CisgICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBsYXll
ci0+Ym91bmRpbmdCb3gobGF5ZXIsIFJlbmRlckxheWVyOjpVc2VGcmFnbWVudEJveGVzKTsKICAg
ICAgICAgZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50c0FuZFJlZmxlY3Rpb24oY2xpcFJlY3Qs
IGxheWVyLCBsYXllciwgcGFpbnRCZWhhdmlvcik7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQog
ICAgICAgICBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZmlsdGVyT3V0c2V0cygpLmV4cGFu
ZFJlY3QoY2xpcFJlY3QpOwpAQCAtMTU5NSw3ICsxNjA1LDcgQEAgc3RhdGljIExheW91dFJlY3Qg
dHJhbnNwYXJlbmN5Q2xpcEJveChjbwogICAgICAgICByZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3Qo
Y2xpcFJlY3QpOwogICAgIH0KICAgICAKLSAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gbGF5ZXIt
PmJvdW5kaW5nQm94KHJvb3RMYXllcik7CisgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGxheWVy
LT5ib3VuZGluZ0JveChyb290TGF5ZXIsIFJlbmRlckxheWVyOjpVc2VGcmFnbWVudEJveGVzKTsK
ICAgICBleHBhbmRDbGlwUmVjdEZvckRlc2NlbmRhbnRzQW5kUmVmbGVjdGlvbihjbGlwUmVjdCwg
bGF5ZXIsIHJvb3RMYXllciwgcGFpbnRCZWhhdmlvcik7CiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQogICAgIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5maWx0ZXJPdXRzZXRzKCkuZXhwYW5k
UmVjdChjbGlwUmVjdCk7CkBAIC0xODE5LDEyICsxODI5LDIwIEBAIHN0YXRpYyBpbmxpbmUgY29u
c3QgUmVuZGVyTGF5ZXIqIGFjY3VtdWwKICAgICBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiByZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOwogICAgIEVQb3NpdGlvbiBwb3NpdGlvbiA9
IHJlbmRlcmVyLT5zdHlsZSgpLT5wb3NpdGlvbigpOwogCisgICAgLy8gRklYTUU6IFNwZWNpYWwg
Y2FzaW5nIFJlbmRlckZsb3dUaHJlYWQgc28gbXVjaCBmb3IgZml4ZWQgcG9zaXRpb25pbmcgaGVy
ZSBpcyBub3QgZ3JlYXQuCisgICAgUmVuZGVyRmxvd1RocmVhZCogZml4ZWRGbG93VGhyZWFkQ29u
dGFpbmVyID0gMDsKKyAgICBpZiAocG9zaXRpb24gPT0gRml4ZWRQb3NpdGlvbiAmJiByZW5kZXJl
ci0+aW5SZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICAgICAgZml4ZWRGbG93VGhyZWFkQ29udGFp
bmVyID0gcmVuZGVyZXItPmVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKTsKKyAgICAgICAgaWYg
KCFmaXhlZEZsb3dUaHJlYWRDb250YWluZXItPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAg
ICAgICAgICAgZml4ZWRGbG93VGhyZWFkQ29udGFpbmVyID0gMDsKKyAgICB9CisKICAgICAvLyBG
SVhNRTogUG9zaXRpb25pbmcgb2Ygb3V0LW9mLWZsb3coZml4ZWQsIGFic29sdXRlKSBlbGVtZW50
cyBjb2xsZWN0ZWQgaW4gYSBSZW5kZXJGbG93VGhyZWFkCiAgICAgLy8gbWF5IG5lZWQgdG8gYmUg
cmV2aXNpdGVkIGluIGEgZnV0dXJlIHBhdGNoLgogICAgIC8vIElmIHRoZSBmaXhlZCByZW5kZXJl
ciBpcyBpbnNpZGUgYSBSZW5kZXJGbG93VGhyZWFkLCB3ZSBzaG91bGQgbm90IGNvbXB1dGUgbG9j
YXRpb24gdXNpbmcgbG9jYWxUb0Fic29sdXRlLAogICAgIC8vIHNpbmNlIGxvY2FsVG9BYnNvbHV0
ZSBtYXBzIHRoZSBjb29yZGluYXRlcyBmcm9tIG5hbWVkIGZsb3cgdG8gcmVnaW9ucyBjb29yZGlu
YXRlcyBhbmQgcmVnaW9ucyBjYW4gYmUKICAgICAvLyBwb3NpdGlvbmVkIGluIGEgY29tcGxldGVs
eSBkaWZmZXJlbnQgcGxhY2UgaW4gdGhlIHZpZXdwb3J0IChSZW5kZXJWaWV3KS4KLSAgICBpZiAo
cG9zaXRpb24gPT0gRml4ZWRQb3NpdGlvbiAmJiAhcmVuZGVyZXItPmluUmVuZGVyRmxvd1RocmVh
ZCgpICYmICghYW5jZXN0b3JMYXllciB8fCBhbmNlc3RvckxheWVyID09IHJlbmRlcmVyLT52aWV3
KCktPmxheWVyKCkpKSB7CisgICAgaWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgIWZp
eGVkRmxvd1RocmVhZENvbnRhaW5lciAmJiAoIWFuY2VzdG9yTGF5ZXIgfHwgYW5jZXN0b3JMYXll
ciA9PSByZW5kZXJlci0+dmlldygpLT5sYXllcigpKSkgewogICAgICAgICAvLyBJZiB0aGUgZml4
ZWQgbGF5ZXIncyBjb250YWluZXIgaXMgdGhlIHJvb3QsIGp1c3QgYWRkIGluIHRoZSBvZmZzZXQg
b2YgdGhlIHZpZXcuIFdlIGNhbiBvYnRhaW4gdGhpcyBieSBjYWxsaW5nCiAgICAgICAgIC8vIGxv
Y2FsVG9BYnNvbHV0ZSgpIG9uIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICBGbG9hdFBvaW50IGFi
c1BvcyA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBJc0ZpeGVkKTsK
QEAgLTE4MzUsNyArMTg1Myw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyTGF5ZXIqIGFj
Y3VtdWwKICAgICAvLyBGb3IgdGhlIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMgaW5zaWRlIGEg
cmVuZGVyIGZsb3cgdGhyZWFkLCB3ZSBzaG91bGQgYWxzbyBza2lwIHRoZSBjb2RlIHBhdGggYmVs
b3cKICAgICAvLyBPdGhlcndpc2UsIGZvciB0aGUgY2FzZSBvZiBhbmNlc3RvckxheWVyID09IHJv
b3RMYXllciBhbmQgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50IGNoaWxkIG9mIGEgdHJhbnNmb3Jt
ZWQKICAgICAvLyBlbGVtZW50IGluIHJlbmRlciBmbG93IHRocmVhZCwgd2Ugd2lsbCBoaXQgdGhl
IGZpeGVkIHBvc2l0aW9uZWQgY29udGFpbmVyIGJlZm9yZSBoaXR0aW5nIHRoZSBhbmNlc3RvciBs
YXllci4KLSAgICBpZiAocG9zaXRpb24gPT0gRml4ZWRQb3NpdGlvbiAmJiAhcmVuZGVyZXItPmlu
UmVuZGVyRmxvd1RocmVhZCgpKSB7CisgICAgaWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24g
JiYgIWZpeGVkRmxvd1RocmVhZENvbnRhaW5lcikgewogICAgICAgICAvLyBGb3IgYSBmaXhlZCBs
YXllcnMsIHdlIG5lZWQgdG8gd2FsayB1cCB0byB0aGUgcm9vdCB0byBzZWUgaWYgdGhlcmUncyBh
IGZpeGVkIHBvc2l0aW9uIGNvbnRhaW5lcgogICAgICAgICAvLyAoZS5nLiBhIHRyYW5zZm9ybWVk
IGxheWVyKS4gSXQncyBhbiBlcnJvciB0byBjYWxsIGNvbnZlcnRUb0xheWVyQ29vcmRzKCkgYWNy
b3NzIGEgbGF5ZXIgd2l0aCBhIHRyYW5zZm9ybSwKICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGFs
d2F5cyBmaW5kIHRoZSBhbmNlc3RvciBhdCBvciBiZWZvcmUgd2UgZmluZCB0aGUgZml4ZWQgcG9z
aXRpb24gY29udGFpbmVyLgpAQCAtMTg4OCw3ICsxOTA2LDcgQEAgc3RhdGljIGlubGluZSBjb25z
dCBSZW5kZXJMYXllciogYWNjdW11bAogCiAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgcmVhY2gg
UmVuZGVyVmlldyBsYXllciBwYXN0IHRoZSBSZW5kZXJGbG93VGhyZWFkIGxheWVyIGZvciBhbnkK
ICAgICAgICAgLy8gY2hpbGRyZW4gb2YgdGhlIFJlbmRlckZsb3dUaHJlYWQuCi0gICAgICAgIGlm
IChyZW5kZXJlci0+aW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgIXJlbmRlcmVyLT5pc1JlbmRlckZs
b3dUaHJlYWQoKSkKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5pblJlbmRlckZsb3dUaHJlYWQoKSAm
JiAhbGF5ZXItPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpKQogICAgICAgICAgICAgQVNT
RVJUKHBhcmVudExheWVyICE9IHJlbmRlcmVyLT52aWV3KCktPmxheWVyKCkpOwogCiAgICAgICAg
IGlmIChmb3VuZEFuY2VzdG9yRmlyc3QpIHsKQEAgLTM1MTAsNyArMzUyOCw2IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzaG91bGRTdXBwcmVzc1BhaW50aW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LQogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBw
YWludEZsYWdzKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTM1NjIs
NiArMzU3OSwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29uCiAg
ICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMoY29udGV4dCwgcGFpbnRpbmdJ
bmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBwYWludGluZ0luZm8u
cGFpbnRCZWhhdmlvcik7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZW5jbG9zaW5nUGFnaW5h
dGlvbkxheWVyKCkpIHsKKyAgICAgICAgICAgIHBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFn
bWVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xp
cCByZWN0cyBoYXZlIGJlZW4gY2FsY3VsYXRlZC4KICAgICAgICAgQ2xpcFJlY3QgY2xpcFJlY3Qg
PSBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Q7CiAgICAgICAgIGlmIChwYXJlbnQoKSkgewpA
QCAtMzU3NSw3ICszNTk3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGlj
c0NvbgogICAgICAgICB9CiAKICAgICAgICAgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0o
Y29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKLSAgICAgICAgCisKICAgICAgICAg
Ly8gUmVzdG9yZSB0aGUgY2xpcC4KICAgICAgICAgaWYgKHBhcmVudCgpKQogICAgICAgICAgICAg
cGFyZW50KCktPnJlc3RvcmVDbGlwKGNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVj
dCwgY2xpcFJlY3QpOwpAQCAtMzcwNSw3ICszNzI3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKEdyYQogCiAgICAgICAgICAgICAvLyBSZXdpcmUgdGhlIG9sZCBjb250
ZXh0IHRvIGEgbWVtb3J5IGJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4gY2FwdHVyZSB0aGUgY29udGVu
dHMgb2YgdGhlIGxheWVyLgogICAgICAgICAgICAgLy8gTk9URTogV2Ugc2F2ZWQgdGhlIG9sZCBj
b250ZXh0IGluIHRoZSAidHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0IiBsb2NhbCB2YXJpYWJsZSwg
dG8gYmUgYWJsZSB0byBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllcgotICAgICAgICAgICAgLy8g
b24gdGhlIG9yaWdpbmFsIGNvbnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRl
ckVmZmVjdCIgYWZ0ZXIgZWFjaCB0cmFuc3BhcmVueSBsYXllciBjYWxsLiBBbHNvLCBub3RlIHRo
YXQgCisgICAgICAgICAgICAvLyBvbiB0aGUgb3JpZ2luYWwgY29udGV4dCBhbmQgYXZvaWQgZHVw
bGljYXRpbmcgImJlZ2luRmlsdGVyRWZmZWN0IiBhZnRlciBlYWNoIHRyYW5zcGFyZW5jeSBsYXll
ciBjYWxsLiBBbHNvLCBub3RlIHRoYXQgCiAgICAgICAgICAgICAvLyBiZWdpblRyYW5zcGFyZW5j
eUxheWVycyB3aWxsIG9ubHkgY3JlYXRlIGEgc2luZ2xlIGxhenkgdHJhbnNwYXJlbmN5IGxheWVy
LCBldmVuIHRob3VnaCBpdCBpcyBjYWxsZWQgdHdpY2UgaW4gdGhpcyBtZXRob2QuCiAgICAgICAg
ICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5iZWdpbkZpbHRlckVmZmVjdChjb250ZXh0KTsK
IApAQCAtMzcxOSwyOCArMzc0MSwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29u
dGVudHMoR3JhCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKIAotICAg
IC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQgdXNlIG9ubHkgd2hlbiB3ZSBu
ZWVkIHRoZW0uCi0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKLSAgICBDbGlwUmVjdCBkYW1h
Z2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0OwotICAgIExheW91dFBvaW50IHBh
aW50T2Zmc2V0OwotCi0gICAgaWYgKHNob3VsZFBhaW50Q29udGVudCB8fCBzaG91bGRQYWludE91
dGxpbmUgfHwgaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKSB7Ci0gICAgICAgIENsaXBSZWN0
c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxv
Y2FsUGFpbnRpbmdJbmZvLnJlZ2lvbiwgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1w
b3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMs
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVy
UGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92
ZXJmbG93Q2xpcCk7Ci0gICAgICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwg
Y2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgJm9mZnNldEZyb21Sb290KTsKLSAgICAgICAg
cGFpbnRPZmZzZXQgPSB0b1BvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hM
b2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pOworICAg
IGlmIChmaWx0ZXJQYWludGVyLmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSAmJiBoYXZlVHJhbnNw
YXJlbmN5KSB7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYSBmaWx0ZXIgYW5kIHRyYW5zcGFyZW5j
eSwgd2UgaGF2ZSB0byBlYWdlcmx5IHN0YXJ0IGEgdHJhbnNwYXJlbmN5IGxheWVyIGhlcmUsIHJh
dGhlciB0aGFuIHJpc2sgYSBjaGlsZCBsYXllciBsYXppbHkgc3RhcnRzIG9uZSB3aXRoIHRoZSB3
cm9uZyBjb250ZXh0LgorICAgICAgICBiZWdpblRyYW5zcGFyZW5jeUxheWVycyh0cmFuc3BhcmVu
Y3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKICAgICB9
CisjZW5kaWYKIAotICAgIGJvb2wgZm9yY2VCbGFja1RleHQgPSBsb2NhbFBhaW50aW5nSW5mby5w
YWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0OwotICAgIGJvb2wgc2Vs
ZWN0aW9uT25seSAgPSBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yICYgUGFpbnRCZWhh
dmlvclNlbGVjdGlvbk9ubHk7Ci0gICAgCi0gICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9y
ID0gUGFpbnRCZWhhdmlvck5vcm1hbDsKLSAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRM
YXllclBhaW50aW5nU2tpcFJvb3RCYWNrZ3JvdW5kKQotICAgICAgICBwYWludEJlaGF2aW9yIHw9
IFBhaW50QmVoYXZpb3JTa2lwUm9vdEJhY2tncm91bmQ7Ci0gICAgZWxzZSBpZiAobG9jYWxQYWlu
dEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5KQotICAgICAgICBw
YWludEJlaGF2aW9yIHw9IFBhaW50QmVoYXZpb3JSb290QmFja2dyb3VuZE9ubHk7Ci0gICAgCiAg
ICAgLy8gSWYgdGhpcyBsYXllcidzIHJlbmRlcmVyIGlzIGEgY2hpbGQgb2YgdGhlIHBhaW50aW5n
Um9vdCwgd2UgcmVuZGVyIHVuY29uZGl0aW9uYWxseSwgd2hpY2gKICAgICAvLyBpcyBkb25lIGJ5
IHBhc3NpbmcgYSBuaWwgcGFpbnRpbmdSb290IGRvd24gdG8gb3VyIHJlbmRlcmVyIChhcyBpZiBu
byBwYWludGluZ1Jvb3Qgd2FzIGV2ZXIgc2V0KS4KICAgICAvLyBFbHNlLCBvdXIgcmVuZGVyZXIg
dHJlZSBtYXkgb3IgbWF5IG5vdCBjb250YWluIHRoZSBwYWludGluZyByb290LCBzbyB3ZSBwYXNz
IHRoYXQgcm9vdCBhbG9uZwpAQCAtMzc1Miw3OSArMzc1OSw0MyBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJs
YXBUZXN0UmVxdWVzdHMgJiYgaXNTZWxmUGFpbnRpbmdMYXllcikKICAgICAgICAgcGVyZm9ybU92
ZXJsYXBUZXN0cygqbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cywgbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyLCB0aGlzKTsKIAotICAgIC8vIFdlIHdhbnQgdG8gcGFpbnQg
b3VyIGxheWVyLCBidXQgb25seSBpZiB3ZSBpbnRlcnNlY3QgdGhlIGRhbWFnZSByZWN0LgotICAg
IGlmICh0aGlzICE9IGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpKQotICAgICAgICBzaG91
bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3QobGF5ZXJCb3VuZHMsIGRhbWFn
ZVJlY3QucmVjdCgpLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9v
dCk7CisgICAgYm9vbCBmb3JjZUJsYWNrVGV4dCA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVo
YXZpb3IgJiBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQ7CisgICAgYm9vbCBzZWxlY3Rpb25P
bmx5ICA9IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yU2Vs
ZWN0aW9uT25seTsKKyAgICAKKyAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IgPSBQYWlu
dEJlaGF2aW9yTm9ybWFsOworICAgIGlmIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFp
bnRpbmdTa2lwUm9vdEJhY2tncm91bmQpCisgICAgICAgIHBhaW50QmVoYXZpb3IgfD0gUGFpbnRC
ZWhhdmlvclNraXBSb290QmFja2dyb3VuZDsKKyAgICBlbHNlIGlmIChsb2NhbFBhaW50RmxhZ3Mg
JiBQYWludExheWVyUGFpbnRpbmdSb290QmFja2dyb3VuZE9ubHkpCisgICAgICAgIHBhaW50QmVo
YXZpb3IgfD0gUGFpbnRCZWhhdmlvclJvb3RCYWNrZ3JvdW5kT25seTsKIAotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0
KCkgJiYgaGF2ZVRyYW5zcGFyZW5jeSkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVy
IGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFyZW5j
eSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0
cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KLSAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvcik7CisgICAgTGF5ZXJGcmFnbWVudHMgbGF5ZXJGcmFnbWVudHM7CisgICAgaWYgKHNo
b3VsZFBhaW50Q29udGVudCB8fCBzaG91bGRQYWludE91dGxpbmUgfHwgaXNQYWludGluZ092ZXJs
YXlTY3JvbGxiYXJzKSB7CisgICAgICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3
aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBhbmQgcGFpbnQgb2Zmc2V0cyBmb3IgZWFj
aCBsYXllciBmcmFnbWVudCwgYXMgd2VsbCBhcyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudCBv
ZiBlYWNoCisgICAgICAgIC8vIGZyYWdtZW50IHNob3VsZCBwYWludC4KKyAgICAgICAgY29sbGVj
dEZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBs
b2NhbFBhaW50aW5nSW5mby5yZWdpb24sIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0
LAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplLAorICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50
TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVz
cGVjdE92ZXJmbG93Q2xpcCwgJm9mZnNldEZyb21Sb290KTsKKyAgICAgICAgdXBkYXRlUGFpbnRp
bmdJbmZvRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9j
YWxQYWludEZsYWdzLCBzaG91bGRQYWludENvbnRlbnQsICZvZmZzZXRGcm9tUm9vdCk7CiAgICAg
fQotI2VuZGlmCi0KKyAgICAKICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBh
aW50aW5nQ29tcG9zaXRpbmdCYWNrZ3JvdW5kUGhhc2UpIHsKLSAgICAgICAgaWYgKHNob3VsZFBh
aW50Q29udGVudCAmJiAhc2VsZWN0aW9uT25seSkgewotICAgICAgICAgICAgLy8gQmVnaW4gdHJh
bnNwYXJlbmN5IGxheWVycyBsYXppbHkgbm93IHRoYXQgd2Uga25vdyB3ZSBoYXZlIHRvIHBhaW50
IHNvbWV0aGluZy4KLSAgICAgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQotICAgICAgICAg
ICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgICAgICAKLSAgICAgICAgICAg
IGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAg
ICAvLyBQYWludCBvdXIgYmFja2dyb3VuZCBmaXJzdCwgYmVmb3JlIHBhaW50aW5nIGFueSBjaGls
ZCBsYXllcnMuCi0gICAgICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8g
cGFpbnQgb3VyIGJhY2tncm91bmQuCi0gICAgICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBh
aW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBkYW1hZ2VSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8g
QmFja2dyb3VuZCBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3Vu
ZC4KLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVk
SW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIHBh
aW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5y
ZWdpb24pOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7Ci0KLSAgICAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJl
Y3QpCi0gICAgICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwotICAgICAgICB9CisgICAgICAgIC8vIFBh
aW50IG9ubHkgdGhlIGJhY2tncm91bmRzIGZvciBhbGwgb2YgdGhlIGZyYWdtZW50cyBvZiB0aGUg
bGF5ZXIuCisgICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQgJiYgIXNlbGVjdGlvbk9ubHkp
CisgICAgICAgICAgICBwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMs
IGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAorICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJ
bmZvLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAKICAgICAgICAg
Ly8gTm93IHdhbGsgdGhlIHNvcnRlZCBsaXN0IG9mIGNoaWxkcmVuIHdpdGggbmVnYXRpdmUgei1p
bmRpY2VzLgogICAgICAgICBwYWludExpc3QobmVnWk9yZGVyTGlzdCgpLCBjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGxv
Y2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nRm9yZWdyb3VuZFBo
YXNlKSB7Ci0gICAgICAgIC8vIE5vdyBlc3RhYmxpc2ggdGhlIGFwcHJvcHJpYXRlIGNsaXAgYW5k
IHBhaW50IG91ciBjaGlsZCBSZW5kZXJPYmplY3RzLgotICAgICAgICBpZiAoc2hvdWxkUGFpbnRD
b250ZW50ICYmICFjbGlwUmVjdFRvQXBwbHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBC
ZWdpbiB0cmFuc3BhcmVuY3kgbGF5ZXJzIGxhemlseSBub3cgdGhhdCB3ZSBrbm93IHdlIGhhdmUg
dG8gcGFpbnQgc29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpCi0g
ICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0KLSAgICAgICAgICAg
IGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpIHsKLSAgICAgICAgICAgICAg
ICAvLyBTZXQgdXAgdGhlIGNsaXAgdXNlZCB3aGVuIHBhaW50aW5nIG91ciBjaGlsZHJlbi4KLSAg
ICAgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFBhaW50SW5mbyBwYWlu
dEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwUmVjdFRvQXBwbHkucmVjdCgp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uT25seSA/IFBhaW50
UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUJsYWNrVGV4dCA/IChQYWludEJlaGF2aW9y
KVBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCA6IHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9v
dEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZWdpb24pOwotICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
IXNlbGVjdGlvbk9ubHkpIHsKLSAgICAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWlu
dFBoYXNlRmxvYXQ7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQ
aGFzZUZvcmVncm91bmQ7Ci0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVx
dWVzdHMgPSBsb2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzOwotICAgICAgICAg
ICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAg
ICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOwotICAg
ICAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRv
RGlydHlSZWN0KQotICAgICAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFp
bnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBjbGlwUmVjdFRvQXBwbHkpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQpCisgICAgICAgICAgICBwYWludEZvcmVncm91
bmRGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIHRyYW5zcGFyZW5jeUxheWVy
Q29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAor
ICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLCBwYWludEJlaGF2aW9yLCBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlciwgc2VsZWN0aW9uT25seSwgZm9yY2VCbGFja1RleHQpOworICAgICAg
ICAKKyAgICAgICAgaWYgKHNob3VsZFBhaW50T3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0
bGluZUZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8sIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKIAotICAgICAgICBp
ZiAoc2hvdWxkUGFpbnRPdXRsaW5lICYmICFvdXRsaW5lUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0bGluZQotICAgICAgICAgICAgUGFpbnRJbmZvIHBh
aW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0KG91dGxpbmVSZWN0LnJlY3QoKSks
IFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7Ci0gICAgICAgICAgICBjbGlwVG9SZWN0
KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFk
aXVzKTsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOwotICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAgICAgfQotICAgIAogICAgICAgICAv
LyBQYWludCBhbnkgY2hpbGQgbGF5ZXJzIHRoYXQgaGF2ZSBvdmVyZmxvdy4KICAgICAgICAgcGFp
bnRMaXN0KG1fbm9ybWFsRmxvd0xpc3QuZ2V0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LCBsb2NhbFBhaW50RmxhZ3MpOwogICAgIApAQCAtMzgzMiwzNCArMzgwMywyNiBAQCB2b2lkIFJl
bmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAgICAgIHBhaW50TGlzdChwb3Na
T3JkZXJMaXN0KCksIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3Mp
OwogICAgIH0KIAotICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKLSAgICAg
ICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKLSAgICAgICAgcGFpbnRP
dmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCksIHBp
eGVsU25hcHBlZEludFJlY3QoZGFtYWdlUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVz
dG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFn
ZVJlY3QpOwotICAgIH0KKyAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKQorICAg
ICAgICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAg
ICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkpIHsKICAgICAgICAg
Ly8gQXBwbHkgdGhlIGNvcnJlY3QgY2xpcHBpbmcgKGllLiBvdmVyZmxvdzogaGlkZGVuKS4KLSAg
ICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5j
eUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJl
Y3QpOworICAgICAgICAvLyBGSVhNRTogSXQgaXMgaW5jb3JyZWN0IHRvIGp1c3QgY2xpcCB0byB0
aGUgZGFtYWdlUmVjdCBoZXJlIG9uY2UgbXVsdGlwbGUgZnJhZ21lbnRzIGFyZSBpbnZvbHZlZC4K
KyAgICAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3QgPSBsYXllckZyYWdtZW50cy5pc0VtcHR5
KCkgPyBDbGlwUmVjdCgpIDogbGF5ZXJGcmFnbWVudHNbMF0uYmFja2dyb3VuZFJlY3Q7CisgICAg
ICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCB0cmFuc3BhcmVuY3lM
YXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5k
UmVjdCk7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLmFwcGx5RmlsdGVyRWZmZWN0
KCk7Ci0gICAgICAgIHJlc3RvcmVDbGlwKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICByZXN0b3Jl
Q2xpcCh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CiAgICAgfQogI2VuZGlmCi0KKyAgICAKICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB3ZSBub3cgdXNlIHRoZSBvcmlnaW5hbCB0cmFuc3BhcmVuY3kgY29udGV4
dC4KICAgICBBU1NFUlQodHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0ID09IGNvbnRleHQpOwogCiAg
ICAgaWYgKChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ01h
c2tQaGFzZSkgJiYgc2hvdWxkUGFpbnRDb250ZW50ICYmIHJlbmRlcmVyKCktPmhhc01hc2soKSAm
JiAhc2VsZWN0aW9uT25seSkgewotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRv
RGlydHlSZWN0KQotICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBkYW1hZ2VS
ZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gTWFzayBwYWludGluZyB3
aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgotICAgICAgICAKLSAgICAgICAgLy8gUGFpbnQg
dGhlIG1hc2suCi0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFw
cGVkSW50UmVjdChkYW1hZ2VSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2
aW9yTm9ybWFsLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVn
aW9uKTsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0
KQotICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOworICAgICAgICAvLyBQYWludCB0aGUgbWFzayBmb3Ig
dGhlIGZyYWdtZW50cy4KKyAgICAgICAgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21l
bnRzLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIp
OwogICAgIH0KIAogICAgIC8vIEVuZCBvdXIgdHJhbnNwYXJlbmN5IGxheWVyCkBAIC0zOTEzLDEz
ICszODc2LDI2OCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExpc3QoVmVjdG9yPFJlbmRlCiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgIGlmICghY2hp
bGRMYXllci0+aXNQYWdpbmF0ZWQoKSB8fCB1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAg
ICAgaWYgKCFjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgY2hpbGRMYXll
ci0+cGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwg
Y29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCwKKyAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3ksIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3Qg
TGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQoreworICAgIGlmICghZW5jbG9zaW5nUGFnaW5h
dGlvbkxheWVyKCkgfHwgaGFzVHJhbnNmb3JtKCkpIHsKKyAgICAgICAgLy8gRm9yIHVucGFnaW5h
dGVkIGxheWVycywgdGhlcmUgaXMgb25seSBvbmUgZnJhZ21lbnQuCisgICAgICAgIExheWVyRnJh
Z21lbnQgZnJhZ21lbnQ7CisgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4
dChyb290TGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAgICAgIGNhbGN1bGF0ZVJlY3Rz
KGNsaXBSZWN0c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21lbnQub3V0
bGluZVJlY3QsIG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgZnJhZ21lbnRzLmFwcGVuZChmcmFn
bWVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQ29tcHV0ZSBvdXIg
b2Zmc2V0IHdpdGhpbiB0aGUgZW5jbG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuCisgICAgTGF5b3V0
UG9pbnQgb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXI7CisgICAgY29udmVydFRvTGF5ZXJDb29y
ZHMoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIG9mZnNldFdpdGhpblBhZ2luYXRlZExheWVy
KTsKKyAgICAKKyAgICAvLyBDYWxjdWxhdGUgY2xpcCByZWN0cyByZWxhdGl2ZSB0byB0aGUgZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyLiBUaGUgcHVycG9zZSBvZiB0aGlzIGNhbGwgaXMgdG8gZGV0
ZXJtaW5lIG91ciBib3VuZHMgY2xpcHBlZCB0byBpbnRlcm1lZGlhdGUKKyAgICAvLyBsYXllcnMg
YmV0d2VlbiB1cyBhbmQgdGhlIHBhZ2luYXRpb24gY29udGV4dC4gSXQncyBpbXBvcnRhbnQgdG8g
bWluaW1pemUgdGhlICMgb2YgZnJhZ21lbnRzIHdlIG5lZWQgdG8gY3JlYXRlIGFuZCB0aGlzIGhl
bHBzIHdpdGgKKyAgICAvLyB0aGF0LgorICAgIENsaXBSZWN0c0NvbnRleHQgcGFnaW5hdGlvbkNs
aXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIHJlZ2lvbiwgY2xpcFJl
Y3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93
Q2xpcCk7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc0luRmxvd1RocmVhZDsKKyAgICBDbGlw
UmVjdCBiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZDsKKyAgICBDbGlwUmVjdCBmb3JlZ3JvdW5k
UmVjdEluRmxvd1RocmVhZDsKKyAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdEluRmxvd1RocmVhZDsK
KyAgICBjYWxjdWxhdGVSZWN0cyhwYWdpbmF0aW9uQ2xpcFJlY3RzQ29udGV4dCwgUGFpbnRJbmZv
OjppbmZpbml0ZVJlY3QoKSwgbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJhY2tncm91bmRSZWN0
SW5GbG93VGhyZWFkLCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZCwKKyAgICAgICAgb3V0bGlu
ZVJlY3RJbkZsb3dUaHJlYWQsICZvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7CisgICAgCisg
ICAgLy8gVGFrZSBvdXIgYm91bmRpbmcgYm94IHdpdGhpbiB0aGUgZmxvdyB0aHJlYWQgYW5kIGNs
aXAgaXQuIFRoaXMgd2lsbCBoZWxwIG1pbmltaXplIHRoZSAjIG9mIGZyYWdtZW50cyB3ZSBoYXZl
IHRvIGNyZWF0ZS4KKyAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRpbmdCb3hJbkZsb3dUaHJlYWQg
PSBib3VuZGluZ0JveChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgMCwgJm9mZnNldFdpdGhp
blBhZ2luYXRlZExheWVyKTsKKyAgICBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLmludGVy
c2VjdChiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZC5yZWN0KCkpOworCisgICAgLy8gU2hpZnQg
dGhlIGRpcnR5IHJlY3QgaW50byBmbG93IHRocmVhZCBjb29yZGluYXRlcy4KKyAgICBMYXlvdXRQ
b2ludCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290OworICAgIGVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFn
aW5hdGlvbkxheWVyRnJvbVJvb3QpOworICAgIExheW91dFJlY3QgZGlydHlSZWN0SW5GbG93VGhy
ZWFkKGRpcnR5UmVjdCk7CisgICAgZGlydHlSZWN0SW5GbG93VGhyZWFkLm1vdmVCeSgtb2Zmc2V0
T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisKKyAgICAvLyBUZWxsIHRoZSBmbG93IHRocmVh
ZCB0byBjb2xsZWN0IHRoZSBmcmFnbWVudHMuIFdlIHBhc3MgZW5vdWdoIGluZm9ybWF0aW9uIHRv
IGNyZWF0ZSBhIG1pbmltYWwgbnVtYmVyIG9mIGZyYWdtZW50cyBiYXNlZCBvZmYgdGhlIHBhZ2Vz
L2NvbHVtbnMKKyAgICAvLyB0aGF0IGludGVyc2VjdCB0aGUgYWN0dWFsIGRpcnR5UmVjdCBhcyB3
ZWxsIGFzIHRoZSBwYWdlcy9jb2x1bW5zIHRoYXQgaW50ZXJzZWN0IG91ciBsYXllcidzIGJvdW5k
aW5nIGJveC4KKyAgICBSZW5kZXJGbG93VGhyZWFkKiBlbmNsb3NpbmdGbG93VGhyZWFkID0gdG9S
ZW5kZXJGbG93VGhyZWFkKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5yZW5kZXJlcigpKTsK
KyAgICBlbmNsb3NpbmdGbG93VGhyZWFkLT5jb2xsZWN0TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRz
LCBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLCBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQpOwor
ICAgIAorICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gR2V0IHRoZSBwYXJlbnQgY2xpcCByZWN0cyBvZiB0aGUgcGFnaW5hdGlvbiBsYXll
ciwgc2luY2Ugd2UgbmVlZCB0byBpbnRlcnNlY3Qgd2l0aCB0aGF0IHdoZW4gcGFpbnRpbmcgY29s
dW1uIGNvbnRlbnRzLgorICAgIENsaXBSZWN0IGFuY2VzdG9yQ2xpcFJlY3QgPSBkaXJ0eVJlY3Q7
CisgICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5wYXJlbnQoKSkgeworICAgICAg
ICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCByZWdpb24sIGNs
aXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVy
Zmxvd0NsaXApOworICAgICAgICBhbmNlc3RvckNsaXBSZWN0ID0gZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKCktPmJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KTsKKyAgICAgICAg
YW5jZXN0b3JDbGlwUmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKKyAgICB9CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXll
ckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFNldCBvdXIgZm91ciByZWN0cyB3aXRoIGFsbCBjbGlwcGluZyBhcHBsaWVkIHRoYXQgd2Fz
IGludGVybmFsIHRvIHRoZSBmbG93IHRocmVhZC4KKyAgICAgICAgZnJhZ21lbnQuc2V0UmVjdHMo
bGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJhY2tncm91bmRSZWN0SW5GbG93VGhyZWFkLCBmb3Jl
Z3JvdW5kUmVjdEluRmxvd1RocmVhZCwgb3V0bGluZVJlY3RJbkZsb3dUaHJlYWQpOworICAgICAg
ICAKKyAgICAgICAgLy8gU2hpZnQgdG8gdGhlIHJvb3QtcmVsYXRpdmUgcGh5c2ljYWwgcG9zaXRp
b24gdXNlZCB3aGVuIHBhaW50aW5nIHRoZSBmbG93IHRocmVhZCBpbiB0aGlzIGZyYWdtZW50Lgor
ICAgICAgICBmcmFnbWVudC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCArIG9mZnNl
dE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOworCisgICAgICAgIC8vIEludGVyc2VjdCB0aGUg
ZnJhZ21lbnQgd2l0aCBvdXIgYW5jZXN0b3IncyBiYWNrZ3JvdW5kIGNsaXAgc28gdGhhdCBlLmcu
LCBjb2x1bW5zIGluIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayBhcmUKKyAgICAgICAgLy8gcHJv
cGVybHkgY2xpcHBlZCBieSB0aGUgb3ZlcmZsb3cuCisgICAgICAgIGZyYWdtZW50LmludGVyc2Vj
dChhbmNlc3RvckNsaXBSZWN0LnJlY3QoKSk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgaW50
ZXJzZWN0IHdpdGggb3VyIHBhZ2luYXRpb24gY2xpcC4gVGhpcyB3aWxsIHR5cGljYWxseSBtZWFu
IHdlJ3JlIGp1c3QgaW50ZXJzZWN0aW5nIHRoZSBkaXJ0eSByZWN0IHdpdGggdGhlIGNvbHVtbgor
ICAgICAgICAvLyBjbGlwLCBzbyB0aGUgY29sdW1uIGNsaXAgZW5kcyB1cCBiZWluZyBhbGwgd2Ug
YXBwbHkuCisgICAgICAgIGZyYWdtZW50LmludGVyc2VjdChmcmFnbWVudC5wYWdpbmF0aW9uQ2xp
cCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWludGluZ0luZm9Gb3JG
cmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgbG9jYWxQYWludEZsYWdzLAor
ICAgIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJv
bVJvb3QpCit7CisgICAgQVNTRVJUKG9mZnNldEZyb21Sb290KTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckZyYWdtZW50
JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFp
bnRDb250ZW50ID0gc2hvdWxkUGFpbnRDb250ZW50OworICAgICAgICBpZiAodGhpcyAhPSBsb2Nh
bFBhaW50aW5nSW5mby5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVy
UGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkgeworICAgICAgICAgICAgTGF5b3V0UG9pbnQgbmV3
T2Zmc2V0RnJvbVJvb3QgPSAqb2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zm
c2V0OworICAgICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2Vj
dHNEYW1hZ2VSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zv
cm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdz
KQoreworICAgIExheWVyRnJhZ21lbnRzIGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHM7Cisg
ICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKKyAgICBlbmNs
b3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0
aW9uRnJhZ21lbnRzLCBwYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucmVnaW9u
LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsCisgICAgICAgIChwYWludEZsYWdzICYgUGFp
bnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWludGlu
Z0NsaXBSZWN0cywgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsCisgICAgICAgIChwYWludEZs
YWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxv
d0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9t
Um9vdCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbmNsb3NpbmdQYWdpbmF0
aW9uRnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQm
IGZyYWdtZW50ID0gZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cy5hdChpKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEFwcGx5IHRoZSBwYWdlL2NvbHVtbiBjbGlwIGZvciB0aGlzIGZyYWdtZW50
LCBhcyB3ZWxsIGFzIGFueSBjbGlwcyBlc3RhYmxpc2hlZCBieSBsYXllcnMgaW4gYmV0d2VlbiB1
cyBhbmQKKyAgICAgICAgLy8gdGhlIGVuY2xvc2luZyBwYWdpbmF0aW9uIGxheWVyLgorICAgICAg
ICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpOwor
ICAgICAgICAKKyAgICAgICAgLy8gTm93IGNvbXB1dGUgdGhlIGNsaXBzIHdpdGhpbiBhIGdpdmVu
IGZyYWdtZW50CisgICAgICAgIGlmIChwYXJlbnQoKSAhPSBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoKSkgeworICAgICAgICAgICAgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPmNvbnZlcnRU
b0xheWVyQ29vcmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9mZnNldE9mUGFnaW5hdGlvbkxh
eWVyRnJvbVJvb3QpOworICAgIAorICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVj
dHNDb250ZXh0KGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCBwYWludGluZ0luZm8ucmVnaW9u
LCAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5
Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsCisgICAgICAgICAgICAgICAgSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUsIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZs
b3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwKTsK
KyAgICAgICAgICAgIExheW91dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJl
Y3QoY2xpcFJlY3RzQ29udGV4dCkucmVjdCgpOworICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3Qu
bW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXll
ckZyb21Sb290KTsKKyAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRDbGlwUmVj
dCk7CisgICAgICAgIH0KKworICAgICAgICBwYXJlbnQoKS0+Y2xpcFRvUmVjdChwYWludGluZ0lu
Zm8ucm9vdExheWVyLCBjb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBS
ZWN0KTsKKyAgICAgICAgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oY29udGV4dCwgcGFp
bnRpbmdJbmZvLCBwYWludEZsYWdzLCBmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0KTsKKyAgICAg
ICAgcGFyZW50KCktPnJlc3RvcmVDbGlwKGNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgY2xpcFJlY3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRCYWNr
Z3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxh
eWVyQ29udGV4dCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5
UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9j
YWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwKKyAgICBSZW5kZXJP
YmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVu
dCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50
LnNob3VsZFBhaW50Q29udGVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8v
IEJlZ2luIHRyYW5zcGFyZW5jeSBsYXllcnMgbGF6aWx5IG5vdyB0aGF0IHdlIGtub3cgd2UgaGF2
ZSB0byBwYWludCBzb21ldGhpbmcuCisgICAgICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5KQorICAg
ICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0
LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKKyAgICAKKyAgICAgICAgaWYgKGxv
Y2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkgeworICAgICAgICAgICAgLy8gUGFpbnQg
b3VyIGJhY2tncm91bmQgZmlyc3QsIGJlZm9yZSBwYWludGluZyBhbnkgY2hpbGQgbGF5ZXJzLgor
ICAgICAgICAgICAgLy8gRXN0YWJsaXNoIHRoZSBjbGlwIHVzZWQgdG8gcGFpbnQgb3VyIGJhY2tn
cm91bmQuCisgICAgICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXll
ciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJh
Y2tncm91bmRSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzKTsgLy8gQmFja2dy
b3VuZCBwYWludGluZyB3aWxsIGhhbmRsZSBjbGlwcGluZyB0byBzZWxmLgorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgLy8gRklY
TUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21l
bnQgaXRzZWxmIGluc3RlYWQgb2YganVzdCBmcm9tIHRoZSBwYWludCBpbmZvLgorICAgICAgICBQ
YWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQu
YmFja2dyb3VuZFJlY3QucmVjdCgpKSwgUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRC
ZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lv
bik7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChmcmFnbWVu
dC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFp
bnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CisKKyAgICAgICAgaWYgKGxvY2FsUGFp
bnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKKyAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5k
UmVjdCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyOjpwYWludEZvcmVncm91bmRGb3JG
cmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0
LAorICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29s
IGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5n
SW5mbywgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgIFJlbmRlck9iamVjdCogcGFp
bnRpbmdSb290Rm9yUmVuZGVyZXIsIGJvb2wgc2VsZWN0aW9uT25seSwgYm9vbCBmb3JjZUJsYWNr
VGV4dCkKK3sKKyAgICAvLyBCZWdpbiB0cmFuc3BhcmVuY3kgaWYgd2UgaGF2ZSBzb21ldGhpbmcg
dG8gcGFpbnQuCisgICAgaWYgKGhhdmVUcmFuc3BhcmVuY3kpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllckZyYWdtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
TGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICAg
ICAgaWYgKGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCAmJiAhZnJhZ21lbnQuZm9yZWdyb3Vu
ZFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYmVnaW5UcmFuc3BhcmVuY3lMYXll
cnModHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIs
IHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludEJlaGF2
aW9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBQYWludEJlaGF2aW9yIGxvY2FsUGFpbnRCZWhhdmlvciA9IGZvcmNl
QmxhY2tUZXh0ID8gKFBhaW50QmVoYXZpb3IpUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDog
cGFpbnRCZWhhdmlvcjsKKworICAgIC8vIE9wdGltaXplIGNsaXBwaW5nIGZvciB0aGUgc2luZ2xl
IGZyYWdtZW50IGNhc2UuCisgICAgYm9vbCBzaG91bGRDbGlwID0gbG9jYWxQYWludGluZ0luZm8u
Y2xpcFRvRGlydHlSZWN0ICYmIGxheWVyRnJhZ21lbnRzLnNpemUoKSA9PSAxICYmIGxheWVyRnJh
Z21lbnRzWzBdLnNob3VsZFBhaW50Q29udGVudCAmJiAhbGF5ZXJGcmFnbWVudHNbMF0uZm9yZWdy
b3VuZFJlY3QuaXNFbXB0eSgpOworICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICBjbGlwVG9S
ZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGxheWVyRnJhZ21lbnRzWzBdLmZvcmVncm91bmRSZWN0KTsKKyAg
ICAKKyAgICAvLyBXZSBoYXZlIHRvIGxvb3AgdGhyb3VnaCBldmVyeSBmcmFnbWVudCBtdWx0aXBs
ZSB0aW1lcywgc2luY2Ugd2UgaGF2ZSB0byByZXBhaW50IGluIGVhY2ggc3BlY2lmaWMgcGhhc2Ug
aW4gb3JkZXIgZm9yCisgICAgLy8gaW50ZXJsZWF2aW5nIG9mIHRoZSBmcmFnbWVudHMgdG8gd29y
ayBwcm9wZXJseS4KKyAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2Uoc2Vs
ZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0Jh
Y2tncm91bmRzLCBsYXllckZyYWdtZW50cywKKyAgICAgICAgY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAg
IAorICAgIGlmICghc2VsZWN0aW9uT25seSkgeworICAgICAgICBwYWludEZvcmVncm91bmRGb3JG
cmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZUZsb2F0LCBsYXllckZyYWdtZW50cywgY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOworICAgICAgICBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2Uo
UGFpbnRQaGFzZUZvcmVncm91bmQsIGxheWVyRnJhZ21lbnRzLCBjb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mbywgbG9jYWxQYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7Cisg
ICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlQ2hp
bGRPdXRsaW5lcywgbGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBs
b2NhbFBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB9CisgICAg
CisgICAgaWYgKHNob3VsZENsaXApCisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBsYXllckZyYWdtZW50c1swXS5mb3JlZ3JvdW5k
UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50
c1dpdGhQaGFzZShQYWludFBoYXNlIHBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJG
cmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwg
UmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBib29sIHNob3Vs
ZENsaXAgPSBsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QgJiYgbGF5ZXJGcmFnbWVu
dHMuc2l6ZSgpID4gMTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVy
RnJhZ21lbnRzLmF0KGkpOworICAgICAgICBpZiAoIWZyYWdtZW50LnNob3VsZFBhaW50Q29udGVu
dCB8fCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRDbGlwKQorICAgICAgICAgICAgY2xp
cFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7CisgICAgCisg
ICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChm
cmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5yZWN0KCkpLCBwaGFzZSwgcGFpbnRCZWhhdmlvciwgcGFp
bnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAgICAg
IGlmIChwaGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAgICAgICAgIHBhaW50SW5m
by5vdmVybGFwVGVzdFJlcXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1
ZXN0czsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0b1BvaW50KGZyYWdt
ZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQ
YWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzaG91bGRDbGlwKQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0KTsKKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBM
YXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLAorICAgIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJl
cikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyRnJhZ21lbnRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5h
dChpKTsKKyAgICAgICAgaWYgKGZyYWdtZW50Lm91dGxpbmVSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUK
KyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBwaXhlbFNuYXBwZWRJbnRSZWN0
KGZyYWdtZW50Lm91dGxpbmVSZWN0LnJlY3QoKSksIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFp
bnRCZWhhdmlvciwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJl
Z2lvbik7CisgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBj
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQub3V0bGlu
ZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOworICAgICAgICByZW5kZXJl
cigpLT5wYWludChwYWludEluZm8sIHRvUG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRp
b24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFj
Y3VtdWxhdGlvbikpOworICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QpOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sCisgICAgUmVuZGVyT2JqZWN0KiBwYWlu
dGluZ1Jvb3RGb3JSZW5kZXJlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVy
RnJhZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQg
PSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5zaG91bGRQYWlu
dENvbnRlbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobG9jYWxQYWlu
dGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBh
aW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRl
clJhZGl1cyk7IC8vIE1hc2sgcGFpbnRpbmcgd2lsbCBoYW5kbGUgY2xpcHBpbmcgdG8gc2VsZi4K
KyAgICAgICAgCisgICAgICAgIC8vIFBhaW50IHRoZSBtYXNrLgorICAgICAgICAvLyBGSVhNRTog
RXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBp
dHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCisgICAgICAgIFBhaW50
SW5mbyBwYWludEluZm8oY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNr
Z3JvdW5kUmVjdC5yZWN0KCkpLCBQYWludFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwg
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlZ2lvbik7CisgICAg
ICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdG9Qb2ludChmcmFnbWVudC5sYXllckJv
dW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZv
LnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBpZiAobG9jYWxQYWlu
dGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQorICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJhY2tncm91bmRS
ZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9s
c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRp
bmdJbmZvKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJGcmFnbWVudHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudCA9IGxheWVyRnJhZ21l
bnRzLmF0KGkpOworICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXll
ciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmJh
Y2tncm91bmRSZWN0KTsKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJv
dW5kZWRJbnRQb2ludCh0b1BvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSBy
ZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRp
b24pKSwKKyAgICAgICAgICAgIHBpeGVsU25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3Vu
ZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Cisg
ICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVu
ZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3Mp
CiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91
ciBjaGlsZCBsYXllciBpbnRvIHN0cmlwcy4KQEAgLTQwNTcsNyArNDI3NSw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFIKIAogICAgIHJlbmRlcmVyKCktPmRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgIAotICAgIExheW91dFJlY3QgaGl0VGVzdEFyZWEg
PSByZW5kZXJlcigpLT5pc1JlbmRlckZsb3dUaHJlYWQoKSA/IHRvUmVuZGVyRmxvd1RocmVhZChy
ZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpIDogcmVuZGVyZXIoKS0+dmlldygpLT5kb2N1bWVu
dFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gaXNPdXRPZkZsb3dSZW5kZXJG
bG93VGhyZWFkKCkgPyB0b1JlbmRlckZsb3dUaHJlYWQocmVuZGVyZXIoKSktPmJvcmRlckJveFJl
Y3QoKSA6IHJlbmRlcmVyKCktPnZpZXcoKS0+ZG9jdW1lbnRSZWN0KCk7CiAgICAgaWYgKCFyZXF1
ZXN0Lmlnbm9yZUNsaXBwaW5nKCkpCiAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChmcmFt
ZVZpc2libGVSZWN0KHJlbmRlcmVyKCkpKTsKIApAQCAtNDE0NSw2ICs0MzYzLDggQEAgUGFzc1Jl
ZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IFJlbgogICAgIH0KICAgICBvZmZzZXQubW92
ZUJ5KHRyYW5zbGF0aW9uT2Zmc2V0KTsKIAorICAgIG9mZnNldC5tb3ZlQnkodHJhbnNsYXRpb25P
ZmZzZXQpOworCiAgICAgUmVuZGVyT2JqZWN0KiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5l
ckxheWVyID8gY29udGFpbmVyTGF5ZXItPnJlbmRlcmVyKCkgOiAwOwogICAgIGlmIChyZW5kZXJl
cigpLT5zaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lclJlbmRlcmVyKSkg
ewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250YWluZXJUcmFuc2Zvcm07CkBAIC00
MjAxLDYgKzQ0MjEsOSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
CiAKICAgICAvLyBBcHBseSBhIHRyYW5zZm9ybSBpZiB3ZSBoYXZlIG9uZS4KICAgICBpZiAodHJh
bnNmb3JtKCkgJiYgIWFwcGxpZWRUcmFuc2Zvcm0pIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllcigpKQorICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3RUcmFuc2Zvcm1lZExh
eWVySW5GcmFnbWVudHMocm9vdExheWVyLCBjb250YWluZXJMYXllciwgcmVxdWVzdCwgcmVzdWx0
LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldCk7
CisKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXJlbnQncyBjbGlwIHJlY3RzIGhhdmUgYmVl
biBjYWxjdWxhdGVkLgogICAgICAgICBpZiAocGFyZW50KCkpIHsKICAgICAgICAgICAgIENsaXBS
ZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5y
ZWdpb24oKSwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNp
emUpOwpAQCAtNDI0MiwxNiArNDQ2NSw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFIKICAgICAgICAgLy8gVGhpcyBsYXllciBpcyBmbGF0dGVuaW5nLCBzbyBmbGF0
dGVuIHRoZSBzdGF0ZSBwYXNzZWQgdG8gZGVzY2VuZGFudHMuCiAgICAgICAgIGxvY2FsVHJhbnNm
b3JtU3RhdGUtPmZsYXR0ZW4oKTsKICAgICB9Ci0gICAgCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBj
bGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCi0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKLSAg
ICBDbGlwUmVjdCBiZ1JlY3Q7Ci0gICAgQ2xpcFJlY3QgZmdSZWN0OwotICAgIENsaXBSZWN0IG91
dGxpbmVSZWN0OwogCi0gICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RM
YXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIElu
Y2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7Ci0gICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3Rz
Q29udGV4dCwgaGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGlu
ZVJlY3QpOwotICAgIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgZm9yIGtlZXBpbmcg
dHJhY2sgb2YgdGhlIHotZGVwdGggb2YgdGhlIGhpdCBwb2ludCBvZiAzZC10cmFuc2Zvcm1lZAog
ICAgIC8vIGRlc2NlbmRhbnRzLgogICAgIGRvdWJsZSBsb2NhbFpPZmZzZXQgPSAtbnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKQEAgLTQyOTYsMTcgKzQ1MTAsMjIgQEAgUmVuZGVy
TGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICBjYW5kaWRhdGVMYXll
ciA9IGhpdExheWVyOwogICAgIH0KIAotICAgIC8vIENoZWNrIGZvciB0aGUgcmVzaXplcgotICAg
IGlmIChjYW5SZXNpemUoKSAmJiByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGxheWVyQm91bmRzKSkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2lu
dCgpKSkgeworICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUg
dGhlIGNsaXAgcmVjdGFuZ2xlcyBmb3IgZWFjaCBsYXllciBmcmFnbWVudC4KKyAgICBMYXllckZy
YWdtZW50cyBsYXllckZyYWdtZW50czsKKyAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21l
bnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsIFJv
b3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKworICAg
IGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21l
bnRzLCBoaXRUZXN0TG9jYXRpb24pKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSk7CiAgICAgICAgIHJldHVy
biB0aGlzOwogICAgIH0KIAotICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNl
IHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgotICAg
IGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIGlzU2VsZlBhaW50aW5n
TGF5ZXIoKSkgeworICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBp
cyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLiBDaGVjaworICAg
IC8vIGV2ZXJ5IGZyYWdtZW50IGluIHJldmVyc2Ugb3JkZXIuCisgICAgaWYgKGlzU2VsZlBhaW50
aW5nTGF5ZXIoKSkgewogICAgICAgICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRl
c3RSZXN1bHQsIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGNvbW1pdCB0byAncmVzdWx0JyBpZiB3
ZSBrbm93IHdlJ3JlIGZyb250bW9zdC4KICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0
KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMo
cmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVz
dERlc2NlbmRhbnRzKQorICAgICAgICBib29sIGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3Qg
PSBmYWxzZTsKKyAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0RGVz
Y2VuZGFudHMsIGluc2lkZUZyYWdtZW50Rm9yZWdyb3VuZFJlY3QpCiAgICAgICAgICAgICAmJiBp
c0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0
ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1Jl
Y3RCYXNlZFRlc3QoKSkKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQp
OwpAQCAtNDMxNiwxMyArNDUzNSwxMyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRl
c3RMYXllcihSCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAvLyBG
b3JlZ3JvdW5kIGNhbiBkZXB0aC1zb3J0IHdpdGggZGVzY2VuZGFudCBsYXllcnMsIHNvIGtlZXAg
dGhpcyBhcyBhIGNhbmRpZGF0ZS4KICAgICAgICAgICAgIGNhbmRpZGF0ZUxheWVyID0gdGhpczsK
LSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgIH0g
ZWxzZSBpZiAoaW5zaWRlRnJhZ21lbnRGb3JlZ3JvdW5kUmVjdCAmJiByZXN1bHQuaXNSZWN0QmFz
ZWRUZXN0KCkpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIH0K
IAogICAgIC8vIE5vdyBjaGVjayBvdXIgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbi4KICAgICBo
aXRMYXllciA9IGhpdFRlc3RMaXN0KG5lZ1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNl
dEZvckRlc2NlbmRhbnRzUHRyLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdl
dCgpLCBkZXB0aFNvcnREZXNjZW5kYW50cyk7CisgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUu
Z2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFu
c2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFudHMpOwogICAgIGlmIChoaXRMYXll
cikgewogICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQogICAgICAgICAgICAgcmV0
dXJuIGhpdExheWVyOwpAQCAtNDMzMyw5ICs0NTUyLDEwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKFIKICAgICBpZiAoY2FuZGlkYXRlTGF5ZXIpCiAgICAgICAgIHJl
dHVybiBjYW5kaWRhdGVMYXllcjsKIAotICAgIGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0
TG9jYXRpb24pICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIGlmIChpc1NlbGZQYWlu
dGluZ0xheWVyKCkpIHsKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5o
aXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwg
dGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdFNlbGYpCisg
ICAgICAgIGJvb2wgaW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVjdCA9IGZhbHNlOworICAgICAg
ICBpZiAoaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByZXF1ZXN0
LCB0ZW1wUmVzdWx0LCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RTZWxmLCBpbnNpZGVGcmFnbWVu
dEJhY2tncm91bmRSZWN0KQogICAgICAgICAgICAgJiYgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFs
c2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQo
KSkpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKQEAgLTQzNDMsMTMgKzQ1NjMsODMg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAg
ICAgfQotICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICBpZiAo
aW5zaWRlRnJhZ21lbnRCYWNrZ3JvdW5kUmVjdCAmJiByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkp
CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIH0KIAogICAgIHJl
dHVybiAwOwogfQogCitib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAorICAgIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBIaXRUZXN0RmlsdGVyIGhpdFRlc3RGaWx0ZXIsIGJv
b2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdAoreworICAgIGlmIChsYXllckZyYWdtZW50cy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZy
YWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBMYXllckZyYWdtZW50
IGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmICgoaGl0VGVzdEZp
bHRlciA9PSBIaXRUZXN0U2VsZiAmJiAhZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0
cyhoaXRUZXN0TG9jYXRpb24pKQorICAgICAgICAgICAgfHwgKGhpdFRlc3RGaWx0ZXIgPT0gSGl0
VGVzdERlc2NlbmRhbnRzICYmICFmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhp
dFRlc3RMb2NhdGlvbikpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGluc2lkZUNs
aXBSZWN0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1
bHQsIGZyYWdtZW50LmxheWVyQm91bmRzLCBoaXRUZXN0TG9jYXRpb24sIGhpdFRlc3RGaWx0ZXIp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
aGl0VGVzdExvY2F0aW9uKSBjb25zdAoreworICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdt
ZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBMYXllckZyYWdtZW50IGZy
YWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNr
Z3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplckNvcm5lclJl
Y3QodGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcykpLmNvbnRh
aW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAorICAgIGNvbnN0IExheW91
dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlv
biwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91Ymxl
KiB6T2Zmc2V0KQoreworICAgIExheWVyRnJhZ21lbnRzIGVuY2xvc2luZ1BhZ2luYXRpb25GcmFn
bWVudHM7CisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsK
KyAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3Np
bmdQYWdpbmF0aW9uRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24o
KSwgaGl0VGVzdFJlY3QsCisgICAgICAgIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92
ZXJsYXlTY3JvbGxiYXJTaXplLCBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0T2ZQYWdpbmF0
aW9uTGF5ZXJGcm9tUm9vdCk7CisKKyAgICBmb3IgKGludCBpID0gZW5jbG9zaW5nUGFnaW5hdGlv
bkZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXll
ckZyYWdtZW50JiBmcmFnbWVudCA9IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMuYXQoaSk7
CisgICAgICAgIAorICAgICAgICAvLyBBcHBseSB0aGUgcGFnZS9jb2x1bW4gY2xpcCBmb3IgdGhp
cyBmcmFnbWVudCwgYXMgd2VsbCBhcyBhbnkgY2xpcHMgZXN0YWJsaXNoZWQgYnkgbGF5ZXJzIGlu
IGJldHdlZW4gdXMgYW5kCisgICAgICAgIC8vIHRoZSBlbmNsb3NpbmcgcGFnaW5hdGlvbiBsYXll
ci4KKyAgICAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGZyYWdtZW50LmJhY2tncm91bmRSZWN0
LnJlY3QoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBjb21wdXRlIHRoZSBjbGlwcyB3aXRo
aW4gYSBnaXZlbiBmcmFnbWVudAorICAgICAgICBpZiAocGFyZW50KCkgIT0gZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyKCkpIHsKKyAgICAgICAgICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigp
LT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFnaW5hdGlvbkxheWVy
RnJvbVJvb3QpOworICAgIAorICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHND
b250ZXh0KGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCBoaXRUZXN0TG9jYXRpb24ucmVnaW9u
KCksIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsK
KyAgICAgICAgICAgIExheW91dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJl
Y3QoY2xpcFJlY3RzQ29udGV4dCkucmVjdCgpOworICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3Qu
bW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXll
ckZyb21Sb290KTsKKyAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRDbGlwUmVj
dCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghaGl0VGVzdExvY2F0aW9uLmlu
dGVyc2VjdHMoY2xpcFJlY3QpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVu
ZGVyTGF5ZXIqIGhpdExheWVyID0gaGl0VGVzdExheWVyQnlBcHBseWluZ1RyYW5zZm9ybShyb290
TGF5ZXIsIGNvbnRhaW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRU
ZXN0TG9jYXRpb24sCisgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldCwgZnJhZ21l
bnQucGFnaW5hdGlvbk9mZnNldCk7CisgICAgICAgIGlmIChoaXRMYXllcikKKyAgICAgICAgICAg
IHJldHVybiBoaXRMYXllcjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyQnlBcHBseWluZ1RyYW5zZm9ybShSZW5k
ZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExv
Y2F0aW9uLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBk
b3VibGUqIHpPZmZzZXQsCiAgICAgY29uc3QgTGF5b3V0UG9pbnQmIHRyYW5zbGF0aW9uT2Zmc2V0
KQpAQCAtNDM4NCw5ICs0Njc0LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRz
KGNvbnN0IAogewogICAgIEFTU0VSVChpc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBh
aW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpOwogCi0gICAgaWYgKCFyZW5kZXJlcigpLT5oaXRUZXN0
KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdExvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvTGF5b3V0UG9pbnQobGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExv
Y2F0aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdFRlc3RGaWx0ZXIpKSB7
CisgICAgaWYgKCFyZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdExv
Y2F0aW9uLCB0b0xheW91dFBvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hM
b2NhdGlvbigpKSwgaGl0VGVzdEZpbHRlcikpIHsKICAgICAgICAgLy8gSXQncyB3cm9uZyB0byBz
ZXQgaW5uZXJOb2RlLCBidXQgdGhlbiBjbGFpbSB0aGF0IHlvdSBkaWRuJ3QgaGl0IGFueXRoaW5n
LCB1bmxlc3MgaXQgaXMKICAgICAgICAgLy8gYSByZWN0LWJhc2VkIHRlc3QuCiAgICAgICAgIEFT
U0VSVCghcmVzdWx0LmlubmVyTm9kZSgpIHx8IChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkgJiYg
cmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKS5zaXplKCkpKTsKQEAgLTQ0MjcsNyArNDcxNSw3
IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmUKICAgICAgICAgUmVu
ZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIq
IGhpdExheWVyID0gMDsKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5o
aXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgp
ICYmICF1c2VSZWdpb25CYXNlZENvbHVtbnMoKSkKKyAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlz
UGFnaW5hdGVkKCkpCiAgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdpbmF0ZWRDaGls
ZExheWVyKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVz
dFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5k
YW50cyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRMYXllci0+
aGl0VGVzdExheWVyKHJvb3RMYXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVz
dFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9y
RGVzY2VuZGFudHMpOwpAQCAtNDcwOSw4ICs0OTk3LDE4IEBAIHN0YXRpYyBpbmxpbmUgQ2xpcFJl
Y3QgYmFja2dyb3VuZENsaXBSZWMKIENsaXBSZWN0IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kQ2xp
cFJlY3QoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCkgY29uc3QKIHsK
ICAgICBBU1NFUlQocGFyZW50KCkpOworICAgIAogICAgIENsaXBSZWN0cyBwYXJlbnRSZWN0czsK
LSAgICBwYXJlbnRDbGlwUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgcGFyZW50UmVjdHMpOworCisg
ICAgLy8gSWYgd2UgY3Jvc3MgaW50byBhIGRpZmZlcmVudCBwYWdpbmF0aW9uIGNvbnRleHQsIHRo
ZW4gd2UgY2FuJ3QgcmVseSBvbiB0aGUgY2FjaGUuCisgICAgLy8gSnVzdCBzd2l0Y2ggb3ZlciB0
byB1c2luZyBUZW1wb3JhcnlDbGlwUmVjdHMuCisgICAgaWYgKGNsaXBSZWN0c0NvbnRleHQuY2xp
cFJlY3RzVHlwZSAhPSBUZW1wb3JhcnlDbGlwUmVjdHMgJiYgcGFyZW50KCktPmVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllcigpICE9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKSB7CisgICAgICAg
IENsaXBSZWN0c0NvbnRleHQgdGVtcENvbnRleHQoY2xpcFJlY3RzQ29udGV4dCk7CisgICAgICAg
IHRlbXBDb250ZXh0LmNsaXBSZWN0c1R5cGUgPSBUZW1wb3JhcnlDbGlwUmVjdHM7CisgICAgICAg
IHBhcmVudENsaXBSZWN0cyh0ZW1wQ29udGV4dCwgcGFyZW50UmVjdHMpOworICAgIH0gZWxzZQor
ICAgICAgICBwYXJlbnRDbGlwUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgcGFyZW50UmVjdHMpOwor
ICAgIAogICAgIENsaXBSZWN0IGJhY2tncm91bmRDbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVj
dEZvclBvc2l0aW9uKHBhcmVudFJlY3RzLCByZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigp
KTsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwogICAgIEFTU0VS
VCh2aWV3KTsKQEAgLTQ4NzgsNyArNTE3Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2Vj
dHNEYW1hZ2VSZWN0KGMKICAgICAgICAgCiAgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY29t
cHV0ZSB0aGUgYm91bmRpbmcgYm94IG9mIHRoaXMgc2luZ2xlIGxheWVyIGFuZCBzZWUgaWYgaXQg
aW50ZXJzZWN0cwogICAgIC8vIHRoZSBkYW1hZ2UgcmVjdC4KLSAgICByZXR1cm4gYm91bmRpbmdC
b3gocm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCkuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KTsKKyAg
ICByZXR1cm4gYm91bmRpbmdCb3gocm9vdExheWVyLCAwLCBvZmZzZXRGcm9tUm9vdCkuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KTsKIH0KIAogTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxCb3Vu
ZGluZ0JveChDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdApAQCAtNDkyOSwx
NCArNTIyNywzMyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbEJvdW5kaW5nQm94CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdC
b3goY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBv
ZmZzZXRGcm9tUm9vdCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBDYWxjdWxhdGVMYXllckJvdW5kc0Zs
YWdzIGZsYWdzLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpIGNvbnN0CiB7ICAg
IAotICAgIExheW91dFJlY3QgcmVzdWx0ID0gbG9jYWxCb3VuZGluZ0JveCgpOworICAgIExheW91
dFJlY3QgcmVzdWx0ID0gbG9jYWxCb3VuZGluZ0JveChmbGFncyk7CiAgICAgaWYgKHJlbmRlcmVy
KCktPmlzQm94KCkpCiAgICAgICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVz
dWx0KTsKICAgICBlbHNlCiAgICAgICAgIHJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5m
bGlwRm9yV3JpdGluZ01vZGUocmVzdWx0KTsKIAorICAgIGlmIChlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKSAmJiAoZmxhZ3MgJiBVc2VGcmFnbWVudEJveGVzKSkgeworICAgICAgICAvLyBTcGxp
dCBvdXIgYm94IHVwIGludG8gdGhlIGFjdHVhbCBmcmFnbWVudCBib3hlcyB0aGF0IHJlbmRlciBp
biB0aGUgY29sdW1ucy9wYWdlcyBhbmQgdW5pdGUgdGhvc2UgdG9nZXRoZXIgdG8KKyAgICAgICAg
Ly8gZ2V0IG91ciB0cnVlIGJvdW5kaW5nIGJveC4KKyAgICAgICAgTGF5b3V0UG9pbnQgb2Zmc2V0
V2l0aGluUGFnaW5hdGlvbkxheWVyOworICAgICAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhlbmNs
b3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgb2Zmc2V0V2l0aGluUGFnaW5hdGlvbkxheWVyKTsgICAg
ICAgIAorICAgICAgICByZXN1bHQubW92ZUJ5KG9mZnNldFdpdGhpblBhZ2luYXRpb25MYXllcik7
CisKKyAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZW5jbG9zaW5nRmxvd1RocmVhZCA9IHRvUmVu
ZGVyRmxvd1RocmVhZChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+cmVuZGVyZXIoKSk7Cisg
ICAgICAgIHJlc3VsdCA9IGVuY2xvc2luZ0Zsb3dUaHJlYWQtPmZyYWdtZW50c0JvdW5kaW5nQm94
KHJlc3VsdCk7CisgICAgICAgIAorICAgICAgICBMYXlvdXRQb2ludCBkZWx0YTsKKyAgICAgICAg
aWYgKG9mZnNldEZyb21Sb290KQorICAgICAgICAgICAgZGVsdGEgPSAqb2Zmc2V0RnJvbVJvb3Q7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5j
b252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBkZWx0YSk7CisgICAgICAgIHJlc3Vs
dC5tb3ZlQnkoZGVsdGEpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIExh
eW91dFBvaW50IGRlbHRhOwogICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKICAgICAgICAgZGVsdGEg
PSAqb2Zmc2V0RnJvbVJvb3Q7CkBAIC01MzU5LDcgKzU2NzYsNyBAQCB2b2lkIFJlbmRlckxheWVy
Ojpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jCiAgICAgYm9vbCBpc1N0YWNraW5nID0gYmVoYXZpb3Ig
PT0gU3RvcEF0U3RhY2tpbmdDb250ZXh0cyA/IGlzU3RhY2tpbmdDb250ZXh0KCkgOiBpc1N0YWNr
aW5nQ29udGFpbmVyKCk7CiAgICAgLy8gT3ZlcmZsb3cgbGF5ZXJzIGFyZSBqdXN0IHBhaW50ZWQg
YnkgdGhlaXIgZW5jbG9zaW5nIGxheWVycywgc28gdGhleSBkb24ndCBnZXQgcHV0IGluIHpvcmRl
ciBsaXN0cy4KICAgICBib29sIGluY2x1ZGVIaWRkZW5MYXllciA9IGluY2x1ZGVIaWRkZW5MYXll
cnMgfHwgKG1faGFzVmlzaWJsZUNvbnRlbnQgfHwgKG1faGFzVmlzaWJsZURlc2NlbmRhbnQgJiYg
aXNTdGFja2luZykpOwotICAgIGlmIChpbmNsdWRlSGlkZGVuTGF5ZXIgJiYgIWlzTm9ybWFsRmxv
d09ubHkoKSAmJiAhcmVuZGVyZXIoKS0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICBpZiAo
aW5jbHVkZUhpZGRlbkxheWVyICYmICFpc05vcm1hbEZsb3dPbmx5KCkgJiYgIWlzT3V0T2ZGbG93
UmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgIC8vIERldGVybWluZSB3aGljaCBidWZmZXIg
dGhlIGNoaWxkIHNob3VsZCBiZSBpbi4KICAgICAgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXll
cio+ID4mIGJ1ZmZlciA9ICh6SW5kZXgoKSA+PSAwKSA/IHBvc0J1ZmZlciA6IG5lZ0J1ZmZlcjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDE0
NDIyNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw2ICs2Miw3IEBAIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBI
aXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU7CitjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwogY2xhc3MgUmVuZGVyR2VvbWV0
cnlNYXA7CiBjbGFzcyBSZW5kZXJNYXJxdWVlOwogY2xhc3MgUmVuZGVyUmVwbGljYTsKQEAgLTEx
NCw2ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQgbW92ZShMYXlvdXRVbml0IHgs
IExheW91dFVuaXQgeSkgeyBtX3JlY3QubW92ZSh4LCB5KTsgfQogICAgIHZvaWQgbW92ZShjb25z
dCBMYXlvdXRTaXplJiBzaXplKSB7IG1fcmVjdC5tb3ZlKHNpemUpOyB9CisgICAgdm9pZCBtb3Zl
QnkoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSB7IG1fcmVjdC5tb3ZlQnkocG9pbnQpOyB9CiAK
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3JlY3QuaXNFbXB0eSgpOyB9CiAg
ICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IExheW91dFJlY3QmIHJlY3QpIHsgcmV0dXJuIG1fcmVj
dC5pbnRlcnNlY3RzKHJlY3QpOyB9CkBAIC0yNTEsNiArMjUzLDUyIEBAIHB1YmxpYzoKICNlbmRp
ZgogfTsKIAorc3RydWN0IExheWVyRnJhZ21lbnQgeworcHVibGljOgorICAgIExheWVyRnJhZ21l
bnQoKQorICAgICAgICA6IHNob3VsZFBhaW50Q29udGVudChmYWxzZSkKKyAgICB7IH0KKworICAg
IHZvaWQgc2V0UmVjdHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzLCBjb25zdCBDbGlwUmVjdCYg
YmFja2dyb3VuZCwgY29uc3QgQ2xpcFJlY3QmIGZvcmVncm91bmQsIGNvbnN0IENsaXBSZWN0JiBv
dXRsaW5lKQorICAgIHsKKyAgICAgICAgbGF5ZXJCb3VuZHMgPSBib3VuZHM7CisgICAgICAgIGJh
Y2tncm91bmRSZWN0ID0gYmFja2dyb3VuZDsKKyAgICAgICAgZm9yZWdyb3VuZFJlY3QgPSBmb3Jl
Z3JvdW5kOworICAgICAgICBvdXRsaW5lUmVjdCA9IG91dGxpbmU7CisgICAgfQorICAgIAorICAg
IHZvaWQgbW92ZUJ5KGNvbnN0IExheW91dFBvaW50JiBvZmZzZXQpCisgICAgeworICAgICAgICBs
YXllckJvdW5kcy5tb3ZlQnkob2Zmc2V0KTsKKyAgICAgICAgYmFja2dyb3VuZFJlY3QubW92ZUJ5
KG9mZnNldCk7CisgICAgICAgIGZvcmVncm91bmRSZWN0Lm1vdmVCeShvZmZzZXQpOworICAgICAg
ICBvdXRsaW5lUmVjdC5tb3ZlQnkob2Zmc2V0KTsKKyAgICAgICAgcGFnaW5hdGlvbkNsaXAubW92
ZUJ5KG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IExheW91
dFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QocmVj
dCk7CisgICAgICAgIGZvcmVncm91bmRSZWN0LmludGVyc2VjdChyZWN0KTsKKyAgICAgICAgb3V0
bGluZVJlY3QuaW50ZXJzZWN0KHJlY3QpOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFBh
aW50Q29udGVudDsKKyAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOworICAgIENsaXBSZWN0IGJh
Y2tncm91bmRSZWN0OworICAgIENsaXBSZWN0IGZvcmVncm91bmRSZWN0OworICAgIENsaXBSZWN0
IG91dGxpbmVSZWN0OworICAgIAorICAgIC8vIFVuaXF1ZSB0byBwYWdpbmF0ZWQgZnJhZ21lbnRz
LiBUaGUgcGh5c2ljYWwgdHJhbnNsYXRpb24gdG8gYXBwbHkgdG8gc2hpZnQgdGhlIGxheWVyIHdo
ZW4gcGFpbnRpbmcvaGl0LXRlc3RpbmcuCisgICAgTGF5b3V0UG9pbnQgcGFnaW5hdGlvbk9mZnNl
dDsKKyAgICAKKyAgICAvLyBBbHNvIHVuaXF1ZSB0byBwYWdpbmF0ZWQgZnJhZ21lbnRzLiBBbiBh
ZGRpdGlvbmFsIGNsaXAgdGhhdCBhcHBsaWVzIHRvIHRoZSBsYXllci4gSXQgaXMgaW4gbGF5ZXIt
bG9jYWwKKyAgICAvLyAocGh5c2ljYWwpIGNvb3JkaW5hdGVzLgorICAgIExheW91dFJlY3QgcGFn
aW5hdGlvbkNsaXA7Cit9OworCit0eXBlZGVmIFZlY3RvcjxMYXllckZyYWdtZW50PiBMYXllckZy
YWdtZW50czsKKwogY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgewog
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwpAQCAtNDE4LDYgKzQ2Niw3
IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAogICAgIGJvb2wgaXNQYWdpbmF0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzUGFnaW5hdGVkOyB9CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOyB9
CiAKICAgICB2b2lkIHVwZGF0ZVRyYW5zZm9ybSgpOwogICAgIApAQCAtNjIyLDEyICs2NzEsMTMg
QEAgcHVibGljOgogICAgICAgICBFeGNsdWRlSGlkZGVuRGVzY2VuZGFudHMgPSAxIDw8IDMsCiAg
ICAgICAgIERvbnRDb25zdHJhaW5Gb3JNYXNrID0gMSA8PCA0LAogICAgICAgICBJbmNsdWRlQ29t
cG9zaXRlZERlc2NlbmRhbnRzID0gMSA8PCA1LAotICAgICAgICBEZWZhdWx0Q2FsY3VsYXRlTGF5
ZXJCb3VuZHNGbGFncyA9ICBJbmNsdWRlU2VsZlRyYW5zZm9ybSB8IFVzZUxvY2FsQ2xpcFJlY3RJ
ZlBvc3NpYmxlIHwgSW5jbHVkZUxheWVyRmlsdGVyT3V0c2V0cworICAgICAgICBVc2VGcmFnbWVu
dEJveGVzID0gMSA8PCA2LAorICAgICAgICBEZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFn
cyA9ICBJbmNsdWRlU2VsZlRyYW5zZm9ybSB8IFVzZUxvY2FsQ2xpcFJlY3RJZlBvc3NpYmxlIHwg
SW5jbHVkZUxheWVyRmlsdGVyT3V0c2V0cyB8IFVzZUZyYWdtZW50Qm94ZXMKICAgICB9OwogICAg
IHR5cGVkZWYgdW5zaWduZWQgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFnczsKIAogICAgIC8vIEJv
dW5kaW5nIGJveCByZWxhdGl2ZSB0byBzb21lIGFuY2VzdG9yIGxheWVyLiBQYXNzIG9mZnNldEZy
b21Sb290IGlmIGtub3duLgotICAgIExheW91dFJlY3QgYm91bmRpbmdCb3goY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gMCkg
Y29uc3Q7CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveChjb25zdCBSZW5kZXJMYXllciogcm9v
dExheWVyLCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzID0gMCwgY29uc3QgTGF5b3V0UG9pbnQq
IG9mZnNldEZyb21Sb290ID0gMCkgY29uc3Q7CiAgICAgLy8gQm91bmRpbmcgYm94IGluIHRoZSBj
b29yZGluYXRlcyBvZiB0aGlzIGxheWVyLgogICAgIExheW91dFJlY3QgbG9jYWxCb3VuZGluZ0Jv
eChDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzID0gMCkgY29uc3Q7CiAgICAgLy8gUGl4ZWwgc25h
cHBlZCBib3VuZGluZyBib3ggcmVsYXRpdmUgdG8gdGhlIHJvb3QuCkBAIC03ODIsNiArODMyLDgg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRS
ZWFzb24oVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24gcmVhc29uKSB7IG1f
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24gPSByZWFzb247IH0KICAgICBW
aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiB2aWV3cG9ydENvbnN0cmFpbmVk
Tm90Q29tcG9zaXRlZFJlYXNvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFZpZXdwb3J0
Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uPihtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RD
b21wb3NpdGVkUmVhc29uKTsgfQogI2VuZGlmCisgICAgCisgICAgYm9vbCBpc091dE9mRmxvd1Jl
bmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5pc091dE9mRmxvd1Jl
bmRlckZsb3dUaHJlYWQoKTsgfQogCiBwcml2YXRlOgogICAgIGVudW0gQ29sbGVjdExheWVyc0Jl
aGF2aW9yIHsgU3RvcEF0U3RhY2tpbmdDb250ZXh0cywgU3RvcEF0U3RhY2tpbmdDb250YWluZXJz
IH07CkBAIC04OTIsNiArOTQ0LDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludFBhZ2luYXRl
ZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKICAgICB2b2lkIHBhaW50
Q2hpbGRMYXllckludG9Db2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgY29uc3Qg
VmVjdG9yPFJlbmRlckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90IGNvbHVtbkluZGV4KTsK
IAorICAgIHZvaWQgY29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNvbnN0IFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIFJlbmRlclJlZ2lvbiosIGNvbnN0IExheW91dFJlY3QmIGRpcnR5
UmVjdCwKKyAgICAgICAgQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxi
YXJTaXplLAorICAgICAgICBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92ZXJm
bG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gMCk7CisgICAgdm9p
ZCB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBM
YXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgYm9vbCBzaG91bGRQYWludENvbnRl
bnQsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCk7CisgICAgdm9pZCBwYWludEJh
Y2tncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRl
eHQqLCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICAgICAg
Y29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRy
YW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBSZW5k
ZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50Rm9yZWdy
b3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCos
IEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNw
YXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9i
amVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsCisgICAgICAgIGJvb2wgc2VsZWN0aW9uT25s
eSwgYm9vbCBmb3JjZUJsYWNrVGV4dCk7CisgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFn
bWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZSwgY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRl
ck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQgcGFpbnRPdXRsaW5l
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50
aW5nUm9vdEZvclJlbmRlcmVyKTsKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJik7CisgICAgdm9pZCBwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworICAgIHZvaWQgcGFp
bnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBM
YXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CisKICAgICBSZW5kZXJMYXllciog
aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWlu
ZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhp
dFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBib29sIGFwcGxpZWRUcmFuc2Zvcm0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGUqIHRyYW5zZm9ybVN0YXRlID0gMCwgZG91YmxlKiB6T2Zmc2V0ID0gMCk7CkBAIC05MTYs
NiArOTgzLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TGF5b3V0UG9pbnQmIHRyYW5zbGF0aW9uT2Zmc2V0ID0gTGF5b3V0UG9pbnQoKSkgY29uc3Q7CiAg
ICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdENvbnRlbnRz
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwg
Ym9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYpIGNv
bnN0OworICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRz
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKKyAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSogPSAwLCBkb3VibGUqIHpPZmZzZXQgPSAwKTsKIAogICAgIGJvb2wg
bGlzdENvbnRlbnRzT3BhcXVlSW5SZWN0KGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiwgY29u
c3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCkBAIC0xMTkwLDYgKzEyNjEsOSBAQCBwcm90ZWN0ZWQ6
CiAgICAgUmVuZGVyU2Nyb2xsYmFyUGFydCogbV9zY3JvbGxDb3JuZXI7CiAgICAgUmVuZGVyU2Ny
b2xsYmFyUGFydCogbV9yZXNpemVyOwogCisgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5n
IFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3
ZSBhcmUgbm90IHBhZ2luYXRlZC4KKyAgICBSZW5kZXJMYXllciogbV9lbmNsb3NpbmdQYWdpbmF0
aW9uTGF5ZXI7CisKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtbkJsb2NrLmNwcAkocmV2aXNpb24gMTQ0MjI3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDgsOCArMTA4LDYgQEAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZU11bAog
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsK
ICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwogICAgIG5ld1N0eWxlLT5z
ZXREaXNwbGF5KEJMT0NLKTsKLSAgICBuZXdTdHlsZS0+c2V0UG9zaXRpb24oUmVsYXRpdmVQb3Np
dGlvbik7Ci0gICAgbmV3U3R5bGUtPnNldFpJbmRleCgwKTsKICAgICBuZXdTdHlsZS0+Zm9udCgp
LnVwZGF0ZSgwKTsKICAgICByZXR1cm4gbmV3U3R5bGUucmVsZWFzZSgpOwogfQpAQCAtMTYyLDYg
KzE2MCwxNSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmVuc3VyZUNvbHVtCiAgICAg
Y29sdW1uU2V0LT5zZXRSZXF1aXJlc0JhbGFuY2luZyhyZXF1aXJlc0JhbGFuY2luZygpKTsKIH0K
IAordm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQpCit7CisgICAgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4sIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKKyAg
ICAKKyAgICAvLyBTaGlmdCB0aGUgZmxvdyB0aHJlYWQgYmFjayB1cCB0byB0aGUgdG9wIG9mIHRo
ZSBibG9jay4KKyAgICBpZiAoZmxvd1RocmVhZCgpKQorICAgICAgICBmbG93VGhyZWFkKCktPnNl
dExvZ2ljYWxUb3AoYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkpOworfQorCiBjb25z
dCBjaGFyKiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QKIHsKICAg
ICBpZiAoaXNGbG9hdGluZygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oCShyZXZpc2lvbiAxNDQyMjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1Miw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgT1ZF
UlJJREU7CisKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lk
dGgoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tGb3JQYWdpbmF0aW9uTG9naWNh
bEhlaWdodENoYW5nZShMYXlvdXRVbml0JiBwYWdlTG9naWNhbEhlaWdodCwgYm9vbCYgcGFnZUxv
Z2ljYWxIZWlnaHRDaGFuZ2VkLCBib29sJiBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHJlbGF5b3V0Rm9yUGFnaW5hdGlvbihib29sIGhh
c1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0
LCBMYXlvdXRTdGF0ZU1haW50YWluZXImKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgJKHJl
dmlzaW9uIDE0NDIyNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNiBAQCBwdWJsaWM6
CiAgICAgflJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCgpOwogCiBwcml2YXRlOgotICAgIHZp
cnR1YWwgYm9vbCBpc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiB0cnVlOyB9Ci0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlcyYpIGNvbnN0IE9WRVJSSURFOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAkocmV2aXNpb24gMTQ0
MjI3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU2V0LmgiCiAKLSNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkLmgiCiAKQEAgLTI0OSwxMCArMjQ5LDcgQEAgdm9pZCBSZW5kZXJN
dWx0aUNvbHVtblNldDo6cGFpbnRPYmplY3QoUAogICAgIGlmICghbV9mbG93VGhyZWFkIHx8ICFp
c1ZhbGlkKCkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBw
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwogICAgIHBhaW50Q29sdW1uUnVs
ZXMocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgcGFpbnRDb2x1bW5Db250ZW50cyhwYWlu
dEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICByZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5
bGUoKTsKIH0KIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdWxlcyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAt
MzA5LDc2ICszMDYsNiBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1
CiAgICAgfQogfQogCi12b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtbkNvbnRl
bnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
Ci17Ci0gICAgLy8gRm9yIGVhY2ggcmVjdGFuZ2xlLCBzZXQgaXQgYXMgdGhlIHJlZ2lvbiByZWN0
YW5nbGUgYW5kIHRoZW4gbGV0IGZsb3cgdGhyZWFkIHBhaW50aW5nIGRvIHRoZSByZXN0LgotICAg
IC8vIFdlIG1ha2UgbXVsdGlwbGUgY2FsbHMgdG8gcGFpbnRGbG93VGhyZWFkUG9ydGlvbkluUmVn
aW9uLCBjaGFuZ2luZyB0aGUgcmVjdGFuZ2xlcyBlYWNoIHRpbWUuCi0gICAgdW5zaWduZWQgY29s
Q291bnQgPSBjb2x1bW5Db3VudCgpOwotICAgIGlmICghY29sQ291bnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIExheW91dFVuaXQgY29sR2FwID0gY29sdW1uR2FwKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgZ2V0
IHRoZSBjb2x1bW4gcmVjdCwgd2hpY2ggaXMgaW4gb3VyIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2Us
IGFuZCB3ZSBtYWtlIGl0IHBoeXNpY2FsIGFuZCBhcHBseQotICAgICAgICAvLyB0aGUgcGFpbnQg
b2Zmc2V0IHRvIGl0LiBUaGF0IGdpdmVzIHVzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiB0aGF0IHdl
IHdhbnQgdG8gcGFpbnQgdGhlIGNvbHVtbiBhdC4KLSAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0
ID0gY29sdW1uUmVjdEF0KGkpOwotICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUoY29sUmVjdCk7
Ci0gICAgICAgIGNvbFJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICAgICAgCi0gICAgICAg
IC8vIE5leHQgd2UgZ2V0IHRoZSBwb3J0aW9uIG9mIHRoZSBmbG93IHRocmVhZCB0aGF0IGNvcnJl
c3BvbmRzIHRvIHRoaXMgY29sdW1uLgotICAgICAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0
aW9uID0gZmxvd1RocmVhZFBvcnRpb25SZWN0QXQoaSk7Ci0gICAgICAgIAotICAgICAgICAvLyBO
b3cgZ2V0IHRoZSBvdmVyZmxvdyByZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGNvbHVtbi4K
LSAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uID0gZmxvd1RocmVh
ZFBvcnRpb25PdmVyZmxvd1JlY3QoZmxvd1RocmVhZFBvcnRpb24sIGksIGNvbENvdW50LCBjb2xH
YXApOwotCi0gICAgICAgIC8vIERvIHRoZSBwYWludCB3aXRoIHRoZSBjb21wdXRlZCByZWN0cy4K
LSAgICAgICAgZmxvd1RocmVhZCgpLT5wYWludEZsb3dUaHJlYWRQb3J0aW9uSW5SZWdpb24ocGFp
bnRJbmZvLCB0aGlzLCBmbG93VGhyZWFkUG9ydGlvbiwgZmxvd1RocmVhZE92ZXJmbG93UG9ydGlv
biwgY29sUmVjdC5sb2NhdGlvbigpKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTXVsdGlDb2x1
bW5TZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFj
dGlvbikKLXsKLSAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRP
ZmZzZXQgKyBsb2NhdGlvbigpOwotCi0gICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3Ig
dGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhl
Ci0gICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxl
bWVudHMgbGlrZSBpbWFnZXMpLgotICAgIC8vIEZJWE1FOiBPbmNlIHdlIHN1cHBvcnQgb3ZlcmZs
b3csIHdlIG5lZWQgdG8gaW50ZXJzZWN0IHdpdGggdGhhdCBhbmQgbm90IHdpdGggdGhlIGJvdW5k
cyByZWN0LgotICAgIExheW91dFJlY3QgYm91bmRzUmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lv
bihsb2NhdGlvbkluQ29udGFpbmVyLnJlZ2lvbigpKTsKLSAgICBib3VuZHNSZWN0Lm1vdmVCeShh
ZGp1c3RlZExvY2F0aW9uKTsKLSAgICBpZiAoIXZpc2libGVUb0hpdFRlc3RpbmcoKSB8fCBhY3Rp
b24gIT0gSGl0VGVzdEZvcmVncm91bmQgfHwgIWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0
cyhib3VuZHNSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIFRoZSBw
b2ludCBpcyBpbiBvbmUgc3BlY2lmaWMgY29sdW1uLiBTaW5jZSBjb2x1bW5zIGNhbid0IG92ZXJs
YXAsIHdlIGRvbid0IGV2ZXIgaGF2ZSB0byB0ZXN0Ci0gICAgLy8gbXVsdGlwbGUgY29sdW1ucy4g
UHV0IHRoZSAKLSAgICAKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byBqdW1wIHJp
Z2h0IHRvIHRoZSBzcGVjaWZpYyBjb2x1bW4gYnkganVzdCBkb2luZyBtYXRoIG9uIHRoZSBwb2lu
dC4gU2luY2UgY29sdW1ucwotICAgIC8vIGNhbid0IG92ZXJsYXAsIHdlIHNob3VsZG4ndCBoYXZl
IHRvIHdhbGsgZXZlcnkgY29sdW1uIGxpa2UgdGhpcy4gVGhlIG9sZCBjb2x1bW4gY29kZSB3YWxr
ZWQgYWxsIHRoZSBjb2x1bW5zLCB0aG91Z2gsCi0gICAgLy8gc28gdGhpcyBpcyBubyB3b3JzZS4g
V2UnZCBoYXZlIHRvIHdhdGNoIG91dCBmb3IgcmVjdC1iYXNlZCBoaXQgdGVzdGluZywgdGhvdWdo
LCB3aGljaCBhY3R1YWxseSBjb3VsZCBvdmVybGFwCi0gICAgLy8gbXVsdGlwbGUgY29sdW1ucy4K
LSAgICBMYXlvdXRVbml0IGNvbEdhcCA9IGNvbHVtbkdhcCgpOwotICAgIHVuc2lnbmVkIGNvbENv
dW50ID0gY29sdW1uQ291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291
bnQ7IGkrKykgewotICAgICAgICAvLyBGaXJzdCB3ZSBnZXQgdGhlIGNvbHVtbiByZWN0LCB3aGlj
aCBpcyBpbiBvdXIgbG9jYWwgY29vcmRpbmF0ZSBzcGFjZSwgYW5kIHdlIG1ha2UgaXQgcGh5c2lj
YWwgYW5kIGFwcGx5Ci0gICAgICAgIC8vIHRoZSBoaXQgdGVzdCBvZmZzZXQgdG8gaXQuIFRoYXQg
Z2l2ZXMgdXMgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIHRoYXQgd2Ugd2FudCB0byBwYWludCB0aGUg
Y29sdW1uIGF0LgotICAgICAgICBMYXlvdXRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoaSk7
Ci0gICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShjb2xSZWN0KTsKLSAgICAgICAgY29sUmVjdC5t
b3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgICAgIAotICAgICAgICAvLyBOZXh0IHdlIGdl
dCB0aGUgcG9ydGlvbiBvZiB0aGUgZmxvdyB0aHJlYWQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlz
IGNvbHVtbi4KLSAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvbiA9IGZsb3dUaHJl
YWRQb3J0aW9uUmVjdEF0KGkpOwotICAgICAgICAKLSAgICAgICAgLy8gTm93IGdldCB0aGUgb3Zl
cmZsb3cgcmVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjb2x1bW4uCi0gICAgICAgIExheW91
dFJlY3QgZmxvd1RocmVhZE92ZXJmbG93UG9ydGlvbiA9IGZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZs
b3dSZWN0KGZsb3dUaHJlYWRQb3J0aW9uLCBpLCBjb2xDb3VudCwgY29sR2FwKTsKLQotICAgICAg
ICAvLyBEbyB0aGUgaGl0IHRlc3Qgd2l0aCB0aGUgY29tcHV0ZWQgcmVjdHMuCi0gICAgICAgIGlm
IChmbG93VGhyZWFkKCktPmhpdFRlc3RGbG93VGhyZWFkUG9ydGlvbkluUmVnaW9uKHRoaXMsIGZs
b3dUaHJlYWRQb3J0aW9uLCBmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uLCByZXF1ZXN0LCByZXN1
bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbFJlY3QubG9jYXRpb24oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExv
Y2F0aW9uKSk7Ci0gICAgcmV0dXJuICFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3Vs
dChub2RlKCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpOwotfQot
CiB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpyZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29u
c3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlKSBjb25zdAogewogICAg
IC8vIEZpZ3VyZSBvdXQgdGhlIHN0YXJ0IGFuZCBlbmQgY29sdW1ucyBhbmQgb25seSBjaGVjayB3
aXRoaW4gdGhhdCByYW5nZSBzbyB0aGF0IHdlIGRvbid0IHdhbGsgdGhlCkBAIC00MTcsNiArMzQ0
LDg4IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnJlcGFpbnRGbG93VGgKICAgICB9CiB9
CiAKK3ZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmNvbGxlY3RMYXllckZyYWdtZW50cyhWZWN0
b3I8TGF5ZXJGcmFnbWVudD4mIGZyYWdtZW50cywgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3Vu
ZGluZ0JveCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQoreworICAgIC8vIFB1dCB0aGUg
bGF5ZXIgYm91bmRzIGludG8gZmxvdyB0aHJlYWQtbG9jYWwgY29vcmRpbmF0ZXMgYnkgZmxpcHBp
bmcgaXQgZmlyc3QuCisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc0luRmxvd1RocmVhZChsYXll
ckJvdW5kaW5nQm94KTsKKyAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZShsYXll
ckJvdW5kc0luRmxvd1RocmVhZCk7CisKKyAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdGhlIGRpcnR5
IHJlY3QuCisgICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQoZGlydHlSZWN0KTsK
KyAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZShkaXJ0eVJlY3RJbkZsb3dUaHJl
YWQpOworCisgICAgLy8gTm93IHdlIGNhbiBjb21wYXJlIHdpdGggdGhlIGZsb3cgdGhyZWFkIHBv
cnRpb25zIG93bmVkIGJ5IGVhY2ggY29sdW1uLiBGaXJzdCBsZXQncworICAgIC8vIHNlZSBpZiB0
aGUgcmVjdCBpbnRlcnNlY3RzIG91ciBmbG93IHRocmVhZCBwb3J0aW9uIGF0IGFsbC4KKyAgICBM
YXlvdXRSZWN0IGNsaXBwZWRSZWN0KGxheWVyQm91bmRzSW5GbG93VGhyZWFkKTsKKyAgICBjbGlw
cGVkUmVjdC5pbnRlcnNlY3QoUmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93
UmVjdCgpKTsKKyAgICBpZiAoY2xpcHBlZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gTm93IHdlIGtub3cgd2UgaW50ZXJzZWN0IGF0IGxlYXN0IG9uZSBjb2x1
bW4uIExldCdzIGZpZ3VyZSBvdXQgdGhlIGxvZ2ljYWwgdG9wIGFuZCBsb2dpY2FsCisgICAgLy8g
Ym90dG9tIG9mIHRoZSBhcmVhIHdlJ3JlIGNoZWNraW5nLgorICAgIExheW91dFVuaXQgbGF5ZXJM
b2dpY2FsVG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxheWVyQm91bmRzSW5GbG93
VGhyZWFkLnkoKSA6IGxheWVyQm91bmRzSW5GbG93VGhyZWFkLngoKTsKKyAgICBMYXlvdXRVbml0
IGxheWVyTG9naWNhbEJvdHRvbSA9IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbGF5ZXJC
b3VuZHNJbkZsb3dUaHJlYWQubWF4WSgpIDogbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQubWF4WCgp
KSAtIDE7CisgICAgCisgICAgLy8gRmlndXJlIG91dCB0aGUgc3RhcnQgYW5kIGVuZCBjb2x1bW5z
IGFuZCBvbmx5IGNoZWNrIHdpdGhpbiB0aGF0IHJhbmdlIHNvIHRoYXQgd2UgZG9uJ3Qgd2FsayB0
aGUKKyAgICAvLyBlbnRpcmUgY29sdW1uIHNldC4KKyAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9
IGNvbHVtbkluZGV4QXRPZmZzZXQobGF5ZXJMb2dpY2FsVG9wKTsKKyAgICB1bnNpZ25lZCBlbmRD
b2x1bW4gPSBjb2x1bW5JbmRleEF0T2Zmc2V0KGxheWVyTG9naWNhbEJvdHRvbSk7CisgICAgCisg
ICAgTGF5b3V0VW5pdCBjb2xMb2dpY2FsV2lkdGggPSBjb21wdXRlZENvbHVtbldpZHRoKCk7Cisg
ICAgTGF5b3V0VW5pdCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3Vu
dCA9IGNvbHVtbkNvdW50KCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRDb2x1
bW47IGkgPD0gZW5kQ29sdW1uOyBpKyspIHsKKyAgICAgICAgLy8gR2V0IHRoZSBwb3J0aW9uIG9m
IHRoZSBmbG93IHRocmVhZCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgY29sdW1uLgorICAgICAg
ICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9uID0gZmxvd1RocmVhZFBvcnRpb25SZWN0QXQo
aSk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgZ2V0IHRoZSBvdmVyZmxvdyByZWN0IHRoYXQg
Y29ycmVzcG9uZHMgdG8gdGhlIGNvbHVtbi4KKyAgICAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFk
T3ZlcmZsb3dQb3J0aW9uID0gZmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoZmxvd1RocmVh
ZFBvcnRpb24sIGksIGNvbENvdW50LCBjb2xHYXApOworCisgICAgICAgIC8vIEluIG9yZGVyIHRv
IGNyZWF0ZSBhIGZyYWdtZW50IHdlIG11c3QgaW50ZXJzZWN0IHRoZSBwb3J0aW9uIHBhaW50ZWQg
YnkgdGhpcyBjb2x1bW4uCisgICAgICAgIExheW91dFJlY3QgY2xpcHBlZFJlY3QobGF5ZXJCb3Vu
ZHNJbkZsb3dUaHJlYWQpOworICAgICAgICBjbGlwcGVkUmVjdC5pbnRlcnNlY3QoZmxvd1RocmVh
ZE92ZXJmbG93UG9ydGlvbik7CisgICAgICAgIGlmIChjbGlwcGVkUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGFsc28gbmVlZCB0
byBpbnRlcnNlY3QgdGhlIGRpcnR5IHJlY3QuIFdlIGhhdmUgdG8gYXBwbHkgYSB0cmFuc2xhdGlv
biBhbmQgc2hpZnQgYmFzZWQgb2ZmCisgICAgICAgIC8vIG91ciBjb2x1bW4gaW5kZXguCisgICAg
ICAgIExheW91dFBvaW50IHRyYW5zbGF0aW9uT2Zmc2V0OworICAgICAgICBMYXlvdXRVbml0IGlu
bGluZU9mZnNldCA9IGkgKiAoY29sTG9naWNhbFdpZHRoICsgY29sR2FwKTsKKyAgICAgICAgaWYg
KCFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgICAgICBpbmxpbmVP
ZmZzZXQgPSAtaW5saW5lT2Zmc2V0OworICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5zZXRYKGlu
bGluZU9mZnNldCk7CisgICAgICAgIExheW91dFVuaXQgYmxvY2tPZmZzZXQgPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gLWZsb3dUaHJlYWRQb3J0aW9uLnkoKSA6IC1mbG93VGhyZWFkUG9y
dGlvbi54KCk7CisgICAgICAgIGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZShzdHlsZSgp
LT53cml0aW5nTW9kZSgpKSkKKyAgICAgICAgICAgIGJsb2NrT2Zmc2V0ID0gLWJsb2NrT2Zmc2V0
OworICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5zZXRZKGJsb2NrT2Zmc2V0KTsKKyAgICAgICAg
aWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAgdHJhbnNsYXRpb25P
ZmZzZXQgPSB0cmFuc2xhdGlvbk9mZnNldC50cmFuc3Bvc2VkUG9pbnQoKTsKKyAgICAgICAgLy8g
RklYTUU6IFRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBpbmNsdWRlIHRoZSBtdWx0aWNvbHVtbiBz
ZXQncyBjb250ZW50IG9mZnNldCB3aXRoaW4gdGhlCisgICAgICAgIC8vIG11bHRpY29sdW1uIGJs
b2NrIGFzIHdlbGwuIFRoaXMgd29uJ3QgYmUgYW4gaXNzdWUgdW50aWwgd2Ugc3RhcnQgY3JlYXRp
bmcgbXVsdGlwbGUgbXVsdGljb2x1bW4gc2V0cy4KKworICAgICAgICAvLyBTaGlmdCB0aGUgZGly
dHkgcmVjdCB0byBiZSBpbiBmbG93IHRocmVhZCBjb29yZGluYXRlcyB3aXRoIHRoaXMgdHJhbnNs
YXRpb24gYXBwbGllZC4KKyAgICAgICAgTGF5b3V0UmVjdCB0cmFuc2xhdGVkRGlydHlSZWN0KGRp
cnR5UmVjdEluRmxvd1RocmVhZCk7CisgICAgICAgIHRyYW5zbGF0ZWREaXJ0eVJlY3QubW92ZUJ5
KC10cmFuc2xhdGlvbk9mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBTZWUgaWYgd2UgaW50
ZXJzZWN0IHRoZSBkaXJ0eSByZWN0LgorICAgICAgICBjbGlwcGVkUmVjdCA9IGxheWVyQm91bmRz
SW5GbG93VGhyZWFkOworICAgICAgICBjbGlwcGVkUmVjdC5pbnRlcnNlY3QodHJhbnNsYXRlZERp
cnR5UmVjdCk7CisgICAgICAgIGlmIChjbGlwcGVkUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbWV0aGluZyBkb2VzIG5lZWQgdG8g
cGFpbnQgaW4gdGhpcyBjb2x1bW4uIE1ha2UgYSBmcmFnbWVudCBub3cgYW5kIHN1cHBseSB0aGUg
cGh5c2ljYWwgdHJhbnNsYXRpb24KKyAgICAgICAgLy8gb2Zmc2V0IGFuZCB0aGUgY2xpcCByZWN0
IGZvciB0aGUgY29sdW1uIHdpdGggdGhhdCBvZmZzZXQgYXBwbGllZC4KKyAgICAgICAgTGF5ZXJG
cmFnbWVudCBmcmFnbWVudDsKKyAgICAgICAgZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCA9IHRy
YW5zbGF0aW9uT2Zmc2V0OworICAgICAgICAKKyAgICAgICAgTGF5b3V0UmVjdCBmbGlwcGVkRmxv
d1RocmVhZE92ZXJmbG93UG9ydGlvbihmbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uKTsKKyAgICAg
ICAgZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRGbG93VGhyZWFkT3ZlcmZsb3dQb3J0aW9uKTsK
KyAgICAgICAgZnJhZ21lbnQucGFnaW5hdGlvbkNsaXAgPSBmbGlwcGVkRmxvd1RocmVhZE92ZXJm
bG93UG9ydGlvbjsKKyAgICAgICAgZnJhZ21lbnRzLmFwcGVuZChmcmFnbWVudCk7CisgICAgfQor
fQorCiBjb25zdCBjaGFyKiBSZW5kZXJNdWx0aUNvbHVtblNldDo6cmVuZGVyTmFtZSgpIGNvbnN0
CiB7ICAgIAogICAgIHJldHVybiAiUmVuZGVyTXVsdGlDb2x1bW5TZXQiOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmgJKHJldmlzaW9u
IDE0NDIyNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdCBP
VkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dp
Y2FsV2lkdGgoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2NvbXB1dGVkQ29sdW1uV2lkdGg7
IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX2NvbXB1dGVkQ29sdW1uSGVpZ2h0OyB9CkBAIC0xMTEsMTAgKzExMCwx
MSBAQCBwcml2YXRlOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rmxvd1RocmVhZENv
bnRlbnQoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlKSBjb25z
dCBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVudHMoVmVj
dG9yPExheWVyRnJhZ21lbnQ+JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCwg
Y29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogICAgIAogICAgIHZvaWQgcGFpbnRDb2x1bW5S
dWxlcyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwotICAgIHZv
aWQgcGFpbnRDb2x1bW5Db250ZW50cyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpOwogCiAgICAgTGF5b3V0VW5pdCBjb2x1bW5HYXAoKSBjb25zdDsKICAgICBMYXlv
dXRSZWN0IGNvbHVtblJlY3RBdCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ0MjI3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzMTcsNyArMjMxNyw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Ojpjb250YWlu
ZXIoY28KICNlbmRpZgogICAgICAgICAgICAgLy8gVGhlIHJlbmRlciBmbG93IHRocmVhZCBpcyB0
aGUgdG9wIG1vc3QgY29udGFpbmluZyBibG9jawogICAgICAgICAgICAgLy8gZm9yIHRoZSBmaXhl
ZCBwb3NpdGlvbmVkIGVsZW1lbnRzLgotICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyRmxvd1Ro
cmVhZCgpKQorICAgICAgICAgICAgaWYgKG8tPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBpZiAocmVwYWludENvbnRh
aW5lclNraXBwZWQgJiYgbyA9PSByZXBhaW50Q29udGFpbmVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTQ0MjI3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODEsNyAr
MzgxLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyRmxvd1RocmVhZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyTmFtZWRG
bG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJ
bkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGlzUmVuZGVyRmxvd1Ro
cmVhZCgpICYmICFpc091dE9mRmxvd1Bvc2l0aW9uZWQoKTsgfQorICAgIGJvb2wgaXNPdXRPZkZs
b3dSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gaXNSZW5kZXJGbG93VGhyZWFkKCkg
JiYgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRl
ck11bHRpQ29sdW1uQmxvY2soKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1JlbmRlck11bHRpQ29sdW1uU2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAg
LTczMiw3ICs3MzMsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgICAgICAg
ICB8fCBpc1NWR0ZvcmVpZ25PYmplY3QoKQogI2VuZGlmCi0gICAgICAgICAgICAgICAgfHwgaXNS
ZW5kZXJGbG93VGhyZWFkKCk7CisgICAgICAgICAgICAgICAgfHwgaXNPdXRPZkZsb3dSZW5kZXJG
bG93VGhyZWFkKCk7CiAgICAgfQogCiAgICAgLy8gQ29udmVydCB0aGUgZ2l2ZW4gbG9jYWwgcG9p
bnQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmgJKHJldmlzaW9uIDE0NDIyNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZWdpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBMYXllckZyYWdtZW50OwogY2xhc3MgUmVuZGVy
Qm94OwogY2xhc3MgUmVuZGVyQm94UmVnaW9uSW5mbzsKIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7
CkBAIC0xMjcsNiArMTI4LDggQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCByZXBh
aW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wg
aW1tZWRpYXRlKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVu
dHMoVmVjdG9yPExheWVyRnJhZ21lbnQ+JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IExheW91
dFJlY3QmKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0UmVnaW9uT2JqZWN0c1JlZ2lv
blN0eWxlKCk7CiAgICAgdm9pZCByZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKTsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE0NDIyNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTAyLTI2ICBEYXZpZCBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbTmV3IE11bHRpY29sdW1uXSBSZXdyaXRlIHRoZSBw
YWludGluZy9zdGFja2luZyBtb2RlbCB0byBiZSBzcGVjIGNvbXBsaWFudC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDYyNC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvbXVsdGljb2wvbWl4
ZWQtcG9zaXRpb25pbmctc3RhY2tpbmctb3JkZXItZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9tdWx0aWNvbC9taXhlZC1wb3NpdGlvbmluZy1zdGFja2luZy1vcmRlci5odG1s
OiBBZGRlZC4KKwogMjAxMy0wMi0yNyAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBwbHVnaW5zL25ldHNjYXBlLXBsdWdpbi1zZXR3aW5kb3ctc2l6ZSou
aHRtbCBhbmQgcGx1Z2lucy9wYXNzLWRpZmZlcmVudC1ucHAtc3RydWN0Lmh0bWwgc2hvdWxkIGJl
IGFzeW5jCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21peGVkLXBvc2l0aW9uaW5n
LXN0YWNraW5nLW9yZGVyLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9tdWx0aWNvbC9taXhlZC1wb3NpdGlvbmluZy1zdGFja2luZy1vcmRlci1leHBlY3RlZC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9taXhlZC1wb3Np
dGlvbmluZy1zdGFja2luZy1vcmRlci1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDggQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8ZGl2IHN0eWxlPSJoZWlnaHQ6MjAw
cHg7Ym9yZGVyOjVweCBzb2xpZCBibGFjaztwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoyMTBweCI+
Cis8ZGl2IHN0eWxlPSJ3aWR0aDoyMTBweDtoZWlnaHQ6MjAwcHg7YmFja2dyb3VuZC1jb2xvcjpw
dXJwbGU7Ij4zPC9kaXY+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5k
LWNvbG9yOmdvbGQ7bGVmdDo1NXB4O3RvcDowcHg7aGVpZ2h0OjIwMHB4O3dpZHRoOjEwMHB4Ij4y
PC9kaXY+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOmxp
Z2h0Ymx1ZTt3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7bGVmdDowO2JvdHRvbTowIj4xPC9kaXY+
Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOmxpZ2h0Ymx1
ZTt3aWR0aDoxMDBweDtsZWZ0OjExMHB4O3RvcDowO2hlaWdodDoxMDBweCI+PC9kaXY+Cis8L2Rp
dj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbWl4ZWQtcG9zaXRpb25pbmctc3Rh
Y2tpbmctb3JkZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29s
L21peGVkLXBvc2l0aW9uaW5nLXN0YWNraW5nLW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21peGVkLXBvc2l0aW9uaW5nLXN0YWNraW5nLW9yZGVy
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpbnRlcm5hbHMuc2V0dGluZ3Muc2V0UmVnaW9uQmFzZWRD
b2x1bW5zRW5hYmxlZCh0cnVlKQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgc3R5
bGU9Ii1tb3otY29sdW1uLXdpZHRoOjEwMHB4OyB3aWR0aDoyMTBweDsgaGVpZ2h0OjIwMHB4O2Jv
cmRlcjo1cHggc29saWQgYmxhY2s7IC13ZWJraXQtY29sdW1uLXdpZHRoOjEwMHB4Oy13ZWJraXQt
Y29sdW1uLWdhcDoxMHB4OyAtbW96LWNvbHVtbi1nYXA6MTBweCI+CisKKzxkaXYgc3R5bGU9InBv
c2l0aW9uOnJlbGF0aXZlOyI+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDts
ZWZ0OjA7IGhlaWdodDo0MDBweDsgd2lkdGg6MTAwcHgiPgorPGRpdiBzdHlsZT0id2lkdGg6MTAw
cHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtY29sb3I6cHVycGxlOyI+MzwvZGl2PgorPGRpdiBz
dHlsZT0iaGVpZ2h0OjIwMHB4Ij48L2Rpdj4KKzxkaXYgc3R5bGU9IndpZHRoOjEwMHB4O2hlaWdo
dDoxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOnB1cnBsZTsiPjM8L2Rpdj4KKzwvZGl2PgorPGRpdiBz
dHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHotaW5kZXg6MTsgYmFja2dyb3VuZC1jb2xvcjpsaWdo
dGJsdWU7IHdpZHRoOjEwMCU7IGhlaWdodDoyMDBweDsgdG9wOjEwMHB4Ij4xPC9kaXY+CisKKzxk
aXYgc3R5bGU9InBvc2l0aW9uOmZpeGVkO2JhY2tncm91bmQtY29sb3I6Z29sZDtsZWZ0OjY4cHg7
dG9wOjEzcHg7aGVpZ2h0OjIwMHB4O3dpZHRoOjEwMHB4Ij4yPC9kaXY+Cis8L2Rpdj4KKzwvZGl2
Pgo=
</data>
<flag name="review"
          id="211314"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>