<?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>33750</bug_id>
          
          <creation_ts>2010-01-15 16:55:39 -0800</creation_ts>
          <short_desc>Add back an AffineTransform class for use by SVG</short_desc>
          <delta_ts>2010-02-08 14:15:57 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>krit</cc>
    
    <cc>mitz</cc>
    
    <cc>oliver</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>181436</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-01-15 16:55:39 -0800</bug_when>
    <thetext>SVG does not need the full generality of the TransformationMatrix class and could benefit from the AffineTransform class being added back and being used by SVG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181439</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-01-15 16:59:25 -0800</bug_when>
    <thetext>Do you have any performance data to show that TransformationMatrix is an issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181445</commentid>
    <comment_count>2</comment_count>
      <attachid>46721</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-01-15 17:32:04 -0800</bug_when>
    <thetext>Created attachment 46721
Stress test

We came to this conclusion looking at the attached stress test with 50,000 rects.  It seems every RenderPath has at least one TransformationMatrix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181607</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-01-17 09:26:23 -0800</bug_when>
    <thetext>It is planned to introduce 3D transformations to SVG 2.0 (http://www.w3.org/TR/2009/WD-SVG-Transforms-20090320/). Even if we concentrate on SVG 1.1 at the moment, we might want to implement it later. Thus we should let TransformationMatrix in and try to optimize the use of it. olliej did allready a great step forward with bug 33766 and bug 30055.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186122</commentid>
    <comment_count>4</comment_count>
      <attachid>47771</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-01-30 11:37:58 -0800</bug_when>
    <thetext>Created attachment 47771
reimplementation of AffineTransformation

After a discussion on IRC, all agreed to reimplement AffineTransform in a platform independent way. This is the first and implements AffineTransform and let Canvas make use of it. Next patches will introduce AffineTransform to SVG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186123</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-30 11:42:56 -0800</bug_when>
    <thetext>Attachment 47771 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
bCore/platform/graphics/transforms/AffineTransform.cpp:74:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/transforms/AffineTransform.cpp:75:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/transforms/AffineTransform.cpp:76:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/transforms/AffineTransform.cpp:119:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:120:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:130:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:136:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/qt/TransformationMatrixQt.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cg/TransformationMatrixCG.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/html/canvas/CanvasRenderingContext2D.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/wx/TransformationMatrixWx.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/html/canvas/CanvasRenderingContext2D.cpp:369:  Missing spaces around /  [whitespace/operators] [3]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:26:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:50:  cairo_matrix_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:54:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/graphics/transforms/AffineTransform.h:30:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/platform/graphics/transforms/AffineTransform.h:126:  Missing spaces around *=  [whitespace/operators] [3]
WebCore/platform/graphics/transforms/AffineTransform.h:143:  cairo_matrix_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 27


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186124</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-30 12:01:04 -0800</bug_when>
    <thetext>Attachment 47771 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/222034</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186212</commentid>
    <comment_count>7</comment_count>
      <attachid>47795</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-01-31 11:27:05 -0800</bug_when>
    <thetext>Created attachment 47795
reimplementation of AffineTransformation

build fix and some fixes of the style issues mentioned by the bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186213</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-31 11:31:32 -0800</bug_when>
    <thetext>Attachment 47795 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
ontextSkia.cpp:821:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:822:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:823:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/skia/TransformationMatrixSkia.cpp:31:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/PathCairo.cpp:333:  c_matrix is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/transforms/AffineTransform.cpp:118:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:119:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:129:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:135:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/qt/TransformationMatrixQt.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cg/TransformationMatrixCG.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/wx/TransformationMatrixWx.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:26:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:50:  cairo_matrix_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:54:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/graphics/transforms/AffineTransform.h:130:  Missing spaces around *=  [whitespace/operators] [3]
WebCore/platform/graphics/transforms/AffineTransform.h:147:  cairo_matrix_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 19


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186215</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-31 11:38:52 -0800</bug_when>
    <thetext>Attachment 47795 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/223435</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186218</commentid>
    <comment_count>10</comment_count>
      <attachid>47797</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-01-31 11:52:34 -0800</bug_when>
    <thetext>Created attachment 47797
reimplementation of AffineTransformation

grrr... typo in GraphicsContextSkia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186219</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-31 12:01:06 -0800</bug_when>
    <thetext>Attachment 47797 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
ontextSkia.cpp:821:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:822:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:823:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/skia/TransformationMatrixSkia.cpp:31:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/PathCairo.cpp:333:  c_matrix is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/transforms/AffineTransform.cpp:118:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:119:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:129:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:135:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/qt/TransformationMatrixQt.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cg/TransformationMatrixCG.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/wx/TransformationMatrixWx.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:26:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:50:  cairo_matrix_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:54:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/graphics/transforms/AffineTransform.h:130:  Missing spaces around *=  [whitespace/operators] [3]
WebCore/platform/graphics/transforms/AffineTransform.h:147:  cairo_matrix_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 19


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186222</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-01-31 12:41:51 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Attachment 47797 [details] did not pass style-queue:

I won&apos;t fix the mentioned style issues with the following reasons:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; Last 3072 characters of output:
&gt; ontextSkia.cpp:821:  One space before end of line comments 
&gt; [whitespace/comments] [5]
&gt; WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:822:  One space before
&gt; end of line comments  [whitespace/comments] [5]
&gt; WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:823:  One space before
&gt; end of line comments  [whitespace/comments] [5]
Looks like a style decission of the chromium guys and it makes sense here for a better code reading.

&gt; WebCore/platform/graphics/skia/TransformationMatrixSkia.cpp:31:  Found other
&gt; header before a header this file implements. Should be: config.h, primary
&gt; header, blank line, and then alphabetically sorted.  [build/include_order] [4]
AffineTransform is also a primary header. The names of TransformationMatrix*.cpp might change to AffineTransform*.cpp later.

&gt; WebCore/platform/graphics/cairo/PathCairo.cpp:333:  c_matrix is incorrectly
&gt; named. Don&apos;t use underscores in your identifier names.  [readability/naming]
Gtk port uses underscores for variables.

&gt; [4]
&gt; WebCore/platform/graphics/transforms/AffineTransform.cpp:118:  Tests for
&gt; true/false, null/non-null, and zero/non-zero should all be done without
&gt; equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/platform/graphics/transforms/AffineTransform.cpp:119:  Tests for
&gt; true/false, null/non-null, and zero/non-zero should all be done without
&gt; equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/platform/graphics/transforms/AffineTransform.cpp:129:  Tests for
&gt; true/false, null/non-null, and zero/non-zero should all be done without
&gt; equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/platform/graphics/transforms/AffineTransform.cpp:135:  Tests for
&gt; true/false, null/non-null, and zero/non-zero should all be done without
&gt; equality comparisons.  [readability/comparison_to_zero] [5]
It&apos;s necessary to check for 0 here, since values are allowed to be negative.

&gt; WebCore/platform/graphics/qt/TransformationMatrixQt.cpp:27:  Found other header
&gt; before a header this file implements. Should be: config.h, primary header,
&gt; blank line, and then alphabetically sorted.  [build/include_order] [4]
see above

&gt; WebCore/platform/graphics/cg/TransformationMatrixCG.cpp:27:  Found other header
&gt; before a header this file implements. Should be: config.h, primary header,
&gt; blank line, and then alphabetically sorted.  [build/include_order] [4]
see above

&gt; WebCore/platform/graphics/wx/TransformationMatrixWx.cpp:27:  Found other header
&gt; before a header this file implements. Should be: config.h, primary header,
&gt; blank line, and then alphabetically sorted.  [build/include_order] [4]
see above

&gt; WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:26:  Found other
&gt; header before a header this file implements. Should be: config.h, primary
&gt; header, blank line, and then alphabetically sorted.  [build/include_order] [4]
see above

&gt; WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:50: 
&gt; cairo_matrix_t is incorrectly named. Don&apos;t use underscores in your identifier
&gt; names.  [readability/naming] [4]
Style guide of the gtk port.

&gt; WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:54:  Extra space
&gt; before ( in function call  [whitespace/parens] [4]
Style decission of the gtk port.

&gt; WebCore/platform/graphics/transforms/AffineTransform.h:130:  Missing spaces
&gt; around *=  [whitespace/operators] [3]
Found it that way in all other headers for operator like FloatPoint, Size, Rect as well as TransformationMatrix and others. Maybe also a false positive?

&gt; WebCore/platform/graphics/transforms/AffineTransform.h:147:  cairo_matrix_t is
&gt; incorrectly named. Don&apos;t use underscores in your identifier names. 
&gt; [readability/naming] [4]
see above

&gt; Total errors found: 19
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186228</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-31 13:52:13 -0800</bug_when>
    <thetext>&gt; Looks like a style decission of the chromium guys and it makes sense here for a
&gt; better code reading.

I can&apos;t speak to the other issues, but the chromium port is intended to be 100% in compliance with the WebKit style guide.  Any deviations are errors and should be corrected as convenient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186234</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-01-31 14:19:48 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Looks like a style decission of the chromium guys and it makes sense here for a
&gt; &gt; better code reading.
&gt; 
&gt; I can&apos;t speak to the other issues, but the chromium port is intended to be 100%
&gt; in compliance with the WebKit style guide.  Any deviations are errors and
&gt; should be corrected as convenient.

Did you take a look at the affected code part? I have no problem to fix it with an upcomming patch, but it makes more sense to have more spaces here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186236</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-31 14:30:30 -0800</bug_when>
    <thetext>&gt; Did you take a look at the affected code part? I have no problem to fix it with
&gt; an upcomming patch, but it makes more sense to have more spaces here.

Situations like that are actually called out specifically in the Google Style Guide (which agrees with the WebKit Style Guide on this point).

I don&apos;t mean to be the style enforcer.  I mostly wanted to make that comment for future reference.  Other platforms (e.g., Gtk, Qt) do use different style in parts of WebKit to match their respective platforms.  In the case of Chromium, we&apos;ve changed the platform to match WebKit style (which is one reason it took a while to upstream the &quot;glue&quot; layer).

If you&apos;d like to remove the whitespace, that would be great.  If you feel like other things are more deserving of your attention, that&apos;s fine too.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186237</commentid>
    <comment_count>16</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-01-31 14:34:54 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; Did you take a look at the affected code part? I have no problem to fix it with
&gt; &gt; an upcomming patch, but it makes more sense to have more spaces here.
&gt; 
&gt; Situations like that are actually called out specifically in the Google Style
&gt; Guide (which agrees with the WebKit Style Guide on this point).
&gt; 
&gt; I don&apos;t mean to be the style enforcer.  I mostly wanted to make that comment
&gt; for future reference.  Other platforms (e.g., Gtk, Qt) do use different style
&gt; in parts of WebKit to match their respective platforms.  In the case of
&gt; Chromium, we&apos;ve changed the platform to match WebKit style (which is one reason
&gt; it took a while to upstream the &quot;glue&quot; layer).
&gt; 
&gt; If you&apos;d like to remove the whitespace, that would be great.  If you feel like
&gt; other things are more deserving of your attention, that&apos;s fine too.  :)

Ok, thanks for the clarification. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186238</commentid>
    <comment_count>17</comment_count>
      <attachid>47797</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-01-31 14:36:02 -0800</bug_when>
    <thetext>Comment on attachment 47797
reimplementation of AffineTransformation

Clearing review flag. Patch landed in http://trac.webkit.org/changeset/54112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186299</commentid>
    <comment_count>18</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-01-31 22:00:54 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 47797 [details])
&gt; Clearing review flag. Patch landed in http://trac.webkit.org/changeset/54112

WebCore.vcproj missed a &lt;/File&gt; line, and Windows build has the following error even if we fixed WebCore.vcproj.  We&apos;ll roll this back.

7&gt;   Creating library e:\cg\src\third_party\WebKit\WebKitBuild\lib\WebKit.lib an
d object e:\cg\src\third_party\WebKit\WebKitBuild\lib\WebKit.exp
7&gt;LINK : warning LNK4199: /DELAYLOAD:QuartzCore.dll ignored; no imports found fr
om QuartzCore.dll
7&gt;LINK : warning LNK4199: /DELAYLOAD:QuartzCoreInterface.dll ignored; no imports
 found from QuartzCoreInterface.dll
7&gt;WebCore_debug.lib(GraphicsContextCG.obj) : error LNK2019: unresolved external
symbol &quot;public: void __thiscall WebCore::GraphicsContextPlatformPrivate::concatC
TM(class WebCore::AffineTransform const &amp;)&quot; (?concatCTM@GraphicsContextPlatformP
rivate@WebCore@@QAEXABVAffineTransform@2@@Z) referenced in function &quot;public: voi
d __thiscall WebCore::GraphicsContext::concatCTM(class WebCore::AffineTransform
const &amp;)&quot; (?concatCTM@GraphicsContext@WebCore@@QAEXABVAffineTransform@2@@Z)
7&gt;e:\cg\src\third_party\WebKit\WebKitBuild\bin\WebKit.dll : fatal error LNK1120:
 1 unresolved externals</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186314</commentid>
    <comment_count>19</comment_count>
      <attachid>47815</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-01-31 23:47:27 -0800</bug_when>
    <thetext>Created attachment 47815
reimplementation of AffineTransformation

fixes windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186316</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-31 23:53:19 -0800</bug_when>
    <thetext>Attachment 47815 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
ontextSkia.cpp:821:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:822:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:823:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/skia/TransformationMatrixSkia.cpp:31:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/PathCairo.cpp:333:  c_matrix is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/transforms/AffineTransform.cpp:118:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:119:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:129:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/transforms/AffineTransform.cpp:135:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/qt/TransformationMatrixQt.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cg/TransformationMatrixCG.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/wx/TransformationMatrixWx.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:26:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:50:  cairo_matrix_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp:54:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/graphics/transforms/AffineTransform.h:130:  Missing spaces around *=  [whitespace/operators] [3]
WebCore/platform/graphics/transforms/AffineTransform.h:147:  cairo_matrix_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 19


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186318</commentid>
    <comment_count>21</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-02-01 00:08:32 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Attachment 47815 [details] did not pass style-queue:

See comment https://bugs.webkit.org/show_bug.cgi?id=33750#c12 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186646</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-01 16:12:02 -0800</bug_when>
    <thetext>Attachment 47815 was posted by a committer and has review+, assigning to Dirk Schulze for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188526</commentid>
    <comment_count>23</comment_count>
      <attachid>48307</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-02-07 16:59:53 -0800</bug_when>
    <thetext>Created attachment 48307
Add back AffineTransform for SVG

The complete patch to get AffineTransform back in action. I also upload the patch to check if it builds on all platforms. I&apos;ll let the r? online, if builds pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188527</commentid>
    <comment_count>24</comment_count>
      <attachid>47815</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-02-07 17:02:01 -0800</bug_when>
    <thetext>Comment on attachment 47815
reimplementation of AffineTransformation

patch landed in r54137.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188529</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-07 17:23:13 -0800</bug_when>
    <thetext>Attachment 48307 did not pass style-queue:

Failed to run &quot;[&apos;git&apos;, &apos;reset&apos;, &apos;--hard&apos;, &apos;HEAD&apos;]&quot; exit_code: 128
fatal: Could not reset index file to revision &apos;HEAD&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188530</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-07 17:45:24 -0800</bug_when>
    <thetext>Attachment 48307 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/244189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188538</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-07 18:23:02 -0800</bug_when>
    <thetext>Sorry about the botspam.  I think the bots were having some trouble.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188622</commentid>
    <comment_count>28</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-02-08 06:15:15 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Attachment 48307 [details] did not build on gtk:
&gt; Build output: http://webkit-commit-queue.appspot.com/results/244189

I&apos;m pretty sure, that it works on gtk. (Tested it with trunk on my own system)

I also run check-webkit-style. I got  warnings, all about == 0 checks. They were found in AffineTransform and are neccessary there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188711</commentid>
    <comment_count>29</comment_count>
      <attachid>48349</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-02-08 12:06:55 -0800</bug_when>
    <thetext>Created attachment 48349
Add back AffineTransform for SVG

update was needed after Nikos DRT patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188713</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-08 12:11:05 -0800</bug_when>
    <thetext>Attachment 48349 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/transforms/AffineTransform.h:120:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/skia/ImageSkia.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/svg/SVGTransformDistance.cpp:254:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188715</commentid>
    <comment_count>31</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-02-08 12:12:57 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; Attachment 48349 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; WebCore/platform/graphics/transforms/AffineTransform.h:120:  Tests for
&gt; true/false, null/non-null, and zero/non-zero should all be done without
&gt; equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/platform/graphics/skia/ImageSkia.cpp:33:  Found other header before a
&gt; header this file implements. Should be: config.h, primary header, blank line,
&gt; and then alphabetically sorted.  [build/include_order] [4]
&gt; WebCore/svg/SVGTransformDistance.cpp:254:  Tests for true/false, null/non-null,
&gt; and zero/non-zero should all be done without equality comparisons. 
&gt; [readability/comparison_to_zero] [5]
&gt; Total errors found: 3
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.
see also comment 28</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188719</commentid>
    <comment_count>32</comment_count>
      <attachid>48349</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-02-08 12:22:03 -0800</bug_when>
    <thetext>Comment on attachment 48349
Add back AffineTransform for SVG

Looks fine, r=me.
Please change the static_cast&lt;float&gt; to narrowPrecisionToFloat, as discussed on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188760</commentid>
    <comment_count>33</comment_count>
      <attachid>48349</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-02-08 14:15:35 -0800</bug_when>
    <thetext>Comment on attachment 48349
Add back AffineTransform for SVG

landed in http://trac.webkit.org/changeset/54503 . Build fixes for chromium and win were added in 54504, 54509</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>46721</attachid>
            <date>2010-01-15 17:32:04 -0800</date>
            <delta_ts>2010-01-15 17:49:12 -0800</delta_ts>
            <desc>Stress test</desc>
            <filename>node-count-vs-scroll.xhtml</filename>
            <type>application/xml</type>
            <size>1165</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIGh0bWwgUFVC
TElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9y
Zy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciIHhtbDpsYW5nPSJlbiI+CiA8aGVhZD4KICA8dGl0bGU+U1ZHIFNjcm9sbGluZyBQZXJmb3Jt
YW5jZSBkZXBlbmRzIG9uICNub2RlIGlzIFNhZmFyaT88L3RpdGxlPgoKICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+CiAgPCFbQ0RBVEFbCgogIHZhciBTVkdfTlMgPSAnaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmcnOwoKICBmdW5jdGlvbiBpbml0KCkgewogICAgdmFyIG5vZGVDb3Vu
dCA9IHBhcnNlSW50KHByb21wdCgnIyA8cmVjdD4gdG8gZ2VuZXJhdGU/ICcsIDUwMDAwKSk7Cgog
ICAgdmFyIHN2Z1Jvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7
CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykgewogICAgICB2YXIgbm9k
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdyZWN0Jyk7CiAgICAgIG5vZGUu
c2V0QXR0cmlidXRlKCd4JywgaSk7CiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCd5JywgaSk7CiAg
ICAgIG5vZGUuc2V0QXR0cmlidXRlKCd3aWR0aCcsIDEpOwogICAgICBub2RlLnNldEF0dHJpYnV0
ZSgnaGVpZ2h0JywgaSk7CiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdmaWxsJywgJ3JlZCcpOwoK
ICAgICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChub2RlKTsKICAgIH0KCiAgICBzdmdSb290LnN0eWxl
LndpZHRoID0gbm9kZUNvdW50ICsgJ3B4JzsKICAgIHN2Z1Jvb3Quc3R5bGUuaGVpZ2h0ID0gbm9k
ZUNvdW50ICsgJ3B4JzsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3ZnUm9vdCk7CiAg
fQoKICBdXT4KICA8L3NjcmlwdD4KIDwvaGVhZD4KCiA8Ym9keSBvbmxvYWQ9ImluaXQoKSI+CiAg
IDxoMT5TVkcgU2Nyb2xsaW5nIFBlcmZvcm1hbmNlIGRlcGVuZHMgb24gI25vZGUgaXMgU2FmYXJp
PzwvaDE+CiA8L2JvZHk+CjwvaHRtbD4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47771</attachid>
            <date>2010-01-30 11:37:58 -0800</date>
            <delta_ts>2010-01-31 11:27:05 -0800</delta_ts>
            <desc>reimplementation of AffineTransformation</desc>
            <filename>affineTransform-1.patch</filename>
            <type>text/plain</type>
            <size>56287</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDEwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMyIEBACisyMDEwLTAxLTMwICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGJhY2sgYW4gQWZmaW5lVHJhbnNmb3JtIGNsYXNzIGZvciB1c2UgYnkgU1ZHCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzc1MAorCisgICAgICAgIFRo
ZXNlIGFyZSB0aGUgZmlyc3Qgc3RlcHMgb24gcmVpbXBsZW1lbnRpbmcgQWZmaW5lVHJhbnNmb3Jt
LiBVbmxpa2UKKyAgICAgICAgdGhlIG9sZCBhZmZpbmUgY29kZSwgdGhpcyBvbmUgaXMgcGxhdGZv
cm0gaW5kZXBlbmRlbnQgbGlrZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4KKyAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGhhcyB0aGUgYmVuZWZpdCwgdGhhdCBpdCBzdG9yZXMganVzdCA2IGRvdWJsZXMg
aW5zdGVhZCBvZgorICAgICAgICAxNiBpbiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4gVGhlIGNhbGN1
bGF0aW9ucyBvZiB0cmFuc2Zvcm1hdGlvbnMgYXJlIG5vdCB0aGF0CisgICAgICAgIGNvbXBsZXgg
YW5kIGNhbiBpbXByb3ZlIHRoZSBtZW1vcnkgdXNhZ2UgYW5kIHNwZWVkIG9mIFNWRy4KKyAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGNhbiBiZSB1c2VkIGJ5IEhUTUwgQ2FudmFzM0Qgb3IgU1ZHLCBz
aW5jZSB0aGV5IGFyZSAyRCByZWxhdGVkIChhdAorICAgICAgICBsZWFzdCBmb3IgdGhlIG1vbWVu
dCkuCisgICAgICAgIEhUTUwgQ2FudmFzIGlzIHRoZSBmaXJzdCB0aGF0IG1ha2VzIHVzZSBvZiB0
aGUgbmV3IEFmZmluZVRyYW5zZm9ybS4gTmV4dCBwYXRjaGVzCisgICAgICAgIHdpbGwgaW50cm9k
dWNlIHRoZSBhZmZpbmUgY29kZSB0byBTVkcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGUg
bmV3IEFmZmluZVRyYW5zZm9ybWF0aW9uIGNvZGUgaXMgdGVzdGVkIGJ5IGZhc3QvY2FudmFzLgor
CisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cm90
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNQ
b2ludEluUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OndpbGxEcmF3KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmg6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJh
bnNmb3JtYXRpb25NYXRyaXhDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm06Om9wZXJhdG9yIGNhaXJvX21hdHJpeF90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmdldEFmZmluZUNUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgQ0dBZmZpbmVU
cmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29u
dGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0QWZm
aW5lQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldEFmZmluZUNUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNvbmNhdENUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIFFUcmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFu
c2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25N
YXRyaXhTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0
b3IgU2tNYXRyaXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjphZmZpbmVUcmFuc2Zv
cm1EZWNvbXBvc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWZmaW5lVHJhbnNmb3JtQ29tcG9zZSk6
CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnJlc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybTo6c2V0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybTo6aXNJZGVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm06OmRldCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmlzSW52ZXJ0aWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmludmVyc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm06Om11bHRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybTo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2Nh
bGUpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzY2FsZU5vblVuaWZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpyb3RhdGVGcm9tVmVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6ZmxpcFgpOgorICAgICAgICAoV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtOjpmbGlwWSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
OnNoZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2tldyk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNrZXdYKToKKyAgICAgICAgKFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybTo6c2tld1kpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZU1hcEJldHdl
ZW5SZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcCk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm06OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L0FmZmluZVRyYW5zZm9ybS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybTo6YSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNldEEpOgorICAg
ICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpiKToKKyAgICAgICAgKFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybTo6c2V0Qik6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
OmMpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzZXRDKToKKyAgICAgICAg
KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6ZCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm06OnNldEQpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjplKToK
KyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2V0RSk6CisgICAgICAgIChXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm06OmYpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtOjpzZXRGKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3I9
PSApOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IqPSk6CisgICAgICAgIChX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm06OnNldE1hdHJpeCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRBZmZpbmVDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNz
Q29udGV4dFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0QWZm
aW5lQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9U
cmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybTo6b3BlcmF0b3Igd3hHcmFwaGljc01hdHJpeCk6CisKIDIwMTAtMDEtMjkgIE1hcmsgUm93
ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGNvcHlpbmcgYW4gSURMIGZpbGUg
aW4gdG8gdGhlIGZyYW1ld29yayB3cmFwcGVyLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNTQwMDcpCisrKyBXZWJD
b3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw2ICs0NjYsNyBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1NraWFVdGlscy5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25N
YXRyaXhTa2lhLmNwcCBcCiAJXAorCXBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5l
VHJhbnNmb3JtLmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbi5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgXApJbmRleDogV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lv
biA1NDAwNykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE2
MDEsNiArMTYwMSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Vbml0QmV6aWVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJ
dGVyYXRvci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3Jt
LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5z
Zm9ybS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlU
cmFuc2Zvcm1PcGVyYXRpb24uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBcCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gNTQwMDcpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjEzMyw2ICsyMTMzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Nr
aWFVdGlscy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0
aWxzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRp
b25NYXRyaXhTa2lhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1NDAwNykKKysrIFdl
YkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTgwMCw2ICs4MDAsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4uY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZp
bmVUcmFuc2Zvcm0uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybWF0aW9uTWF0cml4LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9N
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDU0MDA3KQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQxMDcsNiArMjQx
MDcsMTMgQEAKIAkJCQkJTmFtZT0idHJhbnNmb3JtcyINCiAJCQkJCT4NCiAJCQkJCTxGaWxlDQor
CQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x0cmFuc2Zvcm1zXEFmZmlu
ZVRyYW5zZm9ybS5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXNcQWZmaW5l
VHJhbnNmb3JtLmgiDQorCQkJCQkJPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXNcSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU0MDA3KQorKysgV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMTMsNiAr
MTMxMyw4IEBACiAJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGM0MwRkM3
REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggKi87IH07CiAJCTg0QTgxRjQxMEZDN0UwMjcw
MDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFw
aGljLmNwcCAqLzsgfTsKIAkJODRBODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBo
aWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgx
RjQwMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggKi87IH07CisJCTg0RDIxRDZB
MTExM0E0QjUwMDZCQzY1QyAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODREMjFENjgxMTEzQTRCNTAwNkJDNjVDIC8q
IEFmZmluZVRyYW5zZm9ybS5jcHAgKi87IH07CisJCTg0RDIxRDZCMTExM0E0QjUwMDZCQzY1QyAv
KiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0RDIxRDY5MTExM0E0QjUwMDZCQzY1QyAvKiBBZmZpbmVUcmFuc2Zvcm0uaCAq
LzsgfTsKIAkJODUwMDREOTQwQUNFRUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAwNEQ4ODBB
Q0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRGVmc0VsZW1lbnQuaCAqLzsgfTsKIAkJODUwMDREOTUw
QUNFRUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMDREODkwQUNFRUFFRjAwQzQzOEY2IC8q
IERPTVNWR0RlZnNFbGVtZW50Lm1tICovOyB9OwogCQk4NTAwNEQ5NjBBQ0VFQUVGMDBDNDM4RjYg
LyogRE9NU1ZHRGVzY0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg1MDA0RDhBMEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZXNjRWxlbWVu
dC5oICovOyB9OwpAQCAtNjcxNSw2ICs2NzE3LDggQEAKIAkJODRCMkIxRjcwNTZCRUYzQTAwRDJC
NzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUtleUdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCMkIxRjgw
NTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IubSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViQ29yZUtleUdlbmVyYXRv
ci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJODRCMkIyNEYwNTZCRjE1RjAwRDJCNzcxIC8qIFNTTEtleUdlbmVyYXRvck1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFNTTEtleUdlbmVyYXRvck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTg0RDIxRDY4MTExM0E0QjUwMDZCQzY1QyAvKiBBZmZp
bmVUcmFuc2Zvcm0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWZm
aW5lVHJhbnNmb3JtLmNwcDsgcGF0aCA9IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODREMjFENjkxMTEzQTRCNTAwNkJDNjVDIC8q
IEFmZmluZVRyYW5zZm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBZmZp
bmVUcmFuc2Zvcm0uaDsgcGF0aCA9IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1MDA0RDg4MEFDRUVBRUYwMEM0MzhGNiAvKiBET01T
VkdEZWZzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZH
RGVmc0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUwMDREODkwQUNF
RUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVNWR0RlZnNFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NTAwNEQ4QTBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRGVzY0Vs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0Rlc2NFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDg5OCw2ICsxMDkwMiw4IEBA
CiAJCTQ5RTkxMUIyMEVGODZEMjcwMDlEMENBRiAvKiB0cmFuc2Zvcm1zICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk4NEQyMUQ2ODExMTNBNEI1MDA2QkM2
NUMgLyogQWZmaW5lVHJhbnNmb3JtLmNwcCAqLywKKwkJCQk4NEQyMUQ2OTExMTNBNEI1MDA2QkM2
NUMgLyogQWZmaW5lVHJhbnNmb3JtLmggKi8sCiAJCQkJNDlFOTExQjUwRUY4NkQ0NzAwOUQwQ0FG
IC8qIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlENURDMjcwRjQyM0E3
MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUQ1
REMyODBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAJKHJldmlzaW9uIDU0MDA3KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAK
LSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
CiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2NhbGUoZmxvCiAgICAgaWYgKCFpc2Zpbml0ZShzeCkg
fCAhaXNmaW5pdGUoc3kpKQogICAgICAgICByZXR1cm47CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5z
Zm9ybSBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOwogICAgIG5ld1RyYW5zZm9y
bS5zY2FsZU5vblVuaWZvcm0oc3gsIHN5KTsKICAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkgewogICAgICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOwpAQCAt
MzY2LDcgKzM2Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzY2FsZShmbG8K
IAogICAgIHN0YXRlKCkubV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+c2NhbGUo
RmxvYXRTaXplKHN4LCBzeSkpOwotICAgIG1fcGF0aC50cmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgoKS5zY2FsZU5vblVuaWZvcm0oMS4wL3N4LCAxLjAvc3kpKTsKKyAgICBtX3BhdGgudHJh
bnNmb3JtKEFmZmluZVRyYW5zZm9ybSgpLnNjYWxlTm9uVW5pZm9ybSgxLjAvc3gsIDEuMC9zeSkp
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cm90YXRlKGZsb2F0IGFuZ2xl
SW5SYWRpYW5zKQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpyb3RhdGUoZmwKICAgICBpZiAoIWlzZmluaXRlKGFuZ2xlSW5SYWRpYW5zKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbmV3VHJhbnNmb3JtID0gc3Rh
dGUoKS5tX3RyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0gc3Rh
dGUoKS5tX3RyYW5zZm9ybTsKICAgICBuZXdUcmFuc2Zvcm0ucm90YXRlKGFuZ2xlSW5SYWRpYW5z
IC8gcGlEb3VibGUgKiAxODAuMCk7CiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpIHsKICAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsKQEAgLTM4OSw3
ICszODksNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cm90YXRlKGZsCiAKICAg
ICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwogICAgIGMtPnJvdGF0ZShhbmds
ZUluUmFkaWFucyk7Ci0gICAgbV9wYXRoLnRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LnJvdGF0ZSgtYW5nbGVJblJhZGlhbnMgLyBwaURvdWJsZSAqIDE4MC4wKSk7CisgICAgbV9wYXRo
LnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS5yb3RhdGUoLWFuZ2xlSW5SYWRpYW5zIC8gcGlE
b3VibGUgKiAxODAuMCkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJh
bnNsYXRlKGZsb2F0IHR4LCBmbG9hdCB0eSkKQEAgLTQwMyw3ICs0MDMsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNsYXRlCiAgICAgaWYgKCFpc2Zpbml0ZSh0eCkgfCAh
aXNmaW5pdGUodHkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9y
bSBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOwogICAgIG5ld1RyYW5zZm9ybS50
cmFuc2xhdGUodHgsIHR5KTsKICAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkg
ewogICAgICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOwpAQCAtNDEyLDcgKzQx
Miw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2xhdGUKIAogICAgIHN0
YXRlKCkubV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+dHJhbnNsYXRlKHR4LCB0
eSk7Ci0gICAgbV9wYXRoLnRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0
ZSgtdHgsIC10eSkpOworICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkudHJh
bnNsYXRlKC10eCwgLXR5KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0
cmFuc2Zvcm0oZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9h
dCBkeCwgZmxvYXQgZHkpCkBAIC00MjcsOCArNDI3LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnRyYW5zZm9ybQogICAgICAgICAhaXNmaW5pdGUobTEyKSB8ICFpc2Zpbml0ZSht
MjIpIHwgIWlzZmluaXRlKGR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtKG0xMSwgbTEyLCBtMjEsIG0yMiwgZHgsIGR5KTsKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBuZXdUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBzdGF0ZSgpLm1fdHJh
bnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0obTExLCBtMTIsIG0yMSwgbTIy
LCBkeCwgZHkpOworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0g
KiBzdGF0ZSgpLm1fdHJhbnNmb3JtOwogICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJs
ZSgpKSB7CiAgICAgICAgIHN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CiAgICAgICAg
IHJldHVybjsKQEAgLTQ0OSw3ICs0NDksNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0VHJhbnNmCiAgICAgICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0yMikgfCAh
aXNmaW5pdGUoZHkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBz
dGF0ZSgpLm1fdHJhbnNmb3JtOwogICAgIGlmICghY3RtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgYy0+Y29uY2F0Q1RNKGMtPmdldENUTSgpLmludmVyc2UoKSk7CkBAIC03
MDgsNyArNzA4LDcgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmlzUG9pbnRJbgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdFBvaW50IHBvaW50KHgsIHkpOwotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAgQWZm
aW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CiAgICAgRmxvYXRQb2ludCB0
cmFuc2Zvcm1lZFBvaW50ID0gY3RtLmludmVyc2UoKS5tYXBQb2ludChwb2ludCk7CiAgICAgcmV0
dXJuIG1fcGF0aC5jb250YWlucyh0cmFuc2Zvcm1lZFBvaW50KTsKIH0KQEAgLTEyNDEsNyArMTI0
MSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdygKIAogICAgIEZs
b2F0UmVjdCBkaXJ0eVJlY3QgPSByOwogICAgIGlmIChvcHRpb25zICYgQ2FudmFzV2lsbERyYXdB
cHBseVRyYW5zZm9ybSkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBzdGF0
ZSgpLm1fdHJhbnNmb3JtOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gc3RhdGUoKS5t
X3RyYW5zZm9ybTsKICAgICAgICAgZGlydHlSZWN0ID0gY3RtLm1hcFJlY3Qocik7CiAgICAgfQog
ICAgIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCShyZXZpc2lvbiA1NDAwNykKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZp
bmUgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEX2gKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCkBAIC0yMTgsNyArMjE4LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgU3RyaW5nIG1fc2hhZG93Q29sb3I7CiAgICAg
ICAgICAgICBmbG9hdCBtX2dsb2JhbEFscGhhOwogICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0
b3IgbV9nbG9iYWxDb21wb3NpdGU7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X3RyYW5zZm9ybTsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKICAg
ICAgICAgICAgIGJvb2wgbV9pbnZlcnRpYmxlQ1RNOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBUZXh0IHN0YXRlLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCShyZXZpc2lvbiA1NDAwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY29uc3QgaW50IGNNaXNzcGVsbGluZ0xpbmVQYXR0ZXJu
V2lkdGggPSA0OwogICAgIGNvbnN0IGludCBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybkdhcFdpZHRo
ID0gMTsKIAorICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKICAgICBjbGFzcyBGb250OwogICAg
IGNsYXNzIEdlbmVyYXRvcjsKICAgICBjbGFzcyBHcmFkaWVudDsKQEAgLTI5OSw3ICszMDAsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBL
VVJMJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRDVE0oKSBjb25z
dDsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdldEFmZmluZUNUTSgpIGNvbnN0OwogCiAjaWYg
T1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkKICAgICAgICAgdm9pZCBzZXRCaXRtYXAoUGFzc1Jl
ZlB0cjxTaGFyZWRCaXRtYXA+KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZp
c2lvbiA1NDAwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw2ICs2Nyw3IEBAIHR5cGVkZWYgUGxhdGZvcm1QYXRoKiBQbGF0Zm9ybVBh
dGhQdHI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKICAgICBjbGFzcyBGbG9hdFBvaW50OwogICAgIGNsYXNzIEZsb2F0UmVjdDsKICAgICBjbGFz
cyBGbG9hdFNpemU7CkBAIC0xNDUsNiArMTQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBzdGF0aWMgUGF0aCBjcmVhdGVMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50Jik7CiAKICAgICAgICAgdm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1
bmN0aW9uKSBjb25zdDsKKyAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
Jik7CiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDU0MDA3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2lmIFBMQVRGT1JNKENB
SVJPKQogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2Fpcm9QYXRo
LmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
QEAgLTIxNiw2ICsyMTcsMTQgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0
OjpnZQogICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtLnh4LCBtLnl4LCBtLnh5LCBt
Lnl5LCBtLngwLCBtLnkwKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6
Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sKKyAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4
dCgpOworICAgIGNhaXJvX21hdHJpeF90IG07CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0p
OworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0obS54eCwgbS55eCwgbS54eSwgbS55eSwgbS54
MCwgbS55MCk7Cit9CisKIGNhaXJvX3QqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhLT5jcjsKQEAgLTgwMiw2ICs4MTEsMTcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcgogICAgIG1fZGF0YS0+Y29u
Y2F0Q1RNKHRyYW5zZm9ybSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNy
OworICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IG1hdHJpeCA9IGNhaXJvX21hdHJpeF90KHRyYW5z
Zm9ybSk7CisgICAgY2Fpcm9fdHJhbnNmb3JtKGNyLCAmbWF0cml4KTsKKyAgICBtX2RhdGEtPmNv
bmNhdENUTSh0cmFuc2Zvcm0pOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJS
b3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ2Fpcm8uaAkocmV2aXNpb24gNTQwMDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJik7CiAgICAgdm9pZCByb3RhdGUoZmxvYXQpOwogICAgIHZvaWQgdHJhbnNsYXRl
KGZsb2F0LCBmbG9hdCk7CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSB7IG1fdHJhbnNwYXJlbmN5Q291bnQrKzsg
fQogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSB7IG1fdHJhbnNwYXJlbmN5Q291bnQt
LTsgfQpAQCAtODUsNiArODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShjb25zdCBGbG9h
dFNpemUmKSB7fQogICAgIHZvaWQgcm90YXRlKGZsb2F0KSB7fQogICAgIHZvaWQgdHJhbnNsYXRl
KGZsb2F0LCBmbG9hdCkge30KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikg
e30KICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSB7fQogICAgIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSB7fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXRoQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0aENhaXJvLmNwcAkocmV2aXNpb24gNTQwMDcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
I2luY2x1ZGUgIkNhaXJvUGF0aC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMzI2LDYg
KzMyNywxNCBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyCiAgICAg
Y2Fpcm9fcGF0aF9kZXN0cm95KHBhdGgpOwogfQogCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zKQoreworICAgIGNhaXJvX3QqIG1fY3IgPSBwbGF0Zm9y
bVBhdGgoKS0+bV9jcjsKKyAgICBjYWlyb19tYXRyaXhfdCBjX21hdHJpeCA9IGNhaXJvX21hdHJp
eF90KHRyYW5zKTsKKyAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZjX21hdHJpeCk7CisgICAgY2Fp
cm9fdHJhbnNmb3JtKG1fY3IsICZjX21hdHJpeCk7Cit9CisKIHZvaWQgUGF0aDo6dHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFucykKIHsKICAgICBjYWlyb190KiBtX2Ny
ID0gcGxhdGZvcm1QYXRoKCktPm1fY3I7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5jcHAJ
KHJldmlzaW9uIDU0MDA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFu
c2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgpAQCAtNDYsNiArNDcsMjAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIGNh
aXJvX21hdAogICAgIHJldHVybiBtOwogfQogCitBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIGNh
aXJvX21hdHJpeF90KCkgY29uc3QKK3sKKyAgICBjYWlyb19tYXRyaXhfdCBtOworCisgICAgY2Fp
cm9fbWF0cml4X2luaXQgKCZtLAorICAgICAgICAgICAgICAgICAgICAgICBhKCksCisgICAgICAg
ICAgICAgICAgICAgICAgIGIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYygpLAorICAgICAg
ICAgICAgICAgICAgICAgICBkKCksCisgICAgICAgICAgICAgICAgICAgICAgIGUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgZigpKTsKKyAgICByZXR1cm4gbTsKK30KKwogfQogCiAvLyB2aW06
IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDU0MDA3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNH
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgpAQCAtOTU4LDYgKzk1OSwx
NSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsCiAgICAgbV9kYXRh
LT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIENHQ29udGV4dENvbmNhdENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
KyAgICBtX2RhdGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOworICAgIG1fZGF0YS0+bV91c2VyVG9E
ZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOworfQorCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTk2Nyw2ICs5NzcsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcgogICAgIG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCitBZmZp
bmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAoreworICAg
IENHQWZmaW5lVHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkp
OworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0odC5hLCB0LmIsIHQuYywgdC5kLCB0LnR4LCB0
LnR5KTsKK30KKwogVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0o
KSBjb25zdAogewogICAgIENHQWZmaW5lVHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRDVE0ocGxh
dGZvcm1Db250ZXh0KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAkocmV2
aXNpb24gNTQwMDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikge30KICAgICB2b2lkIHJv
dGF0ZShmbG9hdCkge30KICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIHt9CisgICAg
dm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikge30KICAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIHt9CiAgICAgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKCkge30KICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkge30KQEAg
LTg4LDYgKzg5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7
CiAgICAgdm9pZCByb3RhdGUoZmxvYXQpOwogICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9h
dCk7CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9p
ZCBjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICB2b2lkIGJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoKSB7IG1fdHJhbnNwYXJlbmN5Q291bnQrKzsgfQogICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSB7IG1fdHJhbnNwYXJlbmN5Q291bnQtLTsgfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAkocmV2aXNpb24gNTQwMDcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIFBMQVRGT1JNKENHKQogCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRl
IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKQEAgLTM0Niw2ICszNDcsMTUgQEAgdm9pZCBQYXRoOjphcHBseSh2b2lkKiBp
bmZvLCBQYXRoQXBwbGllcgogICAgIENHUGF0aEFwcGx5KG1fcGF0aCwgJnBpbmZvLCBDR1BhdGhB
cHBsaWVyVG9QYXRoQXBwbGllcik7CiB9CiAKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9
IENHUGF0aENyZWF0ZU11dGFibGUoKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1D
RyA9IHRyYW5zZm9ybTsKKyAgICBDR1BhdGhBZGRQYXRoKHBhdGgsICZ0cmFuc2Zvcm1DRywgbV9w
YXRoKTsKKyAgICBDR1BhdGhSZWxlYXNlKG1fcGF0aCk7CisgICAgbV9wYXRoID0gcGF0aDsKK30K
Kwogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSkKIHsKICAgICBDR011dGFibGVQYXRoUmVmIHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxl
KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0
cml4Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJh
bnNmb3JtYXRpb25NYXRyaXhDRy5jcHAJKHJldmlzaW9uIDU0MDA3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
CiAjaWYgUExBVEZPUk0oQ0cpCkBAIC00Myw2ICs0NCwxNiBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6b3BlcmF0b3IgQ0dBZmZpbmVUCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoZigpKSk7CiB9CiAKK0FmZmluZVRyYW5zZm9ybTo6b3Bl
cmF0b3IgQ0dBZmZpbmVUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBDR0FmZmluZVRy
YW5zZm9ybU1ha2UobmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGEoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoYigpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChjKCkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zs
b2F0KGQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0NHRmxvYXQoZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdChmKCkpKTsKK30KKwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0o
Q0cpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4
dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkocmV2aXNpb24gNTQwMDcpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVk
ZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRm9udC5oIgpAQCAt
MzkxLDYgKzM5MiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKK30KKwogVHJhbnNmb3JtYXRpb25NYXRyaXggR3Jh
cGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBA
IC00NTEsNiArNDU4LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRS
ZWMKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkocmV2
aXNpb24gNTQwMDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlr
dS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJQYXRoLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0xNDYsNiArMTQ3LDExIEBAIHZvaWQgUGF0aDo6YXBw
bHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXIKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2
b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcAkocmV2aXNpb24gNTQwMDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBA
QAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
ICNpbmNsdWRlICJGb250LmgiCkBAIC0yNzUsNiArMjc2LDEzIEBAIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBHcmFwaGljc0NvbnRleHQKICAgICByZXR1cm4gbV9kYXRhLT5wKCk7CiB9CiAKK1Ry
YW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QK
K3sKKyAgICBRVHJhbnNmb3JtIG1hdHJpeChwbGF0Zm9ybUNvbnRleHQoKS0+Y29tYmluZWRUcmFu
c2Zvcm0oKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybShtYXRyaXgubTExKCksIG1hdHJp
eC5tMTIoKSwgbWF0cml4Lm0yMSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4
Lm0yMigpLCBtYXRyaXguZHgoKSwgbWF0cml4LmR5KCkpOworfQorCiBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgUVRyYW5zZm9ybSBt
YXRyaXgocGxhdGZvcm1Db250ZXh0KCktPmNvbWJpbmVkVHJhbnNmb3JtKCkpOwpAQCAtMTE4OCw2
ICsxMTk2LDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKICAg
ICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIGFudGlBbGlhcyk7CiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9kYXRhLT5wKCktPnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJ1
ZSk7CisKKyAgICAvLyBUcmFuc2Zvcm1hdGlvbnMgdG8gdGhlIGNvbnRleHQgc2hvdWxkbid0IHRy
YW5zZm9ybSB0aGUgY3VycmVudFBhdGguCisgICAgLy8gV2UgaGF2ZSB0byB1bmRvIGV2ZXJ5IGNo
YW5nZSBtYWRlIHRvIHRoZSBjb250ZXh0IGZyb20gdGhlIGN1cnJlbnRQYXRoCisgICAgLy8gdG8g
YXZvaWQgd3JvbmcgZHJhd2luZ3MuCisgICAgaWYgKCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1w
dHkoKSAmJiB0cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgUVRyYW5zZm9ybSBt
YXRyaXggPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOworICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRo
ID0gbV9kYXRhLT5jdXJyZW50UGF0aCAqIG1hdHJpeDsKKyAgICAgICAgbV9jb21tb24tPnN0YXRl
LnBhdGhUcmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNmb3JtKTsKKyAgICB9Cit9CisKKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9QYXRoUXQuY3BwCShyZXZpc2lvbiA1NDAwNykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiAgIDx6YWNrQGtkZS5v
cmc+CiAgKiAgICAgICAgICAgICAgIDIwMDYgUm9iIEJ1aXMgICAgIDxidWlzQGtkZS5vcmc+Ci0g
KiAgICAgICAgICAgICAgIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiAg
ICAgICAgICAgICAgIDIwMDksIDIwMTAgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMCwxMiArMzAsMTMgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKLSNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTdHJva2VT
dHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1
ZGUgPFFQYWludGVyUGF0aD4KICNpbmNsdWRlIDxRVHJhbnNmb3JtPgogI2luY2x1ZGUgPFFTdHJp
bmc+CkBAIC0zNzksNiArMzgwLDExIEBAIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0
aEFwcGxpZXIKICAgICB9CiB9CiAKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIG1fcGF0aCA9IFFUcmFuc2Zvcm0odHJhbnNmb3Jt
KS5tYXAobV9wYXRoKTsKK30KKwogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBtX3BhdGggPSBRVHJhbnNmb3JtKHRyYW5z
Zm9ybSkubWFwKG1fcGF0aCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1Ry
YW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAJKHJldmlzaW9uIDU0MDA3KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMzYsNiArMzcsMTEgQEAg
VHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIFFUcmFuc2ZvcgogICAgIHJldHVybiBRVHJh
bnNmb3JtKG0xMSgpLCBtMTIoKSwgbTE0KCksIG0yMSgpLCBtMjIoKSwgbTI0KCksIG00MSgpLCBt
NDIoKSwgbTQ0KCkpOwogfQogCitBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIFFUcmFuc2Zvcm0o
KSBjb25zdAoreworICAgIHJldHVybiBRVHJhbnNmb3JtKG0xMSgpLCBtMTIoKSwgbTIxKCksIG0y
MigpLCBkeCgpLCBkeSgpKTsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHRTa2lhLmNwcAkocmV2aXNpb24gNTQwMDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
IAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKQEAgLTgwNSw2ICs4MDYs
MTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCitBZmZp
bmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAoreworICAg
IGNvbnN0IFNrTWF0cml4JiBtID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3Rh
bE1hdHJpeCgpOworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oU2tTY2FsYXJUb0RvdWJsZSht
LmdldFNjYWxlWCgpKSwgICAgICAvLyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1Nj
YWxhclRvRG91YmxlKG0uZ2V0U2tld1koKSksICAgICAgIC8vIGIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3WCgpKSwgICAgICAgLy8gYworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFNjYWxlWSgpKSwg
ICAgICAvLyBkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0u
Z2V0VHJhbnNsYXRlWCgpKSwgIC8vIGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2Nh
bGFyVG9Eb3VibGUobS5nZXRUcmFuc2xhdGVZKCkpKTsgLy8gZgorfQorCiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgY29uc3QgU2tN
YXRyaXgmIG0gPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvdGFsTWF0cml4KCk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAJKHJl
dmlzaW9uIDU0MDA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlBhdGguaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
U3Ryb2tlU3R5bGVBcHBsaWVyLmgiCkBAIC0yMTQsNiArMjE1LDExIEBAIHZvaWQgUGF0aDo6YXBw
bHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXIKICAgICB9CiB9CiAKK3ZvaWQgUGF0aDo6dHJhbnNm
b3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgeGZvcm0pCit7CisgICAgbV9wYXRoLT50cmFuc2Zv
cm0oeGZvcm0pOworfQorCiB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgeGZvcm0pCiB7CiAgICAgbV9wYXRoLT50cmFuc2Zvcm0oeGZvcm0pOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1RyYW5zZm9ybWF0aW9uTWF0cml4U2tpYS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1RyYW5zZm9y
bWF0aW9uTWF0cml4U2tpYS5jcHAJKHJldmlzaW9uIDU0MDA3KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1RyYW5zZm9ybWF0aW9uTWF0cml4U2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIC8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKICNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgogCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCkBAIC01NCw0ICs1NSwyNCBAQCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgU2tNYXRyaXgoCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAorQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBTa01hdHJpeCgpIGNvbnN0Cit7Cisg
ICAgU2tNYXRyaXggcmVzdWx0OworCisgICAgcmVzdWx0LnNldFNjYWxlWChXZWJDb3JlRG91Ymxl
VG9Ta1NjYWxhcihhKCkpKTsKKyAgICByZXN1bHQuc2V0U2tld1goV2ViQ29yZURvdWJsZVRvU2tT
Y2FsYXIoYygpKSk7CisgICAgcmVzdWx0LnNldFRyYW5zbGF0ZVgoV2ViQ29yZURvdWJsZVRvU2tT
Y2FsYXIoZSgpKSk7CisKKyAgICByZXN1bHQuc2V0U2NhbGVZKFdlYkNvcmVEb3VibGVUb1NrU2Nh
bGFyKGQoKSkpOworICAgIHJlc3VsdC5zZXRTa2V3WShXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihi
KCkpKTsKKyAgICByZXN1bHQuc2V0VHJhbnNsYXRlWShXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihm
KCkpKTsKKworICAgIC8vIEZJWE1FOiBTZXQgcGVyc3BlY3RpdmUgcHJvcGVybHkuCisgICAgcmVz
dWx0LnNldFBlcnNwWCgwKTsKKyAgICByZXN1bHQuc2V0UGVyc3BZKDApOworICAgIHJlc3VsdC5z
ZXQoU2tNYXRyaXg6OmtNUGVyc3AyLCBTS19TY2FsYXIxKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRy
YW5zZm9ybS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2
b2lkIGFmZmluZVRyYW5zZm9ybURlY29tcG9zZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJp
eCwgZG91YmxlIHNyWzldKQoreworICAgIEFmZmluZVRyYW5zZm9ybSBtKG1hdHJpeCk7CisKKyAg
ICAvLyBDb21wdXRlIHNjYWxpbmcgZmFjdG9ycworICAgIGRvdWJsZSBzeCA9IHNxcnQobS5hKCkg
KiBtLmEoKSArIG0uYigpICogbS5iKCkpOworICAgIGRvdWJsZSBzeSA9IHNxcnQobS5jKCkgKiBt
LmMoKSArIG0uZCgpICogbS5kKCkpOworCisgICAgLyogQ29tcHV0ZSBjcm9zcyBwcm9kdWN0IG9m
IHRyYW5zZm9ybWVkIHVuaXQgdmVjdG9ycy4gSWYgbmVnYXRpdmUsCisgICAgICAgIG9uZSBheGlz
IHdhcyBmbGlwcGVkLiAqLworCisgICAgaWYgKG0uYSgpICogbS5kKCkgLSBtLmMoKSAqIG0uYigp
IDwgMC4wKSB7CisgICAgICAgIC8vIEZsaXAgYXhpcyB3aXRoIG1pbmltdW0gdW5pdCB2ZWN0b3Ig
ZG90IHByb2R1Y3QKKworICAgICAgICBpZiAobS5hKCkgPCBtLmQoKSkKKyAgICAgICAgICAgIHN4
ID0gLXN4OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzeSA9IC1zeTsKKyAgICB9CisKKyAg
ICAvLyBSZW1vdmUgc2NhbGUgZnJvbSBtYXRyaXgKKworICAgIG0uc2NhbGUoMS4wIC8gc3gsIDEu
MCAvIHN5KTsKKworICAgIC8vIENvbXB1dGUgcm90YXRpb24KKworICAgIGRvdWJsZSBhbmdsZSA9
IGF0YW4yKG0uYigpLCBtLmEoKSk7CisKKyAgICAvLyBSZW1vdmUgcm90YXRpb24gZnJvbSBtYXRy
aXgKKworICAgIG0ucm90YXRlKHJhZDJkZWcoLWFuZ2xlKSk7CisKKyAgICAvLyBSZXR1cm4gcmVz
dWx0cworCisgICAgc3JbMF0gPSBzeDsgc3JbMV0gPSBzeTsgc3JbMl0gPSBhbmdsZTsKKyAgICBz
clszXSA9IG0uYSgpOyBzcls0XSA9IG0uYigpOworICAgIHNyWzVdID0gbS5jKCk7IHNyWzZdID0g
bS5kKCk7CisgICAgc3JbN10gPSBtLmUoKTsgc3JbOF0gPSBtLmYoKTsKK30KKworc3RhdGljIHZv
aWQgYWZmaW5lVHJhbnNmb3JtQ29tcG9zZShBZmZpbmVUcmFuc2Zvcm0mIG0sIGNvbnN0IGRvdWJs
ZSBzcls5XSkKK3sKKyAgICBtLnNldEEoc3JbM10pOworICAgIG0uc2V0Qihzcls0XSk7CisgICAg
bS5zZXRDKHNyWzVdKTsKKyAgICBtLnNldEQoc3JbNl0pOworICAgIG0uc2V0RShzcls3XSk7Cisg
ICAgbS5zZXRGKHNyWzhdKTsKKyAgICBtLnJvdGF0ZShyYWQyZGVnKHNyWzJdKSk7CisgICAgbS5z
Y2FsZShzclswXSwgc3JbMV0pOworfQorCitBZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9y
bSgpCit7CisgICAgc2V0TWF0cml4KDEsIDAsIDAsIDEsIDAsIDApOworfQorCitBZmZpbmVUcmFu
c2Zvcm06OkFmZmluZVRyYW5zZm9ybShkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3Vi
bGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQoreworICAgIHNldE1hdHJpeChhLCBiLCBjLCBkLCBl
LCBmKTsKK30KKwordm9pZCBBZmZpbmVUcmFuc2Zvcm06OnJlc2V0KCkKK3sKKyAgICBzZXRNYXRy
aXgoMSwgMCwgMCwgMSwgMCwgMCk7Cit9CisKK3ZvaWQgQWZmaW5lVHJhbnNmb3JtOjpzZXRNYXRy
aXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3Vi
bGUgZikKK3sKKyAgICBtX3RyYW5zZm9ybVswXSA9IGE7CisgICAgbV90cmFuc2Zvcm1bMV0gPSBi
OworICAgIG1fdHJhbnNmb3JtWzJdID0gYzsKKyAgICBtX3RyYW5zZm9ybVszXSA9IGQ7CisgICAg
bV90cmFuc2Zvcm1bNF0gPSBlOworICAgIG1fdHJhbnNmb3JtWzVdID0gZjsKK30KKworYm9vbCBB
ZmZpbmVUcmFuc2Zvcm06OmlzSWRlbnRpdHkoKSBjb25zdAoreworICAgIHJldHVybiAobV90cmFu
c2Zvcm1bMF0gPT0gMSAmJiBtX3RyYW5zZm9ybVsxXSA9PSAwCisgICAgICAgICAmJiBtX3RyYW5z
Zm9ybVsyXSA9PSAwICYmIG1fdHJhbnNmb3JtWzNdID09IDEKKyAgICAgICAgICYmIG1fdHJhbnNm
b3JtWzRdID09IDAgJiYgbV90cmFuc2Zvcm1bNV0gPT0gMCk7Cit9CisKK2RvdWJsZSBBZmZpbmVU
cmFuc2Zvcm06OmRldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtWzBdICogbV90
cmFuc2Zvcm1bM10gLSBtX3RyYW5zZm9ybVsxXSAqIG1fdHJhbnNmb3JtWzJdOworfQorCitib29s
IEFmZmluZVRyYW5zZm9ybTo6aXNJbnZlcnRpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGV0
KCkgIT0gMC4wOworfQorCitBZmZpbmVUcmFuc2Zvcm0gQWZmaW5lVHJhbnNmb3JtOjppbnZlcnNl
KCkgY29uc3QKK3sKKyAgICBkb3VibGUgZGV0ZXJtaW5hbnQgPSBkZXQoKTsKKyAgICBpZiAoZGV0
ZXJtaW5hbnQgPT0gMC4wKQorICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gcmVzdWx0OworICAgIHJlc3VsdC5tX3RyYW5zZm9ybVswXSA9IG1f
dHJhbnNmb3JtWzNdIC8gZGV0ZXJtaW5hbnQ7CisgICAgcmVzdWx0Lm1fdHJhbnNmb3JtWzFdID0g
LW1fdHJhbnNmb3JtWzFdIC8gZGV0ZXJtaW5hbnQ7CisgICAgcmVzdWx0Lm1fdHJhbnNmb3JtWzJd
ID0gLW1fdHJhbnNmb3JtWzJdIC8gZGV0ZXJtaW5hbnQ7CisgICAgcmVzdWx0Lm1fdHJhbnNmb3Jt
WzNdID0gbV90cmFuc2Zvcm1bMF0gLyBkZXRlcm1pbmFudDsKKyAgICByZXN1bHQubV90cmFuc2Zv
cm1bNF0gPSAobV90cmFuc2Zvcm1bMl0gKiBtX3RyYW5zZm9ybVs1XQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLSBtX3RyYW5zZm9ybVszXSAqIG1fdHJhbnNmb3JtWzRdKSAvIGRldGVybWlu
YW50OworICAgIHJlc3VsdC5tX3RyYW5zZm9ybVs1XSA9IChtX3RyYW5zZm9ybVsxXSAqIG1fdHJh
bnNmb3JtWzRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtIG1fdHJhbnNmb3JtWzBdICog
bV90cmFuc2Zvcm1bNV0pIC8gZGV0ZXJtaW5hbnQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6bXVsdGlwbHkoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBvdGhlcikKK3sKKyAgICByZXR1cm4gKCp0aGlzKSAqPSBvdGhlcjsKK30KKwor
QWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06Om11bHRMZWZ0KGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgb3RoZXIpCit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zOworICAgIAorICAg
IHRyYW5zLm1fdHJhbnNmb3JtWzBdID0gb3RoZXIubV90cmFuc2Zvcm1bMF0gKiBtX3RyYW5zZm9y
bVswXSArIG90aGVyLm1fdHJhbnNmb3JtWzFdICogbV90cmFuc2Zvcm1bMl07CisgICAgdHJhbnMu
bV90cmFuc2Zvcm1bMV0gPSBvdGhlci5tX3RyYW5zZm9ybVswXSAqIG1fdHJhbnNmb3JtWzFdICsg
b3RoZXIubV90cmFuc2Zvcm1bMV0gKiBtX3RyYW5zZm9ybVszXTsKKyAgICB0cmFucy5tX3RyYW5z
Zm9ybVsyXSA9IG90aGVyLm1fdHJhbnNmb3JtWzJdICogbV90cmFuc2Zvcm1bMF0gKyBvdGhlci5t
X3RyYW5zZm9ybVszXSAqIG1fdHJhbnNmb3JtWzJdOworICAgIHRyYW5zLm1fdHJhbnNmb3JtWzNd
ID0gb3RoZXIubV90cmFuc2Zvcm1bMl0gKiBtX3RyYW5zZm9ybVsxXSArIG90aGVyLm1fdHJhbnNm
b3JtWzNdICogbV90cmFuc2Zvcm1bM107CisgICAgdHJhbnMubV90cmFuc2Zvcm1bNF0gPSBvdGhl
ci5tX3RyYW5zZm9ybVs0XSAqIG1fdHJhbnNmb3JtWzBdICsgb3RoZXIubV90cmFuc2Zvcm1bNV0g
KiBtX3RyYW5zZm9ybVsyXSArIG1fdHJhbnNmb3JtWzRdOworICAgIHRyYW5zLm1fdHJhbnNmb3Jt
WzVdID0gb3RoZXIubV90cmFuc2Zvcm1bNF0gKiBtX3RyYW5zZm9ybVsxXSArIG90aGVyLm1fdHJh
bnNmb3JtWzVdICogbV90cmFuc2Zvcm1bM10gKyBtX3RyYW5zZm9ybVs1XTsKKworICAgIHNldE1h
dHJpeCh0cmFucy5tX3RyYW5zZm9ybSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitBZmZpbmVU
cmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6cm90YXRlKGRvdWJsZSBhKQoreworICAgIC8vIGFu
Z2xlIGlzIGluIGRlZ3JlZS4gU3dpdGNoIHRvIHJhZGlhbgorICAgIGEgPSBkZWcycmFkKGEpOwor
ICAgIGRvdWJsZSBjb3NBbmdsZSA9IGNvcyhhKTsKKyAgICBkb3VibGUgc2luQW5nbGUgPSBzaW4o
YSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHJvdChjb3NBbmdsZSwgc2luQW5nbGUsIC1zaW5Bbmds
ZSwgY29zQW5nbGUsIDAsIDApOworCisgICAgbXVsdExlZnQocm90KTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzY2FsZShkb3VibGUg
cykKK3sKKyAgICByZXR1cm4gc2NhbGUocywgcyk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZm
aW5lVHJhbnNmb3JtOjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICBtX3RyYW5z
Zm9ybVswXSAqPSBzeDsKKyAgICBtX3RyYW5zZm9ybVszXSAqPSBzeTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUoZG91
YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgbV90cmFuc2Zvcm1bNF0gKz0gdHg7CisgICAgbV90
cmFuc2Zvcm1bNV0gKz0gdHk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zv
cm0mIEFmZmluZVRyYW5zZm9ybTo6c2NhbGVOb25Vbmlmb3JtKGRvdWJsZSBzeCwgZG91YmxlIHN5
KQoreworICAgIHJldHVybiBzY2FsZShzeCwgc3kpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFm
ZmluZVRyYW5zZm9ybTo6cm90YXRlRnJvbVZlY3Rvcihkb3VibGUgeCwgZG91YmxlIHkpCit7Cisg
ICAgcmV0dXJuIHJvdGF0ZShyYWQyZGVnKGF0YW4yKHksIHgpKSk7Cit9CisKK0FmZmluZVRyYW5z
Zm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpmbGlwWCgpCit7CisgICAgcmV0dXJuIHNjYWxlKC0xLCAx
KTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OmZsaXBZKCkKK3sKKyAg
ICByZXR1cm4gc2NhbGUoMSwgLTEpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5z
Zm9ybTo6c2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgQWZmaW5lVHJhbnNmb3Jt
IHNoZWFyKDEsIHN5LCBzeCwgMSwgMCwgMCk7CisKKyAgICBtdWx0TGVmdChzaGVhcik7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2tl
dyhkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZKQoreworICAgIHJldHVybiBzaGVhcih0YW4o
ZGVnMnJhZChhbmdsZVgpKSwgdGFuKGRlZzJyYWQoYW5nbGVZKSkpOworfQorCitBZmZpbmVUcmFu
c2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2tld1goZG91YmxlIGFuZ2xlKQoreworICAgIHJldHVy
biBzaGVhcih0YW4oZGVnMnJhZChhbmdsZSkpLCAwKTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBB
ZmZpbmVUcmFuc2Zvcm06OnNrZXdZKGRvdWJsZSBhbmdsZSkKK3sKKyAgICByZXR1cm4gc2hlYXIo
MCwgdGFuKGRlZzJyYWQoYW5nbGUpKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBtYWtlTWFwQmV0
d2VlblJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Qp
Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlKGRlc3QueCgpIC0gc291cmNlLngoKSwgZGVzdC55KCkgLSBzb3VyY2UueSgpKTsKKyAgICB0
cmFuc2Zvcm0uc2NhbGUoZGVzdC53aWR0aCgpIC8gc291cmNlLndpZHRoKCksIGRlc3QuaGVpZ2h0
KCkgLyBzb3VyY2UuaGVpZ2h0KCkpOworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK3ZvaWQg
QWZmaW5lVHJhbnNmb3JtOjptYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUqIHgyLCBkb3Vi
bGUqIHkyKSBjb25zdAoreworICAgICp4MiA9IChtX3RyYW5zZm9ybVswXSAqIHggKyBtX3RyYW5z
Zm9ybVsyXSAqIHkgKyBtX3RyYW5zZm9ybVs0XSk7CisgICAgKnkyID0gKG1fdHJhbnNmb3JtWzFd
ICogeCArIG1fdHJhbnNmb3JtWzNdICogeSArIG1fdHJhbnNmb3JtWzVdKTsKK30KKworSW50UG9p
bnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
Cit7CisgICAgZG91YmxlIHgyLCB5MjsKKyAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4
MiwgJnkyKTsKKyAgICAKKyAgICAvLyBSb3VuZCB0aGUgcG9pbnQuCisgICAgcmV0dXJuIEludFBv
aW50KGxyb3VuZCh4MiksIGxyb3VuZCh5MikpOworfQorCitGbG9hdFBvaW50IEFmZmluZVRyYW5z
Zm9ybTo6bWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgZG91
YmxlIHgyLCB5MjsKKyAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4MiwgJnkyKTsKKwor
ICAgIHJldHVybiBGbG9hdFBvaW50KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeDIpLCBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHkyKSk7Cit9CisKK0Zsb2F0UmVjdCBBZmZpbmVUcmFuc2Zvcm06Om1h
cFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEZsb2F0UXVhZCBxKHJl
Y3QpOworCisgICAgRmxvYXRRdWFkIHJlc3VsdDsKKyAgICByZXN1bHQuc2V0UDEobWFwUG9pbnQo
cS5wMSgpKSk7CisgICAgcmVzdWx0LnNldFAyKG1hcFBvaW50KHEucDIoKSkpOworICAgIHJlc3Vs
dC5zZXRQMyhtYXBQb2ludChxLnAzKCkpKTsKKyAgICByZXN1bHQuc2V0UDQobWFwUG9pbnQocS5w
NCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdC5ib3VuZGluZ0JveCgpOworfQorCit2b2lkIEFmZmlu
ZVRyYW5zZm9ybTo6YmxlbmQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmcm9tLCBkb3VibGUgcHJv
Z3Jlc3MpCit7CisgICAgZG91YmxlIHNyQVs5XSwgc3JCWzldOworCisgICAgYWZmaW5lVHJhbnNm
b3JtRGVjb21wb3NlKGZyb20sIHNyQSk7CisgICAgYWZmaW5lVHJhbnNmb3JtRGVjb21wb3NlKCp0
aGlzLCBzckIpOworCisgICAgLy8gSWYgeC1heGlzIG9mIG9uZSBpcyBmbGlwcGVkLCBhbmQgeS1h
eGlzIG9mIHRoZSBvdGhlciwgY29udmVydCB0byBhbiB1bmZsaXBwZWQgcm90YXRpb24uCisgICAg
aWYgKChzckFbMF0gPCAwICYmIHNyQlsxXSA8IDApIHx8IChzckFbMV0gPCAwICYmICBzckJbMF0g
PCAwKSkgeworICAgICAgICBzckFbMF0gPSAtc3JBWzBdOworICAgICAgICBzckFbMV0gPSAtc3JB
WzFdOworICAgICAgICBzckFbMl0gKz0gc3JBWzJdIDwgMCA/IHBpRG91YmxlIDogLXBpRG91Ymxl
OworICAgIH0KKworICAgIC8vIERvbid0IHJvdGF0ZSB0aGUgbG9uZyB3YXkgYXJvdW5kLgorICAg
IHNyQVsyXSA9IGZtb2Qoc3JBWzJdLCAyLjAgKiBwaURvdWJsZSk7CisgICAgc3JCWzJdID0gZm1v
ZChzckJbMl0sIDIuMCAqIHBpRG91YmxlKTsKKworICAgIGlmIChmYWJzKHNyQVsyXSAtIHNyQlsy
XSkgPiBwaURvdWJsZSkgeworICAgICAgICBpZiAoc3JBWzJdID4gc3JCWzJdKQorICAgICAgICAg
ICAgc3JBWzJdIC09IHBpRG91YmxlICogMi4wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
ckJbMl0gLT0gcGlEb3VibGUgKiAyLjA7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA5OyBpKyspCisgICAgICAgIHNyQVtpXSA9IHNyQVtpXSArIHByb2dyZXNzICogKHNyQltpXSAt
IHNyQVtpXSk7CisKKyAgICBhZmZpbmVUcmFuc2Zvcm1Db21wb3NlKCp0aGlzLCBzckEpOworfQor
Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJh
bnNmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL0FmZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgMjAxMCBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBZmZpbmVUcmFuc2Zv
cm1faAorI2RlZmluZSBBZmZpbmVUcmFuc2Zvcm1faAorCisjaW5jbHVkZSA8c3RyaW5nLmg+IC8v
Zm9yIG1lbWNweQorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisKKyNpZiBQTEFURk9S
TShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dBZmZpbmVUcmFuc2Zvcm0uaD4KKyNlbGlm
IFBMQVRGT1JNKENBSVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+CisjZWxpZiBQTEFURk9STShRVCkK
KyNpbmNsdWRlIDxRVHJhbnNmb3JtPgorI2VsaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlIDxT
a01hdHJpeC5oPgorI2VsaWYgUExBVEZPUk0oV1gpICYmIFVTRShXWEdDKQorI2luY2x1ZGUgPHd4
L2dyYXBoaWNzLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRQ
b2ludDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0
OworY2xhc3MgRmxvYXRRdWFkOworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm0gOiBwdWJsaWMgRmFz
dEFsbG9jQmFzZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBkb3VibGUgVHJhbnNmb3JtWzZdOwor
CisgICAgQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtKGRvdWJsZSBhLCBk
b3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOworCisgICAg
dm9pZCBzZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRv
dWJsZSBlLCBkb3VibGUgZik7CisKKyAgICB2b2lkIG1hcChkb3VibGUgeCwgZG91YmxlIHksIGRv
dWJsZSogeDIsIGRvdWJsZSogeTIpIGNvbnN0OworCisgICAgLy8gUm91bmRzIHRoZSBtYXBwZWQg
cG9pbnQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciB2YWx1ZS4KKyAgICBJbnRQb2ludCBtYXBQb2lu
dChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCisgICAgRmxvYXRQb2ludCBtYXBQb2ludChjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisKKyAgICAvLyBSb3VuZHMgdGhlIHJlc3VsdGluZyBtYXBw
ZWQgcmVjdGFuZ2xlIG91dC4gVGhpcyBpcyBoZWxwZnVsIGZvciBib3VuZGluZworICAgIC8vIGJv
eCBjb21wdXRhdGlvbnMgYnV0IG1heSBub3QgYmUgd2hhdCBpcyB3YW50ZWQgaW4gb3RoZXIgY29u
dGV4dHMuCisgICAgSW50UmVjdCBtYXBSZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKKworICAg
IEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworCisgICAgYm9vbCBp
c0lkZW50aXR5KCkgY29uc3Q7CisKKyAgICBkb3VibGUgYSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNmb3JtWzBdOyB9CisgICAgdm9pZCBzZXRBKGRvdWJsZSBhKSB7IG1fdHJhbnNmb3JtWzBdID0g
YTsgfQorICAgIGRvdWJsZSBiKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1bMV07IH0KKyAg
ICB2b2lkIHNldEIoZG91YmxlIGIpIHsgbV90cmFuc2Zvcm1bMV0gPSBiOyB9CisgICAgZG91Ymxl
IGMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVsyXTsgfQorICAgIHZvaWQgc2V0Qyhkb3Vi
bGUgYykgeyBtX3RyYW5zZm9ybVsyXSA9IGM7IH0KKyAgICBkb3VibGUgZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhbnNmb3JtWzNdOyB9CisgICAgdm9pZCBzZXREKGRvdWJsZSBkKSB7IG1fdHJhbnNm
b3JtWzNdID0gZDsgfQorICAgIGRvdWJsZSBlKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1b
NF07IH0KKyAgICB2b2lkIHNldEUoZG91YmxlIGUpIHsgbV90cmFuc2Zvcm1bNF0gPSBlOyB9Cisg
ICAgZG91YmxlIGYoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVs1XTsgfQorICAgIHZvaWQg
c2V0Rihkb3VibGUgZikgeyBtX3RyYW5zZm9ybVs1XSA9IGY7IH0KKworICAgIHZvaWQgcmVzZXQo
KTsKKworICAgIEFmZmluZVRyYW5zZm9ybSYgbXVsdGlwbHkoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7CisgICAgQWZmaW5lVHJhbnNmb3JtJiBtdWx0TGVmdChjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNjYWxlKGRvdWJsZSk7IAorICAgIEFmZmluZVRyYW5z
Zm9ybSYgc2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpOyAKKyAgICBBZmZpbmVUcmFuc2Zvcm0m
IHNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gsIGRvdWJsZSBzeSk7CisgICAgQWZmaW5lVHJhbnNm
b3JtJiByb3RhdGUoZG91YmxlIGQpOworICAgIEFmZmluZVRyYW5zZm9ybSYgcm90YXRlRnJvbVZl
Y3Rvcihkb3VibGUgeCwgZG91YmxlIHkpOworICAgIEFmZmluZVRyYW5zZm9ybSYgdHJhbnNsYXRl
KGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNoZWFyKGRvdWJs
ZSBzeCwgZG91YmxlIHN5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIGZsaXBYKCk7CisgICAgQWZm
aW5lVHJhbnNmb3JtJiBmbGlwWSgpOworICAgIEFmZmluZVRyYW5zZm9ybSYgc2tldyhkb3VibGUg
YW5nbGVYLCBkb3VibGUgYW5nbGVZKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXdYKGRvdWJs
ZSBhbmdsZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiBza2V3WShkb3VibGUgYW5nbGUpOworIAor
ICAgIGRvdWJsZSBkZXQoKSBjb25zdDsKKyAgICBib29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0Owor
ICAgIEFmZmluZVRyYW5zZm9ybSBpbnZlcnNlKCkgY29uc3Q7CisKKyAgICB2b2lkIGJsZW5kKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKKworICAgIGJvb2wg
b3BlcmF0b3I9PSAoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtMikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAobV90cmFuc2Zvcm1bMF0gPT0gbTIubV90cmFuc2Zvcm1bMF0KKyAgICAgICAg
ICAgICAmJiBtX3RyYW5zZm9ybVsxXSA9PSBtMi5tX3RyYW5zZm9ybVsxXQorICAgICAgICAgICAg
ICYmIG1fdHJhbnNmb3JtWzJdID09IG0yLm1fdHJhbnNmb3JtWzJdCisgICAgICAgICAgICAgJiYg
bV90cmFuc2Zvcm1bM10gPT0gbTIubV90cmFuc2Zvcm1bM10KKyAgICAgICAgICAgICAmJiBtX3Ry
YW5zZm9ybVs0XSA9PSBtMi5tX3RyYW5zZm9ybVs0XQorICAgICAgICAgICAgICYmIG1fdHJhbnNm
b3JtWzVdID09IG0yLm1fdHJhbnNmb3JtWzVdKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KKworICAgIC8vICp0aGlzID0gKnRoaXMgKiB0IChpLmUuLCBhIG11bHRSaWdo
dCkKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIG9wZXJhdG9yKj0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0KQorICAgIHsKKyAgICAgICAgKnRoaXMgPSAqdGhpcyAqIHQ7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisgICAgCisgICAgLy8gcmVzdWx0ID0gKnRoaXMgKiB0IChpLmUuLCBhIG11
bHRSaWdodCkKKyAgICBBZmZpbmVUcmFuc2Zvcm0gb3BlcmF0b3IqKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdCkgY29uc3QKKyAgICB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQgPSB0
OworICAgICAgICByZXN1bHQubXVsdExlZnQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworI2lmIFBMQVRGT1JNKENHKQorICAgIG9wZXJhdG9yIENHQWZmaW5lVHJhbnNm
b3JtKCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICBvcGVyYXRvciBjYWlyb19t
YXRyaXhfdCgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgb3BlcmF0b3IgUVRyYW5z
Zm9ybSgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oU0tJQSkKKyAgICBvcGVyYXRvciBTa01hdHJp
eCgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oV1gpICYmIFVTRShXWEdDKQorICAgIG9wZXJhdG9y
IHd4R3JhcGhpY3NNYXRyaXgoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQg
c2V0TWF0cml4KGNvbnN0IFRyYW5zZm9ybSBtKQorICAgIHsKKyAgICAgICAgaWYgKG0gJiYgbSAh
PSBtX3RyYW5zZm9ybSkKKyAgICAgICAgICAgIG1lbWNweShtX3RyYW5zZm9ybSwgbSwgc2l6ZW9m
KFRyYW5zZm9ybSkpOworICAgIH0KKworICAgIFRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKK307CisK
K0FmZmluZVRyYW5zZm9ybSBtYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QpOworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRX
aW5jZS5jcHAJKHJldmlzaW9uIDU0MDA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
IAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVz
LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgpAQCAt
MTE0Myw2ICsxMTQ0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lM
YXkKICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBtX2RhdGEt
PmNvbmNhdENUTSh0cmFuc2Zvcm0pOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0
Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7CiAgICAgbV9kYXRh
LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKQEAgLTE1MzEsNiArMTUzNywxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgR3JhZGllbnRGaWxsKGRjLCB0di5k
YXRhKCksIHR2LnNpemUoKSwgbWVzaC5kYXRhKCksIG1lc2guc2l6ZSgpLCB2ZXJ0aWNhbCA/IEdS
QURJRU5UX0ZJTExfUkVDVF9WIDogR1JBRElFTlRfRklMTF9SRUNUX0gpOwogfQogCitBZmZpbmVU
cmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RhdGEtPm1fdHJhbnNmb3JtOworfQorCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFw
aGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS0+bV90cmFu
c2Zvcm07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4
dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBo
aWNzQ29udGV4dFd4LmNwcAkocmV2aXNpb24gNTQwMDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCkBA
IC0zNTksNiArMzYwLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cigKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3ND
b250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKK30KKwogVHJhbnNmb3JtYXRpb25NYXRyaXgg
R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogeyAKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpAQCAtNDcxLDYgKzQ3OCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1G
aWxsQ29sCiAgICAgICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0QnJ1c2god3hCcnVzaChjb2xvcikp
OwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuOworfQorCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L1BhdGhXeC5jcHAJKHJldmlzaW9uIDU0MDA3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC0y
MDIsNiArMjAzLDE0IEBAIHZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIK
ICNlbmRpZgogfQogCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkgCit7CisjaWYgVVNFKFdYR0MpCisgICAgaWYgKG1fcGF0aCkKKyAgICAgICAg
bV9wYXRoLT5UcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyNlbmRpZgorfQorCiB2b2lkIFBhdGg6OnRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSAKIHsKICNpZiBV
U0UoV1hHQykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3JtYXRp
b25NYXRyaXhXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcAkocmV2aXNpb24gNTQwMDcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4V3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCiAKICNpbmNsdWRlICJBc3NlcnRpb25zLmgiCkBAIC00NSw2ICs0NiwxNSBAQCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6b3BlcmF0b3Igd3hHcmFwaGljCiAgICAgd3hHcmFwaGljc01hdHJpeCBt
YXRyaXggPSByZW5kZXJlci0+Q3JlYXRlTWF0cml4KGEoKSwgYigpLCBjKCksIGQoKSwgZSgpLCBm
KCkpOwogICAgIHJldHVybiBtYXRyaXg7CiB9CisKK0FmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3Ig
d3hHcmFwaGljc01hdHJpeCgpIGNvbnN0Cit7CisgICAgd3hHcmFwaGljc1JlbmRlcmVyKiByZW5k
ZXJlciA9IHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7CisgICAgQVNT
RVJUKHJlbmRlcmVyKTsKKyAgICAKKyAgICB3eEdyYXBoaWNzTWF0cml4IG1hdHJpeCA9IHJlbmRl
cmVyLT5DcmVhdGVNYXRyaXgoYSgpLCBiKCksIGMoKSwgZCgpLCBlKCksIGYoKSk7CisgICAgcmV0
dXJuIG1hdHJpeDsKK30KICNlbmRpZgogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47795</attachid>
            <date>2010-01-31 11:27:05 -0800</date>
            <delta_ts>2010-01-31 11:52:34 -0800</delta_ts>
            <desc>reimplementation of AffineTransformation</desc>
            <filename>affineTransform-1.patch</filename>
            <type>text/plain</type>
            <size>57703</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDExMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMyIEBACisyMDEwLTAxLTMxICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGJhY2sgYW4gQWZmaW5lVHJhbnNmb3JtIGNsYXNzIGZvciB1c2UgYnkgU1ZHCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzc1MAorCisgICAgICAgIFRo
ZXNlIGFyZSB0aGUgZmlyc3Qgc3RlcHMgb24gcmVpbXBsZW1lbnRpbmcgQWZmaW5lVHJhbnNmb3Jt
LiBVbmxpa2UKKyAgICAgICAgdGhlIG9sZCBhZmZpbmUgY29kZSwgdGhpcyBvbmUgaXMgcGxhdGZv
cm0gaW5kZXBlbmRlbnQgbGlrZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4KKyAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGhhcyB0aGUgYmVuZWZpdCwgdGhhdCBpdCBzdG9yZXMganVzdCA2IGRvdWJsZXMg
aW5zdGVhZCBvZgorICAgICAgICAxNiBpbiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4gVGhlIGNhbGN1
bGF0aW9ucyBvZiB0cmFuc2Zvcm1hdGlvbnMgYXJlIG5vdCB0aGF0CisgICAgICAgIGNvbXBsZXgg
YW5kIGNhbiBpbXByb3ZlIHRoZSBtZW1vcnkgdXNhZ2UgYW5kIHNwZWVkIG9mIFNWRy4KKyAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGNhbiBiZSB1c2VkIGJ5IEhUTUwgQ2FudmFzM0Qgb3IgU1ZHLCBz
aW5jZSB0aGV5IGFyZSAyRCByZWxhdGVkIChhdAorICAgICAgICBsZWFzdCBmb3IgdGhlIG1vbWVu
dCkuCisgICAgICAgIEhUTUwgQ2FudmFzIGlzIHRoZSBmaXJzdCB0aGF0IG1ha2VzIHVzZSBvZiB0
aGUgbmV3IEFmZmluZVRyYW5zZm9ybS4gTmV4dCBwYXRjaGVzCisgICAgICAgIHdpbGwgaW50cm9k
dWNlIHRoZSBhZmZpbmUgY29kZSB0byBTVkcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGUg
bmV3IEFmZmluZVRyYW5zZm9ybWF0aW9uIGNvZGUgaXMgdGVzdGVkIGJ5IGZhc3QvY2FudmFzLgor
CisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cm90
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNQ
b2ludEluUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OndpbGxEcmF3KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmg6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJh
bnNmb3JtYXRpb25NYXRyaXhDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm06Om9wZXJhdG9yIGNhaXJvX21hdHJpeF90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmdldEFmZmluZUNUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgQ0dBZmZpbmVU
cmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29u
dGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0QWZm
aW5lQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldEFmZmluZUNUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNvbmNhdENUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIFFUcmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFu
c2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25N
YXRyaXhTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0
b3IgU2tNYXRyaXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjphZmZpbmVUcmFuc2Zv
cm1EZWNvbXBvc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWZmaW5lVHJhbnNmb3JtQ29tcG9zZSk6
CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnJlc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybTo6c2V0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybTo6aXNJZGVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm06OmRldCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmlzSW52ZXJ0aWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmludmVyc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm06Om11bHRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybTo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2Nh
bGUpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzY2FsZU5vblVuaWZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpyb3RhdGVGcm9tVmVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6ZmxpcFgpOgorICAgICAgICAoV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtOjpmbGlwWSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
OnNoZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2tldyk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNrZXdYKToKKyAgICAgICAgKFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybTo6c2tld1kpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZU1hcEJldHdl
ZW5SZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcCk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm06OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L0FmZmluZVRyYW5zZm9ybS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybTo6YSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNldEEpOgorICAg
ICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpiKToKKyAgICAgICAgKFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybTo6c2V0Qik6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
OmMpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzZXRDKToKKyAgICAgICAg
KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6ZCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm06OnNldEQpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjplKToK
KyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2V0RSk6CisgICAgICAgIChXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm06OmYpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtOjpzZXRGKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3I9
PSApOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IqPSk6CisgICAgICAgIChX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm06OnNldE1hdHJpeCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRBZmZpbmVDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNz
Q29udGV4dFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0QWZm
aW5lQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9U
cmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybTo6b3BlcmF0b3Igd3hHcmFwaGljc01hdHJpeCk6CisKIDIwMTAtMDEtMzEgIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGlt
b3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNTQxMTApCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2Niw2ICs0NjYsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChM
T0NBTF9TUkNfRklMRVMpIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAg
XAogCXBsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25NYXRyaXhTa2lhLmNwcCBc
CiAJXAorCXBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcCBc
CiAJcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bi5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbi5jcHAgXApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1NDExMCkKKysrIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MDEsNiArMTYwMSw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Vbml0QmV6
aWVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbi5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTQxMTApCisr
KyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjEzNiw2ICsyMTM2LDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25NYXRyaXhTa2lhLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFu
c2Zvcm0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fm
ZmluZVRyYW5zZm9ybS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1NDExMCkKKysrIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTgwNCw2ICs4MDQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QZW4uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50
ZWRGb250RGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNw
cCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDU0MTEwKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQxMDcsNiArMjQxMDcsMTMgQEAKIAkJCQkJ
TmFtZT0idHJhbnNmb3JtcyINCiAJCQkJCT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x0cmFuc2Zvcm1zXEFmZmluZVRyYW5zZm9ybS5jcHAi
DQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXNcQWZmaW5lVHJhbnNmb3JtLmgiDQor
CQkJCQkJPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXHRyYW5zZm9ybXNcSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCINCiAJCQkJCQk+
DQogCQkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDU0MTEwKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMTMsNiArMTMxMyw4IEBACiAJCTg0
QTgxRjNFMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8q
IFNvdXJjZUFscGhhLmggKi87IH07CiAJCTg0QTgxRjQxMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3Vy
Y2VHcmFwaGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNwcCAqLzsgfTsK
IAkJODRBODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQwMEZDN0UwMjcwMDk1
NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggKi87IH07CisJCTg0RDBDNDA0MTExNUYxRDQwMDE4QUEz
NCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODREMEM0MDMxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9y
bS5jcHAgKi87IH07CisJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zv
cm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0RDBD
NDA1MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCAqLzsgfTsKIAkJODUwMDRE
OTQwQUNFRUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAwNEQ4ODBBQ0VFQUVGMDBDNDM4RjYg
LyogRE9NU1ZHRGVmc0VsZW1lbnQuaCAqLzsgfTsKIAkJODUwMDREOTUwQUNFRUFFRjAwQzQzOEY2
IC8qIERPTVNWR0RlZnNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODUwMDREODkwQUNFRUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVt
ZW50Lm1tICovOyB9OwogCQk4NTAwNEQ5NjBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRGVzY0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1
MDA0RDhBMEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZXNjRWxlbWVudC5oICovOyB9OwpAQCAt
NjcxNiw2ICs2NzE4LDggQEAKIAkJODRCMkIxRjcwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVL
ZXlHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQ29yZUtleUdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCMkIxRjgwNTZCRUYzQTAwRDJCNzcx
IC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViQ29yZUtleUdlbmVyYXRvci5tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCMkIyNEYw
NTZCRjE1RjAwRDJCNzcxIC8qIFNTTEtleUdlbmVyYXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNTTEtleUdlbmVyYXRv
ck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CisJCTg0RDBDNDAzMTExNUYxRDQwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWZmaW5lVHJhbnNmb3JtLmNw
cDsgcGF0aCA9IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODREMEM0MDUxMTE1RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9y
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBZmZpbmVUcmFuc2Zvcm0uaDsg
cGF0aCA9IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg1MDA0RDg4MEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZWZzRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRGVmc0VsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUwMDREODkwQUNFRUFFRjAwQzQzOEY2IC8q
IERPTVNWR0RlZnNFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IERPTVNWR0RlZnNFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NTAwNEQ4QTBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRGVzY0VsZW1lbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0Rlc2NFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDg5OSw2ICsxMDkwMyw4IEBACiAJCTQ5RTkxMUIyMEVG
ODZEMjcwMDlEMENBRiAvKiB0cmFuc2Zvcm1zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk4NEQwQzQwNTExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJh
bnNmb3JtLmggKi8sCisJCQkJODREMEM0MDMxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5z
Zm9ybS5jcHAgKi8sCiAJCQkJNDlFOTExQjUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJh
bnNmb3JtT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlENURDMjcwRjQyM0E3MzAwOEYyMEZEIC8qIE1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUQ1REMyODBGNDIzQTczMDA4
RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKQEAgLTE4NDY1LDYgKzE4
NDcxLDcgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8q
IFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEz
NCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjA2MzksNiArMjA2NDYs
NyBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVD
RjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg0RDBDNDA0MTExNUYx
RDQwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShy
ZXZpc2lvbiA1NDExMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1
ZGUgIkNhbnZhc0dyYWRpZW50LmgiCkBAIC0zNTcsNyArMzU3LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNjYWxlKGZsbwogICAgIGlmICghaXNmaW5pdGUoc3gpIHwgIWlzZmlu
aXRlKHN5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbmV3
VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3
VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKICAgICBuZXdUcmFuc2Zvcm0uc2NhbGVO
b25Vbmlmb3JtKHN4LCBzeSk7CiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkp
IHsKICAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsKQEAgLTM2Niw3ICsz
NjYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2NhbGUoZmxvCiAKICAgICBz
dGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwogICAgIGMtPnNjYWxlKEZsb2F0U2l6
ZShzeCwgc3kpKTsKLSAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCku
c2NhbGVOb25Vbmlmb3JtKDEuMC9zeCwgMS4wL3N5KSk7CisgICAgbV9wYXRoLnRyYW5zZm9ybShB
ZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oMS4wIC8gc3gsIDEuMCAvIHN5KSk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJh
ZGlhbnMpCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnJvdGF0ZShmbAogICAgIGlmICghaXNmaW5pdGUoYW5nbGVJblJhZGlhbnMpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgp
Lm1fdHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgp
Lm1fdHJhbnNmb3JtOwogICAgIG5ld1RyYW5zZm9ybS5yb3RhdGUoYW5nbGVJblJhZGlhbnMgLyBw
aURvdWJsZSAqIDE4MC4wKTsKICAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkg
ewogICAgICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOwpAQCAtMzg5LDcgKzM4
OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmwKIAogICAgIHN0
YXRlKCkubV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+cm90YXRlKGFuZ2xlSW5S
YWRpYW5zKTsKLSAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkucm90
YXRlKC1hbmdsZUluUmFkaWFucyAvIHBpRG91YmxlICogMTgwLjApKTsKKyAgICBtX3BhdGgudHJh
bnNmb3JtKEFmZmluZVRyYW5zZm9ybSgpLnJvdGF0ZSgtYW5nbGVJblJhZGlhbnMgLyBwaURvdWJs
ZSAqIDE4MC4wKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2xh
dGUoZmxvYXQgdHgsIGZsb2F0IHR5KQpAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjp0cmFuc2xhdGUKICAgICBpZiAoIWlzZmluaXRlKHR4KSB8ICFpc2Zp
bml0ZSh0eSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG5l
d1RyYW5zZm9ybSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIG5l
d1RyYW5zZm9ybSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CiAgICAgbmV3VHJhbnNmb3JtLnRyYW5z
bGF0ZSh0eCwgdHkpOwogICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CiAg
ICAgICAgIHN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CkBAIC00MTIsNyArNDEyLDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZQogCiAgICAgc3RhdGUo
KS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT50cmFuc2xhdGUodHgsIHR5KTsK
LSAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKC10
eCwgLXR5KSk7CisgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xh
dGUoLXR4LCAtdHkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5z
Zm9ybShmbG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBtMjIsIGZsb2F0IGR4
LCBmbG9hdCBkeSkKQEAgLTQyNyw4ICs0MjcsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dHJhbnNmb3JtCiAgICAgICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0yMikg
fCAhaXNmaW5pdGUoZHkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm0obTExLCBtMTIsIG0yMSwgbTIyLCBkeCwgZHkpOwotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG5ld1RyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIHN0YXRlKCkubV90cmFuc2Zv
cm07CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBtMjIsIGR4
LCBkeSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIHN0
YXRlKCkubV90cmFuc2Zvcm07CiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkp
IHsKICAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNDQ5LDcgKzQ0OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRUcmFuc2YKICAgICAgICAgIWlzZmluaXRlKG0xMikgfCAhaXNmaW5pdGUobTIyKSB8ICFpc2Zp
bml0ZShkeSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0
bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRl
KCkubV90cmFuc2Zvcm07CiAgICAgaWYgKCFjdG0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBjLT5jb25jYXRDVE0oYy0+Z2V0Q1RNKCkuaW52ZXJzZSgpKTsKQEAgLTcwOCw3
ICs3MDgsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNQb2ludEluCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEZsb2F0UG9pbnQgcG9pbnQoeCwgeSk7Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggY3RtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gY3RtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKICAgICBGbG9hdFBvaW50IHRyYW5z
Zm9ybWVkUG9pbnQgPSBjdG0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50KTsKICAgICByZXR1cm4g
bV9wYXRoLmNvbnRhaW5zKHRyYW5zZm9ybWVkUG9pbnQpOwogfQpAQCAtMTI0MSw3ICsxMjQxLDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KAogCiAgICAgRmxvYXRS
ZWN0IGRpcnR5UmVjdCA9IHI7CiAgICAgaWYgKG9wdGlvbnMgJiBDYW52YXNXaWxsRHJhd0FwcGx5
VHJhbnNmb3JtKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IHN0YXRlKCku
bV90cmFuc2Zvcm07CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBzdGF0ZSgpLm1fdHJh
bnNmb3JtOwogICAgICAgICBkaXJ0eVJlY3QgPSBjdG0ubWFwUmVjdChyKTsKICAgICB9CiAgICAg
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgJKHJldmlzaW9uIDU0MTEwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRfaAogI2RlZmluZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRfaAogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKQEAgLTIxOCw3ICsyMTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICBTdHJpbmcgbV9zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxw
aGE7CiAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2dsb2JhbENvbXBvc2l0ZTsKLSAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogICAgICAgICAgICAgYm9vbCBtX2ludmVydGli
bGVDVE07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRleHQgc3RhdGUuCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDU0
MTEwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
b25zdCBpbnQgY01pc3NwZWxsaW5nTGluZVBhdHRlcm5XaWR0aCA9IDQ7CiAgICAgY29uc3QgaW50
IGNNaXNzcGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGggPSAxOwogCisgICAgY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOwogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR2VuZXJhdG9yOwogICAgIGNs
YXNzIEdyYWRpZW50OwpAQCAtMzA0LDcgKzMwNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRSZWN0Jik7CiAK
ICAgICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAg
ICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGdldENUTSgpIGNvbnN0OworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gZ2V0QWZmaW5lQ1RNKCkgY29uc3Q7CiAKICNpZiBPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFU
KQogICAgICAgICB2b2lkIHNldEJpdG1hcChQYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4pOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDU0MTEwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAg
dHlwZWRlZiBQbGF0Zm9ybVBhdGgqIFBsYXRmb3JtUGF0aFB0cjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogICAgIGNsYXNzIEZsb2F0UG9pbnQ7
CiAgICAgY2xhc3MgRmxvYXRSZWN0OwogICAgIGNsYXNzIEZsb2F0U2l6ZTsKQEAgLTE0NSw2ICsx
NDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUxp
bmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAogICAgICAgICB2b2lk
IGFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24pIGNvbnN0OworICAgICAgICB2
b2lkIHRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICAgICAgdm9pZCB0cmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAogICAgIHByaXZhdGU6CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gNTQxMTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogCiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAKKyNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYWlyb1BhdGguaCIKICNpbmNsdWRlICJGRUdhdXNzaWFu
Qmx1ci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjE2LDYgKzIxNywxNCBAQCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdlCiAgICAgcmV0dXJuIFRyYW5zZm9y
bWF0aW9uTWF0cml4KG0ueHgsIG0ueXgsIG0ueHksIG0ueXksIG0ueDAsIG0ueTApOwogfQogCitB
ZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAorewor
ICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fbWF0cml4X3Qg
bTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsKK30KKwogY2Fpcm9fdCog
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBt
X2RhdGEtPmNyOwpAQCAtODAyLDYgKzgxMSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IFRyCiAgICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKIH0KIAor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY29uc3QgY2Fpcm9fbWF0cml4
X3QgbWF0cml4ID0gY2Fpcm9fbWF0cml4X3QodHJhbnNmb3JtKTsKKyAgICBjYWlyb190cmFuc2Zv
cm0oY3IsICZtYXRyaXgpOworICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Cit9CisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRS
ZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNhaXJvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oCShyZXZpc2lv
biA1NDExMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKICAgICB2b2lkIHJv
dGF0ZShmbG9hdCk7CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KTsKKyAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIGNvbmNhdENUTShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcigpIHsgbV90cmFuc3BhcmVuY3lDb3VudCsrOyB9CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVu
Y3lMYXllcigpIHsgbV90cmFuc3BhcmVuY3lDb3VudC0tOyB9CkBAIC04NSw2ICs4Niw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIHt9CiAgICAgdm9pZCByb3Rh
dGUoZmxvYXQpIHt9CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSB7fQorICAgIHZv
aWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIHt9CiAgICAgdm9pZCBjb25jYXRD
VE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSB7fQogICAgIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcigpIHt9CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIHt9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCShyZXZp
c2lvbiA1NDExMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlBhdGguaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC0zMjYsNiArMzI3LDE0IEBAIHZvaWQgUGF0aDo6YXBw
bHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXIKICAgICBjYWlyb19wYXRoX2Rlc3Ryb3kocGF0aCk7
CiB9CiAKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnMp
Cit7CisgICAgY2Fpcm9fdCogbV9jciA9IHBsYXRmb3JtUGF0aCgpLT5tX2NyOworICAgIGNhaXJv
X21hdHJpeF90IGNfbWF0cml4ID0gY2Fpcm9fbWF0cml4X3QodHJhbnMpOworICAgIGNhaXJvX21h
dHJpeF9pbnZlcnQoJmNfbWF0cml4KTsKKyAgICBjYWlyb190cmFuc2Zvcm0obV9jciwgJmNfbWF0
cml4KTsKK30KKwogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zKQogewogICAgIGNhaXJvX3QqIG1fY3IgPSBwbGF0Zm9ybVBhdGgoKS0+bV9jcjsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRy
aXhDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAkocmV2aXNpb24gNTQxMTApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC00Niw2ICs0NywyMCBAQCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgY2Fpcm9fbWF0CiAgICAgcmV0dXJuIG07CiB9
CiAKK0FmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgY2Fpcm9fbWF0cml4X3QoKSBjb25zdAorewor
ICAgIGNhaXJvX21hdHJpeF90IG07CisKKyAgICBjYWlyb19tYXRyaXhfaW5pdCAoJm0sCisgICAg
ICAgICAgICAgICAgICAgICAgIGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYigpLAorICAg
ICAgICAgICAgICAgICAgICAgICBjKCksCisgICAgICAgICAgICAgICAgICAgICAgIGQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgZSgpLAorICAgICAgICAgICAgICAgICAgICAgICBmKCkpOwor
ICAgIHJldHVybiBtOworfQorCiB9CiAKIC8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAko
cmV2aXNpb24gNTQxMTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRQcml2YXRlLmgiCkBAIC05NTgsNiArOTU5LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Ojp0cmFuc2xhdGUoZmxvYXQgeCwKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0Q29uY2F0Q1RN
KHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOworICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRy
YW5zZm9ybSk7CisgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlk
ZW50aXR5ID0gZmFsc2U7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQpAQCAtOTY3LDYgKzk3NywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IFRyCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3du
VG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRl
eHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0Cit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdCA9IENH
Q29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSh0LmEsIHQuYiwgdC5jLCB0LmQsIHQudHgsIHQudHkpOworfQorCiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gdCA9IENHQ29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZUNHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCShyZXZpc2lvbiA1NDExMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShj
b25zdCBGbG9hdFNpemUmKSB7fQogICAgIHZvaWQgcm90YXRlKGZsb2F0KSB7fQogICAgIHZvaWQg
dHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkge30KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4Jikge30KICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSB7fQogICAgIHZv
aWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSB7fQpAQCAtODgsNiArODksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKICAgICB2b2lkIHJvdGF0ZShmbG9hdCk7
CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KTsKKyAgICB2b2lkIGNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcigpIHsgbV90
cmFuc3BhcmVuY3lDb3VudCsrOyB9CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIHsg
bV90cmFuc3BhcmVuY3lDb3VudC0tOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXRoQ0cuY3BwCShyZXZpc2lvbiA1NDExMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0aENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaWYg
UExBVEZPUk0oQ0cpCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBw
bGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMzQ2LDYgKzM0
NywxNSBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyCiAgICAgQ0dQ
YXRoQXBwbHkobV9wYXRoLCAmcGluZm8sIENHUGF0aEFwcGxpZXJUb1BhdGhBcHBsaWVyKTsKIH0K
IAordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit7CisgICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwor
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybUNHID0gdHJhbnNmb3JtOworICAgIENHUGF0
aEFkZFBhdGgocGF0aCwgJnRyYW5zZm9ybUNHLCBtX3BhdGgpOworICAgIENHUGF0aFJlbGVhc2Uo
bV9wYXRoKTsKKyAgICBtX3BhdGggPSBwYXRoOworfQorCiB2b2lkIFBhdGg6OnRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIENHTXV0YWJsZVBh
dGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAko
cmV2aXNpb24gNTQxMTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9y
bWF0aW9uTWF0cml4Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpZiBQTEFURk9STShDRykKQEAgLTQz
LDYgKzQ0LDE2IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBDR0FmZmluZVQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChm
KCkpKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBDR0FmZmluZVRyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIENHQWZmaW5lVHJhbnNmb3JtTWFrZShuYXJyb3dQcmVjaXNp
b25Ub0NHRmxvYXQoYSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdChiKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGMoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoZCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChlKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGYoKSkp
OworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShDRykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3Bw
CShyZXZpc2lvbiA1NDExMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
cGhpY3NDb250ZXh0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAi
Q29sb3IuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zOTEsNiArMzkyLDEyIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcigKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgp
OworfQorCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNv
bnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTQ1MSw2ICs0NTgsMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCShyZXZpc2lvbiA1NDExMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIAor
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAg
LTE0Niw2ICsxNDcsMTEgQEAgdm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGll
cgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA1NDEx
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgog
I2VuZGlmCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKQEAgLTI3
NSw2ICsyNzYsMTMgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dAog
ICAgIHJldHVybiBtX2RhdGEtPnAoKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sKKyAgICBRVHJhbnNmb3JtIG1hdHJpeChwbGF0
Zm9ybUNvbnRleHQoKS0+Y29tYmluZWRUcmFuc2Zvcm0oKSk7CisgICAgcmV0dXJuIEFmZmluZVRy
YW5zZm9ybShtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0yMSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0yMigpLCBtYXRyaXguZHgoKSwgbWF0cml4LmR5
KCkpOworfQorCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgp
IGNvbnN0CiB7CiAgICAgUVRyYW5zZm9ybSBtYXRyaXgocGxhdGZvcm1Db250ZXh0KCktPmNvbWJp
bmVkVHJhbnNmb3JtKCkpOwpAQCAtMTE4OCw2ICsxMTk2LDI0IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKICAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpB
bnRpYWxpYXNpbmcsIGFudGlBbGlhcyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5wKCktPnNldFdv
cmxkVHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJ1ZSk7CisKKyAgICAvLyBUcmFuc2Zvcm1hdGlvbnMg
dG8gdGhlIGNvbnRleHQgc2hvdWxkbid0IHRyYW5zZm9ybSB0aGUgY3VycmVudFBhdGguCisgICAg
Ly8gV2UgaGF2ZSB0byB1bmRvIGV2ZXJ5IGNoYW5nZSBtYWRlIHRvIHRoZSBjb250ZXh0IGZyb20g
dGhlIGN1cnJlbnRQYXRoCisgICAgLy8gdG8gYXZvaWQgd3JvbmcgZHJhd2luZ3MuCisgICAgaWYg
KCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSAmJiB0cmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpIHsKKyAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXggPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOwor
ICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aCAqIG1hdHJp
eDsKKyAgICAgICAgbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNm
b3JtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisgICAgfQorfQorCisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9QYXRoUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvUGF0aFF0LmNwcAkocmV2aXNpb24gNTQxMTApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gICA8emFja0BrZGUub3JnPgog
ICogICAgICAgICAgICAgICAyMDA2IFJvYiBCdWlzICAgICA8YnVpc0BrZGUub3JnPgotICogICAg
ICAgICAgICAgICAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogICAgICAg
ICAgICAgICAyMDA5LCAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICoKICAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzAsMTIgKzMwLDEzIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3Ryb2tlU3R5bGVB
cHBsaWVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDxR
UGFpbnRlclBhdGg+CiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4KICNpbmNsdWRlIDxRU3RyaW5nPgpA
QCAtMzc5LDYgKzM4MCwxMSBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBs
aWVyCiAgICAgfQogfQogCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKK3sKKyAgICBtX3BhdGggPSBRVHJhbnNmb3JtKHRyYW5zZm9ybSkubWFw
KG1fcGF0aCk7Cit9CisKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0pCiB7CiAgICAgbV9wYXRoID0gUVRyYW5zZm9ybSh0cmFuc2Zvcm0p
Lm1hcChtX3BhdGgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zv
cm1hdGlvbk1hdHJpeFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwCShyZXZpc2lvbiA1NDExMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTM2LDYgKzM3LDExIEBAIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBRVHJhbnNmb3IKICAgICByZXR1cm4gUVRyYW5zZm9y
bShtMTEoKSwgbTEyKCksIG0xNCgpLCBtMjEoKSwgbTIyKCksIG0yNCgpLCBtNDEoKSwgbTQyKCks
IG00NCgpKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBRVHJhbnNmb3JtKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gUVRyYW5zZm9ybShhKCksIGIoKSwgYygpLCBkKCksIGUoKSwgZigp
KTsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2
aXNpb24gNTQxMTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAorI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKQEAgLTQzOSw2ICs0NDAsMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKAogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZpbmVUcmFuc2Zvcm0mIGFmZmluZSkKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5jb25jYXQoYWZmaW5lKTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgeGZvcm0pCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTgwNSw2ICs4MTMsMTcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCitBZmZpbmVUcmFuc2Zvcm0gR3Jh
cGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAoreworICAgIGNvbnN0IFNrTWF0cml4
JiBtID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3RhbE1hdHJpeCgpOworICAg
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oU2tTY2FsYXJUb0RvdWJsZShtLmdldFNjYWxlWCgpKSwg
ICAgICAvLyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0u
Z2V0U2tld1koKSksICAgICAgIC8vIGIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2Nh
bGFyVG9Eb3VibGUobS5nZXRTa2V3WCgpKSwgICAgICAgLy8gYworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFNjYWxlWSgpKSwgICAgICAvLyBkCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0uZ2V0VHJhbnNsYXRlWCgp
KSwgIC8vIGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5n
ZXRUcmFuc2xhdGVZKCkpKTsgLy8gZgorfQorCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGlj
c0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgY29uc3QgU2tNYXRyaXgmIG0gPSBwbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvdGFsTWF0cml4KCk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAJKHJldmlzaW9uIDU0MTEwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBh
dGguaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBs
aWVyLmgiCkBAIC0yMTQsNiArMjE1LDExIEBAIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywg
UGF0aEFwcGxpZXIKICAgICB9CiB9CiAKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgeGZvcm0pCit7CisgICAgbV9wYXRoLT50cmFuc2Zvcm0oeGZvcm0pOworfQor
CiB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgeGZvcm0p
CiB7CiAgICAgbV9wYXRoLT50cmFuc2Zvcm0oeGZvcm0pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1RyYW5zZm9ybWF0aW9uTWF0cml4U2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1RyYW5zZm9ybWF0aW9uTWF0cml4U2tp
YS5jcHAJKHJldmlzaW9uIDU0MTEwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1RyYW5zZm9ybWF0aW9uTWF0cml4U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIC8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAj
aW5jbHVkZSAiU2tpYVV0aWxzLmgiCkBAIC01NCw0ICs1NSwyNCBAQCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6b3BlcmF0b3IgU2tNYXRyaXgoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorQWZmaW5l
VHJhbnNmb3JtOjpvcGVyYXRvciBTa01hdHJpeCgpIGNvbnN0Cit7CisgICAgU2tNYXRyaXggcmVz
dWx0OworCisgICAgcmVzdWx0LnNldFNjYWxlWChXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihhKCkp
KTsKKyAgICByZXN1bHQuc2V0U2tld1goV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoYygpKSk7Cisg
ICAgcmVzdWx0LnNldFRyYW5zbGF0ZVgoV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoZSgpKSk7CisK
KyAgICByZXN1bHQuc2V0U2NhbGVZKFdlYkNvcmVEb3VibGVUb1NrU2NhbGFyKGQoKSkpOworICAg
IHJlc3VsdC5zZXRTa2V3WShXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihiKCkpKTsKKyAgICByZXN1
bHQuc2V0VHJhbnNsYXRlWShXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihmKCkpKTsKKworICAgIC8v
IEZJWE1FOiBTZXQgcGVyc3BlY3RpdmUgcHJvcGVybHkuCisgICAgcmVzdWx0LnNldFBlcnNwWCgw
KTsKKyAgICByZXN1bHQuc2V0UGVyc3BZKDApOworICAgIHJlc3VsdC5zZXQoU2tNYXRyaXg6OmtN
UGVyc3AyLCBTS19TY2FsYXIxKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9BZmZpbmVUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAg
ICAgICAgICAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisKKyNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIGFmZmluZVRyYW5z
Zm9ybURlY29tcG9zZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCwgZG91YmxlIHNyWzld
KQoreworICAgIEFmZmluZVRyYW5zZm9ybSBtKG1hdHJpeCk7CisKKyAgICAvLyBDb21wdXRlIHNj
YWxpbmcgZmFjdG9ycworICAgIGRvdWJsZSBzeCA9IHNxcnQobS5hKCkgKiBtLmEoKSArIG0uYigp
ICogbS5iKCkpOworICAgIGRvdWJsZSBzeSA9IHNxcnQobS5jKCkgKiBtLmMoKSArIG0uZCgpICog
bS5kKCkpOworCisgICAgLy8gQ29tcHV0ZSBjcm9zcyBwcm9kdWN0IG9mIHRyYW5zZm9ybWVkIHVu
aXQgdmVjdG9ycy4gSWYgbmVnYXRpdmUsCisgICAgLy8gb25lIGF4aXMgd2FzIGZsaXBwZWQuCisg
ICAgaWYgKG0uYSgpICogbS5kKCkgLSBtLmMoKSAqIG0uYigpIDwgMC4wKSB7CisgICAgICAgIC8v
IEZsaXAgYXhpcyB3aXRoIG1pbmltdW0gdW5pdCB2ZWN0b3IgZG90IHByb2R1Y3QKKyAgICAgICAg
aWYgKG0uYSgpIDwgbS5kKCkpCisgICAgICAgICAgICBzeCA9IC1zeDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc3kgPSAtc3k7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHNjYWxlIGZyb20g
bWF0cml4CisgICAgbS5zY2FsZSgxLjAgLyBzeCwgMS4wIC8gc3kpOworCisgICAgLy8gQ29tcHV0
ZSByb3RhdGlvbgorICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKG0uYigpLCBtLmEoKSk7CisKKyAg
ICAvLyBSZW1vdmUgcm90YXRpb24gZnJvbSBtYXRyaXgKKyAgICBtLnJvdGF0ZShyYWQyZGVnKC1h
bmdsZSkpOworCisgICAgLy8gUmV0dXJuIHJlc3VsdHMKKyAgICBzclswXSA9IHN4OworICAgIHNy
WzFdID0gc3k7CisgICAgc3JbMl0gPSBhbmdsZTsKKyAgICBzclszXSA9IG0uYSgpOworICAgIHNy
WzRdID0gbS5iKCk7CisgICAgc3JbNV0gPSBtLmMoKTsKKyAgICBzcls2XSA9IG0uZCgpOworICAg
IHNyWzddID0gbS5lKCk7CisgICAgc3JbOF0gPSBtLmYoKTsKK30KKworc3RhdGljIHZvaWQgYWZm
aW5lVHJhbnNmb3JtQ29tcG9zZShBZmZpbmVUcmFuc2Zvcm0mIG0sIGNvbnN0IGRvdWJsZSBzcls5
XSkKK3sKKyAgICBtLnNldEEoc3JbM10pOworICAgIG0uc2V0Qihzcls0XSk7CisgICAgbS5zZXRD
KHNyWzVdKTsKKyAgICBtLnNldEQoc3JbNl0pOworICAgIG0uc2V0RShzcls3XSk7CisgICAgbS5z
ZXRGKHNyWzhdKTsKKyAgICBtLnJvdGF0ZShyYWQyZGVnKHNyWzJdKSk7CisgICAgbS5zY2FsZShz
clswXSwgc3JbMV0pOworfQorCitBZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybSgpCit7
CisgICAgc2V0TWF0cml4KDEsIDAsIDAsIDEsIDAsIDApOworfQorCitBZmZpbmVUcmFuc2Zvcm06
OkFmZmluZVRyYW5zZm9ybShkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwg
ZG91YmxlIGUsIGRvdWJsZSBmKQoreworICAgIHNldE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKTsK
K30KKwordm9pZCBBZmZpbmVUcmFuc2Zvcm06OnJlc2V0KCkKK3sKKyAgICBzZXRNYXRyaXgoMSwg
MCwgMCwgMSwgMCwgMCk7Cit9CisKK3ZvaWQgQWZmaW5lVHJhbnNmb3JtOjpzZXRNYXRyaXgoZG91
YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikK
K3sKKyAgICBtX3RyYW5zZm9ybVswXSA9IGE7CisgICAgbV90cmFuc2Zvcm1bMV0gPSBiOworICAg
IG1fdHJhbnNmb3JtWzJdID0gYzsKKyAgICBtX3RyYW5zZm9ybVszXSA9IGQ7CisgICAgbV90cmFu
c2Zvcm1bNF0gPSBlOworICAgIG1fdHJhbnNmb3JtWzVdID0gZjsKK30KKworYm9vbCBBZmZpbmVU
cmFuc2Zvcm06OmlzSWRlbnRpdHkoKSBjb25zdAoreworICAgIHJldHVybiAobV90cmFuc2Zvcm1b
MF0gPT0gMSAmJiBtX3RyYW5zZm9ybVsxXSA9PSAwCisgICAgICAgICAmJiBtX3RyYW5zZm9ybVsy
XSA9PSAwICYmIG1fdHJhbnNmb3JtWzNdID09IDEKKyAgICAgICAgICYmIG1fdHJhbnNmb3JtWzRd
ID09IDAgJiYgbV90cmFuc2Zvcm1bNV0gPT0gMCk7Cit9CisKK2RvdWJsZSBBZmZpbmVUcmFuc2Zv
cm06OmRldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtWzBdICogbV90cmFuc2Zv
cm1bM10gLSBtX3RyYW5zZm9ybVsxXSAqIG1fdHJhbnNmb3JtWzJdOworfQorCitib29sIEFmZmlu
ZVRyYW5zZm9ybTo6aXNJbnZlcnRpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGV0KCkgIT0g
MC4wOworfQorCitBZmZpbmVUcmFuc2Zvcm0gQWZmaW5lVHJhbnNmb3JtOjppbnZlcnNlKCkgY29u
c3QKK3sKKyAgICBkb3VibGUgZGV0ZXJtaW5hbnQgPSBkZXQoKTsKKyAgICBpZiAoZGV0ZXJtaW5h
bnQgPT0gMC4wKQorICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gcmVzdWx0OworICAgIHJlc3VsdC5tX3RyYW5zZm9ybVswXSA9IG1fdHJhbnNm
b3JtWzNdIC8gZGV0ZXJtaW5hbnQ7CisgICAgcmVzdWx0Lm1fdHJhbnNmb3JtWzFdID0gLW1fdHJh
bnNmb3JtWzFdIC8gZGV0ZXJtaW5hbnQ7CisgICAgcmVzdWx0Lm1fdHJhbnNmb3JtWzJdID0gLW1f
dHJhbnNmb3JtWzJdIC8gZGV0ZXJtaW5hbnQ7CisgICAgcmVzdWx0Lm1fdHJhbnNmb3JtWzNdID0g
bV90cmFuc2Zvcm1bMF0gLyBkZXRlcm1pbmFudDsKKyAgICByZXN1bHQubV90cmFuc2Zvcm1bNF0g
PSAobV90cmFuc2Zvcm1bMl0gKiBtX3RyYW5zZm9ybVs1XQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLSBtX3RyYW5zZm9ybVszXSAqIG1fdHJhbnNmb3JtWzRdKSAvIGRldGVybWluYW50Owor
ICAgIHJlc3VsdC5tX3RyYW5zZm9ybVs1XSA9IChtX3RyYW5zZm9ybVsxXSAqIG1fdHJhbnNmb3Jt
WzRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtIG1fdHJhbnNmb3JtWzBdICogbV90cmFu
c2Zvcm1bNV0pIC8gZGV0ZXJtaW5hbnQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBZmZp
bmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6bXVsdGlwbHkoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBvdGhlcikKK3sKKyAgICByZXR1cm4gKCp0aGlzKSAqPSBvdGhlcjsKK30KKworQWZmaW5l
VHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06Om11bHRMZWZ0KGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgb3RoZXIpCit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zOworICAgIAorICAgIHRyYW5z
Lm1fdHJhbnNmb3JtWzBdID0gb3RoZXIubV90cmFuc2Zvcm1bMF0gKiBtX3RyYW5zZm9ybVswXSAr
IG90aGVyLm1fdHJhbnNmb3JtWzFdICogbV90cmFuc2Zvcm1bMl07CisgICAgdHJhbnMubV90cmFu
c2Zvcm1bMV0gPSBvdGhlci5tX3RyYW5zZm9ybVswXSAqIG1fdHJhbnNmb3JtWzFdICsgb3RoZXIu
bV90cmFuc2Zvcm1bMV0gKiBtX3RyYW5zZm9ybVszXTsKKyAgICB0cmFucy5tX3RyYW5zZm9ybVsy
XSA9IG90aGVyLm1fdHJhbnNmb3JtWzJdICogbV90cmFuc2Zvcm1bMF0gKyBvdGhlci5tX3RyYW5z
Zm9ybVszXSAqIG1fdHJhbnNmb3JtWzJdOworICAgIHRyYW5zLm1fdHJhbnNmb3JtWzNdID0gb3Ro
ZXIubV90cmFuc2Zvcm1bMl0gKiBtX3RyYW5zZm9ybVsxXSArIG90aGVyLm1fdHJhbnNmb3JtWzNd
ICogbV90cmFuc2Zvcm1bM107CisgICAgdHJhbnMubV90cmFuc2Zvcm1bNF0gPSBvdGhlci5tX3Ry
YW5zZm9ybVs0XSAqIG1fdHJhbnNmb3JtWzBdICsgb3RoZXIubV90cmFuc2Zvcm1bNV0gKiBtX3Ry
YW5zZm9ybVsyXSArIG1fdHJhbnNmb3JtWzRdOworICAgIHRyYW5zLm1fdHJhbnNmb3JtWzVdID0g
b3RoZXIubV90cmFuc2Zvcm1bNF0gKiBtX3RyYW5zZm9ybVsxXSArIG90aGVyLm1fdHJhbnNmb3Jt
WzVdICogbV90cmFuc2Zvcm1bM10gKyBtX3RyYW5zZm9ybVs1XTsKKworICAgIHNldE1hdHJpeCh0
cmFucy5tX3RyYW5zZm9ybSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zv
cm0mIEFmZmluZVRyYW5zZm9ybTo6cm90YXRlKGRvdWJsZSBhKQoreworICAgIC8vIGFuZ2xlIGlz
IGluIGRlZ3JlZS4gU3dpdGNoIHRvIHJhZGlhbgorICAgIGEgPSBkZWcycmFkKGEpOworICAgIGRv
dWJsZSBjb3NBbmdsZSA9IGNvcyhhKTsKKyAgICBkb3VibGUgc2luQW5nbGUgPSBzaW4oYSk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIHJvdChjb3NBbmdsZSwgc2luQW5nbGUsIC1zaW5BbmdsZSwgY29z
QW5nbGUsIDAsIDApOworCisgICAgbXVsdExlZnQocm90KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzY2FsZShkb3VibGUgcykKK3sK
KyAgICByZXR1cm4gc2NhbGUocywgcyk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJh
bnNmb3JtOjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICBtX3RyYW5zZm9ybVsw
XSAqPSBzeDsKKyAgICBtX3RyYW5zZm9ybVszXSAqPSBzeTsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUoZG91YmxlIHR4
LCBkb3VibGUgdHkpCit7CisgICAgbV90cmFuc2Zvcm1bNF0gKz0gdHg7CisgICAgbV90cmFuc2Zv
cm1bNV0gKz0gdHk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFm
ZmluZVRyYW5zZm9ybTo6c2NhbGVOb25Vbmlmb3JtKGRvdWJsZSBzeCwgZG91YmxlIHN5KQorewor
ICAgIHJldHVybiBzY2FsZShzeCwgc3kpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRy
YW5zZm9ybTo6cm90YXRlRnJvbVZlY3Rvcihkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgcmV0
dXJuIHJvdGF0ZShyYWQyZGVnKGF0YW4yKHksIHgpKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYg
QWZmaW5lVHJhbnNmb3JtOjpmbGlwWCgpCit7CisgICAgcmV0dXJuIHNjYWxlKC0xLCAxKTsKK30K
KworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OmZsaXBZKCkKK3sKKyAgICByZXR1
cm4gc2NhbGUoMSwgLTEpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6
c2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFy
KDEsIHN5LCBzeCwgMSwgMCwgMCk7CisKKyAgICBtdWx0TGVmdChzaGVhcik7CisgICAgcmV0dXJu
ICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2tldyhkb3Vi
bGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZKQoreworICAgIHJldHVybiBzaGVhcih0YW4oZGVnMnJh
ZChhbmdsZVgpKSwgdGFuKGRlZzJyYWQoYW5nbGVZKSkpOworfQorCitBZmZpbmVUcmFuc2Zvcm0m
IEFmZmluZVRyYW5zZm9ybTo6c2tld1goZG91YmxlIGFuZ2xlKQoreworICAgIHJldHVybiBzaGVh
cih0YW4oZGVnMnJhZChhbmdsZSkpLCAwKTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVU
cmFuc2Zvcm06OnNrZXdZKGRvdWJsZSBhbmdsZSkKK3sKKyAgICByZXR1cm4gc2hlYXIoMCwgdGFu
KGRlZzJyYWQoYW5nbGUpKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBtYWtlTWFwQmV0d2VlblJl
Y3RzKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QpCit7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGRl
c3QueCgpIC0gc291cmNlLngoKSwgZGVzdC55KCkgLSBzb3VyY2UueSgpKTsKKyAgICB0cmFuc2Zv
cm0uc2NhbGUoZGVzdC53aWR0aCgpIC8gc291cmNlLndpZHRoKCksIGRlc3QuaGVpZ2h0KCkgLyBz
b3VyY2UuaGVpZ2h0KCkpOworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK3ZvaWQgQWZmaW5l
VHJhbnNmb3JtOjptYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUqIHgyLCBkb3VibGUqIHky
KSBjb25zdAoreworICAgICp4MiA9IChtX3RyYW5zZm9ybVswXSAqIHggKyBtX3RyYW5zZm9ybVsy
XSAqIHkgKyBtX3RyYW5zZm9ybVs0XSk7CisgICAgKnkyID0gKG1fdHJhbnNmb3JtWzFdICogeCAr
IG1fdHJhbnNmb3JtWzNdICogeSArIG1fdHJhbnNmb3JtWzVdKTsKK30KKworSW50UG9pbnQgQWZm
aW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7Cisg
ICAgZG91YmxlIHgyLCB5MjsKKyAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4MiwgJnky
KTsKKyAgICAKKyAgICAvLyBSb3VuZCB0aGUgcG9pbnQuCisgICAgcmV0dXJuIEludFBvaW50KGxy
b3VuZCh4MiksIGxyb3VuZCh5MikpOworfQorCitGbG9hdFBvaW50IEFmZmluZVRyYW5zZm9ybTo6
bWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgZG91YmxlIHgy
LCB5MjsKKyAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4MiwgJnkyKTsKKworICAgIHJl
dHVybiBGbG9hdFBvaW50KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeDIpLCBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KHkyKSk7Cit9CisKK0Zsb2F0UmVjdCBBZmZpbmVUcmFuc2Zvcm06Om1hcFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEZsb2F0UXVhZCBxKHJlY3QpOwor
CisgICAgRmxvYXRRdWFkIHJlc3VsdDsKKyAgICByZXN1bHQuc2V0UDEobWFwUG9pbnQocS5wMSgp
KSk7CisgICAgcmVzdWx0LnNldFAyKG1hcFBvaW50KHEucDIoKSkpOworICAgIHJlc3VsdC5zZXRQ
MyhtYXBQb2ludChxLnAzKCkpKTsKKyAgICByZXN1bHQuc2V0UDQobWFwUG9pbnQocS5wNCgpKSk7
CisgICAgcmV0dXJuIHJlc3VsdC5ib3VuZGluZ0JveCgpOworfQorCit2b2lkIEFmZmluZVRyYW5z
Zm9ybTo6YmxlbmQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3Mp
Cit7CisgICAgZG91YmxlIHNyQVs5XSwgc3JCWzldOworCisgICAgYWZmaW5lVHJhbnNmb3JtRGVj
b21wb3NlKGZyb20sIHNyQSk7CisgICAgYWZmaW5lVHJhbnNmb3JtRGVjb21wb3NlKCp0aGlzLCBz
ckIpOworCisgICAgLy8gSWYgeC1heGlzIG9mIG9uZSBpcyBmbGlwcGVkLCBhbmQgeS1heGlzIG9m
IHRoZSBvdGhlciwgY29udmVydCB0byBhbiB1bmZsaXBwZWQgcm90YXRpb24uCisgICAgaWYgKChz
ckFbMF0gPCAwICYmIHNyQlsxXSA8IDApIHx8IChzckFbMV0gPCAwICYmICBzckJbMF0gPCAwKSkg
eworICAgICAgICBzckFbMF0gPSAtc3JBWzBdOworICAgICAgICBzckFbMV0gPSAtc3JBWzFdOwor
ICAgICAgICBzckFbMl0gKz0gc3JBWzJdIDwgMCA/IHBpRG91YmxlIDogLXBpRG91YmxlOworICAg
IH0KKworICAgIC8vIERvbid0IHJvdGF0ZSB0aGUgbG9uZyB3YXkgYXJvdW5kLgorICAgIHNyQVsy
XSA9IGZtb2Qoc3JBWzJdLCAyLjAgKiBwaURvdWJsZSk7CisgICAgc3JCWzJdID0gZm1vZChzckJb
Ml0sIDIuMCAqIHBpRG91YmxlKTsKKworICAgIGlmIChmYWJzKHNyQVsyXSAtIHNyQlsyXSkgPiBw
aURvdWJsZSkgeworICAgICAgICBpZiAoc3JBWzJdID4gc3JCWzJdKQorICAgICAgICAgICAgc3JB
WzJdIC09IHBpRG91YmxlICogMi4wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzckJbMl0g
LT0gcGlEb3VibGUgKiAyLjA7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBp
KyspCisgICAgICAgIHNyQVtpXSA9IHNyQVtpXSArIHByb2dyZXNzICogKHNyQltpXSAtIHNyQVtp
XSk7CisKKyAgICBhZmZpbmVUcmFuc2Zvcm1Db21wb3NlKCp0aGlzLCBzckEpOworfQorCitUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBBZmZpbmVUcmFuc2Zvcm06OnRvVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSBjb25zdAoreworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybVsw
XSwgbV90cmFuc2Zvcm1bMV0sIG1fdHJhbnNmb3JtWzJdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3RyYW5zZm9ybVszXSwgbV90cmFuc2Zvcm1bNF0sIG1fdHJhbnNmb3JtWzVd
KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fm
ZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIDIw
MTAgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWZmaW5l
VHJhbnNmb3JtX2gKKyNkZWZpbmUgQWZmaW5lVHJhbnNmb3JtX2gKKworI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4gLy8gZm9yIG1lbWNweQor
I2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisKKyNpZiBQTEFURk9STShDRykKKyNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ0dBZmZpbmVUcmFuc2Zvcm0uaD4KKyNlbGlmIFBMQVRGT1JNKENB
SVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxR
VHJhbnNmb3JtPgorI2VsaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlIDxTa01hdHJpeC5oPgor
I2VsaWYgUExBVEZPUk0oV1gpICYmIFVTRShXWEdDKQorI2luY2x1ZGUgPHd4L2dyYXBoaWNzLmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xh
c3MgRmxvYXRRdWFkOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJ
bnRSZWN0OworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm0gOiBwdWJsaWMgRmFzdEFsbG9jQmFzZSB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBkb3VibGUgVHJhbnNmb3JtWzZdOworCisgICAgQWZmaW5l
VHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91
YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOworCisgICAgdm9pZCBzZXRNYXRy
aXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3Vi
bGUgZik7CisKKyAgICB2b2lkIG1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSogeDIsIGRv
dWJsZSogeTIpIGNvbnN0OworCisgICAgLy8gUm91bmRzIHRoZSBtYXBwZWQgcG9pbnQgdG8gdGhl
IG5lYXJlc3QgaW50ZWdlciB2YWx1ZS4KKyAgICBJbnRQb2ludCBtYXBQb2ludChjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OworCisgICAgRmxvYXRQb2ludCBtYXBQb2ludChjb25zdCBGbG9hdFBvaW50
JikgY29uc3Q7CisKKyAgICAvLyBSb3VuZHMgdGhlIHJlc3VsdGluZyBtYXBwZWQgcmVjdGFuZ2xl
IG91dC4gVGhpcyBpcyBoZWxwZnVsIGZvciBib3VuZGluZworICAgIC8vIGJveCBjb21wdXRhdGlv
bnMgYnV0IG1heSBub3QgYmUgd2hhdCBpcyB3YW50ZWQgaW4gb3RoZXIgY29udGV4dHMuCisgICAg
SW50UmVjdCBtYXBSZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBt
YXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworCisgICAgYm9vbCBpc0lkZW50aXR5KCkg
Y29uc3Q7CisKKyAgICBkb3VibGUgYSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtWzBdOyB9
CisgICAgdm9pZCBzZXRBKGRvdWJsZSBhKSB7IG1fdHJhbnNmb3JtWzBdID0gYTsgfQorICAgIGRv
dWJsZSBiKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1bMV07IH0KKyAgICB2b2lkIHNldEIo
ZG91YmxlIGIpIHsgbV90cmFuc2Zvcm1bMV0gPSBiOyB9CisgICAgZG91YmxlIGMoKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zZm9ybVsyXTsgfQorICAgIHZvaWQgc2V0Qyhkb3VibGUgYykgeyBtX3Ry
YW5zZm9ybVsyXSA9IGM7IH0KKyAgICBkb3VibGUgZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNm
b3JtWzNdOyB9CisgICAgdm9pZCBzZXREKGRvdWJsZSBkKSB7IG1fdHJhbnNmb3JtWzNdID0gZDsg
fQorICAgIGRvdWJsZSBlKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1bNF07IH0KKyAgICB2
b2lkIHNldEUoZG91YmxlIGUpIHsgbV90cmFuc2Zvcm1bNF0gPSBlOyB9CisgICAgZG91YmxlIGYo
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVs1XTsgfQorICAgIHZvaWQgc2V0Rihkb3VibGUg
ZikgeyBtX3RyYW5zZm9ybVs1XSA9IGY7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIEFm
ZmluZVRyYW5zZm9ybSYgbXVsdGlwbHkoY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgQWZm
aW5lVHJhbnNmb3JtJiBtdWx0TGVmdChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0mIHNjYWxlKGRvdWJsZSk7IAorICAgIEFmZmluZVRyYW5zZm9ybSYgc2NhbGUo
ZG91YmxlIHN4LCBkb3VibGUgc3kpOyAKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNjYWxlTm9uVW5p
Zm9ybShkb3VibGUgc3gsIGRvdWJsZSBzeSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiByb3RhdGUo
ZG91YmxlIGQpOworICAgIEFmZmluZVRyYW5zZm9ybSYgcm90YXRlRnJvbVZlY3Rvcihkb3VibGUg
eCwgZG91YmxlIHkpOworICAgIEFmZmluZVRyYW5zZm9ybSYgdHJhbnNsYXRlKGRvdWJsZSB0eCwg
ZG91YmxlIHR5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNoZWFyKGRvdWJsZSBzeCwgZG91Ymxl
IHN5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIGZsaXBYKCk7CisgICAgQWZmaW5lVHJhbnNmb3Jt
JiBmbGlwWSgpOworICAgIEFmZmluZVRyYW5zZm9ybSYgc2tldyhkb3VibGUgYW5nbGVYLCBkb3Vi
bGUgYW5nbGVZKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXdYKGRvdWJsZSBhbmdsZSk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtJiBza2V3WShkb3VibGUgYW5nbGUpOworIAorICAgIGRvdWJsZSBk
ZXQoKSBjb25zdDsKKyAgICBib29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0OworICAgIEFmZmluZVRy
YW5zZm9ybSBpbnZlcnNlKCkgY29uc3Q7CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSBjb25zdDsKKworICAgIGJvb2wgb3BlcmF0b3I9
PSAoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAobV90cmFuc2Zvcm1bMF0gPT0gbTIubV90cmFuc2Zvcm1bMF0KKyAgICAgICAgICAgICAmJiBt
X3RyYW5zZm9ybVsxXSA9PSBtMi5tX3RyYW5zZm9ybVsxXQorICAgICAgICAgICAgICYmIG1fdHJh
bnNmb3JtWzJdID09IG0yLm1fdHJhbnNmb3JtWzJdCisgICAgICAgICAgICAgJiYgbV90cmFuc2Zv
cm1bM10gPT0gbTIubV90cmFuc2Zvcm1bM10KKyAgICAgICAgICAgICAmJiBtX3RyYW5zZm9ybVs0
XSA9PSBtMi5tX3RyYW5zZm9ybVs0XQorICAgICAgICAgICAgICYmIG1fdHJhbnNmb3JtWzVdID09
IG0yLm1fdHJhbnNmb3JtWzVdKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KKworICAgIC8vICp0aGlzID0gKnRoaXMgKiB0IChpLmUuLCBhIG11bHRSaWdodCkKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0mIG9wZXJhdG9yKj0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQorICAg
IHsKKyAgICAgICAgKnRoaXMgPSAqdGhpcyAqIHQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisgICAgCisgICAgLy8gcmVzdWx0ID0gKnRoaXMgKiB0IChpLmUuLCBhIG11bHRSaWdodCkK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gb3BlcmF0b3IqKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQgPSB0OworICAgICAg
ICByZXN1bHQubXVsdExlZnQoKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworI2lmIFBMQVRGT1JNKENHKQorICAgIG9wZXJhdG9yIENHQWZmaW5lVHJhbnNmb3JtKCkgY29u
c3Q7CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICBvcGVyYXRvciBjYWlyb19tYXRyaXhfdCgp
IGNvbnN0OworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgb3BlcmF0b3IgUVRyYW5zZm9ybSgpIGNv
bnN0OworI2VsaWYgUExBVEZPUk0oU0tJQSkKKyAgICBvcGVyYXRvciBTa01hdHJpeCgpIGNvbnN0
OworI2VsaWYgUExBVEZPUk0oV1gpICYmIFVTRShXWEdDKQorICAgIG9wZXJhdG9yIHd4R3JhcGhp
Y3NNYXRyaXgoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgc2V0TWF0cml4
KGNvbnN0IFRyYW5zZm9ybSBtKQorICAgIHsKKyAgICAgICAgaWYgKG0gJiYgbSAhPSBtX3RyYW5z
Zm9ybSkKKyAgICAgICAgICAgIG1lbWNweShtX3RyYW5zZm9ybSwgbSwgc2l6ZW9mKFRyYW5zZm9y
bSkpOworICAgIH0KKworICAgIFRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKK307CisKK0FmZmluZVRy
YW5zZm9ybSBtYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3QpOworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAJ
KHJldmlzaW9uIDU0MTEwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFw
aGljc0NvbnRleHRXaW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAorI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgpAQCAtMTE0Myw2ICsx
MTQ0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXkKICAgICBt
X2RhdGEtPnJlc3RvcmUoKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBtX2RhdGEtPmNvbmNhdENU
TSh0cmFuc2Zvcm0pOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7CiAgICAgbV9kYXRhLT5jb25jYXRD
VE0odHJhbnNmb3JtKTsKQEAgLTE1MzEsNiArMTUzNywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgR3JhZGllbnRGaWxsKGRjLCB0di5kYXRhKCksIHR2
LnNpemUoKSwgbWVzaC5kYXRhKCksIG1lc2guc2l6ZSgpLCB2ZXJ0aWNhbCA/IEdSQURJRU5UX0ZJ
TExfUkVDVF9WIDogR1JBRElFTlRfRklMTF9SRUNUX0gpOwogfQogCitBZmZpbmVUcmFuc2Zvcm0g
R3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAoreworICAgIHJldHVybiBtX2Rh
dGEtPm1fdHJhbnNmb3JtOworfQorCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRl
eHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS0+bV90cmFuc2Zvcm07Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4
dFd4LmNwcAkocmV2aXNpb24gNTQxMTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zNTksNiAr
MzYwLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcigKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Ojpn
ZXRBZmZpbmVDVE0oKSBjb25zdAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oKTsKK30KKwogVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3ND
b250ZXh0OjpnZXRDVE0oKSBjb25zdAogeyAKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNDcx
LDYgKzQ3OCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sCiAg
ICAgICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0QnJ1c2god3hCcnVzaChjb2xvcikpOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuOworfQorCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0p
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvUGF0aFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L1BhdGhXeC5jcHAJKHJldmlzaW9uIDU0MTEwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9QYXRoV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCisjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC0yMDIsNiArMjAz
LDE0IEBAIHZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIKICNlbmRpZgog
fQogCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkgCit7CisjaWYgVVNFKFdYR0MpCisgICAgaWYgKG1fcGF0aCkKKyAgICAgICAgbV9wYXRoLT5U
cmFuc2Zvcm0odHJhbnNmb3JtKTsKKyNlbmRpZgorfQorCiB2b2lkIFBhdGg6OnRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSAKIHsKICNpZiBVU0UoV1hHQykK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3JtYXRpb25NYXRyaXhX
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zv
cm1hdGlvbk1hdHJpeFd4LmNwcAkocmV2aXNpb24gNTQxMTApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4V3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw2ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNp
bmNsdWRlICJBc3NlcnRpb25zLmgiCkBAIC00NSw2ICs0NiwxNSBAQCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6b3BlcmF0b3Igd3hHcmFwaGljCiAgICAgd3hHcmFwaGljc01hdHJpeCBtYXRyaXggPSBy
ZW5kZXJlci0+Q3JlYXRlTWF0cml4KGEoKSwgYigpLCBjKCksIGQoKSwgZSgpLCBmKCkpOwogICAg
IHJldHVybiBtYXRyaXg7CiB9CisKK0FmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3Igd3hHcmFwaGlj
c01hdHJpeCgpIGNvbnN0Cit7CisgICAgd3hHcmFwaGljc1JlbmRlcmVyKiByZW5kZXJlciA9IHd4
R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7CisgICAgQVNTRVJUKHJlbmRl
cmVyKTsKKyAgICAKKyAgICB3eEdyYXBoaWNzTWF0cml4IG1hdHJpeCA9IHJlbmRlcmVyLT5DcmVh
dGVNYXRyaXgoYSgpLCBiKCksIGMoKSwgZCgpLCBlKCksIGYoKSk7CisgICAgcmV0dXJuIG1hdHJp
eDsKK30KICNlbmRpZgogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47797</attachid>
            <date>2010-01-31 11:52:34 -0800</date>
            <delta_ts>2010-01-31 23:47:27 -0800</delta_ts>
            <desc>reimplementation of AffineTransformation</desc>
            <filename>affineTransform-1.patch</filename>
            <type>text/plain</type>
            <size>57704</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMyIEBACisyMDEwLTAxLTMxICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGJhY2sgYW4gQWZmaW5lVHJhbnNmb3JtIGNsYXNzIGZvciB1c2UgYnkgU1ZHCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzc1MAorCisgICAgICAgIFRo
ZXNlIGFyZSB0aGUgZmlyc3Qgc3RlcHMgb24gcmVpbXBsZW1lbnRpbmcgQWZmaW5lVHJhbnNmb3Jt
LiBVbmxpa2UKKyAgICAgICAgdGhlIG9sZCBhZmZpbmUgY29kZSwgdGhpcyBvbmUgaXMgcGxhdGZv
cm0gaW5kZXBlbmRlbnQgbGlrZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4KKyAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGhhcyB0aGUgYmVuZWZpdCwgdGhhdCBpdCBzdG9yZXMganVzdCA2IGRvdWJsZXMg
aW5zdGVhZCBvZgorICAgICAgICAxNiBpbiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4gVGhlIGNhbGN1
bGF0aW9ucyBvZiB0cmFuc2Zvcm1hdGlvbnMgYXJlIG5vdCB0aGF0CisgICAgICAgIGNvbXBsZXgg
YW5kIGNhbiBpbXByb3ZlIHRoZSBtZW1vcnkgdXNhZ2UgYW5kIHNwZWVkIG9mIFNWRy4KKyAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGNhbiBiZSB1c2VkIGJ5IEhUTUwgQ2FudmFzM0Qgb3IgU1ZHLCBz
aW5jZSB0aGV5IGFyZSAyRCByZWxhdGVkIChhdAorICAgICAgICBsZWFzdCBmb3IgdGhlIG1vbWVu
dCkuCisgICAgICAgIEhUTUwgQ2FudmFzIGlzIHRoZSBmaXJzdCB0aGF0IG1ha2VzIHVzZSBvZiB0
aGUgbmV3IEFmZmluZVRyYW5zZm9ybS4gTmV4dCBwYXRjaGVzCisgICAgICAgIHdpbGwgaW50cm9k
dWNlIHRoZSBhZmZpbmUgY29kZSB0byBTVkcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGUg
bmV3IEFmZmluZVRyYW5zZm9ybWF0aW9uIGNvZGUgaXMgdGVzdGVkIGJ5IGZhc3QvY2FudmFzLgor
CisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cm90
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNQ
b2ludEluUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OndpbGxEcmF3KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmg6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJh
bnNmb3JtYXRpb25NYXRyaXhDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm06Om9wZXJhdG9yIGNhaXJvX21hdHJpeF90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmdldEFmZmluZUNUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgQ0dBZmZpbmVU
cmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29u
dGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0QWZm
aW5lQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldEFmZmluZUNUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNvbmNhdENUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIFFUcmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFu
c2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25N
YXRyaXhTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0
b3IgU2tNYXRyaXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjphZmZpbmVUcmFuc2Zv
cm1EZWNvbXBvc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWZmaW5lVHJhbnNmb3JtQ29tcG9zZSk6
CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnJlc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybTo6c2V0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybTo6aXNJZGVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm06OmRldCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmlzSW52ZXJ0aWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmludmVyc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm06Om11bHRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybTo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2Nh
bGUpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzY2FsZU5vblVuaWZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpyb3RhdGVGcm9tVmVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6ZmxpcFgpOgorICAgICAgICAoV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtOjpmbGlwWSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
OnNoZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2tldyk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNrZXdYKToKKyAgICAgICAgKFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybTo6c2tld1kpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZU1hcEJldHdl
ZW5SZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcCk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm06OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L0FmZmluZVRyYW5zZm9ybS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybTo6YSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNldEEpOgorICAg
ICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpiKToKKyAgICAgICAgKFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybTo6c2V0Qik6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
OmMpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzZXRDKToKKyAgICAgICAg
KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6ZCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm06OnNldEQpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjplKToK
KyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2V0RSk6CisgICAgICAgIChXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm06OmYpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtOjpzZXRGKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3I9
PSApOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IqPSk6CisgICAgICAgIChX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm06OnNldE1hdHJpeCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRBZmZpbmVDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNz
Q29udGV4dFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0QWZm
aW5lQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9U
cmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybTo6b3BlcmF0b3Igd3hHcmFwaGljc01hdHJpeCk6CisKIDIwMTAtMDEtMzEgIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGlt
b3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNTQxMTEpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2Niw2ICs0NjYsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChM
T0NBTF9TUkNfRklMRVMpIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAg
XAogCXBsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25NYXRyaXhTa2lhLmNwcCBc
CiAJXAorCXBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcCBc
CiAJcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bi5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbi5jcHAgXApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1NDExMSkKKysrIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MDEsNiArMTYwMSw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Vbml0QmV6
aWVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbi5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTQxMTEpCisr
KyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjEzNiw2ICsyMTM2LDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25NYXRyaXhTa2lhLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFu
c2Zvcm0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fm
ZmluZVRyYW5zZm9ybS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTgwNCw2ICs4MDQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QZW4uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50
ZWRGb250RGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNw
cCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDU0MTExKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQxMDcsNiArMjQxMDcsMTMgQEAKIAkJCQkJ
TmFtZT0idHJhbnNmb3JtcyINCiAJCQkJCT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x0cmFuc2Zvcm1zXEFmZmluZVRyYW5zZm9ybS5jcHAi
DQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXNcQWZmaW5lVHJhbnNmb3JtLmgiDQor
CQkJCQkJPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXHRyYW5zZm9ybXNcSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCINCiAJCQkJCQk+
DQogCQkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDU0MTExKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMTMsNiArMTMxMyw4IEBACiAJCTg0
QTgxRjNFMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8q
IFNvdXJjZUFscGhhLmggKi87IH07CiAJCTg0QTgxRjQxMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3Vy
Y2VHcmFwaGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNwcCAqLzsgfTsK
IAkJODRBODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQwMEZDN0UwMjcwMDk1
NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggKi87IH07CisJCTg0RDBDNDA0MTExNUYxRDQwMDE4QUEz
NCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODREMEM0MDMxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9y
bS5jcHAgKi87IH07CisJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zv
cm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0RDBD
NDA1MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCAqLzsgfTsKIAkJODUwMDRE
OTQwQUNFRUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAwNEQ4ODBBQ0VFQUVGMDBDNDM4RjYg
LyogRE9NU1ZHRGVmc0VsZW1lbnQuaCAqLzsgfTsKIAkJODUwMDREOTUwQUNFRUFFRjAwQzQzOEY2
IC8qIERPTVNWR0RlZnNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODUwMDREODkwQUNFRUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVt
ZW50Lm1tICovOyB9OwogCQk4NTAwNEQ5NjBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRGVzY0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1
MDA0RDhBMEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZXNjRWxlbWVudC5oICovOyB9OwpAQCAt
NjcxNiw2ICs2NzE4LDggQEAKIAkJODRCMkIxRjcwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVL
ZXlHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQ29yZUtleUdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCMkIxRjgwNTZCRUYzQTAwRDJCNzcx
IC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViQ29yZUtleUdlbmVyYXRvci5tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCMkIyNEYw
NTZCRjE1RjAwRDJCNzcxIC8qIFNTTEtleUdlbmVyYXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNTTEtleUdlbmVyYXRv
ck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CisJCTg0RDBDNDAzMTExNUYxRDQwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWZmaW5lVHJhbnNmb3JtLmNw
cDsgcGF0aCA9IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODREMEM0MDUxMTE1RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9y
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBZmZpbmVUcmFuc2Zvcm0uaDsg
cGF0aCA9IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg1MDA0RDg4MEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZWZzRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRGVmc0VsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUwMDREODkwQUNFRUFFRjAwQzQzOEY2IC8q
IERPTVNWR0RlZnNFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IERPTVNWR0RlZnNFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NTAwNEQ4QTBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRGVzY0VsZW1lbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0Rlc2NFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDg5OSw2ICsxMDkwMyw4IEBACiAJCTQ5RTkxMUIyMEVG
ODZEMjcwMDlEMENBRiAvKiB0cmFuc2Zvcm1zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk4NEQwQzQwNTExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJh
bnNmb3JtLmggKi8sCisJCQkJODREMEM0MDMxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5z
Zm9ybS5jcHAgKi8sCiAJCQkJNDlFOTExQjUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJh
bnNmb3JtT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlENURDMjcwRjQyM0E3MzAwOEYyMEZEIC8qIE1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUQ1REMyODBGNDIzQTczMDA4
RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKQEAgLTE4NDY1LDYgKzE4
NDcxLDcgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8q
IFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEz
NCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjA2MzksNiArMjA2NDYs
NyBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVD
RjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg0RDBDNDA0MTExNUYx
RDQwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShy
ZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1
ZGUgIkNhbnZhc0dyYWRpZW50LmgiCkBAIC0zNTcsNyArMzU3LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNjYWxlKGZsbwogICAgIGlmICghaXNmaW5pdGUoc3gpIHwgIWlzZmlu
aXRlKHN5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbmV3
VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3
VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKICAgICBuZXdUcmFuc2Zvcm0uc2NhbGVO
b25Vbmlmb3JtKHN4LCBzeSk7CiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkp
IHsKICAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsKQEAgLTM2Niw3ICsz
NjYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2NhbGUoZmxvCiAKICAgICBz
dGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwogICAgIGMtPnNjYWxlKEZsb2F0U2l6
ZShzeCwgc3kpKTsKLSAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCku
c2NhbGVOb25Vbmlmb3JtKDEuMC9zeCwgMS4wL3N5KSk7CisgICAgbV9wYXRoLnRyYW5zZm9ybShB
ZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oMS4wIC8gc3gsIDEuMCAvIHN5KSk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJh
ZGlhbnMpCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnJvdGF0ZShmbAogICAgIGlmICghaXNmaW5pdGUoYW5nbGVJblJhZGlhbnMpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgp
Lm1fdHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgp
Lm1fdHJhbnNmb3JtOwogICAgIG5ld1RyYW5zZm9ybS5yb3RhdGUoYW5nbGVJblJhZGlhbnMgLyBw
aURvdWJsZSAqIDE4MC4wKTsKICAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkg
ewogICAgICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOwpAQCAtMzg5LDcgKzM4
OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmwKIAogICAgIHN0
YXRlKCkubV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+cm90YXRlKGFuZ2xlSW5S
YWRpYW5zKTsKLSAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkucm90
YXRlKC1hbmdsZUluUmFkaWFucyAvIHBpRG91YmxlICogMTgwLjApKTsKKyAgICBtX3BhdGgudHJh
bnNmb3JtKEFmZmluZVRyYW5zZm9ybSgpLnJvdGF0ZSgtYW5nbGVJblJhZGlhbnMgLyBwaURvdWJs
ZSAqIDE4MC4wKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2xh
dGUoZmxvYXQgdHgsIGZsb2F0IHR5KQpAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjp0cmFuc2xhdGUKICAgICBpZiAoIWlzZmluaXRlKHR4KSB8ICFpc2Zp
bml0ZSh0eSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG5l
d1RyYW5zZm9ybSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIG5l
d1RyYW5zZm9ybSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CiAgICAgbmV3VHJhbnNmb3JtLnRyYW5z
bGF0ZSh0eCwgdHkpOwogICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CiAg
ICAgICAgIHN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CkBAIC00MTIsNyArNDEyLDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZQogCiAgICAgc3RhdGUo
KS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT50cmFuc2xhdGUodHgsIHR5KTsK
LSAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKC10
eCwgLXR5KSk7CisgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xh
dGUoLXR4LCAtdHkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5z
Zm9ybShmbG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBtMjIsIGZsb2F0IGR4
LCBmbG9hdCBkeSkKQEAgLTQyNyw4ICs0MjcsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dHJhbnNmb3JtCiAgICAgICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0yMikg
fCAhaXNmaW5pdGUoZHkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm0obTExLCBtMTIsIG0yMSwgbTIyLCBkeCwgZHkpOwotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG5ld1RyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIHN0YXRlKCkubV90cmFuc2Zv
cm07CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBtMjIsIGR4
LCBkeSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIHN0
YXRlKCkubV90cmFuc2Zvcm07CiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkp
IHsKICAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNDQ5LDcgKzQ0OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRUcmFuc2YKICAgICAgICAgIWlzZmluaXRlKG0xMikgfCAhaXNmaW5pdGUobTIyKSB8ICFpc2Zp
bml0ZShkeSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0
bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRl
KCkubV90cmFuc2Zvcm07CiAgICAgaWYgKCFjdG0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBjLT5jb25jYXRDVE0oYy0+Z2V0Q1RNKCkuaW52ZXJzZSgpKTsKQEAgLTcwOCw3
ICs3MDgsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNQb2ludEluCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEZsb2F0UG9pbnQgcG9pbnQoeCwgeSk7Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggY3RtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gY3RtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKICAgICBGbG9hdFBvaW50IHRyYW5z
Zm9ybWVkUG9pbnQgPSBjdG0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50KTsKICAgICByZXR1cm4g
bV9wYXRoLmNvbnRhaW5zKHRyYW5zZm9ybWVkUG9pbnQpOwogfQpAQCAtMTI0MSw3ICsxMjQxLDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KAogCiAgICAgRmxvYXRS
ZWN0IGRpcnR5UmVjdCA9IHI7CiAgICAgaWYgKG9wdGlvbnMgJiBDYW52YXNXaWxsRHJhd0FwcGx5
VHJhbnNmb3JtKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IHN0YXRlKCku
bV90cmFuc2Zvcm07CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBzdGF0ZSgpLm1fdHJh
bnNmb3JtOwogICAgICAgICBkaXJ0eVJlY3QgPSBjdG0ubWFwUmVjdChyKTsKICAgICB9CiAgICAg
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgJKHJldmlzaW9uIDU0MTExKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRfaAogI2RlZmluZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRfaAogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKQEAgLTIxOCw3ICsyMTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICBTdHJpbmcgbV9zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxw
aGE7CiAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2dsb2JhbENvbXBvc2l0ZTsKLSAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogICAgICAgICAgICAgYm9vbCBtX2ludmVydGli
bGVDVE07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRleHQgc3RhdGUuCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDU0
MTExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
b25zdCBpbnQgY01pc3NwZWxsaW5nTGluZVBhdHRlcm5XaWR0aCA9IDQ7CiAgICAgY29uc3QgaW50
IGNNaXNzcGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGggPSAxOwogCisgICAgY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOwogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR2VuZXJhdG9yOwogICAgIGNs
YXNzIEdyYWRpZW50OwpAQCAtMzA0LDcgKzMwNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRSZWN0Jik7CiAK
ICAgICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAg
ICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGdldENUTSgpIGNvbnN0OworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gZ2V0QWZmaW5lQ1RNKCkgY29uc3Q7CiAKICNpZiBPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFU
KQogICAgICAgICB2b2lkIHNldEJpdG1hcChQYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4pOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDU0MTExKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAg
dHlwZWRlZiBQbGF0Zm9ybVBhdGgqIFBsYXRmb3JtUGF0aFB0cjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogICAgIGNsYXNzIEZsb2F0UG9pbnQ7
CiAgICAgY2xhc3MgRmxvYXRSZWN0OwogICAgIGNsYXNzIEZsb2F0U2l6ZTsKQEAgLTE0NSw2ICsx
NDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUxp
bmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAogICAgICAgICB2b2lk
IGFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24pIGNvbnN0OworICAgICAgICB2
b2lkIHRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICAgICAgdm9pZCB0cmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAogICAgIHByaXZhdGU6CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gNTQxMTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogCiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAKKyNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYWlyb1BhdGguaCIKICNpbmNsdWRlICJGRUdhdXNzaWFu
Qmx1ci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjE2LDYgKzIxNywxNCBAQCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdlCiAgICAgcmV0dXJuIFRyYW5zZm9y
bWF0aW9uTWF0cml4KG0ueHgsIG0ueXgsIG0ueHksIG0ueXksIG0ueDAsIG0ueTApOwogfQogCitB
ZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAorewor
ICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fbWF0cml4X3Qg
bTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsKK30KKwogY2Fpcm9fdCog
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBt
X2RhdGEtPmNyOwpAQCAtODAyLDYgKzgxMSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IFRyCiAgICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKIH0KIAor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY29uc3QgY2Fpcm9fbWF0cml4
X3QgbWF0cml4ID0gY2Fpcm9fbWF0cml4X3QodHJhbnNmb3JtKTsKKyAgICBjYWlyb190cmFuc2Zv
cm0oY3IsICZtYXRyaXgpOworICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Cit9CisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRS
ZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNhaXJvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oCShyZXZpc2lv
biA1NDExMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKICAgICB2b2lkIHJv
dGF0ZShmbG9hdCk7CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KTsKKyAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIGNvbmNhdENUTShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcigpIHsgbV90cmFuc3BhcmVuY3lDb3VudCsrOyB9CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVu
Y3lMYXllcigpIHsgbV90cmFuc3BhcmVuY3lDb3VudC0tOyB9CkBAIC04NSw2ICs4Niw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIHt9CiAgICAgdm9pZCByb3Rh
dGUoZmxvYXQpIHt9CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSB7fQorICAgIHZv
aWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIHt9CiAgICAgdm9pZCBjb25jYXRD
VE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSB7fQogICAgIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcigpIHt9CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIHt9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCShyZXZp
c2lvbiA1NDExMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlBhdGguaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC0zMjYsNiArMzI3LDE0IEBAIHZvaWQgUGF0aDo6YXBw
bHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXIKICAgICBjYWlyb19wYXRoX2Rlc3Ryb3kocGF0aCk7
CiB9CiAKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnMp
Cit7CisgICAgY2Fpcm9fdCogbV9jciA9IHBsYXRmb3JtUGF0aCgpLT5tX2NyOworICAgIGNhaXJv
X21hdHJpeF90IGNfbWF0cml4ID0gY2Fpcm9fbWF0cml4X3QodHJhbnMpOworICAgIGNhaXJvX21h
dHJpeF9pbnZlcnQoJmNfbWF0cml4KTsKKyAgICBjYWlyb190cmFuc2Zvcm0obV9jciwgJmNfbWF0
cml4KTsKK30KKwogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zKQogewogICAgIGNhaXJvX3QqIG1fY3IgPSBwbGF0Zm9ybVBhdGgoKS0+bV9jcjsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRy
aXhDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAkocmV2aXNpb24gNTQxMTEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC00Niw2ICs0NywyMCBAQCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgY2Fpcm9fbWF0CiAgICAgcmV0dXJuIG07CiB9
CiAKK0FmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgY2Fpcm9fbWF0cml4X3QoKSBjb25zdAorewor
ICAgIGNhaXJvX21hdHJpeF90IG07CisKKyAgICBjYWlyb19tYXRyaXhfaW5pdCAoJm0sCisgICAg
ICAgICAgICAgICAgICAgICAgIGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYigpLAorICAg
ICAgICAgICAgICAgICAgICAgICBjKCksCisgICAgICAgICAgICAgICAgICAgICAgIGQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgZSgpLAorICAgICAgICAgICAgICAgICAgICAgICBmKCkpOwor
ICAgIHJldHVybiBtOworfQorCiB9CiAKIC8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAko
cmV2aXNpb24gNTQxMTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRQcml2YXRlLmgiCkBAIC05NTgsNiArOTU5LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Ojp0cmFuc2xhdGUoZmxvYXQgeCwKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0Q29uY2F0Q1RN
KHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOworICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRy
YW5zZm9ybSk7CisgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlk
ZW50aXR5ID0gZmFsc2U7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQpAQCAtOTY3LDYgKzk3NywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IFRyCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3du
VG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRl
eHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0Cit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdCA9IENH
Q29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSh0LmEsIHQuYiwgdC5jLCB0LmQsIHQudHgsIHQudHkpOworfQorCiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gdCA9IENHQ29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZUNHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCShyZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShj
b25zdCBGbG9hdFNpemUmKSB7fQogICAgIHZvaWQgcm90YXRlKGZsb2F0KSB7fQogICAgIHZvaWQg
dHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkge30KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4Jikge30KICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSB7fQogICAgIHZv
aWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSB7fQpAQCAtODgsNiArODksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKICAgICB2b2lkIHJvdGF0ZShmbG9hdCk7
CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KTsKKyAgICB2b2lkIGNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcigpIHsgbV90
cmFuc3BhcmVuY3lDb3VudCsrOyB9CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIHsg
bV90cmFuc3BhcmVuY3lDb3VudC0tOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXRoQ0cuY3BwCShyZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0aENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaWYg
UExBVEZPUk0oQ0cpCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBw
bGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMzQ2LDYgKzM0
NywxNSBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyCiAgICAgQ0dQ
YXRoQXBwbHkobV9wYXRoLCAmcGluZm8sIENHUGF0aEFwcGxpZXJUb1BhdGhBcHBsaWVyKTsKIH0K
IAordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit7CisgICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwor
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybUNHID0gdHJhbnNmb3JtOworICAgIENHUGF0
aEFkZFBhdGgocGF0aCwgJnRyYW5zZm9ybUNHLCBtX3BhdGgpOworICAgIENHUGF0aFJlbGVhc2Uo
bV9wYXRoKTsKKyAgICBtX3BhdGggPSBwYXRoOworfQorCiB2b2lkIFBhdGg6OnRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIENHTXV0YWJsZVBh
dGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAko
cmV2aXNpb24gNTQxMTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9y
bWF0aW9uTWF0cml4Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpZiBQTEFURk9STShDRykKQEAgLTQz
LDYgKzQ0LDE2IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBDR0FmZmluZVQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChm
KCkpKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBDR0FmZmluZVRyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIENHQWZmaW5lVHJhbnNmb3JtTWFrZShuYXJyb3dQcmVjaXNp
b25Ub0NHRmxvYXQoYSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdChiKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGMoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoZCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChlKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGYoKSkp
OworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShDRykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3Bw
CShyZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
cGhpY3NDb250ZXh0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAi
Q29sb3IuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zOTEsNiArMzkyLDEyIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcigKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgp
OworfQorCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNv
bnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTQ1MSw2ICs0NTgsMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCShyZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIAor
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAg
LTE0Niw2ICsxNDcsMTEgQEAgdm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGll
cgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA1NDEx
MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgog
I2VuZGlmCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKQEAgLTI3
NSw2ICsyNzYsMTMgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dAog
ICAgIHJldHVybiBtX2RhdGEtPnAoKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sKKyAgICBRVHJhbnNmb3JtIG1hdHJpeChwbGF0
Zm9ybUNvbnRleHQoKS0+Y29tYmluZWRUcmFuc2Zvcm0oKSk7CisgICAgcmV0dXJuIEFmZmluZVRy
YW5zZm9ybShtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0yMSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0yMigpLCBtYXRyaXguZHgoKSwgbWF0cml4LmR5
KCkpOworfQorCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgp
IGNvbnN0CiB7CiAgICAgUVRyYW5zZm9ybSBtYXRyaXgocGxhdGZvcm1Db250ZXh0KCktPmNvbWJp
bmVkVHJhbnNmb3JtKCkpOwpAQCAtMTE4OCw2ICsxMTk2LDI0IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKICAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpB
bnRpYWxpYXNpbmcsIGFudGlBbGlhcyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5wKCktPnNldFdv
cmxkVHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJ1ZSk7CisKKyAgICAvLyBUcmFuc2Zvcm1hdGlvbnMg
dG8gdGhlIGNvbnRleHQgc2hvdWxkbid0IHRyYW5zZm9ybSB0aGUgY3VycmVudFBhdGguCisgICAg
Ly8gV2UgaGF2ZSB0byB1bmRvIGV2ZXJ5IGNoYW5nZSBtYWRlIHRvIHRoZSBjb250ZXh0IGZyb20g
dGhlIGN1cnJlbnRQYXRoCisgICAgLy8gdG8gYXZvaWQgd3JvbmcgZHJhd2luZ3MuCisgICAgaWYg
KCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSAmJiB0cmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpIHsKKyAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXggPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOwor
ICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aCAqIG1hdHJp
eDsKKyAgICAgICAgbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNm
b3JtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisgICAgfQorfQorCisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9QYXRoUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvUGF0aFF0LmNwcAkocmV2aXNpb24gNTQxMTEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gICA8emFja0BrZGUub3JnPgog
ICogICAgICAgICAgICAgICAyMDA2IFJvYiBCdWlzICAgICA8YnVpc0BrZGUub3JnPgotICogICAg
ICAgICAgICAgICAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogICAgICAg
ICAgICAgICAyMDA5LCAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICoKICAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzAsMTIgKzMwLDEzIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3Ryb2tlU3R5bGVB
cHBsaWVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDxR
UGFpbnRlclBhdGg+CiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4KICNpbmNsdWRlIDxRU3RyaW5nPgpA
QCAtMzc5LDYgKzM4MCwxMSBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBs
aWVyCiAgICAgfQogfQogCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKK3sKKyAgICBtX3BhdGggPSBRVHJhbnNmb3JtKHRyYW5zZm9ybSkubWFw
KG1fcGF0aCk7Cit9CisKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0pCiB7CiAgICAgbV9wYXRoID0gUVRyYW5zZm9ybSh0cmFuc2Zvcm0p
Lm1hcChtX3BhdGgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zv
cm1hdGlvbk1hdHJpeFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwCShyZXZpc2lvbiA1NDExMSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTM2LDYgKzM3LDExIEBAIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBRVHJhbnNmb3IKICAgICByZXR1cm4gUVRyYW5zZm9y
bShtMTEoKSwgbTEyKCksIG0xNCgpLCBtMjEoKSwgbTIyKCksIG0yNCgpLCBtNDEoKSwgbTQyKCks
IG00NCgpKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBRVHJhbnNmb3JtKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gUVRyYW5zZm9ybShhKCksIGIoKSwgYygpLCBkKCksIGUoKSwgZigp
KTsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2
aXNpb24gNTQxMTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAorI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKQEAgLTQzOSw2ICs0NDAsMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKAogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKS0+Y29uY2F0KGFmZmluZSk7Cit9CisKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHhmb3JtKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC04MDUsNiArODEzLDE3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY28KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIEdy
YXBoaWNzQ29udGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sKKyAgICBjb25zdCBTa01hdHJp
eCYgbSA9IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG90YWxNYXRyaXgoKTsKKyAg
ICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTY2FsZVgoKSks
ICAgICAgLy8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZSht
LmdldFNrZXdZKCkpLCAgICAgICAvLyBiCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1Nj
YWxhclRvRG91YmxlKG0uZ2V0U2tld1goKSksICAgICAgIC8vIGMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTY2FsZVkoKSksICAgICAgLy8gZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFRyYW5zbGF0ZVgo
KSksICAvLyBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0u
Z2V0VHJhbnNsYXRlWSgpKSk7IC8vIGYKK30KKwogVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhp
Y3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogewogICAgIGNvbnN0IFNrTWF0cml4JiBtID0gcGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3RhbE1hdHJpeCgpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3BwCShyZXZpc2lvbiA1NDExMSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQ
YXRoLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBw
bGllci5oIgpAQCAtMjE0LDYgKzIxNSwxMSBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8s
IFBhdGhBcHBsaWVyCiAgICAgfQogfQogCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHhmb3JtKQoreworICAgIG1fcGF0aC0+dHJhbnNmb3JtKHhmb3JtKTsKK30K
Kwogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHhmb3Jt
KQogewogICAgIG1fcGF0aC0+dHJhbnNmb3JtKHhmb3JtKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeFNraWEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeFNr
aWEuY3BwCShyZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9UcmFuc2Zvcm1hdGlvbk1hdHJpeFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAog
I2luY2x1ZGUgIlNraWFVdGlscy5oIgpAQCAtNTQsNCArNTUsMjQgQEAgVHJhbnNmb3JtYXRpb25N
YXRyaXg6Om9wZXJhdG9yIFNrTWF0cml4KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0FmZmlu
ZVRyYW5zZm9ybTo6b3BlcmF0b3IgU2tNYXRyaXgoKSBjb25zdAoreworICAgIFNrTWF0cml4IHJl
c3VsdDsKKworICAgIHJlc3VsdC5zZXRTY2FsZVgoV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoYSgp
KSk7CisgICAgcmVzdWx0LnNldFNrZXdYKFdlYkNvcmVEb3VibGVUb1NrU2NhbGFyKGMoKSkpOwor
ICAgIHJlc3VsdC5zZXRUcmFuc2xhdGVYKFdlYkNvcmVEb3VibGVUb1NrU2NhbGFyKGUoKSkpOwor
CisgICAgcmVzdWx0LnNldFNjYWxlWShXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihkKCkpKTsKKyAg
ICByZXN1bHQuc2V0U2tld1koV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoYigpKSk7CisgICAgcmVz
dWx0LnNldFRyYW5zbGF0ZVkoV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoZigpKSk7CisKKyAgICAv
LyBGSVhNRTogU2V0IHBlcnNwZWN0aXZlIHByb3Blcmx5LgorICAgIHJlc3VsdC5zZXRQZXJzcFgo
MCk7CisgICAgcmVzdWx0LnNldFBlcnNwWSgwKTsKKyAgICByZXN1bHQuc2V0KFNrTWF0cml4Ojpr
TVBlcnNwMiwgU0tfU2NhbGFyMSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvQWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorCisjaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBhZmZpbmVUcmFu
c2Zvcm1EZWNvbXBvc2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgsIGRvdWJsZSBzcls5
XSkKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbShtYXRyaXgpOworCisgICAgLy8gQ29tcHV0ZSBz
Y2FsaW5nIGZhY3RvcnMKKyAgICBkb3VibGUgc3ggPSBzcXJ0KG0uYSgpICogbS5hKCkgKyBtLmIo
KSAqIG0uYigpKTsKKyAgICBkb3VibGUgc3kgPSBzcXJ0KG0uYygpICogbS5jKCkgKyBtLmQoKSAq
IG0uZCgpKTsKKworICAgIC8vIENvbXB1dGUgY3Jvc3MgcHJvZHVjdCBvZiB0cmFuc2Zvcm1lZCB1
bml0IHZlY3RvcnMuIElmIG5lZ2F0aXZlLAorICAgIC8vIG9uZSBheGlzIHdhcyBmbGlwcGVkLgor
ICAgIGlmIChtLmEoKSAqIG0uZCgpIC0gbS5jKCkgKiBtLmIoKSA8IDAuMCkgeworICAgICAgICAv
LyBGbGlwIGF4aXMgd2l0aCBtaW5pbXVtIHVuaXQgdmVjdG9yIGRvdCBwcm9kdWN0CisgICAgICAg
IGlmIChtLmEoKSA8IG0uZCgpKQorICAgICAgICAgICAgc3ggPSAtc3g7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHN5ID0gLXN5OworICAgIH0KKworICAgIC8vIFJlbW92ZSBzY2FsZSBmcm9t
IG1hdHJpeAorICAgIG0uc2NhbGUoMS4wIC8gc3gsIDEuMCAvIHN5KTsKKworICAgIC8vIENvbXB1
dGUgcm90YXRpb24KKyAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihtLmIoKSwgbS5hKCkpOworCisg
ICAgLy8gUmVtb3ZlIHJvdGF0aW9uIGZyb20gbWF0cml4CisgICAgbS5yb3RhdGUocmFkMmRlZygt
YW5nbGUpKTsKKworICAgIC8vIFJldHVybiByZXN1bHRzCisgICAgc3JbMF0gPSBzeDsKKyAgICBz
clsxXSA9IHN5OworICAgIHNyWzJdID0gYW5nbGU7CisgICAgc3JbM10gPSBtLmEoKTsKKyAgICBz
cls0XSA9IG0uYigpOworICAgIHNyWzVdID0gbS5jKCk7CisgICAgc3JbNl0gPSBtLmQoKTsKKyAg
ICBzcls3XSA9IG0uZSgpOworICAgIHNyWzhdID0gbS5mKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFm
ZmluZVRyYW5zZm9ybUNvbXBvc2UoQWZmaW5lVHJhbnNmb3JtJiBtLCBjb25zdCBkb3VibGUgc3Jb
OV0pCit7CisgICAgbS5zZXRBKHNyWzNdKTsKKyAgICBtLnNldEIoc3JbNF0pOworICAgIG0uc2V0
Qyhzcls1XSk7CisgICAgbS5zZXREKHNyWzZdKTsKKyAgICBtLnNldEUoc3JbN10pOworICAgIG0u
c2V0Rihzcls4XSk7CisgICAgbS5yb3RhdGUocmFkMmRlZyhzclsyXSkpOworICAgIG0uc2NhbGUo
c3JbMF0sIHNyWzFdKTsKK30KKworQWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVUcmFuc2Zvcm0oKQor
eworICAgIHNldE1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKTsKK30KKworQWZmaW5lVHJhbnNmb3Jt
OjpBZmZpbmVUcmFuc2Zvcm0oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQs
IGRvdWJsZSBlLCBkb3VibGUgZikKK3sKKyAgICBzZXRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZik7
Cit9CisKK3ZvaWQgQWZmaW5lVHJhbnNmb3JtOjpyZXNldCgpCit7CisgICAgc2V0TWF0cml4KDEs
IDAsIDAsIDEsIDAsIDApOworfQorCit2b2lkIEFmZmluZVRyYW5zZm9ybTo6c2V0TWF0cml4KGRv
dWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYp
Cit7CisgICAgbV90cmFuc2Zvcm1bMF0gPSBhOworICAgIG1fdHJhbnNmb3JtWzFdID0gYjsKKyAg
ICBtX3RyYW5zZm9ybVsyXSA9IGM7CisgICAgbV90cmFuc2Zvcm1bM10gPSBkOworICAgIG1fdHJh
bnNmb3JtWzRdID0gZTsKKyAgICBtX3RyYW5zZm9ybVs1XSA9IGY7Cit9CisKK2Jvb2wgQWZmaW5l
VHJhbnNmb3JtOjppc0lkZW50aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fdHJhbnNmb3Jt
WzBdID09IDEgJiYgbV90cmFuc2Zvcm1bMV0gPT0gMAorICAgICAgICAgJiYgbV90cmFuc2Zvcm1b
Ml0gPT0gMCAmJiBtX3RyYW5zZm9ybVszXSA9PSAxCisgICAgICAgICAmJiBtX3RyYW5zZm9ybVs0
XSA9PSAwICYmIG1fdHJhbnNmb3JtWzVdID09IDApOworfQorCitkb3VibGUgQWZmaW5lVHJhbnNm
b3JtOjpkZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybVswXSAqIG1fdHJhbnNm
b3JtWzNdIC0gbV90cmFuc2Zvcm1bMV0gKiBtX3RyYW5zZm9ybVsyXTsKK30KKworYm9vbCBBZmZp
bmVUcmFuc2Zvcm06OmlzSW52ZXJ0aWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRldCgpICE9
IDAuMDsKK30KKworQWZmaW5lVHJhbnNmb3JtIEFmZmluZVRyYW5zZm9ybTo6aW52ZXJzZSgpIGNv
bnN0Cit7CisgICAgZG91YmxlIGRldGVybWluYW50ID0gZGV0KCk7CisgICAgaWYgKGRldGVybWlu
YW50ID09IDAuMCkKKyAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOworCisgICAgQWZm
aW5lVHJhbnNmb3JtIHJlc3VsdDsKKyAgICByZXN1bHQubV90cmFuc2Zvcm1bMF0gPSBtX3RyYW5z
Zm9ybVszXSAvIGRldGVybWluYW50OworICAgIHJlc3VsdC5tX3RyYW5zZm9ybVsxXSA9IC1tX3Ry
YW5zZm9ybVsxXSAvIGRldGVybWluYW50OworICAgIHJlc3VsdC5tX3RyYW5zZm9ybVsyXSA9IC1t
X3RyYW5zZm9ybVsyXSAvIGRldGVybWluYW50OworICAgIHJlc3VsdC5tX3RyYW5zZm9ybVszXSA9
IG1fdHJhbnNmb3JtWzBdIC8gZGV0ZXJtaW5hbnQ7CisgICAgcmVzdWx0Lm1fdHJhbnNmb3JtWzRd
ID0gKG1fdHJhbnNmb3JtWzJdICogbV90cmFuc2Zvcm1bNV0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0gbV90cmFuc2Zvcm1bM10gKiBtX3RyYW5zZm9ybVs0XSkgLyBkZXRlcm1pbmFudDsK
KyAgICByZXN1bHQubV90cmFuc2Zvcm1bNV0gPSAobV90cmFuc2Zvcm1bMV0gKiBtX3RyYW5zZm9y
bVs0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBtX3RyYW5zZm9ybVswXSAqIG1fdHJh
bnNmb3JtWzVdKSAvIGRldGVybWluYW50OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWZm
aW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06Om11bHRpcGx5KGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgb3RoZXIpCit7CisgICAgcmV0dXJuICgqdGhpcykgKj0gb3RoZXI7Cit9CisKK0FmZmlu
ZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjptdWx0TGVmdChjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIG90aGVyKQoreworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuczsKKyAgICAKKyAgICB0cmFu
cy5tX3RyYW5zZm9ybVswXSA9IG90aGVyLm1fdHJhbnNmb3JtWzBdICogbV90cmFuc2Zvcm1bMF0g
KyBvdGhlci5tX3RyYW5zZm9ybVsxXSAqIG1fdHJhbnNmb3JtWzJdOworICAgIHRyYW5zLm1fdHJh
bnNmb3JtWzFdID0gb3RoZXIubV90cmFuc2Zvcm1bMF0gKiBtX3RyYW5zZm9ybVsxXSArIG90aGVy
Lm1fdHJhbnNmb3JtWzFdICogbV90cmFuc2Zvcm1bM107CisgICAgdHJhbnMubV90cmFuc2Zvcm1b
Ml0gPSBvdGhlci5tX3RyYW5zZm9ybVsyXSAqIG1fdHJhbnNmb3JtWzBdICsgb3RoZXIubV90cmFu
c2Zvcm1bM10gKiBtX3RyYW5zZm9ybVsyXTsKKyAgICB0cmFucy5tX3RyYW5zZm9ybVszXSA9IG90
aGVyLm1fdHJhbnNmb3JtWzJdICogbV90cmFuc2Zvcm1bMV0gKyBvdGhlci5tX3RyYW5zZm9ybVsz
XSAqIG1fdHJhbnNmb3JtWzNdOworICAgIHRyYW5zLm1fdHJhbnNmb3JtWzRdID0gb3RoZXIubV90
cmFuc2Zvcm1bNF0gKiBtX3RyYW5zZm9ybVswXSArIG90aGVyLm1fdHJhbnNmb3JtWzVdICogbV90
cmFuc2Zvcm1bMl0gKyBtX3RyYW5zZm9ybVs0XTsKKyAgICB0cmFucy5tX3RyYW5zZm9ybVs1XSA9
IG90aGVyLm1fdHJhbnNmb3JtWzRdICogbV90cmFuc2Zvcm1bMV0gKyBvdGhlci5tX3RyYW5zZm9y
bVs1XSAqIG1fdHJhbnNmb3JtWzNdICsgbV90cmFuc2Zvcm1bNV07CisKKyAgICBzZXRNYXRyaXgo
dHJhbnMubV90cmFuc2Zvcm0pOworICAgIHJldHVybiAqdGhpczsKK30KKworQWZmaW5lVHJhbnNm
b3JtJiBBZmZpbmVUcmFuc2Zvcm06OnJvdGF0ZShkb3VibGUgYSkKK3sKKyAgICAvLyBhbmdsZSBp
cyBpbiBkZWdyZWUuIFN3aXRjaCB0byByYWRpYW4KKyAgICBhID0gZGVnMnJhZChhKTsKKyAgICBk
b3VibGUgY29zQW5nbGUgPSBjb3MoYSk7CisgICAgZG91YmxlIHNpbkFuZ2xlID0gc2luKGEpOwor
ICAgIEFmZmluZVRyYW5zZm9ybSByb3QoY29zQW5nbGUsIHNpbkFuZ2xlLCAtc2luQW5nbGUsIGNv
c0FuZ2xlLCAwLCAwKTsKKworICAgIG11bHRMZWZ0KHJvdCk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2NhbGUoZG91YmxlIHMpCit7
CisgICAgcmV0dXJuIHNjYWxlKHMsIHMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRy
YW5zZm9ybTo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgbV90cmFuc2Zvcm1b
MF0gKj0gc3g7CisgICAgbV90cmFuc2Zvcm1bM10gKj0gc3k7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6dHJhbnNsYXRlKGRvdWJsZSB0
eCwgZG91YmxlIHR5KQoreworICAgIG1fdHJhbnNmb3JtWzRdICs9IHR4OworICAgIG1fdHJhbnNm
b3JtWzVdICs9IHR5OworICAgIHJldHVybiAqdGhpczsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBB
ZmZpbmVUcmFuc2Zvcm06OnNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sK
KyAgICByZXR1cm4gc2NhbGUoc3gsIHN5KTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVU
cmFuc2Zvcm06OnJvdGF0ZUZyb21WZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIHJl
dHVybiByb3RhdGUocmFkMmRlZyhhdGFuMih5LCB4KSkpOworfQorCitBZmZpbmVUcmFuc2Zvcm0m
IEFmZmluZVRyYW5zZm9ybTo6ZmxpcFgoKQoreworICAgIHJldHVybiBzY2FsZSgtMSwgMSk7Cit9
CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpmbGlwWSgpCit7CisgICAgcmV0
dXJuIHNjYWxlKDEsIC0xKTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06
OnNoZWFyKGRvdWJsZSBzeCwgZG91YmxlIHN5KQoreworICAgIEFmZmluZVRyYW5zZm9ybSBzaGVh
cigxLCBzeSwgc3gsIDEsIDAsIDApOworCisgICAgbXVsdExlZnQoc2hlYXIpOworICAgIHJldHVy
biAqdGhpczsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNrZXcoZG91
YmxlIGFuZ2xlWCwgZG91YmxlIGFuZ2xlWSkKK3sKKyAgICByZXR1cm4gc2hlYXIodGFuKGRlZzJy
YWQoYW5nbGVYKSksIHRhbihkZWcycmFkKGFuZ2xlWSkpKTsKK30KKworQWZmaW5lVHJhbnNmb3Jt
JiBBZmZpbmVUcmFuc2Zvcm06OnNrZXdYKGRvdWJsZSBhbmdsZSkKK3sKKyAgICByZXR1cm4gc2hl
YXIodGFuKGRlZzJyYWQoYW5nbGUpKSwgMCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5l
VHJhbnNmb3JtOjpza2V3WShkb3VibGUgYW5nbGUpCit7CisgICAgcmV0dXJuIHNoZWFyKDAsIHRh
bihkZWcycmFkKGFuZ2xlKSkpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5S
ZWN0cyhjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0KQorewor
ICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShk
ZXN0LngoKSAtIHNvdXJjZS54KCksIGRlc3QueSgpIC0gc291cmNlLnkoKSk7CisgICAgdHJhbnNm
b3JtLnNjYWxlKGRlc3Qud2lkdGgoKSAvIHNvdXJjZS53aWR0aCgpLCBkZXN0LmhlaWdodCgpIC8g
c291cmNlLmhlaWdodCgpKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCit2b2lkIEFmZmlu
ZVRyYW5zZm9ybTo6bWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlKiB4MiwgZG91YmxlKiB5
MikgY29uc3QKK3sKKyAgICAqeDIgPSAobV90cmFuc2Zvcm1bMF0gKiB4ICsgbV90cmFuc2Zvcm1b
Ml0gKiB5ICsgbV90cmFuc2Zvcm1bNF0pOworICAgICp5MiA9IChtX3RyYW5zZm9ybVsxXSAqIHgg
KyBtX3RyYW5zZm9ybVszXSAqIHkgKyBtX3RyYW5zZm9ybVs1XSk7Cit9CisKK0ludFBvaW50IEFm
ZmluZVRyYW5zZm9ybTo6bWFwUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorewor
ICAgIGRvdWJsZSB4MiwgeTI7CisgICAgbWFwKHBvaW50LngoKSwgcG9pbnQueSgpLCAmeDIsICZ5
Mik7CisgICAgCisgICAgLy8gUm91bmQgdGhlIHBvaW50LgorICAgIHJldHVybiBJbnRQb2ludChs
cm91bmQoeDIpLCBscm91bmQoeTIpKTsKK30KKworRmxvYXRQb2ludCBBZmZpbmVUcmFuc2Zvcm06
Om1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGRvdWJsZSB4
MiwgeTI7CisgICAgbWFwKHBvaW50LngoKSwgcG9pbnQueSgpLCAmeDIsICZ5Mik7CisKKyAgICBy
ZXR1cm4gRmxvYXRQb2ludChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgyKSwgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCh5MikpOworfQorCitGbG9hdFJlY3QgQWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBGbG9hdFF1YWQgcShyZWN0KTsK
KworICAgIEZsb2F0UXVhZCByZXN1bHQ7CisgICAgcmVzdWx0LnNldFAxKG1hcFBvaW50KHEucDEo
KSkpOworICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChxLnAyKCkpKTsKKyAgICByZXN1bHQuc2V0
UDMobWFwUG9pbnQocS5wMygpKSk7CisgICAgcmVzdWx0LnNldFA0KG1hcFBvaW50KHEucDQoKSkp
OworICAgIHJldHVybiByZXN1bHQuYm91bmRpbmdCb3goKTsKK30KKwordm9pZCBBZmZpbmVUcmFu
c2Zvcm06OmJsZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZnJvbSwgZG91YmxlIHByb2dyZXNz
KQoreworICAgIGRvdWJsZSBzckFbOV0sIHNyQls5XTsKKworICAgIGFmZmluZVRyYW5zZm9ybURl
Y29tcG9zZShmcm9tLCBzckEpOworICAgIGFmZmluZVRyYW5zZm9ybURlY29tcG9zZSgqdGhpcywg
c3JCKTsKKworICAgIC8vIElmIHgtYXhpcyBvZiBvbmUgaXMgZmxpcHBlZCwgYW5kIHktYXhpcyBv
ZiB0aGUgb3RoZXIsIGNvbnZlcnQgdG8gYW4gdW5mbGlwcGVkIHJvdGF0aW9uLgorICAgIGlmICgo
c3JBWzBdIDwgMCAmJiBzckJbMV0gPCAwKSB8fCAoc3JBWzFdIDwgMCAmJiAgc3JCWzBdIDwgMCkp
IHsKKyAgICAgICAgc3JBWzBdID0gLXNyQVswXTsKKyAgICAgICAgc3JBWzFdID0gLXNyQVsxXTsK
KyAgICAgICAgc3JBWzJdICs9IHNyQVsyXSA8IDAgPyBwaURvdWJsZSA6IC1waURvdWJsZTsKKyAg
ICB9CisKKyAgICAvLyBEb24ndCByb3RhdGUgdGhlIGxvbmcgd2F5IGFyb3VuZC4KKyAgICBzckFb
Ml0gPSBmbW9kKHNyQVsyXSwgMi4wICogcGlEb3VibGUpOworICAgIHNyQlsyXSA9IGZtb2Qoc3JC
WzJdLCAyLjAgKiBwaURvdWJsZSk7CisKKyAgICBpZiAoZmFicyhzckFbMl0gLSBzckJbMl0pID4g
cGlEb3VibGUpIHsKKyAgICAgICAgaWYgKHNyQVsyXSA+IHNyQlsyXSkKKyAgICAgICAgICAgIHNy
QVsyXSAtPSBwaURvdWJsZSAqIDIuMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3JCWzJd
IC09IHBpRG91YmxlICogMi4wOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsg
aSsrKQorICAgICAgICBzckFbaV0gPSBzckFbaV0gKyBwcm9ncmVzcyAqIChzckJbaV0gLSBzckFb
aV0pOworCisgICAgYWZmaW5lVHJhbnNmb3JtQ29tcG9zZSgqdGhpcywgc3JBKTsKK30KKworVHJh
bnNmb3JtYXRpb25NYXRyaXggQWZmaW5lVHJhbnNmb3JtOjp0b1RyYW5zZm9ybWF0aW9uTWF0cml4
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1b
MF0sIG1fdHJhbnNmb3JtWzFdLCBtX3RyYW5zZm9ybVsyXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV90cmFuc2Zvcm1bM10sIG1fdHJhbnNmb3JtWzRdLCBtX3RyYW5zZm9ybVs1
XSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9B
ZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAy
MDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFmZmlu
ZVRyYW5zZm9ybV9oCisjZGVmaW5lIEFmZmluZVRyYW5zZm9ybV9oCisKKyNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+IC8vIGZvciBtZW1jcHkK
KyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorCisjaWYgUExBVEZPUk0oQ0cpCisjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NHQWZmaW5lVHJhbnNmb3JtLmg+CisjZWxpZiBQTEFURk9STShD
QUlSTykKKyNpbmNsdWRlIDxjYWlyby5oPgorI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8
UVRyYW5zZm9ybT4KKyNlbGlmIFBMQVRGT1JNKFNLSUEpCisjaW5jbHVkZSA8U2tNYXRyaXguaD4K
KyNlbGlmIFBMQVRGT1JNKFdYKSAmJiBVU0UoV1hHQykKKyNpbmNsdWRlIDx3eC9ncmFwaGljcy5o
PgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2Ns
YXNzIEZsb2F0UXVhZDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEludFBvaW50OworY2xhc3Mg
SW50UmVjdDsKKworY2xhc3MgQWZmaW5lVHJhbnNmb3JtIDogcHVibGljIEZhc3RBbGxvY0Jhc2Ug
eworcHVibGljOgorICAgIHR5cGVkZWYgZG91YmxlIFRyYW5zZm9ybVs2XTsKKworICAgIEFmZmlu
ZVRyYW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybShkb3VibGUgYSwgZG91YmxlIGIsIGRv
dWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKTsKKworICAgIHZvaWQgc2V0TWF0
cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91
YmxlIGYpOworCisgICAgdm9pZCBtYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUqIHgyLCBk
b3VibGUqIHkyKSBjb25zdDsKKworICAgIC8vIFJvdW5kcyB0aGUgbWFwcGVkIHBvaW50IHRvIHRo
ZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuCisgICAgSW50UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50
UG9pbnQmKSBjb25zdDsKKworICAgIEZsb2F0UG9pbnQgbWFwUG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYpIGNvbnN0OworCisgICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3Rhbmds
ZSBvdXQuIFRoaXMgaXMgaGVscGZ1bCBmb3IgYm91bmRpbmcKKyAgICAvLyBib3ggY29tcHV0YXRp
b25zIGJ1dCBtYXkgbm90IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgorICAg
IEludFJlY3QgbWFwUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7CisKKyAgICBGbG9hdFJlY3Qg
bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKworICAgIGJvb2wgaXNJZGVudGl0eSgp
IGNvbnN0OworCisgICAgZG91YmxlIGEoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVswXTsg
fQorICAgIHZvaWQgc2V0QShkb3VibGUgYSkgeyBtX3RyYW5zZm9ybVswXSA9IGE7IH0KKyAgICBk
b3VibGUgYigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtWzFdOyB9CisgICAgdm9pZCBzZXRC
KGRvdWJsZSBiKSB7IG1fdHJhbnNmb3JtWzFdID0gYjsgfQorICAgIGRvdWJsZSBjKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm1bMl07IH0KKyAgICB2b2lkIHNldEMoZG91YmxlIGMpIHsgbV90
cmFuc2Zvcm1bMl0gPSBjOyB9CisgICAgZG91YmxlIGQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
Zm9ybVszXTsgfQorICAgIHZvaWQgc2V0RChkb3VibGUgZCkgeyBtX3RyYW5zZm9ybVszXSA9IGQ7
IH0KKyAgICBkb3VibGUgZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtWzRdOyB9CisgICAg
dm9pZCBzZXRFKGRvdWJsZSBlKSB7IG1fdHJhbnNmb3JtWzRdID0gZTsgfQorICAgIGRvdWJsZSBm
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1bNV07IH0KKyAgICB2b2lkIHNldEYoZG91Ymxl
IGYpIHsgbV90cmFuc2Zvcm1bNV0gPSBmOyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0mIG11bHRpcGx5KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIEFm
ZmluZVRyYW5zZm9ybSYgbXVsdExlZnQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgQWZm
aW5lVHJhbnNmb3JtJiBzY2FsZShkb3VibGUpOyAKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNjYWxl
KGRvdWJsZSBzeCwgZG91YmxlIHN5KTsgCisgICAgQWZmaW5lVHJhbnNmb3JtJiBzY2FsZU5vblVu
aWZvcm0oZG91YmxlIHN4LCBkb3VibGUgc3kpOworICAgIEFmZmluZVRyYW5zZm9ybSYgcm90YXRl
KGRvdWJsZSBkKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHJvdGF0ZUZyb21WZWN0b3IoZG91Ymxl
IHgsIGRvdWJsZSB5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zbGF0ZShkb3VibGUgdHgs
IGRvdWJsZSB0eSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiBzaGVhcihkb3VibGUgc3gsIGRvdWJs
ZSBzeSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiBmbGlwWCgpOworICAgIEFmZmluZVRyYW5zZm9y
bSYgZmxpcFkoKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXcoZG91YmxlIGFuZ2xlWCwgZG91
YmxlIGFuZ2xlWSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiBza2V3WChkb3VibGUgYW5nbGUpOwor
ICAgIEFmZmluZVRyYW5zZm9ybSYgc2tld1koZG91YmxlIGFuZ2xlKTsKKyAKKyAgICBkb3VibGUg
ZGV0KCkgY29uc3Q7CisgICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdDsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gaW52ZXJzZSgpIGNvbnN0OworCisgICAgdm9pZCBibGVuZChjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGZyb20sIGRvdWJsZSBwcm9ncmVzcyk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkgY29uc3Q7CisKKyAgICBib29sIG9wZXJhdG9y
PT0gKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbTIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gKG1fdHJhbnNmb3JtWzBdID09IG0yLm1fdHJhbnNmb3JtWzBdCisgICAgICAgICAgICAgJiYg
bV90cmFuc2Zvcm1bMV0gPT0gbTIubV90cmFuc2Zvcm1bMV0KKyAgICAgICAgICAgICAmJiBtX3Ry
YW5zZm9ybVsyXSA9PSBtMi5tX3RyYW5zZm9ybVsyXQorICAgICAgICAgICAgICYmIG1fdHJhbnNm
b3JtWzNdID09IG0yLm1fdHJhbnNmb3JtWzNdCisgICAgICAgICAgICAgJiYgbV90cmFuc2Zvcm1b
NF0gPT0gbTIubV90cmFuc2Zvcm1bNF0KKyAgICAgICAgICAgICAmJiBtX3RyYW5zZm9ybVs1XSA9
PSBtMi5tX3RyYW5zZm9ybVs1XSk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OyB9CisKKyAgICAvLyAqdGhpcyA9ICp0aGlzICogdCAoaS5lLiwgYSBtdWx0UmlnaHQpCisgICAg
QWZmaW5lVHJhbnNmb3JtJiBvcGVyYXRvcio9KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkKKyAg
ICB7CisgICAgICAgICp0aGlzID0gKnRoaXMgKiB0OworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorICAgIAorICAgIC8vIHJlc3VsdCA9ICp0aGlzICogdCAoaS5lLiwgYSBtdWx0UmlnaHQp
CisgICAgQWZmaW5lVHJhbnNmb3JtIG9wZXJhdG9yKihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQp
IGNvbnN0CisgICAgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcmVzdWx0ID0gdDsKKyAgICAg
ICAgcmVzdWx0Lm11bHRMZWZ0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyNpZiBQTEFURk9STShDRykKKyAgICBvcGVyYXRvciBDR0FmZmluZVRyYW5zZm9ybSgpIGNv
bnN0OworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgb3BlcmF0b3IgY2Fpcm9fbWF0cml4X3Qo
KSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIG9wZXJhdG9yIFFUcmFuc2Zvcm0oKSBj
b25zdDsKKyNlbGlmIFBMQVRGT1JNKFNLSUEpCisgICAgb3BlcmF0b3IgU2tNYXRyaXgoKSBjb25z
dDsKKyNlbGlmIFBMQVRGT1JNKFdYKSAmJiBVU0UoV1hHQykKKyAgICBvcGVyYXRvciB3eEdyYXBo
aWNzTWF0cml4KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldE1hdHJp
eChjb25zdCBUcmFuc2Zvcm0gbSkKKyAgICB7CisgICAgICAgIGlmIChtICYmIG0gIT0gbV90cmFu
c2Zvcm0pCisgICAgICAgICAgICBtZW1jcHkobV90cmFuc2Zvcm0sIG0sIHNpemVvZihUcmFuc2Zv
cm0pKTsKKyAgICB9CisKKyAgICBUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Cit9OworCitBZmZpbmVU
cmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0KTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3Bw
CShyZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3Jh
cGhpY3NDb250ZXh0V2luY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2lu
Y2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKQEAgLTExNDMsNiAr
MTE0NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5CiAgICAg
bV9kYXRhLT5yZXN0b3JlKCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgbV9kYXRhLT5jb25jYXRD
VE0odHJhbnNmb3JtKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIG1fZGF0YS0+Y29uY2F0
Q1RNKHRyYW5zZm9ybSk7CkBAIC0xNTMxLDYgKzE1MzcsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIEdyYWRpZW50RmlsbChkYywgdHYuZGF0YSgpLCB0
di5zaXplKCksIG1lc2guZGF0YSgpLCBtZXNoLnNpemUoKSwgdmVydGljYWwgPyBHUkFESUVOVF9G
SUxMX1JFQ1RfViA6IEdSQURJRU5UX0ZJTExfUkVDVF9IKTsKIH0KIAorQWZmaW5lVHJhbnNmb3Jt
IEdyYXBoaWNzQ29udGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9k
YXRhLT5tX3RyYW5zZm9ybTsKK30KKwogVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0oKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEtPm1fdHJhbnNmb3JtOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRl
eHRXeC5jcHAJKHJldmlzaW9uIDU0MTExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAorI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgpAQCAtMzU5LDYg
KzM2MCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6
Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKCk7Cit9CisKIFRyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNz
Q29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTQ3
MSw2ICs0NzgsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbAog
ICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldEJydXNoKHd4QnJ1c2goY29sb3IpKTsKIH0KIAor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybjsKK30KKwogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L1BhdGhXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9QYXRoV3guY3BwCShyZXZpc2lvbiA1NDExMSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIAorI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjAyLDYgKzIw
MywxNCBAQCB2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByCiAjZW5kaWYK
IH0KIAordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pIAoreworI2lmIFVTRShXWEdDKQorICAgIGlmIChtX3BhdGgpCisgICAgICAgIG1fcGF0aC0+
VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisjZW5kaWYKK30KKwogdm9pZCBQYXRoOjp0cmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgCiB7CiAjaWYgVVNFKFdYR0Mp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4
V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNm
b3JtYXRpb25NYXRyaXhXeC5jcHAJKHJldmlzaW9uIDU0MTExKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAj
aW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgpAQCAtNDUsNiArNDYsMTUgQEAgVHJhbnNmb3JtYXRpb25N
YXRyaXg6Om9wZXJhdG9yIHd4R3JhcGhpYwogICAgIHd4R3JhcGhpY3NNYXRyaXggbWF0cml4ID0g
cmVuZGVyZXItPkNyZWF0ZU1hdHJpeChhKCksIGIoKSwgYygpLCBkKCksIGUoKSwgZigpKTsKICAg
ICByZXR1cm4gbWF0cml4OwogfQorCitBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIHd4R3JhcGhp
Y3NNYXRyaXgoKSBjb25zdAoreworICAgIHd4R3JhcGhpY3NSZW5kZXJlciogcmVuZGVyZXIgPSB3
eEdyYXBoaWNzUmVuZGVyZXI6OkdldERlZmF1bHRSZW5kZXJlcigpOworICAgIEFTU0VSVChyZW5k
ZXJlcik7CisgICAgCisgICAgd3hHcmFwaGljc01hdHJpeCBtYXRyaXggPSByZW5kZXJlci0+Q3Jl
YXRlTWF0cml4KGEoKSwgYigpLCBjKCksIGQoKSwgZSgpLCBmKCkpOworICAgIHJldHVybiBtYXRy
aXg7Cit9CiAjZW5kaWYKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47815</attachid>
            <date>2010-01-31 23:47:27 -0800</date>
            <delta_ts>2010-02-07 17:02:00 -0800</delta_ts>
            <desc>reimplementation of AffineTransformation</desc>
            <filename>affineTransform-1.patch</filename>
            <type>text/plain</type>
            <size>59045</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDEyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM2IEBACisyMDEwLTAxLTMxICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGJhY2sgYW4gQWZmaW5lVHJhbnNmb3JtIGNsYXNzIGZvciB1c2UgYnkgU1ZHCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzc1MAorCisgICAgICAgIFRo
ZXNlIGFyZSB0aGUgZmlyc3Qgc3RlcHMgb24gcmVpbXBsZW1lbnRpbmcgQWZmaW5lVHJhbnNmb3Jt
LiBVbmxpa2UKKyAgICAgICAgdGhlIG9sZCBhZmZpbmUgY29kZSwgdGhpcyBvbmUgaXMgcGxhdGZv
cm0gaW5kZXBlbmRlbnQgbGlrZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4KKyAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGhhcyB0aGUgYmVuZWZpdCwgdGhhdCBpdCBzdG9yZXMganVzdCA2IGRvdWJsZXMg
aW5zdGVhZCBvZgorICAgICAgICAxNiBpbiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4gVGhlIGNhbGN1
bGF0aW9ucyBvZiB0cmFuc2Zvcm1hdGlvbnMgYXJlIG5vdCB0aGF0CisgICAgICAgIGNvbXBsZXgg
YW5kIGNhbiBpbXByb3ZlIHRoZSBtZW1vcnkgdXNhZ2UgYW5kIHNwZWVkIG9mIFNWRy4KKyAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGNhbiBiZSB1c2VkIGJ5IEhUTUwgQ2FudmFzM0Qgb3IgU1ZHLCBz
aW5jZSB0aGV5IGFyZSAyRCByZWxhdGVkIChhdAorICAgICAgICBsZWFzdCBmb3IgdGhlIG1vbWVu
dCkuCisgICAgICAgIEhUTUwgQ2FudmFzIGlzIHRoZSBmaXJzdCB0aGF0IG1ha2VzIHVzZSBvZiB0
aGUgbmV3IEFmZmluZVRyYW5zZm9ybS4gTmV4dCBwYXRjaGVzCisgICAgICAgIHdpbGwgaW50cm9k
dWNlIHRoZSBhZmZpbmUgY29kZSB0byBTVkcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGUg
bmV3IEFmZmluZVRyYW5zZm9ybWF0aW9uIGNvZGUgaXMgdGVzdGVkIGJ5IGZhc3QvY2FudmFzLgor
CisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cm90
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNQ
b2ludEluUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OndpbGxEcmF3KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmg6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJh
bnNmb3JtYXRpb25NYXRyaXhDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm06Om9wZXJhdG9yIGNhaXJvX21hdHJpeF90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmdldEFmZmluZUNUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgQ0dBZmZpbmVU
cmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29u
dGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0QWZm
aW5lQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldEFmZmluZUNUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNvbmNhdENUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIFFUcmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QYXRoU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2Zvcm0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25NYXRyaXhTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgU2tNYXRy
aXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNm
b3JtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjphZmZpbmVUcmFuc2Zvcm1EZWNvbXBv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6YWZmaW5lVHJhbnNmb3JtQ29tcG9zZSk6CisgICAgICAg
IChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybTo6c2V0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bTo6aXNJZGVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmRldCk6
CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmlzSW52ZXJ0aWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmludmVyc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm06Om11bHRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6
cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2NhbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzY2FsZU5vblVuaWZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtOjpyb3RhdGVGcm9tVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybTo6ZmxpcFgpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtOjpmbGlwWSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNoZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2tldyk6CisgICAgICAgIChXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNrZXdYKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybTo6c2tld1kpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZU1hcEJldHdlZW5SZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybTo6bWFwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6dG9UcmFuc2Zvcm1h
dGlvbk1hdHJpeCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZp
bmVUcmFuc2Zvcm0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
OmEpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzZXRBKToKKyAgICAgICAg
KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6Yik6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm06OnNldEIpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpjKToK
KyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2V0Qyk6CisgICAgICAgIChXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm06OmQpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtOjpzZXREKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNldEUpOgorICAgICAgICAoV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtOjpmKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6
c2V0Rik6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yPT0gKToK
KyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKj0pOgorICAgICAgICAoV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtOjpzZXRNYXRyaXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpjb25jYXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Z2V0QWZmaW5lQ1RNKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGlj
c0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldEFm
ZmluZUNUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
VHJhbnNmb3JtYXRpb25NYXRyaXhXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm06Om9wZXJhdG9yIHd4R3JhcGhpY3NNYXRyaXgpOgorCiAyMDEwLTAxLTMxICBLZW50IFRh
bXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSZXZlcnQg
cjU0MTEyIGFuZCByNTQxMjQgYmVjYXVzZSBvZiBXaW5kb3dzIGJ1aWxkIGVycm9yLgpJbmRleDog
V2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2
aXNpb24gNTQxMjYpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTQ2
Niw2ICs0NjYsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNz
L3NraWEvVHJhbnNmb3JtYXRpb25NYXRyaXhTa2lhLmNwcCBcCiAJXAorCXBsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgXAogCXBsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBcCiAJcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAg
XApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1NDEyNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTE2MDEsNiArMTYwMSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Vbml0QmV6aWVyLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhJdGVyYXRvci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24uaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTQxMjYpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQkod29ya2luZyBjb3B5KQpAQCAtMjEzNiw2ICsyMTM2LDggQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvVHJhbnNmb3JtYXRpb25NYXRyaXhTa2lhLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3Jt
T3BlcmF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgnLApJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShy
ZXZpc2lvbiA1NDEyNikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTgwNCw2ICs4MDQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4u
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDU0
MTI2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjQxMDcsNiArMjQxMDcsMTQgQEAKIAkJCQkJTmFtZT0idHJhbnNmb3JtcyINCiAJ
CQkJCT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1x0cmFuc2Zvcm1zXEFmZmluZVRyYW5zZm9ybS5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9G
aWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXHRyYW5zZm9ybXNcQWZmaW5lVHJhbnNmb3JtLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxl
Pg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XHRyYW5zZm9ybXNcSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCINCiAJCQkJCQk+DQogCQkJ
CQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDU0MTI2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMTMsNiArMTMxMyw4IEBACiAJCTg0QTgxRjNF
MEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJj
ZUFscGhhLmggKi87IH07CiAJCTg0QTgxRjQxMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFw
aGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNwcCAqLzsgfTsKIAkJODRB
ODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQwMEZDN0UwMjcwMDk1NTMwMCAv
KiBTb3VyY2VHcmFwaGljLmggKi87IH07CisJCTg0RDBDNDA0MTExNUYxRDQwMDE4QUEzNCAvKiBB
ZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODREMEM0MDMxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAg
Ki87IH07CisJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0RDBDNDA1MTEx
NUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCAqLzsgfTsKIAkJODUwMDREOTQwQUNF
RUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAwNEQ4ODBBQ0VFQUVGMDBDNDM4RjYgLyogRE9N
U1ZHRGVmc0VsZW1lbnQuaCAqLzsgfTsKIAkJODUwMDREOTUwQUNFRUFFRjAwQzQzOEY2IC8qIERP
TVNWR0RlZnNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODUwMDREODkwQUNFRUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVtZW50Lm1t
ICovOyB9OwogCQk4NTAwNEQ5NjBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRGVzY0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDA0RDhB
MEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZXNjRWxlbWVudC5oICovOyB9OwpAQCAtNjcxNiw2
ICs2NzE4LDggQEAKIAkJODRCMkIxRjcwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5l
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViQ29yZUtleUdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCMkIxRjgwNTZCRUYzQTAwRDJCNzcxIC8qIFdl
YkNvcmVLZXlHZW5lcmF0b3IubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBwYXRoID0gV2ViQ29yZUtleUdlbmVyYXRvci5tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCMkIyNEYwNTZCRjE1
RjAwRDJCNzcxIC8qIFNTTEtleUdlbmVyYXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNTTEtleUdlbmVyYXRvck1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CisJCTg0RDBDNDAzMTExNUYxRDQwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWZmaW5lVHJhbnNmb3JtLmNwcDsgcGF0
aCA9IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJODREMEM0MDUxMTE1RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBZmZpbmVUcmFuc2Zvcm0uaDsgcGF0aCA9
IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg1MDA0RDg4MEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZWZzRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRGVmc0VsZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUwMDREODkwQUNFRUFFRjAwQzQzOEY2IC8qIERPTVNW
R0RlZnNFbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERPTVNWR0RlZnNFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTAw
NEQ4QTBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRGVzY0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0Rlc2NFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMDg5OSw2ICsxMDkwMyw4IEBACiAJCTQ5RTkxMUIyMEVGODZEMjcw
MDlEMENBRiAvKiB0cmFuc2Zvcm1zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQk4NEQwQzQwNTExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3Jt
LmggKi8sCisJCQkJODREMEM0MDMxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5j
cHAgKi8sCiAJCQkJNDlFOTExQjUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJhbnNmb3Jt
T3BlcmF0aW9uLmggKi8sCiAJCQkJNDlENURDMjcwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUQ1REMyODBGNDIzQTczMDA4RjIwRkQg
LyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKQEAgLTE4NDY1LDYgKzE4NDcxLDcg
QEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29y
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1
ZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBB
ZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjA2MzksNiArMjA2NDYsNyBAQAog
CQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNv
ZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAv
KiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg0RDBDNDA0MTExNUYxRDQwMDE4
QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lv
biA1NDEyNikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogCi0jaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNh
bnZhc0dyYWRpZW50LmgiCkBAIC0zNTcsNyArMzU3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNjYWxlKGZsbwogICAgIGlmICghaXNmaW5pdGUoc3gpIHwgIWlzZmluaXRlKHN5
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbmV3VHJhbnNm
b3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNm
b3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKICAgICBuZXdUcmFuc2Zvcm0uc2NhbGVOb25Vbmlm
b3JtKHN4LCBzeSk7CiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKICAg
ICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsKQEAgLTM2Niw3ICszNjYsNyBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2NhbGUoZmxvCiAKICAgICBzdGF0ZSgp
Lm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwogICAgIGMtPnNjYWxlKEZsb2F0U2l6ZShzeCwg
c3kpKTsKLSAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkuc2NhbGVO
b25Vbmlmb3JtKDEuMC9zeCwgMS4wL3N5KSk7CisgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZpbmVU
cmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oMS4wIC8gc3gsIDEuMCAvIHN5KSk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
CkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJvdGF0
ZShmbAogICAgIGlmICghaXNmaW5pdGUoYW5nbGVJblJhZGlhbnMpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1fdHJh
bnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1fdHJh
bnNmb3JtOwogICAgIG5ld1RyYW5zZm9ybS5yb3RhdGUoYW5nbGVJblJhZGlhbnMgLyBwaURvdWJs
ZSAqIDE4MC4wKTsKICAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgewogICAg
ICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOwpAQCAtMzg5LDcgKzM4OSw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmwKIAogICAgIHN0YXRlKCku
bV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+cm90YXRlKGFuZ2xlSW5SYWRpYW5z
KTsKLSAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkucm90YXRlKC1h
bmdsZUluUmFkaWFucyAvIHBpRG91YmxlICogMTgwLjApKTsKKyAgICBtX3BhdGgudHJhbnNmb3Jt
KEFmZmluZVRyYW5zZm9ybSgpLnJvdGF0ZSgtYW5nbGVJblJhZGlhbnMgLyBwaURvdWJsZSAqIDE4
MC4wKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2xhdGUoZmxv
YXQgdHgsIGZsb2F0IHR5KQpAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjp0cmFuc2xhdGUKICAgICBpZiAoIWlzZmluaXRlKHR4KSB8ICFpc2Zpbml0ZSh0
eSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG5ld1RyYW5z
Zm9ybSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5z
Zm9ybSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CiAgICAgbmV3VHJhbnNmb3JtLnRyYW5zbGF0ZSh0
eCwgdHkpOwogICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CiAgICAgICAg
IHN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CkBAIC00MTIsNyArNDEyLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZQogCiAgICAgc3RhdGUoKS5tX3Ry
YW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT50cmFuc2xhdGUodHgsIHR5KTsKLSAgICBt
X3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKC10eCwgLXR5
KSk7CisgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoLXR4
LCAtdHkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5zZm9ybShm
bG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBtMjIsIGZsb2F0IGR4LCBmbG9h
dCBkeSkKQEAgLTQyNyw4ICs0MjcsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
dHJhbnNmb3JtCiAgICAgICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0yMikgfCAhaXNm
aW5pdGUoZHkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0obTExLCBtMTIsIG0yMSwgbTIyLCBkeCwgZHkpOwotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG5ld1RyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIHN0YXRlKCkubV90cmFuc2Zvcm07Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBtMjIsIGR4LCBkeSk7
CisgICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIHN0YXRlKCku
bV90cmFuc2Zvcm07CiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKICAg
ICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwpA
QCAtNDQ5LDcgKzQ0OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRUcmFu
c2YKICAgICAgICAgIWlzZmluaXRlKG0xMikgfCAhaXNmaW5pdGUobTIyKSB8ICFpc2Zpbml0ZShk
eSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IHN0
YXRlKCkubV90cmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCkubV90
cmFuc2Zvcm07CiAgICAgaWYgKCFjdG0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBjLT5jb25jYXRDVE0oYy0+Z2V0Q1RNKCkuaW52ZXJzZSgpKTsKQEAgLTcwOCw3ICs3MDgs
NyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNQb2ludEluCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIEZsb2F0UG9pbnQgcG9pbnQoeCwgeSk7Ci0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY3RtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gY3RtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKICAgICBGbG9hdFBvaW50IHRyYW5zZm9ybWVk
UG9pbnQgPSBjdG0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50KTsKICAgICByZXR1cm4gbV9wYXRo
LmNvbnRhaW5zKHRyYW5zZm9ybWVkUG9pbnQpOwogfQpAQCAtMTI0MSw3ICsxMjQxLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KAogCiAgICAgRmxvYXRSZWN0IGRp
cnR5UmVjdCA9IHI7CiAgICAgaWYgKG9wdGlvbnMgJiBDYW52YXNXaWxsRHJhd0FwcGx5VHJhbnNm
b3JtKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IHN0YXRlKCkubV90cmFu
c2Zvcm07CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNmb3Jt
OwogICAgICAgICBkaXJ0eVJlY3QgPSBjdG0ubWFwUmVjdChyKTsKICAgICB9CiAgICAgCkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJl
dmlzaW9uIDU0MTI2KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRfaAogI2RlZmluZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRfaAog
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKQEAgLTIxOCw3ICsyMTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBT
dHJpbmcgbV9zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CiAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2dsb2JhbENvbXBvc2l0ZTsKLSAgICAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgICAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogICAgICAgICAgICAgYm9vbCBtX2ludmVydGlibGVDVE07
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRleHQgc3RhdGUuCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDU0MTI2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTExLDYgKzExMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjb25zdCBp
bnQgY01pc3NwZWxsaW5nTGluZVBhdHRlcm5XaWR0aCA9IDQ7CiAgICAgY29uc3QgaW50IGNNaXNz
cGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGggPSAxOwogCisgICAgY2xhc3MgQWZmaW5lVHJhbnNm
b3JtOwogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR2VuZXJhdG9yOwogICAgIGNsYXNzIEdy
YWRpZW50OwpAQCAtMzA0LDcgKzMwNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICAg
ICAgdm9pZCBjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICAgICAg
dm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGdldENUTSgpIGNvbnN0OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
QWZmaW5lQ1RNKCkgY29uc3Q7CiAKICNpZiBPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKQogICAg
ICAgICB2b2lkIHNldEJpdG1hcChQYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4pOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDU0MTI2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAgdHlwZWRl
ZiBQbGF0Zm9ybVBhdGgqIFBsYXRmb3JtUGF0aFB0cjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CisgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogICAgIGNsYXNzIEZsb2F0UG9pbnQ7CiAgICAg
Y2xhc3MgRmxvYXRSZWN0OwogICAgIGNsYXNzIEZsb2F0U2l6ZTsKQEAgLTE0NSw2ICsxNDYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUxpbmUoY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAogICAgICAgICB2b2lkIGFwcGx5
KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24pIGNvbnN0OworICAgICAgICB2b2lkIHRy
YW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAkocmV2aXNpb24gNTQxMjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogCiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJDYWlyb1BhdGguaCIKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjE2LDYgKzIxNywxNCBAQCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdlCiAgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9u
TWF0cml4KG0ueHgsIG0ueXgsIG0ueHksIG0ueXksIG0ueDAsIG0ueTApOwogfQogCitBZmZpbmVU
cmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAoreworICAgIGNh
aXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fbWF0cml4X3QgbTsKKyAg
ICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSht
Lnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsKK30KKwogY2Fpcm9fdCogR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEt
PmNyOwpAQCAtODAyLDYgKzgxMSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RN
KGNvbnN0IFRyCiAgICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY29uc3QgY2Fpcm9fbWF0cml4X3QgbWF0
cml4ID0gY2Fpcm9fbWF0cml4X3QodHJhbnNmb3JtKTsKKyAgICBjYWlyb190cmFuc2Zvcm0oY3Is
ICZtYXRyaXgpOworICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Cit9CisKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBpbnQgdGhpY2tuZXNzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNhaXJvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oCShyZXZpc2lvbiA1NDEy
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlQ2Fpcm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKICAgICB2b2lkIHJvdGF0ZShm
bG9hdCk7CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KTsKKyAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcigp
IHsgbV90cmFuc3BhcmVuY3lDb3VudCsrOyB9CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXll
cigpIHsgbV90cmFuc3BhcmVuY3lDb3VudC0tOyB9CkBAIC04NSw2ICs4Niw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIHt9CiAgICAgdm9pZCByb3RhdGUoZmxv
YXQpIHt9CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSB7fQorICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIHt9CiAgICAgdm9pZCBjb25jYXRDVE0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSB7fQogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcigpIHt9CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIHt9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCShyZXZpc2lvbiA1
NDEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlBhdGguaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCkBAIC0zMjYsNiArMzI3LDE0IEBAIHZvaWQgUGF0aDo6YXBwbHkodm9p
ZCogaW5mbywgUGF0aEFwcGxpZXIKICAgICBjYWlyb19wYXRoX2Rlc3Ryb3kocGF0aCk7CiB9CiAK
K3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnMpCit7Cisg
ICAgY2Fpcm9fdCogbV9jciA9IHBsYXRmb3JtUGF0aCgpLT5tX2NyOworICAgIGNhaXJvX21hdHJp
eF90IGNfbWF0cml4ID0gY2Fpcm9fbWF0cml4X3QodHJhbnMpOworICAgIGNhaXJvX21hdHJpeF9p
bnZlcnQoJmNfbWF0cml4KTsKKyAgICBjYWlyb190cmFuc2Zvcm0obV9jciwgJmNfbWF0cml4KTsK
K30KKwogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zKQogewogICAgIGNhaXJvX3QqIG1fY3IgPSBwbGF0Zm9ybVBhdGgoKS0+bV9jcjsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWly
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFu
c2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAkocmV2aXNpb24gNTQxMjYpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC00Niw2ICs0NywyMCBAQCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgY2Fpcm9fbWF0CiAgICAgcmV0dXJuIG07CiB9CiAKK0Fm
ZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgY2Fpcm9fbWF0cml4X3QoKSBjb25zdAoreworICAgIGNh
aXJvX21hdHJpeF90IG07CisKKyAgICBjYWlyb19tYXRyaXhfaW5pdCAoJm0sCisgICAgICAgICAg
ICAgICAgICAgICAgIGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYigpLAorICAgICAgICAg
ICAgICAgICAgICAgICBjKCksCisgICAgICAgICAgICAgICAgICAgICAgIGQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgZSgpLAorICAgICAgICAgICAgICAgICAgICAgICBmKCkpOworICAgIHJl
dHVybiBtOworfQorCiB9CiAKIC8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNp
b24gNTQxMjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQ
cml2YXRlLmgiCkBAIC05NTgsNiArOTU5LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFu
c2xhdGUoZmxvYXQgeCwKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25U
b0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKHBsYXRm
b3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOworICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9y
bSk7CisgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5
ID0gZmFsc2U7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQpAQCAtOTY3LDYgKzk3NywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RN
KGNvbnN0IFRyCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlk
ZW50aXR5ID0gZmFsc2U7CiB9CiAKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6Omdl
dEFmZmluZUNUTSgpIGNvbnN0Cit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdCA9IENHQ29udGV4
dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSh0
LmEsIHQuYiwgdC5jLCB0LmQsIHQudHgsIHQudHkpOworfQorCiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gdCA9IENHQ29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVDRy5oCShyZXZpc2lvbiA1NDEyNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSB7fQogICAgIHZvaWQgcm90YXRlKGZsb2F0KSB7fQogICAgIHZvaWQgdHJhbnNs
YXRlKGZsb2F0LCBmbG9hdCkge30KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
Jikge30KICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSB7fQogICAgIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKSB7fQpAQCAtODgsNiArODksNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKICAgICB2b2lkIHJvdGF0ZShmbG9hdCk7CiAgICAg
dm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KTsKKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOwogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcigpIHsgbV90cmFuc3Bh
cmVuY3lDb3VudCsrOyB9CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIHsgbV90cmFu
c3BhcmVuY3lDb3VudC0tOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1Bh
dGhDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRo
Q0cuY3BwCShyZXZpc2lvbiA1NDEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaWYgUExBVEZP
Uk0oQ0cpCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRp
b25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMzQ2LDYgKzM0NywxNSBA
QCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyCiAgICAgQ0dQYXRoQXBw
bHkobV9wYXRoLCAmcGluZm8sIENHUGF0aEFwcGxpZXJUb1BhdGhBcHBsaWVyKTsKIH0KIAordm9p
ZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7Cisg
ICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOworICAgIENH
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybUNHID0gdHJhbnNmb3JtOworICAgIENHUGF0aEFkZFBh
dGgocGF0aCwgJnRyYW5zZm9ybUNHLCBtX3BhdGgpOworICAgIENHUGF0aFJlbGVhc2UobV9wYXRo
KTsKKyAgICBtX3BhdGggPSBwYXRoOworfQorCiB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIENHTXV0YWJsZVBhdGhSZWYg
cGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAkocmV2aXNp
b24gNTQxMjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9u
TWF0cml4Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpZiBQTEFURk9STShDRykKQEAgLTQzLDYgKzQ0
LDE2IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBDR0FmZmluZVQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChmKCkpKTsK
IH0KIAorQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBDR0FmZmluZVRyYW5zZm9ybSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIENHQWZmaW5lVHJhbnNmb3JtTWFrZShuYXJyb3dQcmVjaXNpb25Ub0NH
RmxvYXQoYSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvQ0dGbG9hdChiKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9DR0Zsb2F0KGMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoZCgpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChlKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGYoKSkpOworfQor
CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShDRykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShyZXZp
c2lvbiA1NDEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3ND
b250ZXh0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zOTEsNiArMzkyLDEyIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcigKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCitB
ZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOworfQor
CiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTQ1MSw2ICs0NTgsMTQgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L1BhdGhIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9QYXRoSGFpa3UuY3BwCShyZXZpc2lvbiA1NDEyNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIAorI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTE0Niw2
ICsxNDcsMTEgQEAgdm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllcgogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZv
aWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0p
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA1NDEyNikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlm
CiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKQEAgLTI3NSw2ICsy
NzYsMTMgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dAogICAgIHJl
dHVybiBtX2RhdGEtPnAoKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6
Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sKKyAgICBRVHJhbnNmb3JtIG1hdHJpeChwbGF0Zm9ybUNv
bnRleHQoKS0+Y29tYmluZWRUcmFuc2Zvcm0oKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9y
bShtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0yMSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0cml4Lm0yMigpLCBtYXRyaXguZHgoKSwgbWF0cml4LmR5KCkpOwor
fQorCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0
CiB7CiAgICAgUVRyYW5zZm9ybSBtYXRyaXgocGxhdGZvcm1Db250ZXh0KCktPmNvbWJpbmVkVHJh
bnNmb3JtKCkpOwpAQCAtMTE4OCw2ICsxMTk2LDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
ZGRJbm5lclJvdW5kZWRSZWMKICAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxp
YXNpbmcsIGFudGlBbGlhcyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5wKCktPnNldFdvcmxkVHJh
bnNmb3JtKHRyYW5zZm9ybSwgdHJ1ZSk7CisKKyAgICAvLyBUcmFuc2Zvcm1hdGlvbnMgdG8gdGhl
IGNvbnRleHQgc2hvdWxkbid0IHRyYW5zZm9ybSB0aGUgY3VycmVudFBhdGguCisgICAgLy8gV2Ug
aGF2ZSB0byB1bmRvIGV2ZXJ5IGNoYW5nZSBtYWRlIHRvIHRoZSBjb250ZXh0IGZyb20gdGhlIGN1
cnJlbnRQYXRoCisgICAgLy8gdG8gYXZvaWQgd3JvbmcgZHJhd2luZ3MuCisgICAgaWYgKCFtX2Rh
dGEtPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSAmJiB0cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsK
KyAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXggPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOworICAgICAg
ICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aCAqIG1hdHJpeDsKKyAg
ICAgICAgbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNmb3JtLnRv
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisgICAgfQorfQorCisKIHZvaWQgR3JhcGhpY3NDb250
ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9QYXRoUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvUGF0aFF0LmNwcAkocmV2aXNpb24gNTQxMjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1BhdGhRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gICA8emFja0BrZGUub3JnPgogICogICAg
ICAgICAgICAgICAyMDA2IFJvYiBCdWlzICAgICA8YnVpc0BrZGUub3JnPgotICogICAgICAgICAg
ICAgICAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogICAgICAgICAgICAg
ICAyMDA5LCAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICoKICAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzAsMTIgKzMwLDEzIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVy
LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDxRUGFpbnRl
clBhdGg+CiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4KICNpbmNsdWRlIDxRU3RyaW5nPgpAQCAtMzc5
LDYgKzM4MCwxMSBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyCiAg
ICAgfQogfQogCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKK3sKKyAgICBtX3BhdGggPSBRVHJhbnNmb3JtKHRyYW5zZm9ybSkubWFwKG1fcGF0
aCk7Cit9CisKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0pCiB7CiAgICAgbV9wYXRoID0gUVRyYW5zZm9ybSh0cmFuc2Zvcm0pLm1hcCht
X3BhdGgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlv
bk1hdHJpeFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwCShyZXZpc2lvbiA1NDEyNikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTM2LDYgKzM3LDExIEBAIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpvcGVyYXRvciBRVHJhbnNmb3IKICAgICByZXR1cm4gUVRyYW5zZm9ybShtMTEo
KSwgbTEyKCksIG0xNCgpLCBtMjEoKSwgbTIyKCksIG0yNCgpLCBtNDEoKSwgbTQyKCksIG00NCgp
KTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBRVHJhbnNmb3JtKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gUVRyYW5zZm9ybShhKCksIGIoKSwgYygpLCBkKCksIGUoKSwgZigpKTsKK30K
KwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2aXNpb24g
NTQxMjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKQEAgLTQzOSw2ICs0NDAsMTMgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKAogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+Y29uY2F0KGFmZmluZSk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0
Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHhmb3JtKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC04MDUsNiArODEzLDE3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY28KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNz
Q29udGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sKKyAgICBjb25zdCBTa01hdHJpeCYgbSA9
IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG90YWxNYXRyaXgoKTsKKyAgICByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTY2FsZVgoKSksICAgICAg
Ly8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFNr
ZXdZKCkpLCAgICAgICAvLyBiCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRv
RG91YmxlKG0uZ2V0U2tld1goKSksICAgICAgIC8vIGMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTY2FsZVkoKSksICAgICAgLy8gZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFRyYW5zbGF0ZVgoKSksICAv
LyBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0uZ2V0VHJh
bnNsYXRlWSgpKSk7IC8vIGYKK30KKwogVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0oKSBjb25zdAogewogICAgIGNvbnN0IFNrTWF0cml4JiBtID0gcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3RhbE1hdHJpeCgpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3BwCShyZXZpc2lvbiA1NDEyNikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXRoLmgi
CiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5o
IgpAQCAtMjE0LDYgKzIxNSwxMSBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhB
cHBsaWVyCiAgICAgfQogfQogCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHhmb3JtKQoreworICAgIG1fcGF0aC0+dHJhbnNmb3JtKHhmb3JtKTsKK30KKwogdm9p
ZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHhmb3JtKQogewog
ICAgIG1fcGF0aC0+dHJhbnNmb3JtKHhmb3JtKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeFNraWEuY3Bw
CShyZXZpc2lvbiA1NDEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9UcmFu
c2Zvcm1hdGlvbk1hdHJpeFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1
ZGUgIlNraWFVdGlscy5oIgpAQCAtNTQsNCArNTUsMjQgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXg6
Om9wZXJhdG9yIFNrTWF0cml4KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0FmZmluZVRyYW5z
Zm9ybTo6b3BlcmF0b3IgU2tNYXRyaXgoKSBjb25zdAoreworICAgIFNrTWF0cml4IHJlc3VsdDsK
KworICAgIHJlc3VsdC5zZXRTY2FsZVgoV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoYSgpKSk7Cisg
ICAgcmVzdWx0LnNldFNrZXdYKFdlYkNvcmVEb3VibGVUb1NrU2NhbGFyKGMoKSkpOworICAgIHJl
c3VsdC5zZXRUcmFuc2xhdGVYKFdlYkNvcmVEb3VibGVUb1NrU2NhbGFyKGUoKSkpOworCisgICAg
cmVzdWx0LnNldFNjYWxlWShXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihkKCkpKTsKKyAgICByZXN1
bHQuc2V0U2tld1koV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoYigpKSk7CisgICAgcmVzdWx0LnNl
dFRyYW5zbGF0ZVkoV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoZigpKSk7CisKKyAgICAvLyBGSVhN
RTogU2V0IHBlcnNwZWN0aXZlIHByb3Blcmx5LgorICAgIHJlc3VsdC5zZXRQZXJzcFgoMCk7Cisg
ICAgcmVzdWx0LnNldFBlcnNwWSgwKTsKKyAgICByZXN1bHQuc2V0KFNrTWF0cml4OjprTVBlcnNw
MiwgU0tfU2NhbGFyMSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAg
ICAgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorCisjaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBhZmZpbmVUcmFuc2Zvcm1E
ZWNvbXBvc2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgsIGRvdWJsZSBzcls5XSkKK3sK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gbShtYXRyaXgpOworCisgICAgLy8gQ29tcHV0ZSBzY2FsaW5n
IGZhY3RvcnMKKyAgICBkb3VibGUgc3ggPSBzcXJ0KG0uYSgpICogbS5hKCkgKyBtLmIoKSAqIG0u
YigpKTsKKyAgICBkb3VibGUgc3kgPSBzcXJ0KG0uYygpICogbS5jKCkgKyBtLmQoKSAqIG0uZCgp
KTsKKworICAgIC8vIENvbXB1dGUgY3Jvc3MgcHJvZHVjdCBvZiB0cmFuc2Zvcm1lZCB1bml0IHZl
Y3RvcnMuIElmIG5lZ2F0aXZlLAorICAgIC8vIG9uZSBheGlzIHdhcyBmbGlwcGVkLgorICAgIGlm
IChtLmEoKSAqIG0uZCgpIC0gbS5jKCkgKiBtLmIoKSA8IDAuMCkgeworICAgICAgICAvLyBGbGlw
IGF4aXMgd2l0aCBtaW5pbXVtIHVuaXQgdmVjdG9yIGRvdCBwcm9kdWN0CisgICAgICAgIGlmICht
LmEoKSA8IG0uZCgpKQorICAgICAgICAgICAgc3ggPSAtc3g7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHN5ID0gLXN5OworICAgIH0KKworICAgIC8vIFJlbW92ZSBzY2FsZSBmcm9tIG1hdHJp
eAorICAgIG0uc2NhbGUoMS4wIC8gc3gsIDEuMCAvIHN5KTsKKworICAgIC8vIENvbXB1dGUgcm90
YXRpb24KKyAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihtLmIoKSwgbS5hKCkpOworCisgICAgLy8g
UmVtb3ZlIHJvdGF0aW9uIGZyb20gbWF0cml4CisgICAgbS5yb3RhdGUocmFkMmRlZygtYW5nbGUp
KTsKKworICAgIC8vIFJldHVybiByZXN1bHRzCisgICAgc3JbMF0gPSBzeDsKKyAgICBzclsxXSA9
IHN5OworICAgIHNyWzJdID0gYW5nbGU7CisgICAgc3JbM10gPSBtLmEoKTsKKyAgICBzcls0XSA9
IG0uYigpOworICAgIHNyWzVdID0gbS5jKCk7CisgICAgc3JbNl0gPSBtLmQoKTsKKyAgICBzcls3
XSA9IG0uZSgpOworICAgIHNyWzhdID0gbS5mKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFmZmluZVRy
YW5zZm9ybUNvbXBvc2UoQWZmaW5lVHJhbnNmb3JtJiBtLCBjb25zdCBkb3VibGUgc3JbOV0pCit7
CisgICAgbS5zZXRBKHNyWzNdKTsKKyAgICBtLnNldEIoc3JbNF0pOworICAgIG0uc2V0Qyhzcls1
XSk7CisgICAgbS5zZXREKHNyWzZdKTsKKyAgICBtLnNldEUoc3JbN10pOworICAgIG0uc2V0Rihz
cls4XSk7CisgICAgbS5yb3RhdGUocmFkMmRlZyhzclsyXSkpOworICAgIG0uc2NhbGUoc3JbMF0s
IHNyWzFdKTsKK30KKworQWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVUcmFuc2Zvcm0oKQoreworICAg
IHNldE1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKTsKK30KKworQWZmaW5lVHJhbnNmb3JtOjpBZmZp
bmVUcmFuc2Zvcm0oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJs
ZSBlLCBkb3VibGUgZikKK3sKKyAgICBzZXRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZik7Cit9CisK
K3ZvaWQgQWZmaW5lVHJhbnNmb3JtOjpyZXNldCgpCit7CisgICAgc2V0TWF0cml4KDEsIDAsIDAs
IDEsIDAsIDApOworfQorCit2b2lkIEFmZmluZVRyYW5zZm9ybTo6c2V0TWF0cml4KGRvdWJsZSBh
LCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpCit7Cisg
ICAgbV90cmFuc2Zvcm1bMF0gPSBhOworICAgIG1fdHJhbnNmb3JtWzFdID0gYjsKKyAgICBtX3Ry
YW5zZm9ybVsyXSA9IGM7CisgICAgbV90cmFuc2Zvcm1bM10gPSBkOworICAgIG1fdHJhbnNmb3Jt
WzRdID0gZTsKKyAgICBtX3RyYW5zZm9ybVs1XSA9IGY7Cit9CisKK2Jvb2wgQWZmaW5lVHJhbnNm
b3JtOjppc0lkZW50aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fdHJhbnNmb3JtWzBdID09
IDEgJiYgbV90cmFuc2Zvcm1bMV0gPT0gMAorICAgICAgICAgJiYgbV90cmFuc2Zvcm1bMl0gPT0g
MCAmJiBtX3RyYW5zZm9ybVszXSA9PSAxCisgICAgICAgICAmJiBtX3RyYW5zZm9ybVs0XSA9PSAw
ICYmIG1fdHJhbnNmb3JtWzVdID09IDApOworfQorCitkb3VibGUgQWZmaW5lVHJhbnNmb3JtOjpk
ZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybVswXSAqIG1fdHJhbnNmb3JtWzNd
IC0gbV90cmFuc2Zvcm1bMV0gKiBtX3RyYW5zZm9ybVsyXTsKK30KKworYm9vbCBBZmZpbmVUcmFu
c2Zvcm06OmlzSW52ZXJ0aWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRldCgpICE9IDAuMDsK
K30KKworQWZmaW5lVHJhbnNmb3JtIEFmZmluZVRyYW5zZm9ybTo6aW52ZXJzZSgpIGNvbnN0Cit7
CisgICAgZG91YmxlIGRldGVybWluYW50ID0gZGV0KCk7CisgICAgaWYgKGRldGVybWluYW50ID09
IDAuMCkKKyAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOworCisgICAgQWZmaW5lVHJh
bnNmb3JtIHJlc3VsdDsKKyAgICByZXN1bHQubV90cmFuc2Zvcm1bMF0gPSBtX3RyYW5zZm9ybVsz
XSAvIGRldGVybWluYW50OworICAgIHJlc3VsdC5tX3RyYW5zZm9ybVsxXSA9IC1tX3RyYW5zZm9y
bVsxXSAvIGRldGVybWluYW50OworICAgIHJlc3VsdC5tX3RyYW5zZm9ybVsyXSA9IC1tX3RyYW5z
Zm9ybVsyXSAvIGRldGVybWluYW50OworICAgIHJlc3VsdC5tX3RyYW5zZm9ybVszXSA9IG1fdHJh
bnNmb3JtWzBdIC8gZGV0ZXJtaW5hbnQ7CisgICAgcmVzdWx0Lm1fdHJhbnNmb3JtWzRdID0gKG1f
dHJhbnNmb3JtWzJdICogbV90cmFuc2Zvcm1bNV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0gbV90cmFuc2Zvcm1bM10gKiBtX3RyYW5zZm9ybVs0XSkgLyBkZXRlcm1pbmFudDsKKyAgICBy
ZXN1bHQubV90cmFuc2Zvcm1bNV0gPSAobV90cmFuc2Zvcm1bMV0gKiBtX3RyYW5zZm9ybVs0XQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBtX3RyYW5zZm9ybVswXSAqIG1fdHJhbnNmb3Jt
WzVdKSAvIGRldGVybWluYW50OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWZmaW5lVHJh
bnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06Om11bHRpcGx5KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
b3RoZXIpCit7CisgICAgcmV0dXJuICgqdGhpcykgKj0gb3RoZXI7Cit9CisKK0FmZmluZVRyYW5z
Zm9ybSYgQWZmaW5lVHJhbnNmb3JtOjptdWx0TGVmdChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG90
aGVyKQoreworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuczsKKyAgICAKKyAgICB0cmFucy5tX3Ry
YW5zZm9ybVswXSA9IG90aGVyLm1fdHJhbnNmb3JtWzBdICogbV90cmFuc2Zvcm1bMF0gKyBvdGhl
ci5tX3RyYW5zZm9ybVsxXSAqIG1fdHJhbnNmb3JtWzJdOworICAgIHRyYW5zLm1fdHJhbnNmb3Jt
WzFdID0gb3RoZXIubV90cmFuc2Zvcm1bMF0gKiBtX3RyYW5zZm9ybVsxXSArIG90aGVyLm1fdHJh
bnNmb3JtWzFdICogbV90cmFuc2Zvcm1bM107CisgICAgdHJhbnMubV90cmFuc2Zvcm1bMl0gPSBv
dGhlci5tX3RyYW5zZm9ybVsyXSAqIG1fdHJhbnNmb3JtWzBdICsgb3RoZXIubV90cmFuc2Zvcm1b
M10gKiBtX3RyYW5zZm9ybVsyXTsKKyAgICB0cmFucy5tX3RyYW5zZm9ybVszXSA9IG90aGVyLm1f
dHJhbnNmb3JtWzJdICogbV90cmFuc2Zvcm1bMV0gKyBvdGhlci5tX3RyYW5zZm9ybVszXSAqIG1f
dHJhbnNmb3JtWzNdOworICAgIHRyYW5zLm1fdHJhbnNmb3JtWzRdID0gb3RoZXIubV90cmFuc2Zv
cm1bNF0gKiBtX3RyYW5zZm9ybVswXSArIG90aGVyLm1fdHJhbnNmb3JtWzVdICogbV90cmFuc2Zv
cm1bMl0gKyBtX3RyYW5zZm9ybVs0XTsKKyAgICB0cmFucy5tX3RyYW5zZm9ybVs1XSA9IG90aGVy
Lm1fdHJhbnNmb3JtWzRdICogbV90cmFuc2Zvcm1bMV0gKyBvdGhlci5tX3RyYW5zZm9ybVs1XSAq
IG1fdHJhbnNmb3JtWzNdICsgbV90cmFuc2Zvcm1bNV07CisKKyAgICBzZXRNYXRyaXgodHJhbnMu
bV90cmFuc2Zvcm0pOworICAgIHJldHVybiAqdGhpczsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBB
ZmZpbmVUcmFuc2Zvcm06OnJvdGF0ZShkb3VibGUgYSkKK3sKKyAgICAvLyBhbmdsZSBpcyBpbiBk
ZWdyZWUuIFN3aXRjaCB0byByYWRpYW4KKyAgICBhID0gZGVnMnJhZChhKTsKKyAgICBkb3VibGUg
Y29zQW5nbGUgPSBjb3MoYSk7CisgICAgZG91YmxlIHNpbkFuZ2xlID0gc2luKGEpOworICAgIEFm
ZmluZVRyYW5zZm9ybSByb3QoY29zQW5nbGUsIHNpbkFuZ2xlLCAtc2luQW5nbGUsIGNvc0FuZ2xl
LCAwLCAwKTsKKworICAgIG11bHRMZWZ0KHJvdCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitB
ZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2NhbGUoZG91YmxlIHMpCit7CisgICAg
cmV0dXJuIHNjYWxlKHMsIHMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9y
bTo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgbV90cmFuc2Zvcm1bMF0gKj0g
c3g7CisgICAgbV90cmFuc2Zvcm1bM10gKj0gc3k7CisgICAgcmV0dXJuICp0aGlzOworfQorCitB
ZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91
YmxlIHR5KQoreworICAgIG1fdHJhbnNmb3JtWzRdICs9IHR4OworICAgIG1fdHJhbnNmb3JtWzVd
ICs9IHR5OworICAgIHJldHVybiAqdGhpczsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVU
cmFuc2Zvcm06OnNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICBy
ZXR1cm4gc2NhbGUoc3gsIHN5KTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zv
cm06OnJvdGF0ZUZyb21WZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIHJldHVybiBy
b3RhdGUocmFkMmRlZyhhdGFuMih5LCB4KSkpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmlu
ZVRyYW5zZm9ybTo6ZmxpcFgoKQoreworICAgIHJldHVybiBzY2FsZSgtMSwgMSk7Cit9CisKK0Fm
ZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpmbGlwWSgpCit7CisgICAgcmV0dXJuIHNj
YWxlKDEsIC0xKTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNoZWFy
KGRvdWJsZSBzeCwgZG91YmxlIHN5KQoreworICAgIEFmZmluZVRyYW5zZm9ybSBzaGVhcigxLCBz
eSwgc3gsIDEsIDAsIDApOworCisgICAgbXVsdExlZnQoc2hlYXIpOworICAgIHJldHVybiAqdGhp
czsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNrZXcoZG91YmxlIGFu
Z2xlWCwgZG91YmxlIGFuZ2xlWSkKK3sKKyAgICByZXR1cm4gc2hlYXIodGFuKGRlZzJyYWQoYW5n
bGVYKSksIHRhbihkZWcycmFkKGFuZ2xlWSkpKTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZp
bmVUcmFuc2Zvcm06OnNrZXdYKGRvdWJsZSBhbmdsZSkKK3sKKyAgICByZXR1cm4gc2hlYXIodGFu
KGRlZzJyYWQoYW5nbGUpKSwgMCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNm
b3JtOjpza2V3WShkb3VibGUgYW5nbGUpCit7CisgICAgcmV0dXJuIHNoZWFyKDAsIHRhbihkZWcy
cmFkKGFuZ2xlKSkpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0KQoreworICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShkZXN0Lngo
KSAtIHNvdXJjZS54KCksIGRlc3QueSgpIC0gc291cmNlLnkoKSk7CisgICAgdHJhbnNmb3JtLnNj
YWxlKGRlc3Qud2lkdGgoKSAvIHNvdXJjZS53aWR0aCgpLCBkZXN0LmhlaWdodCgpIC8gc291cmNl
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCit2b2lkIEFmZmluZVRyYW5z
Zm9ybTo6bWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlKiB4MiwgZG91YmxlKiB5MikgY29u
c3QKK3sKKyAgICAqeDIgPSAobV90cmFuc2Zvcm1bMF0gKiB4ICsgbV90cmFuc2Zvcm1bMl0gKiB5
ICsgbV90cmFuc2Zvcm1bNF0pOworICAgICp5MiA9IChtX3RyYW5zZm9ybVsxXSAqIHggKyBtX3Ry
YW5zZm9ybVszXSAqIHkgKyBtX3RyYW5zZm9ybVs1XSk7Cit9CisKK0ludFBvaW50IEFmZmluZVRy
YW5zZm9ybTo6bWFwUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGRv
dWJsZSB4MiwgeTI7CisgICAgbWFwKHBvaW50LngoKSwgcG9pbnQueSgpLCAmeDIsICZ5Mik7Cisg
ICAgCisgICAgLy8gUm91bmQgdGhlIHBvaW50LgorICAgIHJldHVybiBJbnRQb2ludChscm91bmQo
eDIpLCBscm91bmQoeTIpKTsKK30KKworRmxvYXRQb2ludCBBZmZpbmVUcmFuc2Zvcm06Om1hcFBv
aW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGRvdWJsZSB4MiwgeTI7
CisgICAgbWFwKHBvaW50LngoKSwgcG9pbnQueSgpLCAmeDIsICZ5Mik7CisKKyAgICByZXR1cm4g
RmxvYXRQb2ludChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgyKSwgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCh5MikpOworfQorCitGbG9hdFJlY3QgQWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBGbG9hdFF1YWQgcShyZWN0KTsKKworICAg
IEZsb2F0UXVhZCByZXN1bHQ7CisgICAgcmVzdWx0LnNldFAxKG1hcFBvaW50KHEucDEoKSkpOwor
ICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChxLnAyKCkpKTsKKyAgICByZXN1bHQuc2V0UDMobWFw
UG9pbnQocS5wMygpKSk7CisgICAgcmVzdWx0LnNldFA0KG1hcFBvaW50KHEucDQoKSkpOworICAg
IHJldHVybiByZXN1bHQuYm91bmRpbmdCb3goKTsKK30KKwordm9pZCBBZmZpbmVUcmFuc2Zvcm06
OmJsZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKQorewor
ICAgIGRvdWJsZSBzckFbOV0sIHNyQls5XTsKKworICAgIGFmZmluZVRyYW5zZm9ybURlY29tcG9z
ZShmcm9tLCBzckEpOworICAgIGFmZmluZVRyYW5zZm9ybURlY29tcG9zZSgqdGhpcywgc3JCKTsK
KworICAgIC8vIElmIHgtYXhpcyBvZiBvbmUgaXMgZmxpcHBlZCwgYW5kIHktYXhpcyBvZiB0aGUg
b3RoZXIsIGNvbnZlcnQgdG8gYW4gdW5mbGlwcGVkIHJvdGF0aW9uLgorICAgIGlmICgoc3JBWzBd
IDwgMCAmJiBzckJbMV0gPCAwKSB8fCAoc3JBWzFdIDwgMCAmJiAgc3JCWzBdIDwgMCkpIHsKKyAg
ICAgICAgc3JBWzBdID0gLXNyQVswXTsKKyAgICAgICAgc3JBWzFdID0gLXNyQVsxXTsKKyAgICAg
ICAgc3JBWzJdICs9IHNyQVsyXSA8IDAgPyBwaURvdWJsZSA6IC1waURvdWJsZTsKKyAgICB9CisK
KyAgICAvLyBEb24ndCByb3RhdGUgdGhlIGxvbmcgd2F5IGFyb3VuZC4KKyAgICBzckFbMl0gPSBm
bW9kKHNyQVsyXSwgMi4wICogcGlEb3VibGUpOworICAgIHNyQlsyXSA9IGZtb2Qoc3JCWzJdLCAy
LjAgKiBwaURvdWJsZSk7CisKKyAgICBpZiAoZmFicyhzckFbMl0gLSBzckJbMl0pID4gcGlEb3Vi
bGUpIHsKKyAgICAgICAgaWYgKHNyQVsyXSA+IHNyQlsyXSkKKyAgICAgICAgICAgIHNyQVsyXSAt
PSBwaURvdWJsZSAqIDIuMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3JCWzJdIC09IHBp
RG91YmxlICogMi4wOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQor
ICAgICAgICBzckFbaV0gPSBzckFbaV0gKyBwcm9ncmVzcyAqIChzckJbaV0gLSBzckFbaV0pOwor
CisgICAgYWZmaW5lVHJhbnNmb3JtQ29tcG9zZSgqdGhpcywgc3JBKTsKK30KKworVHJhbnNmb3Jt
YXRpb25NYXRyaXggQWZmaW5lVHJhbnNmb3JtOjp0b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1bMF0sIG1f
dHJhbnNmb3JtWzFdLCBtX3RyYW5zZm9ybVsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV90cmFuc2Zvcm1bM10sIG1fdHJhbnNmb3JtWzRdLCBtX3RyYW5zZm9ybVs1XSk7Cit9
CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVU
cmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAyMDEwIERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFmZmluZVRyYW5z
Zm9ybV9oCisjZGVmaW5lIEFmZmluZVRyYW5zZm9ybV9oCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+IC8vIGZvciBtZW1jcHkKKyNpbmNs
dWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorCisjaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NHQWZmaW5lVHJhbnNmb3JtLmg+CisjZWxpZiBQTEFURk9STShDQUlSTykK
KyNpbmNsdWRlIDxjYWlyby5oPgorI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UVRyYW5z
Zm9ybT4KKyNlbGlmIFBMQVRGT1JNKFNLSUEpCisjaW5jbHVkZSA8U2tNYXRyaXguaD4KKyNlbGlm
IFBMQVRGT1JNKFdYKSAmJiBVU0UoV1hHQykKKyNpbmNsdWRlIDx3eC9ncmFwaGljcy5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZs
b2F0UXVhZDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEludFBvaW50OworY2xhc3MgSW50UmVj
dDsKKworY2xhc3MgQWZmaW5lVHJhbnNmb3JtIDogcHVibGljIEZhc3RBbGxvY0Jhc2UgeworcHVi
bGljOgorICAgIHR5cGVkZWYgZG91YmxlIFRyYW5zZm9ybVs2XTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybShkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBj
LCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKTsKKworICAgIHZvaWQgc2V0TWF0cml4KGRv
dWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYp
OworCisgICAgdm9pZCBtYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUqIHgyLCBkb3VibGUq
IHkyKSBjb25zdDsKKworICAgIC8vIFJvdW5kcyB0aGUgbWFwcGVkIHBvaW50IHRvIHRoZSBuZWFy
ZXN0IGludGVnZXIgdmFsdWUuCisgICAgSW50UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKworICAgIEZsb2F0UG9pbnQgbWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNv
bnN0OworCisgICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3RhbmdsZSBvdXQu
IFRoaXMgaXMgaGVscGZ1bCBmb3IgYm91bmRpbmcKKyAgICAvLyBib3ggY29tcHV0YXRpb25zIGJ1
dCBtYXkgbm90IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgorICAgIEludFJl
Y3QgbWFwUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbWFwUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKworICAgIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0
OworCisgICAgZG91YmxlIGEoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVswXTsgfQorICAg
IHZvaWQgc2V0QShkb3VibGUgYSkgeyBtX3RyYW5zZm9ybVswXSA9IGE7IH0KKyAgICBkb3VibGUg
YigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtWzFdOyB9CisgICAgdm9pZCBzZXRCKGRvdWJs
ZSBiKSB7IG1fdHJhbnNmb3JtWzFdID0gYjsgfQorICAgIGRvdWJsZSBjKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2Zvcm1bMl07IH0KKyAgICB2b2lkIHNldEMoZG91YmxlIGMpIHsgbV90cmFuc2Zv
cm1bMl0gPSBjOyB9CisgICAgZG91YmxlIGQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVsz
XTsgfQorICAgIHZvaWQgc2V0RChkb3VibGUgZCkgeyBtX3RyYW5zZm9ybVszXSA9IGQ7IH0KKyAg
ICBkb3VibGUgZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtWzRdOyB9CisgICAgdm9pZCBz
ZXRFKGRvdWJsZSBlKSB7IG1fdHJhbnNmb3JtWzRdID0gZTsgfQorICAgIGRvdWJsZSBmKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm1bNV07IH0KKyAgICB2b2lkIHNldEYoZG91YmxlIGYpIHsg
bV90cmFuc2Zvcm1bNV0gPSBmOyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBBZmZpbmVU
cmFuc2Zvcm0mIG11bHRpcGx5KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIEFmZmluZVRy
YW5zZm9ybSYgbXVsdExlZnQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgQWZmaW5lVHJh
bnNmb3JtJiBzY2FsZShkb3VibGUpOyAKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNjYWxlKGRvdWJs
ZSBzeCwgZG91YmxlIHN5KTsgCisgICAgQWZmaW5lVHJhbnNmb3JtJiBzY2FsZU5vblVuaWZvcm0o
ZG91YmxlIHN4LCBkb3VibGUgc3kpOworICAgIEFmZmluZVRyYW5zZm9ybSYgcm90YXRlKGRvdWJs
ZSBkKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHJvdGF0ZUZyb21WZWN0b3IoZG91YmxlIHgsIGRv
dWJsZSB5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJs
ZSB0eSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiBzaGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSk7
CisgICAgQWZmaW5lVHJhbnNmb3JtJiBmbGlwWCgpOworICAgIEFmZmluZVRyYW5zZm9ybSYgZmxp
cFkoKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXcoZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFu
Z2xlWSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiBza2V3WChkb3VibGUgYW5nbGUpOworICAgIEFm
ZmluZVRyYW5zZm9ybSYgc2tld1koZG91YmxlIGFuZ2xlKTsKKyAKKyAgICBkb3VibGUgZGV0KCkg
Y29uc3Q7CisgICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdDsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gaW52ZXJzZSgpIGNvbnN0OworCisgICAgdm9pZCBibGVuZChjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGZyb20sIGRvdWJsZSBwcm9ncmVzcyk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkgY29uc3Q7CisKKyAgICBib29sIG9wZXJhdG9yPT0gKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgbTIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKG1f
dHJhbnNmb3JtWzBdID09IG0yLm1fdHJhbnNmb3JtWzBdCisgICAgICAgICAgICAgJiYgbV90cmFu
c2Zvcm1bMV0gPT0gbTIubV90cmFuc2Zvcm1bMV0KKyAgICAgICAgICAgICAmJiBtX3RyYW5zZm9y
bVsyXSA9PSBtMi5tX3RyYW5zZm9ybVsyXQorICAgICAgICAgICAgICYmIG1fdHJhbnNmb3JtWzNd
ID09IG0yLm1fdHJhbnNmb3JtWzNdCisgICAgICAgICAgICAgJiYgbV90cmFuc2Zvcm1bNF0gPT0g
bTIubV90cmFuc2Zvcm1bNF0KKyAgICAgICAgICAgICAmJiBtX3RyYW5zZm9ybVs1XSA9PSBtMi5t
X3RyYW5zZm9ybVs1XSk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisK
KyAgICAvLyAqdGhpcyA9ICp0aGlzICogdCAoaS5lLiwgYSBtdWx0UmlnaHQpCisgICAgQWZmaW5l
VHJhbnNmb3JtJiBvcGVyYXRvcio9KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkKKyAgICB7Cisg
ICAgICAgICp0aGlzID0gKnRoaXMgKiB0OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
ICAgIAorICAgIC8vIHJlc3VsdCA9ICp0aGlzICogdCAoaS5lLiwgYSBtdWx0UmlnaHQpCisgICAg
QWZmaW5lVHJhbnNmb3JtIG9wZXJhdG9yKihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpIGNvbnN0
CisgICAgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcmVzdWx0ID0gdDsKKyAgICAgICAgcmVz
dWx0Lm11bHRMZWZ0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyNp
ZiBQTEFURk9STShDRykKKyAgICBvcGVyYXRvciBDR0FmZmluZVRyYW5zZm9ybSgpIGNvbnN0Owor
I2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgb3BlcmF0b3IgY2Fpcm9fbWF0cml4X3QoKSBjb25z
dDsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIG9wZXJhdG9yIFFUcmFuc2Zvcm0oKSBjb25zdDsK
KyNlbGlmIFBMQVRGT1JNKFNLSUEpCisgICAgb3BlcmF0b3IgU2tNYXRyaXgoKSBjb25zdDsKKyNl
bGlmIFBMQVRGT1JNKFdYKSAmJiBVU0UoV1hHQykKKyAgICBvcGVyYXRvciB3eEdyYXBoaWNzTWF0
cml4KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldE1hdHJpeChjb25z
dCBUcmFuc2Zvcm0gbSkKKyAgICB7CisgICAgICAgIGlmIChtICYmIG0gIT0gbV90cmFuc2Zvcm0p
CisgICAgICAgICAgICBtZW1jcHkobV90cmFuc2Zvcm0sIG0sIHNpemVvZihUcmFuc2Zvcm0pKTsK
KyAgICB9CisKKyAgICBUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Cit9OworCitBZmZpbmVUcmFuc2Zv
cm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0KTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkocmV2aXNpb24gNTQx
MjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKICNlbmRpZgogCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTE4OSw2ICsx
OTAsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnRyYQogICAgIE1v
ZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZUTVVMVElQTFkpOwogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGlmICghbV9oZGMpCisgICAgICAgIHJl
dHVybjsKKworICAgIFhGT1JNIHhmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgodHJhbnNmb3Jt
LmEoKSwgdHJhbnNmb3JtLmIoKSwgdHJhbnNmb3JtLmMoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kKCksIHRyYW5zZm9ybS5lKCksIHRyYW5zZm9y
bS5mKCkpOworICAgIE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZU
TVVMVElQTFkpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29u
Y2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7CiAgICAgaWYg
KCFtX2hkYykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3ND
b250ZXh0V2luY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwCShyZXZpc2lvbiA1NDEyNikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5j
bHVkZSAiR3JhZGllbnQuaCIKQEAgLTExNDMsNiArMTE0NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5CiAgICAgbV9kYXRhLT5yZXN0b3JlKCk7CiB9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pCit7CisgICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKK30KKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKQogewogICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CkBAIC0xNTMxLDYg
KzE1MzcsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAg
IEdyYWRpZW50RmlsbChkYywgdHYuZGF0YSgpLCB0di5zaXplKCksIG1lc2guZGF0YSgpLCBtZXNo
LnNpemUoKSwgdmVydGljYWwgPyBHUkFESUVOVF9GSUxMX1JFQ1RfViA6IEdSQURJRU5UX0ZJTExf
UkVDVF9IKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0QWZmaW5l
Q1RNKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5tX3RyYW5zZm9ybTsKK30KKwogVHJh
bnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogewogICAg
IHJldHVybiBtX2RhdGEtPm1fdHJhbnNmb3JtOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDU0MTI2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiRm9udC5oIgpAQCAtMzU5LDYgKzM2MCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorQWZm
aW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK3sgCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Cit9CisK
IFRyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKIHsg
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTQ3MSw2ICs0NzgsMTUgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbAogICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNl
dEJydXNoKHd4QnJ1c2goY29sb3IpKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybjsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1BhdGhXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3BwCShyZXZp
c2lvbiA1NDEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlBhdGguaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjAyLDYgKzIwMywxNCBAQCB2b2lkIFBhdGg6OmFkZEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByCiAjZW5kaWYKIH0KIAordm9pZCBQYXRoOjp0cmFuc2Zvcm0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIAoreworI2lmIFVTRShXWEdDKQorICAg
IGlmIChtX3BhdGgpCisgICAgICAgIG1fcGF0aC0+VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisjZW5k
aWYKK30KKwogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkgCiB7CiAjaWYgVVNFKFdYR0MpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4V3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3JtYXRpb25NYXRyaXhXeC5jcHAJKHJldmlz
aW9uIDU0MTI2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlv
bk1hdHJpeFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgpAQCAt
NDUsNiArNDYsMTUgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIHd4R3JhcGhpYwog
ICAgIHd4R3JhcGhpY3NNYXRyaXggbWF0cml4ID0gcmVuZGVyZXItPkNyZWF0ZU1hdHJpeChhKCks
IGIoKSwgYygpLCBkKCksIGUoKSwgZigpKTsKICAgICByZXR1cm4gbWF0cml4OwogfQorCitBZmZp
bmVUcmFuc2Zvcm06Om9wZXJhdG9yIHd4R3JhcGhpY3NNYXRyaXgoKSBjb25zdAoreworICAgIHd4
R3JhcGhpY3NSZW5kZXJlciogcmVuZGVyZXIgPSB3eEdyYXBoaWNzUmVuZGVyZXI6OkdldERlZmF1
bHRSZW5kZXJlcigpOworICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgCisgICAgd3hHcmFwaGlj
c01hdHJpeCBtYXRyaXggPSByZW5kZXJlci0+Q3JlYXRlTWF0cml4KGEoKSwgYigpLCBjKCksIGQo
KSwgZSgpLCBmKCkpOworICAgIHJldHVybiBtYXRyaXg7Cit9CiAjZW5kaWYKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48307</attachid>
            <date>2010-02-07 16:59:53 -0800</date>
            <delta_ts>2010-02-08 12:06:55 -0800</delta_ts>
            <desc>Add back AffineTransform for SVG</desc>
            <filename>affineTransform-2-2.patch</filename>
            <type>text/plain</type>
            <size>227613</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQ3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzM4IEBACisyMDEwLTAyLTA3ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGJhY2sgYW4gQWZmaW5lVHJhbnNmb3JtIGNsYXNzIGZvciB1c2UgYnkgU1ZHCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzc1MAorCisgICAgICAgIFRo
aXMgYWRkcyBiYWNrIEFmZmluZVRyYW5zZm9ybS4gVGhpcyBzYXZlcyBhZGRpdGlvbmFsIDQlIG1l
bW9yeSBjb25zdW1wdGlvbgorICAgICAgICBvbiB0aGUgNTBrIHJlY3RzIHN0cmVzcyB0ZXN0OiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9hdHRhY2htZW50LmNnaT9pZD00NjcyMQorICAgICAgICBJ
dCBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG9wdGltaXplIHRoZSBjYWxjdWxhdGlvbnMgaW50
ZXJuYWxseSBvZgorICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdG8gdGhlIG5lZWRzIG9mIDJEIHRy
YW5zZm9ybWF0aW9ucyAodGhlIHNlY29uZCBiZW5lZml0IGZvciBTVkcsCisgICAgICAgIHdoaWNo
IHVzZXMgdHJhbnNmb3JtYXRpb25zIHJlbGF0aXZlIG9mdGVuIGF0IHRoZSBtb21lbnQuCisgICAg
ICAgIEV2ZXJ5dGhpbmcgdGhhdCBpcyAyRCByZWxhdGVkIChsaWtlIGltYWdlcywgcGF0dGVybnMs
IGdyYWRpZW50cywgZm9udHMpLCB1c2VzCisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBub3cuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdNYXRyaXg6Om11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjppbnZl
cnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BPRFR5cGVXcmFwcGVyLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4U1ZHTWF0cml4OjptdWx0aXBseUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4U1ZHTWF0cml4OjppbnZlcnNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
VjhTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3JDYWxsYmFjayk6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6IENoYW5nZWQgdG8gQWZmaW5lVHJhbnNmb3JtIG5vdworICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zvcm0pOgorICAgICAg
ICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6Om1hdHJpeFRy
YW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0R3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0UGxhdGZvcm1HcmFk
aWVudFNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpkcmF3VGlsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRl
cm46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjp0aWxlSW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQbGF0
Zm9ybUZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGxhdGZvcm1TdHJva2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjb25jYXRDVE0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvUGF0aEhhaWt1LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvUGF0aFF0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Q
YXR0ZXJuUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNl
VHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QYXR0ZXJuU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpwbGF0Zm9ybVBh
dHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1ha2VJZGVudGl0eSk6IG5lZWRlZCBi
eSBzb21lIHBhcnRzIG9mIFdlYkNvcmUKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bTo6c2NhbGUpOiBEaWRuJ3Qgc2NhbGUgdGhlIGNvbXBsZXRlIG1hdHJpeAorICAgICAgICAoV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUpOiBEaWRuJ3QgcmVzcGVjdCBvdGhlciB0
cmFuc2Zvcm1hdGlvbnMKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2hlYXIp
OiBkaXJlY3QgY2FsY3VsYXRpb24sIG5vIGV4dHJhIG11bHRpcGx5IG9mIG1hdHJpY2VzCisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcCk6CisgICAgICAgIChXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybTo6bWFwUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9B
ZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6aXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXg6OnRvQWZmaW5lVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
R0RJR2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0Q0dXaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDYWlyb1dpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udFdpbmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFw
aGljc0NvbnRleHRXaW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdCaXRtYXBQYXR0ZXJuKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdlOjpkcmF3
UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGF0aFdpbmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZHJhd1BvbHlnb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhQb2x5Z29uOjp0cmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXRoRWxlbWVudDo6dHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGF0aDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVBhdGg6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtUGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Q
bGF0Zm9ybVBhdGhXaW5jZS5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvSW1hZ2VXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd1BhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYWludE1vemlsbGFHdGtXaWRn
ZXQpOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6bG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94TW9kZWxTY2FsZURhdGE6OlJlbmRlckJveE1vZGVsU2NhbGVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsU2NhbGVEYXRhOjp0cmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxTY2FsZURhdGE6OnNldFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3Vs
ZFBhaW50QmFja2dyb3VuZEF0TG93UXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGb3JlaWduT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmpl
Y3Q6OnRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
b3JlaWduT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWln
bk9iamVjdDo6bG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUGF0aDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJQYXRoOjpsb2NhbFRyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clBhdGguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmFic29sdXRlVHJh
bnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpsb2NhbFRyYW5zZm9ybSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6bG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSb290Ojpsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmFic29sdXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxvY2FsVHJhbnNmb3JtKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXI6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXI6OmNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bWFya2VyQm91bmRhcmllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bWFya2VyQ29udGVu
dFRyYW5zZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyOjp2aWV3cG9ydFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lcjo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6YWJzb2x1dGVUcmFuc2Zvcm0pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0NoYXI6OmNoYXJhY3RlclRyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0No
YXJhY3RlckxheW91dEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua1dhbGtl
cjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlR2x5cGhCb3Vu
ZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3hDbG9zZXN0Q2hhcmFj
dGVyVG9Qb3NpdGlvbldhbGtlcjo6Y2h1bmtQb3J0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSW5saW5lVGV4dEJveFNlbGVjdGlvblJlY3RXYWxrZXI6OmNodW5rUG9ydGlvbkNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50Q2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRp
b24pOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmg6CisgICAgICAg
IChXZWJDb3JlOjpNYXJrZXJMYXlvdXQ6Ok1hcmtlckxheW91dCk6CisgICAgICAgICogcmVuZGVy
aW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUcmFuc2Zv
cm1Ub1BhaW50SW5mbyk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3hQYWludFdhbGtlcjo6Y2h1bmtQb3J0aW9uQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUZXh0TGVuZ3RoQ29ycmVjdGlvblRvVGV4
dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OmJ1aWxkTGF5b3V0
SW5mb3JtYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1TdGF0ZTo6YXBwbHlUcmFuc2Zvcm0pOgorICAgICAg
ICAqIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oOgorICAgICAgICAqIHN2Zy9HcmFkaWVudEF0
dHJpYnV0ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50QXR0cmlidXRlczo6Z3JhZGll
bnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1dGVzOjpzZXRH
cmFkaWVudFRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1BhdHRlcm5BdHRyaWJ1dGVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuQXR0cmlidXRlczo6cGF0dGVyblRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuQXR0cmlidXRlczo6c2V0UGF0dGVyblRyYW5zZm9ybSk6
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpyZXNldFRvQmFzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlZFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBseVJl
c3VsdHNUb1RhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6c3VwcGxlbWVudGFsVHJhbnNm
b3JtKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpdFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybSk6CisgICAgICAgICog
c3ZnL1NWR0ZpdFRvVmlld0JveC5oOgorICAgICAgICAqIHN2Zy9TVkdMb2NhdGFibGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTG9jYXRhYmxlOjpnZXRTY3JlZW5DVE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9j
YXRhYmxlOjpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdMb2NhdGFi
bGUuaDoKKyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNYXJrZXJFbGVtZW50Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKToKKyAgICAgICAg
KiBzdmcvU1ZHTWFya2VyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdNYXNrRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6ZHJhd01hc2tlckNvbnRlbnQp
OgorICAgICAgICAqIHN2Zy9TVkdNYXRyaXguaWRsOgorICAgICAgICAqIHN2Zy9TVkdQYXR0ZXJu
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6YnVpbGRQ
YXR0ZXJuKToKKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXRDVE0pOgorICAgICAgICAq
IHN2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6dmlld3BvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NWR0VsZW1lbnQ6OmdldFNjcmVlbkNUTSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
VkdFbGVtZW50Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZH
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0p
OgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3VwcGxlbWVudGFsVHJhbnNmb3JtKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Ojppc1N0eWxlZFRyYW5zZm9ybWFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9T
VkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4
dEJveFF1ZXJ5V2Fsa2VyOjpjaHVua1BvcnRpb25DYWxsYmFjayk6CisgICAgICAgICogc3ZnL1NW
R1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVtZW50OjpnZXRT
Y3JlZW5DVE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmdldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6c3VwcGxlbWVudGFsVHJhbnNmb3Jt
KToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4
dFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtLmNwcDoKKyAgICAg
ICAgKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtKToKKyAgICAgICAgKFNWR1RyYW5zZm9ybTo6
bWF0cml4KToKKyAgICAgICAgKFNWR1RyYW5zZm9ybTo6c2V0TWF0cml4KToKKyAgICAgICAgKiBz
dmcvU1ZHVHJhbnNmb3JtLmg6CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1E
aXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6c2NhbGVk
RGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmlzWmVy
byk6CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmg6CisgICAgICAgICogc3Zn
L1NWR1RyYW5zZm9ybUxpc3QuY3BwOgorICAgICAgICAoU1ZHVHJhbnNmb3JtTGlzdDo6Y3JlYXRl
U1ZHVHJhbnNmb3JtRnJvbU1hdHJpeCk6CisgICAgICAgIChTVkdUcmFuc2Zvcm1MaXN0Ojpjb25j
YXRlbmF0ZSk6CisgICAgICAgIChTVkdUcmFuc2Zvcm1MaXN0Ojp2YWx1ZUFzU3RyaW5nKToKKyAg
ICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zv
cm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OmdldENUTSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpnZXRTY3JlZW5DVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSk6Cisg
ICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Ry
YW5zZm9ybWFibGU6Oik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3Jh
ZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6Z3Jh
ZGllbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6c2V0R3JhZGllbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFRvVGV4dE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50Lmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYWludFNlcnZlclBhdHRlcm46OnBhdHRlcm5UcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXRQYXR0ZXJuVHJhbnNmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXApOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclBhdHRlcm4uaDoKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUmVzb3Vy
Y2VNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtl
clRyYW5zZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlTWFya2VyOjpk
cmF3KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VNYXJrZXIuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxl
OjphcHBseSk6CisKIDIwMTAtMDItMDcgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEz
MTQsNyArMTMxNCw3IEBACiAJCTg0QTgxRjQxMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFw
aGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNwcCAqLzsgfTsKIAkJODRB
ODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQwMEZDN0UwMjcwMDk1NTMwMCAv
KiBTb3VyY2VHcmFwaGljLmggKi87IH07CiAJCTg0RDBDNDA0MTExNUYxRDQwMDE4QUEzNCAvKiBB
ZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODREMEM0MDMxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAg
Ki87IH07Ci0JCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0RDBDNDA1MTEx
NUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCAqLzsgfTsKKwkJODREMEM0MDYxMTE1
RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODREMEM0MDUxMTE1RjFFQTAwMThBQTM0IC8qIEFmZmlu
ZVRyYW5zZm9ybS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTg1MDA0RDk0MEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZWZzRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMDREODgwQUNF
RUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVtZW50LmggKi87IH07CiAJCTg1MDA0RDk1MEFD
RUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZWZzRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDA0RDg5MEFDRUVBRUYwMEM0MzhGNiAvKiBE
T01TVkdEZWZzRWxlbWVudC5tbSAqLzsgfTsKIAkJODUwMDREOTYwQUNFRUFFRjAwQzQzOEY2IC8q
IERPTVNWR0Rlc2NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NTAwNEQ4QTBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRGVzY0VsZW1lbnQu
aCAqLzsgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3Bw
CShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaWYgRU5BQkxFKFNWRykK
ICNpbmNsdWRlICJKU1NWR01hdHJpeC5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdFeGNlcHRp
b24uaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKQEAgLTQxLDE5ICs0MSwxOSBAQCBK
U1ZhbHVlIEpTU1ZHTWF0cml4OjptdWx0aXBseShFeGVjU3RhdGUqCiAKICAgICBKU1NWR01hdHJp
eCogbWF0cml4T2JqID0gc3RhdGljX2Nhc3Q8SlNTVkdNYXRyaXgqPihhc09iamVjdChhcmdzLmF0
KDApKSk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtMSgqaW1wbCgpKTsKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtMigqKG1hdHJpeE9iai0+aW1wbCgpKSk7CisgICAgQWZmaW5lVHJh
bnNmb3JtIG0xKCppbXBsKCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBtMigqKG1hdHJpeE9iai0+
aW1wbCgpKSk7CiAKICAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6
OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRy
aXg+OjpjcmVhdGUobTEubXVsdExlZnQobTIpKS5nZXQoKSwgY29udGV4dCk7CisgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZm
aW5lVHJhbnNmb3JtPjo6Y3JlYXRlKG0xLm11bHRMZWZ0KG0yKSkuZ2V0KCksIGNvbnRleHQpOwog
fQogCiBKU1ZhbHVlIEpTU1ZHTWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYpCiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW1wKCppbXBsKCkpOworICAg
IEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAKICAgICBTVkdFbGVtZW50KiBjb250ZXh0
ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBKU1NWR1N0YXRpY1BP
RFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRlKGltcC5pbnZlcnNlKCkp
LmdldCgpLCBjb250ZXh0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3Jl
YXRlKGltcC5pbnZlcnNlKCkpLmdldCgpLCBjb250ZXh0KTsKIAogICAgIGlmICghaW1wLmlzSW52
ZXJ0aWJsZSgpKQogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1ZHRXhjZXB0aW9uOjpT
VkdfTUFUUklYX05PVF9JTlZFUlRBQkxFKTsKQEAgLTYzLDEzICs2MywxMyBAQCBKU1ZhbHVlIEpT
U1ZHTWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0ZSogCiAKIEpTVmFsdWUgSlNTVkdNYXRyaXg6OnJv
dGF0ZUZyb21WZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGltcCgqaW1wbCgpKTsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gaW1wKCppbXBsKCkpOwogIAogICAgIGZsb2F0IHggPSBhcmdzLmF0KDApLnRvRmxvYXQoZXhl
Yyk7CiAgICAgZmxvYXQgeSA9IGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKTsKIAogICAgIFNWR0Vs
ZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVj
dCh0aGlzKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpjcmVhdGUo
aW1wLnJvdGF0ZUZyb21WZWN0b3IoeCwgeSkpLmdldCgpLCBjb250ZXh0KTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkp
KS5nZXQoKSwgY29udGV4dCk7CiAKICAgICBpZiAoeCA9PSAwLjAgfHwgeSA9PSAwLjApCiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTVkdFeGNlcHRpb246OlNWR19JTlZBTElEX1ZBTFVF
X0VSUik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBwZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBwZXIuaAko
cmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBw
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDEzIEBAIHB1YmxpYzoKIH07CiAKIC8v
IFRoaXMgZmlsZSBjb250YWlucyBKUyB3cmFwcGVyIG9iamVjdHMgZm9yIFNWRyBkYXRhdHlwZXMs
IHRoYXQgYXJlIHBhc3NlZCBhcm91bmQgYnkgdmFsdWUKLS8vIGluIFdlYkNvcmUvc3ZnIChha2Eu
ICdQT0QgdHlwZXMnKS4gRm9yIGluc3RhbmNlIFNWR01hdHJpeCBpcyBtYXBwZWQgdG8gVHJhbnNm
b3JtYXRpb25NYXRyaXgsIGFuZAorLy8gaW4gV2ViQ29yZS9zdmcgKGFrYS4gJ1BPRCB0eXBlcycp
LiBGb3IgaW5zdGFuY2UgU1ZHTWF0cml4IGlzIG1hcHBlZCB0byBBZmZpbmVUcmFuc2Zvcm0sIGFu
ZAogLy8gcGFzc2VkIGFyb3VuZCBhcyBjb25zdCByZWZlcmVuY2UuIFNWRyBET00gZGVtYW5kcyB0
aGVzZSBvYmplY3RzIHRvIGJlICJsaXZlIiwgY2hhbmdlcyB0byBhbnkKIC8vIG9mIHRoZSB3cml0
YWJsZSBhdHRyaWJ1dGVzIG9mIFNWR01hdHJpeCBuZWVkIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUg
b2JqZWN0IHdoaWNoIGV4cG9zZWQgdGhlCiAvLyBTVkdNYXRyaXggb2JqZWN0IChpLmUuICdzb21l
RWxlbWVudC50cmFuc2Zvcm0ubWF0cml4LmEgPSA1MC4wJywgaW4gdGhhdCBjYXNlICdTVkdUcmFu
c2Zvcm0nKS4KLS8vIFRoZSBTVkdUcmFuc2Zvcm0gY2xhc3Mgc3RvcmVzIGl0cyAiVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9tYXRyaXgiIG9iamVjdCBvbiB0aGUgc3RhY2suIElmIGl0IHdvdWxkCisv
LyBUaGUgU1ZHVHJhbnNmb3JtIGNsYXNzIHN0b3JlcyBpdHMgIkFmZmluZVRyYW5zZm9ybSBtX21h
dHJpeCIgb2JqZWN0IG9uIHRoZSBzdGFjay4gSWYgaXQgd291bGQKIC8vIGJlIHN0b3JlZCBhcyBw
b2ludGVyIHdlIGNvdWxkIGp1c3QgYnVpbGQgYW4gYXV0by1nZW5lcmF0ZWQgSlNTVkcqIHdyYXBw
ZXIgb2JqZWN0IGFyb3VuZCBpdAotLy8gYW5kIGFsbCBjaGFuZ2VzIHRvIHRoYXQgb2JqZWN0IHdv
dWxkIGF1dG9tYXRpY2FsbHkgYWZmZWN0IHRoZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogb2JqZWN0
IHN0b3JlZAorLy8gYW5kIGFsbCBjaGFuZ2VzIHRvIHRoYXQgb2JqZWN0IHdvdWxkIGF1dG9tYXRp
Y2FsbHkgYWZmZWN0IHRoZSBBZmZpbmVUcmFuc2Zvcm0qIG9iamVjdCBzdG9yZWQKIC8vIGluIHRo
ZSBTVkdUcmFuc2Zvcm0gb2JqZWN0LiBGb3IgdGhlIHNha2Ugb2YgZWZmaWNpZW5jeSBhbmQgbWVt
b3J5IHdlIGRvbid0IHBhc3MgYXJvdW5kIGFueQogLy8gcHJpbWl0aXZlIHZhbHVlcyBhcyBwb2lu
dGVycywgc28gYSBjdXN0b20gSlMgd3JhcHBlciBvYmplY3QgaXMgbmVlZGVkIGZvciBhbGwgU1ZH
IHR5cGVzLCB0aGF0CiAvLyBhcmUgaW50ZXJuYWxseSByZXByZXNlbnRlZCBieSBQT0QgdHlwZXMg
KFNWR1JlY3QgPC0+IEZsb2F0UmVjdCwgU1ZHUG9pbnQgPC0+IEZsb2F0UG9pbnQsIC4uLikuCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlz
aW9uIDU0NDY0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkod29ya2luZyBjb3B5KQpAQCAtMTgzNiw3ICsxODM2LDcgQEAgbXkgJW5hdGl2ZVR5cGUgPSAo
CiAgICAgIk5vZGVGaWx0ZXIiID0+ICJSZWZQdHI8Tm9kZUZpbHRlcj4iLAogICAgICJTVkdBbmds
ZSIgPT4gIlNWR0FuZ2xlIiwKICAgICAiU1ZHTGVuZ3RoIiA9PiAiU1ZHTGVuZ3RoIiwKLSAgICAi
U1ZHTWF0cml4IiA9PiAiVHJhbnNmb3JtYXRpb25NYXRyaXgiLAorICAgICJTVkdNYXRyaXgiID0+
ICJBZmZpbmVUcmFuc2Zvcm0iLAogICAgICJTVkdOdW1iZXIiID0+ICJmbG9hdCIsCiAgICAgIlNW
R1BhaW50VHlwZSIgPT4gIlNWR1BhaW50OjpTVkdQYWludFR5cGUiLAogICAgICJTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvIiA9PiAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyIsCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCShyZXZpc2lvbiA1NDQ2
NCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQkod29y
a2luZyBjb3B5KQpAQCAtNTc4LDcgKzU3OCw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAg
ICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIlNWR01hdHJpeCIpIHsKLSAgICAgICAgJGltcGxJbmNs
dWRlc3siVHJhbnNmb3JtYXRpb25NYXRyaXguaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRl
c3siQWZmaW5lVHJhbnNmb3JtLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkRPTVNW
R01hdHJpeEludGVybmFsLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNWR0V4Y2Vw
dGlvbi5oIn0gPSAxOwogICAgICAgICByZXR1cm47CkBAIC0xNDI2LDggKzE0MjYsOCBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAjIEZJ
WE1FISBXZSBuZWVkIFtDdXN0b21dIHN1cHBvcnQgZm9yIE9iakMsIHRvIG1vdmUgdGhlc2UgaGFj
a3MgaW50byBET01TVkdMZW5ndGgvTWF0cml4Q3VzdG9tLm1tCi0gICAgICAgICAgICBteSAkc3Zn
TWF0cml4Um90YXRlRnJvbVZlY3RvciA9ICgkcG9kVHlwZSBhbmQgJHBvZFR5cGUgZXEgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4IiBhbmQgJGZ1bmN0aW9uTmFtZSBlcSAicm90YXRlRnJvbVZlY3RvciIp
OwotICAgICAgICAgICAgbXkgJHN2Z01hdHJpeEludmVyc2UgPSAoJHBvZFR5cGUgYW5kICRwb2RU
eXBlIGVxICJUcmFuc2Zvcm1hdGlvbk1hdHJpeCIgYW5kICRmdW5jdGlvbk5hbWUgZXEgImludmVy
c2UiKTsKKyAgICAgICAgICAgIG15ICRzdmdNYXRyaXhSb3RhdGVGcm9tVmVjdG9yID0gKCRwb2RU
eXBlIGFuZCAkcG9kVHlwZSBlcSAiQWZmaW5lVHJhbnNmb3JtIiBhbmQgJGZ1bmN0aW9uTmFtZSBl
cSAicm90YXRlRnJvbVZlY3RvciIpOworICAgICAgICAgICAgbXkgJHN2Z01hdHJpeEludmVyc2Ug
PSAoJHBvZFR5cGUgYW5kICRwb2RUeXBlIGVxICJBZmZpbmVUcmFuc2Zvcm0iIGFuZCAkZnVuY3Rp
b25OYW1lIGVxICJpbnZlcnNlIik7CiAgICAgICAgICAgICBteSAkc3ZnTGVuZ3RoQ29udmVydFRv
U3BlY2lmaWVkVW5pdHMgPSAoJHBvZFR5cGUgYW5kICRwb2RUeXBlIGVxICJTVkdMZW5ndGgiIGFu
ZCAkZnVuY3Rpb25OYW1lIGVxICJjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyIpOwogCiAgICAgICAg
ICAgICBwdXNoKEBwYXJhbWV0ZXJOYW1lcywgImVjIikgaWYgJHJhaXNlc0V4Y2VwdGlvbnMgYW5k
ICEoJHN2Z01hdHJpeFJvdGF0ZUZyb21WZWN0b3IgfHwgJHN2Z01hdHJpeEludmVyc2UpOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lv
biA1NDQ2NCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0J
KHdvcmtpbmcgY29weSkKQEAgLTIxMzAsNyArMjEzMCw3IEBAIHN1YiBHZXROYXRpdmVUeXBlRm9y
Q29udmVyc2lvbnMKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogICAgIHJldHVybiAiRmxvYXRSZWN0
IiBpZiAkdHlwZSBlcSAiU1ZHUmVjdCI7CiAgICAgcmV0dXJuICJGbG9hdFBvaW50IiBpZiAkdHlw
ZSBlcSAiU1ZHUG9pbnQiOwotICAgIHJldHVybiAiVHJhbnNmb3JtYXRpb25NYXRyaXgiIGlmICR0
eXBlIGVxICJTVkdNYXRyaXgiOworICAgIHJldHVybiAiQWZmaW5lVHJhbnNmb3JtIiBpZiAkdHlw
ZSBlcSAiU1ZHTWF0cml4IjsKICAgICByZXR1cm4gImZsb2F0IiBpZiAkdHlwZSBlcSAiU1ZHTnVt
YmVyIjsKICAgICByZXR1cm4gJHR5cGU7CiB9CkBAIC0yMzg0LDcgKzIzODQsNyBAQCBzdWIgR2V0
TmF0aXZlVHlwZQogICAgIHJldHVybiAiUmFuZ2U6OkNvbXBhcmVIb3ciIGlmICR0eXBlIGVxICJD
b21wYXJlSG93IjsKICAgICByZXR1cm4gIkZsb2F0UmVjdCIgaWYgJHR5cGUgZXEgIlNWR1JlY3Qi
OwogICAgIHJldHVybiAiRmxvYXRQb2ludCIgaWYgJHR5cGUgZXEgIlNWR1BvaW50IjsKLSAgICBy
ZXR1cm4gIlRyYW5zZm9ybWF0aW9uTWF0cml4IiBpZiAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKKyAg
ICByZXR1cm4gIkFmZmluZVRyYW5zZm9ybSIgaWYgJHR5cGUgZXEgIlNWR01hdHJpeCI7CiAgICAg
cmV0dXJuICJTVkdUcmFuc2Zvcm0iIGlmICR0eXBlIGVxICJTVkdUcmFuc2Zvcm0iOwogICAgIHJl
dHVybiAiU1ZHTGVuZ3RoIiBpZiAkdHlwZSBlcSAiU1ZHTGVuZ3RoIjsKICAgICByZXR1cm4gIlNW
R0FuZ2xlIiBpZiAkdHlwZSBlcSAiU1ZHQW5nbGUiOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmgJ
KHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwNiw3ICs2MDYsNyBAQCBzdGF0aWMgY29uc3QgaW50IHY4RGVmYXVsdFdy
YXBwZXJJbnRlcm5hCiAgICAgVihTVkdMRU5HVEgsIFNWR0xlbmd0aCkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihTVkdQUkVTRVJWRUFTUEVDVFJB
VElPLCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKSAgICAgICAgICAgICAgICAgICBcCiAgICAgVihT
VkdUUkFOU0ZPUk0sIFNWR1RyYW5zZm9ybSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgVihTVkdNQVRSSVgsIFRyYW5zZm9ybWF0aW9uTWF0cml4KSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVihTVkdNQVRSSVgsIEFmZmluZVRyYW5z
Zm9ybSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihTVkdO
VU1CRVIsIGZsb2F0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgVihTVkdQT0lOVCwgRmxvYXRQb2ludCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihTVkdSRUNULCBGbG9hdFJlY3QpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdNYXRyaXhDdXN0b20uY3Bw
CShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0
cml4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUg
PGNvbmZpZy5oPgogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogCiAjaW5jbHVkZSAiU1ZHRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCkBAIC01MCwxOSArNTAsMTkgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4U1ZHTWF0cml4OjptdWx0aQogICAgIGlmICghVjhTVkdNYXRy
aXg6Okhhc0luc3RhbmNlKGFyZ3NbMF0pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigic2Vj
b25kTWF0cml4IGFyZ3VtZW50IHdhcyBub3QgYSBTVkdNYXRyaXgiKTsKIAotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG0xID0gKlY4U1ZHUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRy
aXg+Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
MiA9ICpWOFNWR1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6dG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIG0xID0gKlY4U1ZHUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG0yID0gKlY4U1ZHUE9EVHlwZVdy
YXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChhcmdzWzBdKSk7CiAKLSAgICBSZWZQdHI8VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxU
cmFuc2Zvcm1hdGlvbk1hdHJpeD4gPiB3cmFwcGVyID0gVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShtMS5tdWx0TGVmdChtMikpOworICAgIFJl
ZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT4gPiB3cmFwcGVy
ID0gVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUobTEu
bXVsdExlZnQobTIpKTsKICAgICByZXR1cm4gdG9WOCh3cmFwcGVyLmdldCgpKTsKIH0KIAogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4U1ZHTWF0cml4OjppbnZlcnNlQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5TVkdNYXRyaXguaW52ZXJz
ZSgpIik7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gKlY4U1ZHUE9EVHlwZVdy
YXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gKlY4U1ZHUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJh
bnNmb3JtPjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVzdWx0ID0gbWF0cml4LmludmVyc2UoKTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gcmVzdWx0ID0gbWF0cml4LmludmVyc2UoKTsKIAogICAgIGlm
ICghbWF0cml4LmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICBlYyA9IFNWR0V4Y2VwdGlvbjo6U1ZH
X01BVFJJWF9OT1RfSU5WRVJUQUJMRTsKQEAgLTcyLDE4ICs3MiwxOCBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhTVkdNYXRyaXg6OmludmVyCiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKTsKICAgICB9CiAKLSAgICBSZWZQdHI8VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gPiB3cmFwcGVyID0gVjhTVkdTdGF0aWNQT0RUeXBlV3Jh
cHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShyZXN1bHQpOworICAgIFJlZlB0cjxW
OFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT4gPiB3cmFwcGVyID0gVjhT
VkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUocmVzdWx0KTsK
ICAgICByZXR1cm4gdG9WOCh3cmFwcGVyLmdldCgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4U1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5TVkdNYXRyaXgucm90YXRlRnJvbVZl
Y3RvcigpIik7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gKlY4U1ZHUE9EVHlw
ZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gKlY4U1ZHUE9EVHlwZVdyYXBwZXI8QWZmaW5l
VHJhbnNmb3JtPjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgZmxvYXQgeCA9IHRvRmxvYXQoYXJnc1swXSk7CiAgICAgZmxvYXQgeSA9IHRv
RmxvYXQoYXJnc1sxXSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVzdWx0ID0gbWF0cml4
OworICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQgPSBtYXRyaXg7CiAgICAgcmVzdWx0LnJvdGF0
ZUZyb21WZWN0b3IoeCwgeSk7CiAgICAgaWYgKHggPT0gMC4wIHx8IHkgPT0gMC4wKQogICAgICAg
ICBlYyA9IFNWR0V4Y2VwdGlvbjo6U1ZHX0lOVkFMSURfVkFMVUVfRVJSOwpAQCAtOTMsNyArOTMs
NyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTVkdNYXRyaXg6OnJvdGF0CiAgICAgICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9CiAKLSAgICBSZWZQdHI8VjhTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gPiB3cmFwcGVyID0gVjhT
VkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShyZXN1
bHQpOworICAgIFJlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9y
bT4gPiB3cmFwcGVyID0gVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+
OjpjcmVhdGUocmVzdWx0KTsKICAgICByZXR1cm4gdG9WOCh3cmFwcGVyLmdldCgpKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNywx
MiArMzM3LDEyIEBAIEltYWdlQnVmZmVyKiBIVE1MQ2FudmFzRWxlbWVudDo6YnVmZmVyKCkKICAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIH0KICAgICAKLVRyYW5zZm9ybWF0aW9uTWF0
cml4IEhUTUxDYW52YXNFbGVtZW50OjpiYXNlVHJhbnNmb3JtKCkgY29uc3QKK0FmZmluZVRyYW5z
Zm9ybSBIVE1MQ2FudmFzRWxlbWVudDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1fY3JlYXRlZEltYWdlQnVmZmVyKTsKICAgICBGbG9hdFNpemUgdW5zY2FsZWRTaXplKHdp
ZHRoKCksIGhlaWdodCgpKTsKICAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9naWNhbFRvRGV2
aWNlKHVuc2NhbGVkU2l6ZSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwor
ICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAgICAgaWYgKHNpemUud2lkdGgoKSAmJiBz
aXplLmhlaWdodCgpKQogICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKHNpemUud2lk
dGgoKSAvIHVuc2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5zY2FsZWRTaXpl
LmhlaWdodCgpKTsKICAgICB0cmFuc2Zvcm0ubXVsdGlwbHkobV9pbWFnZUJ1ZmZlci0+YmFzZVRy
YW5zZm9ybSgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lvbiA1NDQ2
NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIEhUTUxDYW52YXNFbGVtZW50X2gKICNkZWZpbmUgSFRN
TENhbnZhc0VsZW1lbnRfaAogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgogI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIApAQCAtMTAwLDcg
KzEwMCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0T2JzZXJ2ZXIoQ2FudmFzT2JzZXJ2ZXIq
IG9ic2VydmVyKSB7IG1fb2JzZXJ2ZXIgPSBvYnNlcnZlcjsgfQogCi0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggYmFzZVRyYW5zZm9ybSgpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNl
VHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJp
bmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkocmV2aXNpb24gNTQ0NjQpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNywxMyBAQCBGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEludFBvaW50
JiBwCiB7CiB9CiAKK0Zsb2F0UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4VHJhbnNmb3JtKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSBjb25zdAoreworICAgIGRvdWJsZSBuZXdYLCBu
ZXdZOworICAgIHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3gpLCBzdGF0aWNf
Y2FzdDxkb3VibGU+KG1feSksIG5ld1gsIG5ld1kpOworICAgIHJldHVybiBuYXJyb3dQcmVjaXNp
b24obmV3WCwgbmV3WSk7Cit9CisKIEZsb2F0UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIGNvbnN0CiB7CiAgICAg
ZG91YmxlIG5ld1gsIG5ld1k7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQuaAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgU2tQb2ludDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIEludFBvaW50OwogCkBAIC0xMDYsNiArMTA3LDcg
QEAgcHVibGljOgogI2VuZGlmCiAKICAgICBGbG9hdFBvaW50IG1hdHJpeFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OworICAgIEZsb2F0UG9pbnQgbWF0cml4VHJh
bnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZs
b2F0IG1feCwgbV95OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9p
ZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleAogICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKIH0KIAotdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAordm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQWxsb3cgdGhlIGdlbmVyYXRvciB0byBwcm92aWRl
IHZpc3VhbGx5LWVxdWl2YWxlbnQgdGlsaW5nIHBhcmFtZXRlcnMgZm9yIGJldHRlciBwZXJmb3Jt
YW5jZS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgJ
KHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJ
bWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CiAg
ICAgCiAgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvciwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTQgKzE4OSwxNCBAQCB2b2lkIEdyYWRp
ZW50OjpzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTCiAgICAgbV9zcHJlYWRNZXRob2QgPSBzcHJl
YWRNZXRob2Q7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikK
K3ZvaWQgR3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiB7IAogICAgIG1fZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybWF0aW9uID0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogICAgIHNl
dFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b24pOwogfQogCiAjaWYgIVBMQVRGT1JNKFNLSUEpCi12b2lkIEdyYWRpZW50OjpzZXRQbGF0Zm9y
bUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKQordm9p
ZCBHcmFkaWVudDo6c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpCiB7CiB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmgJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTAgQEAKICNpZm5kZWYgR3Jh
ZGllbnRfaAogI2RlZmluZSBHcmFkaWVudF9oCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTEwNywxNCArMTA3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAg
ICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kKTsKICAgICAgICAg
R3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgeyByZXR1cm4gbV9zcHJlYWRNZXRo
b2Q7IH0KLSAgICAgICAgdm9pZCBzZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOworICAgICAgICB2
b2lkIHNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwogICAgICAgICAvLyBRdCBhbmQgQ0cgdHJhbnNmb3Jt
IHRoZSBncmFkaWVudCBhdCBkcmF3IHRpbWUKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpIHsgcmV0dXJuIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uOyB9CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3Jt
KCkgeyByZXR1cm4gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoSW50U2l6
ZSYgc2l6ZSwgRmxvYXRSZWN0JiBzcmNSZWN0KTsKIAotICAgICAgICB2b2lkIHNldFBsYXRmb3Jt
R3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybUdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNm
b3JtYXRpb24pOwogCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0Kik7CkBAIC0xMzgsNyArMTM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBtdXRhYmxlIGJvb2wgbV9zdG9wc1NvcnRlZDsKICAgICAgICAgbXV0YWJsZSBpbnQgbV9s
YXN0U3RvcDsKICAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7Ci0g
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9u
OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247
CiAKICAgICAgICAgUGxhdGZvcm1HcmFkaWVudCBtX2dyYWRpZW50OwogICAgIH07CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDU0
NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBQYXRoOwogICAgIGNsYXNzIFBhdHRlcm47CiAgICAgY2xhc3MgVGV4dFJ1bjsKLSAgICBj
bGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogICAgIC8vIFRoZXNlIGJpdHMgY2FuIGJlIE9S
ZWQgdG9nZXRoZXIgZm9yIGEgdG90YWwgb2YgOCBwb3NzaWJsZSB0ZXh0IGRyYXdpbmcgbW9kZXMu
CiAgICAgY29uc3QgaW50IGNUZXh0SW52aXNpYmxlID0gMDsKQEAgLTMwNCwxMCArMzAzLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBL
VVJMJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRDVE0oKSBjb25z
dDsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdldEFmZmluZUNUTSgpIGNvbnN0OworICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3Q7CiAKICNpZiBPUyhXSU5DRSkgJiYgIVBM
QVRGT1JNKFFUKQogICAgICAgICB2b2lkIHNldEJpdG1hcChQYXNzUmVmUHRyPFNoYXJlZEJpdG1h
cD4pOwpAQCAtMzIwLDcgKzMxNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCBkcmF3Rm9jdXNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpOwogICAgICAgICB2b2lkIHBhaW50
VGV4dEZpZWxkKGNvbnN0IEludFJlY3QmIHJlY3QsIHVuc2lnbmVkIHN0YXRlKTsKICAgICAgICAg
dm9pZCBkcmF3Qml0bWFwKFNoYXJlZEJpdG1hcCosIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKTsKLSAg
ICAgICAgdm9pZCBkcmF3Qml0bWFwUGF0dGVybihTaGFyZWRCaXRtYXAqLCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0SW4sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKKyAg
ICAgICAgdm9pZCBkcmF3Qml0bWFwUGF0dGVybihTaGFyZWRCaXRtYXAqLCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSk7CiAgICAgICAg
IHZvaWQgZHJhd0ljb24oSElDT04gaWNvbiwgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgVUlOVCBm
bGFncyk7CiAgICAgICAgIEhEQyBnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiwgYm9v
bCBzdXBwb3J0QWxwaGFCbGVuZCA9IGZhbHNlLCBib29sIG1heUNyZWF0ZUJpdG1hcCA9IHRydWUp
OyAvLyBUaGUgcGFzc2VkIGluIHJlY3QgaXMgdXNlZCB0byBjcmVhdGUgYSBiaXRtYXAgZm9yIGNv
bXBvc2l0aW5nIGluc2lkZSB0cmFuc3BhcmVuY3kgbGF5ZXJzLgogICAgICAgICB2b2lkIHJlbGVh
c2VXaW5kb3dzQ29udGV4dChIREMsIGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJs
ZW5kID0gZmFsc2UsIGJvb2wgbWF5Q3JlYXRlQml0bWFwID0gdHJ1ZSk7ICAgIC8vIFRoZSBwYXNz
ZWQgaW4gSERDIHNob3VsZCBiZSB0aGUgb25lIGhhbmRlZCBiYWNrIGJ5IGdldFdpbmRvd3NDb250
ZXh0LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJKHJldmlzaW9uIDU0NDY0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZS5o
IgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lk
IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXR0ZXJuVHJhbnNmb3JtID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgoKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVp
Z2h0KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gQWZmaW5lVHJh
bnNmb3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsK
ICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoRmxvYXRQb2ludCgpLCBpbnRyaW5zaWNUaWxlU2l6ZSk7
ICAgIAogICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBv
bmVUaWxlUmVjdC5sb2NhdGlvbigpLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAg
ICAgCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29u
dGV4dCogYwogICAgICAgICB2UnVsZSA9IFJlcGVhdFRpbGU7CiAKICAgICBGbG9hdFNpemUgc2Nh
bGUgPSBjYWxjdWxhdGVQYXR0ZXJuU2NhbGUoZHN0UmVjdCwgc3JjUmVjdCwgaFJ1bGUsIHZSdWxl
KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXR0ZXJuVHJhbnNmb3JtID0gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0
KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNm
b3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKIAog
ICAgIC8vIFdlIHdhbnQgdG8gY29uc3RydWN0IHRoZSBwaGFzZSBzdWNoIHRoYXQgdGhlIHBhdHRl
cm4gaXMgY2VudGVyZWQgKHdoZW4gc3RyZXRjaCBpcyBub3QKICAgICAvLyBzZXQgZm9yIGEgcGFy
dGljdWxhciBydWxlKS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9u
IDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw3ICs3NCw3IEBAIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFN0cmluZzsKLWNsYXNzIFRyYW5zZm9y
bWF0aW9uTWF0cml4OworY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogCiAvLyBUaGlzIGNsYXNzIGdl
dHMgbm90aWZpZWQgd2hlbiBhbiBpbWFnZSBjcmVhdGVzIG9yIGRlc3Ryb3lzIGRlY29kZWQgZnJh
bWVzIGFuZCB3aGVuIGl0IGFkdmFuY2VzIGFuaW1hdGlvbiBmcmFtZXMuCiBjbGFzcyBJbWFnZU9i
c2VydmVyOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
bWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIENv
bG9yIHNvbGlkQ29sb3IoKSBjb25zdCB7IHJldHVybiBDb2xvcigpOyB9CiAgICAgCi0gICAgdmly
dHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCisg
ICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZu
ZGVmIEltYWdlQnVmZmVyX2gKICNkZWZpbmUgSW1hZ2VCdWZmZXJfaAogCi0jaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckRhdGEuaCIKQEAgLTg0LDExICs4NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKICNpZiAh
UExBVEZPUk0oQ0cpCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJhc2VUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOyB9CisgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KCk7IH0KICAgICAgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKEltYWdlQ29sb3JTcGFjZSBz
cmNDb2xvclNwYWNlLCBJbWFnZUNvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7CiAgICAgICAgIHZv
aWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+Jik7CiAjZWxz
ZQotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwgMCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQo
KSk7IH0KKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQoKSk7IH0K
ICNlbmRpZgogICAgIHByaXZhdGU6CiAgICAgICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogICAgIGNs
YXNzIFN0cmluZzsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFwcGxpZXI7Ci0gICAgY2xhc3MgVHJh
bnNmb3JtYXRpb25NYXRyaXg7CiAKICAgICBlbnVtIFdpbmRSdWxlIHsKICAgICAgICAgUlVMRV9O
T05aRVJPID0gMCwKQEAgLTE0Nyw3ICsxNDYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uKSBjb25zdDsK
ICAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgICAg
IHZvaWQgdHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKICAgICBwcml2
YXRlOgogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIgbV9wYXRoOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdHRlcm4uY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
UGF0dGVybjo6flBhdHRlcm4oKQogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCi12b2lkIFBh
dHRlcm46OnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pCit2b2lkIFBhdHRlcm46OnNldFBhdHRlcm5T
cGFjZVRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5TcGFjZVRyYW5zZm9y
bWF0aW9uKQogewogICAgIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24gPSBwYXR0ZXJuU3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsKICAgICBzZXRQbGF0Zm9ybVBhdHRlcm5TcGFjZVRyYW5zZm9ybSgp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHJldmlzaW9uIDU0NDY0KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDEwICsyOCwxMSBAQAogI2lmbmRlZiBQYXR0ZXJuX2gKICNkZWZpbmUgUGF0dGVybl9oCiAK
KyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKwogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2lmIFBMQVRGT1JNKENHKQog
dHlwZWRlZiBzdHJ1Y3QgQ0dQYXR0ZXJuKiBDR1BhdHRlcm5SZWY7CkBAIC02MSwzOSArNjIsNDAg
QEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVBhdHRlcm5QdHI7CiAjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwotICAgIGNsYXNzIElt
YWdlOwogCi0gICAgY2xhc3MgUGF0dGVybiA6IHB1YmxpYyBSZWZDb3VudGVkPFBhdHRlcm4+IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhdHRlcm4+IGNyZWF0ZShJ
bWFnZSogdGlsZUltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXR0ZXJuKHRpbGVJbWFnZSwgcmVwZWF0
WCwgcmVwZWF0WSkpOwotICAgICAgICB9Ci0gICAgICAgIHZpcnR1YWwgflBhdHRlcm4oKTsKK2Ns
YXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEltYWdlOworCitjbGFzcyBQYXR0ZXJuIDogcHVi
bGljIFJlZkNvdW50ZWQ8UGF0dGVybj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBhdHRlcm4+IGNyZWF0ZShJbWFnZSogdGlsZUltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVw
ZWF0WSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGF0dGVybih0aWxlSW1h
Z2UsIHJlcGVhdFgsIHJlcGVhdFkpKTsKKyAgICB9CisgICAgdmlydHVhbCB+UGF0dGVybigpOwog
Ci0gICAgICAgIEltYWdlKiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3RpbGVJbWFnZS5n
ZXQoKTsgfQorICAgIEltYWdlKiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3RpbGVJbWFn
ZS5nZXQoKTsgfQogCi0gICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisgICAgdm9pZCBw
bGF0Zm9ybURlc3Ryb3koKTsKIAotICAgICAgICAvLyBQYXR0ZXJuIHNwYWNlIGlzIGFuIGFic3Ry
YWN0IHNwYWNlIHRoYXQgbWFwcyB0byB0aGUgZGVmYXVsdCB1c2VyIHNwYWNlIGJ5IHRoZSB0cmFu
c2Zvcm1hdGlvbiAndXNlclNwYWNlVHJhbnNmb3JtYXRpb24nIAorICAgIC8vIFBhdHRlcm4gc3Bh
Y2UgaXMgYW4gYWJzdHJhY3Qgc3BhY2UgdGhhdCBtYXBzIHRvIHRoZSBkZWZhdWx0IHVzZXIgc3Bh
Y2UgYnkgdGhlIHRyYW5zZm9ybWF0aW9uICd1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbicgCiAjaWYg
UExBVEZPUk0oU0tJQSkKLSAgICAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIHBsYXRmb3JtUGF0dGVy
bihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pOwor
ICAgIFBsYXRmb3JtUGF0dGVyblB0ciBwbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbik7CiAjZWxzZQotICAgICAgICBQbGF0Zm9ybVBh
dHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CisgICAgUGxhdGZvcm1QYXR0ZXJuUHRy
IGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRy
YW5zZm9ybWF0aW9uKSBjb25zdDsKICNlbmRpZgotICAgICAgICB2b2lkIHNldFBhdHRlcm5TcGFj
ZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblNwYWNlVHJhbnNm
b3JtYXRpb24pOwotICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGF0dGVyblNwYWNlVHJhbnNmb3Jt
KCk7CisgICAgdm9pZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbik7CisgICAgdm9pZCBzZXRQbGF0Zm9ybVBh
dHRlcm5TcGFjZVRyYW5zZm9ybSgpOwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGF0dGVybihJ
bWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKK3ByaXZhdGU6CisgICAgUGF0dGVy
bihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKIAotICAgICAgICBSZWZQdHI8
SW1hZ2U+IG1fdGlsZUltYWdlOwotICAgICAgICBib29sIG1fcmVwZWF0WDsKLSAgICAgICAgYm9v
bCBtX3JlcGVhdFk7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcGF0dGVyblNwYWNl
VHJhbnNmb3JtYXRpb247Ci0gICAgICAgIFBsYXRmb3JtUGF0dGVyblB0ciBtX3BhdHRlcm47Ci0g
ICAgfTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1fdGlsZUltYWdlOworICAgIGJvb2wgbV9yZXBlYXRY
OworICAgIGJvb2wgbV9yZXBlYXRZOworICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5TcGFj
ZVRyYW5zZm9ybWF0aW9uOworICAgIFBsYXRmb3JtUGF0dGVyblB0ciBtX3BhdHRlcm47Cit9Owog
CiB9IC8vbmFtZXNwYWNlCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyby5jcHAJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjks
MTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250LmgiCiAKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUg
IkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjZGVmaW5lIFNZTlRI
RVRJQ19PQkxJUVVFX0FOR0xFIDE0CiAKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIEZvbnQ6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgICAgICAgICAgICAgY2Fpcm9fcG9wX2dy
b3VwX3RvX3NvdXJjZShjcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY29u
dGV4dC0+ZmlsbFBhdHRlcm4oKSkgewotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
YWZmaW5lOworICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKICAgICAgICAgICAg
IGNhaXJvX3NldF9zb3VyY2UoY3IsIGNvbnRleHQtPmZpbGxQYXR0ZXJuKCktPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihhZmZpbmUpKTsKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRBbHBoYSgp
IDwgMS4wZikgewogICAgICAgICAgICAgICAgIGNhaXJvX3B1c2hfZ3JvdXAoY3IpOwpAQCAtMTY2
LDcgKzE2Niw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGMKICAg
ICAgICAgICAgICAgICBjYWlyb19wb3BfZ3JvdXBfdG9fc291cmNlKGNyKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LT5zdHJva2VQYXR0ZXJuKCkpIHsKLSAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFmZmluZTsKKyAgICAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBhZmZpbmU7CiAgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBjb250ZXh0
LT5zdHJva2VQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKTsKICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRBbHBoYSgpIDwgMS4wZikgewogICAgICAgICAgICAgICAg
IGNhaXJvX3B1c2hfZ3JvdXAoY3IpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDU0
NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJQYXR0
ZXJuLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFw
aGljLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgPGNh
aXJvLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNzgsNyArNzcsNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgc2V0UGxhdGZvcm1GaWxsKEdyYXBoCiB7CiAgICAgY2Fpcm9fc2F2ZShjcik7CiAgICAg
aWYgKGdjcC0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggYWZmaW5lOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwogICAgICAgICBjYWly
b19zZXRfc291cmNlKGNyLCBnY3AtPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oYWZmaW5lKSk7CiAgICAgfSBlbHNlIGlmIChnY3AtPnN0YXRlLmZpbGxHcmFkaWVudCkK
ICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ2NwLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoKSk7CkBAIC05Myw3ICs5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRQbGF0Zm9ybVN0cm9rZShHcmEKIHsKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBpZiAoZ2Nw
LT5zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFm
ZmluZTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKICAgICAgICAgY2Fpcm9fc2V0
X3NvdXJjZShjciwgZ2NwLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oYWZmaW5lKSk7CiAgICAgfSBlbHNlIGlmIChnY3AtPnN0YXRlLnN0cm9rZUdyYWRpZW50KQog
ICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBnY3AtPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5w
bGF0Zm9ybUdyYWRpZW50KCkpOwpAQCAtMjA5LDE1ICsyMDgsNyBAQCBHcmFwaGljc0NvbnRleHQ6
On5HcmFwaGljc0NvbnRleHQoKQogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLVRyYW5zZm9ybWF0
aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKLXsKLSAgICBjYWlyb190
KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX21hdHJpeF90IG07Ci0gICAgY2Fp
cm9fZ2V0X21hdHJpeChjciwgJm0pOwotICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCht
Lnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsKLX0KLQotQWZmaW5lVHJhbnNmb3Jt
IEdyYXBoaWNzQ29udGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBH
cmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKICAgICBjYWlyb19tYXRyaXhfdCBtOwpAQCAtODAwLDE3ICs3OTEsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLSAg
ICBjb25zdCBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSBjYWlyb19tYXRyaXhfdCh0cmFuc2Zvcm0p
OwotICAgIGNhaXJvX3RyYW5zZm9ybShjciwgJm1hdHJpeCk7Ci0gICAgbV9kYXRhLT5jb25jYXRD
VE0odHJhbnNmb3JtKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fp
cm8uY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxMiBAQAogCiAj
aWYgUExBVEZPUk0oQ0FJUk8pCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNl
cnZlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8Y2Fp
cm8uaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMTcw
LDcgKzE3MCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAg
ICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCi12b2lkIEltYWdlOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAordm9p
ZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7
CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGF0aENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUg
IlBhdGguaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0zMzUsMTQgKzMzNCw2
IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm8KICAgICBjYWlyb190
cmFuc2Zvcm0obV9jciwgJmNfbWF0cml4KTsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zKQotewotICAgIGNhaXJvX3QqIG1fY3IgPSBw
bGF0Zm9ybVBhdGgoKS0+bV9jcjsKLSAgICBjYWlyb19tYXRyaXhfdCBjX21hdHJpeCA9IGNhaXJv
X21hdHJpeF90KHRyYW5zKTsKLSAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZjX21hdHJpeCk7Ci0g
ICAgY2Fpcm9fdHJhbnNmb3JtKG1fY3IsICZjX21hdHJpeCk7Ci19Ci0KIFN0cmluZyBQYXRoOjpk
ZWJ1Z1N0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKGlzRW1wdHkoKSkKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAJKHJldmlzaW9u
IDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
YWlyb19wYXR0ZXJuX3QqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0CitjYWlyb19wYXR0ZXJuX3QqIFBhdHRlcm46OmNyZWF0
ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdAogewogICAgIGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogICAgIGlmICghc3VyZmFjZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiA1NDQ2NCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1
ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKIAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4K
ICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZDb250ZXh0Lmg+CkBAIC05NjgsMjcgKzk2Nywx
MiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmCiAgICAgbV9kYXRh
LT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgQ0dDb250ZXh0Q29uY2F0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zv
cm0pOwotICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5tX3Vz
ZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLUFmZmlu
ZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0CitBZmZpbmVU
cmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogewogICAgIENHQWZmaW5l
VHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0odC5hLCB0LmIsIHQuYywgdC5kLCB0LnR4LCB0LnR5KTsKIH0K
IAotVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAot
ewotICAgIENHQWZmaW5lVHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250
ZXh0KCkpOwotICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0LmEsIHQuYiwgdC5jLCB0
LmQsIHQudHgsIHQudHkpOwotfQotCiBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICAvLyBJdCBpcyBub3Qg
ZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFjZS4gVGhlIHJvdGF0
aW9uIHBhcnQgb2YgdGhlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCShyZXZp
c2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByb3RhdGUoZmxvYXQpIHt9CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxv
YXQsIGZsb2F0KSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
IHt9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSB7fQog
ICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcigpIHt9CiAgICAgdm9pZCBlbmRUcmFuc3Bh
cmVuY3lMYXllcigpIHt9CiAjZW5kaWYKQEAgLTkwLDcgKzg5LDYgQEAgcHVibGljOgogICAgIHZv
aWQgcm90YXRlKGZsb2F0KTsKICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpOwogICAg
IHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgY29uY2F0
Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdm9pZCBiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKCkgeyBtX3RyYW5zcGFyZW5jeUNvdW50Kys7IH0KICAgICB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgeyBtX3RyYW5zcGFyZW5jeUNvdW50LS07IH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDcgQEAKIAogI2lmIFBMQVRGT1JNKENHKQogCi0jaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UGF0dGVy
bkNhbGxiYWNrKHZvaWQqIGluCiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBo
aWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVjdCgwLCAwLCBD
R0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSkpLCBpbWFnZSk7
CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRl
cm5UcmFuc2Zvcm0sCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKCFuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNw
cAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhD
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpZiBQTEFURk9STShDRykK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCkBAIC0zNTYsMTUgKzM1NSw2IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm8KICAgICBtX3BhdGggPSBwYXRoOwogfQogCi12b2lkIFBhdGg6OnRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIENHTXV0YWJsZVBh
dGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLSAgICBDR0FmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm1DRyA9IHRyYW5zZm9ybTsKLSAgICBDR1BhdGhBZGRQYXRoKHBhdGgsICZ0cmFu
c2Zvcm1DRywgbV9wYXRoKTsKLSAgICBDR1BhdGhSZWxlYXNlKG1fcGF0aCk7Ci0gICAgbV9wYXRo
ID0gcGF0aDsKLX0KLQogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ0cpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhdHRl
cm4uaCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKICNpbmNsdWRl
IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KQEAgLTUwLDExICs1
MCwxMSBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrKHZvaWQqCiAgICAgc3Rh
dGljX2Nhc3Q8SW1hZ2UqPihpbmZvKS0+ZGVyZWYoKTsKIH0KIAotQ0dQYXR0ZXJuUmVmIFBhdHRl
cm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdXNl
clNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0CitDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3Jt
YXRpb24pIGNvbnN0CiB7CiAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0
KCk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXR0ZXJuVHJhbnNmb3JtID0gbV9wYXR0
ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5z
Zm9ybSA9IG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb247CiAgICAgcGF0dGVyblRyYW5zZm9y
bS5tdWx0aXBseSh1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbik7CiAgICAgcGF0dGVyblRyYW5zZm9y
bS5zY2FsZU5vblVuaWZvcm0oMSwgLTEpOwogICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRl
KDAsIC10aWxlUmVjdC5oZWlnaHQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkocmV2aXNpb24g
NTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4
dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBlbi5oIgotI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8R3JhcGhpY3NEZWZzLmg+
CiAjaW5jbHVkZSA8UmVnaW9uLmg+CiAjaW5jbHVkZSA8Vmlldy5oPgpAQCAtMzkyLDE4ICszOTEs
MTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKAogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFm
ZmluZUNUTSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0o
KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENU
TSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC00NjYsMTQg
KzQ1OSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWYKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wg
ZW5hYmxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAJKHJldmlzaW9uIDU0NDY0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiAKICAgICBjdHh0LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50
LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0KQogewogICAgIC8vIEZJWE1FOiBmaW5pc2ggdGhpcyB0byBzdXBwb3J0IGFsc28gcGhhc2Vk
IHBvc2l0aW9uIChzcmNQb2ludCkKICAgICBzdGFydEFuaW1hdGlvbigpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkocmV2aXNpb24gNTQ0
NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1MiwxMSArMTUyLDYgQEAgdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmbwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgUGF0aDo6
dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQogRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVj
dChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAJKHJldmlzaW9uIDU0
NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSwxNCArMjEsMTQgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZv
bnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKICNpbmNsdWRl
ICJGb250U2VsZWN0b3IuaCIKLQogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CiAjaW5jbHVkZSA8UUZvbnRJbmZv
PgpAQCAtNzksNyArNzksNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRlCiAgICAgICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0oY3R4LT5maWxsR3JhZGllbnQoKS0+
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgIHAtPnNldFBlbihRUGVuKGJy
dXNoLCAwKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY3R4LT5maWxsUGF0dGVybigpKSB7Ci0gICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZmZpbmU7CisgICAgICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gYWZmaW5lOwogICAgICAgICAgICAgcC0+c2V0UGVuKFFQZW4oUUJydXNoKGN0eC0+
ZmlsbFBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpLCAwKSk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgcC0+c2V0UGVuKFFDb2xvcihjdHgtPmZpbGxDb2xvcigp
KSk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGUKICAgICAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShjdHgtPnN0cm9rZUdyYWRpZW50
KCktPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICBwLT5zZXRQZW4oUVBl
bihicnVzaCwgY3R4LT5zdHJva2VUaGlja25lc3MoKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGN0
eC0+c3Ryb2tlUGF0dGVybigpKSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBh
ZmZpbmU7CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwogICAgICAgICAgICAg
cC0+c2V0UGVuKFFQZW4oUUJydXNoKGN0eC0+c3Ryb2tlUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oYWZmaW5lKSksIGN0eC0+c3Ryb2tlVGhpY2tuZXNzKCkpKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBwLT5zZXRQZW4oUVBlbihRQ29sb3IoY3R4LT5zdHJva2VDb2xvcigp
KSwgY3R4LT5zdHJva2VUaGlja25lc3MoKSkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDU0NDY0KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVk
ZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlBlbi5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CiAjaW5jbHVkZSA8UURlYnVnPgpAQCAtMjc2
LDIyICsyNzUsMTMgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dAog
ICAgIHJldHVybiBtX2RhdGEtPnAoKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRl
eHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgUVRyYW5zZm9ybSBtYXRyaXgocGxhdGZvcm1Db250
ZXh0KCktPmNvbWJpbmVkVHJhbnNmb3JtKCkpOwogICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
bWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMjEoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdHJpeC5tMjIoKSwgbWF0cml4LmR4KCksIG1hdHJpeC5keSgpKTsKIH0K
IAotVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAot
ewotICAgIFFUcmFuc2Zvcm0gbWF0cml4KHBsYXRmb3JtQ29udGV4dCgpLT5jb21iaW5lZFRyYW5z
Zm9ybSgpKTsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgobWF0cml4Lm0xMSgpLCBt
YXRyaXgubTEyKCksIDAsIG1hdHJpeC5tMTMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIDAsIG1hdHJpeC5tMjMoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgIDAsIDEs
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0z
MSgpLCBtYXRyaXgubTMyKCksIDAsIG1hdHJpeC5tMzMoKSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCiB7CiAgICAgbV9kYXRhLT5wKCktPnNhdmUoKTsK
QEAgLTY1MCw3ICs2NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAg
IGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4gfHwgbV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudCB8fCBmaWxsQ29sb3IoKS5hbHBoYSgpKSB7CiAgICAgICAgIGRyYXdGaWxsZWRTaGFk
b3dQYXRoKHRoaXMsIHAsIHBhdGgpOwogICAgICAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxQ
YXR0ZXJuKSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZmZpbmU7CisgICAg
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwogICAgICAgICAgICAgcC0+ZmlsbFBhdGgo
cGF0aCwgUUJydXNoKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuZmls
bEdyYWRpZW50KSB7CiAgICAgICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fY29tbW9uLT5zdGF0ZS5m
aWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CkBAIC02ODcsNyArNjc3LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgICAgICAgICAgcC0+c2V0V29ybGRU
cmFuc2Zvcm0odCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zdHJv
a2VQYXR0ZXJuKSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZmZpbmU7Cisg
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwogICAgICAgICAgICAgcGVuLnNldEJy
dXNoKFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAgICAgIHAtPnNldFBlbihwZW4pOwogICAgICAgICAg
ICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwpAQCAtNzI3LDcgKzcxNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBpZiAobV9jb21tb24tPnN0YXRl
LmZpbGxQYXR0ZXJuIHx8IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQgfHwgZmlsbENvbG9y
KCkuYWxwaGEoKSkgewogICAgICAgICBkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3codGhpcywgcCwg
cmVjdCk7CiAgICAgICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFmZmluZTsKKyAgICAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBhZmZpbmU7CiAgICAgICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBRQnJ1c2gobV9j
b21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkp
OwogICAgICAgICB9IGVsc2UgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAg
ICAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxh
dGZvcm1HcmFkaWVudCgpKTsKQEAgLTEyMTMsMjQgKzEyMDMsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmCiAgICAgfQogfQogCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rh
dGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cnVlKTsKLQotICAgIC8vIFRy
YW5zZm9ybWF0aW9ucyB0byB0aGUgY29udGV4dCBzaG91bGRuJ3QgdHJhbnNmb3JtIHRoZSBjdXJy
ZW50UGF0aC4KLSAgICAvLyBXZSBoYXZlIHRvIHVuZG8gZXZlcnkgY2hhbmdlIG1hZGUgdG8gdGhl
IGNvbnRleHQgZnJvbSB0aGUgY3VycmVudFBhdGgKLSAgICAvLyB0byBhdm9pZCB3cm9uZyBkcmF3
aW5ncy4KLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0eSgpICYmIHRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSkgewotICAgICAgICBRVHJhbnNmb3JtIG1hdHJpeCA9IHRyYW5zZm9y
bS5pbnZlcnNlKCk7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1cnJl
bnRQYXRoICogbWF0cml4OwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUucGF0aFRyYW5zZm9ybS5t
dWx0aXBseSh0cmFuc2Zvcm0pOwotICAgIH0KLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFVSTEZvclJlY3QoY29uc3QgS1VSTCYsIGNvbnN0IEludFJlY3QmKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAJ
KHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDEyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgog
I2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
ICNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIKICNpbmNsdWRlICJxd2Vic2V0dGluZ3MuaCIKIApA
QCAtOTMsNyArOTMsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
CiAgICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShsb2FkUmVzb3VyY2VQaXhtYXAobmFtZSkp
OwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0
ZXJuVHJhbnNmb3JtLAordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCiB7CiAgICAgUVBpeG1hcCogZnJhbWVQaXhtYXAgPSBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXRo
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0
LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1Bh
dGhRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3Ryb2tl
U3R5bGVBcHBsaWVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNs
dWRlIDxRUGFpbnRlclBhdGg+CiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4KICNpbmNsdWRlIDxRU3Ry
aW5nPgpAQCAtMzg1LDExICszODQsNiBAQCB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZp
bmVUcmFuc2ZvCiAgICAgbV9wYXRoID0gUVRyYW5zZm9ybSh0cmFuc2Zvcm0pLm1hcChtX3BhdGgp
OwogfQogCi12b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKQotewotICAgIG1fcGF0aCA9IFFUcmFuc2Zvcm0odHJhbnNmb3JtKS5tYXAobV9w
YXRoKTsKLX0KLQogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDEyICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhdHRlcm4u
aCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUUJydXNoIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0CitRQnJ1c2ggUGF0dGVybjo6Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0CiB7CiAgICAgUVBpeG1hcCog
cGl4bWFwID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAg
aWYgKCFwaXhtYXApCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGll
bnRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhZGllbnRTa2lhLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4
Nyw3IEBAIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICBjb250
ZXh0LT5maWxsUmVjdChyZWN0KTsKIH0KIAotdm9pZCBHcmFkaWVudDo6c2V0UGxhdGZvcm1HcmFk
aWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit2
b2lkIEdyYWRpZW50OjpzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBtYXRyaXgpCiB7CiAgICAgaWYgKG1fZ3JhZGllbnQpCiAgICAgICAgIG1f
Z3JhZGllbnQtPnNldExvY2FsTWF0cml4KG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5j
bHVkZSAiU2tCbHVyRHJhd0xvb3Blci5oIgpAQCAtNDQ3LDEzICs0NDYsNiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLT5jb25jYXQoYWZmaW5lKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNh
dENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgeGZvcm0pCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+Y29uY2F0KHhmb3JtKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdD
b252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKQpAQCAtODEzLDI2
ICs4MDUsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQog
Ci1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBjb25zdAot
ewotICAgIGNvbnN0IFNrTWF0cml4JiBtID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5n
ZXRUb3RhbE1hdHJpeCgpOwotICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oU2tTY2FsYXJUb0Rv
dWJsZShtLmdldFNjYWxlWCgpKSwgICAgICAvLyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBTa1NjYWxhclRvRG91YmxlKG0uZ2V0U2tld1koKSksICAgICAgIC8vIGIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3WCgpKSwgICAgICAgLy8g
YwotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFNjYWxl
WSgpKSwgICAgICAvLyBkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91
YmxlKG0uZ2V0VHJhbnNsYXRlWCgpKSwgIC8vIGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNrU2NhbGFyVG9Eb3VibGUobS5nZXRUcmFuc2xhdGVZKCkpKTsgLy8gZgotfQotCi1UcmFuc2Zv
cm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CitBZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogewogICAgIGNvbnN0IFNrTWF0
cml4JiBtID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3RhbE1hdHJpeCgpOwot
ICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeChTa1NjYWxhclRvRG91YmxlKG0uZ2V0U2Nh
bGVYKCkpLCAgICAgIC8vIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2Fs
YXJUb0RvdWJsZShtLmdldFNrZXdZKCkpLCAgICAgICAvLyBiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3WCgpKSwgICAgICAgLy8gYwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0uZ2V0U2Nh
bGVZKCkpLCAgICAgIC8vIGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2Fs
YXJUb0RvdWJsZShtLmdldFRyYW5zbGF0ZVgoKSksICAvLyBlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRUcmFuc2xhdGVZKCkpKTsgLy8gZgor
ICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oU2tTY2FsYXJUb0RvdWJsZShtLmdldFNjYWxlWCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3
WSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRT
a2V3WCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5n
ZXRTY2FsZVkoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91Ymxl
KG0uZ2V0VHJhbnNsYXRlWCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFy
VG9Eb3VibGUobS5nZXRUcmFuc2xhdGVZKCkpKTsKIH0KIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkocmV2aXNpb24g
NTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
KyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgog
I2luY2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCiAjaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKQEAgLTQzLDcgKzQ0LDYgQEAKICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKICNp
bmNsdWRlICJTa1JlY3QuaCIKICNpbmNsdWRlICJTa1NoYWRlci5oIgotI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCkBAIC0zMDAsNyArMzAw
LDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlcwogCiB2b2lkIElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGZsb2F0U3JjUmVjdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3BwCShyZXZpc2lv
biA1NDQ2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMCwxMSArMjIwLDYgQEAgdm9pZCBQYXRoOjp0cmFuc2Zvcm0o
Y29uc3QgQWZmaW5lVHJhbnNmbwogICAgIG1fcGF0aC0+dHJhbnNmb3JtKHhmb3JtKTsKIH0KIAot
dm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHhmb3JtKQot
ewotICAgIG1fcGF0aC0+dHJhbnNmb3JtKHhmb3JtKTsKLX0KLQogU3RyaW5nIFBhdGg6OmRlYnVn
U3RyaW5nKCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVzdWx0OwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCShyZXZpc2lvbiA1NDQ2NCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJQYXR0ZXJuLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgIlNrQ29s
b3IuaCIKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBQYXR0ZXJuOjpwbGF0Zm9ybURlc3Ryb3koKQog
ICAgIG1fcGF0dGVybiA9IDA7CiB9CiAKLVBsYXRmb3JtUGF0dGVyblB0ciBQYXR0ZXJuOjpwbGF0
Zm9ybVBhdHRlcm4oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0p
CitQbGF0Zm9ybVBhdHRlcm5QdHIgUGF0dGVybjo6cGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSkKIHsKICAgICBpZiAobV9wYXR0ZXJuKQogICAg
ICAgICByZXR1cm4gbV9wYXR0ZXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1NraWFGb250V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDEzICszMSwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNraWFGb250V2lu
LmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgi
CiAjaW5jbHVkZSAiU2tDYW52YXMuaCIKICNpbmNsdWRlICJTa1BhaW50LmgiCiAjaW5jbHVkZSAi
U2tTaGFkZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVk
ZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjM3LDcg
KzIzNyw3IEBAIGJvb2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKEdyYXBoaWMKICAgICAv
LyBpbiB1c2luZyBTa2lhIHdpbGwgc2hvdyB5b3UgdGhlIGhpbnRlZCBvdXRsaW5lcyBmb3IgdGhl
IHNtYWxsZXIgc2l6ZSwKICAgICAvLyB3aGljaCBsb29rIHdlaXJkLiBBbGwgZWxzZSBiZWluZyBl
cXVhbCwgaXQncyBiZXR0ZXIgdG8gdXNlIFdpbmRvd3MnIHRleHQKICAgICAvLyBkcmF3aW5nLCBz
byB3ZSBkb24ndCBjaGVjayBmb3Igem9vbXMuCi0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCA9IGNvbnRleHQtPmdldENUTSgpOworICAgIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbWF0cml4ID0gY29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgaWYgKG1hdHJpeC5iKCkgIT0gMCB8
fCBtYXRyaXguYygpICE9IDApICAvLyBDaGVjayBmb3Igc2tldy4KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5l
VHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBBZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9y
bShkb3VibGUgCiAgICAgc2V0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpOwogfQogCi12b2lkIEFm
ZmluZVRyYW5zZm9ybTo6cmVzZXQoKQordm9pZCBBZmZpbmVUcmFuc2Zvcm06Om1ha2VJZGVudGl0
eSgpCiB7CiAgICAgc2V0TWF0cml4KDEsIDAsIDAsIDEsIDAsIDApOwogfQpAQCAtMTg4LDE0ICsx
ODgsMTYgQEAgQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKAogQWZmaW5l
VHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKGRvdWJsZSBzeCwgZG91YmxlIHN5KQog
ewogICAgIG1fdHJhbnNmb3JtWzBdICo9IHN4OworICAgIG1fdHJhbnNmb3JtWzFdICo9IHN4Owor
ICAgIG1fdHJhbnNmb3JtWzJdICo9IHN5OwogICAgIG1fdHJhbnNmb3JtWzNdICo9IHN5OwogICAg
IHJldHVybiAqdGhpczsKIH0KIAogQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnRy
YW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSkKIHsKLSAgICBtX3RyYW5zZm9ybVs0XSArPSB0
eDsKLSAgICBtX3RyYW5zZm9ybVs1XSArPSB0eTsKKyAgICBtX3RyYW5zZm9ybVs0XSArPSB0eCAq
IG1fdHJhbnNmb3JtWzBdICsgdHkgKiBtX3RyYW5zZm9ybVsyXTsKKyAgICBtX3RyYW5zZm9ybVs1
XSArPSB0eCAqIG1fdHJhbnNmb3JtWzFdICsgdHkgKiBtX3RyYW5zZm9ybVszXTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTIyMSw5ICsyMjMsMTQgQEAgQWZmaW5lVHJhbnNmb3JtJiBBZmZp
bmVUcmFuc2Zvcm06OmZsaXBZKAogCiBBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6
c2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpCiB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFy
KDEsIHN5LCBzeCwgMSwgMCwgMCk7CisgICAgZG91YmxlIGEgPSBtX3RyYW5zZm9ybVswXTsKKyAg
ICBkb3VibGUgYiA9IG1fdHJhbnNmb3JtWzFdOworCisgICAgbV90cmFuc2Zvcm1bMF0gKz0gc3kg
KiBtX3RyYW5zZm9ybVsyXTsKKyAgICBtX3RyYW5zZm9ybVsxXSArPSBzeSAqIG1fdHJhbnNmb3Jt
WzNdOworICAgIG1fdHJhbnNmb3JtWzJdICs9IHN4ICogYTsKKyAgICBtX3RyYW5zZm9ybVszXSAr
PSBzeCAqIGI7CiAKLSAgICBtdWx0TGVmdChzaGVhcik7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0yNTAsMTYgKzI1NywxNiBAQCBBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0
cyhjb25zCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBBZmZpbmVUcmFuc2Zvcm06
Om1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSogeDIsIGRvdWJsZSogeTIpIGNvbnN0Cit2
b2lkIEFmZmluZVRyYW5zZm9ybTo6bWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlJiB4Miwg
ZG91YmxlJiB5MikgY29uc3QKIHsKLSAgICAqeDIgPSAobV90cmFuc2Zvcm1bMF0gKiB4ICsgbV90
cmFuc2Zvcm1bMl0gKiB5ICsgbV90cmFuc2Zvcm1bNF0pOwotICAgICp5MiA9IChtX3RyYW5zZm9y
bVsxXSAqIHggKyBtX3RyYW5zZm9ybVszXSAqIHkgKyBtX3RyYW5zZm9ybVs1XSk7CisgICAgeDIg
PSAobV90cmFuc2Zvcm1bMF0gKiB4ICsgbV90cmFuc2Zvcm1bMl0gKiB5ICsgbV90cmFuc2Zvcm1b
NF0pOworICAgIHkyID0gKG1fdHJhbnNmb3JtWzFdICogeCArIG1fdHJhbnNmb3JtWzNdICogeSAr
IG1fdHJhbnNmb3JtWzVdKTsKIH0KIAogSW50UG9pbnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2lu
dChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgZG91YmxlIHgyLCB5MjsKLSAg
ICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4MiwgJnkyKTsKKyAgICBtYXAocG9pbnQueCgp
LCBwb2ludC55KCksIHgyLCB5Mik7CiAgICAgCiAgICAgLy8gUm91bmQgdGhlIHBvaW50LgogICAg
IHJldHVybiBJbnRQb2ludChscm91bmQoeDIpLCBscm91bmQoeTIpKTsKQEAgLTI2OCwxMyArMjc1
LDI0IEBAIEludFBvaW50IEFmZmluZVRyYW5zZm9ybTo6bWFwUG9pbnQoY29uc3QKIEZsb2F0UG9p
bnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29u
c3QKIHsKICAgICBkb3VibGUgeDIsIHkyOwotICAgIG1hcChwb2ludC54KCksIHBvaW50LnkoKSwg
JngyLCAmeTIpOworICAgIG1hcChwb2ludC54KCksIHBvaW50LnkoKSwgeDIsIHkyKTsKIAogICAg
IHJldHVybiBGbG9hdFBvaW50KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeDIpLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KHkyKSk7CiB9CiAKK0ludFJlY3QgQWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0
KGNvbnN0IEludFJlY3QgJnJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QobWFwUmVjdChGbG9hdFJlY3QocmVjdCkpKTsKK30KKwogRmxvYXRSZWN0IEFmZmluZVRyYW5z
Zm9ybTo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7CisgICAgaWYgKGlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IG1hcHBlZFJlY3Qo
cmVjdCk7CisgICAgICAgIG1hcHBlZFJlY3QubW92ZShzdGF0aWNfY2FzdDxmbG9hdD4obV90cmFu
c2Zvcm1bNF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4obV90cmFuc2Zvcm1bNV0pKTsKKyAgICAgICAg
cmV0dXJuIG1hcHBlZFJlY3Q7CisgICAgfQorCiAgICAgRmxvYXRRdWFkIHEocmVjdCk7CiAKICAg
ICBGbG9hdFF1YWQgcmVzdWx0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAkocmV2aXNpb24gNTQ0NjQpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgY2xhc3MgRmxvYXRRdWFkOwogY2xhc3Mg
RmxvYXRSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRSZWN0OworY2xhc3MgVHJhbnNm
b3JtYXRpb25NYXRyaXg7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybSA6IHB1YmxpYyBGYXN0QWxs
b2NCYXNlIHsKIHB1YmxpYzoKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBl
LCBkb3VibGUgZik7CiAKLSAgICB2b2lkIG1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSog
eDIsIGRvdWJsZSogeTIpIGNvbnN0OworICAgIHZvaWQgbWFwKGRvdWJsZSB4LCBkb3VibGUgeSwg
ZG91YmxlJiB4MiwgZG91YmxlJiB5MikgY29uc3Q7CiAKICAgICAvLyBSb3VuZHMgdGhlIG1hcHBl
ZCBwb2ludCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLgogICAgIEludFBvaW50IG1hcFBv
aW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CkBAIC04OSw3ICs5MCw3IEBAIHB1YmxpYzoKICAg
ICBkb3VibGUgZigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtWzVdOyB9CiAgICAgdm9pZCBz
ZXRGKGRvdWJsZSBmKSB7IG1fdHJhbnNmb3JtWzVdID0gZjsgfQogCi0gICAgdm9pZCByZXNldCgp
OworICAgIHZvaWQgbWFrZUlkZW50aXR5KCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0mIG11bHRp
cGx5KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogICAgIEFmZmluZVRyYW5zZm9ybSYgbXVsdExl
ZnQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CkBAIC0xMTQsNiArMTE1LDExIEBAIHB1YmxpYzoK
IAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSBjb25z
dDsKIAorICAgIGJvb2wgaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtWzBdID09IDEgJiYgbV90cmFuc2Zvcm1bMV0gPT0gMCAm
JiBtX3RyYW5zZm9ybVsyXSA9PSAwICYmIG1fdHJhbnNmb3JtWzNdID09IDE7CisgICAgfQorCiAg
ICAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG0yKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIChtX3RyYW5zZm9ybVswXSA9PSBtMi5tX3RyYW5zZm9ybVswXQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9u
TWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk5OSw2ICs5OTksMTIgQEAgdm9pZCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6bWFrZUFmZmluZSgpCiAgICAgbV9tYXRyaXhbM11bM10gPSAxOwogfQogCitBZmZpbmVU
cmFuc2Zvcm0gVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRvQWZmaW5lVHJhbnNmb3JtKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKG1fbWF0cml4WzBdWzBdLCBtX21hdHJpeFsw
XVsxXSwgbV9tYXRyaXhbMV1bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21hdHJp
eFsxXVsxXSwgbV9tYXRyaXhbM11bMF0sIG1fbWF0cml4WzNdWzFdKTsKK30KKwogc3RhdGljIGlu
bGluZSB2b2lkIGJsZW5kRmxvYXQoZG91YmxlJiBmcm9tLCBkb3VibGUgdG8sIGRvdWJsZSBwcm9n
cmVzcykKIHsKICAgICBpZiAoZnJvbSAhPSB0bykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
CShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaWZuZGVmIFRyYW5zZm9ybWF0aW9uTWF0cml4X2gKICNkZWZpbmUgVHJhbnNmb3JtYXRpb25N
YXRyaXhfaAogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+IC8vZm9y
IG1lbWNweQpAQCAtNTUsNiArNTYsNyBAQCB0eXBlZGVmIHN0cnVjdCB0YWdYRk9STSBYRk9STTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBJ
bnRSZWN0OwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgRmxvYXRSZWN0OwpAQCAtMjY4LDYg
KzI3MCw4IEBAIHB1YmxpYzoKICAgICAvLyBUaHJvdyBhd2F5IHRoZSBub24tYWZmaW5lIHBhcnRz
IG9mIHRoZSBtYXRyaXggKGxvc3N5ISkKICAgICB2b2lkIG1ha2VBZmZpbmUoKTsKIAorICAgIEFm
ZmluZVRyYW5zZm9ybSB0b0FmZmluZVRyYW5zZm9ybSgpIGNvbnN0OworCiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtMikgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiAobV9tYXRyaXhbMF1bMF0gPT0gbTIubV9tYXRyaXhbMF1bMF0gJiYKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkocmV2aXNpb24g
NTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRm9udC5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAt
MjI1LDcgKzIyNSw3IEBAIHN0YXRpYyB2b2lkIGRyYXdHRElHbHlwaHMoR3JhcGhpY3NDb250ZXgK
ICAgICB9IGVsc2UgewogICAgICAgICBYRk9STSB4Zm9ybTsKICAgICAgICAgR2V0V29ybGRUcmFu
c2Zvcm0oaGRjLCAmeGZvcm0pOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBoZGNUcmFu
c2Zvcm0oeGZvcm0uZU0xMSwgeGZvcm0uZU0yMSwgeGZvcm0uZU0xMiwgeGZvcm0uZU0yMiwgeGZv
cm0uZUR4LCB4Zm9ybS5lRHkpOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gaGRjVHJhbnNmb3Jt
KHhmb3JtLmVNMTEsIHhmb3JtLmVNMjEsIHhmb3JtLmVNMTIsIHhmb3JtLmVNMjIsIHhmb3JtLmVE
eCwgeGZvcm0uZUR5KTsKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gaW5pdGlhbEdseXBoVHJh
bnNmb3JtID0gaGRjVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpID8gaGRjVHJhbnNmb3JtLmludmVy
c2UoKSA6IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7CiAgICAgICAgIGlmIChmb250LT5wbGF0
Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCiAgICAgICAgICAgICBpbml0aWFsR2x5cGhU
cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChpbml0aWFsR2x5cGhUcmFuc2Zvcm0s
IENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCB0YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSAq
IHBpRmxvYXQgLyAxODAuMGYpLCAxLCAwLCAwKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZpc2lv
biA1NDQ2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJQYXRoLmgiCiAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKICNpbmNsdWRlIDxj
YWlyby13aW4zMi5oPgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NSwxNyArMTk1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OmNvbgogICAgIGlmICghbV9oZGMpCiAgICAgICAgIHJldHVybjsKIAotICAgIFhGT1JNIHhm
b3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgodHJhbnNmb3JtLmEoKSwgdHJhbnNmb3JtLmIoKSwg
dHJhbnNmb3JtLmMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
YW5zZm9ybS5kKCksIHRyYW5zZm9ybS5lKCksIHRyYW5zZm9ybS5mKCkpOwotICAgIE1vZGlmeVdv
cmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZUTVVMVElQTFkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKCFtX2hkYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgWEZPUk0geGZvcm0gPSB0cmFuc2Zvcm07CisgICAgWEZPUk0geGZvcm0gPSB0
cmFuc2Zvcm0udG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwogICAgIE1vZGlmeVdvcmxkVHJhbnNm
b3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZUTVVMVElQTFkpOwogfQogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luY2UuY3BwCShyZXZpc2lvbiA1NDQ2
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZvbnQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREYXRhLmgi
CkBAIC0zNyw3ICszOCw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4
dFdpbmNlLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtUGF0aFdpbmNlLmgiCiAjaW5jbHVkZSAiU2hhcmVk
Qml0bWFwLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogI2luY2x1ZGUgPHdp
bmRvd3MuaD4KQEAgLTE2OSw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBt
X3RyYW5zZm9ybTsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgVmVjdG9yPFBhdGg+IG1fcGF0
aHM7CiB9OwpAQCAtMjEyLDcgKzIxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV90cmFuc2Zvcm0u
cm90YXRlKHJhZDJkZWcocmFkaWFucykpOwogICAgIH0KIAotICAgIHZvaWQgIGNvbmNhdENUTShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQorICAgIHZvaWQgIGNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICB7CiAgICAgICAgIG1fdHJh
bnNmb3JtID0gdHJhbnNmb3JtICogbV90cmFuc2Zvcm07CiAgICAgfQpAQCAtMTE0OSwxMSArMTE0
OCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWYKICAgICBtX2Rh
dGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0gICAgbV9k
YXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLX0KLQogVHJhbnNmb3JtYXRpb25NYXRyaXgmIEdy
YXBoaWNzQ29udGV4dDo6YWZmaW5lVHJhbnNmb3JtKCkKIHsKICAgICByZXR1cm4gbV9kYXRhLT5t
X3RyYW5zZm9ybTsKQEAgLTEzODYsNyArMTM4MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aCgpCiAgICAgICAgICAgICBpZiAoIWRjKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ciA9IG1fZGF0YS0+bV90cmFu
c2Zvcm07CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHIgPSBtX2RhdGEtPm1fdHJhbnNm
b3JtOwogICAgICAgICAgICAgdHIudHJhbnNsYXRlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpLndp
ZHRoKCksIHRyYW5zcGFyZW50REMudG9TaGlmdCgpLmhlaWdodCgpKTsKIAogICAgICAgICAgICAg
U2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikpOwpAQCAtMTQyNiw3ICsx
NDIwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgICAgICAgICAg
aWYgKCFkYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHIgPSBtX2RhdGEtPm1fdHJhbnNmb3JtOworICAgICAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIHRyID0gbV9kYXRhLT5tX3RyYW5zZm9ybTsKICAgICAgICAgICAgIHRyLnRy
YW5zbGF0ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKS53aWR0aCgpLCB0cmFuc3BhcmVudERDLnRv
U2hpZnQoKS5oZWlnaHQoKSk7CiAKICAgICAgICAgICAgIFNlbGVjdE9iamVjdChkYywgR2V0U3Rv
Y2tPYmplY3QoTlVMTF9CUlVTSCkpOwpAQCAtMTUzNywxMiArMTUzMSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBHcmFkaWVudEZpbGwoZGMsIHR2LmRh
dGEoKSwgdHYuc2l6ZSgpLCBtZXNoLmRhdGEoKSwgbWVzaC5zaXplKCksIHZlcnRpY2FsID8gR1JB
RElFTlRfRklMTF9SRUNUX1YgOiBHUkFESUVOVF9GSUxMX1JFQ1RfSCk7CiB9CiAKLUFmZmluZVRy
YW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fZGF0YS0+bV90cmFuc2Zvcm07Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBo
aWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRl
eHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS0+bV90cmFuc2Zvcm07CiB9
CkBAIC0xODg1LDcgKzE4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpdG1hcChT
aGFyZWRCCiAgICAgICAgIHRyYW5zcGFyZW50REMuZmlsbEFscGhhQ2hhbm5lbCgpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpdG1hcFBhdHRlcm4oU2hhcmVkQml0bWFwKiBibXAs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHBhdHRlcm5UcmFuc2Zvcm0sCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpdG1hcFBhdHRl
cm4oU2hhcmVkQml0bWFwKiBibXAsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdEluLCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSkKIHsKICAgICBpZiAo
IW1fZGF0YS0+bV9vcGFjaXR5KQpAQCAtMTkwNCw3ICsxODkzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdCaXRtYXBQYXR0ZXJuKAogICAgIHRyUmVjdC5tb3ZlKHRyYW5zcGFyZW50REMu
dG9TaGlmdCgpKTsKICAgICBGbG9hdFJlY3QgbW92ZWREc3RSZWN0ID0gbV9kYXRhLT5tX3RyYW5z
Zm9ybS5pbnZlcnNlKCkubWFwUmVjdChGbG9hdFJlY3QodHJSZWN0KSk7CiAgICAgRmxvYXRTaXpl
IG1vdmVkKG1vdmVkRHN0UmVjdC5sb2NhdGlvbigpIC0gZGVzdFJlY3RJbi5sb2NhdGlvbigpKTsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX2RhdGEtPm1fdHJhbnNmb3Jt
OworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX2RhdGEtPm1fdHJhbnNmb3JtOwog
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobW92ZWQud2lkdGgoKSwgbW92ZWQuaGVpZ2h0KCkpOwog
CiAgICAgYm1wLT5kcmF3UGF0dGVybihkYywgdHJhbnNmb3JtLCB0aWxlUmVjdEluLCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgb3AsIGRlc3RSZWN0SW4sIG9yaWdTb3VyY2VTaXplKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldp
bmNlLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJv
eUFsbCA9IHRydWUpIHt9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3IpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KTsKIAogICAgIGNvbnN0IEltYWdlQnVmZmVyRGF0YSogbV9kYXRhOwpAQCAtNTUsNyAr
NTUsNyBAQCB2b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0CiAgICAgbV9k
YXRhLT5tX2JpdG1hcC0+ZHJhdyhjdHh0LCBpbnREc3RSZWN0LCBpbnRTcmNSZWN0LCBjb21wb3Np
dGVPcCk7CiB9CiAKLXZvaWQgQnVmZmVyZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAordm9pZCBCdWZmZXJlZEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgbV9kYXRhLT5tX2JpdG1hcC0+
ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9w
LCBkZXN0UmVjdCwgc2l6ZSgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvUGF0aFdpbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL1BhdGhXaW5jZS5jcHAJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9QYXRoV2luY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMSAr
MjAsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUGF0aFdpbmNlLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTMz
LDcgKzEzMyw3IEBAIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXIKICAg
ICBtX3BhdGgtPmFwcGx5KGluZm8sIGZ1bmN0aW9uKTsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit2b2lkIFBhdGg6OnRyYW5zZm9ybShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpCiB7CiAgICAgbV9wYXRoLT50cmFuc2Zvcm0odCk7CiB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRm
b3JtUGF0aFdpbmNlLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAs
MTEgKzIwLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1QYXRo
V2luY2UuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhdGguaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCiAjaW5jbHVkZSAiV2luY2VHcmFwaGljc0V4dHJhcy5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMjMyLDcgKzIzMiw3IEBA
IHN0YXRpYyB2b2lkIGFkZEFyY1BvaW50cyhQYXRoUG9seWdvbiYgcG8KICAgICAgICAgcG9seS5h
cHBlbmQoZGF0YS5tX2VuZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdQb2x5Z29ucyhIREMgZGMs
IGNvbnN0IFZlY3RvcjxQYXRoUG9seWdvbj4mIHBvbHlnb25zLCBib29sIGZpbGwsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4KiB0cmFuc2Zvcm1hdGlvbikKK3N0YXRpYyB2b2lkIGRyYXdQb2x5
Z29ucyhIREMgZGMsIGNvbnN0IFZlY3RvcjxQYXRoUG9seWdvbj4mIHBvbHlnb25zLCBib29sIGZp
bGwsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtYXRpb24pCiB7CiAgICAgTWVtb3J5
QWxsb2NhdGlvbkNhbkZhaWwgY2FuRmFpbDsKICAgICBmb3IgKFZlY3RvcjxQYXRoUG9seWdvbj46
OmNvbnN0X2l0ZXJhdG9yIGkgPSBwb2x5Z29ucy5iZWdpbigpOyBpICE9IHBvbHlnb25zLmVuZCgp
OyArK2kpIHsKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIFBhdGhQb2x5Z29uOjptb3ZlKGNvbnN0
IEZsb2F0U2l6ZSYgCiAgICAgICAgIGktPm1vdmUob2Zmc2V0KTsKIH0KIAotdm9pZCBQYXRoUG9s
eWdvbjo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQordm9pZCBQYXRo
UG9seWdvbjo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkKIHsKICAgICBmb3Ig
KFZlY3RvcjxQYXRoUG9pbnQ+OjppdGVyYXRvciBpID0gYmVnaW4oKTsgaSA8IGVuZCgpOyArK2kp
CiAgICAgICAgICppID0gdC5tYXBQb2ludCgqaSk7CkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBQ
bGF0Zm9ybVBhdGhFbGVtZW50Ojptb3ZlKGNvbnN0IEZsbwogICAgICAgICBtX2RhdGEubV9wb2lu
dHNbaV0ubW92ZShvZmZzZXQpOwogfQogCi12b2lkIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OnRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3ZvaWQgUGxhdGZvcm1QYXRoRWxl
bWVudDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkKIHsKICAgICBpbnQgbiA9
IG51bUNvbnRyb2xQb2ludHMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewpA
QCAtNTcxLDEyICs1NzEsMTIgQEAgdm9pZCBQbGF0Zm9ybVBhdGg6OmNsZWFyKCkKICAgICBtX3Bl
bkxpZnRlZCA9IHRydWU7CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXRoOjpzdHJva2VQYXRoKEhEQyBk
YywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybWF0aW9uKSBjb25zdAordm9p
ZCBQbGF0Zm9ybVBhdGg6OnN0cm9rZVBhdGgoSERDIGRjLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0q
IHRyYW5zZm9ybWF0aW9uKSBjb25zdAogewogICAgIGRyYXdQb2x5Z29ucyhkYywgbV9zdWJwYXRo
cywgZmFsc2UsIHRyYW5zZm9ybWF0aW9uKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhdGg6OmZpbGxQ
YXRoKEhEQyBkYywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybWF0aW9uKSBj
b25zdAordm9pZCBQbGF0Zm9ybVBhdGg6OmZpbGxQYXRoKEhEQyBkYywgY29uc3QgQWZmaW5lVHJh
bnNmb3JtKiB0cmFuc2Zvcm1hdGlvbikgY29uc3QKIHsKICAgICBIR0RJT0JKIG9sZFBlbiA9IFNl
bGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsKICAgICBkcmF3UG9seWdv
bnMoZGMsIG1fc3VicGF0aHMsIHRydWUsIHRyYW5zZm9ybWF0aW9uKTsKQEAgLTU5Myw3ICs1OTMs
NyBAQCB2b2lkIFBsYXRmb3JtUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0CiAgICAgICAgIGl0
LT5tb3ZlKHNpemUpOwogfQogCi12b2lkIFBsYXRmb3JtUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0KQordm9pZCBQbGF0Zm9ybVBhdGg6OnRyYW5zZm9ybShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHQpCiB7CiAgICAgZm9yIChQbGF0Zm9ybVBhdGhFbGVtZW50czo6
aXRlcmF0b3IgaXQobV9lbGVtZW50cy5iZWdpbigpKTsgaXQgIT0gbV9lbGVtZW50cy5lbmQoKTsg
KytpdCkKICAgICAgICAgaXQtPnRyYW5zZm9ybSh0KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbmNlLmgJKHJldmlzaW9uIDU0
NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5j
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIHN0cnVjdCBQYXRoUG9seWdvbjogcHVibGljIFZlY3RvcjxQYXRoUG9pbnQ+IHsKICAg
ICAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKLSAgICAgICAgdm9pZCB0
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpOworICAgICAgICB2b2lkIHRy
YW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwogICAgICAgICBib29sIGNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdDsKICAgICB9OwogCkBAIC0xMTMsNyArMTEz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbnVtUG9pbnRzKCkgY29uc3Q7
CiAgICAgICAgIGludCBudW1Db250cm9sUG9pbnRzKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgbW92
ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCk7Ci0gICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKKyAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0KTsKICAgICAgICAgUGF0aEVsZW1lbnRUeXBlIHR5cGUoKSBjb25z
dDsKICAgICAgICAgUGxhZm9ybVBhdGhFbGVtZW50VHlwZSBwbGF0Zm9ybVR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KICAgICAgICAgdm9pZCBpbmZsYXRlUmVjdFRvQ29udGFpbk1lKEZs
b2F0UmVjdCYgciwgY29uc3QgRmxvYXRQb2ludCYgbGFzdFBvaW50KSBjb25zdDsKQEAgLTE0MSwx
NCArMTQxLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGVhcigpOwog
ICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzLmlzRW1wdHko
KTsgfQogCi0gICAgICAgIHZvaWQgc3Ryb2tlUGF0aChIREMsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4KiB0cikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZmlsbFBhdGgoSERDLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCogdHIpIGNvbnN0OworICAgICAgICB2b2lkIHN0cm9rZVBhdGgoSERD
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0qIHRyKSBjb25zdDsKKyAgICAgICAgdm9pZCBmaWxsUGF0
aChIREMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHIpIGNvbnN0OwogICAgICAgICBGbG9hdFBv
aW50IGxhc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMuaXNFbXB0eSgpID8gRmxv
YXRQb2ludCgwLCAwKSA6IG1fZWxlbWVudHMubGFzdCgpLmxhc3RQb2ludCgpOyB9CiAKICAgICAg
ICAgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QoKSBjb25zdCB7IHJldHVybiBtX2JvdW5k
aW5nUmVjdDsgfQogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBXaW5kUnVsZSBydWxlKSBjb25zdDsKICAgICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKTsKLSAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHQpOworICAgICAgICB2b2lkIHRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHQpOwogCiAgICAgICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAg
ICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9u
IDU0NDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAi
Rm9udC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTM2MCwxOCArMzU5LDEyIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcigKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZpbmVDVE0oKSBj
b25zdAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKIHsg
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CiB9
CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QK
LXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRy
aXgoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB0eCwgZmxv
YXQgdHkpIAogeyAKICNpZiBVU0UoV1hHQykKQEAgLTQ4NywxNSArNDgwLDYgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZgogICAgIHJldHVybjsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwotfQotCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvSW1hZ2VXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9JbWFnZVd4LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMTMgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8
bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICBvYnNlcnZlci0+ZGlkRHJh
dyh0aGlzKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3ZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQogewogICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgQml0bWFwSW1h
Z2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIAogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1BhdGhXeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3BwCShyZXZpc2lvbiA1NDQ2
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlBhdGguaCIKIAogI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCkBAIC0yMTEsMTQgKzIxMCw2IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3Jt
KGNvbnN0IEFmZmluZVRyYW5zZm8KICNlbmRpZgogfQogCi12b2lkIFBhdGg6OnRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSAKLXsKLSNpZiBVU0UoV1hHQykK
LSAgICBpZiAobV9wYXRoKQotICAgICAgICBtX3BhdGgtPlRyYW5zZm9ybSh0cmFuc2Zvcm0pOwot
I2VuZGlmCi19Ci0KIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5j
dGlvbiBmdW5jdGlvbikgY29uc3QgCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsgCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lR3RrLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiR093blB0ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgpAQCAtMzIsNyArMzMsNiBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgog
I2luY2x1ZGUgImd0a2RyYXdpbmcuaCIKIApAQCAtMzA3LDcgKzMwNyw3IEBAIHN0YXRpYyBib29s
IHBhaW50TW96aWxsYUd0a1dpZGdldChjb25zdCAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtID0gaS5jb250ZXh0LT5nZXRDVE0oKTsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gY3RtID0gaS5jb250ZXh0LT5nZXRDVE0oKTsKIAogICAgIEludFBvaW50
IHBvcyA9IGN0bS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOwogICAgIEdka1JlY3RhbmdsZSBn
ZGtSZWN0ID0gSW50UmVjdChwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCShyZXZpc2lv
biA1NDQ2NCkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4NSw5ICs1ODUsOSBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93
ZWRQbHVnaW5JbnRvCiAKICAgICAvLyBUaGUgcGx1Z2luIGV4cGVjdHMgdGhlIERDIHRvIGJlIGlu
IGNsaWVudCBjb29yZGluYXRlcywgc28gd2UgdHJhbnNsYXRlCiAgICAgLy8gdGhlIERDIHRvIG1h
a2UgdGhhdCBzby4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBjb250ZXh0LT5nZXRD
VE0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gY29udGV4dC0+Z2V0Q1RNKCk7CiAgICAg
Y3RtLnRyYW5zbGF0ZShsb2NhdGlvbkluV2luZG93LngoKSwgbG9jYXRpb25JbldpbmRvdy55KCkp
OwotICAgIFhGT1JNIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFhGT1JNPihjdG0pOworICAgIFhG
T1JNIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFhGT1JNPihjdG0udG9UcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpKTsKIAogICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJnRyYW5zZm9ybSk7CiAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODk5LDkgKzI4OTksOSBA
QCB2b2lkIFJlbmRlckJveDo6Y2xlYXJMYXlvdXRPdmVyZmxvdygpCiAKICNpZiBFTkFCTEUoU1ZH
KQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJCb3g6OmxvY2FsVHJhbnNmb3JtKCkgY29u
c3QKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJCb3g6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwgMCwgMCwgMSwgeCgpLCB5KCkpOwor
ICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgeCgpLCB5KCkpOwogfQogCiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsNyArMjk3LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdDsKIAogI2lm
IEVOQUJMRShTVkcpCi0gICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5z
Zm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3Jt
KCkgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcg
KzUwLDcgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBjTG93UXVhbGl0eVRpbWVUaHJlcwogCiBjbGFz
cyBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0YSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6
Ci0gICAgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVj
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSwgZG91YmxlIHRpbWUsIGJvb2wgbG93UXVhbGl0eVNjYWxlKQorICAgIFJlbmRlckJveE1v
ZGVsU2NhbGVEYXRhKFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3QsIGNvbnN0IEludFNpemUm
IHNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBkb3VibGUgdGltZSwgYm9v
bCBsb3dRdWFsaXR5U2NhbGUpCiAgICAgICAgIDogbV9zaXplKHNpemUpCiAgICAgICAgICwgbV90
cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgICAgICAsIG1fbGFzdFBhaW50VGltZSh0aW1lKQpAQCAt
NzEsOCArNzEsOCBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGxhc3RQYWludFRpbWUoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RQYWludFRpbWU7IH0KICAgICB2b2lkIHNldExhc3RQYWludFRpbWUoZG91
YmxlIHQpIHsgbV9sYXN0UGFpbnRUaW1lID0gdDsgfQogICAgIGJvb2wgdXNlTG93UXVhbGl0eVNj
YWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dRdWFsaXR5U2NhbGU7IH0KLSAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07
IH0KLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZv
aWQgc2V0VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7IG1fdHJh
bnNmb3JtID0gdHJhbnNmb3JtOyB9CiAgICAgdm9pZCBzZXRVc2VMb3dRdWFsaXR5U2NhbGUoYm9v
bCBiKQogICAgIHsKICAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdG9wKCk7CkBA
IC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBJbnRTaXplIG1fc2l6ZTsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gbV90cmFuc2Zvcm07CiAgICAgZG91YmxlIG1fbGFzdFBhaW50VGltZTsKICAgICBib29sIG1f
bG93UXVhbGl0eVNjYWxlOwogICAgIFRpbWVyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBtX2hpZ2hR
dWFsaXR5UmVwYWludFRpbWVyOwpAQCAtMTMwLDcgKzEzMCw3IEBAIGJvb2wgUmVuZGVyQm94TW9k
ZWxTY2FsZU9ic2VydmVyOjpzaG91bGQKICAgICBpZiAoZ0JveE1vZGVsT2JqZWN0cykKICAgICAg
ICAgZGF0YSA9IGdCb3hNb2RlbE9iamVjdHMtPmdldChvYmplY3QpOwogCi0gICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGN1cnJlbnRUcmFuc2Zvcm0gPSBjb250ZXh0LT5nZXRDVE0oKTsK
KyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN1cnJlbnRUcmFuc2Zvcm0gPSBjb250ZXh0LT5n
ZXRDVE0oKTsKICAgICBib29sIGNvbnRleHRJc1NjYWxlZCA9ICFjdXJyZW50VHJhbnNmb3JtLmlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uKCk7CiAgICAgaWYgKCFjb250ZXh0SXNTY2FsZWQgJiYgaW1h
Z2VTaXplID09IHNpemUpIHsKICAgICAgICAgLy8gVGhlcmUgaXMgbm8gc2NhbGUgaW4gZWZmZWN0
LiAgSWYgd2UgaGFkIGEgc2NhbGUgaW4gZWZmZWN0IGJlZm9yZSwgd2UgY2FuIGp1c3QgZGVsZXRl
IHRoaXMgZGF0YS4KQEAgLTEzOTAsNyArMTM5MCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50Qm94U2hhZG8KICAgICAgICAgICAgICAgICAvLyBlZGdlcyBpZiB0aGV5IGFyZSBu
b3QgcGl4ZWwtYWxpZ25lZC4gVGhvc2UgYXJlIGF2b2lkZWQgYnkgaW5zZXR0aW5nIHRoZSBjbGlw
cGluZyBwYXRoCiAgICAgICAgICAgICAgICAgLy8gYnkgb25lIHBpeGVsLgogICAgICAgICAgICAg
ICAgIGlmIChoYXNPcGFxdWVCYWNrZ3JvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGN1cnJlbnRUcmFuc2Zvcm1hdGlvbiA9IGNvbnRleHQtPmdldENUTSgp
OworICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVudFRyYW5zZm9ybWF0
aW9uID0gY29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
VHJhbnNmb3JtYXRpb24uYSgpICE9IDEgfHwgKGN1cnJlbnRUcmFuc2Zvcm1hdGlvbi5kKCkgIT0g
MSAmJiBjdXJyZW50VHJhbnNmb3JtYXRpb24uZCgpICE9IC0xKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IGN1cnJlbnRUcmFuc2Zvcm1hdGlvbi5iKCkgfHwgY3VycmVudFRyYW5zZm9y
bWF0aW9uLmMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RUb0NsaXBPdXQuaW5mbGF0
ZSgtMSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAko
cmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEwIEBAIFJlbmRlckZvcmVpZ25PYmpl
Y3Q6OlJlbmRlckZvcmVpZ25PYmplY3QKIHsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUmVu
ZGVyRm9yZWlnbk9iamVjdDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkgY29uc3QKK0FmZmlu
ZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KSBjb25zdAogewogICAgIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KiBmb3JlaWduID0gc3RhdGlj
X2Nhc3Q8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqPihub2RlKCkpOwotICAgIHJldHVybiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZShmb3JlaWduLT54KCkudmFsdWUoZm9yZWlnbiks
IGZvcmVpZ24tPnkoKS52YWx1ZShmb3JlaWduKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9y
bSgpLnRyYW5zbGF0ZShmb3JlaWduLT54KCkudmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPnkoKS52
YWx1ZShmb3JlaWduKSk7CiB9CiAKIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIFJlbmRl
ckZvcmVpZ25PYmplY3Q6OmNvbXB1dGVSZWN0Rm9yCiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVS
ZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCByZWN0LCBmaXhlZCk7CiB9CiAKLWNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBSZW5kZXJGb3JlaWduT2JqZWN0Ojpsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkgY29uc3QKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyRm9yZWlnbk9i
amVjdDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgbV9sb2NhbFRvUGFy
ZW50VHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zvcm0oKSAqIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRl
cygpOwogICAgIHJldHVybiBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NyArMjMsNyBAQAogI2RlZmluZSBSZW5kZXJGb3JlaWduT2JqZWN0X2gKICNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdCbG9jay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOCw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwg
aW50IHBhcmVudFkpOwogCi0gICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIGJv
b2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC01NSwxMiArNTUs
MTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VU
cmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0OwogCiAgcHJp
dmF0ZToKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KSBjb25zdDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkg
Y29uc3Q7CiAKLSAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9y
bTsgfQogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sb2NhbFRyYW5zZm9ybTsKLSAgICBt
dXRhYmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKKyAgICBtdXRhYmxlIEFmZmluZVRy
YW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA1NDQ2NCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIzNiw3ICsyMjM2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXll
cgogICAgICAgICAKICAgICAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybS4KICAgICAgICAgcC0+
c2F2ZSgpOwotICAgICAgICBwLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKKyAgICAgICAgcC0+Y29u
Y2F0Q1RNKHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpKTsKIAogICAgICAgICAvLyBOb3cg
ZG8gYSBwYWludCB3aXRoIHRoZSByb290IGxheWVyIHNoaWZ0ZWQgdG8gYmUgdXMuCiAgICAgICAg
IHBhaW50TGF5ZXIodGhpcywgcCwgdHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KHBhaW50RGly
dHlSZWN0KSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290LCBvdmVybGFwVGVzdFJlcXVlc3Rz
LCBwYWludEZsYWdzIHwgUGFpbnRMYXllckFwcGxpZWRUcmFuc2Zvcm0pOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MjAsMTkgKzI1MjAsMTkg
QEAgRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6cmVwYWludFJlY3RJbkxvYwogICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyT2JqZWN0Ojpsb2Nh
bFRyYW5zZm9ybSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyT2JqZWN0Ojpsb2NhbFRy
YW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgc3RhdGljIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5OworICAgIHN0YXRpYyBjb25zdCBBZmZpbmVUcmFuc2Zvcm0gaWRlbnRpdHk7CiAg
ICAgcmV0dXJuIGlkZW50aXR5OwogfQogCi1jb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgUmVu
ZGVyT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKK2NvbnN0IEFmZmluZVRy
YW5zZm9ybSYgUmVuZGVyT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKIHsK
LSAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7CisgICAgc3Rh
dGljIGNvbnN0IEFmZmluZVRyYW5zZm9ybSBpZGVudGl0eTsKICAgICByZXR1cm4gaWRlbnRpdHk7
CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUcmFuc2Zv
cm0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUcmFuc2Zv
cm0oKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSgpLCBidXQgbXVjaCBvZiB0aGUgU1ZHIGNvZGUKICAgICAvLyBkZXBlbmRzIG9u
IFJlbmRlckJveDo6YWJzb2x1dGVUcmFuc2Zvcm0oKSBiZWluZyB0aGUgc3VtIG9mIHRoZSBsb2Nh
bFRyYW5zZm9ybSgpcyBvZiBhbGwgcGFyZW50IHJlbmRlcmVycy4KSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFJlbmRl
ck9iamVjdF9oCiAjZGVmaW5lIFJlbmRlck9iamVjdF9oCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAtMzQ3LDE2ICszNDgsMTYgQEAgcHVi
bGljOgogICAgIC8vIEZJWE1FOiBUaGlzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQgYW5kIG1vc3Rs
eSBhcm91bmQgZm9yIFNWR1JlbmRlclRyZWVBc1RleHQuCiAgICAgLy8gVGhpcyBvbmx5IHJldHVy
bnMgdGhlIHRyYW5zZm9ybT0iIiB2YWx1ZSBmcm9tIHRoZSBlbGVtZW50CiAgICAgLy8gbW9zdCBj
YWxsc2l0ZXMgd2FudCBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgaW5zdGVhZC4KLSAgICB2aXJ0
dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIC8vIFJl
dHVybnMgdGhlIGZ1bGwgdHJhbnNmb3JtIG1hcHBpbmcgZnJvbSBsb2NhbCBjb29yZGluYXRlcyB0
byBsb2NhbCBjb29yZHMgZm9yIHRoZSBwYXJlbnQgU1ZHIHJlbmRlcmVyCiAgICAgLy8gVGhpcyBp
bmNsdWRlcyBhbnkgdmlld3BvcnQgdHJhbnNmb3JtcyBhbmQgeC95IG9mZnNldHMgYXMgd2VsbCBh
cyB0aGUgdHJhbnNmb3JtPSIiIHZhbHVlIG9mZiB0aGUgZWxlbWVudC4KLSAgICB2aXJ0dWFsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7
CisgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKSBjb25zdDsKIAogICAgIC8vIFdhbGtzIHVwIHRoZSBwYXJlbnQgY2hhaW4gdG8gY3JlYXRl
IGEgdHJhbnNmb3JtIHdoaWNoIG1hcHMgZnJvbSBsb2NhbCB0byBkb2N1bWVudCBjb29yZHMKICAg
ICAvLyBOT1RFOiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkISAgSXQgZG9lc24ndCByZXNwZWN0
IHNjcm9sbCBvZmZzZXRzIG9yIHJlcGFpbnQgY29udGFpbmVycy4KICAgICAvLyBGSVhNRTogVGhp
cyBpcyBvbmx5IHZpcnR1YWwgc28gdGhhdCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIgY2FuIG92
ZXJyaWRlIGl0IHRvIG1hdGNoIG9sZCBMYXlvdXRUZXN0IHJlc3VsdHMuCi0gICAgdmlydHVhbCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICAvLyBT
VkcgdXNlcyBGbG9hdFBvaW50IHByZWNpc2UgaGl0IHRlc3RpbmcsIGFuZCBwYXNzZXMgdGhlIHBv
aW50IGluIHBhcmVudAogICAgIC8vIGNvb3JkaW5hdGVzIGluc3RlYWQgb2YgaW4gcmVwYWludCBj
b250YWluZXIgY29vcmRpbmF0ZXMuICBFdmVudHVhbGx5IHRoZQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGF0aC5jcHAJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDEyICs2OSwxMiBAQCBSZW5kZXJQYXRoOjpS
ZW5kZXJQYXRoKFNWR1N0eWxlZFRyYW5zZm9yCiB7CiB9CiAKLWNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBSZW5kZXJQYXRoOjpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKK2NvbnN0
IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyUGF0aDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07CiB9CiAKLVRyYW5zZm9ybWF0aW9u
TWF0cml4IFJlbmRlclBhdGg6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKK0FmZmluZVRyYW5zZm9y
bSBSZW5kZXJQYXRoOjpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbG9j
YWxUcmFuc2Zvcm07CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oCShyZXZpc2lvbiA1NDQ2
NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMTAgKzI1LDEwIEBACiAjZGVmaW5lIFJlbmRlclBhdGhfaAogCiAjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlNWR01hcmtlckxheW91
dEluZm8uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBtYXJrZXJCb3VuZGluZ0JveCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0o
KSBjb25zdDsKIAogICAgIHZvaWQgc2V0UGF0aChjb25zdCBQYXRoJik7CiAKQEAgLTY4LDcgKzY4
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkg
Y29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2Nh
bFRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJh
bnNmb3JtKCkgY29uc3Q7CiAKICAgICBtdXRhYmxlIFBhdGggbV9wYXRoOwogICAgIG11dGFibGUg
RmxvYXRSZWN0IG1fY2FjaGVkTG9jYWxGaWxsQkJveDsKQEAgLTc2LDcgKzc2LDcgQEAgcHJpdmF0
ZToKICAgICBtdXRhYmxlIEZsb2F0UmVjdCBtX2NhY2hlZExvY2FsUmVwYWludFJlY3Q7CiAgICAg
bXV0YWJsZSBGbG9hdFJlY3QgbV9jYWNoZWRMb2NhbE1hcmtlckJCb3g7CiAgICAgbXV0YWJsZSBT
VkdNYXJrZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0SW5mbzsKLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtX2xvY2FsVHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJh
bnNmb3JtOwogfTsKIAogaW5saW5lIFJlbmRlclBhdGgqIHRvUmVuZGVyUGF0aChSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRh
aW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNv
bnRhaW5lci5oCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mKTsKIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBvdmVycmlkZSBvbmx5IGV4
aXN0cyB0byBtYXRjaCBleGlzdGluZyBMYXlvdXRUZXN0IHJlc3VsdHMuCi0gICAgICAgIHZpcnR1
YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOyB9CisgICAgICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNm
b3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7
IH0KIAogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lvbiA1
NDQ2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDExICsyNCwxMSBAQAogI2RlZmluZSBSZW5kZXJTVkdJbWFnZV9oCiAKICNpZiBF
TkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVB
c3BlY3RSYXRpby5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcg
KzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHSW1hZ2UiOyB9CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
ICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxvY2FsVG9QYXJlbnRUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisgICAgICAgIHZpcnR1
YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCiAgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0
IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0
cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEJvdW5kczsgfQpAQCAtNjgs
OSArNjgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKLSAgICAg
ICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKyAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAK
LSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sb2NhbFRyYW5zZm9ybTsKKyAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CiAgICAgICAgIEZsb2F0UmVjdCBtX2xv
Y2FsQm91bmRzOwogICAgICAgICBtdXRhYmxlIEZsb2F0UmVjdCBtX2NhY2hlZExvY2FsUmVwYWlu
dFJlY3Q7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZp
c2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTYsOSArMTk2LDkgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpjYWxjVmll
d3BvcnQoKQogCiAvLyBSZW5kZXJCb3ggbWV0aG9kcyB3aWxsIGV4cGVjdCBjb29yZGluYXRlcyB3
L28gYW55IHRyYW5zZm9ybXMgaW4gY29vcmRpbmF0ZXMKIC8vIHJlbGF0aXZlIHRvIG91ciBib3Jk
ZXJCb3ggb3JpZ2luLiAgVGhpcyBtZXRob2QgZ2l2ZXMgdXMgZXhhY3RseSB0aGF0LgotVHJhbnNm
b3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgp
IGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb0JvcmRlckJveFRy
YW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtOworICAgIEFm
ZmluZVRyYW5zZm9ybSBjdG07CiAgICAgSW50U2l6ZSBib3JkZXJBbmRQYWRkaW5nID0gYm9yZGVy
T3JpZ2luVG9Db250ZW50Qm94KCk7CiAgICAgY3RtLnRyYW5zbGF0ZShib3JkZXJBbmRQYWRkaW5n
LndpZHRoKCksIGJvcmRlckFuZFBhZGRpbmcuaGVpZ2h0KCkpOwogICAgIFNWR1NWR0VsZW1lbnQq
IHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOwpAQCAtMjE3LDI2ICsy
MTcsMjYgQEAgSW50U2l6ZSBSZW5kZXJTVkdSb290Ojpib3JkZXJPcmlnaW5Ub0NvbgogICAgIHJl
dHVybiBJbnRTaXplKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsg
cGFkZGluZ1RvcCgpKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHUm9vdDo6
bG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0oY29uc3QgSW50UG9pbnQmIHBhcmVudE9y
aWdpbkluQ29udGFpbmVyKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jvb3Q6Omxv
Y2FsVG9SZXBhaW50Q29udGFpbmVyVHJhbnNmb3JtKGNvbnN0IEludFBvaW50JiBwYXJlbnRPcmln
aW5JbkNvbnRhaW5lcikgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRU
b0NvbnRhaW5lcjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGFyZW50VG9Db250YWluZXI7CiAgICAg
cGFyZW50VG9Db250YWluZXIudHJhbnNsYXRlKHBhcmVudE9yaWdpbkluQ29udGFpbmVyLngoKSwg
cGFyZW50T3JpZ2luSW5Db250YWluZXIueSgpKTsKLSAgICByZXR1cm4gbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpICogcGFyZW50VG9Db250YWluZXI7CisgICAgcmV0dXJuICBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkgKiBwYXJlbnRUb0NvbnRhaW5lcjsKIH0KIAotY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAor
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCkgY29uc3QKIHsKICAgICBJbnRTaXplIHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0ID0gcGFy
ZW50T3JpZ2luVG9Cb3JkZXJCb3goKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJvcmRl
ckJveE9yaWdpblRvUGFyZW50T3JpZ2luOworICAgIEFmZmluZVRyYW5zZm9ybSBib3JkZXJCb3hP
cmlnaW5Ub1BhcmVudE9yaWdpbjsKICAgICBib3JkZXJCb3hPcmlnaW5Ub1BhcmVudE9yaWdpbi50
cmFuc2xhdGUocGFyZW50VG9Cb3JkZXJCb3hPZmZzZXQud2lkdGgoKSwgcGFyZW50VG9Cb3JkZXJC
b3hPZmZzZXQuaGVpZ2h0KCkpOwotCisgICAgCiAgICAgbV9sb2NhbFRvUGFyZW50VHJhbnNmb3Jt
ID0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpICogYm9yZGVyQm94T3JpZ2luVG9QYXJlbnRP
cmlnaW47CiAgICAgcmV0dXJuIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKIH0KIAogLy8gRklY
TUU6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSByZW1vdmVkIGFzIHNvb24gYXMgY2FsbGVycyB0byBS
ZW5kZXJCb3g6OmFic29sdXRlVHJhbnNmb3JtKCkgY2FuIGJlIHJlbW92ZWQuCi1UcmFuc2Zvcm1h
dGlvbk1hdHJpeCBSZW5kZXJTVkdSb290OjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0CitBZmZp
bmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdAogewog
ICAgIC8vIFRoaXMgd291bGQgYXBwbHkgbG9jYWxUcmFuc2Zvcm0oKSB0d2ljZSBpZiBsb2NhbFRy
YW5zZm9ybSgpIHdlcmUgbm90IHRoZSBpZGVudGl0eS4KICAgICByZXR1cm4gbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSgpICogUmVuZGVyQm94OjphYnNvbHV0ZVRyYW5zZm9ybSgpOwpAQCAtMjU1LDkg
KzI1NSw5IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSb290OjpyZXBhaW50UmVjdEluTG8KICAgICBy
ZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1Jv
b3Q6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSb290
Ojpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwogfQogCiB2b2lkIFJlbmRlclNW
R1Jvb3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdTdHlsZWRFbGVtZW50OwotY2xhc3MgVHJhbnNm
b3JtYXRpb25NYXRyaXg7CitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAKIGNsYXNzIFJlbmRlclNW
R1Jvb3QgOiBwdWJsaWMgUmVuZGVyQm94LCBTVkdSZW5kZXJCYXNlIHsKIHB1YmxpYzoKQEAgLTU0
LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CiAK
LSAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKQEAgLTY0LDggKzY0LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEZs
b2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0OwogCiAgICAgLy8g
RklYTUU6IEJvdGggb2YgdGhlc2Ugb3ZlcnJpZGVzIHNob3VsZCBiZSByZW1vdmVkLgotICAgIHZp
cnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0OwogCiAgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCkBA
IC04MCwxMiArODAsMTIgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgcGFyZW50T3JpZ2luVG9C
b3JkZXJCb3goKSBjb25zdDsKICAgICBJbnRTaXplIGJvcmRlck9yaWdpblRvQ29udGVudEJveCgp
IGNvbnN0OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVG9SZXBhaW50Q29udGFpbmVy
VHJhbnNmb3JtKGNvbnN0IEludFBvaW50JiBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcikgY29uc3Q7
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpIGNv
bnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9y
bShjb25zdCBJbnRQb2ludCYgcGFyZW50T3JpZ2luSW5Db250YWluZXIpIGNvbnN0OworICAgIEFm
ZmluZVRyYW5zZm9ybSBsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICBS
ZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKICAgICBGbG9hdFNpemUgbV92aWV3cG9y
dFNpemU7Ci0gICAgbXV0YWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xvY2FsVG9QYXJlbnRU
cmFuc2Zvcm07CisgICAgbXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJh
bnNmb3JtOwogfTsKIAogaW5saW5lIFJlbmRlclNWR1Jvb3QqIHRvUmVuZGVyU1ZHUm9vdChSZW5k
ZXJPYmplY3QqIG9iamVjdCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmgJKHJldmlz
aW9uIDU0NDY0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogCi0jaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCw3
ICs0NCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zv
cm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwpAQCAtNjYsMTEgKzY2
LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSByZW1vdmVk
IHdoZW4gbG9jYWxUcmFuc2Zvcm0oKSBpcyByZW1vdmVkIGZyb20gUmVuZGVyT2JqZWN0Ci0gICAg
dmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2Nh
bFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KIAogICAgIHZp
cnR1YWwgUm9vdElubGluZUJveCogY3JlYXRlUm9vdElubGluZUJveCgpOwogCi0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9sb2NhbFRyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9s
b2NhbFRyYW5zZm9ybTsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCShyZXZpc2lvbiA1NDQ2NCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTIgQEAgUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lcjo6UmVuZGVyUwogewogfQogCi1jb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
IGNvbnN0Citjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250
YWluZXI6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBtX2xv
Y2FsVHJhbnNmb3JtOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdUcmFuc2Zv
cm1hYmxlQ29udGFpbmVyOjpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0g
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6bG9jYWxUcmFuc2Zvcm0oKSBjb25zdAog
ewogICAgIHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOwogfQpAQCAtNTQsNyArNTQsNyBAQCB2b2lk
IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OmNhCiAgICAgaWYgKHRyYW5zbGF0aW9u
LndpZHRoKCkgPT0gMCAmJiB0cmFuc2xhdGlvbi5oZWlnaHQoKSA9PSAwKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2xvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KHRyYW5zbGF0aW9uLndp
ZHRoKCksIHRyYW5zbGF0aW9uLmhlaWdodCgpKTsKKyAgICBtX2xvY2FsVHJhbnNmb3JtLnRyYW5z
bGF0ZSh0cmFuc2xhdGlvbi53aWR0aCgpLCB0cmFuc2xhdGlvbi5oZWlnaHQoKSk7CiB9CiAKIH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxl
Q29udGFpbmVyLmgJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lcihTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOwog
Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpOwogICAgICAgICAvLyBG
SVhNRTogVGhpcyBjYW4gYmUgbWFkZSBub24tdmlydHVhbCBvbmNlIFNWR1JlbmRlclRyZWVBc1Rl
eHQgc3RvcHMgdXNpbmcgbG9jYWxUcmFuc2Zvcm0oKQotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQWZm
aW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CiAKLSAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9sb2NhbFRyYW5zZm9ybTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1f
bG9jYWxUcmFuc2Zvcm07CiAgICAgfTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OlJlbmRl
clNWR1ZpZQogewogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6Om1h
cmtlckJvdW5kYXJpZXMoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hcmtlclRyYW5zZm9y
bWF0aW9uKSBjb25zdAorRmxvYXRSZWN0IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjptYXJr
ZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24p
IGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IGNvb3JkaW5hdGVzID0gcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKTsKIApAQCAtNDgsMTIgKzQ4LDEyIEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lcjo6bWEKICAgICByZXR1cm4gbWFya2VyVHJhbnNmb3JtYXRpb24ubWFw
UmVjdChjb29yZGluYXRlcyk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyOjptYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYg
b3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lcjo6bWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9uKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBv
cmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAgIC8vIFRoZSAnb3JpZ2luJyBj
b29yZGluYXRlIG1hcHMgdG8gU1ZHcyByZWZYL3JlZlksIGdpdmVuIGluIGNvb3JkaW5hdGVzIHJl
bGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBlc3RhYmxpc2hlZCBieSB0aGUgbWFya2VyCiAgICAgRmxv
YXRQb2ludCBtYXBwZWRPcmlnaW4gPSB2aWV3cG9ydFRyYW5zZm9ybSgpLm1hcFBvaW50KG9yaWdp
bik7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1hdGlvbiA9IGNvbnRlbnRU
cmFuc2Zvcm1hdGlvbjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gPSBjb250
ZW50VHJhbnNmb3JtYXRpb247CiAgICAgaWYgKHN0cm9rZVdpZHRoICE9IC0xKQogICAgICAgICB0
cmFuc2Zvcm1hdGlvbi5zY2FsZU5vblVuaWZvcm0oc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsK
IApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpjYWxj
VmllCiAgICAgfQogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lcjo6dmlld3BvcnRUcmFuc2Zvcm0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFJlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyOjp2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAg
aWYgKG5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewogICAgICAgICBTVkdT
VkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsKQEAg
LTEwMiwxMiArMTAyLDEyIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1ZpZXdwb3J0
Q28KICAgICAgICAgcmV0dXJuIG1hcmtlci0+dmlld0JveFRvVmlld1RyYW5zZm9ybShtX3ZpZXdw
b3J0LndpZHRoKCksIG1fdmlld3BvcnQuaGVpZ2h0KCkpOwogICAgIH0KIAotICAgIHJldHVybiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKIH0K
IAotY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYg
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25z
dAogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0VHJhbnNsYXRpb247CisgICAg
QWZmaW5lVHJhbnNmb3JtIHZpZXdwb3J0VHJhbnNsYXRpb247CiAgICAgdmlld3BvcnRUcmFuc2xh
dGlvbi50cmFuc2xhdGUobV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQueSgpKTsKICAgICBtX2xv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0gPSB2aWV3cG9ydFRyYW5zZm9ybSgpICogdmlld3BvcnRUcmFu
c2xhdGlvbjsKICAgICByZXR1cm4gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwpAQCAtMTE2LDcg
KzExNiw3IEBAIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBSZW5kZXJTVkdWaWUKIH0KIAog
Ly8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSByZW1vdmVkIGFzIHNvb24gYXMgY2FsbGVy
cyB0byBSZW5kZXJCb3g6OmFic29sdXRlVHJhbnNmb3JtKCkgY2FuIGJlIHJlbW92ZWQuCi1UcmFu
c2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6YWJzb2x1dGVUcmFu
c2Zvcm0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
OjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyB3b3VsZCBhcHBseSBs
b2NhbFRyYW5zZm9ybSgpIHR3aWNlIGlmIGxvY2FsVHJhbnNmb3JtKCkgd2VyZSBub3QgdGhlIGlk
ZW50aXR5LgogICAgIHJldHVybiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgKiBSZW5kZXJTVkdD
b250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgJKHJldmlzaW9uIDU0NDY0KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMjEgKzM1LDIxIEBAIHB1YmxpYzoKICAgICBSZW5kZXJTVkdWaWV3cG9ydENvbnRh
aW5lcihTVkdTdHlsZWRFbGVtZW50Kik7CiAKICAgICAvLyBDYWxjdWxhdGVzIG1hcmtlciBib3Vu
ZGFyaWVzLCBtYXBwZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50J3MgY29vcmRpbmF0ZSBzcGFjZQot
ICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZGFyaWVzKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXJrZXJUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CisgICAgRmxvYXRSZWN0IG1hcmtlckJvdW5k
YXJpZXMoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXJrZXJUcmFuc2Zvcm1hdGlvbikgY29uc3Q7
CiAKICAgICAvLyBHZW5lcmF0ZXMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNhYmxlIHRvIHJl
bmRlciBtYXJrZXIgY29udGVudC4gSGFuZGxlcyBzY2FsaW5nIHRoZSBtYXJrZXIgY29udGVudAog
ICAgIC8vIGFjb3JkaW5nIHRvIFNWR3MgbWFya2VyVW5pdHM9InN0cm9rZVdpZHRoIiBjb25jZXB0
LCB3aGVuIGEgc3Ryb2tlV2lkdGggdmFsdWUgIT0gLTEgaXMgcGFzc2VkIGluLgotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBv
cmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoID0gLTEpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9y
bSBtYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjb250
ZW50VHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgc3Ryb2tl
V2lkdGggPSAtMSkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU1ZHQ29u
dGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciI7
IH0KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0VHJhbnNmb3JtKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgp
IGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvdmVycmlkZSBzaG91bGQg
YmUgcmVtb3ZlZCBvbmNlIGNhbGxlcnMgb2YgUmVuZGVyQm94OjphYnNvbHV0ZVRyYW5zZm9ybSgp
IGNhbiBiZSByZW1vdmVkLgotICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggYWJzb2x1
dGVUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0
ZVRyYW5zZm9ybSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNhbGNWaWV3cG9ydCgpOwog
CkBAIC01Nyw3ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHBvaW50SXNJbnNp
ZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCk7CiAKICAgICBG
bG9hdFJlY3QgbV92aWV3cG9ydDsKLSAgICBtdXRhYmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
bG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKKyAgICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm07CiB9OwogICAKIGlubGluZSBSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lciogdG9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcihSZW5kZXJPYmplY3QqIG9iamVj
dCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3Bw
CShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91
dEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTIsOSArNTEyLDkgQEAgYm9vbCBTVkdDaGFy
Ojppc0hpZGRlbigpIGNvbnN0CiAgICAgcmV0dXJuIHBhdGhEYXRhICYmIHBhdGhEYXRhLT5oaWRk
ZW47CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR0NoYXI6OmNoYXJhY3RlclRyYW5zZm9y
bSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHQ2hhcjo6Y2hhcmFjdGVyVHJhbnNmb3JtKCkg
Y29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG07CisgICAgQWZmaW5lVHJhbnNm
b3JtIGN0bTsKIAogICAgIC8vIFJvdGF0ZSBjaGFyYWN0ZXIgYXJvdW5kIGFuZ2xlLCBhbmQgcG9z
c2libHkgc2NhbGUuCiAgICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmgJKHJldmlzaW9uIDU0NDY0KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwxNSArMjQsMTUgQEAKICNkZWZpbmUgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mb19oCiAKICNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNW
R1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgiCisKICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdUZXh0Q29udGVudEVsZW1l
bnQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMjM0LDcgKzIzNCw3IEBAIHN0cnVjdCBTVkdDaGFyIHsKIAogICAgIC8vIEhlbHBlciBtZXRo
b2RzCiAgICAgYm9vbCBpc0hpZGRlbigpIGNvbnN0OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGNoYXJhY3RlclRyYW5zZm9ybSgpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBjaGFyYWN0
ZXJUcmFuc2Zvcm0oKSBjb25zdDsKIH07CiAKIHN0cnVjdCBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJS
YW5nZSB7CkBAIC0yNzUsNyArMjc1LDcgQEAgc3RydWN0IFNWR1RleHRDaHVuayB7CiAgICAgLy8g
dGV4dExlbmd0aCAmIGxlbmd0aEFkanVzdCBzdXBwb3J0CiAgICAgZmxvYXQgdGV4dExlbmd0aDsK
ICAgICBFTGVuZ3RoQWRqdXN0IGxlbmd0aEFkanVzdDsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjdG07CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKIAogICAgIC8vIHN0YXR1cyBmbGFncwog
ICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgOiAxOwpAQCAtMjkxLDcgKzI5MSw3IEBAIHN0cnVjdCBT
VkdUZXh0Q2h1bmsgewogc3RydWN0IFNWR1RleHRDaHVua1dhbGtlckJhc2UgewogICAgIHZpcnR1
YWwgflNWR1RleHRDaHVua1dhbGtlckJhc2UoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBvcGVy
YXRvcigpKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGludCBzdGFydE9mZnNldCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGNodW5rQ3RtLAorICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRv
cigpKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGludCBzdGFydE9mZnNldCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBjaHVua0N0bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBzdGFydCwgY29uc3QgVmVjdG9yPFNWR0NoYXI+
OjppdGVyYXRvciYgZW5kKSA9IDA7CiAKICAgICAvLyBGb2xsb3dpbmdzIG1ldGhvZHMgYXJlIG9u
bHkgdXNlZCBmb3IgcGFpbnRpbmcgdGV4dCBjaHVua3MKQEAgLTMwOSw3ICszMDksNyBAQCBzdHJ1
Y3QgU1ZHVGV4dENodW5rV2Fsa2VyIDogcHVibGljIFNWR1RlCiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiB2b2lkIChDYWxsYmFja0NsYXNzOjoqU1ZHVGV4dENodW5rV2Fsa2VyQ2FsbGJhY2spKFNWR0lu
bGluZVRleHRCb3gqIHRleHRCb3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGNodW5rQ3RtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGNodW5rQ3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBzdGFy
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgZW5kKTsKIApAQCAtMzQz
LDcgKzM0Myw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHdhbGtlcik7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50
IHN0YXJ0T2Zmc2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY2h1bmtDdG0sCisgICAg
dmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50IHN0
YXJ0T2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNodW5rQ3RtLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIHN0YXJ0LCBj
b25zdCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBlbmQpCiAgICAgewogICAgICAgICAoKm1f
b2JqZWN0LiptX3dhbGtlckNhbGxiYWNrKSh0ZXh0Qm94LCBzdGFydE9mZnNldCwgY2h1bmtDdG0s
IHN0YXJ0LCBlbmQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJ
KHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw5ICsxMDgsNyBAQCBGbG9hdFJlY3QgU1ZHSW5saW5l
VGV4dEJveDo6Y2FsY3VsYXRlR2x5CiAgICAgRmxvYXRSZWN0IGdseXBoUmVjdCh4MSwgeTEsIHgy
IC0geDEsIHkyIC0geTEpOwogCiAgICAgLy8gVGFrZSBwZXItY2hhcmFjdGVyIHRyYW5zZm9ybWF0
aW9ucyBpbnRvIGFjY291bnQKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBzdmdDaGFy
LmNoYXJhY3RlclRyYW5zZm9ybSgpOwotICAgIGlmICghY3RtLmlzSWRlbnRpdHkoKSkKLSAgICAg
ICAgZ2x5cGhSZWN0ID0gY3RtLm1hcFJlY3QoZ2x5cGhSZWN0KTsKKyAgICBnbHlwaFJlY3QgPSBz
dmdDaGFyLmNoYXJhY3RlclRyYW5zZm9ybSgpLm1hcFJlY3QoZ2x5cGhSZWN0KTsKIAogICAgIHJl
dHVybiBnbHlwaFJlY3Q7CiB9CkBAIC0xMjYsNyArMTI0LDcgQEAgc3RydWN0IFNWR0lubGluZVRl
eHRCb3hDbG9zZXN0Q2hhcmFjdGVyVAogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGNodW5rUG9y
dGlvbkNhbGxiYWNrKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGludCBzdGFydE9mZnNldCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNodW5rQ3RtLAorICAgIHZvaWQgY2h1bmtQb3J0
aW9uQ2FsbGJhY2soU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50IHN0YXJ0T2Zmc2V0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNodW5rQ3RtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgc3RhcnQsIGNvbnN0IFZlY3Rv
cjxTVkdDaGFyPjo6aXRlcmF0b3ImIGVuZCkKICAgICB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT5zdHlsZSgpOwpAQCAtMTkzLDcgKzE5MSw3
IEBAIHN0cnVjdCBTVkdJbmxpbmVUZXh0Qm94U2VsZWN0aW9uUmVjdFdhbGsKICAgICB7CiAgICAg
fQogCi0gICAgdm9pZCBjaHVua1BvcnRpb25DYWxsYmFjayhTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0
Qm94LCBpbnQgc3RhcnRPZmZzZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjaHVua0N0
bSwKKyAgICB2b2lkIGNodW5rUG9ydGlvbkNhbGxiYWNrKFNWR0lubGluZVRleHRCb3gqIHRleHRC
b3gsIGludCBzdGFydE9mZnNldCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjaHVua0N0bSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0
b3ImIHN0YXJ0LCBjb25zdCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBlbmQpCiAgICAgewog
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+c3R5
bGUoKTsKQEAgLTM1MCw3ICszNDgsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50Q2hh
cmFjdGVycyhSCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSB0ZXh0LT5zdHlsZShpc0Zp
cnN0TGluZVN0eWxlKCkpOwogICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZVRvVXNlLT5mb250
KCk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBzdmdDaGFyLmNoYXJhY3RlclRy
YW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBzdmdDaGFyLmNoYXJhY3RlclRy
YW5zZm9ybSgpOwogICAgIGlmICghY3RtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmNvbmNhdENUTShjdG0pOwogCkBAIC01MjMsNyArNTIxLDcgQEAgdm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oRQogICAgIGNvbnRleHQtPnNhdmUoKTsKICAg
ICBjb250ZXh0LT5iZWdpblBhdGgoKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9
IHN2Z0NoYXIuY2hhcmFjdGVyVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9
IHN2Z0NoYXIuY2hhcmFjdGVyVHJhbnNmb3JtKCk7CiAgICAgaWYgKCFjdG0uaXNJZGVudGl0eSgp
KQogICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oY3RtKTsKIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR01hcmtlckxheW91dEluZm8uaAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAgY2xhc3MgUGF0aDsKIGNsYXNzIFNWR1Jlc291cmNlTWFya2VyOwogCiBzdHJ1Y3QgTWFy
a2VyTGF5b3V0IHsKLSAgICBNYXJrZXJMYXlvdXQoU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck9i
aiA9IDAsIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeE9iaiA9IFRyYW5zZm9ybWF0aW9uTWF0
cml4KCkpCisgICAgTWFya2VyTGF5b3V0KFNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJPYmogPSAw
LCBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4T2JqID0gQWZmaW5lVHJhbnNmb3JtKCkpCiAgICAgICAg
IDogbWFya2VyKG1hcmtlck9iaikKICAgICAgICAgLCBtYXRyaXgobWF0cml4T2JqKQogICAgIHsK
QEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IE1hcmtlckxheW91dCB7CiAgICAgfQogCiAgICAgU1ZH
UmVzb3VyY2VNYXJrZXIqIG1hcmtlcjsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7
CisgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKIH07CiAKIGNsYXNzIFNWR01hcmtlckxheW91
dEluZm8gOiBwdWJsaWMgTm9uY29weWFibGUgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVu
ZGVyU3VwcG9ydC5jcHAJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpZiBF
TkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIAorI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCkBAIC0zNyw3ICsz
OCw2IEBACiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1VSSVJl
ZmVyZW5jZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCi0jaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMjg4LDcgKzI4OCw3IEBAIEZsb2F0UmVjdCBTVkdSZW5kZXJCYXNl
OjptYXNrZXJCb3VuZGluZ0IKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAKLXZvaWQgYXBw
bHlUcmFuc2Zvcm1Ub1BhaW50SW5mbyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbG9jYWxUb0FuY2VzdG9yVHJhbnNmb3JtKQor
dm9pZCBhcHBseVRyYW5zZm9ybVRvUGFpbnRJbmZvKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb0FuY2VzdG9yVHJhbnNmb3Jt
KQogewogICAgIGlmIChsb2NhbFRvQW5jZXN0b3JUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAg
ICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oCShyZXZp
c2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgbW92ZSB0byBSZW5kZXJPYmplY3Qgb3IgUGFpbnRJbmZvCiAg
ICAgLy8gVXNlZCBmb3IgdHJhbnNmb3JtaW5nIHRoZSBHcmFwaGljc0NvbnRleHQgYW5kIGRhbWFn
ZSByZWN0IGJlZm9yZSBwYXNzaW5nIFBhaW50SW5mbyB0byBjaGlsZCByZW5kZXJlcnMuCi0gICAg
dm9pZCBhcHBseVRyYW5zZm9ybVRvUGFpbnRJbmZvKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxvY2FsVG9DaGlsZFRyYW5zZm9ybSk7CisgICAg
dm9pZCBhcHBseVRyYW5zZm9ybVRvUGFpbnRJbmZvKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvQ2hpbGRUcmFuc2Zvcm0pOwogCiAgICAgLy8g
VGhpcyBvZmZlcnMgYSB3YXkgdG8gcmVuZGVyIHBhcnRzIG9mIGEgV2ViS2l0IHJlbmRlcmluZyB0
cmVlIGludG8gYSBJbWFnZUJ1ZmZlci4KICAgICB2b2lkIHJlbmRlclN1YnRyZWVUb0ltYWdlKElt
YWdlQnVmZmVyKiwgUmVuZGVyT2JqZWN0Kik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSw3
IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMKICAgICByZXR1cm4g
dHM7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKICAgICBp
ZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgdHMgPDwgImlkZW50aXR5IjsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDU0NDY0
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZW5k
ZXJQYXRoOwogICAgIGNsYXNzIFJlbmRlclNWR1Jvb3Q7CiAgICAgY2xhc3MgUmVuZGVyVGV4dDsK
LSAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyAgICBjbGFzcyBBZmZpbmVUcmFuc2Zv
cm07CiAKIC8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRyZWVBc1RleHQgY29k
ZQogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyUGF0aCYsIGludCBpbmRlbnQp
OwpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIHdyaXRlU1ZHVGV4dChUZXh0U3RyZWFtJiwgY29uc3Qg
UmVuCiB2b2lkIHdyaXRlUmVuZGVyUmVzb3VyY2VzKFRleHRTdHJlYW0mLCBOb2RlKiBwYXJlbnQp
OwogCiAvLyBoZWxwZXIgb3BlcmF0b3JzIGRlZmluZWQgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMg
dG8gZHVtcCB0aGUgcmVuZGVyIHRyZWUuCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRSZWN0Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiwgY29uc3QgSW50UG9pbnQmKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NW
R1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jv
b3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NW
R1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNyArNTA3LDcgQEAgc3Ry
dWN0IFNWR1Jvb3RJbmxpbmVCb3hQYWludFdhbGtlciB7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB2b2lkIGNodW5rUG9ydGlvbkNhbGxiYWNrKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGlu
dCBzdGFydE9mZnNldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNodW5rQ3RtLAorICAg
IHZvaWQgY2h1bmtQb3J0aW9uQ2FsbGJhY2soU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50
IHN0YXJ0T2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNodW5rQ3RtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgc3Rh
cnQsIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIGVuZCkKICAgICB7CiAgICAgICAg
IFJlbmRlclRleHQqIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKTsKQEAgLTg2NSw3ICs4
NjUsNyBAQCBzdGF0aWMgdm9pZCBhcHBseVRleHRMZW5ndGhDb3JyZWN0aW9uVG9UCiAgICAgICAg
IFNWR0NoYXImIGZpcnN0Q2hhciA9ICooY2h1bmsuc3RhcnQpOwogCiAgICAgICAgIC8vIEFzc3Vy
ZSB3ZSBhcHBseSB0aGUgY2h1bmsgc2NhbGluZyBpbiB0aGUgcmlnaHQgb3JpZ2luCi0gICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG5ld0NodW5rQ3RtOworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gbmV3Q2h1bmtDdG07CiAgICAgICAgIG5ld0NodW5rQ3RtLnRyYW5zbGF0ZShmaXJzdENoYXIu
eCwgZmlyc3RDaGFyLnkpOwogICAgICAgICBuZXdDaHVua0N0bSA9IGNodW5rLmN0bSAqIG5ld0No
dW5rQ3RtOwogICAgICAgICBuZXdDaHVua0N0bS50cmFuc2xhdGUoLWZpcnN0Q2hhci54LCAtZmly
c3RDaGFyLnkpOwpAQCAtOTc4LDcgKzk3OCw2IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVp
bGRMYXlvdXRJbmZvcm0KICAgICAgICAgICAgICAgICBWZWN0b3I8U1ZHVGV4dENodW5rPjo6aXRl
cmF0b3IgaXQgPSB0ZW1wQ2h1bmtzLmJlZ2luKCk7CiAgICAgICAgICAgICAgICAgVmVjdG9yPFNW
R1RleHRDaHVuaz46Oml0ZXJhdG9yIGVuZCA9IHRlbXBDaHVua3MuZW5kKCk7CiAKLSAgICAgICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG07CiAgICAgICAgICAgICAgICAgZmxvYXQg
Y29tcHV0ZWRMZW5ndGggPSAwLjBmOwogIAogICAgICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAJKHJldmlz
aW9uIDU0NDY0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxMiBAQCB2b2lkIFRyYW5zZm9ybVN0YXRlOjptb3ZlKGlu
dCB4LCBpbnQgeSwgCiAgICAgbV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0gPSBhY2N1bXVsYXRlID09
IEFjY3VtdWxhdGVUcmFuc2Zvcm07CiB9CiAKKy8vIEZJWE1FOiBXZSB0cmFuc2Zvcm0gQWZmaW5l
VHJhbnNmb3JtIHRvIFRyYW5zZm9ybWF0aW9uTWF0cml4LiBUaGlzIGlzIHJhdGhlciBpbmVmZmlj
aWVudC4KK3ZvaWQgVHJhbnNmb3JtU3RhdGU6OmFwcGx5VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtRnJvbUNvbnRhaW5lciwgVHJhbnNmb3JtQWNjdW11bGF0aW9uIGFj
Y3VtdWxhdGUpCit7CisgICAgYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtRnJvbUNvbnRhaW5lci50
b1RyYW5zZm9ybWF0aW9uTWF0cml4KCksIGFjY3VtdWxhdGUpOworfQorCiB2b2lkIFRyYW5zZm9y
bVN0YXRlOjphcHBseVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtRnJvbUNvbnRhaW5lciwgVHJhbnNmb3JtQWNjdW11bGF0aW9uIGFjY3VtdWxhdGUpCiB7CiAg
ICAgLy8gSWYgd2UgaGF2ZSBhbiBhY2N1bXVsYXRlZCB0cmFuc2Zvcm0gZnJvbSBsYXN0IHRpbWUs
IG11bHRpcGx5IGluIHRoaXMgdHJhbnNmb3JtCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9UcmFu
c2Zvcm1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0
YXRlLmgJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3Rh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBUcmFuc2Zvcm1T
dGF0ZV9oCiAjZGVmaW5lIFRyYW5zZm9ybVN0YXRlX2gKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC01OSw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBtb3ZlKGludCB4LCBpbnQgeSwgVHJhbnNmb3JtQWNjdW11bGF0aW9uID0g
RmxhdHRlblRyYW5zZm9ybSk7CisgICAgdm9pZCBhcHBseVRyYW5zZm9ybShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybUZyb21Db250YWluZXIsIFRyYW5zZm9ybUFjY3VtdWxhdGlvbiA9
IEZsYXR0ZW5UcmFuc2Zvcm0pOwogICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUZyb21Db250YWluZXIsIFRyYW5zZm9ybUFjY3VtdWxh
dGlvbiA9IEZsYXR0ZW5UcmFuc2Zvcm0pOwogICAgIHZvaWQgZmxhdHRlbigpOwogCkluZGV4OiBX
ZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9H
cmFkaWVudEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDEyIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRN
ZXRob2QoKSBjb25zdCB7IHJldHVybiBtX3NwcmVhZE1ldGhvZDsgfQogICAgICAgICBib29sIGJv
dW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRpbmdCb3hNb2RlOyB9Ci0gICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdyYWRpZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9ncmFkaWVudFRyYW5zZm9ybTsgfQorICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGll
bnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50VHJhbnNmb3JtOyB9CiAgICAg
ICAgIGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBzdG9wcygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RvcHM7IH0KIAogICAgICAgICB2b2lkIHNldFNwcmVhZE1ldGhvZChHcmFkaWVudFNwcmVh
ZE1ldGhvZCB2YWx1ZSkgeyBtX3NwcmVhZE1ldGhvZCA9IHZhbHVlOyBtX3NwcmVhZE1ldGhvZFNl
dCA9IHRydWU7IH0KICAgICAgICAgdm9pZCBzZXRCb3VuZGluZ0JveE1vZGUoYm9vbCB2YWx1ZSkg
eyBtX2JvdW5kaW5nQm94TW9kZSA9IHZhbHVlOyBtX2JvdW5kaW5nQm94TW9kZVNldCA9IHRydWU7
IH0KLSAgICAgICAgdm9pZCBzZXRHcmFkaWVudFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdmFsdWUpIHsgbV9ncmFkaWVudFRyYW5zZm9ybSA9IHZhbHVlOyBtX2dyYWRpZW50
VHJhbnNmb3JtU2V0ID0gdHJ1ZTsgfQorICAgICAgICB2b2lkIHNldEdyYWRpZW50VHJhbnNmb3Jt
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdmFsdWUpIHsgbV9ncmFkaWVudFRyYW5zZm9ybSA9IHZh
bHVlOyBtX2dyYWRpZW50VHJhbnNmb3JtU2V0ID0gdHJ1ZTsgfQogICAgICAgICB2b2lkIHNldFN0
b3BzKGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiB2YWx1ZSkgeyBtX3N0b3BzID0gdmFs
dWU7IG1fc3RvcHNTZXQgPSB0cnVlOyB9IAogCiAgICAgICAgIGJvb2wgaGFzU3ByZWFkTWV0aG9k
KCkgY29uc3QgeyByZXR1cm4gbV9zcHJlYWRNZXRob2RTZXQ7IH0KQEAgLTUzLDcgKzUzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBQcm9wZXJ0aWVzCiAgICAgICAgIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOwogICAgICAgICBib29sIG1fYm91bmRpbmdC
b3hNb2RlOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2dyYWRpZW50VHJhbnNmb3Jt
OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9ncmFkaWVudFRyYW5zZm9ybTsKICAgICAgICAg
VmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gbV9zdG9wczsKIAogICAgICAgICAvLyBQcm9wZXJ0eSBz
dGF0ZXMKSW5kZXg6IFdlYkNvcmUvc3ZnL1BhdHRlcm5BdHRyaWJ1dGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvUGF0dGVybkF0dHJpYnV0ZXMuaAkocmV2aXNpb24gNTQ0NjQpCisrKyBX
ZWJDb3JlL3N2Zy9QYXR0ZXJuQXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZHTGVuZ3RoIGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAgICAgICAgIGJvb2wgYm91bmRpbmdCb3hNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveE1vZGU7IH0KICAgICAgICAgYm9vbCBib3VuZGlu
Z0JveE1vZGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveE1vZGVDb250ZW50
OyB9Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX3BhdHRlcm5UcmFuc2Zvcm07IH0KKyAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm5UcmFuc2Zvcm07IH0K
ICAgICAgICAgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHBhdHRlcm5Db250ZW50RWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybkNvbnRlbnRFbGVtZW50OyB9CiAKICAgICAgICAgdm9p
ZCBzZXRYKGNvbnN0IFNWR0xlbmd0aCYgdmFsdWUpIHsgbV94ID0gdmFsdWU7IG1feFNldCA9IHRy
dWU7IH0KQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IHNldEhlaWdodChjb25zdCBTVkdMZW5ndGgmIHZhbHVlKSB7IG1faGVpZ2h0ID0gdmFsdWU7IG1f
aGVpZ2h0U2V0ID0gdHJ1ZTsgfQogICAgICAgICB2b2lkIHNldEJvdW5kaW5nQm94TW9kZShib29s
IHZhbHVlKSB7IG1fYm91bmRpbmdCb3hNb2RlID0gdmFsdWU7IG1fYm91bmRpbmdCb3hNb2RlU2V0
ID0gdHJ1ZTsgfQogICAgICAgICB2b2lkIHNldEJvdW5kaW5nQm94TW9kZUNvbnRlbnQoYm9vbCB2
YWx1ZSkgeyBtX2JvdW5kaW5nQm94TW9kZUNvbnRlbnQgPSB2YWx1ZTsgbV9ib3VuZGluZ0JveE1v
ZGVDb250ZW50U2V0ID0gdHJ1ZTsgfQotICAgICAgICB2b2lkIHNldFBhdHRlcm5UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKSB7IG1fcGF0dGVyblRyYW5zZm9ybSA9
IHZhbHVlOyBtX3BhdHRlcm5UcmFuc2Zvcm1TZXQgPSB0cnVlOyB9CisgICAgICAgIHZvaWQgc2V0
UGF0dGVyblRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHZhbHVlKSB7IG1fcGF0dGVy
blRyYW5zZm9ybSA9IHZhbHVlOyBtX3BhdHRlcm5UcmFuc2Zvcm1TZXQgPSB0cnVlOyB9CiAgICAg
ICAgIHZvaWQgc2V0UGF0dGVybkNvbnRlbnRFbGVtZW50KGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50
KiB2YWx1ZSkgeyBtX3BhdHRlcm5Db250ZW50RWxlbWVudCA9IHZhbHVlOyBtX3BhdHRlcm5Db250
ZW50RWxlbWVudFNldCA9IHRydWU7IH0KIAogICAgICAgICBib29sIGhhc1goKSBjb25zdCB7IHJl
dHVybiBtX3hTZXQ7IH0KQEAgLTc4LDcgKzc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBTVkdMZW5ndGggbV9oZWlnaHQ7CiAgICAgICAgIGJvb2wgbV9ib3VuZGluZ0JveE1vZGU7
CiAgICAgICAgIGJvb2wgbV9ib3VuZGluZ0JveE1vZGVDb250ZW50OwotICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX3BhdHRlcm5UcmFuc2Zvcm07CisgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBtX3BhdHRlcm5UcmFuc2Zvcm07CiAgICAgICAgIGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiBt
X3BhdHRlcm5Db250ZW50RWxlbWVudDsKIAogICAgICAgICAvLyBQcm9wZXJ0eSBzdGF0ZXMKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDU0NDY0
KQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cmVz
ZXRUb0JhcwogICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1lbnQoKTsKLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCogdHJhbnNmb3JtID0gdGFyZ2V0LT5zdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9ybSA9IHRhcmdldC0+c3VwcGxlbWVudGFsVHJhbnNm
b3JtKCk7CiAgICAgaWYgKCF0cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKICAgICB0cmFuc2Zv
cm0tPm1ha2VJZGVudGl0eSgpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICBTVkdFbGVtZW50KiB0YXJnZXQgPSB0YXJnZXRF
bGVtZW50KCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybjsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCogdHJhbnNmb3JtID0gdGFyZ2V0LT5zdXBwbGVtZW50YWxUcmFuc2Zvcm0o
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9ybSA9IHRhcmdldC0+c3VwcGxlbWVudGFs
VHJhbnNmb3JtKCk7CiAgICAgaWYgKCF0cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKICAgICAK
QEAgLTIyMCw4ICsyMjAsOCBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBseVJl
c3VsCiAgICAgZm9yIChIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU1ZH
RWxlbWVudCogc2hhZG93VHJlZUVsZW1lbnQgPSAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKTsK
ICAgICAgICAgQVNTRVJUKHNoYWRvd1RyZWVFbGVtZW50KTsKLSAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXgqIHRyYW5zZm9ybSA9IHNoYWRvd1RyZWVFbGVtZW50LT5zdXBwbGVtZW50YWxUcmFu
c2Zvcm0oKTsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHQgPSB0YXJnZXRFbGVtZW50
LT5zdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtKiB0cmFu
c2Zvcm0gPSBzaGFkb3dUcmVlRWxlbWVudC0+c3VwcGxlbWVudGFsVHJhbnNmb3JtKCk7CisgICAg
ICAgIEFmZmluZVRyYW5zZm9ybSogdCA9IHRhcmdldEVsZW1lbnQtPnN1cHBsZW1lbnRhbFRyYW5z
Zm9ybSgpOwogICAgICAgICB0cmFuc2Zvcm0tPnNldE1hdHJpeCh0LT5hKCksIHQtPmIoKSwgdC0+
YygpLCB0LT5kKCksIHQtPmUoKSwgdC0+ZigpKTsKICAgICAgICAgaWYgKHNoYWRvd1RyZWVFbGVt
ZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgc2hhZG93VHJlZUVsZW1lbnQtPnJlbmRlcmVy
KCktPnNldE5lZWRzTGF5b3V0KHRydWUpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9u
RWxlbWVudC5oCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMyw5IEBACiAjaWZuZGVmIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50X2gKICNkZWZpbmUgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnRf
aAogI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQotCi0jaW5jbHVkZSAiU1ZHQW5pbWF0aW9uRWxl
bWVudC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGlv
bkVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA1NDQ2
NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShTVkdf
QU5JTUFUSU9OKQogI2luY2x1ZGUgIlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgiCiAKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgpAQCAtMzgs
NyArMzksNiBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1RyYW5z
Zm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5o
CShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDM0ICszMCwzNCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKK2NsYXNzIEFmZmluZVRy
YW5zZm9ybTsKIAotICAgIGNsYXNzIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50IDogcHVibGlj
IFNWR0FuaW1hdGlvbkVsZW1lbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgICAg
IHZpcnR1YWwgflNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KCk7Ci0gICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRUYXJnZXQoKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUb0Jhc2VWYWx1ZShjb25zdCBTdHJpbmcm
KTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBT
dHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmlu
ZywgY29uc3QgU3RyaW5nJiBieVN0cmluZyk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxh
dGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01J
TEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSZXN1
bHRzVG9UYXJnZXQoKTsKLSAgICAgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShj
b25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOwotCi0gICAg
ICAgIFNWR1RyYW5zZm9ybSBwYXJzZVRyYW5zZm9ybVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0
OwotICAgICAgICAKLSAgICAgICAgU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlIG1fdHlw
ZTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG1fYmFzZUluZGV4SW5UcmFuc2Zvcm1MaXN0
OwotCi0gICAgICAgIFNWR1RyYW5zZm9ybSBtX3RvVHJhbnNmb3JtOwotICAgICAgICBTVkdUcmFu
c2Zvcm0gbV9mcm9tVHJhbnNmb3JtOwotICAgIH07CitjbGFzcyBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudCA6IHB1YmxpYyBTVkdBbmltYXRpb25FbGVtZW50IHsKK3B1YmxpYzoKKyAgICBTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
KyAgICB2aXJ0dWFsIH5TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudCgpOworICAgIAorICAgIHZp
cnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdldCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworCitwcml2YXRlOgorICAgIHZp
cnR1YWwgdm9pZCByZXNldFRvQmFzZVZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwg
Ym9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFu
ZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmlu
Zyk7CisgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2Vu
dGFnZSwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCk7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5UmVzdWx0c1RvVGFyZ2V0KCk7CisgICAgdmlydHVhbCBmbG9h
dCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdG9TdHJpbmcpOworCisgICAgU1ZHVHJhbnNmb3JtIHBhcnNlVHJhbnNmb3JtVmFsdWUoY29u
c3QgU3RyaW5nJikgY29uc3Q7CisgICAgCisgICAgU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1U
eXBlIG1fdHlwZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2Jhc2VJbmRleEluVHJhbnNmb3JtTGlz
dDsKKworICAgIFNWR1RyYW5zZm9ybSBtX3RvVHJhbnNmb3JtOworICAgIFNWR1RyYW5zZm9ybSBt
X2Zyb21UcmFuc2Zvcm07Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmgJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBTVkdFbGVtZW50SW5zdGFuY2U7CiAgICAgY2xhc3MgU1ZHRWxlbWVudFJhcmVEYXRhOwogICAg
IGNsYXNzIFNWR1NWR0VsZW1lbnQ7Ci0gICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Cisg
ICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogCiAgICAgY2xhc3MgU1ZHRWxlbWVudCA6IHB1Ymxp
YyBTdHlsZWRFbGVtZW50IHsKICAgICBwdWJsaWM6CkBAIC03MCw3ICs3MCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpYmxlKGJv
b2wgc2VuZFBhcmVudExvYWRFdmVudHMgPSBmYWxzZSk7CiAgICAgICAgIAotICAgICAgICB2aXJ0
dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4KiBzdXBwbGVtZW50YWxUcmFuc2Zvcm0oKSB7IHJldHVy
biAwOyB9CisgICAgICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtKiBzdXBwbGVtZW50YWxUcmFu
c2Zvcm0oKSB7IHJldHVybiAwOyB9CiAKICAgICAgICAgdm9pZCBzZXRTeW5jaHJvbml6ZWRTVkdB
dHRyaWJ1dGVzKGJvb2wgdmFsdWUpIHsgbV9hcmVTVkdBdHRyaWJ1dGVzVmFsaWQgPSB2YWx1ZTsg
fQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHJldmlzaW9uIDU0NDY0KQorKysgV2Vi
Q29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
NyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCiAKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKQEAgLTMxLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgiCiAjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzUsMTAgKzc1LDEwIEBA
IGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goRG9jdW0KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94VG9W
aWV3VHJhbnNmb3JtKGNvbnN0IEZsb2F0UmVjdCYgdmlld0JveFJlY3QsIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8mIHByZXNlcnZlQXNwZWN0UmF0aW8sIGZsb2F0IHZpZXdXaWR0aCwgZmxv
YXQgdmlld0hlaWdodCkKK0FmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hU
b1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpbyYgcHJlc2VydmVBc3BlY3RSYXRpbywgZmxvYXQgdmlld1dpZHRoLCBm
bG9hdCB2aWV3SGVpZ2h0KQogewogICAgIGlmICghdmlld0JveFJlY3Qud2lkdGgoKSB8fCAhdmll
d0JveFJlY3QuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
OworICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CiAKICAgICByZXR1cm4gcHJlc2Vy
dmVBc3BlY3RSYXRpby5nZXRDVE0odmlld0JveFJlY3QueCgpLCB2aWV3Qm94UmVjdC55KCksIHZp
ZXdCb3hSZWN0LndpZHRoKCksIHZpZXdCb3hSZWN0LmhlaWdodCgpLCAwLCAwLCB2aWV3V2lkdGgs
IHZpZXdIZWlnaHQpOwogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHJldmlzaW9uIDU0NDY0
KQorKysgV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIyICsyNywyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDsKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKIAotICAgIGNsYXNzIFNWR0Zp
dFRvVmlld0JveCB7Ci0gICAgcHVibGljOgotICAgICAgICBTVkdGaXRUb1ZpZXdCb3goKTsKLSAg
ICAgICAgdmlydHVhbCB+U1ZHRml0VG9WaWV3Qm94KCk7Ci0KLSAgICAgICAgYm9vbCBwYXJzZVZp
ZXdCb3goRG9jdW1lbnQqLCBjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBm
bG9hdCYgeCwgZmxvYXQmIHksIGZsb2F0JiB3LCBmbG9hdCYgaCwgYm9vbCB2YWxpZGF0ZSA9IHRy
dWUpOwotICAgICAgICBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld0JveFRvVmlld1Ry
YW5zZm9ybShjb25zdCBGbG9hdFJlY3QmIHZpZXdCb3hSZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvJiwgZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KTsKLQotICAgICAg
ICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKERvY3VtZW50KiwgTWFwcGVkQXR0cmlidXRlKik7
Ci0gICAgICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldFZpZXdCb3hCYXNlVmFsdWUoU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpQYXNzVHlwZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZShTVkdBbmltYXRlZFByb3BlcnR5VHJh
aXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+OjpQYXNzVHlwZSkgPSAwOwotICAgIH07CitjbGFz
cyBTVkdGaXRUb1ZpZXdCb3ggeworcHVibGljOgorICAgIFNWR0ZpdFRvVmlld0JveCgpOworICAg
IHZpcnR1YWwgflNWR0ZpdFRvVmlld0JveCgpOworCisgICAgYm9vbCBwYXJzZVZpZXdCb3goRG9j
dW1lbnQqLCBjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBmbG9hdCYgeCwg
ZmxvYXQmIHksIGZsb2F0JiB3LCBmbG9hdCYgaCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOworICAg
IHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gdmlld0JveFRvVmlld1RyYW5zZm9ybShjb25zdCBGbG9h
dFJlY3QmIHZpZXdCb3hSZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJiwgZmxvYXQg
dmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KTsKKworICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoRG9jdW1lbnQqLCBNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICBib29sIGlzS25vd25BdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCisgICAgdmlydHVhbCB2b2lkIHNldFZpZXdC
b3hCYXNlVmFsdWUoU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpQYXNzVHlw
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVl
KFNWR0FuaW1hdGVkUHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz46OlBhc3NU
eXBlKSA9IDA7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR0xvY2F0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTG9jYXRh
YmxlLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlICJTVkdMb2NhdGFi
bGUuaCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgogI2luY2x1ZGUgIlNWR0V4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKQEAgLTgyLDE2ICs4MiwxNiBA
QCBGbG9hdFJlY3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0IFNWCiAgICAgcmV0dXJuIGVs
ZW1lbnQtPnJlbmRlcmVyKCktPm9iamVjdEJvdW5kaW5nQm94KCk7CiB9CiAKLVRyYW5zZm9ybWF0
aW9uTWF0cml4IFNWR0xvY2F0YWJsZTo6Z2V0Q1RNKGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQp
CitBZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxlOjpnZXRDVE0oY29uc3QgU1ZHRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY3RtOworICAgIEFmZmluZVRyYW5zZm9ybSBjdG07CiAKICAgICBOb2RlKiBwYXJlbnQgPSBl
bGVtZW50LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzU1ZHRWxl
bWVudCgpKSB7CiAgICAgICAgIFNWR0VsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4ocGFyZW50KTsKICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQgJiYgcGFy
ZW50RWxlbWVudC0+aXNTdHlsZWRMb2NhdGFibGUoKSkgewotICAgICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcGFyZW50Q1RNID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudCo+KHBhcmVudEVsZW1lbnQpLT5nZXRDVE0oKTsKKyAgICAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBwYXJlbnRDVE0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Kj4o
cGFyZW50RWxlbWVudCktPmdldENUTSgpOwogICAgICAgICAgICAgY3RtID0gcGFyZW50Q1RNICog
Y3RtOwogICAgICAgICB9CiAgICAgfQpAQCAtOTksMTYgKzk5LDE2IEBAIFRyYW5zZm9ybWF0aW9u
TWF0cml4IFNWR0xvY2F0YWJsZTo6Z2V0Q1QKICAgICByZXR1cm4gY3RtOwogfQogCi1UcmFuc2Zv
cm1hdGlvbk1hdHJpeCBTVkdMb2NhdGFibGU6OmdldFNjcmVlbkNUTShjb25zdCBTVkdFbGVtZW50
KiBlbGVtZW50KQorQWZmaW5lVHJhbnNmb3JtIFNWR0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKGNv
bnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGN0bTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwogCiAgICAg
Tm9kZSogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChwYXJlbnQgJiYg
cGFyZW50LT5pc1NWR0VsZW1lbnQoKSkgewogICAgICAgICBTVkdFbGVtZW50KiBwYXJlbnRFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhcmVudCk7CiAgICAgICAgIGlmIChwYXJl
bnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQtPmlzU3R5bGVkTG9jYXRhYmxlKCkpIHsKLSAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudENUTSA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQqPihwYXJlbnRFbGVtZW50KS0+Z2V0U2NyZWVuQ1RNKCk7Cisg
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcGFyZW50Q1RNID0gc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudCo+KHBhcmVudEVsZW1lbnQpLT5nZXRTY3JlZW5DVE0oKTsKICAg
ICAgICAgICAgIGN0bSA9IHBhcmVudENUTSAqIGN0bTsKICAgICAgICAgfQogICAgIH0KQEAgLTEx
NiwxMiArMTE2LDEyIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR0xvY2F0YWJsZTo6Z2V0U2MK
ICAgICByZXR1cm4gY3RtOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdMb2NhdGFibGU6
OmdldFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50KiB0YXJnZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR0xvY2F0YWJsZTo6Z2V0VHJhbnNmb3JtVG9F
bGVtZW50KFNWR0VsZW1lbnQqIHRhcmdldCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtID0gZ2V0Q1RNKCk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIGN0bSA9IGdldENUTSgpOwogCiAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQtPmlzU3R5bGVk
TG9jYXRhYmxlKCkpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGFyZ2V0Q1RNID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCo+KHRhcmdldCktPmdldENUTSgp
OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdGFyZ2V0Q1RNID0gc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudCo+KHRhcmdldCktPmdldENUTSgpOwogICAgICAgICBpZiAoIXRh
cmdldENUTS5pc0ludmVydGlibGUoKSkgewogICAgICAgICAgICAgZWMgPSBTVkdFeGNlcHRpb246
OlNWR19NQVRSSVhfTk9UX0lOVkVSVEFCTEU7CiAgICAgICAgICAgICByZXR1cm4gY3RtOwpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHTG9jYXRhYmxlLmgJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9zdmcvU1ZHTG9jYXRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMyICsyNywzMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKLSAgICBjbGFzcyBGbG9h
dFJlY3Q7Ci0gICAgY2xhc3MgU1ZHRWxlbWVudDsKLQotICAgIGNsYXNzIFNWR0xvY2F0YWJsZSB7
Ci0gICAgcHVibGljOgotICAgICAgICBTVkdMb2NhdGFibGUoKTsKLSAgICAgICAgdmlydHVhbCB+
U1ZHTG9jYXRhYmxlKCk7Ci0KLSAgICAgICAgLy8gJ1NWR0xvY2F0YWJsZScgZnVuY3Rpb25zCi0g
ICAgICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0
ID0gMDsKLSAgICAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVu
dCgpIGNvbnN0ID0gMDsKLQotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KCkgY29u
c3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldENUTSgpIGNv
bnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRTY3JlZW5D
VE0oKSBjb25zdCA9IDA7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFRyYW5zZm9y
bVRvRWxlbWVudChTVkdFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0gICAgICAg
IHN0YXRpYyBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KGNvbnN0IFNWR0VsZW1l
bnQqKTsKLSAgICAgICAgc3RhdGljIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50
KGNvbnN0IFNWR0VsZW1lbnQqKTsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIEZs
b2F0UmVjdCBnZXRCQm94KGNvbnN0IFNWR0VsZW1lbnQqKTsKLSAgICAgICAgc3RhdGljIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGdldENUTShjb25zdCBTVkdFbGVtZW50Kik7Ci0gICAgICAgIHN0YXRp
YyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRTY3JlZW5DVE0oY29uc3QgU1ZHRWxlbWVudCopOwot
ICAgIH07CitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBT
VkdFbGVtZW50OworCitjbGFzcyBTVkdMb2NhdGFibGUgeworcHVibGljOgorICAgIFNWR0xvY2F0
YWJsZSgpOworICAgIHZpcnR1YWwgflNWR0xvY2F0YWJsZSgpOworCisgICAgLy8gJ1NWR0xvY2F0
YWJsZScgZnVuY3Rpb25zCisgICAgdmlydHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRF
bGVtZW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3
cG9ydEVsZW1lbnQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oKSBjb25zdCA9
IDA7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgc3RhdGljIFNWR0VsZW1lbnQqIG5lYXJl
c3RWaWV3cG9ydEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCopOworICAgIHN0YXRpYyBTVkdFbGVt
ZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudChjb25zdCBTVkdFbGVtZW50Kik7CisKK3Byb3Rl
Y3RlZDoKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGdldEJCb3goY29uc3QgU1ZHRWxlbWVudCopOwor
ICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGNvbnN0IFNWR0VsZW1lbnQqKTsKKyAg
ICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTShjb25zdCBTVkdFbGVtZW50Kik7
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR01h
cmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1l
bnQuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFNWR01hcmtlckVsZW1lbnQ6On5T
VkdNYXJrZXJFbGVtZW50KCkKIHsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHTWFya2Vy
RWxlbWVudDo6dmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZp
ZXdIZWlnaHQpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHTWFya2VyRWxlbWVudDo6dmlld0Jv
eFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFNWR0ZpdFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybSh2
aWV3Qm94KCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSwgdmlld1dpZHRoLCB2aWV3SGVpZ2h0KTsK
IH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29y
ZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZHTWFya2VyRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+U1ZHTWFya2VyRWxlbWVu
dCgpOwogCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdCb3hUb1ZpZXdUcmFuc2Zv
cm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdDsKKyAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9h
dCB2aWV3SGVpZ2h0KSBjb25zdDsKIAogICAgICAgICB2b2lkIHNldE9yaWVudFRvQXV0bygpOwog
ICAgICAgICB2b2lkIHNldE9yaWVudFRvQW5nbGUoY29uc3QgU1ZHQW5nbGUmKTsKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdNYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9zdmcvU1ZHTWFz
a0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNyArMTk4LDcgQEAgUGFzc093blB0
cjxJbWFnZUJ1ZmZlcj4gU1ZHTWFza0VsZW1lbnQ6OgogICAgICAgICByZXBhaW50UmVjdC51bml0
ZShub2RlLT5yZW5kZXJlcigpLT5sb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChub2Rl
LT5yZW5kZXJlcigpLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAgfQog
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGV4dFRyYW5zZm9ybTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gY29udGV4dFRyYW5zZm9ybTsKICAgICAvLyBXZSBuZWVkIHRvIHNjYWxlIHJlcGFp
bnRSZWN0IGZvciBvYmplY3RCb3VuZGluZ0JveCB0byBnZXQgdGhlIGRyYXdpbmcgYXJlYS4KICAg
ICBpZiAobWFza0NvbnRlbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCkgewogICAgICAgICBjb250ZXh0VHJhbnNmb3JtLnNjYWxlTm9uVW5p
Zm9ybShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQo
KSk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdNYXRyaXguaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR01hdHJpeC5pZGwJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9zdmcvU1ZH
TWF0cml4LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBAQAogCiBtb2R1bGUgc3Zn
IHsKIAotICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9U1ZHLCBQT0RUeXBlPVRyYW5zZm9ybWF0
aW9uTWF0cml4XSBTVkdNYXRyaXggeworICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9U1ZHLCBQ
T0RUeXBlPUFmZmluZVRyYW5zZm9ybV0gU1ZHTWF0cml4IHsKICAgICAgICAgLy8gRklYTUU6IHRo
ZXNlIGF0dHJpYnV0ZXMgc2hvdWxkIGFsbCBiZSBmbG9hdHMgYnV0IHNpbmNlIHdlIGltcGxlbWVu
dAotICAgICAgICAvLyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB3aXRoIGRvdWJsZXMgc2V0dGluZyB0
aGVzZSBhcyBkb3VibGVzIG1ha2VzIG1vcmUgc2Vuc2UuCisgICAgICAgIC8vIEFmZmluZVRyYW5z
Zm9ybSB3aXRoIGRvdWJsZXMgc2V0dGluZyB0aGVzZSBhcyBkb3VibGVzIG1ha2VzIG1vcmUgc2Vu
c2UuCiAgICAgICAgIGF0dHJpYnV0ZSBkb3VibGUgYTsKICAgICAgICAgYXR0cmlidXRlIGRvdWJs
ZSBiOwogICAgICAgICBhdHRyaWJ1dGUgZG91YmxlIGM7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQ
YXR0ZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2lmIEVOQUJMRShTVkcp
CiAjaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0zOSw3ICs0MCw2IEBACiAjaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIK
ICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIFNWR1BhdHRlcm5F
bGVtZW50OjpidWlsZFBhdHRlcm4oY29uCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB2aWV3Qm94Q1RNID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh2aWV3Qm94
KCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSwgcGF0dGVybkJvdW5kYXJpZXMud2lkdGgoKSwgcGF0
dGVybkJvdW5kYXJpZXMuaGVpZ2h0KCkpOyAKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdmlld0JveENU
TSA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmlld0JveCgpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KCksIHBhdHRlcm5Cb3VuZGFyaWVzLndpZHRoKCksIHBhdHRlcm5Cb3VuZGFyaWVzLmhlaWdodCgp
KTsgCiAgICAgRmxvYXRSZWN0IHBhdHRlcm5Cb3VuZGFyaWVzSW5jbHVkaW5nT3ZlcmZsb3cgPSBw
YXR0ZXJuQm91bmRhcmllczsKIAogICAgIC8vIEFwcGx5IG9iamVjdEJvdW5kaW5nQm94TW9kZSBm
aXh1cCBmb3IgcGF0dGVybkNvbnRlbnRVbml0cywgaWYgdmlld0JveCBpcyBub3Qgc2V0LgpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHJldmlzaW9uIDU0NDY0KQor
KysgV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uaCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCB2b2lk
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnRyYW5zZm9ybVJlCiAgICAgfQogfQogCi1UcmFuc2Zv
cm1hdGlvbk1hdHJpeCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXRDVE0oZG91YmxlIGxvZ2lj
WCwgZG91YmxlIGxvZ2ljWSwKK0FmZmluZVRyYW5zZm9ybSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
OjpnZXRDVE0oZG91YmxlIGxvZ2ljWCwgZG91YmxlIGxvZ2ljWSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxvZ2ljV2lkdGgsIGRvdWJsZSBs
b2dpY0hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIC8qcGh5c1gqLywgZG91YmxlIC8qcGh5c1kqLywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHBoeXNXaWR0aCwgZG91YmxlIHBo
eXNIZWlnaHQpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGVtcDsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gdGVtcDsKIAogICAgIGlmIChhbGlnbigpID09IFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1VOS05PV04pCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW8uaAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFN0cmluZzsKLSAgICBjbGFzcyBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDsKKyAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAKICAgICBjbGFz
cyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIHsKICAgICBwdWJsaWM6CkBAIC02NCw3ICs2NCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHRyYW5zZm9ybVJlY3QoRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgRmxvYXRSZWN0JiBzcmNSZWN0KTsKICAgICAgICAgCi0gICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGdldENUTShkb3VibGUgbG9naWNYLCBkb3VibGUgbG9naWNZLAor
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGRvdWJsZSBsb2dpY1gsIGRvdWJsZSBsb2dp
Y1ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxvZ2ljV2lkdGgsIGRv
dWJsZSBsb2dpY0hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
cGh5c1gsIGRvdWJsZSBwaHlzWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgcGh5c1dpZHRoLCBkb3VibGUgcGh5c0hlaWdodCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCkBAIC00OCw3ICs0OSw2IEBACiAjaW5jbHVkZSAiU1ZHWm9vbUV2
ZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTE5
LDcgKzExOSw3IEBAIEZsb2F0UmVjdCBTVkdTVkdFbGVtZW50Ojp2aWV3cG9ydCgpIGNvbnMKICAg
ICB9CiAgICAgZmxvYXQgdyA9IHdpZHRoKCkudmFsdWUodGhpcyk7CiAgICAgZmxvYXQgaCA9IGhl
aWdodCgpLnZhbHVlKHRoaXMpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdCb3ggPSB2
aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHcsIGgpOworICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3Qm94
ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3LCBoKTsKICAgICBkb3VibGUgd0RvdWJsZSA9IHc7
CiAgICAgZG91YmxlIGhEb3VibGUgPSBoOwogICAgIHZpZXdCb3gubWFwKF94LCBfeSwgX3gsIF95
KTsKQEAgLTQxNCw5ICs0MTQsOSBAQCBGbG9hdFBvaW50IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNW
R1BvaW50CiAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRy
aXggU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCkKK0FmZmluZVRyYW5zZm9ybSBTVkdT
VkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKQogewotICAgIHJldHVybiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpOworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKIH0KIAogRmxvYXRSZWN0
IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1JlY3QoKQpAQCAtNDI5LDI2ICs0MjksMjYgQEAgU1ZH
VHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYQogICAgIHJldHVybiBTVkdUcmFu
c2Zvcm0oKTsKIH0KIAotU1ZHVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5z
Zm9ybUZyb21NYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK1NWR1Ry
YW5zZm9ybSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQogewogICAgIHJldHVybiBTVkdUcmFuc2Zvcm0obWF0
cml4KTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHU1ZHRWxlbWVudDo6Z2V0Q1RNKCkg
Y29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdTVkdFbGVtZW50OjpnZXRDVE0oKSBjb25zdAogewot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0Owog
ICAgIGlmICghaXNPdXRlcm1vc3RTVkcoKSkKICAgICAgICAgbWF0LnRyYW5zbGF0ZSh4KCkudmFs
dWUodGhpcyksIHkoKS52YWx1ZSh0aGlzKSk7CiAKICAgICBpZiAoYXR0cmlidXRlcygpLT5nZXRB
dHRyaWJ1dGVJdGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsKLSAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS52YWx1
ZSh0aGlzKSwgaGVpZ2h0KCkudmFsdWUodGhpcykpOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
dmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVp
Z2h0KCkudmFsdWUodGhpcykpOwogICAgICAgICBtYXQgPSB2aWV3Qm94ICogbWF0OwogICAgIH0K
IAogICAgIHJldHVybiBtYXQ7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1NWR0VsZW1l
bnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVudDo6
Z2V0U2NyZWVuQ1RNKCkgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBGbG9hdFBvaW50IHJvb3RMb2NhdGlvbjsKQEAg
LTQ2NCwxMSArNDY0LDExIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1NWR0VsZW1lbnQ6Omdl
dFMKICAgICAgICAgICAgIHJvb3RMb2NhdGlvbi5tb3ZlKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZh
bHVlKHRoaXMpKTsKICAgICB9CiAgICAgCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0ID0g
U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7CisgICAgQWZmaW5lVHJh
bnNmb3JtIG1hdCA9IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpOwog
ICAgIG1hdC50cmFuc2xhdGUocm9vdExvY2F0aW9uLngoKSwgcm9vdExvY2F0aW9uLnkoKSk7CiAK
ICAgICBpZiAoYXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVtKFNWR05hbWVzOjp2aWV3Qm94
QXR0cikpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld0JveCA9IHZpZXdCb3hU
b1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCkudmFsdWUodGhpcykp
OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zv
cm0od2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCkudmFsdWUodGhpcykpOwogICAgICAgICBt
YXQgPSB2aWV3Qm94ICogbWF0OwogICAgIH0KIApAQCAtNTM4LDcgKzUzOCw3IEBAIGJvb2wgU1ZH
U1ZHRWxlbWVudDo6aXNPdXRlcm1vc3RTVkcoKSBjb24KICAgICByZXR1cm4gIXBhcmVudE5vZGUo
KS0+aXNTVkdFbGVtZW50KCk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1NWR0VsZW1l
bnQ6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVp
Z2h0KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OnZpZXdCb3hUb1ZpZXdU
cmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdAogewogICAg
IEZsb2F0UmVjdCB2aWV3Qm94UmVjdDsKICAgICBpZiAodXNlQ3VycmVudFZpZXcoKSkgewpAQCAt
NTQ3LDcgKzU0Nyw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1NWR0VsZW1lbnQ6OnZpZXcK
ICAgICB9IGVsc2UKICAgICAgICAgdmlld0JveFJlY3QgPSB2aWV3Qm94KCk7CiAKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFu
c2Zvcm0odmlld0JveFJlY3QsIHByZXNlcnZlQXNwZWN0UmF0aW8oKSwgdmlld1dpZHRoLCB2aWV3
SGVpZ2h0KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3
Qm94VG9WaWV3VHJhbnNmb3JtKHZpZXdCb3hSZWN0LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCksIHZp
ZXdXaWR0aCwgdmlld0hlaWdodCk7CiAgICAgaWYgKHVzZUN1cnJlbnRWaWV3KCkgJiYgY3VycmVu
dFZpZXcoKSkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRWaWV3KCktPnRyYW5zZm9ybSgpLT5jb25j
YXRlbmF0ZSgpLm1hdHJpeCgpICogY3RtOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCShyZXZpc2lv
biA1NDQ2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDE2ICsxMDcsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMg
U1ZHTGVuZ3RoIGNyZWF0ZVNWR0xlbmd0aCgpOwogICAgICAgICBzdGF0aWMgU1ZHQW5nbGUgY3Jl
YXRlU1ZHQW5nbGUoKTsKICAgICAgICAgc3RhdGljIEZsb2F0UG9pbnQgY3JlYXRlU1ZHUG9pbnQo
KTsKLSAgICAgICAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVNWR01hdHJpeCgp
OworICAgICAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIGNyZWF0ZVNWR01hdHJpeCgpOwogICAg
ICAgICBzdGF0aWMgRmxvYXRSZWN0IGNyZWF0ZVNWR1JlY3QoKTsKICAgICAgICAgc3RhdGljIFNW
R1RyYW5zZm9ybSBjcmVhdGVTVkdUcmFuc2Zvcm0oKTsKLSAgICAgICAgc3RhdGljIFNWR1RyYW5z
Zm9ybSBjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7CisgICAgICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm0gY3JlYXRlU1ZHVHJhbnNmb3JtRnJv
bU1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKICAgICAgICAgLy8gJ3Zp
cnR1YWwgU1ZHTG9jYXRhYmxlJyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBnZXRDVE0oKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBnZXRTY3JlZW5DVE0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFu
c2Zvcm0gZ2V0Q1RNKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdl
dFNjcmVlbkNUTSgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVl
ZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChzdHlsZSk7IH0KICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9u
aXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2
aWV3SGVpZ2h0KSBjb25zdDsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hUb1ZpZXdU
cmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdDsKIAogICAg
ICAgICB2b2lkIGluaGVyaXRWaWV3QXR0cmlidXRlcyhTVkdWaWV3RWxlbWVudCopOwogCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gNTQ0
NjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZH
U3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTUsMTIgKzU1LDEyIEBAIEZsb2F0UmVjdCBTVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXQKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXRC
Qm94KHRoaXMpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpnZXRDVE0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Z2V0
Q1RNKHRoaXMpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpnZXRTY3JlZW5DVE0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxlZExv
Y2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNWR0xv
Y2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQuaAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0
Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0
QkJveCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldENU
TSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFNjcmVl
bkNUTSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKCkgY29u
c3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gNTQ0NjQpCisr
KyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDEzICsyMywxMyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJSZW5kZXJQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDQsMjUgKzQ0LDI1IEBAIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojp+U1ZHU3R5
bGUKIHsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OmdldENUTSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFi
bGU6OmdldENUTSh0aGlzKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0g
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmdldFNjcmVlbkNUTSh0aGlzKTsKIH0KIAotVHJh
bnNmb3JtYXRpb25NYXRyaXggU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9zdXBwbGVtZW50YWxUcmFuc2Zvcm0gPyB0cmFuc2Zvcm0oKS0+Y29uY2F0ZW5hdGUoKS5t
YXRyaXgoKSAqICptX3N1cHBsZW1lbnRhbFRyYW5zZm9ybSA6IHRyYW5zZm9ybSgpLT5jb25jYXRl
bmF0ZSgpLm1hdHJpeCgpOwogfQogICAgIAotVHJhbnNmb3JtYXRpb25NYXRyaXgqIFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdXBwbGVtZW50YWxUcmFuc2Zvcm0oKQorQWZmaW5lVHJh
bnNmb3JtKiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3VwcGxlbWVudGFsVHJhbnNm
b3JtKCkKIHsKICAgICBpZiAoIW1fc3VwcGxlbWVudGFsVHJhbnNmb3JtKQotICAgICAgICBtX3N1
cHBsZW1lbnRhbFRyYW5zZm9ybS5zZXQobmV3IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworICAg
ICAgICBtX3N1cHBsZW1lbnRhbFRyYW5zZm9ybS5zZXQobmV3IEFmZmluZVRyYW5zZm9ybSgpKTsK
ICAgICByZXR1cm4gbV9zdXBwbGVtZW50YWxUcmFuc2Zvcm0uZ2V0KCk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAkocmV2aXNpb24gNTQ0
NjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw0MiArMjgsNDIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAK
LSAgICBjbGFzcyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCA6IHB1YmxpYyBTVkdTdHls
ZWRMb2NhdGFibGVFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1RyYW5zZm9ybWFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7Ci0gICAgICAgIHZpcnR1YWwgflNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KCk7Ci0g
ICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRy
aXggZ2V0Q1RNKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Z2V0U2NyZWVuQ1RNKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVz
dFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZh
cnRoZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFs
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKLSAg
ICAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogc3VwcGxlbWVudGFsVHJhbnNmb3Jt
KCk7Ci0KLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveCgpIGNvbnN0OwotCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwotICAgICAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwotCi0gICAgICAgIC8vICJiYXNlIGNsYXNzIiBtZXRob2RzIGZvciBhbGwgdGhlIGVsZW1l
bnRzIHdoaWNoIHJlbmRlciBhcyBwYXRocwotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIFBhdGgoKTsgfQotICAgICAgICB2aXJ0dWFsIFBhdGggdG9DbGlw
UGF0aCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVy
ZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICBERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRZKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LCBTVkdOYW1lczo6dHJhbnNmb3JtQXR0ciwgU1ZHVHJhbnNmb3JtTGlzdCosIFRyYW5zZm9ybSwg
dHJhbnNmb3JtKQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gVXNlZCBieSA8YW5pbWF0ZU1v
dGlvbj4KLSAgICAgICAgT3duUHRyPFRyYW5zZm9ybWF0aW9uTWF0cml4PiBtX3N1cHBsZW1lbnRh
bFRyYW5zZm9ybTsKLSAgICB9OworY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQg
OiBwdWJsaWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1RyYW5zZm9ybWFibGUgeworcHVibGljOgorICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOworICAgIHZpcnR1YWwgflNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KCk7Cisg
ICAgCisgICAgdmlydHVhbCBib29sIGlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0
OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTSgpIGNvbnN0OworICAg
IHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OworICAg
IHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKKyAg
ICAKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0qIHN1cHBsZW1lbnRhbFRyYW5zZm9y
bSgpOworCisgICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveCgpIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAg
ICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCisgICAgLy8g
ImJhc2UgY2xhc3MiIG1ldGhvZHMgZm9yIGFsbCB0aGUgZWxlbWVudHMgd2hpY2ggcmVuZGVyIGFz
IHBhdGhzCisgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdCB7IHJldHVybiBQYXRo
KCk7IH0KKyAgICB2aXJ0dWFsIFBhdGggdG9DbGlwUGF0aCgpIGNvbnN0OworICAgIHZpcnR1YWwg
UmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7
CisKK3Byb3RlY3RlZDoKKyAgICBERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRZKFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50LCBTVkdOYW1lczo6dHJhbnNmb3JtQXR0ciwgU1ZHVHJhbnNmb3Jt
TGlzdCosIFRyYW5zZm9ybSwgdHJhbnNmb3JtKQorCitwcml2YXRlOgorICAgIC8vIFVzZWQgYnkg
PGFuaW1hdGVNb3Rpb24+CisgICAgT3duUHRyPEFmZmluZVRyYW5zZm9ybT4gbV9zdXBwbGVtZW50
YWxUcmFuc2Zvcm07Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyAr
MTI0LDcgQEAgc3RydWN0IFNWR0lubGluZVRleHRCb3hRdWVyeVdhbGtlciB7CiAgICAgewogICAg
IH0KIAotICAgIHZvaWQgY2h1bmtQb3J0aW9uQ2FsbGJhY2soU1ZHSW5saW5lVGV4dEJveCogdGV4
dEJveCwgaW50IHN0YXJ0T2Zmc2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsCisgICAg
dm9pZCBjaHVua1BvcnRpb25DYWxsYmFjayhTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQg
c3RhcnRPZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBzdGFydCwgY29uc3Qg
VmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgZW5kKQogICAgIHsKICAgICAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnN0eWxlKCk7CkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
VGV4dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1RleHRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2lmIEVOQUJMRShT
VkcpCiAjaW5jbHVkZSAiU1ZHVGV4dEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKQEAgLTMwLDcgKzMxLDYgQEAKICNpbmNs
dWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1RTcGFuRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTcyLDI1ICs3MiwyNSBAQCBGbG9hdFJl
Y3QgU1ZHVGV4dEVsZW1lbnQ6OmdldEJCb3goKSBjb25zCiAgICAgcmV0dXJuIFNWR1RyYW5zZm9y
bWFibGU6OmdldEJCb3godGhpcyk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1RleHRF
bGVtZW50OjpnZXRTY3JlZW5DVE0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1RleHRFbGVt
ZW50OjpnZXRTY3JlZW5DVE0oKSBjb25zdAogewogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxl
OjpnZXRTY3JlZW5DVE0odGhpcyk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1RleHRF
bGVtZW50OjpnZXRDVE0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1RleHRFbGVtZW50Ojpn
ZXRDVE0oKSBjb25zdAogewogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRDVE0odGhp
cyk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1RleHRFbGVtZW50OjphbmltYXRlZExv
Y2FsVHJhbnNmb3JtKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6YW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3VwcGxlbWVudGFs
VHJhbnNmb3JtID8gdHJhbnNmb3JtKCktPmNvbmNhdGVuYXRlKCkubWF0cml4KCkgKiAqbV9zdXBw
bGVtZW50YWxUcmFuc2Zvcm0gOiB0cmFuc2Zvcm0oKS0+Y29uY2F0ZW5hdGUoKS5tYXRyaXgoKTsK
IH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXgqIFNWR1RleHRFbGVtZW50OjpzdXBwbGVtZW50YWxU
cmFuc2Zvcm0oKQorQWZmaW5lVHJhbnNmb3JtKiBTVkdUZXh0RWxlbWVudDo6c3VwcGxlbWVudGFs
VHJhbnNmb3JtKCkKIHsKICAgICBpZiAoIW1fc3VwcGxlbWVudGFsVHJhbnNmb3JtKQotICAgICAg
ICBtX3N1cHBsZW1lbnRhbFRyYW5zZm9ybS5zZXQobmV3IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkp
OworICAgICAgICBtX3N1cHBsZW1lbnRhbFRyYW5zZm9ybS5zZXQobmV3IEFmZmluZVRyYW5zZm9y
bSgpKTsKICAgICByZXR1cm4gbV9zdXBwbGVtZW50YWxUcmFuc2Zvcm0uZ2V0KCk7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHVGV4dEVsZW1lbnQuaAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdU
ZXh0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3BvcnRF
bGVtZW50KCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveCgpIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldENUTSgpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFNjcmVlbkNUTSgpIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFuaW1hdGVkTG9jYWxU
cmFuc2Zvcm0oKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCog
c3VwcGxlbWVudGFsVHJhbnNmb3JtKCk7CisgICAgICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3Jt
IGdldENUTSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRTY3Jl
ZW5DVE0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRM
b2NhbFRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSog
c3VwcGxlbWVudGFsVHJhbnNmb3JtKCk7CiAKICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICAgICAgdmly
dHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0OwpAQCAtNTUs
NyArNTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURf
UFJPUEVSVFkoU1ZHVGV4dEVsZW1lbnQsIFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCBTVkdUcmFu
c2Zvcm1MaXN0KiwgVHJhbnNmb3JtLCB0cmFuc2Zvcm0pCiAgICAgICAgCiAgICAgICAgLy8gVXNl
ZCBieSA8YW5pbWF0ZU1vdGlvbj4KLSAgICAgICBPd25QdHI8VHJhbnNmb3JtYXRpb25NYXRyaXg+
IG1fc3VwcGxlbWVudGFsVHJhbnNmb3JtOworICAgICAgIE93blB0cjxBZmZpbmVUcmFuc2Zvcm0+
IG1fc3VwcGxlbWVudGFsVHJhbnNmb3JtOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gNTQ0NjQpCisr
KyBXZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw2ICsyMiw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdUZXh0UGF0aEVsZW1l
bnQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Rl
eHRQYXRoLmgiCkBAIC0yOSw3ICszMCw2IEBACiAjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3Qu
aCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsMTEgQEAg
U1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtVAogICAgIDogbV90eXBlKHR5
cGUpCiAgICAgLCBtX2FuZ2xlKDApCiAgICAgLCBtX2NlbnRlcihGbG9hdFBvaW50KCkpCi0gICAg
LCBtX21hdHJpeChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKQorICAgICwgbV9tYXRyaXgoQWZmaW5l
VHJhbnNmb3JtKCkpCiB7CiB9CiAKLVNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCitTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKICAgICA6IG1fdHlwZShTVkdfVFJBTlNGT1JN
X01BVFJJWCkKICAgICAsIG1fYW5nbGUoMCkKICAgICAsIG1fbWF0cml4KG1hdHJpeCkKQEAgLTY2
LDcgKzY2LDcgQEAgU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlIFNWR1RyYW5zZgogICAg
IHJldHVybiBtX3R5cGU7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1RyYW5zZm9ybTo6
bWF0cml4KCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdUcmFuc2Zvcm06Om1hdHJpeCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fbWF0cml4OwogfQpAQCAtODEsNyArODEsNyBAQCBGbG9hdFBv
aW50IFNWR1RyYW5zZm9ybTo6cm90YXRpb25DZW50ZXIoCiAgICAgcmV0dXJuIG1fY2VudGVyOwog
fQogCi12b2lkIFNWR1RyYW5zZm9ybTo6c2V0TWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeCkgLy9jb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQordm9pZCBTVkdUcmFu
c2Zvcm06OnNldE1hdHJpeChBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KQogewogICAgIG1fdHlwZSA9
IFNWR19UUkFOU0ZPUk1fTUFUUklYOwogICAgIG1fYW5nbGUgPSAwOwpAQCAtMTQ5LDYgKzE0OSw1
IEBAIHZvaWQgU1ZHVHJhbnNmb3JtOjpzZXRTa2V3WShmbG9hdCBhbmdsZSkKICAgICBtX21hdHJp
eC5za2V3WShhbmdsZSk7CiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBFTkFCTEUo
U1ZHKQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2
Zy9TVkdUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2RlZmlu
ZSBTVkdUcmFuc2Zvcm1faAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCkBAIC00NCwxNyArNDQsMTcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogIAogICAgICAgICBTVkdUcmFuc2Zvcm0oKTsKICAgICAgICAg
U1ZHVHJhbnNmb3JtKFNWR1RyYW5zZm9ybVR5cGUpOwotICAgICAgICBleHBsaWNpdCBTVkdUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICAgICAgZXhwbGljaXQgU1ZH
VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogICAgICAgICB2aXJ0dWFsIH5TVkdU
cmFuc2Zvcm0oKTsKICAgICAgICAgICAgICAgIAogICAgICAgICBTVkdUcmFuc2Zvcm1UeXBlIHR5
cGUoKSBjb25zdDsKIAotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoKSBjb25z
dDsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCgpIGNvbnN0OwogICAgIAogICAgICAg
ICBmbG9hdCBhbmdsZSgpIGNvbnN0OwogICAgICAgICBGbG9hdFBvaW50IHJvdGF0aW9uQ2VudGVy
KCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRNYXRyaXgoVHJhbnNmb3JtYXRpb25NYXRyaXgp
OworICAgICAgICB2b2lkIHNldE1hdHJpeChBZmZpbmVUcmFuc2Zvcm0pOwogCiAgICAgICAgIHZv
aWQgc2V0VHJhbnNsYXRlKGZsb2F0IHR4LCBmbG9hdCB0eSk7CiAgICAgICAgIHZvaWQgc2V0U2Nh
bGUoZmxvYXQgc3gsIGZsb2F0IHN5KTsKQEAgLTcyLDcgKzcyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKICAgICAgICAgZmxvYXQgbV9h
bmdsZTsKICAgICAgICAgRmxvYXRQb2ludCBtX2NlbnRlcjsKLSAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9tYXRyaXg7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX21hdHJpeDsKICAg
ICB9OwogCiAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTVkdUcmFuc2Zvcm0mIGEs
IGNvbnN0IFNWR1RyYW5zZm9ybSYgYikKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybURp
c3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5j
ZS5jcHAJKHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIFNWR1RyYW5zZm9ybURpc3Rh
bmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW4KIHsKIH0KIAotU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OlNW
R1RyYW5zZm9ybURpc3RhbmNlKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBm
bG9hdCBhbmdsZSwgZmxvYXQgY3gsIGZsb2F0IGN5LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKQorU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OlNWR1RyYW5zZm9ybURpc3RhbmNl
KFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBmbG9hdCBhbmdsZSwgZmxvYXQg
Y3gsIGZsb2F0IGN5LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICA6IG1f
dHlwZSh0eXBlKQogICAgICwgbV9hbmdsZShhbmdsZSkKICAgICAsIG1fY3goY3gpCkBAIC05Nywy
MCArOTcsMjAgQEAgU1ZHVHJhbnNmb3JtRGlzdGFuY2UgU1ZHVHJhbnNmb3JtRGlzdGFuYwogICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV046CiAgICAgICAgIHJldHVy
biBTVkdUcmFuc2Zvcm1EaXN0YW5jZSgpOwogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJB
TlNGT1JNX1JPVEFURToKLSAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fdHlw
ZSwgbV9hbmdsZSAqIHNjYWxlRmFjdG9yLCBtX2N4ICogc2NhbGVGYWN0b3IsIG1fY3kgKiBzY2Fs
ZUZhY3RvciwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisgICAgICAgIHJldHVybiBTVkdUcmFu
c2Zvcm1EaXN0YW5jZShtX3R5cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgbV9jeCAqIHNjYWxl
RmFjdG9yLCBtX2N5ICogc2NhbGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICBjYXNl
IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKICAgICBjYXNlIFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6Ci0gICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0
YW5jZShtX3R5cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgbV9jeCAqIHNjYWxlRmFjdG9yLCBt
X2N5ICogc2NhbGVGYWN0b3IsIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fdHJhbnNmb3JtKS5zY2Fs
ZShzY2FsZUZhY3RvcikpOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV90
eXBlLCBtX2FuZ2xlICogc2NhbGVGYWN0b3IsIG1fY3ggKiBzY2FsZUZhY3RvciwgbV9jeSAqIHNj
YWxlRmFjdG9yLCBBZmZpbmVUcmFuc2Zvcm0obV90cmFuc2Zvcm0pLnNjYWxlKHNjYWxlRmFjdG9y
KSk7CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOgogICAg
IHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbmV3VHJhbnNmb3JtKG1fdHJhbnNmb3Jt
KTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybShtX3RyYW5zZm9ybSk7CiAg
ICAgICAgIG5ld1RyYW5zZm9ybS5zZXRFKG1fdHJhbnNmb3JtLmUoKSAqIHNjYWxlRmFjdG9yKTsK
ICAgICAgICAgbmV3VHJhbnNmb3JtLnNldEYobV90cmFuc2Zvcm0uZigpICogc2NhbGVGYWN0b3Ip
OwogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV90eXBlLCAwLCAwLCAwLCBu
ZXdUcmFuc2Zvcm0pOwogICAgIH0KICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9TS0VXWDoKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWToKLSAg
ICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fdHlwZSwgbV9hbmdsZSAqIHNjYWxl
RmFjdG9yLCBtX2N4ICogc2NhbGVGYWN0b3IsIG1fY3kgKiBzY2FsZUZhY3RvciwgVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSk7CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0YW5jZShtX3R5
cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgbV9jeCAqIHNjYWxlRmFjdG9yLCBtX2N5ICogc2Nh
bGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yNTEsNyArMjUxLDcgQEAgU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9y
bURpc3RhbmNlOjphZGRUbwogCiBib29sIFNWR1RyYW5zZm9ybURpc3RhbmNlOjppc1plcm8oKSBj
b25zdAogewotICAgIHJldHVybiAobV90cmFuc2Zvcm0gPT0gVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSAmJiBtX2FuZ2xlID09IDApOworICAgIHJldHVybiAobV90cmFuc2Zvcm0gPT0gQWZmaW5lVHJh
bnNmb3JtKCkgJiYgbV9hbmdsZSA9PSAwKTsKIH0KIAogZmxvYXQgU1ZHVHJhbnNmb3JtRGlzdGFu
Y2U6OmRpc3RhbmNlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybURpc3Rh
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaAko
cmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywzMSArMjcsMzEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIAotICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwotICAgICAgICAKLSAgICBjbGFz
cyBTVkdUcmFuc2Zvcm1EaXN0YW5jZSB7Ci0gICAgcHVibGljOgotICAgICAgICBTVkdUcmFuc2Zv
cm1EaXN0YW5jZSgpOwotICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZShjb25zdCBTVkdUcmFu
c2Zvcm0mIGZyb21UcmFuc2Zvcm0sIGNvbnN0IFNWR1RyYW5zZm9ybSYgdG9UcmFuc2Zvcm0pOwot
ICAgICAgICAKLSAgICAgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2Ugc2NhbGVkRGlzdGFuY2UoZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgICAgICBTVkdUcmFuc2Zvcm0gYWRkVG9TVkdUcmFu
c2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgYWRkU1ZHVHJh
bnNmb3JtKGNvbnN0IFNWR1RyYW5zZm9ybSYsIGJvb2wgYWJzb2x1dGVWYWx1ZSA9IGZhbHNlKTsK
LSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm0gYWRkU1ZHVHJhbnNmb3Jtcyhj
b25zdCBTVkdUcmFuc2Zvcm0mLCBjb25zdCBTVkdUcmFuc2Zvcm0mKTsKLSAgICAgICAgCi0gICAg
ICAgIGJvb2wgaXNaZXJvKCkgY29uc3Q7CitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CisgICAgCitj
bGFzcyBTVkdUcmFuc2Zvcm1EaXN0YW5jZSB7CitwdWJsaWM6CisgICAgU1ZHVHJhbnNmb3JtRGlz
dGFuY2UoKTsKKyAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZShjb25zdCBTVkdUcmFuc2Zvcm0mIGZy
b21UcmFuc2Zvcm0sIGNvbnN0IFNWR1RyYW5zZm9ybSYgdG9UcmFuc2Zvcm0pOworICAgIAorICAg
IFNWR1RyYW5zZm9ybURpc3RhbmNlIHNjYWxlZERpc3RhbmNlKGZsb2F0IHNjYWxlRmFjdG9yKSBj
b25zdDsKKyAgICBTVkdUcmFuc2Zvcm0gYWRkVG9TVkdUcmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNm
b3JtJikgY29uc3Q7CisgICAgdm9pZCBhZGRTVkdUcmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3Jt
JiwgYm9vbCBhYnNvbHV0ZVZhbHVlID0gZmFsc2UpOworICAgIAorICAgIHN0YXRpYyBTVkdUcmFu
c2Zvcm0gYWRkU1ZHVHJhbnNmb3Jtcyhjb25zdCBTVkdUcmFuc2Zvcm0mLCBjb25zdCBTVkdUcmFu
c2Zvcm0mKTsKKyAgICAKKyAgICBib29sIGlzWmVybygpIGNvbnN0OworICAgIAorICAgIGZsb2F0
IGRpc3RhbmNlKCkgY29uc3Q7Citwcml2YXRlOgorICAgIFNWR1RyYW5zZm9ybURpc3RhbmNlKFNW
R1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSwgZmxvYXQgYW5nbGUsIGZsb2F0IGN4LCBmbG9h
dCBjeSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgICAgIAotICAgICAgICBmbG9hdCBk
aXN0YW5jZSgpIGNvbnN0OwotICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR1RyYW5zZm9ybURpc3Rh
bmNlKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSwgZmxvYXQgYW5nbGUsIGZsb2F0IGN4
LCBmbG9hdCBjeSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICAgICAgICAgIAot
ICAgICAgICBTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOwotICAgICAgICBm
bG9hdCBtX2FuZ2xlOwotICAgICAgICBmbG9hdCBtX2N4OwotICAgICAgICBmbG9hdCBtX2N5Owot
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsgLy8gZm9yIHN0b3Jpbmcg
c2NhbGUsIHRyYW5zbGF0aW9uIG9yIG1hdHJpeCB0cmFuc2Zvcm1zCi0gICAgfTsKKyAgICBTVkdU
cmFuc2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOworICAgIGZsb2F0IG1fYW5nbGU7Cisg
ICAgZmxvYXQgbV9jeDsKKyAgICBmbG9hdCBtX2N5OworICAgIEFmZmluZVRyYW5zZm9ybSBtX3Ry
YW5zZm9ybTsgLy8gZm9yIHN0b3Jpbmcgc2NhbGUsIHRyYW5zbGF0aW9uIG9yIG1hdHJpeCB0cmFu
c2Zvcm1zCit9OwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RyYW5z
Zm9ybUxpc3QuY3BwCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9y
bUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsMTIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJTVkdTVkdFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1RyYW5z
Zm9ybS5oIgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogU1ZHVHJhbnNmb3JtTGlzdDo6
U1ZHVHJhbnNmb3JtTGlzdChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQpAQCAt
MzcsNyArMzgsNyBAQCBTVkdUcmFuc2Zvcm1MaXN0Ojp+U1ZHVHJhbnNmb3JtTGlzdCgpCiB7CiB9
CiAKLVNWR1RyYW5zZm9ybSBTVkdUcmFuc2Zvcm1MaXN0OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9t
TWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIGNvbnN0CitTVkdUcmFu
c2Zvcm0gU1ZHVHJhbnNmb3JtTGlzdDo6Y3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkgY29uc3QKIHsKICAgICByZXR1cm4gU1ZHU1ZHRWxl
bWVudDo6Y3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChtYXRyaXgpOwogfQpAQCAtNTQsNyAr
NTUsNyBAQCBTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtTGlzdDo6Y29uY2F0ZW5hCiAgICAgaWYg
KCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKICAgICAgICAgCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgbWF0cml4ID0gZ2V0SXRlbShpLCBlYykubWF0cml4
KCkgKiBtYXRyaXg7CkBAIC02Nyw3ICs2OCw3IEBAIFN0cmluZyBTVkdUcmFuc2Zvcm1MaXN0Ojp2
YWx1ZUFzU3RyaW5nKCkKICAgICAvLyBUT0RPOiBXZSBtYXkgd2FudCB0byBidWlsZCBhIHJlYWwg
dHJhbnNmb3JtIHN0cmluZywgaW5zdGVhZCBvZiBjb25jYXR0aW5nIHRvIGEgbWF0cml4KC4uLiku
CiAgICAgU1ZHVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGNvbmNhdGVuYXRlKCk7CiAgICAgaWYgKHRy
YW5zZm9ybS50eXBlKCkgPT0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWCkgewot
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSB0cmFuc2Zvcm0ubWF0cml4KCk7
CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXggPSB0cmFuc2Zvcm0ubWF0cml4KCk7CiAg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgibWF0cml4KCVmICVmICVmICVmICVmICVmKSIs
IG1hdHJpeC5hKCksIG1hdHJpeC5iKCksIG1hdHJpeC5jKCksIG1hdHJpeC5kKCksIG1hdHJpeC5l
KCksIG1hdHJpeC5mKCkpOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3Jt
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkocmV2
aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0cmlidXRlTmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1RyYW5zZm9ybUxpc3Qo
YXR0cmlidXRlTmFtZSkpOyB9CiAgICAgICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybUxpc3QoKTsK
IAotICAgICAgICBTVkdUcmFuc2Zvcm0gY3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OworICAgICAgICBTVkdUcmFuc2Zvcm0gY3Jl
YXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsK
ICAgICAgICAgU1ZHVHJhbnNmb3JtIGNvbnNvbGlkYXRlKCk7CiAKICAgICAgICAgLy8gSW50ZXJu
YWwgdXNlIG9ubHkKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCShyZXZpc2lvbiA1NDQ2
NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1h
YmxlLmgiCiAKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCkBAIC00MywxNSAr
NDMsMTUgQEAgU1ZHVHJhbnNmb3JtYWJsZTo6flNWR1RyYW5zZm9ybWFibGUoKQogewogfQogCi1U
cmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRDVE0oY29uc3QgU1ZHRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdUcmFuc2Zvcm1hYmxlOjpn
ZXRDVE0oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjdG0gPSBTVkdMb2NhdGFibGU6OmdldENUTShlbGVtZW50KTsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gY3RtID0gU1ZHTG9jYXRhYmxlOjpnZXRDVE0oZWxlbWVudCk7CiAgICAgcmV0
dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSAqIGN0bTsKIH0KIAotVHJhbnNmb3JtYXRpb25N
YXRyaXggU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0U2NyZWVuQ1RNKGNvbnN0IFNWR0VsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0U2NyZWVu
Q1RNKGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggY3RtID0gU1ZHTG9jYXRhYmxlOjpnZXRTY3JlZW5DVE0oZWxlbWVudCk7CisgICAg
QWZmaW5lVHJhbnNmb3JtIGN0bSA9IFNWR0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKGVsZW1lbnQp
OwogICAgIHJldHVybiBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgKiBjdG07CiB9CiAKQEAgLTE0
Nyw3ICsxNDcsNyBAQCBib29sIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsCiAg
ICAgICAgICAgICAgICAgICB0LnNldFJvdGF0ZSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVz
WzJdKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZH
X1RSQU5TRk9STV9NQVRSSVg6Ci0gICAgICAgICAgICB0LnNldE1hdHJpeChUcmFuc2Zvcm1hdGlv
bk1hdHJpeCh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10sIHZhbHVl
c1s0XSwgdmFsdWVzWzVdKSk7CisgICAgICAgICAgICB0LnNldE1hdHJpeChBZmZpbmVUcmFuc2Zv
cm0odmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdLCB2YWx1ZXNbNF0s
IHZhbHVlc1s1XSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtYWJsZS5oCShyZXZpc2lvbiA1NDQ2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9y
bWFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzMgKzI4LDMzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKLSAgICBjbGFz
cyBBdG9taWNTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHVHJhbnNmb3JtOwotICAgIGNsYXNzIFF1YWxp
ZmllZE5hbWU7Ci0KLSAgICBjbGFzcyBTVkdUcmFuc2Zvcm1hYmxlIDogdmlydHVhbCBwdWJsaWMg
U1ZHTG9jYXRhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNWR1RyYW5zZm9ybWFibGUoKTsK
LSAgICAgICAgdmlydHVhbCB+U1ZHVHJhbnNmb3JtYWJsZSgpOwotCi0gICAgICAgIGVudW0gVHJh
bnNmb3JtUGFyc2luZ01vZGUgewotICAgICAgICAgICAgQ2xlYXJMaXN0LAotICAgICAgICAgICAg
RG9Ob3RDbGVhckxpc3QKLSAgICAgICAgfTsKLQotICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZVRy
YW5zZm9ybUF0dHJpYnV0ZShTVkdUcmFuc2Zvcm1MaXN0KiwgY29uc3QgQXRvbWljU3RyaW5nJiB0
cmFuc2Zvcm0pOwotICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShT
VkdUcmFuc2Zvcm1MaXN0KiwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFRy
YW5zZm9ybVBhcnNpbmdNb2RlIG1vZGUgPSBDbGVhckxpc3QpOwotICAgICAgICBzdGF0aWMgYm9v
bCBwYXJzZVRyYW5zZm9ybVZhbHVlKHVuc2lnbmVkIHR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBj
b25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm0mKTsKLSAgICAgICAgCi0gICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGdldENUTShjb25zdCBTVkdFbGVtZW50KikgY29uc3Q7Ci0gICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFNjcmVlbkNUTShjb25zdCBTVkdFbGVtZW50KikgY29u
c3Q7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFuaW1h
dGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdCA9IDA7Ci0KLSAgICAgICAgYm9vbCBpc0tub3duQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2Ns
YXNzIEF0b21pY1N0cmluZzsKK2NsYXNzIFNWR1RyYW5zZm9ybTsKK2NsYXNzIFF1YWxpZmllZE5h
bWU7CisKK2NsYXNzIFNWR1RyYW5zZm9ybWFibGUgOiB2aXJ0dWFsIHB1YmxpYyBTVkdMb2NhdGFi
bGUgeworcHVibGljOgorICAgIFNWR1RyYW5zZm9ybWFibGUoKTsKKyAgICB2aXJ0dWFsIH5TVkdU
cmFuc2Zvcm1hYmxlKCk7CisKKyAgICBlbnVtIFRyYW5zZm9ybVBhcnNpbmdNb2RlIHsKKyAgICAg
ICAgQ2xlYXJMaXN0LAorICAgICAgICBEb05vdENsZWFyTGlzdAogICAgIH07CiAKKyAgICBzdGF0
aWMgYm9vbCBwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShTVkdUcmFuc2Zvcm1MaXN0KiwgY29uc3Qg
QXRvbWljU3RyaW5nJiB0cmFuc2Zvcm0pOworICAgIHN0YXRpYyBib29sIHBhcnNlVHJhbnNmb3Jt
QXR0cmlidXRlKFNWR1RyYW5zZm9ybUxpc3QqLCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgVHJhbnNmb3JtUGFyc2luZ01vZGUgbW9kZSA9IENsZWFyTGlzdCk7CisgICAgc3Rh
dGljIGJvb2wgcGFyc2VUcmFuc2Zvcm1WYWx1ZSh1bnNpZ25lZCB0eXBlLCBjb25zdCBVQ2hhciom
IHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtJik7CisgICAgCisgICAgQWZmaW5l
VHJhbnNmb3JtIGdldENUTShjb25zdCBTVkdFbGVtZW50KikgY29uc3Q7CisgICAgQWZmaW5lVHJh
bnNmb3JtIGdldFNjcmVlbkNUTShjb25zdCBTVkdFbGVtZW50KikgY29uc3Q7CisgICAgCisgICAg
dmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0g
MDsKKworICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7Cit9
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJ
KHJldmlzaW9uIDU0NDY0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMiArMTA2LDEyIEBAIHZvaWQgU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0Qm91bmRpbmcKICAgICBtX2JvdW5kaW5nQm94TW9kZSA9
IG1vZGU7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1BhaW50U2VydmVyR3JhZGllbnQ6
OmdyYWRpZW50VHJhbnNmb3JtKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdQYWludFNlcnZl
ckdyYWRpZW50OjpncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZ3Jh
ZGllbnRUcmFuc2Zvcm07CiB9CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3Jh
ZGllbnRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3Zv
aWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRUcmFuc2Zvcm0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgbV9ncmFkaWVudFRyYW5zZm9ybSA9IHRy
YW5zZm9ybTsKIH0KQEAgLTE1NiwxNCArMTU2LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjcmVh
dGVNYXNrQW5kU3dhcENvbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjbGlwVG9UZXh0TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsCitzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0TWFzayhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIs
IGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LAogICAgIGNvbnN0IFNWR1BhaW50U2VydmVyR3Jh
ZGllbnQqIGdyYWRpZW50U2VydmVyKQogewogICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0
X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5vYmplY3RC
b3VuZGluZ0JveCgpOwogCiAgICAgLy8gRml4dXAgdHJhbnNmb3JtYXRpb25zIHRvIGJlIGFibGUg
dG8gY2xpcCB0byBtYXNrCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gb2Jq
ZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCk7CiAgICAgRmxvYXRSZWN0IHRleHRCb3VuZGFy
eSA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tCQm94KTsKIAogICAgIEludFNpemUgbWFza1NpemUo
bHJvdW5kZih0ZXh0Qm91bmRhcnkud2lkdGgoKSksIGxyb3VuZGYodGV4dEJvdW5kYXJ5LmhlaWdo
dCgpKSk7CkBAIC0xNzUsNyArMTc1LDcgQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjbGlwVAogICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRleHRCb3VuZGFyeSwg
aW1hZ2VCdWZmZXIuZ2V0KCkpOwogICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwog
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIEFmZmluZVRyYW5zZm9ybSBt
YXRyaXg7CiAgICAgaWYgKGdyYWRpZW50U2VydmVyLT5ib3VuZGluZ0JveE1vZGUoKSkgewogICAg
ICAgICBtYXRyaXgudHJhbnNsYXRlKG1hc2tCQm94LngoKSwgbWFza0JCb3gueSgpKTsKICAgICAg
ICAgbWF0cml4LnNjYWxlTm9uVW5pZm9ybShtYXNrQkJveC53aWR0aCgpLCBtYXNrQkJveC5oZWln
aHQoKSk7CkBAIC0yMTgsNyArMjE4LDcgQEAgYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojpz
ZXR1cChHcmFwaAogICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIG9i
amVjdC0+c3R5bGUoKSwgb2JqZWN0KTsKICAgICB9CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXg7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKICAgICAvLyBDRyBwbGF0Zm9y
bXMgd2lsbCBoYW5kbGUgdGhlIGdyYWRpZW50IHNwYWNlIHRyYW5zZm9ybSBmb3IgdGV4dCBpbgog
ICAgIC8vIHRlYXJkb3duLCBzbyB3ZSBkb24ndCBhcHBseSBpdCBoZXJlLiAgRm9yIG5vbi1DRyBw
bGF0Zm9ybXMsIHdlCiAgICAgLy8gd2FudCB0aGUgdGV4dCBib3VuZGluZyBib3ggYXBwbGllZCB0
byB0aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3JtIG5vdywKQEAgLTI1NSw3ICsyNTUsNyBAQCB2
b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyCiAgICAgICAgIGNvbnRleHQg
PSBtX3NhdmVkQ29udGV4dDsKICAgICAgICAgbV9zYXZlZENvbnRleHQgPSAwOwogCi0gICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IGNsaXBUb1RleHRNYXNrKGNvbnRleHQsIG1f
aW1hZ2VCdWZmZXIsIG9iamVjdCwgdGhpcyk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRy
aXggPSBjbGlwVG9UZXh0TWFzayhjb250ZXh0LCBtX2ltYWdlQnVmZmVyLCBvYmplY3QsIHRoaXMp
OwogICAgICAgICBtX2dyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKG1hdHJpeCk7
CiAgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChtX2dyYWRpZW50KTsKIApJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAkocmV2aXNp
b24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAK
LSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTU4LDggKzU4LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0OwogICAgICAgICB2b2lk
IHNldEJvdW5kaW5nQm94TW9kZShib29sIG1vZGUgPSB0cnVlKTsKIAotICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNl
dEdyYWRpZW50VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgICAg
IEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICB2b2lk
IHNldEdyYWRpZW50VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCiAgICAgICAg
IHZvaWQgc2V0R3JhZGllbnRTdG9wcyhjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3Rv
cHMpIHsgbV9zdG9wcyA9IHN0b3BzOyB9CiAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVu
dFN0b3A+JiBncmFkaWVudFN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQpAQCAtNzYs
NyArNzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxTVkdHcmFkaWVu
dFN0b3A+IG1fc3RvcHM7CiAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gbV9ncmFkaWVudDsKICAg
ICAgICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZTsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9ncmFkaWVudFRyYW5zZm9ybTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGll
bnRUcmFuc2Zvcm07CiAgICAgICAgIGNvbnN0IFNWR0dyYWRpZW50RWxlbWVudCogbV9vd25lckVs
ZW1lbnQ7CiAKICNpZiBQTEFURk9STShDRykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R1BhaW50U2VydmVyUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQYWludFNlcnZl
clBhdHRlcm4uaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKQEAgLTM2LDcgKzM3LDYgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNs
dWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQu
aCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCkBAIC03MywxMiArNzMsMTIgQEAgdm9pZCBTVkdQYWludFNlcnZlclBhdHRlcm46OnNl
dFRpbGUoUGFzcwogICAgIG1fdGlsZSA9IHRpbGU7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4
IFNWR1BhaW50U2VydmVyUGF0dGVybjo6cGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0CitBZmZpbmVU
cmFuc2Zvcm0gU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3JtOwogfQogCi12b2lkIFNWR1BhaW50U2Vy
dmVyUGF0dGVybjo6c2V0UGF0dGVyblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKQordm9pZCBTVkdQYWludFNlcnZlclBhdHRlcm46OnNldFBhdHRlcm5UcmFu
c2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgbV9wYXR0ZXJu
VHJhbnNmb3JtID0gdHJhbnNmb3JtOwogfQpAQCAtMTUzLDcgKzE1Myw3IEBAIGJvb2wgU1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChHcmFwaGkKICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRv
Q29udGV4dChjb250ZXh0LCBvYmplY3QtPnN0eWxlKCksIG9iamVjdCk7CiAgICAgfQogCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7
CiAgICAgbWF0cml4LnRyYW5zbGF0ZShwYXR0ZXJuQm91bmRhcmllcygpLngoKSwgcGF0dGVybkJv
dW5kYXJpZXMoKS55KCkpOwogICAgIG1hdHJpeC5tdWx0aXBseShwYXR0ZXJuVHJhbnNmb3JtKCkp
OwogICAgIG1fcGF0dGVybi0+c2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKG1hdHJpeCk7CkluZGV4
OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclBhdHRlcm4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclBhdHRlcm4uaAkocmV2aXNp
b24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclBhdHRlcm4u
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFNWRykKIAot
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2lu
Y2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCkBAIC01OSw4ICs1OSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgSW1hZ2VCdWZmZXIqIHRpbGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBz
ZXRUaWxlKFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+KTsKIAotICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0UGF0dGVy
blRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFBhdHRl
cm5UcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAKICAgICAgICAgdmlydHVhbCBU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKIApA
QCAtNzIsNyArNzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IG1fdGlsZTsKICAgICAgICAgY29uc3QgU1ZHUGF0dGVybkVsZW1l
bnQqIG1fb3duZXJFbGVtZW50OwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3BhdHRl
cm5UcmFuc2Zvcm07CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07
CiAgICAgICAgIEZsb2F0UmVjdCBtX3BhdHRlcm5Cb3VuZGFyaWVzOwogCiAgICAgICAgIG11dGFi
bGUgUmVmUHRyPFBhdHRlcm4+IG1fcGF0dGVybjsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5
ICsyOSw5IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdSZXNvdXJjZUNsaXBwZXIu
aCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSA8QXBwbGlj
YXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CkBAIC0xMDEsNyArMTAxLDcgQEAg
dm9pZCBTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcChHcmFwaAogICAgICAgICBQYXRoIGNs
aXBQYXRoID0gY2xpcERhdGEucGF0aDsKIAogICAgICAgICBpZiAoY2xpcERhdGEuYmJveFVuaXRz
KSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwogICAgICAgICAgICAgdHJhbnNmb3JtLnRy
YW5zbGF0ZShib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94LnkoKSk7CiAgICAgICAgICAgICB0
cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kaW5nQm94LndpZHRoKCksIGJvdW5kaW5nQm94
LmhlaWdodCgpKTsKICAgICAgICAgICAgIGNsaXBQYXRoLnRyYW5zZm9ybSh0cmFuc2Zvcm0pOwpJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlTWFya2VyLmNwcAkocmV2aXNp
b24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZU1hcmtlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1
ZGUgIlNWR1Jlc291cmNlTWFya2VyLmgiCiAKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgiCiAjaW5jbHVk
ZSAiVGV4dFN0cmVhbS5oIgpAQCAtNDgsMTggKzQ4LDE4IEBAIFNWR1Jlc291cmNlTWFya2VyOjp+
U1ZHUmVzb3VyY2VNYXJrZXIoKQogewogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdSZXNv
dXJjZU1hcmtlcjo6bWFya2VyVHJhbnNmb3JtYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2lu
LCBmbG9hdCBhbmdsZSwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0g
U1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtlclRyYW5zZm9ybWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IG9yaWdpbiwgZmxvYXQgYW5nbGUsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAgIEFT
U0VSVChtX3JlbmRlcmVyKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUo
b3JpZ2luLngoKSwgb3JpZ2luLnkoKSk7CiAgICAgdHJhbnNmb3JtLnJvdGF0ZShtX2FuZ2xlID09
IC0xID8gYW5nbGUgOiBtX2FuZ2xlKTsKICAgICB0cmFuc2Zvcm0gPSBtX3JlbmRlcmVyLT5tYXJr
ZXJDb250ZW50VHJhbnNmb3JtYXRpb24odHJhbnNmb3JtLCBtX3JlZmVyZW5jZVBvaW50LCBtX3Vz
ZVN0cm9rZVdpZHRoID8gc3Ryb2tlV2lkdGggOiAtMSk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsK
IH0KIAotdm9pZCBTVkdSZXNvdXJjZU1hcmtlcjo6ZHJhdyhSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQordm9p
ZCBTVkdSZXNvdXJjZU1hcmtlcjo6ZHJhdyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKICAgICBpZiAoIW1fcmVu
ZGVyZXIpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jl
c291cmNlTWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVz
b3VyY2VNYXJrZXIuaAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdSZXNvdXJjZU1hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjsK
LSAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyAgICBjbGFzcyBBZmZpbmVUcmFuc2Zv
cm07CiAKICAgICBjbGFzcyBTVkdSZXNvdXJjZU1hcmtlciA6IHB1YmxpYyBTVkdSZXNvdXJjZSB7
CiAgICAgcHVibGljOgpAQCAtNTUsOCArNTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZvaWQgc2V0VXNlU3Ryb2tlV2lkdGgoYm9vbCB1c2VTdHJva2VXaWR0aCA9IHRydWUpIHsg
bV91c2VTdHJva2VXaWR0aCA9IHVzZVN0cm9rZVdpZHRoOyB9CiAgICAgICAgIGJvb2wgdXNlU3Ry
b2tlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3VzZVN0cm9rZVdpZHRoOyB9CiAKLSAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWFya2VyVHJhbnNmb3JtYXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgb3JpZ2luLCBmbG9hdCBhbmdsZSwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwotICAgICAg
ICB2b2lkIGRyYXcoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbWFya2VyVHJhbnNmb3JtYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSwgZmxvYXQgc3Ryb2tlV2lkdGgp
IGNvbnN0OworICAgICAgICB2b2lkIGRyYXcoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKTsKIAogICAgICAgICB2aXJ0dWFsIFNWR1Jlc291cmNlVHlwZSBy
ZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBNYXJrZXJSZXNvdXJjZVR5cGU7IH0KICAgICAg
ICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdl
LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTEgQEAKICNpZiBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJTVkdGRUltYWdlLmgiCiAKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgi
CiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDEwICsyMywxMCBAQAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQogI2lu
Y2x1ZGUgIlNWR0ZFVGlsZS5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
UGF0dGVybi5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03NSw3ICs3
NSw3IEBAIHZvaWQgRkVUaWxlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICB0aWxlSW1hZ2VD
b250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgSW50UG9pbnQoKSk7CiAgICAgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4gPSBQYXR0
ZXJuOjpjcmVhdGUodGlsZUltYWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsKIAotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogICAg
IG1hdHJpeC50cmFuc2xhdGUobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkueCgpIC0gc2NhbGVkU3Vi
UmVnaW9uKCkueCgpLCBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS55KCkgLSBzY2FsZWRTdWJSZWdp
b24oKS55KCkpOwogICAgIHBhdHRlcm4uZ2V0KCktPnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybSht
YXRyaXgpOwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0NDc0KQorKysgV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTAy
LTA3ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGJhY2sgYW4gQWZmaW5lVHJhbnNmb3Jt
IGNsYXNzIGZvciB1c2UgYnkgU1ZHCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMzc1MAorCisgICAgICAgIFVzZSBBZmZpbmVUcmFuc2Zvcm0gaW5zdGVh
ZCBvZiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBoZXJlLgorCisgICAgICAgICogdGVzdHMvVHJhbnNw
YXJlbmN5V2luVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMC0wMi0w
NyAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdp
blRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVu
Y3lXaW5UZXN0LmNwcAkocmV2aXNpb24gNTQ0NjQpCisrKyBXZWJLaXQvY2hyb21pdW0vdGVzdHMv
VHJhbnNwYXJlbmN5V2luVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsyOSwxNCBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc3BhcmVuY3lXaW4u
aCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKLSNpbmNsdWRlICJUcmFuc3BhcmVuY3lXaW4uaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdGF0aWMgRmxvYXRSZWN0IFJFQ1RUb0Zsb2F0UmVjdChjb25zdCBSRUNUKiByZWN0KQpAQCAt
NDE2LDEwICs0MTYsNyBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwgUm90YXRlT3BhcXVlQ29tcG9z
CiAgICAgLy8gYW50aWFsaWFzaW5nIG9yIG90aGVyIHJvdW5kaW5nIHByb2JsZW1zIHNpbmNlIHdl
J3JlIHRlc3RpbmcgZXhhY3QgcGl4ZWwKICAgICAvLyB2YWx1ZXMuCiAgICAgc3JjLT5jb250ZXh0
KCktPnNhdmUoKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdzkwKDAsIDEsIDAsIDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAwLCAxKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3c5MCgwLCAxLCAtMSwgMCwgMCwg
MCk7CiAgICAgc3JjLT5jb250ZXh0KCktPmNvbmNhdENUTShjdzkwKTsKIAogICAgIC8vIE1ha2Ug
YSB0cmFuc3BhcmVuY3kgbGF5ZXIgY29uc2lzdGluZyBvZiBhIGhvcml6b250YWwgbGluZSBvZiA1
MCUgYmxhY2suCkBAIC00OTcsMTYgKzQ5NCwxNiBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwgVHJh
bnNsYXRlU2NhbGVPcGFxCiAgICAgc3JjLT5jb250ZXh0KCktPnNhdmUoKTsKIAogICAgIC8vIFRy
YW5zbGF0ZSBsZWZ0IGJ5IG9uZSBwaXhlbC4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsZWZ0
OworICAgIEFmZmluZVRyYW5zZm9ybSBsZWZ0OwogICAgIGxlZnQudHJhbnNsYXRlKC0xLCAwKTsK
IAogICAgIC8vIFNjYWxlIGJ5IDJ4LgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlOwor
ICAgIEFmZmluZVRyYW5zZm9ybSBzY2FsZTsKICAgICBzY2FsZS5zY2FsZSgyLjApOwogICAgIHNy
Yy0+Y29udGV4dCgpLT5jb25jYXRDVE0oc2NhbGUpOwogCiAgICAgLy8gVGhlbiB0cmFuc2xhdGUg
dXAgYnkgb25lIHBpeGVsICh3aGljaCB3aWxsIGFjdHVhbGx5IGJlIDIgZHVlIHRvIHNjYWxpbmcp
LgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHVwOworICAgIEFmZmluZVRyYW5zZm9ybSB1cDsK
ICAgICB1cC50cmFuc2xhdGUoMCwgLTEpOwogICAgIHNyYy0+Y29udGV4dCgpLT5jb25jYXRDVE0o
dXApOwogCkBAIC01MzgsNyArNTM1LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFNjYWxlKQog
CiAgICAgLy8gU2NhbGUgYnkgMnguCiAgICAgc3JjLT5jb250ZXh0KCktPnNhdmUoKTsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gc2NhbGU7CiAg
ICAgc2NhbGUuc2NhbGUoMi4wKTsKICAgICBzcmMtPmNvbnRleHQoKS0+Y29uY2F0Q1RNKHNjYWxl
KTsKIApAQCAtNTk5LDcgKzU5Niw3IEBAIFRFU1QoVHJhbnNwYXJlbmN5V2luLCBTY2FsZVRyYW5z
cGFyZW5jeSkKIAogICAgIC8vIFNjYWxlIGJ5IDJ4LgogICAgIHNyYy0+Y29udGV4dCgpLT5zYXZl
KCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGU7CisgICAgQWZmaW5lVHJhbnNmb3Jt
IHNjYWxlOwogICAgIHNjYWxlLnNjYWxlKDIuMCk7CiAgICAgc3JjLT5jb250ZXh0KCktPmNvbmNh
dENUTShzY2FsZSk7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0NDc0KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDItMDcgIERp
cmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYmFjayBhbiBBZmZpbmVUcmFuc2Zvcm0gY2xhc3Mg
Zm9yIHVzZSBieSBTVkcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMzNzUwCisKKyAgICAgICAgU29tZSBuZWdhdGl2ZSB6ZXJvIHByb2JsZW1zIGZpeGVk
LCBidXQgbmV3IG9uZSB3ZXJlIGFkZGVkIG9uIG90aGVyIHBsYWNlcy4gQSBzZXBlcmF0ZQorICAg
ICAgICBwYXRjaCBzaG91bGQgZml4IGl0IGFsbCBhdCBvbmNlLgorICAgICAgICB1c2Utb24tZGlz
YWxsb3dlZC1mb3JlaWduLW9iamVjdC0zIGFuZCA0IGhhZCB3cm9uZyByZXN1bHRzLiBUaGUgb2xk
IFNWRyBjb2RlCisgICAgICAgIHdpdGggVHJhbnNmb3JtYXRpb25NYXRyaXggdXNlZCB0cmFuc2xh
dGVSaWdodCwgdGhhdCB3YXMgd3JvbmcgYXQgdGhpcyBwbGFjZSBhbmQgaXMKKyAgICAgICAgZml4
ZWQgbm93LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9hbmltYXRl
LWVsZW0tODAtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0Mt
U1ZHLTEuMS9mb250cy1lbGVtLTAxLXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wMi10LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDMtYi1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVt
LTA0LWItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0x
LjEvZm9udHMtZWxlbS0wNy1iLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
c3ZnL2N1c3RvbS91c2Utb24tZGlzYWxsb3dlZC1mb3JlaWduLW9iamVjdC0zLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS91c2Utb24tZGlzYWxsb3dlZC1m
b3JlaWduLW9iamVjdC00LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdmcvZG9tL1NWR01hdHJp
eC1pbnRlcmZhY2UtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy9kb20vU1ZHTWF0cml4LWlu
dGVyZmFjZS54aHRtbDoKKwogMjAxMC0wMi0wNyAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IFRpZ2VyIGxheW91dCB0ZXN0IGZhaWx1
cmUuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2FuaW1h
dGUtZWxlbS04MC10LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2FuaW1hdGUtZWxlbS04MC10LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gNTQ0NjQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkct
MS4xL2FuaW1hdGUtZWxlbS04MC10LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NyArNjcsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDQ4MHgzNjAKICAgICAgICAgICAgICAgUmVu
ZGVyUGF0aCB7bGluZX0gYXQgKDE1LDIxOS41MCkgc2l6ZSA5MHgxIFtzdHJva2U9e1t0eXBlPVNP
TElEXSBbY29sb3I9I0MwQzBDMF19XSBbZGF0YT0iTS00NS4wMCwwLjAwIEw0NS4wMCwwLjAwIl0K
ICAgICAgICAgICAgICAgUmVuZGVyUGF0aCB7bGluZX0gYXQgKDU5LjUwLDE3NSkgc2l6ZSAxeDkw
IFtzdHJva2U9e1t0eXBlPVNPTElEXSBbY29sb3I9I0MwQzBDMF19XSBbZGF0YT0iTTAuMDAsLTQ1
LjAwIEwwLjAwLDQ1LjAwIl0KICAgICAgICAgUmVuZGVyUGF0aCB7bGluZX0gYXQgKDIwLDE4MCkg
c2l6ZSAweDAgW3N0cm9rZT17W3R5cGU9U09MSURdIFtjb2xvcj0jQzBDMEMwXSBbc3Ryb2tlIHdp
ZHRoPTE1LjAwXSBbbGluZSBjYXA9Uk9VTkRdfV0gW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9
IzAwMDAwMF19XSBbZGF0YT0iIl0KLSAgICAgICAgUmVuZGVyUGF0aCB7bGluZX0gYXQgKDEwMCwx
ODApIHNpemUgMHgwIFt0cmFuc2Zvcm09e209KCgwLjAwLDEuMDApKC0xLjAwLDAuMDApKSB0PSg4
MC4wMCwtMC4wMCl9XSBbc3Ryb2tlPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNDMEMwQzBdIFtzdHJv
a2Ugd2lkdGg9MTUuMDBdIFtsaW5lIGNhcD1ST1VORF19XSBbZmlsbD17W3R5cGU9U09MSURdIFtj
b2xvcj0jMDAwMDAwXX1dIFtkYXRhPSIiXQorICAgICAgICBSZW5kZXJQYXRoIHtsaW5lfSBhdCAo
MTAwLDE4MCkgc2l6ZSAweDAgW3RyYW5zZm9ybT17bT0oKDAuMDAsMS4wMCkoLTEuMDAsMC4wMCkp
IHQ9KDgwLjAwLDAuMDApfV0gW3N0cm9rZT17W3R5cGU9U09MSURdIFtjb2xvcj0jQzBDMEMwXSBb
c3Ryb2tlIHdpZHRoPTE1LjAwXSBbbGluZSBjYXA9Uk9VTkRdfV0gW2ZpbGw9e1t0eXBlPVNPTElE
XSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iIl0KICAgICAgICAgUmVuZGVyUGF0aCB7bGluZX0g
YXQgKDEwMCwyNjApIHNpemUgMHgwIFt0cmFuc2Zvcm09e209KCgtMS4wMCwwLjAwKSgtMC4wMCwt
MS4wMCkpIHQ9KDgwLjAwLDgwLjAwKX1dIFtzdHJva2U9e1t0eXBlPVNPTElEXSBbY29sb3I9I0Mw
QzBDMF0gW3N0cm9rZSB3aWR0aD0xNS4wMF0gW2xpbmUgY2FwPVJPVU5EXX1dIFtmaWxsPXtbdHlw
ZT1TT0xJRF0gW2NvbG9yPSMwMDAwMDBdfV0gW2RhdGE9IiJdCiAgICAgICAgIFJlbmRlclBhdGgg
e2xpbmV9IGF0ICgyMCwyNjApIHNpemUgMHgwIFt0cmFuc2Zvcm09e209KCgtMC4wMCwtMS4wMCko
MS4wMCwtMC4wMCkpIHQ9KDAuMDAsODAuMDApfV0gW3N0cm9rZT17W3R5cGU9U09MSURdIFtjb2xv
cj0jQzBDMEMwXSBbc3Ryb2tlIHdpZHRoPTE1LjAwXSBbbGluZSBjYXA9Uk9VTkRdfV0gW2ZpbGw9
e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iIl0KICAgICAgICAgUmVuZGVy
UGF0aCB7bGluZX0gYXQgKDU1LDIxNSkgc2l6ZSA1MHgxMCBbc3Ryb2tlPXtbdHlwZT1TT0xJRF0g
W2NvbG9yPSNDODUwNTBdIFtzdHJva2Ugd2lkdGg9MTAuMDBdIFtsaW5lIGNhcD1ST1VORF19XSBb
ZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSJNNDAuMDAsNDAuMDAg
TDgwLjAwLDQwLjAwIl0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvVzNDLVNW
Ry0xLjEvZm9udHMtZWxlbS0wMS10LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDEtdC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDU0NDY0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9X
M0MtU1ZHLTEuMS9mb250cy1lbGVtLTAxLXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xMSw3ICsxMSw3IEBAIGxheWVyIGF0ICgwLDApIHNpemUgNDgweDM2MAogICAgICAgICBSZW5k
ZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMzAsMTMwKSBzaXplIDEwNXgyMiBjb250YWlucyAxIGNodW5r
KHMpCiAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCB7I3RleHR9IGF0ICgwLC0xNykgc2l6
ZSAxMDV4MjIKICAgICAgICAgICAgIGNodW5rIDEgdGV4dCBydW4gMSBhdCAoMzAuMDAsMTMwLjAw
KSBzdGFydE9mZnNldCAwIGVuZE9mZnNldCAxMyB3aWR0aCAxMDUuMDA6ICJQbGFjZWQgR2x5cGhz
IgotICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjQuMjcsODEuNDEpIHNpemUg
MjExLjE3eDE2MS4xMyBbdHJhbnNmb3JtPXttPSgoMS4wMCwwLjAwKSgwLjAwLC0xLjAwKSkgdD0o
MTY1LjAwLDE0MC4wMCl9XQorICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjQu
MjcsODEuNDEpIHNpemUgMjExLjE3eDE2MS4xMyBbdHJhbnNmb3JtPXttPSgoMS4wMCwwLjAwKSgt
MC4wMCwtMS4wMCkpIHQ9KDE2NS4wMCwxNDAuMDApfV0KICAgICAgICAgICBSZW5kZXJQYXRoIHts
aW5lfSBhdCAoMTY1LDEzOS41MCkgc2l6ZSAyMTB4MSBbc3Ryb2tlPXtbdHlwZT1TT0xJRF0gW2Nv
bG9yPSM4ODg4ODhdfV0gW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0
YT0iTTAuMDAsMC4wMCBMMjEwLjAwLDAuMDAiXQogICAgICAgICAgIFJlbmRlclNWR0NvbnRhaW5l
ciB7Z30gYXQgKDE2NC4yNyw4MS40MSkgc2l6ZSAyMTEuMTd4MTYxLjEzIFt0cmFuc2Zvcm09e209
KCgwLjAzLDAuMDApKDAuMDAsMC4wMykpIHQ9KDAuMDAsMC4wMCl9XQogICAgICAgICAgICAgUmVu
ZGVyUGF0aCB7bGluZX0gYXQgKDE2NC4yNyw4MS40MSkgc2l6ZSAxLjQ2eDE2MS4xMyBbc3Ryb2tl
PXtbdHlwZT1TT0xJRF0gW2NvbG9yPSM4ODg4ODhdIFtzdHJva2Ugd2lkdGg9NTAuMDBdfV0gW2Zp
bGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTTAuMDAsLTM1MDAuMDAg
TDAuMDAsMjAwMC4wMCJdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1czQy1T
VkctMS4xL2ZvbnRzLWVsZW0tMDItdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTAyLXQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA1NDQ2NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcv
VzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wMi10LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTEsNyArMTEsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDQ4MHgzNjAKICAgICAgIFJlbmRl
clNWR1RleHQge3RleHR9IGF0ICg3LDEzMCkgc2l6ZSAxMzB4MjIgY29udGFpbnMgMSBjaHVuayhz
KQogICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0IHsjdGV4dH0gYXQgKDAsLTE3KSBzaXplIDEz
MHgyMgogICAgICAgICAgIGNodW5rIDEgdGV4dCBydW4gMSBhdCAoNy4wMCwxMzAuMDApIHN0YXJ0
T2Zmc2V0IDAgZW5kT2Zmc2V0IDE1IHdpZHRoIDEzMC4wMDogIlNWRyBvdmVyIEdseXBocyIKLSAg
ICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDE2OC44NCw4NS42Mikgc2l6ZSAyMDMuNDR4
NzEuMzQgW3RyYW5zZm9ybT17bT0oKDEuMDAsMC4wMCkoMC4wMCwtMS4wMCkpIHQ9KDE2NS4wMCwx
NDAuMDApfV0KKyAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDE2OC44NCw4NS42Mikg
c2l6ZSAyMDMuNDR4NzEuMzQgW3RyYW5zZm9ybT17bT0oKDEuMDAsMC4wMCkoLTAuMDAsLTEuMDAp
KSB0PSgxNjUuMDAsMTQwLjAwKX1dCiAgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQg
KDE2OC44NCw4NS42Mikgc2l6ZSAyMDMuNDR4NzEuMzQgW3RyYW5zZm9ybT17bT0oKDAuMDMsMC4w
MCkoMC4wMCwwLjAzKSkgdD0oMC4wMCwwLjAwKX1dCiAgICAgICAgICAgUmVuZGVyUGF0aCB7cGF0
aH0gYXQgKDE2OC44NCw5Ni43MCkgc2l6ZSAzNS43N3g0NC4xOCBbZmlsbD17W3R5cGU9U09MSURd
IFtjb2xvcj0jRkZGRkZGXX1dIFtkYXRhPSJNMTI1MC4wMCwtMzAuMDAgQzExODguNjcsLTMwLjAw
LDExMzUuMzMsNDguNjcsMTA5MC4wMCwyMDYuMDAgQzEwNzIuNjcsMjY2LjAwLDEwNTEuMDAsMzcx
LjAwLDEwMjUuMDAsNTIxLjAwIEM5NTcuMDAsNTExLjY3LDg2OC4wMCw0OTUuMDAsNzU4LjAwLDQ3
MS4wMCBMNDkyLjAwLDQxNi4wMCBDNDU4LjY3LDMyOC42Nyw0MDEuNjcsMjAxLjAwLDMyMS4wMCwz
My4wMCBDMjk5LjY3LC00LjMzLDI3MC42NywtMjMuMDAsMjM0LjAwLC0yMy4wMCBDMjA3LjMzLC0y
My4wMCwxODMuNjcsLTEzLjMzLDE2My4wMCw2LjAwIEMxNDIuMzMsMjUuMzMsMTMxLjY3LDQ5LjMz
LDEzMS4wMCw3OC4wMCBDMTMxLjAwLDExMC4wMCwxODEuMzMsMjMxLjY3LDI4Mi4wMCw0NDMuMDAg
QzI3MC42Nyw0NjAuMzMsMjY1LjAwLDQ4MC4zMywyNjUuMDAsNTAzLjAwIEMyNjUuMDAsNTU3LjAw
LDI5Ny42Nyw1OTEuNjcsMzYzLjAwLDYwNy4wMCBDNDM5LjAwLDc0OS42Nyw1MzUuMDAsOTEzLjY3
LDY1MS4wMCwxMDk5LjAwIEM4MDkuMDAsMTM1MS42Nyw5MDcuMzMsMTQ3OC4wMCw5NDYuMDAsMTQ3
OC4wMCBDOTk4LjY3LDE0NzguMDAsMTAzNC42NywxNDQxLjMzLDEwNTQuMDAsMTM2OC4wMCBMMTEx
Ny4wMCwxMDMyLjAwIEwxMjY2LjAwLDMzNy4wMCBMMTMyMy4wMCwxNzkuMDAgQzEzNDIuMzMsMTI1
LjAwLDEzNTIuMDAsODkuMDAsMTM1Mi4wMCw3MS4wMCBDMTM1Mi4wMCw0Mi4zMywxMzQxLjY3LDE4
LjMzLDEzMjEuMDAsLTEuMDAgQzEzMDAuMzMsLTIwLjMzLDEyNzYuNjcsLTMwLjAwLDEyNTAuMDAs
LTMwLjAwIFogTTg5Ny4wMCwxMTEzLjAwIEw2MTEuMDAsNjUyLjAwIEM2OTEuNjcsNjcyLjY3LDgx
NC4wMCw2OTcuNjcsOTc4LjAwLDcyNy4wMCBMODk3LjAwLDExMTMuMDAgWiJdCiAgICAgICAgICAg
UmVuZGVyUGF0aCB7cGF0aH0gYXQgKDIwOC43NywxMDkuNTMpIHNpemUgMzAuMTJ4NDcuNDMgW3Ry
YW5zZm9ybT17bT0oKDEuMDAsMC4wMCkoMC4wMCwxLjAwKSkgdD0oMTQ5OC4wMCwwLjAwKX1dIFtm
aWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNGRkZGRkZdfV0gW2RhdGE9Ik0xMDExLjAwLDg5Mi4w
MCBMNjY1LjAwLDE0NC4wMCBDNTc5LjY3LC0zOC4wMCw1MTQuMzMsLTE5MC4zMyw0NjkuMDAsLTMx
My4wMCBMNDAzLjAwLC01MDcuMDAgQzM4NS42NywtNTU1LjAwLDM1NS42NywtNTc5LjAwLDMxMy4w
MCwtNTc5LjAwIEMyODUuMDAsLTU3OS4wMCwyNjEuMDAsLTU3MC4wMCwyNDEuMDAsLTU1Mi4wMCBD
MjIxLjAwLC01MzQuMDAsMjEwLjY3LC01MTEuMDAsMjEwLjAwLC00ODMuMDAgQzIxMC4wMCwtNDE2
LjMzLDI4Mi4wMCwtMjIzLjMzLDQyNi4wMCw5Ni4wMCBMNjguMDAsNzg1LjAwIEwyMy4wMCw4NTgu
MDAgQzUuMDAsODg4LjY3LC00LjAwLDkxNC4zMywtNC4wMCw5MzUuMDAgQy00LjAwLDk2Mi4zMyw2
LjMzLDk4Ni4zMywyNy4wMCwxMDA3LjAwIEM0Ny42NywxMDI3LjY3LDcxLjMzLDEwMzguMDAsOTgu
MDAsMTAzOC4wMCBDMTI4LjY3LDEwMzguMDAsMTUyLjMzLDEwMjYuMzMsMTY5LjAwLDEwMDMuMDAg
QzI4Mi4zMyw4NDUuNjcsNDA0LjAwLDYyMS42Nyw1MzQuMDAsMzMxLjAwIEw2ODIuMDAsNjc2LjAw
IEM3MzUuMzMsNzk1LjMzLDc4Ni42Nyw4OTguMDAsODM2LjAwLDk4NC4wMCBDODU3LjMzLDEwMjEu
MzMsODg1LjMzLDEwNDAuMDAsOTIwLjAwLDEwNDAuMDAgQzk0Ny4zMywxMDQwLjAwLDk3MS4zMywx
MDMwLjMzLDk5Mi4wMCwxMDExLjAwIEMxMDEyLjY3LDk5MS42NywxMDIzLjMzLDk2OC42NywxMDI0
LjAwLDk0Mi4wMCBDMTAyNC4wMCw5MjcuMzMsMTAxOS42Nyw5MTAuNjcsMTAxMS4wMCw4OTIuMDAg
WiJdCkBAIC0yOSw3ICsyOSw3IEBAIGxheWVyIGF0ICgwLDApIHNpemUgNDgweDM2MAogICAgICAg
ICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDIxMHg4MyBjb250YWlucyAxIGNo
dW5rKHMpCiAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCB7I3RleHR9IGF0ICgwLC02Nikg
c2l6ZSAyMTB4ODMKICAgICAgICAgICAgIGNodW5rIDEgdGV4dCBydW4gMSBhdCAoMC4wMCwwLjAw
KSBzdGFydE9mZnNldCAwIGVuZE9mZnNldCA1IHdpZHRoIDIwOS43MTogIkF5XHh7RDZ9QFx4e0U3
fSIKLSAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDE2OC44NCwxNTUuNjIpIHNpemUg
MjAzLjQ0eDcxLjM0IFt0cmFuc2Zvcm09e209KCgxLjAwLDAuMDApKDAuMDAsLTEuMDApKSB0PSgx
NjUuMDAsMjEwLjAwKX1dCisgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjguODQs
MTU1LjYyKSBzaXplIDIwMy40NHg3MS4zNCBbdHJhbnNmb3JtPXttPSgoMS4wMCwwLjAwKSgtMC4w
MCwtMS4wMCkpIHQ9KDE2NS4wMCwyMTAuMDApfV0KICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVy
IHtnfSBhdCAoMTY4Ljg0LDE1NS42Mikgc2l6ZSAyMDMuNDR4NzEuMzQgW3RyYW5zZm9ybT17bT0o
KDAuMDMsMC4wMCkoMC4wMCwwLjAzKSkgdD0oMC4wMCwwLjAwKX1dCiAgICAgICAgICAgUmVuZGVy
UGF0aCB7cGF0aH0gYXQgKDE2OC44NCwxNjYuNzApIHNpemUgMzUuNzd4NDQuMTggW2ZpbGw9e1t0
eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTTEyNTAuMDAsLTMwLjAwIEMxMTg4
LjY3LC0zMC4wMCwxMTM1LjMzLDQ4LjY3LDEwOTAuMDAsMjA2LjAwIEMxMDcyLjY3LDI2Ni4wMCwx
MDUxLjAwLDM3MS4wMCwxMDI1LjAwLDUyMS4wMCBDOTU3LjAwLDUxMS42Nyw4NjguMDAsNDk1LjAw
LDc1OC4wMCw0NzEuMDAgTDQ5Mi4wMCw0MTYuMDAgQzQ1OC42NywzMjguNjcsNDAxLjY3LDIwMS4w
MCwzMjEuMDAsMzMuMDAgQzI5OS42NywtNC4zMywyNzAuNjcsLTIzLjAwLDIzNC4wMCwtMjMuMDAg
QzIwNy4zMywtMjMuMDAsMTgzLjY3LC0xMy4zMywxNjMuMDAsNi4wMCBDMTQyLjMzLDI1LjMzLDEz
MS42Nyw0OS4zMywxMzEuMDAsNzguMDAgQzEzMS4wMCwxMTAuMDAsMTgxLjMzLDIzMS42NywyODIu
MDAsNDQzLjAwIEMyNzAuNjcsNDYwLjMzLDI2NS4wMCw0ODAuMzMsMjY1LjAwLDUwMy4wMCBDMjY1
LjAwLDU1Ny4wMCwyOTcuNjcsNTkxLjY3LDM2My4wMCw2MDcuMDAgQzQzOS4wMCw3NDkuNjcsNTM1
LjAwLDkxMy42Nyw2NTEuMDAsMTA5OS4wMCBDODA5LjAwLDEzNTEuNjcsOTA3LjMzLDE0NzguMDAs
OTQ2LjAwLDE0NzguMDAgQzk5OC42NywxNDc4LjAwLDEwMzQuNjcsMTQ0MS4zMywxMDU0LjAwLDEz
NjguMDAgTDExMTcuMDAsMTAzMi4wMCBMMTI2Ni4wMCwzMzcuMDAgTDEzMjMuMDAsMTc5LjAwIEMx
MzQyLjMzLDEyNS4wMCwxMzUyLjAwLDg5LjAwLDEzNTIuMDAsNzEuMDAgQzEzNTIuMDAsNDIuMzMs
MTM0MS42NywxOC4zMywxMzIxLjAwLC0xLjAwIEMxMzAwLjMzLC0yMC4zMywxMjc2LjY3LC0zMC4w
MCwxMjUwLjAwLC0zMC4wMCBaIE04OTcuMDAsMTExMy4wMCBMNjExLjAwLDY1Mi4wMCBDNjkxLjY3
LDY3Mi42Nyw4MTQuMDAsNjk3LjY3LDk3OC4wMCw3MjcuMDAgTDg5Ny4wMCwxMTEzLjAwIFoiXQog
ICAgICAgICAgIFJlbmRlclBhdGgge3BhdGh9IGF0ICgyMDguNzcsMTc5LjUzKSBzaXplIDMwLjEy
eDQ3LjQzIFt0cmFuc2Zvcm09e209KCgxLjAwLDAuMDApKDAuMDAsMS4wMCkpIHQ9KDE0OTguMDAs
MC4wMCl9XSBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSJNMTAx
MS4wMCw4OTIuMDAgTDY2NS4wMCwxNDQuMDAgQzU3OS42NywtMzguMDAsNTE0LjMzLC0xOTAuMzMs
NDY5LjAwLC0zMTMuMDAgTDQwMy4wMCwtNTA3LjAwIEMzODUuNjcsLTU1NS4wMCwzNTUuNjcsLTU3
OS4wMCwzMTMuMDAsLTU3OS4wMCBDMjg1LjAwLC01NzkuMDAsMjYxLjAwLC01NzAuMDAsMjQxLjAw
LC01NTIuMDAgQzIyMS4wMCwtNTM0LjAwLDIxMC42NywtNTExLjAwLDIxMC4wMCwtNDgzLjAwIEMy
MTAuMDAsLTQxNi4zMywyODIuMDAsLTIyMy4zMyw0MjYuMDAsOTYuMDAgTDY4LjAwLDc4NS4wMCBM
MjMuMDAsODU4LjAwIEM1LjAwLDg4OC42NywtNC4wMCw5MTQuMzMsLTQuMDAsOTM1LjAwIEMtNC4w
MCw5NjIuMzMsNi4zMyw5ODYuMzMsMjcuMDAsMTAwNy4wMCBDNDcuNjcsMTAyNy42Nyw3MS4zMywx
MDM4LjAwLDk4LjAwLDEwMzguMDAgQzEyOC42NywxMDM4LjAwLDE1Mi4zMywxMDI2LjMzLDE2OS4w
MCwxMDAzLjAwIEMyODIuMzMsODQ1LjY3LDQwNC4wMCw2MjEuNjcsNTM0LjAwLDMzMS4wMCBMNjgy
LjAwLDY3Ni4wMCBDNzM1LjMzLDc5NS4zMyw3ODYuNjcsODk4LjAwLDgzNi4wMCw5ODQuMDAgQzg1
Ny4zMywxMDIxLjMzLDg4NS4zMywxMDQwLjAwLDkyMC4wMCwxMDQwLjAwIEM5NDcuMzMsMTA0MC4w
MCw5NzEuMzMsMTAzMC4zMyw5OTIuMDAsMTAxMS4wMCBDMTAxMi42Nyw5OTEuNjcsMTAyMy4zMyw5
NjguNjcsMTAyNC4wMCw5NDIuMDAgQzEwMjQuMDAsOTI3LjMzLDEwMTkuNjcsOTEwLjY3LDEwMTEu
MDAsODkyLjAwIFoiXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZH
LTEuMS9mb250cy1lbGVtLTAzLWItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wMy1iLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNTQ0NjQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1cz
Qy1TVkctMS4xL2ZvbnRzLWVsZW0tMDMtYi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTExLDcgKzExLDcgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA0ODB4MzYwCiAgICAgICAgIFJlbmRl
clNWR1RleHQge3RleHR9IGF0ICgzMSwxMzApIHNpemUgMTA1eDIyIGNvbnRhaW5zIDEgY2h1bmso
cykKICAgICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0IHsjdGV4dH0gYXQgKDAsLTE3KSBzaXpl
IDEwNXgyMgogICAgICAgICAgICAgY2h1bmsgMSB0ZXh0IHJ1biAxIGF0ICgzMS4wMCwxMzAuMDAp
IHN0YXJ0T2Zmc2V0IDAgZW5kT2Zmc2V0IDEzIHdpZHRoIDEwNS4wMDogIlBsYWNlZCBHbHlwaHMi
Ci0gICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDE2NC4yNyw4MS40MSkgc2l6ZSAy
MTEuMTd4MTYxLjEzIFt0cmFuc2Zvcm09e209KCgxLjAwLDAuMDApKDAuMDAsLTEuMDApKSB0PSgx
NjUuMDAsMTQwLjAwKX1dCisgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDE2NC4y
Nyw4MS40MSkgc2l6ZSAyMTEuMTd4MTYxLjEzIFt0cmFuc2Zvcm09e209KCgxLjAwLDAuMDApKC0w
LjAwLC0xLjAwKSkgdD0oMTY1LjAwLDE0MC4wMCl9XQogICAgICAgICAgIFJlbmRlclBhdGgge2xp
bmV9IGF0ICgxNjUsMTM5LjUwKSBzaXplIDIxMHgxIFtzdHJva2U9e1t0eXBlPVNPTElEXSBbY29s
b3I9Izg4ODg4OF19XSBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRh
PSJNMC4wMCwwLjAwIEwyMTAuMDAsMC4wMCJdCiAgICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVy
IHtnfSBhdCAoMTY0LjI3LDgxLjQxKSBzaXplIDIxMS4xN3gxNjEuMTMgW3RyYW5zZm9ybT17bT0o
KDAuMDMsMC4wMCkoMC4wMCwwLjAzKSkgdD0oMC4wMCwwLjAwKX1dCiAgICAgICAgICAgICBSZW5k
ZXJQYXRoIHtsaW5lfSBhdCAoMTY0LjI3LDgxLjQxKSBzaXplIDEuNDZ4MTYxLjEzIFtzdHJva2U9
e1t0eXBlPVNPTElEXSBbY29sb3I9Izg4ODg4OF0gW3N0cm9rZSB3aWR0aD01MC4wMF19XSBbZmls
bD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSJNMC4wMCwtMzUwMC4wMCBM
MC4wMCwyMDAwLjAwIl0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvVzNDLVNW
Ry0xLjEvZm9udHMtZWxlbS0wNC1iLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDQtYi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDU0NDY0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9X
M0MtU1ZHLTEuMS9mb250cy1lbGVtLTA0LWItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xMSw3ICsxMSw3IEBAIGxheWVyIGF0ICgwLDApIHNpemUgNDgweDM2MAogICAgICAgICBSZW5k
ZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMzEsMTMwKSBzaXplIDEwNXgyMiBjb250YWlucyAxIGNodW5r
KHMpCiAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCB7I3RleHR9IGF0ICgwLC0xNykgc2l6
ZSAxMDV4MjIKICAgICAgICAgICAgIGNodW5rIDEgdGV4dCBydW4gMSBhdCAoMzEuMDAsMTMwLjAw
KSBzdGFydE9mZnNldCAwIGVuZE9mZnNldCAxMyB3aWR0aCAxMDUuMDA6ICJQbGFjZWQgR2x5cGhz
IgotICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjQuMjcsODEuNDEpIHNpemUg
MjExLjE3eDE2MS4xMyBbdHJhbnNmb3JtPXttPSgoMS4wMCwwLjAwKSgwLjAwLC0xLjAwKSkgdD0o
MTY1LjAwLDE0MC4wMCl9XQorICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjQu
MjcsODEuNDEpIHNpemUgMjExLjE3eDE2MS4xMyBbdHJhbnNmb3JtPXttPSgoMS4wMCwwLjAwKSgt
MC4wMCwtMS4wMCkpIHQ9KDE2NS4wMCwxNDAuMDApfV0KICAgICAgICAgICBSZW5kZXJQYXRoIHts
aW5lfSBhdCAoMTY1LDEzOS41MCkgc2l6ZSAyMTB4MSBbc3Ryb2tlPXtbdHlwZT1TT0xJRF0gW2Nv
bG9yPSM4ODg4ODhdfV0gW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0
YT0iTTAuMDAsMC4wMCBMMjEwLjAwLDAuMDAiXQogICAgICAgICAgIFJlbmRlclNWR0NvbnRhaW5l
ciB7Z30gYXQgKDE2NC4yNyw4MS40MSkgc2l6ZSAyMTEuMTd4MTYxLjEzIFt0cmFuc2Zvcm09e209
KCgwLjAzLDAuMDApKDAuMDAsMC4wMykpIHQ9KDAuMDAsMC4wMCl9XQogICAgICAgICAgICAgUmVu
ZGVyUGF0aCB7bGluZX0gYXQgKDE2NC4yNyw4MS40MSkgc2l6ZSAxLjQ2eDE2MS4xMyBbc3Ryb2tl
PXtbdHlwZT1TT0xJRF0gW2NvbG9yPSM4ODg4ODhdIFtzdHJva2Ugd2lkdGg9NTAuMDBdfV0gW2Zp
bGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTTAuMDAsLTM1MDAuMDAg
TDAuMDAsMjAwMC4wMCJdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1czQy1T
VkctMS4xL2ZvbnRzLWVsZW0tMDctYi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTA3LWItZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA1NDQ2NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcv
VzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wNy1iLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTIsNyArMTIsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDQ4MHgzNjAKICAgICAgICAgUmVu
ZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDMwLDEzMCkgc2l6ZSAxMDV4MjIgY29udGFpbnMgMSBjaHVu
ayhzKQogICAgICAgICAgIFJlbmRlclNWR0lubGluZVRleHQgeyN0ZXh0fSBhdCAoMCwtMTcpIHNp
emUgMTA1eDIyCiAgICAgICAgICAgICBjaHVuayAxIHRleHQgcnVuIDEgYXQgKDMwLjAwLDEzMC4w
MCkgc3RhcnRPZmZzZXQgMCBlbmRPZmZzZXQgMTMgd2lkdGggMTA1LjAwOiAiUGxhY2VkIEdseXBo
cyIKLSAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMTY0LjI3LDgxLjQxKSBzaXpl
IDIxMS4xN3gxNjEuMTMgW3RyYW5zZm9ybT17bT0oKDEuMDAsMC4wMCkoMC4wMCwtMS4wMCkpIHQ9
KDE2NS4wMCwxNDAuMDApfV0KKyAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMTY0
LjI3LDgxLjQxKSBzaXplIDIxMS4xN3gxNjEuMTMgW3RyYW5zZm9ybT17bT0oKDEuMDAsMC4wMCko
LTAuMDAsLTEuMDApKSB0PSgxNjUuMDAsMTQwLjAwKX1dCiAgICAgICAgICAgUmVuZGVyUGF0aCB7
bGluZX0gYXQgKDE2NSwxMzkuNTApIHNpemUgMjEweDEgW3N0cm9rZT17W3R5cGU9U09MSURdIFtj
b2xvcj0jODg4ODg4XX1dIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDAwMDBdfV0gW2Rh
dGE9Ik0wLjAwLDAuMDAgTDIxMC4wMCwwLjAwIl0KICAgICAgICAgICBSZW5kZXJTVkdDb250YWlu
ZXIge2d9IGF0ICgxNjQuMjcsODEuNDEpIHNpemUgMjExLjE3eDE2MS4xMyBbdHJhbnNmb3JtPXtt
PSgoMC4wMywwLjAwKSgwLjAwLDAuMDMpKSB0PSgwLjAwLDAuMDApfV0KICAgICAgICAgICAgIFJl
bmRlclBhdGgge2xpbmV9IGF0ICgxNjQuMjcsODEuNDEpIHNpemUgMS40NngxNjEuMTMgW3N0cm9r
ZT17W3R5cGU9U09MSURdIFtjb2xvcj0jODg4ODg4XSBbc3Ryb2tlIHdpZHRoPTUwLjAwXX1dIFtm
aWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDAwMDBdfV0gW2RhdGE9Ik0wLjAwLC0zNTAwLjAw
IEwwLjAwLDIwMDAuMDAiXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0
b20vdXNlLW9uLWRpc2FsbG93ZWQtZm9yZWlnbi1vYmplY3QtMy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdXNlLW9uLWRpc2Fs
bG93ZWQtZm9yZWlnbi1vYmplY3QtMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU0NDY0KQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdXNlLW9uLWRpc2FsbG93ZWQtZm9y
ZWlnbi1vYmplY3QtMy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDQgKzEwLDQg
QEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAgICBSZW5kZXJTVkdDb250YWluZXIg
e2d9IGF0ICgyNTAsLTUwKSBzaXplIDB4MAogICAgIFJlbmRlclNWR0NvbnRhaW5lciB7dXNlfSBh
dCAoMjUwLC01MCkgc2l6ZSAweDAgW3RyYW5zZm9ybT17bT0oKDAuNzEsMC43MSkoLTAuNzEsMC43
MSkpIHQ9KDI1MC4wMCwtNTAuMDApfV0KICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQg
KDI1MCwtMzUuODYpIHNpemUgMHgwIFt0cmFuc2Zvcm09e209KCgxLjAwLDAuMDApKDAuMDAsMS4w
MCkpIHQ9KDEwLjAwLDEwLjAwKX1dCi0gICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQg
KDQ2Mi4xMywxMTkuNzEpIHNpemUgMHgwIFt0cmFuc2Zvcm09e209KCgwLjcxLDAuNzEpKC0wLjcx
LDAuNzEpKSB0PSgyNjAuMDAsLTQwLjAwKX1dCisgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7
Z30gYXQgKDQ1Mi4xMywxMTUuNTYpIHNpemUgMHgwIFt0cmFuc2Zvcm09e209KCgwLjcxLDAuNzEp
KC0wLjcxLDAuNzEpKSB0PSgyNTAuMDAsLTM1Ljg2KX1dCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvc3ZnL2N1c3RvbS91c2Utb24tZGlzYWxsb3dlZC1mb3JlaWduLW9iamVjdC00LWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL2N1
c3RvbS91c2Utb24tZGlzYWxsb3dlZC1mb3JlaWduLW9iamVjdC00LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNTQ0NjQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS91c2Ut
b24tZGlzYWxsb3dlZC1mb3JlaWduLW9iamVjdC00LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTQsNiArMTQsNiBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgICAgICAg
ICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgyNTAsLTM1Ljg2KSBzaXplIDB4MAogICAgIFJl
bmRlclNWR0NvbnRhaW5lciB7dXNlfSBhdCAoMjUwLC01MCkgc2l6ZSAweDAgW3RyYW5zZm9ybT17
bT0oKDAuNzEsMC43MSkoLTAuNzEsMC43MSkpIHQ9KDI1MC4wMCwtNTAuMDApfV0KICAgICAgIFJl
bmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDI1MCwtMzUuODYpIHNpemUgMHgwIFt0cmFuc2Zvcm09
e209KCgxLjAwLDAuMDApKDAuMDAsMS4wMCkpIHQ9KDEwLjAwLDEwLjAwKX1dCi0gICAgICAgIFJl
bmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDQ2Mi4xMywxMTkuNzEpIHNpemUgMHgwIFt0cmFuc2Zv
cm09e209KCgwLjcxLDAuNzEpKC0wLjcxLDAuNzEpKSB0PSgyNjAuMDAsLTQwLjAwKX1dCi0gICAg
ICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoNDYyLjEzLDExOS43MSkgc2l6ZSAweDAK
LSAgICAgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDQ2Mi4xMywxMTkuNzEpIHNp
emUgMHgwCisgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDQ1Mi4xMywxMTUuNTYp
IHNpemUgMHgwIFt0cmFuc2Zvcm09e209KCgwLjcxLDAuNzEpKC0wLjcxLDAuNzEpKSB0PSgyNTAu
MDAsLTM1Ljg2KX1dCisgICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoNDUyLjEz
LDExNS41Nikgc2l6ZSAweDAKKyAgICAgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQg
KDQ1Mi4xMywxMTUuNTYpIHNpemUgMHgwCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvZG9tL1NWR01h
dHJpeC1pbnRlcmZhY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2
Zy9kb20vU1ZHTWF0cml4LWludGVyZmFjZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU0NDY0KQor
KysgTGF5b3V0VGVzdHMvc3ZnL2RvbS9TVkdNYXRyaXgtaW50ZXJmYWNlLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBQQVNTIHBhcnNlRmxvYXQobS5mKSBpcyAw
CiAKIFRlc3QgZmxpcFgoKQogUEFTUyBtNC5hIGlzIC01Ci1QQVNTIG00LmIgaXMgMAorUEFTUyBN
YXRoLmFicyhtNC5iKSBpcyAwCiBQQVNTIG00LmMgaXMgMAogUEFTUyBtNC5kIGlzIDUKIFBBU1Mg
bTQuZSBpcyAxMDAKQEAgLTk3LDcgKzk3LDcgQEAgUEFTUyBwYXJzZUZsb2F0KG0zLmYpIGlzIDUw
CiBUZXN0IGZsaXBZKCkKIFBBU1MgbTQuYSBpcyA1CiBQQVNTIG00LmIgaXMgMAotUEFTUyBtNC5j
IGlzIDAKK1BBU1MgTWF0aC5hYnMobTQuYykgaXMgMAogUEFTUyBtNC5kIGlzIC01CiBQQVNTIG00
LmUgaXMgMTAwCiBQQVNTIG00LmYgaXMgNTAKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9kb20vU1ZH
TWF0cml4LWludGVyZmFjZS54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvZG9t
L1NWR01hdHJpeC1pbnRlcmZhY2UueGh0bWwJKHJldmlzaW9uIDU0NDY0KQorKysgTGF5b3V0VGVz
dHMvc3ZnL2RvbS9TVkdNYXRyaXgtaW50ZXJmYWNlLnhodG1sCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTUsNyArMTE1LDcgQEAgZGVidWcoIiIpOwogZGVidWcoIlRlc3QgZmxpcFgoKSIpOwogbTQgPSBt
My5mbGlwWCgpOwogc2hvdWxkQmUoJ200LmEnLCAnLTUnKTsKLXNob3VsZEJlKCdtNC5iJywgJzAn
KTsKK3Nob3VsZEJlKCdNYXRoLmFicyhtNC5iKScsICcwJyk7CiBzaG91bGRCZSgnbTQuYycsICcw
Jyk7CiBzaG91bGRCZSgnbTQuZCcsICc1Jyk7CiBzaG91bGRCZSgnbTQuZScsICcxMDAnKTsKQEAg
LTEzNSw3ICsxMzUsNyBAQCBkZWJ1ZygiVGVzdCBmbGlwWSgpIik7CiBtNCA9IG0zLmZsaXBZKCk7
CiBzaG91bGRCZSgnbTQuYScsICc1Jyk7CiBzaG91bGRCZSgnbTQuYicsICcwJyk7Ci1zaG91bGRC
ZSgnbTQuYycsICcwJyk7CitzaG91bGRCZSgnTWF0aC5hYnMobTQuYyknLCAnMCcpOwogc2hvdWxk
QmUoJ200LmQnLCAnLTUnKTsKIHNob3VsZEJlKCdtNC5lJywgJzEwMCcpOwogc2hvdWxkQmUoJ200
LmYnLCAnNTAnKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48349</attachid>
            <date>2010-02-08 12:06:55 -0800</date>
            <delta_ts>2010-02-08 14:15:35 -0800</delta_ts>
            <desc>Add back AffineTransform for SVG</desc>
            <filename>affineTransform-2-5.patch</filename>
            <type>text/plain</type>
            <size>224977</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzM4IEBACisyMDEwLTAyLTA4ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGJhY2sgYW4gQWZmaW5lVHJhbnNmb3JtIGNsYXNzIGZvciB1c2UgYnkgU1ZHCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzc1MAorCisgICAgICAgIFRo
aXMgYWRkcyBiYWNrIEFmZmluZVRyYW5zZm9ybS4gVGhpcyBzYXZlcyBhZGRpdGlvbmFsIDQlIG1l
bW9yeSBjb25zdW1wdGlvbgorICAgICAgICBvbiB0aGUgNTBrIHJlY3RzIHN0cmVzcyB0ZXN0OiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9hdHRhY2htZW50LmNnaT9pZD00NjcyMQorICAgICAgICBJ
dCBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG9wdGltaXplIHRoZSBjYWxjdWxhdGlvbnMgaW50
ZXJuYWxseSBvZgorICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdG8gdGhlIG5lZWRzIG9mIDJEIHRy
YW5zZm9ybWF0aW9ucyAodGhlIHNlY29uZCBiZW5lZml0IGZvciBTVkcsCisgICAgICAgIHdoaWNo
IHVzZXMgdHJhbnNmb3JtYXRpb25zIHJlbGF0aXZlIG9mdGVuIGF0IHRoZSBtb21lbnQuCisgICAg
ICAgIEV2ZXJ5dGhpbmcgdGhhdCBpcyAyRCByZWxhdGVkIChsaWtlIGltYWdlcywgcGF0dGVybnMs
IGdyYWRpZW50cywgZm9udHMpLCB1c2VzCisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBub3cuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdNYXRyaXg6Om11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjppbnZl
cnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BPRFR5cGVXcmFwcGVyLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4U1ZHTWF0cml4OjptdWx0aXBseUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4U1ZHTWF0cml4OjppbnZlcnNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
VjhTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3JDYWxsYmFjayk6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6IENoYW5nZWQgdG8gQWZmaW5lVHJhbnNmb3JtIG5vdworICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zvcm0pOgorICAgICAg
ICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6Om1hdHJpeFRy
YW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0R3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0UGxhdGZvcm1HcmFk
aWVudFNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpkcmF3VGlsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRl
cm46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjp0aWxlSW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQbGF0
Zm9ybUZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGxhdGZvcm1TdHJva2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjb25jYXRDVE0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvUGF0aEhhaWt1LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvUGF0aFF0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Q
YXR0ZXJuUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNl
VHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QYXR0ZXJuU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpwbGF0Zm9ybVBh
dHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1ha2VJZGVudGl0eSk6IG5lZWRlZCBi
eSBzb21lIHBhcnRzIG9mIFdlYkNvcmUKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bTo6c2NhbGUpOiBEaWRuJ3Qgc2NhbGUgdGhlIGNvbXBsZXRlIG1hdHJpeAorICAgICAgICAoV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUpOiBEaWRuJ3QgcmVzcGVjdCBvdGhlciB0
cmFuc2Zvcm1hdGlvbnMKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6c2hlYXIp
OiBkaXJlY3QgY2FsY3VsYXRpb24sIG5vIGV4dHJhIG11bHRpcGx5IG9mIG1hdHJpY2VzCisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcCk6CisgICAgICAgIChXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybTo6bWFwUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9B
ZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6aXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXg6OnRvQWZmaW5lVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
R0RJR2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0Q0dXaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDYWlyb1dpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udFdpbmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFw
aGljc0NvbnRleHRXaW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdCaXRtYXBQYXR0ZXJuKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdlOjpkcmF3
UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGF0aFdpbmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZHJhd1BvbHlnb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhQb2x5Z29uOjp0cmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXRoRWxlbWVudDo6dHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGF0aDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVBhdGg6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtUGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Q
bGF0Zm9ybVBhdGhXaW5jZS5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvSW1hZ2VXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd1BhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYWludE1vemlsbGFHdGtXaWRn
ZXQpOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6bG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94TW9kZWxTY2FsZURhdGE6OlJlbmRlckJveE1vZGVsU2NhbGVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsU2NhbGVEYXRhOjp0cmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxTY2FsZURhdGE6OnNldFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3Vs
ZFBhaW50QmFja2dyb3VuZEF0TG93UXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGb3JlaWduT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmpl
Y3Q6OnRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
b3JlaWduT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWln
bk9iamVjdDo6bG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUGF0aDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJQYXRoOjpsb2NhbFRyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clBhdGguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmFic29sdXRlVHJh
bnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpsb2NhbFRyYW5zZm9ybSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6bG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSb290Ojpsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmFic29sdXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxvY2FsVHJhbnNmb3JtKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXI6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXI6OmNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bWFya2VyQm91bmRhcmllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bWFya2VyQ29udGVu
dFRyYW5zZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyOjp2aWV3cG9ydFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lcjo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6YWJzb2x1dGVUcmFuc2Zvcm0pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0NoYXI6OmNoYXJhY3RlclRyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0No
YXJhY3RlckxheW91dEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua1dhbGtl
cjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlR2x5cGhCb3Vu
ZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3hDbG9zZXN0Q2hhcmFj
dGVyVG9Qb3NpdGlvbldhbGtlcjo6Y2h1bmtQb3J0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSW5saW5lVGV4dEJveFNlbGVjdGlvblJlY3RXYWxrZXI6OmNodW5rUG9ydGlvbkNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50Q2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRp
b24pOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmg6CisgICAgICAg
IChXZWJDb3JlOjpNYXJrZXJMYXlvdXQ6Ok1hcmtlckxheW91dCk6CisgICAgICAgICogcmVuZGVy
aW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUcmFuc2Zv
cm1Ub1BhaW50SW5mbyk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3hQYWludFdhbGtlcjo6Y2h1bmtQb3J0aW9uQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUZXh0TGVuZ3RoQ29ycmVjdGlvblRvVGV4
dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OmJ1aWxkTGF5b3V0
SW5mb3JtYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1TdGF0ZTo6YXBwbHlUcmFuc2Zvcm0pOgorICAgICAg
ICAqIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oOgorICAgICAgICAqIHN2Zy9HcmFkaWVudEF0
dHJpYnV0ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50QXR0cmlidXRlczo6Z3JhZGll
bnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1dGVzOjpzZXRH
cmFkaWVudFRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1BhdHRlcm5BdHRyaWJ1dGVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuQXR0cmlidXRlczo6cGF0dGVyblRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuQXR0cmlidXRlczo6c2V0UGF0dGVyblRyYW5zZm9ybSk6
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpyZXNldFRvQmFzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlZFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBseVJl
c3VsdHNUb1RhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6c3VwcGxlbWVudGFsVHJhbnNm
b3JtKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpdFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybSk6CisgICAgICAgICog
c3ZnL1NWR0ZpdFRvVmlld0JveC5oOgorICAgICAgICAqIHN2Zy9TVkdMb2NhdGFibGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTG9jYXRhYmxlOjpnZXRTY3JlZW5DVE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9j
YXRhYmxlOjpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdMb2NhdGFi
bGUuaDoKKyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNYXJrZXJFbGVtZW50Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKToKKyAgICAgICAg
KiBzdmcvU1ZHTWFya2VyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdNYXNrRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6ZHJhd01hc2tlckNvbnRlbnQp
OgorICAgICAgICAqIHN2Zy9TVkdNYXRyaXguaWRsOgorICAgICAgICAqIHN2Zy9TVkdQYXR0ZXJu
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6YnVpbGRQ
YXR0ZXJuKToKKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXRDVE0pOgorICAgICAgICAq
IHN2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6dmlld3BvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NWR0VsZW1lbnQ6OmdldFNjcmVlbkNUTSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
VkdFbGVtZW50Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZH
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0p
OgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6c3VwcGxlbWVudGFsVHJhbnNmb3JtKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Ojppc1N0eWxlZFRyYW5zZm9ybWFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9T
VkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4
dEJveFF1ZXJ5V2Fsa2VyOjpjaHVua1BvcnRpb25DYWxsYmFjayk6CisgICAgICAgICogc3ZnL1NW
R1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVtZW50OjpnZXRT
Y3JlZW5DVE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmdldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6c3VwcGxlbWVudGFsVHJhbnNmb3Jt
KToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4
dFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtLmNwcDoKKyAgICAg
ICAgKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtKToKKyAgICAgICAgKFNWR1RyYW5zZm9ybTo6
bWF0cml4KToKKyAgICAgICAgKFNWR1RyYW5zZm9ybTo6c2V0TWF0cml4KToKKyAgICAgICAgKiBz
dmcvU1ZHVHJhbnNmb3JtLmg6CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1E
aXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6c2NhbGVk
RGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmlzWmVy
byk6CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmg6CisgICAgICAgICogc3Zn
L1NWR1RyYW5zZm9ybUxpc3QuY3BwOgorICAgICAgICAoU1ZHVHJhbnNmb3JtTGlzdDo6Y3JlYXRl
U1ZHVHJhbnNmb3JtRnJvbU1hdHJpeCk6CisgICAgICAgIChTVkdUcmFuc2Zvcm1MaXN0Ojpjb25j
YXRlbmF0ZSk6CisgICAgICAgIChTVkdUcmFuc2Zvcm1MaXN0Ojp2YWx1ZUFzU3RyaW5nKToKKyAg
ICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zv
cm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OmdldENUTSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpnZXRTY3JlZW5DVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSk6Cisg
ICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Ry
YW5zZm9ybWFibGU6Oik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3Jh
ZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6Z3Jh
ZGllbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6c2V0R3JhZGllbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFRvVGV4dE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50Lmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYWludFNlcnZlclBhdHRlcm46OnBhdHRlcm5UcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXRQYXR0ZXJuVHJhbnNmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXApOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclBhdHRlcm4uaDoKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUmVzb3Vy
Y2VNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtl
clRyYW5zZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlTWFya2VyOjpk
cmF3KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VNYXJrZXIuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxl
OjphcHBseSk6CisKIDIwMTAtMDItMDggIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0
Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU0
NDkzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTEzMTQsNyArMTMxNCw3IEBACiAJCTg0QTgxRjQxMEZDN0UwMjcwMDk1NTMw
MCAvKiBTb3VyY2VHcmFwaGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNw
cCAqLzsgfTsKIAkJODRBODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQwMEZD
N0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggKi87IH07CiAJCTg0RDBDNDA0MTExNUYx
RDQwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODREMEM0MDMxMTE1RjFENDAwMThBQTM0IC8qIEFmZmlu
ZVRyYW5zZm9ybS5jcHAgKi87IH07Ci0JCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZp
bmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0RDBDNDA1MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCAqLzsgfTsK
KwkJODREMEM0MDYxMTE1RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODREMEM0MDUxMTE1RjFFQTAw
MThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTg1MDA0RDk0MEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdE
ZWZzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODUwMDREODgwQUNFRUFFRjAwQzQzOEY2IC8qIERPTVNWR0RlZnNFbGVtZW50LmggKi87IH07
CiAJCTg1MDA0RDk1MEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdEZWZzRWxlbWVudC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDA0RDg5MEFDRUVB
RUYwMEM0MzhGNiAvKiBET01TVkdEZWZzRWxlbWVudC5tbSAqLzsgfTsKIAkJODUwMDREOTYwQUNF
RUFFRjAwQzQzOEY2IC8qIERPTVNWR0Rlc2NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAwNEQ4QTBBQ0VFQUVGMDBDNDM4RjYgLyogRE9N
U1ZHRGVzY0VsZW1lbnQuaCAqLzsgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdN
YXRyaXhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdN
YXRyaXhDdXN0b20uY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdNYXRyaXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAj
aWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJKU1NWR01hdHJpeC5oIgogCi0jaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJTVkdFeGNlcHRpb24uaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKQEAgLTQx
LDE5ICs0MSwxOSBAQCBKU1ZhbHVlIEpTU1ZHTWF0cml4OjptdWx0aXBseShFeGVjU3RhdGUqCiAK
ICAgICBKU1NWR01hdHJpeCogbWF0cml4T2JqID0gc3RhdGljX2Nhc3Q8SlNTVkdNYXRyaXgqPihh
c09iamVjdChhcmdzLmF0KDApKSk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtMSgqaW1w
bCgpKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtMigqKG1hdHJpeE9iai0+aW1wbCgpKSk7
CisgICAgQWZmaW5lVHJhbnNmb3JtIG0xKCppbXBsKCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBt
MigqKG1hdHJpeE9iai0+aW1wbCgpKSk7CiAKICAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNT
VkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7Ci0gICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJh
bnNmb3JtYXRpb25NYXRyaXg+OjpjcmVhdGUobTEubXVsdExlZnQobTIpKS5nZXQoKSwgY29udGV4
dCk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9E
VHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKG0xLm11bHRMZWZ0KG0yKSkuZ2V0
KCksIGNvbnRleHQpOwogfQogCiBKU1ZhbHVlIEpTU1ZHTWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW1w
KCppbXBsKCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAKICAgICBTVkdF
bGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmpl
Y3QodGhpcyk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgp
LCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRl
KGltcC5pbnZlcnNlKCkpLmdldCgpLCBjb250ZXh0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5l
VHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5pbnZlcnNlKCkpLmdldCgpLCBjb250ZXh0KTsKIAogICAg
IGlmICghaW1wLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
U1ZHRXhjZXB0aW9uOjpTVkdfTUFUUklYX05PVF9JTlZFUlRBQkxFKTsKQEAgLTYzLDEzICs2Mywx
MyBAQCBKU1ZhbHVlIEpTU1ZHTWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0ZSogCiAKIEpTVmFsdWUg
SlNTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGltcCgqaW1wbCgpKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwogIAogICAgIGZsb2F0IHggPSBhcmdzLmF0
KDApLnRvRmxvYXQoZXhlYyk7CiAgICAgZmxvYXQgeSA9IGFyZ3MuYXQoMSkudG9GbG9hdChleGVj
KTsKIAogICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29u
dGV4dEZvckRPTU9iamVjdCh0aGlzKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25N
YXRyaXg+OjpjcmVhdGUoaW1wLnJvdGF0ZUZyb21WZWN0b3IoeCwgeSkpLmdldCgpLCBjb250ZXh0
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIEpTU1ZH
U3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5yb3RhdGVG
cm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgY29udGV4dCk7CiAKICAgICBpZiAoeCA9PSAwLjAgfHwg
eSA9PSAwLjApCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTVkdFeGNlcHRpb246OlNW
R19JTlZBTElEX1ZBTFVFX0VSUik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9E
VHlwZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9E
VHlwZVdyYXBwZXIuaAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHUE9EVHlwZVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDEzIEBAIHB1
YmxpYzoKIH07CiAKIC8vIFRoaXMgZmlsZSBjb250YWlucyBKUyB3cmFwcGVyIG9iamVjdHMgZm9y
IFNWRyBkYXRhdHlwZXMsIHRoYXQgYXJlIHBhc3NlZCBhcm91bmQgYnkgdmFsdWUKLS8vIGluIFdl
YkNvcmUvc3ZnIChha2EuICdQT0QgdHlwZXMnKS4gRm9yIGluc3RhbmNlIFNWR01hdHJpeCBpcyBt
YXBwZWQgdG8gVHJhbnNmb3JtYXRpb25NYXRyaXgsIGFuZAorLy8gaW4gV2ViQ29yZS9zdmcgKGFr
YS4gJ1BPRCB0eXBlcycpLiBGb3IgaW5zdGFuY2UgU1ZHTWF0cml4IGlzIG1hcHBlZCB0byBBZmZp
bmVUcmFuc2Zvcm0sIGFuZAogLy8gcGFzc2VkIGFyb3VuZCBhcyBjb25zdCByZWZlcmVuY2UuIFNW
RyBET00gZGVtYW5kcyB0aGVzZSBvYmplY3RzIHRvIGJlICJsaXZlIiwgY2hhbmdlcyB0byBhbnkK
IC8vIG9mIHRoZSB3cml0YWJsZSBhdHRyaWJ1dGVzIG9mIFNWR01hdHJpeCBuZWVkIHRvIGJlIHJl
ZmxlY3RlZCBpbiB0aGUgb2JqZWN0IHdoaWNoIGV4cG9zZWQgdGhlCiAvLyBTVkdNYXRyaXggb2Jq
ZWN0IChpLmUuICdzb21lRWxlbWVudC50cmFuc2Zvcm0ubWF0cml4LmEgPSA1MC4wJywgaW4gdGhh
dCBjYXNlICdTVkdUcmFuc2Zvcm0nKS4KLS8vIFRoZSBTVkdUcmFuc2Zvcm0gY2xhc3Mgc3RvcmVz
IGl0cyAiVHJhbnNmb3JtYXRpb25NYXRyaXggbV9tYXRyaXgiIG9iamVjdCBvbiB0aGUgc3RhY2su
IElmIGl0IHdvdWxkCisvLyBUaGUgU1ZHVHJhbnNmb3JtIGNsYXNzIHN0b3JlcyBpdHMgIkFmZmlu
ZVRyYW5zZm9ybSBtX21hdHJpeCIgb2JqZWN0IG9uIHRoZSBzdGFjay4gSWYgaXQgd291bGQKIC8v
IGJlIHN0b3JlZCBhcyBwb2ludGVyIHdlIGNvdWxkIGp1c3QgYnVpbGQgYW4gYXV0by1nZW5lcmF0
ZWQgSlNTVkcqIHdyYXBwZXIgb2JqZWN0IGFyb3VuZCBpdAotLy8gYW5kIGFsbCBjaGFuZ2VzIHRv
IHRoYXQgb2JqZWN0IHdvdWxkIGF1dG9tYXRpY2FsbHkgYWZmZWN0IHRoZSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCogb2JqZWN0IHN0b3JlZAorLy8gYW5kIGFsbCBjaGFuZ2VzIHRvIHRoYXQgb2JqZWN0
IHdvdWxkIGF1dG9tYXRpY2FsbHkgYWZmZWN0IHRoZSBBZmZpbmVUcmFuc2Zvcm0qIG9iamVjdCBz
dG9yZWQKIC8vIGluIHRoZSBTVkdUcmFuc2Zvcm0gb2JqZWN0LiBGb3IgdGhlIHNha2Ugb2YgZWZm
aWNpZW5jeSBhbmQgbWVtb3J5IHdlIGRvbid0IHBhc3MgYXJvdW5kIGFueQogLy8gcHJpbWl0aXZl
IHZhbHVlcyBhcyBwb2ludGVycywgc28gYSBjdXN0b20gSlMgd3JhcHBlciBvYmplY3QgaXMgbmVl
ZGVkIGZvciBhbGwgU1ZHIHR5cGVzLCB0aGF0CiAvLyBhcmUgaW50ZXJuYWxseSByZXByZXNlbnRl
ZCBieSBQT0QgdHlwZXMgKFNWR1JlY3QgPC0+IEZsb2F0UmVjdCwgU1ZHUG9pbnQgPC0+IEZsb2F0
UG9pbnQsIC4uLikuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTgzNiw3ICsxODM2LDcgQEAgbXkg
JW5hdGl2ZVR5cGUgPSAoCiAgICAgIk5vZGVGaWx0ZXIiID0+ICJSZWZQdHI8Tm9kZUZpbHRlcj4i
LAogICAgICJTVkdBbmdsZSIgPT4gIlNWR0FuZ2xlIiwKICAgICAiU1ZHTGVuZ3RoIiA9PiAiU1ZH
TGVuZ3RoIiwKLSAgICAiU1ZHTWF0cml4IiA9PiAiVHJhbnNmb3JtYXRpb25NYXRyaXgiLAorICAg
ICJTVkdNYXRyaXgiID0+ICJBZmZpbmVUcmFuc2Zvcm0iLAogICAgICJTVkdOdW1iZXIiID0+ICJm
bG9hdCIsCiAgICAgIlNWR1BhaW50VHlwZSIgPT4gIlNWR1BhaW50OjpTVkdQYWludFR5cGUiLAog
ICAgICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIiA9PiAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyIs
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBt
CShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yT2JqQy5wbQkod29ya2luZyBjb3B5KQpAQCAtNTc4LDcgKzU3OCw3IEBAIHN1YiBBZGRJbmNs
dWRlc0ZvclR5cGUKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIlNWR01hdHJpeCIpIHsKLSAg
ICAgICAgJGltcGxJbmNsdWRlc3siVHJhbnNmb3JtYXRpb25NYXRyaXguaCJ9ID0gMTsKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siQWZmaW5lVHJhbnNmb3JtLmgifSA9IDE7CiAgICAgICAgICRpbXBs
SW5jbHVkZXN7IkRPTVNWR01hdHJpeEludGVybmFsLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5j
bHVkZXN7IlNWR0V4Y2VwdGlvbi5oIn0gPSAxOwogICAgICAgICByZXR1cm47CkBAIC0xNDI2LDgg
KzE0MjYsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAjIEZJWE1FISBXZSBuZWVkIFtDdXN0b21dIHN1cHBvcnQgZm9yIE9iakMsIHRv
IG1vdmUgdGhlc2UgaGFja3MgaW50byBET01TVkdMZW5ndGgvTWF0cml4Q3VzdG9tLm1tCi0gICAg
ICAgICAgICBteSAkc3ZnTWF0cml4Um90YXRlRnJvbVZlY3RvciA9ICgkcG9kVHlwZSBhbmQgJHBv
ZFR5cGUgZXEgIlRyYW5zZm9ybWF0aW9uTWF0cml4IiBhbmQgJGZ1bmN0aW9uTmFtZSBlcSAicm90
YXRlRnJvbVZlY3RvciIpOwotICAgICAgICAgICAgbXkgJHN2Z01hdHJpeEludmVyc2UgPSAoJHBv
ZFR5cGUgYW5kICRwb2RUeXBlIGVxICJUcmFuc2Zvcm1hdGlvbk1hdHJpeCIgYW5kICRmdW5jdGlv
bk5hbWUgZXEgImludmVyc2UiKTsKKyAgICAgICAgICAgIG15ICRzdmdNYXRyaXhSb3RhdGVGcm9t
VmVjdG9yID0gKCRwb2RUeXBlIGFuZCAkcG9kVHlwZSBlcSAiQWZmaW5lVHJhbnNmb3JtIiBhbmQg
JGZ1bmN0aW9uTmFtZSBlcSAicm90YXRlRnJvbVZlY3RvciIpOworICAgICAgICAgICAgbXkgJHN2
Z01hdHJpeEludmVyc2UgPSAoJHBvZFR5cGUgYW5kICRwb2RUeXBlIGVxICJBZmZpbmVUcmFuc2Zv
cm0iIGFuZCAkZnVuY3Rpb25OYW1lIGVxICJpbnZlcnNlIik7CiAgICAgICAgICAgICBteSAkc3Zn
TGVuZ3RoQ29udmVydFRvU3BlY2lmaWVkVW5pdHMgPSAoJHBvZFR5cGUgYW5kICRwb2RUeXBlIGVx
ICJTVkdMZW5ndGgiIGFuZCAkZnVuY3Rpb25OYW1lIGVxICJjb252ZXJ0VG9TcGVjaWZpZWRVbml0
cyIpOwogCiAgICAgICAgICAgICBwdXNoKEBwYXJhbWV0ZXJOYW1lcywgImVjIikgaWYgJHJhaXNl
c0V4Y2VwdGlvbnMgYW5kICEoJHN2Z01hdHJpeFJvdGF0ZUZyb21WZWN0b3IgfHwgJHN2Z01hdHJp
eEludmVyc2UpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTIxMzAsNyArMjEzMCw3IEBAIHN1YiBH
ZXROYXRpdmVUeXBlRm9yQ29udmVyc2lvbnMKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogICAgIHJl
dHVybiAiRmxvYXRSZWN0IiBpZiAkdHlwZSBlcSAiU1ZHUmVjdCI7CiAgICAgcmV0dXJuICJGbG9h
dFBvaW50IiBpZiAkdHlwZSBlcSAiU1ZHUG9pbnQiOwotICAgIHJldHVybiAiVHJhbnNmb3JtYXRp
b25NYXRyaXgiIGlmICR0eXBlIGVxICJTVkdNYXRyaXgiOworICAgIHJldHVybiAiQWZmaW5lVHJh
bnNmb3JtIiBpZiAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKICAgICByZXR1cm4gImZsb2F0IiBpZiAk
dHlwZSBlcSAiU1ZHTnVtYmVyIjsKICAgICByZXR1cm4gJHR5cGU7CiB9CkBAIC0yMzg0LDcgKzIz
ODQsNyBAQCBzdWIgR2V0TmF0aXZlVHlwZQogICAgIHJldHVybiAiUmFuZ2U6OkNvbXBhcmVIb3ci
IGlmICR0eXBlIGVxICJDb21wYXJlSG93IjsKICAgICByZXR1cm4gIkZsb2F0UmVjdCIgaWYgJHR5
cGUgZXEgIlNWR1JlY3QiOwogICAgIHJldHVybiAiRmxvYXRQb2ludCIgaWYgJHR5cGUgZXEgIlNW
R1BvaW50IjsKLSAgICByZXR1cm4gIlRyYW5zZm9ybWF0aW9uTWF0cml4IiBpZiAkdHlwZSBlcSAi
U1ZHTWF0cml4IjsKKyAgICByZXR1cm4gIkFmZmluZVRyYW5zZm9ybSIgaWYgJHR5cGUgZXEgIlNW
R01hdHJpeCI7CiAgICAgcmV0dXJuICJTVkdUcmFuc2Zvcm0iIGlmICR0eXBlIGVxICJTVkdUcmFu
c2Zvcm0iOwogICAgIHJldHVybiAiU1ZHTGVuZ3RoIiBpZiAkdHlwZSBlcSAiU1ZHTGVuZ3RoIjsK
ICAgICByZXR1cm4gIlNWR0FuZ2xlIiBpZiAkdHlwZSBlcSAiU1ZHQW5nbGUiOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEluZGV4LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEluZGV4LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwNiw3ICs2MDYsNyBAQCBzdGF0aWMgY29uc3Qg
aW50IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hCiAgICAgVihTVkdMRU5HVEgsIFNWR0xlbmd0aCkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihTVkdQ
UkVTRVJWRUFTUEVDVFJBVElPLCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKSAgICAgICAgICAgICAg
ICAgICBcCiAgICAgVihTVkdUUkFOU0ZPUk0sIFNWR1RyYW5zZm9ybSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVihTVkdNQVRSSVgsIFRyYW5zZm9ybWF0aW9u
TWF0cml4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVihTVkdNQVRS
SVgsIEFmZmluZVRyYW5zZm9ybSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgVihTVkdOVU1CRVIsIGZsb2F0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihTVkdQT0lOVCwgRmxvYXRQb2ludCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihTVkdSRUNULCBG
bG9hdFJlY3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdN
YXRyaXhDdXN0b20uY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgPGNvbmZpZy5oPgogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogCiAj
aW5jbHVkZSAiU1ZHRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCkBAIC01MCwx
OSArNTAsMTkgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U1ZHTWF0cml4OjptdWx0aQogICAg
IGlmICghVjhTVkdNYXRyaXg6Okhhc0luc3RhbmNlKGFyZ3NbMF0pKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcigic2Vjb25kTWF0cml4IGFyZ3VtZW50IHdhcyBub3QgYSBTVkdNYXRyaXgiKTsK
IAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG0xID0gKlY4U1ZHUE9EVHlwZVdyYXBwZXI8VHJh
bnNmb3JtYXRpb25NYXRyaXg+Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtMiA9ICpWOFNWR1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0
cml4Pjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIG0xID0gKlY4U1ZHUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNm
b3JtPjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG0yID0g
KlY4U1ZHUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6dG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CiAKLSAgICBSZWZQdHI8VjhTVkdTdGF0aWNQ
T0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gPiB3cmFwcGVyID0gVjhTVkdTdGF0
aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShtMS5tdWx0TGVm
dChtMikpOworICAgIFJlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5z
Zm9ybT4gPiB3cmFwcGVyID0gVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zv
cm0+OjpjcmVhdGUobTEubXVsdExlZnQobTIpKTsKICAgICByZXR1cm4gdG9WOCh3cmFwcGVyLmdl
dCgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U1ZHTWF0cml4OjppbnZlcnNlQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5T
VkdNYXRyaXguaW52ZXJzZSgpIik7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0g
KlY4U1ZHUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+Ojp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gKlY4U1ZHUE9EVHlwZVdy
YXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVzdWx0ID0gbWF0
cml4LmludmVyc2UoKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcmVzdWx0ID0gbWF0cml4LmludmVy
c2UoKTsKIAogICAgIGlmICghbWF0cml4LmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICBlYyA9IFNW
R0V4Y2VwdGlvbjo6U1ZHX01BVFJJWF9OT1RfSU5WRVJUQUJMRTsKQEAgLTcyLDE4ICs3MiwxOCBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTVkdNYXRyaXg6OmludmVyCiAgICAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9CiAKLSAgICBSZWZQdHI8VjhTVkdTdGF0
aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gPiB3cmFwcGVyID0gVjhTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShyZXN1bHQp
OworICAgIFJlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT4g
PiB3cmFwcGVyID0gVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+Ojpj
cmVhdGUocmVzdWx0KTsKICAgICByZXR1cm4gdG9WOCh3cmFwcGVyLmdldCgpKTsKIH0KIAogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4U1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5TVkdNYXRy
aXgucm90YXRlRnJvbVZlY3RvcigpIik7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
ID0gKlY4U1ZHUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+Ojp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gKlY4U1ZHUE9EVHlw
ZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgZmxvYXQgeCA9IHRvRmxvYXQoYXJnc1swXSk7CiAg
ICAgZmxvYXQgeSA9IHRvRmxvYXQoYXJnc1sxXSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cmVzdWx0ID0gbWF0cml4OworICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQgPSBtYXRyaXg7CiAg
ICAgcmVzdWx0LnJvdGF0ZUZyb21WZWN0b3IoeCwgeSk7CiAgICAgaWYgKHggPT0gMC4wIHx8IHkg
PT0gMC4wKQogICAgICAgICBlYyA9IFNWR0V4Y2VwdGlvbjo6U1ZHX0lOVkFMSURfVkFMVUVfRVJS
OwpAQCAtOTMsNyArOTMsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTVkdNYXRyaXg6OnJv
dGF0CiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9CiAKLSAg
ICBSZWZQdHI8VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4g
PiB3cmFwcGVyID0gVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJp
eD46OmNyZWF0ZShyZXN1bHQpOworICAgIFJlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVy
PEFmZmluZVRyYW5zZm9ybT4gPiB3cmFwcGVyID0gVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxB
ZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUocmVzdWx0KTsKICAgICByZXR1cm4gdG9WOCh3cmFwcGVy
LmdldCgpKTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lv
biA1NDQ5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNywxMiArMzM3LDEyIEBAIEltYWdlQnVmZmVyKiBIVE1MQ2FudmFzRWxlbWVu
dDo6YnVmZmVyKCkKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIH0KICAgICAKLVRy
YW5zZm9ybWF0aW9uTWF0cml4IEhUTUxDYW52YXNFbGVtZW50OjpiYXNlVHJhbnNmb3JtKCkgY29u
c3QKK0FmZmluZVRyYW5zZm9ybSBIVE1MQ2FudmFzRWxlbWVudDo6YmFzZVRyYW5zZm9ybSgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKG1fY3JlYXRlZEltYWdlQnVmZmVyKTsKICAgICBGbG9hdFNpemUg
dW5zY2FsZWRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKICAgICBJbnRTaXplIHNpemUgPSBjb252
ZXJ0TG9naWNhbFRvRGV2aWNlKHVuc2NhbGVkU2l6ZSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAgICAgaWYgKHNp
emUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgpKQogICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25V
bmlmb3JtKHNpemUud2lkdGgoKSAvIHVuc2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
IC8gdW5zY2FsZWRTaXplLmhlaWdodCgpKTsKICAgICB0cmFuc2Zvcm0ubXVsdGlwbHkobV9pbWFn
ZUJ1ZmZlci0+YmFzZVRyYW5zZm9ybSgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIEhUTUxDYW52YXNFbGVtZW50
X2gKICNkZWZpbmUgSFRNTENhbnZhc0VsZW1lbnRfaAogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lmIEVOQUJMRSgzRF9DQU5WQVMp
ICAgIApAQCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0T2JzZXJ2ZXIo
Q2FudmFzT2JzZXJ2ZXIqIG9ic2VydmVyKSB7IG1fb2JzZXJ2ZXIgPSBvYnNlcnZlcjsgfQogCi0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZVRyYW5zZm9ybSgpIGNvbnN0OworICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICBDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgp
OyB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkocmV2
aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMyBAQCBGbG9hdFBvaW50OjpGbG9hdFBvaW50
KGNvbnN0IEludFBvaW50JiBwCiB7CiB9CiAKK0Zsb2F0UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4
VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSBjb25zdAoreworICAg
IGRvdWJsZSBuZXdYLCBuZXdZOworICAgIHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nhc3Q8ZG91Ymxl
PihtX3gpLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1feSksIG5ld1gsIG5ld1kpOworICAgIHJldHVy
biBuYXJyb3dQcmVjaXNpb24obmV3WCwgbmV3WSk7Cit9CisKIEZsb2F0UG9pbnQgRmxvYXRQb2lu
dDo6bWF0cml4VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0p
IGNvbnN0CiB7CiAgICAgZG91YmxlIG5ld1gsIG5ld1k7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBz
dHJ1Y3QgU2tQb2ludDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIEludFBvaW50OwogCkBA
IC0xMDYsNiArMTA3LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBGbG9hdFBvaW50IG1hdHJp
eFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OworICAgIEZsb2F0
UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIGZsb2F0IG1feCwgbV95OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDcgKzQ3LDcgQEAgdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleAogICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAotdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAordm9pZCBHZW5lcmF0
ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQWxsb3cgdGhlIGdlbmVy
YXRvciB0byBwcm92aWRlIHZpc3VhbGx5LWVxdWl2YWxlbnQgdGlsaW5nIHBhcmFtZXRlcnMgZm9y
IGJldHRlciBwZXJmb3JtYW5jZS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2Vu
ZXJhdGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dl
bmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1
YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIHZpcnR1
YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAorICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCk7CiAgICAgCiAgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0
b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnQuY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTQgKzE4OSwx
NCBAQCB2b2lkIEdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTCiAgICAgbV9zcHJl
YWRNZXRob2QgPSBzcHJlYWRNZXRob2Q7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OnNldEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdyYWRpZW50U3BhY2VU
cmFuc2Zvcm1hdGlvbikKK3ZvaWQgR3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiB7IAog
ICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID0gZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uOwogICAgIHNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24pOwogfQogCiAjaWYgIVBMQVRGT1JNKFNLSUEpCi12b2lkIEdyYWRp
ZW50OjpzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKQordm9pZCBHcmFkaWVudDo6c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNm
b3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpCiB7CiB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTAg
QEAKICNpZm5kZWYgR3JhZGllbnRfaAogI2RlZmluZSBHcmFkaWVudF9oCiAKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTEwNywxNCArMTA3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0
aG9kKTsKICAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgeyByZXR1
cm4gbV9zcHJlYWRNZXRob2Q7IH0KLSAgICAgICAgdm9pZCBzZXRHcmFkaWVudFNwYWNlVHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b24pOworICAgICAgICB2b2lkIHNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwogICAgICAgICAvLyBRdCBh
bmQgQ0cgdHJhbnNmb3JtIHRoZSBncmFkaWVudCBhdCBkcmF3IHRpbWUKLSAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpIHsgcmV0dXJuIG1fZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybWF0aW9uOyB9CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247
IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxl
ZERyYXdpbmcoSW50U2l6ZSYgc2l6ZSwgRmxvYXRSZWN0JiBzcmNSZWN0KTsKIAotICAgICAgICB2
b2lkIHNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKKyAgICAgICAgdm9pZCBzZXRQ
bGF0Zm9ybUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwogCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIHZv
aWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kik7CkBAIC0xMzgsNyArMTM4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBtdXRhYmxlIGJvb2wgbV9zdG9wc1NvcnRlZDsKICAgICAgICAg
bXV0YWJsZSBpbnQgbV9sYXN0U3RvcDsKICAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9z
cHJlYWRNZXRob2Q7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9ncmFkaWVudFNwYWNl
VHJhbnNmb3JtYXRpb247CiAKICAgICAgICAgUGxhdGZvcm1HcmFkaWVudCBtX2dyYWRpZW50Owog
ICAgIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBQYXRoOwogICAgIGNsYXNzIFBhdHRlcm47CiAgICAgY2xhc3Mg
VGV4dFJ1bjsKLSAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogICAgIC8vIFRoZXNl
IGJpdHMgY2FuIGJlIE9SZWQgdG9nZXRoZXIgZm9yIGEgdG90YWwgb2YgOCBwb3NzaWJsZSB0ZXh0
IGRyYXdpbmcgbW9kZXMuCiAgICAgY29uc3QgaW50IGNUZXh0SW52aXNpYmxlID0gMDsKQEAgLTMw
NCwxMCArMzAzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0VVJM
Rm9yUmVjdChjb25zdCBLVVJMJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgICAgIHZvaWQgY29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBnZXRDVE0oKSBjb25zdDsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdldEFmZmluZUNUTSgp
IGNvbnN0OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3Q7CiAKICNpZiBP
UyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKQogICAgICAgICB2b2lkIHNldEJpdG1hcChQYXNzUmVm
UHRyPFNoYXJlZEJpdG1hcD4pOwpAQCAtMzIwLDcgKzMxNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBkcmF3Rm9jdXNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpOwogICAg
ICAgICB2b2lkIHBhaW50VGV4dEZpZWxkKGNvbnN0IEludFJlY3QmIHJlY3QsIHVuc2lnbmVkIHN0
YXRlKTsKICAgICAgICAgdm9pZCBkcmF3Qml0bWFwKFNoYXJlZEJpdG1hcCosIGNvbnN0IEludFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wKTsKLSAgICAgICAgdm9pZCBkcmF3Qml0bWFwUGF0dGVybihTaGFyZWRCaXRtYXAq
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdT
b3VyY2VTaXplKTsKKyAgICAgICAgdm9pZCBkcmF3Qml0bWFwUGF0dGVybihTaGFyZWRCaXRtYXAq
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNl
U2l6ZSk7CiAgICAgICAgIHZvaWQgZHJhd0ljb24oSElDT04gaWNvbiwgY29uc3QgSW50UmVjdCYg
ZHN0UmVjdCwgVUlOVCBmbGFncyk7CiAgICAgICAgIEhEQyBnZXRXaW5kb3dzQ29udGV4dChjb25z
dCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCA9IGZhbHNlLCBib29sIG1heUNyZWF0
ZUJpdG1hcCA9IHRydWUpOyAvLyBUaGUgcGFzc2VkIGluIHJlY3QgaXMgdXNlZCB0byBjcmVhdGUg
YSBiaXRtYXAgZm9yIGNvbXBvc2l0aW5nIGluc2lkZSB0cmFuc3BhcmVuY3kgbGF5ZXJzLgogICAg
ICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMsIGNvbnN0IEludFJlY3QmLCBib29s
IHN1cHBvcnRBbHBoYUJsZW5kID0gZmFsc2UsIGJvb2wgbWF5Q3JlYXRlQml0bWFwID0gdHJ1ZSk7
ICAgIC8vIFRoZSBwYXNzZWQgaW4gSERDIHNob3VsZCBiZSB0aGUgb25lIGhhbmRlZCBiYWNrIGJ5
IGdldFdpbmRvd3NDb250ZXh0LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJ
KHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbWFnZS5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTEzNiw3
ICsxMzYsNyBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXR0ZXJuVHJh
bnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lk
dGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNm
b3JtID0gQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCksIHNj
YWxlLmhlaWdodCgpKTsKICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoRmxvYXRQb2ludCgpLCBpbnRy
aW5zaWNUaWxlU2l6ZSk7ICAgIAogICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBvbmVUaWxlUmVjdC5sb2NhdGlvbigpLCBzdHlsZUNvbG9yU3BhY2UsIG9w
LCBkZXN0UmVjdCk7CiAgICAgCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1Rp
bGVkKEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICB2UnVsZSA9IFJlcGVhdFRpbGU7CiAKICAg
ICBGbG9hdFNpemUgc2NhbGUgPSBjYWxjdWxhdGVQYXR0ZXJuU2NhbGUoZHN0UmVjdCwgc3JjUmVj
dCwgaFJ1bGUsIHZSdWxlKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXR0ZXJuVHJhbnNm
b3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgo
KSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3Jt
ID0gQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCksIHNjYWxl
LmhlaWdodCgpKTsKIAogICAgIC8vIFdlIHdhbnQgdG8gY29uc3RydWN0IHRoZSBwaGFzZSBzdWNo
IHRoYXQgdGhlIHBhdHRlcm4gaXMgY2VudGVyZWQgKHdoZW4gc3RyZXRjaCBpcyBub3QKICAgICAv
LyBzZXQgZm9yIGEgcGFydGljdWxhciBydWxlKS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIGNsYXNzIEZsb2F0U2l6ZTsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFN0cmluZzsK
LWNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogCiAv
LyBUaGlzIGNsYXNzIGdldHMgbm90aWZpZWQgd2hlbiBhbiBpbWFnZSBjcmVhdGVzIG9yIGRlc3Ry
b3lzIGRlY29kZWQgZnJhbWVzIGFuZCB3aGVuIGl0IGFkdmFuY2VzIGFuaW1hdGlvbiBmcmFtZXMu
CiBjbGFzcyBJbWFnZU9ic2VydmVyOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGJvb2wgbWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIENvbG9yIHNvbGlkQ29sb3IoKSBjb25zdCB7IHJldHVybiBDb2xvcigpOyB9
CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRl
cm5UcmFuc2Zvcm0sCisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAjaWZuZGVmIEltYWdlQnVmZmVyX2gKICNkZWZpbmUgSW1hZ2VCdWZmZXJfaAog
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKQEAgLTg0LDExICs4NCwxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSBjb25zdDsKICNpZiAhUExBVEZPUk0oQ0cpCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOyB9
CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKCk7IH0KICAgICAgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKElt
YWdlQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBJbWFnZUNvbG9yU3BhY2UgZHN0Q29sb3JTcGFj
ZSk7CiAgICAgICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3Rv
cjxpbnQ+Jik7CiAjZWxzZQotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBiYXNlVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwgMCwgMCwgLTEsIDAs
IG1fc2l6ZS5oZWlnaHQoKSk7IH0KKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fc2l6
ZS5oZWlnaHQoKSk7IH0KICNlbmRpZgogICAgIHByaXZhdGU6CiAgICAgICAgIEltYWdlQnVmZmVy
RGF0YSBtX2RhdGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gNTQ0
OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNyArNzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFwcGxpZXI7
Ci0gICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKICAgICBlbnVtIFdpbmRSdWxlIHsK
ICAgICAgICAgUlVMRV9OT05aRVJPID0gMCwKQEAgLTE0Nyw3ICsxNDYsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1
bmN0aW9uKSBjb25zdDsKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7Ci0gICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
Jik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIgbV9wYXRoOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCShyZXZpc2lvbiA1NDQ5MykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDcgQEAgUGF0dGVybjo6flBhdHRlcm4oKQogICAgIHBsYXRmb3JtRGVzdHJveSgp
OwogfQogCi12b2lkIFBhdHRlcm46OnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pCit2b2lkIFBhdHRl
cm46OnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5TcGFjZVRyYW5zZm9ybWF0aW9uKQogewogICAgIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRp
b24gPSBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBzZXRQbGF0Zm9ybVBhdHRlcm5T
cGFjZVRyYW5zZm9ybSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHJl
dmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMSBAQAogI2lmbmRlZiBQYXR0ZXJuX2gKICNkZWZp
bmUgUGF0dGVybl9oCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKwogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2lm
IFBMQVRGT1JNKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dQYXR0ZXJuKiBDR1BhdHRlcm5SZWY7CkBA
IC02MSwzOSArNjIsNDAgQEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVBhdHRlcm5QdHI7CiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OwotICAgIGNsYXNzIEltYWdlOwogCi0gICAgY2xhc3MgUGF0dGVybiA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFBhdHRlcm4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBh
dHRlcm4+IGNyZWF0ZShJbWFnZSogdGlsZUltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0
WSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXR0ZXJuKHRp
bGVJbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkpOwotICAgICAgICB9Ci0gICAgICAgIHZpcnR1YWwg
flBhdHRlcm4oKTsKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEltYWdlOworCitjbGFz
cyBQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8UGF0dGVybj4geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBhdHRlcm4+IGNyZWF0ZShJbWFnZSogdGlsZUltYWdlLCBib29sIHJl
cGVhdFgsIGJvb2wgcmVwZWF0WSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UGF0dGVybih0aWxlSW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpKTsKKyAgICB9CisgICAgdmlydHVh
bCB+UGF0dGVybigpOwogCi0gICAgICAgIEltYWdlKiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX3RpbGVJbWFnZS5nZXQoKTsgfQorICAgIEltYWdlKiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3RpbGVJbWFnZS5nZXQoKTsgfQogCi0gICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95
KCk7CisgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgICAgICAvLyBQYXR0ZXJuIHNw
YWNlIGlzIGFuIGFic3RyYWN0IHNwYWNlIHRoYXQgbWFwcyB0byB0aGUgZGVmYXVsdCB1c2VyIHNw
YWNlIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiAndXNlclNwYWNlVHJhbnNmb3JtYXRpb24nIAorICAg
IC8vIFBhdHRlcm4gc3BhY2UgaXMgYW4gYWJzdHJhY3Qgc3BhY2UgdGhhdCBtYXBzIHRvIHRoZSBk
ZWZhdWx0IHVzZXIgc3BhY2UgYnkgdGhlIHRyYW5zZm9ybWF0aW9uICd1c2VyU3BhY2VUcmFuc2Zv
cm1hdGlvbicgCiAjaWYgUExBVEZPUk0oU0tJQSkKLSAgICAgICAgUGxhdGZvcm1QYXR0ZXJuUHRy
IHBsYXRmb3JtUGF0dGVybihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdXNlclNwYWNlVHJh
bnNmb3JtYXRpb24pOworICAgIFBsYXRmb3JtUGF0dGVyblB0ciBwbGF0Zm9ybVBhdHRlcm4oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbik7CiAjZWxzZQotICAg
ICAgICBQbGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CisgICAgUGxh
dGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdDsKICNlbmRpZgotICAgICAgICB2b2lk
IHNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0
dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pOwotICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGF0dGVy
blNwYWNlVHJhbnNmb3JtKCk7CisgICAgdm9pZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbik7CisgICAgdm9p
ZCBzZXRQbGF0Zm9ybVBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpOwogCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgUGF0dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKK3ByaXZh
dGU6CisgICAgUGF0dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKIAot
ICAgICAgICBSZWZQdHI8SW1hZ2U+IG1fdGlsZUltYWdlOwotICAgICAgICBib29sIG1fcmVwZWF0
WDsKLSAgICAgICAgYm9vbCBtX3JlcGVhdFk7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgICAgIFBsYXRmb3JtUGF0dGVyblB0
ciBtX3BhdHRlcm47Ci0gICAgfTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1fdGlsZUltYWdlOworICAg
IGJvb2wgbV9yZXBlYXRYOworICAgIGJvb2wgbV9yZXBlYXRZOworICAgIEFmZmluZVRyYW5zZm9y
bSBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOworICAgIFBsYXRmb3JtUGF0dGVyblB0ciBt
X3BhdHRlcm47Cit9OwogCiB9IC8vbmFtZXNwYWNlCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwxMyArMjksMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250
LmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVk
ZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
CiAjZGVmaW5lIFNZTlRIRVRJQ19PQkxJUVVFX0FOR0xFIDE0CiAKQEAgLTEzNiw3ICsxMzYsNyBA
QCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgICAgICAgICAg
ICAgY2Fpcm9fcG9wX2dyb3VwX3RvX3NvdXJjZShjcik7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSBpZiAoY29udGV4dC0+ZmlsbFBhdHRlcm4oKSkgewotICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggYWZmaW5lOworICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmlu
ZTsKICAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIGNvbnRleHQtPmZpbGxQYXR0ZXJu
KCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKTsKICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRBbHBoYSgpIDwgMS4wZikgewogICAgICAgICAgICAgICAgIGNhaXJvX3B1c2hfZ3Jv
dXAoY3IpOwpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQqIGMKICAgICAgICAgICAgICAgICBjYWlyb19wb3BfZ3JvdXBfdG9fc291cmNlKGNy
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LT5zdHJva2VQYXR0
ZXJuKCkpIHsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFmZmluZTsKKyAgICAg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CiAgICAgICAgICAgICBjYWlyb19zZXRfc291
cmNlKGNyLCBjb250ZXh0LT5zdHJva2VQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihh
ZmZpbmUpKTsKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRBbHBoYSgpIDwgMS4wZikgewog
ICAgICAgICAgICAgICAgIGNhaXJvX3B1c2hfZ3JvdXAoY3IpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAK
ICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
IAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNzgsNyArNzcsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGxhdGZvcm1GaWxsKEdyYXBoCiB7CiAgICAgY2Fpcm9f
c2F2ZShjcik7CiAgICAgaWYgKGdjcC0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggYWZmaW5lOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5l
OwogICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBnY3AtPnN0YXRlLmZpbGxQYXR0ZXJuLT5j
cmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSk7CiAgICAgfSBlbHNlIGlmIChnY3AtPnN0YXRl
LmZpbGxHcmFkaWVudCkKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ2NwLT5zdGF0ZS5m
aWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CkBAIC05Myw3ICs5Miw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZShHcmEKIHsKICAgICBjYWlyb19zYXZlKGNy
KTsKICAgICBpZiAoZ2NwLT5zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGFmZmluZTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKICAg
ICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ2NwLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSk7CiAgICAgfSBlbHNlIGlmIChnY3AtPnN0YXRlLnN0
cm9rZUdyYWRpZW50KQogICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBnY3AtPnN0YXRlLnN0
cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwpAQCAtMjA5LDE1ICsyMDgsNyBAQCBH
cmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogICAgIGRlbGV0ZSBtX2RhdGE7CiB9
CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QK
LXsKLSAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX21hdHJp
eF90IG07Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwotICAgIHJldHVybiBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsKLX0KLQot
QWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK0Fm
ZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgY2Fp
cm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjYWlyb19tYXRyaXhfdCBtOwpAQCAt
ODAwLDE3ICs3OTEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25z
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNh
dENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX3QqIGNyID0g
bV9kYXRhLT5jcjsKLSAgICBjb25zdCBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSBjYWlyb19tYXRy
aXhfdCh0cmFuc2Zvcm0pOwotICAgIGNhaXJvX3RyYW5zZm9ybShjciwgJm1hdHJpeCk7Ci0gICAg
bV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEy
ICszMCwxMiBAQAogCiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiAKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQog
Ci12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJu
VHJhbnNmb3JtLAordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IG5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BhdGhDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QYXRoQ2Fpcm8uY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NiBAQAogI2luY2x1ZGUgIlBhdGguaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiQ2Fpcm9QYXRoLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBA
IC0zMzUsMTQgKzMzNCw2IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5z
Zm8KICAgICBjYWlyb190cmFuc2Zvcm0obV9jciwgJmNfbWF0cml4KTsKIH0KIAotdm9pZCBQYXRo
Ojp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zKQotewotICAgIGNh
aXJvX3QqIG1fY3IgPSBwbGF0Zm9ybVBhdGgoKS0+bV9jcjsKLSAgICBjYWlyb19tYXRyaXhfdCBj
X21hdHJpeCA9IGNhaXJvX21hdHJpeF90KHRyYW5zKTsKLSAgICBjYWlyb19tYXRyaXhfaW52ZXJ0
KCZjX21hdHJpeCk7Ci0gICAgY2Fpcm9fdHJhbnNmb3JtKG1fY3IsICZjX21hdHJpeCk7Ci19Ci0K
IFN0cmluZyBQYXRoOjpkZWJ1Z1N0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKGlzRW1wdHkoKSkK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWly
by5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXR0ZXJuQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTQgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAKKyNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jYWlyb19wYXR0ZXJuX3QqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0CitjYWlyb19wYXR0ZXJuX3Qq
IFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBj
b25zdAogewogICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IHRpbGVJbWFnZSgpLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghc3VyZmFjZSkKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShy
ZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAi
S1VSTC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Jp
dG1hcENvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZDb250ZXh0Lmg+CkBA
IC05NzQsMjcgKzk3MywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0
IEFmCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5
ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0Q29uY2F0Q1RNKHBsYXRmb3JtQ29u
dGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0g
ICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFs
c2U7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSgp
IGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAog
ewogICAgIENHQWZmaW5lVHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0odC5hLCB0LmIsIHQuYywgdC5kLCB0
LnR4LCB0LnR5KTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0Ojpn
ZXRDVE0oKSBjb25zdAotewotICAgIENHQWZmaW5lVHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRD
VE0ocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0
LmEsIHQuYiwgdC5jLCB0LmQsIHQudHgsIHQudHkpOwotfQotCiBGbG9hdFJlY3QgR3JhcGhpY3ND
b250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBz
cGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVDRy5oCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByb3RhdGUoZmxvYXQpIHt9CiAgICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpIHt9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKSB7fQogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcigpIHt9CiAgICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIHt9CiAjZW5kaWYKQEAgLTg2LDcgKzg1LDYgQEAg
cHVibGljOgogICAgIHZvaWQgcm90YXRlKGZsb2F0KTsKICAgICB2b2lkIHRyYW5zbGF0ZShmbG9h
dCwgZmxvYXQpOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwot
ICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdm9p
ZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKCkgeyBtX3RyYW5zcGFyZW5jeUNvdW50Kys7IH0KICAg
ICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgeyBtX3RyYW5zcGFyZW5jeUNvdW50LS07IH0K
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lv
biA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIFBMQVRGT1JNKENHKQogCi0jaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMg
dm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluCiAgICAgQ0dDb250ZXh0RHJhd0ltYWdl
KGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZs
b2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGlt
YWdlKSkpLCBpbWFnZSk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKCFu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0aENHLmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNp
ZiBQTEFURk9STShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9B
cHBsaWNhdGlvblNlcnZpY2VzLmg+CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCkBAIC0zNTYsMTUgKzM1NSw2IEBAIHZvaWQgUGF0aDo6dHJhbnNm
b3JtKGNvbnN0IEFmZmluZVRyYW5zZm8KICAgICBtX3BhdGggPSBwYXRoOwogfQogCi12b2lkIFBh
dGg6OnRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewot
ICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLSAgICBD
R0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1DRyA9IHRyYW5zZm9ybTsKLSAgICBDR1BhdGhBZGRQ
YXRoKHBhdGgsICZ0cmFuc2Zvcm1DRywgbV9wYXRoKTsKLSAgICBDR1BhdGhSZWxlYXNlKG1fcGF0
aCk7Ci0gICAgbV9wYXRoID0gcGF0aDsKLX0KLQogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ0cp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCShyZXZp
c2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlBhdHRlcm4uaCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMu
aD4KQEAgLTUwLDExICs1MCwxMSBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNr
KHZvaWQqCiAgICAgc3RhdGljX2Nhc3Q8SW1hZ2UqPihpbmZvKS0+ZGVyZWYoKTsKIH0KIAotQ0dQ
YXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0CitDR1BhdHRlcm5SZWYg
UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNl
clNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0CiB7CiAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRp
bGVJbWFnZSgpLT5yZWN0KCk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXR0ZXJuVHJh
bnNmb3JtID0gbV9wYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gcGF0dGVyblRyYW5zZm9ybSA9IG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb247CiAgICAg
cGF0dGVyblRyYW5zZm9ybS5tdWx0aXBseSh1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbik7CiAgICAg
cGF0dGVyblRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oMSwgLTEpOwogICAgIHBhdHRlcm5UcmFu
c2Zvcm0udHJhbnNsYXRlKDAsIC10aWxlUmVjdC5oZWlnaHQoKSk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1
LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBA
QAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1
ZGUgIlBlbi5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8
R3JhcGhpY3NEZWZzLmg+CiAjaW5jbHVkZSA8UmVnaW9uLmg+CiAjaW5jbHVkZSA8Vmlldy5oPgpA
QCAtMzkyLDE4ICszOTEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVm
ZmVyKAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGlj
c0NvbnRleHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3ND
b250ZXh0OjpnZXRDVE0oKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGlj
c0NvbnRleHQ6OmdldENUTSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCkBAIC00NjYsMTQgKzQ1OSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0o
Y29uc3QgQWYKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxk
QW50aWFsaWFzKGJvb2wgZW5hYmxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAJ
KHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFn
ZUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBjdHh0LT5yZXN0b3JlKCk7CiB9CiAK
LXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQordm9pZCBJbWFnZTo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHNyY1BvaW50LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0KQogewogICAgIC8vIEZJWE1FOiBmaW5pc2ggdGhpcyB0byBzdXBw
b3J0IGFsc28gcGhhc2VkIHBvc2l0aW9uIChzcmNQb2ludCkKICAgICBzdGFydEFuaW1hdGlvbigp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNw
cAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1Bh
dGhIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwxMSArMTUyLDYgQEAgdm9pZCBQYXRo
Ojp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmbwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogRmxvYXRSZWN0IFBhdGg6OnN0
cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5j
cHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxNCArMjEsMTQgQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xp
c3QuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKLQogI2luY2x1ZGUgIkdyYWRpZW50Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgotI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CiAjaW5j
bHVkZSA8UUZvbnRJbmZvPgpAQCAtNzksNyArNzksNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRlCiAgICAgICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0oY3R4LT5m
aWxsR3JhZGllbnQoKS0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgIHAt
PnNldFBlbihRUGVuKGJydXNoLCAwKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY3R4LT5maWxsUGF0
dGVybigpKSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZmZpbmU7CisgICAg
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwogICAgICAgICAgICAgcC0+c2V0UGVuKFFQ
ZW4oUUJydXNoKGN0eC0+ZmlsbFBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmlu
ZSkpLCAwKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcC0+c2V0UGVuKFFDb2xvcihj
dHgtPmZpbGxDb2xvcigpKSk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShjdHgt
PnN0cm9rZUdyYWRpZW50KCktPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgICAg
ICBwLT5zZXRQZW4oUVBlbihicnVzaCwgY3R4LT5zdHJva2VUaGlja25lc3MoKSkpOwogICAgICAg
ICB9IGVsc2UgaWYgKGN0eC0+c3Ryb2tlUGF0dGVybigpKSB7Ci0gICAgICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBhZmZpbmU7CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5l
OwogICAgICAgICAgICAgcC0+c2V0UGVuKFFQZW4oUUJydXNoKGN0eC0+c3Ryb2tlUGF0dGVybigp
LT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSksIGN0eC0+c3Ryb2tlVGhpY2tuZXNzKCkp
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBwLT5zZXRQZW4oUVBlbihRQ29sb3IoY3R4
LT5zdHJva2VDb2xvcigpKSwgY3R4LT5zdHJva2VUaGlja25lc3MoKSkpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJl
dmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlICJQ
YXRoLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlBlbi5oIgotI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CiAjaW5jbHVkZSA8
UURlYnVnPgpAQCAtMjc2LDIyICsyNzUsMTMgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdy
YXBoaWNzQ29udGV4dAogICAgIHJldHVybiBtX2RhdGEtPnAoKTsKIH0KIAotQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKK0FmZmluZVRyYW5zZm9y
bSBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgUVRyYW5zZm9ybSBtYXRy
aXgocGxhdGZvcm1Db250ZXh0KCktPmNvbWJpbmVkVHJhbnNmb3JtKCkpOwogICAgIHJldHVybiBB
ZmZpbmVUcmFuc2Zvcm0obWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMjEoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5tMjIoKSwgbWF0cml4LmR4KCksIG1h
dHJpeC5keSgpKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0Ojpn
ZXRDVE0oKSBjb25zdAotewotICAgIFFUcmFuc2Zvcm0gbWF0cml4KHBsYXRmb3JtQ29udGV4dCgp
LT5jb21iaW5lZFRyYW5zZm9ybSgpKTsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgo
bWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIDAsIG1hdHJpeC5tMTMoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIDAsIG1hdHJp
eC5tMjMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAg
ICAgICAgICAgIDAsIDEsICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIDAsIG1hdHJpeC5tMzMoKSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCiB7CiAgICAgbV9kYXRh
LT5wKCktPnNhdmUoKTsKQEAgLTY1MCw3ICs2NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFBhdGgoKQogICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4gfHwgbV9jb21t
b24tPnN0YXRlLmZpbGxHcmFkaWVudCB8fCBmaWxsQ29sb3IoKS5hbHBoYSgpKSB7CiAgICAgICAg
IGRyYXdGaWxsZWRTaGFkb3dQYXRoKHRoaXMsIHAsIHBhdGgpOwogICAgICAgICBpZiAobV9jb21t
b24tPnN0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBhZmZpbmU7CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwogICAgICAgICAg
ICAgcC0+ZmlsbFBhdGgocGF0aCwgUUJydXNoKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAgfSBlbHNlIGlmIChtX2Nv
bW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgICAgICBRQnJ1c2ggYnJ1c2goKm1f
Y29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CkBAIC02ODcs
NyArNjc3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgICAgICAg
ICAgcC0+c2V0V29ybGRUcmFuc2Zvcm0odCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fY29t
bW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBhZmZpbmU7CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwogICAgICAg
ICAgICAgcGVuLnNldEJydXNoKFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAgICAgIHAtPnNldFBlbihw
ZW4pOwogICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwpAQCAtNzI3LDcgKzcx
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBpZiAo
bV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuIHx8IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGll
bnQgfHwgZmlsbENvbG9yKCkuYWxwaGEoKSkgewogICAgICAgICBkcmF3Qm9yZGVybGVzc1JlY3RT
aGFkb3codGhpcywgcCwgcmVjdCk7CiAgICAgICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBh
dHRlcm4pIHsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFmZmluZTsKKyAgICAg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CiAgICAgICAgICAgICBwLT5maWxsUmVjdChy
ZWN0LCBRQnJ1c2gobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oYWZmaW5lKSkpOwogICAgICAgICB9IGVsc2UgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxs
R3JhZGllbnQpIHsKICAgICAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKQEAgLTEyMTMsMjQgKzEyMDMsNiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmCiAgICAgfQogfQogCi0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cnVl
KTsKLQotICAgIC8vIFRyYW5zZm9ybWF0aW9ucyB0byB0aGUgY29udGV4dCBzaG91bGRuJ3QgdHJh
bnNmb3JtIHRoZSBjdXJyZW50UGF0aC4KLSAgICAvLyBXZSBoYXZlIHRvIHVuZG8gZXZlcnkgY2hh
bmdlIG1hZGUgdG8gdGhlIGNvbnRleHQgZnJvbSB0aGUgY3VycmVudFBhdGgKLSAgICAvLyB0byBh
dm9pZCB3cm9uZyBkcmF3aW5ncy4KLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0
eSgpICYmIHRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgewotICAgICAgICBRVHJhbnNmb3JtIG1h
dHJpeCA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGgg
PSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4OwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUu
cGF0aFRyYW5zZm9ybS5tdWx0aXBseSh0cmFuc2Zvcm0pOwotICAgIH0KLX0KLQogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgS1VSTCYsIGNvbnN0IEludFJlY3QmKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VRdC5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9JbWFnZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDEyIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAorI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIKICNpbmNsdWRlICJxd2Vi
c2V0dGluZ3MuaCIKIApAQCAtOTMsNyArOTMsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzCiAgICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShsb2FkUmVzb3Vy
Y2VQaXhtYXAobmFtZSkpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgUVBpeG1hcCogZnJhbWVQaXhtYXAg
PSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9QYXRoUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvUGF0aFF0LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKICNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4K
ICNpbmNsdWRlIDxRU3RyaW5nPgpAQCAtMzg1LDExICszODQsNiBAQCB2b2lkIFBhdGg6OnRyYW5z
Zm9ybShjb25zdCBBZmZpbmVUcmFuc2ZvCiAgICAgbV9wYXRoID0gUVRyYW5zZm9ybSh0cmFuc2Zv
cm0pLm1hcChtX3BhdGgpOwogfQogCi12b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIG1fcGF0aCA9IFFUcmFuc2Zvcm0odHJh
bnNmb3JtKS5tYXAobV9wYXRoKTsKLX0KLQogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcAkocmV2aXNpb24g
NTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlBhdHRlcm4uaCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUUJydXNoIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3Jt
UGF0dGVybihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0CitRQnJ1c2ggUGF0dGVy
bjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0CiB7
CiAgICAgUVBpeG1hcCogcGl4bWFwID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CiAgICAgaWYgKCFwaXhtYXApCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0
KiBjb24KICAgICBjb250ZXh0LT5maWxsUmVjdChyZWN0KTsKIH0KIAotdm9pZCBHcmFkaWVudDo6
c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgpCit2b2lkIEdyYWRpZW50OjpzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCiB7CiAgICAgaWYgKG1fZ3JhZGll
bnQpCiAgICAgICAgIG1fZ3JhZGllbnQtPnNldExvY2FsTWF0cml4KG1fZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybWF0aW9uKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRT
a2lhLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgIlNr
Qml0bWFwLmgiCiAjaW5jbHVkZSAiU2tCbHVyRHJhd0xvb3Blci5oIgpAQCAtNDQ3LDEzICs0NDYs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmCiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT5jb25jYXQoYWZmaW5lKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgeGZvcm0pCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Y29uY2F0KHhmb3JtKTsKLX0KLQogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkQW50aWFs
aWFzKQpAQCAtODEzLDI2ICs4MDUsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3Vu
ZGVkUmVjdChjbwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0
aCwgcGFpbnQpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRBZmZp
bmVDVE0oKSBjb25zdAotewotICAgIGNvbnN0IFNrTWF0cml4JiBtID0gcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXRUb3RhbE1hdHJpeCgpOwotICAgIHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oU2tTY2FsYXJUb0RvdWJsZShtLmdldFNjYWxlWCgpKSwgICAgICAvLyBhCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0uZ2V0U2tld1koKSksICAgICAgIC8v
IGIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3
WCgpKSwgICAgICAgLy8gYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Rv
dWJsZShtLmdldFNjYWxlWSgpKSwgICAgICAvLyBkCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBTa1NjYWxhclRvRG91YmxlKG0uZ2V0VHJhbnNsYXRlWCgpKSwgIC8vIGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRUcmFuc2xhdGVZKCkpKTsgLy8g
ZgotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNv
bnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogewog
ICAgIGNvbnN0IFNrTWF0cml4JiBtID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRU
b3RhbE1hdHJpeCgpOwotICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeChTa1NjYWxhclRv
RG91YmxlKG0uZ2V0U2NhbGVYKCkpLCAgICAgIC8vIGEKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFNrZXdZKCkpLCAgICAgICAvLyBiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3WCgp
KSwgICAgICAgLy8gYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRv
RG91YmxlKG0uZ2V0U2NhbGVZKCkpLCAgICAgIC8vIGQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFRyYW5zbGF0ZVgoKSksICAvLyBlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRUcmFuc2xh
dGVZKCkpKTsgLy8gZgorICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oU2tTY2FsYXJUb0RvdWJs
ZShtLmdldFNjYWxlWCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9E
b3VibGUobS5nZXRTa2V3WSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFy
VG9Eb3VibGUobS5nZXRTa2V3WCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2Nh
bGFyVG9Eb3VibGUobS5nZXRTY2FsZVkoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBT
a1NjYWxhclRvRG91YmxlKG0uZ2V0VHJhbnNsYXRlWCgpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRUcmFuc2xhdGVZKCkpKTsKIH0KIAogRmxvYXRS
ZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCiAj
aW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKQEAgLTQzLDcgKzQ0LDYgQEAKICNpbmNsdWRlICJT
a2lhVXRpbHMuaCIKICNpbmNsdWRlICJTa1JlY3QuaCIKICNpbmNsdWRlICJTa1NoYWRlci5oIgot
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlICJza2lhL2V4dC9p
bWFnZV9vcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgi
CkBAIC0zMDAsNyArMzAwLDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlcwogCiB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGZsb2F0U3JjUmVjdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0
ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNr
aWEuY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QYXRoU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCwxMSArMjIwLDYgQEAgdm9pZCBQ
YXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmbwogICAgIG1fcGF0aC0+dHJhbnNmb3Jt
KHhmb3JtKTsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHhmb3JtKQotewotICAgIG1fcGF0aC0+dHJhbnNmb3JtKHhmb3JtKTsKLX0KLQogU3Ry
aW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVzdWx0OwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCShy
ZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJu
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlICJTa0NhbnZhcy5oIgog
I2luY2x1ZGUgIlNrQ29sb3IuaCIKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBQYXR0ZXJuOjpwbGF0
Zm9ybURlc3Ryb3koKQogICAgIG1fcGF0dGVybiA9IDA7CiB9CiAKLVBsYXRmb3JtUGF0dGVyblB0
ciBQYXR0ZXJuOjpwbGF0Zm9ybVBhdHRlcm4oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBh
dHRlcm5UcmFuc2Zvcm0pCitQbGF0Zm9ybVBhdHRlcm5QdHIgUGF0dGVybjo6cGxhdGZvcm1QYXR0
ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSkKIHsKICAgICBpZiAo
bV9wYXR0ZXJuKQogICAgICAgICByZXR1cm4gbV9wYXR0ZXJuOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCShyZXZpc2lvbiA1NDQ5MykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDEzICszMSwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlNraWFGb250V2luLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNs
dWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiU2tDYW52YXMuaCIKICNpbmNsdWRlICJTa1BhaW50
LmgiCiAjaW5jbHVkZSAiU2tTaGFkZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgogCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtMjM3LDcgKzIzNyw3IEBAIGJvb2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5n
KEdyYXBoaWMKICAgICAvLyBpbiB1c2luZyBTa2lhIHdpbGwgc2hvdyB5b3UgdGhlIGhpbnRlZCBv
dXRsaW5lcyBmb3IgdGhlIHNtYWxsZXIgc2l6ZSwKICAgICAvLyB3aGljaCBsb29rIHdlaXJkLiBB
bGwgZWxzZSBiZWluZyBlcXVhbCwgaXQncyBiZXR0ZXIgdG8gdXNlIFdpbmRvd3MnIHRleHQKICAg
ICAvLyBkcmF3aW5nLCBzbyB3ZSBkb24ndCBjaGVjayBmb3Igem9vbXMuCi0gICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCA9IGNvbnRleHQtPmdldENUTSgpOworICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4ID0gY29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgaWYgKG1h
dHJpeC5iKCkgIT0gMCB8fCBtYXRyaXguYygpICE9IDApICAvLyBDaGVjayBmb3Igc2tldy4KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gNTQ0
OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNm
b3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBBZmZpbmVUcmFuc2Zvcm06
OkFmZmluZVRyYW5zZm9ybShkb3VibGUgCiAgICAgc2V0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYp
OwogfQogCi12b2lkIEFmZmluZVRyYW5zZm9ybTo6cmVzZXQoKQordm9pZCBBZmZpbmVUcmFuc2Zv
cm06Om1ha2VJZGVudGl0eSgpCiB7CiAgICAgc2V0TWF0cml4KDEsIDAsIDAsIDEsIDAsIDApOwog
fQpAQCAtMTg4LDE0ICsxODgsMTYgQEAgQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06
OnNjYWxlKAogQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKGRvdWJsZSBz
eCwgZG91YmxlIHN5KQogewogICAgIG1fdHJhbnNmb3JtWzBdICo9IHN4OworICAgIG1fdHJhbnNm
b3JtWzFdICo9IHN4OworICAgIG1fdHJhbnNmb3JtWzJdICo9IHN5OwogICAgIG1fdHJhbnNmb3Jt
WzNdICo9IHN5OwogICAgIHJldHVybiAqdGhpczsKIH0KIAogQWZmaW5lVHJhbnNmb3JtJiBBZmZp
bmVUcmFuc2Zvcm06OnRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSkKIHsKLSAgICBtX3Ry
YW5zZm9ybVs0XSArPSB0eDsKLSAgICBtX3RyYW5zZm9ybVs1XSArPSB0eTsKKyAgICBtX3RyYW5z
Zm9ybVs0XSArPSB0eCAqIG1fdHJhbnNmb3JtWzBdICsgdHkgKiBtX3RyYW5zZm9ybVsyXTsKKyAg
ICBtX3RyYW5zZm9ybVs1XSArPSB0eCAqIG1fdHJhbnNmb3JtWzFdICsgdHkgKiBtX3RyYW5zZm9y
bVszXTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIyMSw5ICsyMjMsMTQgQEAgQWZmaW5l
VHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OmZsaXBZKAogCiBBZmZpbmVUcmFuc2Zvcm0mIEFm
ZmluZVRyYW5zZm9ybTo6c2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpCiB7Ci0gICAgQWZmaW5l
VHJhbnNmb3JtIHNoZWFyKDEsIHN5LCBzeCwgMSwgMCwgMCk7CisgICAgZG91YmxlIGEgPSBtX3Ry
YW5zZm9ybVswXTsKKyAgICBkb3VibGUgYiA9IG1fdHJhbnNmb3JtWzFdOworCisgICAgbV90cmFu
c2Zvcm1bMF0gKz0gc3kgKiBtX3RyYW5zZm9ybVsyXTsKKyAgICBtX3RyYW5zZm9ybVsxXSArPSBz
eSAqIG1fdHJhbnNmb3JtWzNdOworICAgIG1fdHJhbnNmb3JtWzJdICs9IHN4ICogYTsKKyAgICBt
X3RyYW5zZm9ybVszXSArPSBzeCAqIGI7CiAKLSAgICBtdWx0TGVmdChzaGVhcik7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0yNTAsMTYgKzI1NywxNiBAQCBBZmZpbmVUcmFuc2Zvcm0gbWFr
ZU1hcEJldHdlZW5SZWN0cyhjb25zCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBB
ZmZpbmVUcmFuc2Zvcm06Om1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSogeDIsIGRvdWJs
ZSogeTIpIGNvbnN0Cit2b2lkIEFmZmluZVRyYW5zZm9ybTo6bWFwKGRvdWJsZSB4LCBkb3VibGUg
eSwgZG91YmxlJiB4MiwgZG91YmxlJiB5MikgY29uc3QKIHsKLSAgICAqeDIgPSAobV90cmFuc2Zv
cm1bMF0gKiB4ICsgbV90cmFuc2Zvcm1bMl0gKiB5ICsgbV90cmFuc2Zvcm1bNF0pOwotICAgICp5
MiA9IChtX3RyYW5zZm9ybVsxXSAqIHggKyBtX3RyYW5zZm9ybVszXSAqIHkgKyBtX3RyYW5zZm9y
bVs1XSk7CisgICAgeDIgPSAobV90cmFuc2Zvcm1bMF0gKiB4ICsgbV90cmFuc2Zvcm1bMl0gKiB5
ICsgbV90cmFuc2Zvcm1bNF0pOworICAgIHkyID0gKG1fdHJhbnNmb3JtWzFdICogeCArIG1fdHJh
bnNmb3JtWzNdICogeSArIG1fdHJhbnNmb3JtWzVdKTsKIH0KIAogSW50UG9pbnQgQWZmaW5lVHJh
bnNmb3JtOjptYXBQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgZG91
YmxlIHgyLCB5MjsKLSAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4MiwgJnkyKTsKKyAg
ICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksIHgyLCB5Mik7CiAgICAgCiAgICAgLy8gUm91bmQg
dGhlIHBvaW50LgogICAgIHJldHVybiBJbnRQb2ludChscm91bmQoeDIpLCBscm91bmQoeTIpKTsK
QEAgLTI2OCwxMyArMjc1LDI0IEBAIEludFBvaW50IEFmZmluZVRyYW5zZm9ybTo6bWFwUG9pbnQo
Y29uc3QKIEZsb2F0UG9pbnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKIHsKICAgICBkb3VibGUgeDIsIHkyOwotICAgIG1hcChwb2ludC54
KCksIHBvaW50LnkoKSwgJngyLCAmeTIpOworICAgIG1hcChwb2ludC54KCksIHBvaW50LnkoKSwg
eDIsIHkyKTsKIAogICAgIHJldHVybiBGbG9hdFBvaW50KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
eDIpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHkyKSk7CiB9CiAKK0ludFJlY3QgQWZmaW5lVHJh
bnNmb3JtOjptYXBSZWN0KGNvbnN0IEludFJlY3QgJnJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QobWFwUmVjdChGbG9hdFJlY3QocmVjdCkpKTsKK30KKwogRmxvYXRS
ZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0
CiB7CisgICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKKyAgICAgICAgRmxvYXRS
ZWN0IG1hcHBlZFJlY3QocmVjdCk7CisgICAgICAgIG1hcHBlZFJlY3QubW92ZShzdGF0aWNfY2Fz
dDxmbG9hdD4obV90cmFuc2Zvcm1bNF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4obV90cmFuc2Zvcm1b
NV0pKTsKKyAgICAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7CisgICAgfQorCiAgICAgRmxvYXRRdWFk
IHEocmVjdCk7CiAKICAgICBGbG9hdFF1YWQgcmVzdWx0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAkocmV2
aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgY2xhc3MgRmxv
YXRRdWFkOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRSZWN0
OworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybSA6
IHB1YmxpYyBGYXN0QWxsb2NCYXNlIHsKIHB1YmxpYzoKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91
YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZik7CiAKLSAgICB2b2lkIG1hcChkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSogeDIsIGRvdWJsZSogeTIpIGNvbnN0OworICAgIHZvaWQgbWFwKGRvdWJs
ZSB4LCBkb3VibGUgeSwgZG91YmxlJiB4MiwgZG91YmxlJiB5MikgY29uc3Q7CiAKICAgICAvLyBS
b3VuZHMgdGhlIG1hcHBlZCBwb2ludCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLgogICAg
IEludFBvaW50IG1hcFBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CkBAIC04OSw3ICs5MCw3
IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtWzVd
OyB9CiAgICAgdm9pZCBzZXRGKGRvdWJsZSBmKSB7IG1fdHJhbnNmb3JtWzVdID0gZjsgfQogCi0g
ICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgbWFrZUlkZW50aXR5KCk7CiAKICAgICBBZmZpbmVU
cmFuc2Zvcm0mIG11bHRpcGx5KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogICAgIEFmZmluZVRy
YW5zZm9ybSYgbXVsdExlZnQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CkBAIC0xMTQsNiArMTE1
LDExIEBAIHB1YmxpYzoKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSBjb25zdDsKIAorICAgIGJvb2wgaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtWzBdID09IDEgJiYgbV90cmFu
c2Zvcm1bMV0gPT0gMCAmJiBtX3RyYW5zZm9ybVsyXSA9PSAwICYmIG1fdHJhbnNmb3JtWzNdID09
IDE7CisgICAgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG0yKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIChtX3RyYW5zZm9ybVswXSA9PSBtMi5t
X3RyYW5zZm9ybVswXQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCShyZXZpc2lvbiA1
NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5OSw2ICs5OTksMTIgQEAgdm9pZCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFrZUFmZmluZSgpCiAgICAgbV9tYXRyaXhbM11bM10gPSAx
OwogfQogCitBZmZpbmVUcmFuc2Zvcm0gVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRvQWZmaW5lVHJh
bnNmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKG1fbWF0cml4WzBd
WzBdLCBtX21hdHJpeFswXVsxXSwgbV9tYXRyaXhbMV1bMF0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX21hdHJpeFsxXVsxXSwgbV9tYXRyaXhbM11bMF0sIG1fbWF0cml4WzNdWzFdKTsK
K30KKwogc3RhdGljIGlubGluZSB2b2lkIGJsZW5kRmxvYXQoZG91YmxlJiBmcm9tLCBkb3VibGUg
dG8sIGRvdWJsZSBwcm9ncmVzcykKIHsKICAgICBpZiAoZnJvbSAhPSB0bykKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFRyYW5zZm9ybWF0aW9uTWF0cml4X2gKICNkZWZpbmUg
VHJhbnNmb3JtYXRpb25NYXRyaXhfaAogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSA8
c3RyaW5nLmg+IC8vZm9yIG1lbWNweQpAQCAtNTUsNiArNTYsNyBAQCB0eXBlZGVmIHN0cnVjdCB0
YWdYRk9STSBYRk9STTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgRmxvYXRS
ZWN0OwpAQCAtMjY4LDYgKzI3MCw4IEBAIHB1YmxpYzoKICAgICAvLyBUaHJvdyBhd2F5IHRoZSBu
b24tYWZmaW5lIHBhcnRzIG9mIHRoZSBtYXRyaXggKGxvc3N5ISkKICAgICB2b2lkIG1ha2VBZmZp
bmUoKTsKIAorICAgIEFmZmluZVRyYW5zZm9ybSB0b0FmZmluZVRyYW5zZm9ybSgpIGNvbnN0Owor
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtMikgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiAobV9tYXRyaXhbMF1bMF0gPT0gbTIubV9tYXRyaXhb
MF1bMF0gJiYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2lu
LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgpAQCAtMjI1LDcgKzIyNSw3IEBAIHN0YXRpYyB2b2lkIGRyYXdHRElHbHlwaHMo
R3JhcGhpY3NDb250ZXgKICAgICB9IGVsc2UgewogICAgICAgICBYRk9STSB4Zm9ybTsKICAgICAg
ICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmeGZvcm0pOwotICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBoZGNUcmFuc2Zvcm0oeGZvcm0uZU0xMSwgeGZvcm0uZU0yMSwgeGZvcm0uZU0xMiwg
eGZvcm0uZU0yMiwgeGZvcm0uZUR4LCB4Zm9ybS5lRHkpOworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gaGRjVHJhbnNmb3JtKHhmb3JtLmVNMTEsIHhmb3JtLmVNMjEsIHhmb3JtLmVNMTIsIHhmb3Jt
LmVNMjIsIHhmb3JtLmVEeCwgeGZvcm0uZUR5KTsKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
aW5pdGlhbEdseXBoVHJhbnNmb3JtID0gaGRjVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpID8gaGRj
VHJhbnNmb3JtLmludmVyc2UoKSA6IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7CiAgICAgICAg
IGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCiAgICAgICAgICAg
ICBpbml0aWFsR2x5cGhUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChpbml0aWFs
R2x5cGhUcmFuc2Zvcm0sIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCB0YW5mKHN5bnRoZXRp
Y09ibGlxdWVBbmdsZSAqIHBpRmxvYXQgLyAxODAuMGYpLCAxLCAwLCAwKSk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dX
aW4uY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCi0j
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRt
YXBDb250ZXh0Lmg+CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA1NDQ5MykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJQYXRoLmgi
CiAKICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCShyZXZpc2lvbiA1NDQ5
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSwxNyArMTk1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OmNvbgogICAgIGlmICghbV9oZGMpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFhGT1JNIHhmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgodHJhbnNmb3JtLmEoKSwg
dHJhbnNmb3JtLmIoKSwgdHJhbnNmb3JtLmMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRyYW5zZm9ybS5kKCksIHRyYW5zZm9ybS5lKCksIHRyYW5zZm9ybS5mKCkp
OwotICAgIE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZUTVVMVElQ
TFkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RN
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKCFtX2hk
YykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWEZPUk0geGZvcm0gPSB0cmFuc2Zvcm07CisgICAg
WEZPUk0geGZvcm0gPSB0cmFuc2Zvcm0udG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwogICAgIE1v
ZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZUTVVMVElQTFkpOwogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luY2UuY3Bw
CShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9u
dFdpbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZvbnQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1
ZGUgIkZvbnREYXRhLmgiCkBAIC0zNyw3ICszOCw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4
dFdpbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtUGF0aFdpbmNlLmgiCiAj
aW5jbHVkZSAiU2hhcmVkQml0bWFwLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLSNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
IAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTE2OSw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgIEFm
ZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgVmVj
dG9yPFBhdGg+IG1fcGF0aHM7CiB9OwpAQCAtMjEyLDcgKzIxMSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgbV90cmFuc2Zvcm0ucm90YXRlKHJhZDJkZWcocmFkaWFucykpOwogICAgIH0KIAotICAgIHZv
aWQgIGNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQorICAg
IHZvaWQgIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICB7
CiAgICAgICAgIG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtICogbV90cmFuc2Zvcm07CiAgICAgfQpA
QCAtMTE0OSwxMSArMTE0OCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29u
c3QgQWYKICAgICBtX2RhdGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0pCi17Ci0gICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLX0KLQogVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIEdyYXBoaWNzQ29udGV4dDo6YWZmaW5lVHJhbnNmb3JtKCkKIHsKICAgICBy
ZXR1cm4gbV9kYXRhLT5tX3RyYW5zZm9ybTsKQEAgLTEzODYsNyArMTM4MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgICAgICAgICBpZiAoIWRjKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ciA9
IG1fZGF0YS0+bV90cmFuc2Zvcm07CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHIgPSBt
X2RhdGEtPm1fdHJhbnNmb3JtOwogICAgICAgICAgICAgdHIudHJhbnNsYXRlKHRyYW5zcGFyZW50
REMudG9TaGlmdCgpLndpZHRoKCksIHRyYW5zcGFyZW50REMudG9TaGlmdCgpLmhlaWdodCgpKTsK
IAogICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikp
OwpAQCAtMTQyNiw3ICsxNDIwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgo
KQogICAgICAgICAgICAgaWYgKCFkYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHIgPSBtX2RhdGEtPm1fdHJhbnNmb3JtOwor
ICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyID0gbV9kYXRhLT5tX3RyYW5zZm9ybTsKICAg
ICAgICAgICAgIHRyLnRyYW5zbGF0ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKS53aWR0aCgpLCB0
cmFuc3BhcmVudERDLnRvU2hpZnQoKS5oZWlnaHQoKSk7CiAKICAgICAgICAgICAgIFNlbGVjdE9i
amVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9CUlVTSCkpOwpAQCAtMTUzNywxMiArMTUzMSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBHcmFkaWVu
dEZpbGwoZGMsIHR2LmRhdGEoKSwgdHYuc2l6ZSgpLCBtZXNoLmRhdGEoKSwgbWVzaC5zaXplKCks
IHZlcnRpY2FsID8gR1JBRElFTlRfRklMTF9SRUNUX1YgOiBHUkFESUVOVF9GSUxMX1JFQ1RfSCk7
CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV90cmFuc2Zvcm07Ci19Ci0KLVRyYW5zZm9ybWF0
aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKK0FmZmluZVRyYW5zZm9y
bSBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS0+
bV90cmFuc2Zvcm07CiB9CkBAIC0xODg1LDcgKzE4NzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0JpdG1hcChTaGFyZWRCCiAgICAgICAgIHRyYW5zcGFyZW50REMuZmlsbEFscGhhQ2hh
bm5lbCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpdG1hcFBhdHRlcm4oU2hh
cmVkQml0bWFwKiBibXAsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0JpdG1hcFBhdHRlcm4oU2hhcmVkQml0bWFwKiBibXAsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdEluLCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6
ZSkKIHsKICAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQpAQCAtMTkwNCw3ICsxODkzLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaXRtYXBQYXR0ZXJuKAogICAgIHRyUmVjdC5tb3Zl
KHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKICAgICBGbG9hdFJlY3QgbW92ZWREc3RSZWN0ID0g
bV9kYXRhLT5tX3RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChGbG9hdFJlY3QodHJSZWN0KSk7
CiAgICAgRmxvYXRTaXplIG1vdmVkKG1vdmVkRHN0UmVjdC5sb2NhdGlvbigpIC0gZGVzdFJlY3RJ
bi5sb2NhdGlvbigpKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX2Rh
dGEtPm1fdHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX2RhdGEt
Pm1fdHJhbnNmb3JtOwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobW92ZWQud2lkdGgoKSwgbW92
ZWQuaGVpZ2h0KCkpOwogCiAgICAgYm1wLT5kcmF3UGF0dGVybihkYywgdHJhbnNmb3JtLCB0aWxl
UmVjdEluLCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3AsIGRlc3RSZWN0SW4sIG9yaWdTb3Vy
Y2VTaXplKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZm
ZXJXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWRE
YXRhKGJvb2wgZGVzdHJveUFsbCA9IHRydWUpIHt9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNv
ZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgIHZpcnR1YWwgdm9pZCBkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIAogICAgIGNvbnN0IEltYWdlQnVmZmVyRGF0YSogbV9k
YXRhOwpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0CiAgICAgbV9kYXRhLT5tX2JpdG1hcC0+ZHJhdyhjdHh0LCBpbnREc3RSZWN0LCBpbnRT
cmNSZWN0LCBjb21wb3NpdGVPcCk7CiB9CiAKLXZvaWQgQnVmZmVyZWRJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAordm9pZCBCdWZmZXJl
ZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgbV9k
YXRhLT5tX2JpdG1hcC0+ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIG9wLCBkZXN0UmVjdCwgc2l6ZSgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvUGF0aFdpbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BhdGhXaW5jZS5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QYXRoV2luY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCwxMSArMjAsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQ
YXRoLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUGF0
aFdpbmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywg
UGF0aEFwcGxpZXIKICAgICBtX3BhdGgtPmFwcGx5KGluZm8sIGZ1bmN0aW9uKTsKIH0KIAotdm9p
ZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit2b2lkIFBh
dGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpCiB7CiAgICAgbV9wYXRoLT50
cmFuc2Zvcm0odCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1Bs
YXRmb3JtUGF0aFdpbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbmNlLmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsMTEgKzIwLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1QYXRoV2luY2UuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiV2luY2VHcmFwaGljc0V4dHJhcy5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAt
MjMyLDcgKzIzMiw3IEBAIHN0YXRpYyB2b2lkIGFkZEFyY1BvaW50cyhQYXRoUG9seWdvbiYgcG8K
ICAgICAgICAgcG9seS5hcHBlbmQoZGF0YS5tX2VuZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdQ
b2x5Z29ucyhIREMgZGMsIGNvbnN0IFZlY3RvcjxQYXRoUG9seWdvbj4mIHBvbHlnb25zLCBib29s
IGZpbGwsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4KiB0cmFuc2Zvcm1hdGlvbikKK3N0YXRp
YyB2b2lkIGRyYXdQb2x5Z29ucyhIREMgZGMsIGNvbnN0IFZlY3RvcjxQYXRoUG9seWdvbj4mIHBv
bHlnb25zLCBib29sIGZpbGwsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtYXRpb24p
CiB7CiAgICAgTWVtb3J5QWxsb2NhdGlvbkNhbkZhaWwgY2FuRmFpbDsKICAgICBmb3IgKFZlY3Rv
cjxQYXRoUG9seWdvbj46OmNvbnN0X2l0ZXJhdG9yIGkgPSBwb2x5Z29ucy5iZWdpbigpOyBpICE9
IHBvbHlnb25zLmVuZCgpOyArK2kpIHsKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIFBhdGhQb2x5
Z29uOjptb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgCiAgICAgICAgIGktPm1vdmUob2Zmc2V0KTsKIH0K
IAotdm9pZCBQYXRoUG9seWdvbjo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0KQordm9pZCBQYXRoUG9seWdvbjo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dCkKIHsKICAgICBmb3IgKFZlY3RvcjxQYXRoUG9pbnQ+OjppdGVyYXRvciBpID0gYmVnaW4oKTsg
aSA8IGVuZCgpOyArK2kpCiAgICAgICAgICppID0gdC5tYXBQb2ludCgqaSk7CkBAIC00MDMsNyAr
NDAzLDcgQEAgdm9pZCBQbGF0Zm9ybVBhdGhFbGVtZW50Ojptb3ZlKGNvbnN0IEZsbwogICAgICAg
ICBtX2RhdGEubV9wb2ludHNbaV0ubW92ZShvZmZzZXQpOwogfQogCi12b2lkIFBsYXRmb3JtUGF0
aEVsZW1lbnQ6OnRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3ZvaWQg
UGxhdGZvcm1QYXRoRWxlbWVudDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkK
IHsKICAgICBpbnQgbiA9IG51bUNvbnRyb2xQb2ludHMoKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG47ICsraSkgewpAQCAtNTcxLDEyICs1NzEsMTIgQEAgdm9pZCBQbGF0Zm9ybVBhdGg6OmNs
ZWFyKCkKICAgICBtX3BlbkxpZnRlZCA9IHRydWU7CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXRoOjpz
dHJva2VQYXRoKEhEQyBkYywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybWF0
aW9uKSBjb25zdAordm9pZCBQbGF0Zm9ybVBhdGg6OnN0cm9rZVBhdGgoSERDIGRjLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9ybWF0aW9uKSBjb25zdAogewogICAgIGRyYXdQb2x5Z29u
cyhkYywgbV9zdWJwYXRocywgZmFsc2UsIHRyYW5zZm9ybWF0aW9uKTsKIH0KIAotdm9pZCBQbGF0
Zm9ybVBhdGg6OmZpbGxQYXRoKEhEQyBkYywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRy
YW5zZm9ybWF0aW9uKSBjb25zdAordm9pZCBQbGF0Zm9ybVBhdGg6OmZpbGxQYXRoKEhEQyBkYywg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zvcm1hdGlvbikgY29uc3QKIHsKICAgICBIR0RJ
T0JKIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsK
ICAgICBkcmF3UG9seWdvbnMoZGMsIG1fc3VicGF0aHMsIHRydWUsIHRyYW5zZm9ybWF0aW9uKTsK
QEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFBsYXRmb3JtUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZs
b2F0CiAgICAgICAgIGl0LT5tb3ZlKHNpemUpOwogfQogCi12b2lkIFBsYXRmb3JtUGF0aDo6dHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQordm9pZCBQbGF0Zm9ybVBhdGg6
OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpCiB7CiAgICAgZm9yIChQbGF0Zm9y
bVBhdGhFbGVtZW50czo6aXRlcmF0b3IgaXQobV9lbGVtZW50cy5iZWdpbigpKTsgaXQgIT0gbV9l
bGVtZW50cy5lbmQoKTsgKytpdCkKICAgICAgICAgaXQtPnRyYW5zZm9ybSh0KTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbmNl
LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Q
bGF0Zm9ybVBhdGhXaW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIHN0cnVjdCBQYXRoUG9seWdvbjogcHVibGljIFZlY3RvcjxQ
YXRoUG9pbnQ+IHsKICAgICAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsK
LSAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpOwor
ICAgICAgICB2b2lkIHRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwogICAgICAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdDsKICAgICB9Owog
CkBAIC0xMTMsNyArMTEzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbnVt
UG9pbnRzKCkgY29uc3Q7CiAgICAgICAgIGludCBudW1Db250cm9sUG9pbnRzKCkgY29uc3Q7CiAg
ICAgICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCk7Ci0gICAgICAgIHZvaWQg
dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKKyAgICAgICAgdm9pZCB0
cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KTsKICAgICAgICAgUGF0aEVsZW1lbnRU
eXBlIHR5cGUoKSBjb25zdDsKICAgICAgICAgUGxhZm9ybVBhdGhFbGVtZW50VHlwZSBwbGF0Zm9y
bVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICAgICAgdm9pZCBpbmZsYXRlUmVj
dFRvQ29udGFpbk1lKEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRQb2ludCYgbGFzdFBvaW50KSBj
b25zdDsKQEAgLTE0MSwxNCArMTQxLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBjbGVhcigpOwogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Vs
ZW1lbnRzLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgc3Ryb2tlUGF0aChIREMsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4KiB0cikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZmlsbFBhdGgo
SERDLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHIpIGNvbnN0OworICAgICAgICB2b2lk
IHN0cm9rZVBhdGgoSERDLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0qIHRyKSBjb25zdDsKKyAgICAg
ICAgdm9pZCBmaWxsUGF0aChIREMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHIpIGNvbnN0Owog
ICAgICAgICBGbG9hdFBvaW50IGxhc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMu
aXNFbXB0eSgpID8gRmxvYXRQb2ludCgwLCAwKSA6IG1fZWxlbWVudHMubGFzdCgpLmxhc3RQb2lu
dCgpOyB9CiAKICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QoKSBjb25zdCB7
IHJldHVybiBtX2JvdW5kaW5nUmVjdDsgfQogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdDsKICAgICAgICAgdm9pZCB0cmFu
c2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKTsKLSAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpOworICAgICAgICB2b2lkIHRyYW5zZm9ybShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwogCiAgICAgICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmKTsKICAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9H
cmFwaGljc0NvbnRleHRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTM2MCwxOCAr
MzU5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcigKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Ojpn
ZXRBZmZpbmVDVE0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0
Q1RNKCkgY29uc3QKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gQWZmaW5l
VHJhbnNmb3JtKCk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6
Z2V0Q1RNKCkgY29uc3QKLXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVHJh
bnNmb3JtYXRpb25NYXRyaXgoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0
ZShmbG9hdCB0eCwgZmxvYXQgdHkpIAogeyAKICNpZiBVU0UoV1hHQykKQEAgLTQ4NywxNSArNDgw
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZgogICAgIHJldHVy
bjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwotfQot
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBl
bmFibGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MyArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgogCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xNzYsNyArMTc2
LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICBv
YnNlcnZlci0+ZGlkRHJhdyh0aGlzKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQogewogICAgIGlmICghbV9z
b3VyY2UuaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDcgKzI2MSw3IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIAogfQogCi12b2lkIElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1BhdGhXeC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3Bw
CShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlBhdGguaCIK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0yMTEsMTQgKzIxMCw2IEBAIHZvaWQg
UGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm8KICNlbmRpZgogfQogCi12b2lkIFBh
dGg6OnRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSAKLXsK
LSNpZiBVU0UoV1hHQykKLSAgICBpZiAobV9wYXRoKQotICAgICAgICBtX3BhdGgtPlRyYW5zZm9y
bSh0cmFuc2Zvcm0pOwotI2VuZGlmCi19Ci0KIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywg
UGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QgCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCShyZXZp
c2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiR093blB0ci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgpAQCAtMzIsNyArMzMsNiBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJVc2VyQWdlbnRT
dHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgImd0a2RyYXdpbmcuaCIKIApAQCAtMzA3LDcgKzMwNyw3
IEBAIHN0YXRpYyBib29sIHBhaW50TW96aWxsYUd0a1dpZGdldChjb25zdCAKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtID0gaS5jb250ZXh0LT5n
ZXRDVE0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gaS5jb250ZXh0LT5nZXRDVE0oKTsK
IAogICAgIEludFBvaW50IHBvcyA9IGN0bS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOwogICAg
IEdka1JlY3RhbmdsZSBnZGtSZWN0ID0gSW50UmVjdChwb3MueCgpLCBwb3MueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5W
aWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdX
aW4uY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmll
d1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NSw5ICs1ODUsOSBAQCB2b2lkIFBsdWdpblZp
ZXc6OnBhaW50V2luZG93ZWRQbHVnaW5JbnRvCiAKICAgICAvLyBUaGUgcGx1Z2luIGV4cGVjdHMg
dGhlIERDIHRvIGJlIGluIGNsaWVudCBjb29yZGluYXRlcywgc28gd2UgdHJhbnNsYXRlCiAgICAg
Ly8gdGhlIERDIHRvIG1ha2UgdGhhdCBzby4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0g
PSBjb250ZXh0LT5nZXRDVE0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gY29udGV4dC0+
Z2V0Q1RNKCk7CiAgICAgY3RtLnRyYW5zbGF0ZShsb2NhdGlvbkluV2luZG93LngoKSwgbG9jYXRp
b25JbldpbmRvdy55KCkpOwotICAgIFhGT1JNIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFhGT1JN
PihjdG0pOworICAgIFhGT1JNIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFhGT1JNPihjdG0udG9U
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKIAogICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJnRy
YW5zZm9ybSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNTQ0OTMp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODk5LDkgKzI4OTksOSBAQCB2b2lkIFJlbmRlckJveDo6Y2xlYXJMYXlvdXRPdmVyZmxvdygpCiAK
ICNpZiBFTkFCTEUoU1ZHKQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJCb3g6OmxvY2Fs
VHJhbnNmb3JtKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJCb3g6OmxvY2FsVHJhbnNm
b3JtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwgMCwgMCwg
MSwgeCgpLCB5KCkpOworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgeCgp
LCB5KCkpOwogfQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA1
NDQ5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTcsNyArMjk3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMo
KSBjb25zdDsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3Jt
IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNTQ0OTMp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBjTG93UXVhbGl0eVRp
bWVUaHJlcwogCiBjbGFzcyBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0YSA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEoUmVuZGVyQm94TW9k
ZWxPYmplY3QqIG9iamVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSwgZG91YmxlIHRpbWUsIGJvb2wgbG93UXVhbGl0eVNjYWxlKQor
ICAgIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBk
b3VibGUgdGltZSwgYm9vbCBsb3dRdWFsaXR5U2NhbGUpCiAgICAgICAgIDogbV9zaXplKHNpemUp
CiAgICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgICAgICAsIG1fbGFzdFBhaW50
VGltZSh0aW1lKQpAQCAtNzEsOCArNzEsOCBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGxhc3RQYWlu
dFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQYWludFRpbWU7IH0KICAgICB2b2lkIHNldExh
c3RQYWludFRpbWUoZG91YmxlIHQpIHsgbV9sYXN0UGFpbnRUaW1lID0gdDsgfQogICAgIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dRdWFsaXR5U2NhbGU7IH0K
LSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
Zm9ybTsgfQorICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CiAgICAgdm9pZCBzZXRVc2VMb3dR
dWFsaXR5U2NhbGUoYm9vbCBiKQogICAgIHsKICAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRU
aW1lci5zdG9wKCk7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBJ
bnRTaXplIG1fc2l6ZTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiAgICAgZG91YmxlIG1fbGFzdFBhaW50VGlt
ZTsKICAgICBib29sIG1fbG93UXVhbGl0eVNjYWxlOwogICAgIFRpbWVyPFJlbmRlckJveE1vZGVs
T2JqZWN0PiBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyOwpAQCAtMTMwLDcgKzEzMCw3IEBAIGJv
b2wgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyOjpzaG91bGQKICAgICBpZiAoZ0JveE1vZGVs
T2JqZWN0cykKICAgICAgICAgZGF0YSA9IGdCb3hNb2RlbE9iamVjdHMtPmdldChvYmplY3QpOwog
Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGN1cnJlbnRUcmFuc2Zvcm0gPSBjb250
ZXh0LT5nZXRDVE0oKTsKKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN1cnJlbnRUcmFuc2Zv
cm0gPSBjb250ZXh0LT5nZXRDVE0oKTsKICAgICBib29sIGNvbnRleHRJc1NjYWxlZCA9ICFjdXJy
ZW50VHJhbnNmb3JtLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCk7CiAgICAgaWYgKCFjb250ZXh0
SXNTY2FsZWQgJiYgaW1hZ2VTaXplID09IHNpemUpIHsKICAgICAgICAgLy8gVGhlcmUgaXMgbm8g
c2NhbGUgaW4gZWZmZWN0LiAgSWYgd2UgaGFkIGEgc2NhbGUgaW4gZWZmZWN0IGJlZm9yZSwgd2Ug
Y2FuIGp1c3QgZGVsZXRlIHRoaXMgZGF0YS4KQEAgLTEzOTAsNyArMTM5MCw3IEBAIHZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG8KICAgICAgICAgICAgICAgICAvLyBlZGdl
cyBpZiB0aGV5IGFyZSBub3QgcGl4ZWwtYWxpZ25lZC4gVGhvc2UgYXJlIGF2b2lkZWQgYnkgaW5z
ZXR0aW5nIHRoZSBjbGlwcGluZyBwYXRoCiAgICAgICAgICAgICAgICAgLy8gYnkgb25lIHBpeGVs
LgogICAgICAgICAgICAgICAgIGlmIChoYXNPcGFxdWVCYWNrZ3JvdW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJlbnRUcmFuc2Zvcm1hdGlvbiA9IGNv
bnRleHQtPmdldENUTSgpOworICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3Vy
cmVudFRyYW5zZm9ybWF0aW9uID0gY29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50VHJhbnNmb3JtYXRpb24uYSgpICE9IDEgfHwgKGN1cnJlbnRUcmFuc2Zv
cm1hdGlvbi5kKCkgIT0gMSAmJiBjdXJyZW50VHJhbnNmb3JtYXRpb24uZCgpICE9IC0xKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRUcmFuc2Zvcm1hdGlvbi5iKCkgfHwg
Y3VycmVudFRyYW5zZm9ybWF0aW9uLmMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RU
b0NsaXBPdXQuaW5mbGF0ZSgtMSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3Jl
aWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3Jl
aWduT2JqZWN0LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEwIEBAIFJl
bmRlckZvcmVpZ25PYmplY3Q6OlJlbmRlckZvcmVpZ25PYmplY3QKIHsKIH0KIAotVHJhbnNmb3Jt
YXRpb25NYXRyaXggUmVuZGVyRm9yZWlnbk9iamVjdDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVz
KCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0Ojp0cmFuc2xhdGlv
bkZvckF0dHJpYnV0ZXMoKSBjb25zdAogewogICAgIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KiBm
b3JlaWduID0gc3RhdGljX2Nhc3Q8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqPihub2RlKCkpOwot
ICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZShmb3JlaWduLT54KCku
dmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPnkoKS52YWx1ZShmb3JlaWduKSk7CisgICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShmb3JlaWduLT54KCkudmFsdWUoZm9yZWlnbiks
IGZvcmVpZ24tPnkoKS52YWx1ZShmb3JlaWduKSk7CiB9CiAKIHZvaWQgUmVuZGVyRm9yZWlnbk9i
amVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQpAQCAtODgsNyArODgs
NyBAQCB2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OmNvbXB1dGVSZWN0Rm9yCiAgICAgUmVuZGVy
QmxvY2s6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCByZWN0LCBmaXhl
ZCk7CiB9CiAKLWNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBSZW5kZXJGb3JlaWduT2JqZWN0
Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYg
UmVuZGVyRm9yZWlnbk9iamVjdDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAg
ICAgbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zvcm0oKSAqIHRyYW5zbGF0
aW9uRm9yQXR0cmlidXRlcygpOwogICAgIHJldHVybiBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oCShyZXZpc2lvbiA1
NDQ5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBSZW5kZXJGb3JlaWduT2JqZWN0X2gK
ICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQogCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCw3ICszOCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwogCi0gICAgdmlydHVhbCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1
YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsK
ICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CkBAIC01NSwxMiArNTUsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRv
Q29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZp
eGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUp
IGNvbnN0OwogCiAgcHJpdmF0ZToKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlv
bkZvckF0dHJpYnV0ZXMoKSBjb25zdDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25G
b3JBdHRyaWJ1dGVzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAg
IHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhbFRyYW5zZm9ybTsgfQogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sb2NhbFRy
YW5zZm9ybTsKLSAgICBtdXRhYmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKKyAgICBt
dXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShy
ZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIzNiw3ICsyMjM2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRM
YXllcihSZW5kZXJMYXllcgogICAgICAgICAKICAgICAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9y
bS4KICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICBwLT5jb25jYXRDVE0odHJhbnNmb3JtKTsK
KyAgICAgICAgcC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpKTsKIAog
ICAgICAgICAvLyBOb3cgZG8gYSBwYWludCB3aXRoIHRoZSByb290IGxheWVyIHNoaWZ0ZWQgdG8g
YmUgdXMuCiAgICAgICAgIHBhaW50TGF5ZXIodGhpcywgcCwgdHJhbnNmb3JtLmludmVyc2UoKS5t
YXBSZWN0KHBhaW50RGlydHlSZWN0KSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290LCBvdmVy
bGFwVGVzdFJlcXVlc3RzLCBwYWludEZsYWdzIHwgUGFpbnRMYXllckFwcGxpZWRUcmFuc2Zvcm0p
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA1NDQ5MykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
MjAsMTUgKzI1MjAsMTUgQEAgRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6cmVwYWludFJlY3RJbkxv
YwogICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUmVu
ZGVyT2JqZWN0Ojpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVy
T2JqZWN0Ojpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgc3RhdGljIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGlkZW50aXR5OworICAgIHN0YXRpYyBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0gaWRlbnRpdHk7CiAgICAgcmV0dXJuIGlkZW50aXR5OwogfQogCi1jb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgUmVuZGVyT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QK
K2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCkgY29uc3QKIHsKLSAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRl
bnRpdHk7CisgICAgc3RhdGljIGNvbnN0IEFmZmluZVRyYW5zZm9ybSBpZGVudGl0eTsKICAgICBy
ZXR1cm4gaWRlbnRpdHk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZp
c2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFJlbmRlck9iamVjdF9oCiAjZGVmaW5l
IFJlbmRlck9iamVjdF9oCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgpAQCAtMzQ3LDExICszNDgsMTEgQEAgcHVibGljOgogICAgIC8vIEZJWE1F
OiBUaGlzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQgYW5kIG1vc3RseSBhcm91bmQgZm9yIFNWR1Jl
bmRlclRyZWVBc1RleHQuCiAgICAgLy8gVGhpcyBvbmx5IHJldHVybnMgdGhlIHRyYW5zZm9ybT0i
IiB2YWx1ZSBmcm9tIHRoZSBlbGVtZW50CiAgICAgLy8gbW9zdCBjYWxsc2l0ZXMgd2FudCBsb2Nh
bFRvUGFyZW50VHJhbnNmb3JtKCkgaW5zdGVhZC4KLSAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdGhlIGZ1bGwgdHJh
bnNmb3JtIG1hcHBpbmcgZnJvbSBsb2NhbCBjb29yZGluYXRlcyB0byBsb2NhbCBjb29yZHMgZm9y
IHRoZSBwYXJlbnQgU1ZHIHJlbmRlcmVyCiAgICAgLy8gVGhpcyBpbmNsdWRlcyBhbnkgdmlld3Bv
cnQgdHJhbnNmb3JtcyBhbmQgeC95IG9mZnNldHMgYXMgd2VsbCBhcyB0aGUgdHJhbnNmb3JtPSIi
IHZhbHVlIG9mZiB0aGUgZWxlbWVudC4KLSAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAg
IC8vIFNWRyB1c2VzIEZsb2F0UG9pbnQgcHJlY2lzZSBoaXQgdGVzdGluZywgYW5kIHBhc3NlcyB0
aGUgcG9pbnQgaW4gcGFyZW50CiAgICAgLy8gY29vcmRpbmF0ZXMgaW5zdGVhZCBvZiBpbiByZXBh
aW50IGNvbnRhaW5lciBjb29yZGluYXRlcy4gIEV2ZW50dWFsbHkgdGhlCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJQYXRoLmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIFJlbmRlclBh
dGg6OlJlbmRlclBhdGgoU1ZHU3R5bGVkVHJhbnNmb3IKIHsKIH0KIAotY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIFJlbmRlclBhdGg6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAor
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJQYXRoOjpsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsKIH0KIAotVHJhbnNmb3Jt
YXRpb25NYXRyaXggUmVuZGVyUGF0aDo6bG9jYWxUcmFuc2Zvcm0oKSBjb25zdAorQWZmaW5lVHJh
bnNmb3JtIFJlbmRlclBhdGg6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9sb2NhbFRyYW5zZm9ybTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgJKHJldmlzaW9u
IDU0NDkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwxMCArMjUsMTAgQEAKICNkZWZpbmUgUmVuZGVyUGF0aF9oCiAKICNpZiBFTkFCTEUo
U1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHTWFya2Vy
TGF5b3V0SW5mby5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
RmxvYXRSZWN0IG1hcmtlckJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgdmlydHVhbCBGbG9hdFJl
Y3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5z
Zm9ybSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYXRoKGNvbnN0IFBhdGgmKTsKIApAQCAtNjgs
NyArNjgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVk
ZWQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIG11dGFibGUgUGF0aCBtX3BhdGg7CiAgICAgbXV0
YWJsZSBGbG9hdFJlY3QgbV9jYWNoZWRMb2NhbEZpbGxCQm94OwpAQCAtNzYsNyArNzYsNyBAQCBw
cml2YXRlOgogICAgIG11dGFibGUgRmxvYXRSZWN0IG1fY2FjaGVkTG9jYWxSZXBhaW50UmVjdDsK
ICAgICBtdXRhYmxlIEZsb2F0UmVjdCBtX2NhY2hlZExvY2FsTWFya2VyQkJveDsKICAgICBtdXRh
YmxlIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJMYXlvdXRJbmZvOwotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fbG9jYWxUcmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9j
YWxUcmFuc2Zvcm07CiB9OwogCiBpbmxpbmUgUmVuZGVyUGF0aCogdG9SZW5kZXJQYXRoKFJlbmRl
ck9iamVjdCogb2JqZWN0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCShyZXZp
c2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDExICsyNCwxMSBAQAogI2RlZmluZSBSZW5kZXJTVkdJbWFnZV9oCiAK
ICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiU1ZHUHJl
c2VydmVBc3BlY3RSYXRpby5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHSW1hZ2UiOyB9CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisgICAgICAg
IHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCiAgICAgICAgIHZpcnR1YWwgRmxv
YXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEJvdW5kczsgfQpA
QCAtNjgsOSArNjgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAK
LSAgICAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKyAgICAgICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3Jt
OyB9CiAKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sb2NhbFRyYW5zZm9ybTsKKyAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CiAgICAgICAgIEZsb2F0UmVj
dCBtX2xvY2FsQm91bmRzOwogICAgICAgICBtdXRhYmxlIEZsb2F0UmVjdCBtX2NhY2hlZExvY2Fs
UmVwYWludFJlY3Q7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jv
b3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3Bw
CShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsOSArMTkyLDkgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojpj
YWxjVmlld3BvcnQoKQogCiAvLyBSZW5kZXJCb3ggbWV0aG9kcyB3aWxsIGV4cGVjdCBjb29yZGlu
YXRlcyB3L28gYW55IHRyYW5zZm9ybXMgaW4gY29vcmRpbmF0ZXMKIC8vIHJlbGF0aXZlIHRvIG91
ciBib3JkZXJCb3ggb3JpZ2luLiAgVGhpcyBtZXRob2QgZ2l2ZXMgdXMgZXhhY3RseSB0aGF0Lgot
VHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb0JvcmRlckJveFRyYW5z
Zm9ybSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb0JvcmRl
ckJveFRyYW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtOwor
ICAgIEFmZmluZVRyYW5zZm9ybSBjdG07CiAgICAgSW50U2l6ZSBib3JkZXJBbmRQYWRkaW5nID0g
Ym9yZGVyT3JpZ2luVG9Db250ZW50Qm94KCk7CiAgICAgY3RtLnRyYW5zbGF0ZShib3JkZXJBbmRQ
YWRkaW5nLndpZHRoKCksIGJvcmRlckFuZFBhZGRpbmcuaGVpZ2h0KCkpOwogICAgIFNWR1NWR0Vs
ZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOwpAQCAtMjEz
LDE4ICsyMTMsMTggQEAgSW50U2l6ZSBSZW5kZXJTVkdSb290Ojpib3JkZXJPcmlnaW5Ub0Nvbgog
ICAgIHJldHVybiBJbnRTaXplKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRv
cCgpICsgcGFkZGluZ1RvcCgpKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZH
Um9vdDo6bG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0oY29uc3QgSW50UG9pbnQmIHBh
cmVudE9yaWdpbkluQ29udGFpbmVyKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jv
b3Q6OmxvY2FsVG9SZXBhaW50Q29udGFpbmVyVHJhbnNmb3JtKGNvbnN0IEludFBvaW50JiBwYXJl
bnRPcmlnaW5JbkNvbnRhaW5lcikgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBw
YXJlbnRUb0NvbnRhaW5lcjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGFyZW50VG9Db250YWluZXI7
CiAgICAgcGFyZW50VG9Db250YWluZXIudHJhbnNsYXRlKHBhcmVudE9yaWdpbkluQ29udGFpbmVy
LngoKSwgcGFyZW50T3JpZ2luSW5Db250YWluZXIueSgpKTsKICAgICByZXR1cm4gbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpICogcGFyZW50VG9Db250YWluZXI7CiB9CiAKLWNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29u
c3QKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBwYXJlbnRUb0JvcmRlckJveE9mZnNldCA9
IHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBi
b3JkZXJCb3hPcmlnaW5Ub1BhcmVudE9yaWdpbjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYm9yZGVy
Qm94T3JpZ2luVG9QYXJlbnRPcmlnaW47CiAgICAgYm9yZGVyQm94T3JpZ2luVG9QYXJlbnRPcmln
aW4udHJhbnNsYXRlKHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0LndpZHRoKCksIHBhcmVudFRvQm9y
ZGVyQm94T2Zmc2V0LmhlaWdodCgpKTsKIAogICAgIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybSA9
IGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSAqIGJvcmRlckJveE9yaWdpblRvUGFyZW50T3Jp
Z2luOwpAQCAtMjQ0LDkgKzI0NCw5IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSb290OjpyZXBhaW50
UmVjdEluTG8KICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0
cml4IFJlbmRlclNWR1Jvb3Q6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKK0FmZmluZVRyYW5zZm9y
bSBSZW5kZXJTVkdSb290Ojpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFRy
YW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwogfQog
CiB2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4
ZWQpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA1NDQ5MykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdTdHlsZWRFbGVtZW50
OwotY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAK
IGNsYXNzIFJlbmRlclNWR1Jvb3QgOiBwdWJsaWMgUmVuZGVyQm94LCBTVkdSZW5kZXJCYXNlIHsK
IHB1YmxpYzoKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBp
bnQgcGFyZW50WSk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBs
b2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIGJvb2wgZmls
bENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBib29sIHN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKQEAgLTY0LDcgKzY0LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNv
bnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgb3ZlcnJpZGUgc2hvdWxkIGJlIHJlbW92ZWQuCi0g
ICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAK
QEAgLTc4LDEyICs3OCwxMiBAQCBwcml2YXRlOgogCiAgICAgSW50U2l6ZSBwYXJlbnRPcmlnaW5U
b0JvcmRlckJveCgpIGNvbnN0OwogICAgIEludFNpemUgYm9yZGVyT3JpZ2luVG9Db250ZW50Qm94
KCkgY29uc3Q7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUb1JlcGFpbnRDb250YWlu
ZXJUcmFuc2Zvcm0oY29uc3QgSW50UG9pbnQmIHBhcmVudE9yaWdpbkluQ29udGFpbmVyKSBjb25z
dDsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkg
Y29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVG9SZXBhaW50Q29udGFpbmVyVHJhbnNm
b3JtKGNvbnN0IEludFBvaW50JiBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcikgY29uc3Q7CisgICAg
QWZmaW5lVHJhbnNmb3JtIGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAg
IFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIEZsb2F0U2l6ZSBtX3ZpZXdw
b3J0U2l6ZTsKLSAgICBtdXRhYmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybTsKKyAgICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRU
cmFuc2Zvcm07CiB9OwogCiBpbmxpbmUgUmVuZGVyU1ZHUm9vdCogdG9SZW5kZXJTVkdSb290KFJl
bmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuaAkocmV2
aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAKLSNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0
LDcgKzQ0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5z
Zm9ybTsgfQorICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CkBAIC02NiwxMSAr
NjYsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHJlbW92
ZWQgd2hlbiBsb2NhbFRyYW5zZm9ybSgpIGlzIHJlbW92ZWQgZnJvbSBSZW5kZXJPYmplY3QKLSAg
ICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxv
Y2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCiAgICAg
dmlydHVhbCBSb290SW5saW5lQm94KiBjcmVhdGVSb290SW5saW5lQm94KCk7CiAKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX2xvY2FsVHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBt
X2xvY2FsVHJhbnNmb3JtOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDU0NDkz
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCwxMiBAQCBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyOjpSZW5kZXJTCiB7CiB9CiAKLWNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkgY29uc3QKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lcjo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
bG9jYWxUcmFuc2Zvcm07CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXI6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKK0FmZmluZVRyYW5zZm9y
bSBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07CiB9CkBAIC01NCw3ICs1NCw3IEBAIHZv
aWQgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6Y2EKICAgICBpZiAodHJhbnNsYXRp
b24ud2lkdGgoKSA9PSAwICYmIHRyYW5zbGF0aW9uLmhlaWdodCgpID09IDApCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fbG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQodHJhbnNsYXRpb24u
d2lkdGgoKSwgdHJhbnNsYXRpb24uaGVpZ2h0KCkpOworICAgIG1fbG9jYWxUcmFuc2Zvcm0udHJh
bnNsYXRlKHRyYW5zbGF0aW9uLndpZHRoKCksIHRyYW5zbGF0aW9uLmhlaWdodCgpKTsKIH0KIAog
fQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIuaAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICsz
MSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBSZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7
CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGNhbiBiZSBtYWRlIG5vbi12aXJ0dWFsIG9uY2UgU1ZHUmVuZGVyVHJlZUFz
VGV4dCBzdG9wcyB1c2luZyBsb2NhbFRyYW5zZm9ybSgpCi0gICAgICAgIHZpcnR1YWwgVHJhbnNm
b3JtYXRpb25NYXRyaXggbG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKIAotICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX2xvY2FsVHJhbnNmb3JtOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9sb2NhbFRyYW5zZm9ybTsKICAgICB9OwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCShyZXZpc2lvbiA1NDQ5MykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6UmVu
ZGVyU1ZHVmllCiB7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6
bWFya2VyQm91bmRhcmllcyhjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWFya2VyVHJhbnNm
b3JtYXRpb24pIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6Om1h
cmtlckJvdW5kYXJpZXMoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXJrZXJUcmFuc2Zvcm1hdGlv
bikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgY29vcmRpbmF0ZXMgPSByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpOwogCkBAIC00OCwxMiArNDgsMTIgQEAgRmxvYXRSZWN0IFJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyOjptYQogICAgIHJldHVybiBtYXJrZXJUcmFuc2Zvcm1hdGlvbi5t
YXBSZWN0KGNvb3JkaW5hdGVzKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBGbG9hdFBvaW50
JiBvcmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFJlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyOjptYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBjb250ZW50VHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IG9yaWdpbiwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgLy8gVGhlICdvcmlnaW4n
IGNvb3JkaW5hdGUgbWFwcyB0byBTVkdzIHJlZlgvcmVmWSwgZ2l2ZW4gaW4gY29vcmRpbmF0ZXMg
cmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IGVzdGFibGlzaGVkIGJ5IHRoZSBtYXJrZXIKICAgICBG
bG9hdFBvaW50IG1hcHBlZE9yaWdpbiA9IHZpZXdwb3J0VHJhbnNmb3JtKCkubWFwUG9pbnQob3Jp
Z2luKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybWF0aW9uID0gY29udGVu
dFRyYW5zZm9ybWF0aW9uOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbiA9IGNv
bnRlbnRUcmFuc2Zvcm1hdGlvbjsKICAgICBpZiAoc3Ryb2tlV2lkdGggIT0gLTEpCiAgICAgICAg
IHRyYW5zZm9ybWF0aW9uLnNjYWxlTm9uVW5pZm9ybShzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgp
OwogCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmNh
bGNWaWUKICAgICB9CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyOjp2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnZpZXdwb3J0VHJhbnNmb3JtKCkgY29uc3QKIHsKICAg
ICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKSB7CiAgICAgICAgIFNW
R1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOwpA
QCAtMTAyLDEyICsxMDIsMTIgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHVmlld3Bv
cnRDbwogICAgICAgICByZXR1cm4gbWFya2VyLT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKG1fdmll
d3BvcnQud2lkdGgoKSwgbV92aWV3cG9ydC5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwog
fQogCi1jb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXI6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAorY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNv
bnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld3BvcnRUcmFuc2xhdGlvbjsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gdmlld3BvcnRUcmFuc2xhdGlvbjsKICAgICB2aWV3cG9ydFRyYW5z
bGF0aW9uLnRyYW5zbGF0ZShtX3ZpZXdwb3J0LngoKSwgbV92aWV3cG9ydC55KCkpOwogICAgIG1f
bG9jYWxUb1BhcmVudFRyYW5zZm9ybSA9IHZpZXdwb3J0VHJhbnNmb3JtKCkgKiB2aWV3cG9ydFRy
YW5zbGF0aW9uOwogICAgIHJldHVybiBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgJKHJldmlz
aW9uIDU0NDkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTggKzM1LDE4IEBAIHB1YmxpYzoKICAgICBSZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7CiAKICAgICAvLyBDYWxj
dWxhdGVzIG1hcmtlciBib3VuZGFyaWVzLCBtYXBwZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50J3Mg
Y29vcmRpbmF0ZSBzcGFjZQotICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZGFyaWVzKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXJrZXJUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CisgICAgRmxv
YXRSZWN0IG1hcmtlckJvdW5kYXJpZXMoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXJrZXJUcmFu
c2Zvcm1hdGlvbikgY29uc3Q7CiAKICAgICAvLyBHZW5lcmF0ZXMgYSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXggdXNhYmxlIHRvIHJlbmRlciBtYXJrZXIgY29udGVudC4gSGFuZGxlcyBzY2FsaW5nIHRo
ZSBtYXJrZXIgY29udGVudAogICAgIC8vIGFjb3JkaW5nIHRvIFNWR3MgbWFya2VyVW5pdHM9InN0
cm9rZVdpZHRoIiBjb25jZXB0LCB3aGVuIGEgc3Ryb2tlV2lkdGggdmFsdWUgIT0gLTEgaXMgcGFz
c2VkIGluLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hcmtlckNvbnRlbnRUcmFuc2Zvcm1h
dGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoID0gLTEpIGNvbnN0Owor
ICAgIEFmZmluZVRyYW5zZm9ybSBtYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBjb250ZW50VHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG9y
aWdpbiwgZmxvYXQgc3Ryb2tlV2lkdGggPSAtMSkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lciI7IH0KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0
VHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSB2
aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQg
Y2FsY1ZpZXdwb3J0KCk7CiAKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChjb25zdCBGbG9hdFBvaW50JiBwb2ludElu
UGFyZW50KTsKIAogICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OwotICAgIG11dGFibGUgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOworICAgIG11dGFibGUgQWZm
aW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKIH07CiAgIAogaW5saW5lIFJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKiB0b1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKFJl
bmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVy
TGF5b3V0SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFj
dGVyTGF5b3V0SW5mby5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMiw5ICs1MTIs
OSBAQCBib29sIFNWR0NoYXI6OmlzSGlkZGVuKCkgY29uc3QKICAgICByZXR1cm4gcGF0aERhdGEg
JiYgcGF0aERhdGEtPmhpZGRlbjsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHQ2hhcjo6
Y2hhcmFjdGVyVHJhbnNmb3JtKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdDaGFyOjpjaGFy
YWN0ZXJUcmFuc2Zvcm0oKSBjb25zdAogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwogCiAgICAgLy8gUm90YXRlIGNoYXJhY3RlciBhcm91
bmQgYW5nbGUsIGFuZCBwb3NzaWJseSBzY2FsZS4KICAgICBjdG0udHJhbnNsYXRlKHgsIHkpOwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uaAkocmV2aXNp
b24gNTQ0OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDE1ICsyNCwxNSBAQAogI2RlZmluZSBTVkdDaGFyYWN0ZXJM
YXlvdXRJbmZvX2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdUZXh0Q29udGVu
dEVsZW1lbnQuaCIKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNW
R1RleHRDb250ZW50RWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0yMzQsNyArMjM0LDcgQEAgc3RydWN0IFNWR0NoYXIgewogCiAg
ICAgLy8gSGVscGVyIG1ldGhvZHMKICAgICBib29sIGlzSGlkZGVuKCkgY29uc3Q7Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggY2hhcmFjdGVyVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgQWZmaW5l
VHJhbnNmb3JtIGNoYXJhY3RlclRyYW5zZm9ybSgpIGNvbnN0OwogfTsKIAogc3RydWN0IFNWR0lu
bGluZUJveENoYXJhY3RlclJhbmdlIHsKQEAgLTI3NSw3ICsyNzUsNyBAQCBzdHJ1Y3QgU1ZHVGV4
dENodW5rIHsKICAgICAvLyB0ZXh0TGVuZ3RoICYgbGVuZ3RoQWRqdXN0IHN1cHBvcnQKICAgICBm
bG9hdCB0ZXh0TGVuZ3RoOwogICAgIEVMZW5ndGhBZGp1c3QgbGVuZ3RoQWRqdXN0OwotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGN0bTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwogCiAgICAg
Ly8gc3RhdHVzIGZsYWdzCiAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA6IDE7CkBAIC0yOTEsNyAr
MjkxLDcgQEAgc3RydWN0IFNWR1RleHRDaHVuayB7CiBzdHJ1Y3QgU1ZHVGV4dENodW5rV2Fsa2Vy
QmFzZSB7CiAgICAgdmlydHVhbCB+U1ZHVGV4dENodW5rV2Fsa2VyQmFzZSgpIHsgfQogCi0gICAg
dmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50IHN0
YXJ0T2Zmc2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY2h1bmtDdG0sCisgICAgdmly
dHVhbCB2b2lkIG9wZXJhdG9yKCkoU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50IHN0YXJ0
T2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNodW5rQ3RtLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIHN0YXJ0LCBjb25z
dCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBlbmQpID0gMDsKIAogICAgIC8vIEZvbGxvd2lu
Z3MgbWV0aG9kcyBhcmUgb25seSB1c2VkIGZvciBwYWludGluZyB0ZXh0IGNodW5rcwpAQCAtMzA5
LDcgKzMwOSw3IEBAIHN0cnVjdCBTVkdUZXh0Q2h1bmtXYWxrZXIgOiBwdWJsaWMgU1ZHVGUKIHB1
YmxpYzoKICAgICB0eXBlZGVmIHZvaWQgKENhbGxiYWNrQ2xhc3M6OipTVkdUZXh0Q2h1bmtXYWxr
ZXJDYWxsYmFjaykoU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zm
c2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY2h1bmtDdG0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY2h1bmtDdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdDaGFy
Pjo6aXRlcmF0b3ImIHN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9y
JiBlbmQpOwogCkBAIC0zNDMsNyArMzQzLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQod2Fs
a2VyKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShTVkdJbmxpbmVUZXh0
Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZzZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBjaHVua0N0bSwKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShTVkdJbmxpbmVUZXh0Qm94
KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY2h1bmtD
dG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0NoYXI+Ojpp
dGVyYXRvciYgc3RhcnQsIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIGVuZCkKICAg
ICB7CiAgICAgICAgICgqbV9vYmplY3QuKm1fd2Fsa2VyQ2FsbGJhY2spKHRleHRCb3gsIHN0YXJ0
T2Zmc2V0LCBjaHVua0N0bSwgc3RhcnQsIGVuZCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDkgKzEwOCw3IEBAIEZs
b2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVHbHkKICAgICBGbG9hdFJlY3QgZ2x5
cGhSZWN0KHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7CiAKICAgICAvLyBUYWtlIHBlci1jaGFy
YWN0ZXIgdHJhbnNmb3JtYXRpb25zIGludG8gYWNjb3VudAotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGN0bSA9IHN2Z0NoYXIuY2hhcmFjdGVyVHJhbnNmb3JtKCk7Ci0gICAgaWYgKCFjdG0uaXNJ
ZGVudGl0eSgpKQotICAgICAgICBnbHlwaFJlY3QgPSBjdG0ubWFwUmVjdChnbHlwaFJlY3QpOwor
ICAgIGdseXBoUmVjdCA9IHN2Z0NoYXIuY2hhcmFjdGVyVHJhbnNmb3JtKCkubWFwUmVjdChnbHlw
aFJlY3QpOwogCiAgICAgcmV0dXJuIGdseXBoUmVjdDsKIH0KQEAgLTEyNiw3ICsxMjQsNyBAQCBz
dHJ1Y3QgU1ZHSW5saW5lVGV4dEJveENsb3Nlc3RDaGFyYWN0ZXJUCiAgICAgewogICAgIH0KIAot
ICAgIHZvaWQgY2h1bmtQb3J0aW9uQ2FsbGJhY2soU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwg
aW50IHN0YXJ0T2Zmc2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY2h1bmtDdG0sCisg
ICAgdm9pZCBjaHVua1BvcnRpb25DYWxsYmFjayhTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBp
bnQgc3RhcnRPZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY2h1bmtDdG0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBz
dGFydCwgY29uc3QgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgZW5kKQogICAgIHsKICAgICAg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnN0eWxlKCk7
CkBAIC0xOTMsNyArMTkxLDcgQEAgc3RydWN0IFNWR0lubGluZVRleHRCb3hTZWxlY3Rpb25SZWN0
V2FsawogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGNodW5rUG9ydGlvbkNhbGxiYWNrKFNWR0lu
bGluZVRleHRCb3gqIHRleHRCb3gsIGludCBzdGFydE9mZnNldCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGNodW5rQ3RtLAorICAgIHZvaWQgY2h1bmtQb3J0aW9uQ2FsbGJhY2soU1ZHSW5s
aW5lVGV4dEJveCogdGV4dEJveCwgaW50IHN0YXJ0T2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGNodW5rQ3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9y
PFNWR0NoYXI+OjppdGVyYXRvciYgc3RhcnQsIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0
b3ImIGVuZCkKICAgICB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPnRl
eHRSZW5kZXJlcigpLT5zdHlsZSgpOwpAQCAtMzUwLDcgKzM0OCw3IEBAIHZvaWQgU1ZHSW5saW5l
VGV4dEJveDo6cGFpbnRDaGFyYWN0ZXJzKFIKICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9
IHRleHQtPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgY29uc3QgRm9udCYgZm9udCA9
IHN0eWxlVG9Vc2UtPmZvbnQoKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IHN2
Z0NoYXIuY2hhcmFjdGVyVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN2
Z0NoYXIuY2hhcmFjdGVyVHJhbnNmb3JtKCk7CiAgICAgaWYgKCFjdG0uaXNJZGVudGl0eSgpKQog
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKGN0bSk7CiAKQEAgLTUyMyw3ICs1
MjEsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihFCiAgICAgY29u
dGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwogCi0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY3RtID0gc3ZnQ2hhci5jaGFyYWN0ZXJUcmFuc2Zvcm0oKTsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gY3RtID0gc3ZnQ2hhci5jaGFyYWN0ZXJUcmFuc2Zvcm0oKTsKICAgICBpZiAo
IWN0bS5pc0lkZW50aXR5KCkpCiAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShjdG0pOwogCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oCShyZXZpc2lvbiA1NDQ5
MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQCBjbGFzcyBQYXRoOwogY2xhc3MgU1ZHUmVzb3VyY2VNYXJr
ZXI7CiAKIHN0cnVjdCBNYXJrZXJMYXlvdXQgewotICAgIE1hcmtlckxheW91dChTVkdSZXNvdXJj
ZU1hcmtlciogbWFya2VyT2JqID0gMCwgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4T2JqID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSkKKyAgICBNYXJrZXJMYXlvdXQoU1ZHUmVzb3VyY2VNYXJr
ZXIqIG1hcmtlck9iaiA9IDAsIEFmZmluZVRyYW5zZm9ybSBtYXRyaXhPYmogPSBBZmZpbmVUcmFu
c2Zvcm0oKSkKICAgICAgICAgOiBtYXJrZXIobWFya2VyT2JqKQogICAgICAgICAsIG1hdHJpeCht
YXRyaXhPYmopCiAgICAgewpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgTWFya2VyTGF5b3V0IHsK
ICAgICB9CiAKICAgICBTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyOwotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogfTsKIAogY2xh
c3MgU1ZHTWFya2VyTGF5b3V0SW5mbyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5o
IgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWlu
ZXIuaCIKQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIK
LSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yOTksNyArMjk5LDcgQEAgRmxvYXRS
ZWN0IFNWR1JlbmRlckJhc2U6Om1hc2tlckJvdW5kaW5nQgogICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKIH0KIAotdm9pZCBhcHBseVRyYW5zZm9ybVRvUGFpbnRJbmZvKFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsb2NhbFRvQW5j
ZXN0b3JUcmFuc2Zvcm0pCit2b2lkIGFwcGx5VHJhbnNmb3JtVG9QYWludEluZm8oUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRv
QW5jZXN0b3JUcmFuc2Zvcm0pCiB7CiAgICAgaWYgKGxvY2FsVG9BbmNlc3RvclRyYW5zZm9ybS5p
c0lkZW50aXR5KCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NW
R1JlbmRlclN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5k
ZXJTdXBwb3J0LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVu
ZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIFJlbmRlck9iamVj
dCBvciBQYWludEluZm8KICAgICAvLyBVc2VkIGZvciB0cmFuc2Zvcm1pbmcgdGhlIEdyYXBoaWNz
Q29udGV4dCBhbmQgZGFtYWdlIHJlY3QgYmVmb3JlIHBhc3NpbmcgUGFpbnRJbmZvIHRvIGNoaWxk
IHJlbmRlcmVycy4KLSAgICB2b2lkIGFwcGx5VHJhbnNmb3JtVG9QYWludEluZm8oUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbG9jYWxUb0NoaWxk
VHJhbnNmb3JtKTsKKyAgICB2b2lkIGFwcGx5VHJhbnNmb3JtVG9QYWludEluZm8oUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9DaGlsZFRyYW5z
Zm9ybSk7CiAKICAgICAvLyBUaGlzIG9mZmVycyBhIHdheSB0byByZW5kZXIgcGFydHMgb2YgYSBX
ZWJLaXQgcmVuZGVyaW5nIHRyZWUgaW50byBhIEltYWdlQnVmZmVyLgogICAgIHZvaWQgcmVuZGVy
U3VidHJlZVRvSW1hZ2UoSW1hZ2VCdWZmZXIqLCBSZW5kZXJPYmplY3QqKTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA1NDQ5MykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzksNyArMTc5LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgYwogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK1RleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQogewogICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICB0cyA8
PCAiaWRlbnRpdHkiOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQu
aAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIFJlbmRlclBhdGg7CiAgICAgY2xhc3MgUmVuZGVyU1ZHUm9vdDsKICAgICBj
bGFzcyBSZW5kZXJUZXh0OwotICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworICAgIGNs
YXNzIEFmZmluZVRyYW5zZm9ybTsKIAogLy8gZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG1haW4gUmVu
ZGVyVHJlZUFzVGV4dCBjb2RlCiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJQ
YXRoJiwgaW50IGluZGVudCk7CkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgd3JpdGVTVkdUZXh0KFRl
eHRTdHJlYW0mLCBjb25zdCBSZW4KIHZvaWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0cmVh
bSYsIE5vZGUqIHBhcmVudCk7CiAKIC8vIGhlbHBlciBvcGVyYXRvcnMgZGVmaW5lZCB1c2VkIGlu
IHZhcmlvdXMgY2xhc3NlcyB0byBkdW1wIHRoZSByZW5kZXIgdHJlZS4KLVRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CitUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsK
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEludFJlY3QmKTsKIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IENvbG9yJik7CiBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRQb2ludCYpOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
Nyw3ICs1MDcsNyBAQCBzdHJ1Y3QgU1ZHUm9vdElubGluZUJveFBhaW50V2Fsa2VyIHsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHZvaWQgY2h1bmtQb3J0aW9uQ2FsbGJhY2soU1ZHSW5saW5lVGV4
dEJveCogdGV4dEJveCwgaW50IHN0YXJ0T2Zmc2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgY2h1bmtDdG0sCisgICAgdm9pZCBjaHVua1BvcnRpb25DYWxsYmFjayhTVkdJbmxpbmVUZXh0
Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY2h1
bmtDdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHQ2hh
cj46Oml0ZXJhdG9yJiBzdGFydCwgY29uc3QgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgZW5k
KQogICAgIHsKICAgICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRleHRCb3gtPnRleHRSZW5kZXJl
cigpOwpAQCAtODY1LDcgKzg2NSw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5VGV4dExlbmd0aENvcnJl
Y3Rpb25Ub1QKICAgICAgICAgU1ZHQ2hhciYgZmlyc3RDaGFyID0gKihjaHVuay5zdGFydCk7CiAK
ICAgICAgICAgLy8gQXNzdXJlIHdlIGFwcGx5IHRoZSBjaHVuayBzY2FsaW5nIGluIHRoZSByaWdo
dCBvcmlnaW4KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbmV3Q2h1bmtDdG07CisgICAg
ICAgIEFmZmluZVRyYW5zZm9ybSBuZXdDaHVua0N0bTsKICAgICAgICAgbmV3Q2h1bmtDdG0udHJh
bnNsYXRlKGZpcnN0Q2hhci54LCBmaXJzdENoYXIueSk7CiAgICAgICAgIG5ld0NodW5rQ3RtID0g
Y2h1bmsuY3RtICogbmV3Q2h1bmtDdG07CiAgICAgICAgIG5ld0NodW5rQ3RtLnRyYW5zbGF0ZSgt
Zmlyc3RDaGFyLngsIC1maXJzdENoYXIueSk7CkBAIC05NzgsNyArOTc4LDYgQEAgdm9pZCBTVkdS
b290SW5saW5lQm94OjpidWlsZExheW91dEluZm9ybQogICAgICAgICAgICAgICAgIFZlY3RvcjxT
VkdUZXh0Q2h1bms+OjppdGVyYXRvciBpdCA9IHRlbXBDaHVua3MuYmVnaW4oKTsKICAgICAgICAg
ICAgICAgICBWZWN0b3I8U1ZHVGV4dENodW5rPjo6aXRlcmF0b3IgZW5kID0gdGVtcENodW5rcy5l
bmQoKTsKIAotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bTsKICAgICAg
ICAgICAgICAgICBmbG9hdCBjb21wdXRlZExlbmd0aCA9IDAuMGY7CiAgCiAgICAgICAgICAgICAg
ICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvVHJh
bnNmb3JtU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9y
bVN0YXRlLmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zv
cm1TdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEyIEBAIHZvaWQgVHJhbnNm
b3JtU3RhdGU6Om1vdmUoaW50IHgsIGludCB5LCAKICAgICBtX2FjY3VtdWxhdGluZ1RyYW5zZm9y
bSA9IGFjY3VtdWxhdGUgPT0gQWNjdW11bGF0ZVRyYW5zZm9ybTsKIH0KIAorLy8gRklYTUU6IFdl
IHRyYW5zZm9ybSBBZmZpbmVUcmFuc2Zvcm0gdG8gVHJhbnNmb3JtYXRpb25NYXRyaXguIFRoaXMg
aXMgcmF0aGVyIGluZWZmaWNpZW50Lgordm9pZCBUcmFuc2Zvcm1TdGF0ZTo6YXBwbHlUcmFuc2Zv
cm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyLCBUcmFuc2Zv
cm1BY2N1bXVsYXRpb24gYWNjdW11bGF0ZSkKK3sKKyAgICBhcHBseVRyYW5zZm9ybSh0cmFuc2Zv
cm1Gcm9tQ29udGFpbmVyLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgYWNjdW11bGF0ZSk7Cit9
CisKIHZvaWQgVHJhbnNmb3JtU3RhdGU6OmFwcGx5VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyLCBUcmFuc2Zvcm1BY2N1bXVsYXRpb24g
YWNjdW11bGF0ZSkKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGFuIGFjY3VtdWxhdGVkIHRyYW5zZm9y
bSBmcm9tIGxhc3QgdGltZSwgbXVsdGlwbHkgaW4gdGhpcyB0cmFuc2Zvcm0KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvVHJhbnNmb3JtU3RhdGUuaAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9UcmFuc2Zvcm1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIFRyYW5zZm9ybVN0YXRlX2gKICNkZWZpbmUgVHJhbnNmb3JtU3RhdGVfaAogCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTU5LDYgKzYwLDcgQEAg
cHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIG1vdmUoaW50IHgsIGludCB5LCBUcmFuc2Zv
cm1BY2N1bXVsYXRpb24gPSBGbGF0dGVuVHJhbnNmb3JtKTsKKyAgICB2b2lkIGFwcGx5VHJhbnNm
b3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtRnJvbUNvbnRhaW5lciwgVHJhbnNm
b3JtQWNjdW11bGF0aW9uID0gRmxhdHRlblRyYW5zZm9ybSk7CiAgICAgdm9pZCBhcHBseVRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtRnJvbUNvbnRhaW5lciwg
VHJhbnNmb3JtQWNjdW11bGF0aW9uID0gRmxhdHRlblRyYW5zZm9ybSk7CiAgICAgdm9pZCBmbGF0
dGVuKCk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCShyZXZpc2lvbiA1NDQ5MykK
KysrIFdlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NiwxMiArMzYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEdyYWRpZW50U3By
ZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9
CiAgICAgICAgIGJvb2wgYm91bmRpbmdCb3hNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGlu
Z0JveE1vZGU7IH0KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZ3JhZGllbnRUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50VHJhbnNmb3JtOyB9CisgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnRU
cmFuc2Zvcm07IH0KICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHN0b3Bz
KCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQogCiAgICAgICAgIHZvaWQgc2V0U3ByZWFkTWV0
aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kIHZhbHVlKSB7IG1fc3ByZWFkTWV0aG9kID0gdmFsdWU7
IG1fc3ByZWFkTWV0aG9kU2V0ID0gdHJ1ZTsgfQogICAgICAgICB2b2lkIHNldEJvdW5kaW5nQm94
TW9kZShib29sIHZhbHVlKSB7IG1fYm91bmRpbmdCb3hNb2RlID0gdmFsdWU7IG1fYm91bmRpbmdC
b3hNb2RlU2V0ID0gdHJ1ZTsgfQotICAgICAgICB2b2lkIHNldEdyYWRpZW50VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkgeyBtX2dyYWRpZW50VHJhbnNmb3JtID0g
dmFsdWU7IG1fZ3JhZGllbnRUcmFuc2Zvcm1TZXQgPSB0cnVlOyB9CisgICAgICAgIHZvaWQgc2V0
R3JhZGllbnRUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB2YWx1ZSkgeyBtX2dyYWRp
ZW50VHJhbnNmb3JtID0gdmFsdWU7IG1fZ3JhZGllbnRUcmFuc2Zvcm1TZXQgPSB0cnVlOyB9CiAg
ICAgICAgIHZvaWQgc2V0U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHZhbHVl
KSB7IG1fc3RvcHMgPSB2YWx1ZTsgbV9zdG9wc1NldCA9IHRydWU7IH0gCiAKICAgICAgICAgYm9v
bCBoYXNTcHJlYWRNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX3NwcmVhZE1ldGhvZFNldDsgfQpA
QCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFByb3BlcnRp
ZXMKICAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7CiAgICAgICAg
IGJvb2wgbV9ib3VuZGluZ0JveE1vZGU7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
Z3JhZGllbnRUcmFuc2Zvcm07CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50VHJh
bnNmb3JtOwogICAgICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBtX3N0b3BzOwogCiAgICAg
ICAgIC8vIFByb3BlcnR5IHN0YXRlcwpJbmRleDogV2ViQ29yZS9zdmcvUGF0dGVybkF0dHJpYnV0
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9QYXR0ZXJuQXR0cmlidXRlcy5oCShyZXZp
c2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvc3ZnL1BhdHRlcm5BdHRyaWJ1dGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdM
ZW5ndGggaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICAgICAgYm9vbCBi
b3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5nQm94TW9kZTsgfQogICAg
ICAgICBib29sIGJvdW5kaW5nQm94TW9kZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2JvdW5k
aW5nQm94TW9kZUNvbnRlbnQ7IH0KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGF0dGVy
blRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVyblRyYW5zZm9ybTsgfQorICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0
dGVyblRyYW5zZm9ybTsgfQogICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogcGF0dGVy
bkNvbnRlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuQ29udGVudEVsZW1lbnQ7
IH0KIAogICAgICAgICB2b2lkIHNldFgoY29uc3QgU1ZHTGVuZ3RoJiB2YWx1ZSkgeyBtX3ggPSB2
YWx1ZTsgbV94U2V0ID0gdHJ1ZTsgfQpAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgc2V0SGVpZ2h0KGNvbnN0IFNWR0xlbmd0aCYgdmFsdWUpIHsgbV9o
ZWlnaHQgPSB2YWx1ZTsgbV9oZWlnaHRTZXQgPSB0cnVlOyB9CiAgICAgICAgIHZvaWQgc2V0Qm91
bmRpbmdCb3hNb2RlKGJvb2wgdmFsdWUpIHsgbV9ib3VuZGluZ0JveE1vZGUgPSB2YWx1ZTsgbV9i
b3VuZGluZ0JveE1vZGVTZXQgPSB0cnVlOyB9CiAgICAgICAgIHZvaWQgc2V0Qm91bmRpbmdCb3hN
b2RlQ29udGVudChib29sIHZhbHVlKSB7IG1fYm91bmRpbmdCb3hNb2RlQ29udGVudCA9IHZhbHVl
OyBtX2JvdW5kaW5nQm94TW9kZUNvbnRlbnRTZXQgPSB0cnVlOyB9Ci0gICAgICAgIHZvaWQgc2V0
UGF0dGVyblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpIHsgbV9w
YXR0ZXJuVHJhbnNmb3JtID0gdmFsdWU7IG1fcGF0dGVyblRyYW5zZm9ybVNldCA9IHRydWU7IH0K
KyAgICAgICAgdm9pZCBzZXRQYXR0ZXJuVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dmFsdWUpIHsgbV9wYXR0ZXJuVHJhbnNmb3JtID0gdmFsdWU7IG1fcGF0dGVyblRyYW5zZm9ybVNl
dCA9IHRydWU7IH0KICAgICAgICAgdm9pZCBzZXRQYXR0ZXJuQ29udGVudEVsZW1lbnQoY29uc3Qg
U1ZHUGF0dGVybkVsZW1lbnQqIHZhbHVlKSB7IG1fcGF0dGVybkNvbnRlbnRFbGVtZW50ID0gdmFs
dWU7IG1fcGF0dGVybkNvbnRlbnRFbGVtZW50U2V0ID0gdHJ1ZTsgfQogCiAgICAgICAgIGJvb2wg
aGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1feFNldDsgfQpAQCAtNzgsNyArNzgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR0xlbmd0aCBtX2hlaWdodDsKICAgICAgICAgYm9vbCBt
X2JvdW5kaW5nQm94TW9kZTsKICAgICAgICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZUNvbnRlbnQ7
Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcGF0dGVyblRyYW5zZm9ybTsKKyAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1fcGF0dGVyblRyYW5zZm9ybTsKICAgICAgICAgY29uc3QgU1ZH
UGF0dGVybkVsZW1lbnQqIG1fcGF0dGVybkNvbnRlbnRFbGVtZW50OwogCiAgICAgICAgIC8vIFBy
b3BlcnR5IHN0YXRlcwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNw
cAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjpyZXNldFRvQmFzCiAgICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0ID0gdGFyZ2V0RWxlbWVudCgpOwot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KiB0cmFuc2Zvcm0gPSB0YXJnZXQtPnN1cHBsZW1lbnRh
bFRyYW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtID0gdGFyZ2V0LT5z
dXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKICAgICBpZiAoIXRyYW5zZm9ybSkKICAgICAgICAgcmV0
dXJuOwogICAgIHRyYW5zZm9ybS0+bWFrZUlkZW50aXR5KCk7CkBAIC0xNzYsNyArMTc2LDcgQEAg
dm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlQQogICAgIFNWR0VsZW1lbnQq
IHRhcmdldCA9IHRhcmdldEVsZW1lbnQoKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0
dXJuOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KiB0cmFuc2Zvcm0gPSB0YXJnZXQtPnN1cHBs
ZW1lbnRhbFRyYW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtID0gdGFy
Z2V0LT5zdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKICAgICBpZiAoIXRyYW5zZm9ybSkKICAgICAg
ICAgcmV0dXJuOwogICAgIApAQCAtMjIwLDggKzIyMCw4IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6OmFwcGx5UmVzdWwKICAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNl
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBTVkdFbGVtZW50KiBzaGFkb3dUcmVlRWxlbWVudCA9ICgqaXQpLT5zaGFk
b3dUcmVlRWxlbWVudCgpOwogICAgICAgICBBU1NFUlQoc2hhZG93VHJlZUVsZW1lbnQpOwotICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHJhbnNmb3JtID0gc2hhZG93VHJlZUVsZW1lbnQt
PnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCog
dCA9IHRhcmdldEVsZW1lbnQtPnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOworICAgICAgICBBZmZp
bmVUcmFuc2Zvcm0qIHRyYW5zZm9ybSA9IHNoYWRvd1RyZWVFbGVtZW50LT5zdXBwbGVtZW50YWxU
cmFuc2Zvcm0oKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtKiB0ID0gdGFyZ2V0RWxlbWVudC0+
c3VwcGxlbWVudGFsVHJhbnNmb3JtKCk7CiAgICAgICAgIHRyYW5zZm9ybS0+c2V0TWF0cml4KHQt
PmEoKSwgdC0+YigpLCB0LT5jKCksIHQtPmQoKSwgdC0+ZSgpLCB0LT5mKCkpOwogICAgICAgICBp
ZiAoc2hhZG93VHJlZUVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBzaGFkb3dUcmVl
RWxlbWVudC0+cmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTAgKzIz
LDkgQEAKICNpZm5kZWYgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnRfaAogI2RlZmluZSBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudF9oCiAjaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0KLSNpbmNsdWRl
ICJTVkdBbmltYXRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJQYXRoLmgiCisjaW5j
bHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5j
cHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaWYgRU5BQkxFKFNW
RykgJiYgRU5BQkxFKFNWR19BTklNQVRJT04pCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIk1h
cHBlZEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNW
R0FuZ2xlLmgiCkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMzQgKzMwLDM0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OworY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogCi0gICAgY2xhc3MgU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQgOiBwdWJsaWMgU1ZHQW5pbWF0aW9uRWxlbWVudCB7Ci0gICAgcHVibGljOgotICAg
ICAgICBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKLSAgICAgICAgdmlydHVhbCB+U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQoKTsK
LSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdldCgpIGNvbnN0Owot
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFRvQmFzZVZh
bHVlKGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFu
ZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmlu
Zyk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3Qg
U3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWdu
ZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBhcHBseVJlc3VsdHNUb1RhcmdldCgpOwotICAgICAgICB2aXJ0dWFsIGZsb2F0IGNh
bGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0
b1N0cmluZyk7Ci0KLSAgICAgICAgU1ZHVHJhbnNmb3JtIHBhcnNlVHJhbnNmb3JtVmFsdWUoY29u
c3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICBTVkdUcmFuc2Zvcm06OlNWR1Ry
YW5zZm9ybVR5cGUgbV90eXBlOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbV9iYXNlSW5k
ZXhJblRyYW5zZm9ybUxpc3Q7Ci0KLSAgICAgICAgU1ZHVHJhbnNmb3JtIG1fdG9UcmFuc2Zvcm07
Ci0gICAgICAgIFNWR1RyYW5zZm9ybSBtX2Zyb21UcmFuc2Zvcm07Ci0gICAgfTsKK2NsYXNzIFNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50IDogcHVibGljIFNWR0FuaW1hdGlvbkVsZW1lbnQgewor
cHVibGljOgorICAgIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgflNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
KCk7CisgICAgCisgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisK
K3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJp
bmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOworICAgIHZpcnR1YWwgYm9v
bCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGJ5U3RyaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlQW5pbWF0ZWRW
YWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiBy
ZXN1bHRFbGVtZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSZXN1bHRzVG9UYXJnZXQoKTsK
KyAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0
cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7CisKKyAgICBTVkdUcmFuc2Zvcm0gcGFyc2VU
cmFuc2Zvcm1WYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAKKyAgICBTVkdUcmFuc2Zv
cm06OlNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOworICAgIAorICAgIHVuc2lnbmVkIG1fYmFzZUlu
ZGV4SW5UcmFuc2Zvcm1MaXN0OworCisgICAgU1ZHVHJhbnNmb3JtIG1fdG9UcmFuc2Zvcm07Cisg
ICAgU1ZHVHJhbnNmb3JtIG1fZnJvbVRyYW5zZm9ybTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIFNWR0VsZW1lbnRJbnN0YW5jZTsKICAgICBjbGFzcyBTVkdFbGVt
ZW50UmFyZURhdGE7CiAgICAgY2xhc3MgU1ZHU1ZHRWxlbWVudDsKLSAgICBjbGFzcyBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDsKKyAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAKICAgICBjbGFzcyBT
VkdFbGVtZW50IDogcHVibGljIFN0eWxlZEVsZW1lbnQgewogICAgIHB1YmxpYzoKQEAgLTcwLDcg
KzcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2VuZFNWR0xvYWRF
dmVudElmUG9zc2libGUoYm9vbCBzZW5kUGFyZW50TG9hZEV2ZW50cyA9IGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHN1cHBsZW1lbnRhbFRy
YW5zZm9ybSgpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0q
IHN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpIHsgcmV0dXJuIDA7IH0KIAogICAgICAgICB2b2lkIHNl
dFN5bmNocm9uaXplZFNWR0F0dHJpYnV0ZXMoYm9vbCB2YWx1ZSkgeyBtX2FyZVNWR0F0dHJpYnV0
ZXNWYWxpZCA9IHZhbHVlOyB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNp
b24gNTQ0OTMpCisrKyBXZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdGaXRU
b1ZpZXdCb3guaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkF0
dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAt
MzEsNyArMzIsNiBAQAogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCi0jaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC03NSwxMCArNzUsMTAgQEAgYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChEb2N1
bQogICAgIHJldHVybiB0cnVlOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdGaXRUb1Zp
ZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVj
dCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYgcHJlc2VydmVBc3BlY3RSYXRpbywgZmxv
YXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KQorQWZmaW5lVHJhbnNmb3JtIFNWR0ZpdFRv
Vmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybShjb25zdCBGbG9hdFJlY3QmIHZpZXdCb3hS
ZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBm
bG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCiB7CiAgICAgaWYgKCF2aWV3Qm94UmVj
dC53aWR0aCgpIHx8ICF2aWV3Qm94UmVjdC5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCk7CisgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKIAog
ICAgIHJldHVybiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLmdldENUTSh2aWV3Qm94UmVjdC54KCksIHZp
ZXdCb3hSZWN0LnkoKSwgdmlld0JveFJlY3Qud2lkdGgoKSwgdmlld0JveFJlY3QuaGVpZ2h0KCks
IDAsIDAsIHZpZXdXaWR0aCwgdmlld0hlaWdodCk7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdG
aXRUb1ZpZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3gu
aAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMjIgKzI3LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
ICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwog
Ci0gICAgY2xhc3MgU1ZHRml0VG9WaWV3Qm94IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNWR0Zp
dFRvVmlld0JveCgpOwotICAgICAgICB2aXJ0dWFsIH5TVkdGaXRUb1ZpZXdCb3goKTsKLQotICAg
ICAgICBib29sIHBhcnNlVmlld0JveChEb2N1bWVudCosIGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNv
bnN0IFVDaGFyKiBlbmQsIGZsb2F0JiB4LCBmbG9hdCYgeSwgZmxvYXQmIHcsIGZsb2F0JiBoLCBi
b29sIHZhbGlkYXRlID0gdHJ1ZSk7Ci0gICAgICAgIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGNvbnN0IEZsb2F0UmVjdCYgdmlld0JveFJlY3QsIGNv
bnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mLCBmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdI
ZWlnaHQpOwotCi0gICAgICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoRG9jdW1lbnQqLCBN
YXBwZWRBdHRyaWJ1dGUqKTsKLSAgICAgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld0JveEJhc2VWYWx1
ZShTVkdBbmltYXRlZFByb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OlBhc3NUeXBlKSA9IDA7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKFNWR0Fu
aW1hdGVkUHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz46OlBhc3NUeXBlKSA9
IDA7Ci0gICAgfTsKK2NsYXNzIFNWR0ZpdFRvVmlld0JveCB7CitwdWJsaWM6CisgICAgU1ZHRml0
VG9WaWV3Qm94KCk7CisgICAgdmlydHVhbCB+U1ZHRml0VG9WaWV3Qm94KCk7CisKKyAgICBib29s
IHBhcnNlVmlld0JveChEb2N1bWVudCosIGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFy
KiBlbmQsIGZsb2F0JiB4LCBmbG9hdCYgeSwgZmxvYXQmIHcsIGZsb2F0JiBoLCBib29sIHZhbGlk
YXRlID0gdHJ1ZSk7CisgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSB2aWV3Qm94VG9WaWV3VHJh
bnNmb3JtKGNvbnN0IEZsb2F0UmVjdCYgdmlld0JveFJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8mLCBmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpOworCisgICAgYm9v
bCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShEb2N1bWVudCosIE1hcHBlZEF0dHJpYnV0ZSopOworICAg
IGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Vmlld0JveEJhc2VWYWx1ZShTVkdBbmltYXRlZFByb3BlcnR5VHJhaXRzPEZs
b2F0UmVjdD46OlBhc3NUeXBlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFByZXNlcnZlQXNw
ZWN0UmF0aW9CYXNlVmFsdWUoU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvPjo6UGFzc1R5cGUpID0gMDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApJbmRleDogV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvc3Zn
L1NWR0xvY2F0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lu
Y2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgi
CiAjaW5jbHVkZSAiU1ZHRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgpA
QCAtODIsMTYgKzgyLDE2IEBAIEZsb2F0UmVjdCBTVkdMb2NhdGFibGU6OmdldEJCb3goY29uc3Qg
U1YKICAgICByZXR1cm4gZWxlbWVudC0+cmVuZGVyZXIoKS0+b2JqZWN0Qm91bmRpbmdCb3goKTsK
IH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHTG9jYXRhYmxlOjpnZXRDVE0oY29uc3QgU1ZH
RWxlbWVudCogZWxlbWVudCkKK0FmZmluZVRyYW5zZm9ybSBTVkdMb2NhdGFibGU6OmdldENUTShj
b25zdCBTVkdFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG07CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKIAogICAg
IE5vZGUqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKICAgICBpZiAocGFyZW50ICYm
IHBhcmVudC0+aXNTVkdFbGVtZW50KCkpIHsKICAgICAgICAgU1ZHRWxlbWVudCogcGFyZW50RWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXJlbnQpOwogICAgICAgICBpZiAocGFy
ZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LT5pc1N0eWxlZExvY2F0YWJsZSgpKSB7Ci0gICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRDVE0gPSBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50Kj4ocGFyZW50RWxlbWVudCktPmdldENUTSgpOworICAgICAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIHBhcmVudENUTSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZExv
Y2F0YWJsZUVsZW1lbnQqPihwYXJlbnRFbGVtZW50KS0+Z2V0Q1RNKCk7CiAgICAgICAgICAgICBj
dG0gPSBwYXJlbnRDVE0gKiBjdG07CiAgICAgICAgIH0KICAgICB9CkBAIC05OSwxNiArOTksMTYg
QEAgVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHTG9jYXRhYmxlOjpnZXRDVAogICAgIHJldHVybiBj
dG07CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RN
KGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQpCitBZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxl
OjpnZXRTY3JlZW5DVE0oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQo
ZWxlbWVudCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtOworICAgIEFmZmluZVRyYW5z
Zm9ybSBjdG07CiAKICAgICBOb2RlKiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7CiAg
ICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzU1ZHRWxlbWVudCgpKSB7CiAgICAgICAgIFNWR0Vs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGFyZW50KTsK
ICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudC0+aXNTdHlsZWRMb2Nh
dGFibGUoKSkgewotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50Q1RNID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCo+KHBhcmVudEVsZW1lbnQpLT5n
ZXRTY3JlZW5DVE0oKTsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBwYXJlbnRDVE0gPSBz
dGF0aWNfY2FzdDxTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Kj4ocGFyZW50RWxlbWVudCktPmdl
dFNjcmVlbkNUTSgpOwogICAgICAgICAgICAgY3RtID0gcGFyZW50Q1RNICogY3RtOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTE2LDEyICsxMTYsMTIgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZH
TG9jYXRhYmxlOjpnZXRTYwogICAgIHJldHVybiBjdG07CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0
cml4IFNWR0xvY2F0YWJsZTo6Z2V0VHJhbnNmb3JtVG9FbGVtZW50KFNWR0VsZW1lbnQqIHRhcmdl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxl
OjpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBnZXRDVE0oKTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gZ2V0Q1RNKCk7CiAKICAgICBpZiAodGFyZ2V0ICYm
IHRhcmdldC0+aXNTdHlsZWRMb2NhdGFibGUoKSkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0YXJnZXRDVE0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Kj4o
dGFyZ2V0KS0+Z2V0Q1RNKCk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0YXJnZXRDVE0gPSBz
dGF0aWNfY2FzdDxTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Kj4odGFyZ2V0KS0+Z2V0Q1RNKCk7
CiAgICAgICAgIGlmICghdGFyZ2V0Q1RNLmlzSW52ZXJ0aWJsZSgpKSB7CiAgICAgICAgICAgICBl
YyA9IFNWR0V4Y2VwdGlvbjo6U1ZHX01BVFJJWF9OT1RfSU5WRVJUQUJMRTsKICAgICAgICAgICAg
IHJldHVybiBjdG07CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJD
b3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzIgKzI3LDMyIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OwotICAgIGNsYXNzIEZsb2F0UmVjdDsKLSAgICBjbGFzcyBTVkdFbGVtZW50OwotCi0gICAgY2xh
c3MgU1ZHTG9jYXRhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNWR0xvY2F0YWJsZSgpOwot
ICAgICAgICB2aXJ0dWFsIH5TVkdMb2NhdGFibGUoKTsKLQotICAgICAgICAvLyAnU1ZHTG9jYXRh
YmxlJyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3Bv
cnRFbGVtZW50KCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRo
ZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3QgPSAwOwotCi0gICAgICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IGdldEJCb3goKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25N
YXRyaXggZ2V0Q1RNKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGdldFNjcmVlbkNUTSgpIGNvbnN0ID0gMDsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggZ2V0VHJhbnNmb3JtVG9FbGVtZW50KFNWR0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7Ci0KLSAgICAgICAgc3RhdGljIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9ydEVsZW1l
bnQoY29uc3QgU1ZHRWxlbWVudCopOwotICAgICAgICBzdGF0aWMgU1ZHRWxlbWVudCogZmFydGhl
c3RWaWV3cG9ydEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCopOwotCi0gICAgcHJvdGVjdGVkOgot
ICAgICAgICBzdGF0aWMgRmxvYXRSZWN0IGdldEJCb3goY29uc3QgU1ZHRWxlbWVudCopOwotICAg
ICAgICBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0Q1RNKGNvbnN0IFNWR0VsZW1lbnQq
KTsKLSAgICAgICAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFNjcmVlbkNUTShjb25z
dCBTVkdFbGVtZW50Kik7Ci0gICAgfTsKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEZs
b2F0UmVjdDsKK2NsYXNzIFNWR0VsZW1lbnQ7CisKK2NsYXNzIFNWR0xvY2F0YWJsZSB7CitwdWJs
aWM6CisgICAgU1ZHTG9jYXRhYmxlKCk7CisgICAgdmlydHVhbCB+U1ZHTG9jYXRhYmxlKCk7CisK
KyAgICAvLyAnU1ZHTG9jYXRhYmxlJyBmdW5jdGlvbnMKKyAgICB2aXJ0dWFsIFNWR0VsZW1lbnQq
IG5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTVkdFbGVt
ZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGdldEJCb3goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gZ2V0Q1RNKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNj
cmVlbkNUTSgpIGNvbnN0ID0gMDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0VHJhbnNmb3JtVG9F
bGVtZW50KFNWR0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisKKyAgICBzdGF0aWMg
U1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudChjb25zdCBTVkdFbGVtZW50Kik7Cisg
ICAgc3RhdGljIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KGNvbnN0IFNWR0Vs
ZW1lbnQqKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBGbG9hdFJlY3QgZ2V0QkJveChjb25z
dCBTVkdFbGVtZW50Kik7CisgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oY29uc3Qg
U1ZHRWxlbWVudCopOworICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKGNv
bnN0IFNWR0VsZW1lbnQqKTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
V2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcv
U1ZHTWFya2VyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgU1ZH
TWFya2VyRWxlbWVudDo6flNWR01hcmtlckVsZW1lbnQoKQogewogfQogCi1UcmFuc2Zvcm1hdGlv
bk1hdHJpeCBTVkdNYXJrZXJFbGVtZW50Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGZsb2F0IHZp
ZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdNYXJr
ZXJFbGVtZW50Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQg
dmlld0hlaWdodCkgY29uc3QKIHsKICAgICByZXR1cm4gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94
VG9WaWV3VHJhbnNmb3JtKHZpZXdCb3goKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpLCB2aWV3V2lk
dGgsIHZpZXdIZWlnaHQpOwogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkocmV2aXNpb24g
NTQ0OTMpCisrKyBXZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdNYXJrZXJF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFs
IH5TVkdNYXJrZXJFbGVtZW50KCk7CiAKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdmll
d0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpIGNv
bnN0OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9h
dCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2V0
T3JpZW50VG9BdXRvKCk7CiAgICAgICAgIHZvaWQgc2V0T3JpZW50VG9BbmdsZShjb25zdCBTVkdB
bmdsZSYpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsx
OTgsNyBAQCBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBTVkdNYXNrRWxlbWVudDo6CiAgICAgICAg
IHJlcGFpbnRSZWN0LnVuaXRlKG5vZGUtPnJlbmRlcmVyKCktPmxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKS5tYXBSZWN0KG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpKTsKICAgICB9CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZXh0VHJhbnNm
b3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZXh0VHJhbnNmb3JtOwogICAgIC8vIFdlIG5l
ZWQgdG8gc2NhbGUgcmVwYWludFJlY3QgZm9yIG9iamVjdEJvdW5kaW5nQm94IHRvIGdldCB0aGUg
ZHJhd2luZyBhcmVhLgogICAgIGlmIChtYXNrQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVz
OjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CiAgICAgICAgIGNvbnRleHRUcmFu
c2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJv
dW5kaW5nQm94LmhlaWdodCgpKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR01hdHJpeC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTWF0cml4LmlkbAkocmV2aXNpb24gNTQ0OTMpCisr
KyBXZWJDb3JlL3N2Zy9TVkdNYXRyaXguaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5
IEBACiAKIG1vZHVsZSBzdmcgewogCi0gICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD1TVkcsIFBP
RFR5cGU9VHJhbnNmb3JtYXRpb25NYXRyaXhdIFNWR01hdHJpeCB7CisgICAgaW50ZXJmYWNlIFtD
b25kaXRpb25hbD1TVkcsIFBPRFR5cGU9QWZmaW5lVHJhbnNmb3JtXSBTVkdNYXRyaXggewogICAg
ICAgICAvLyBGSVhNRTogdGhlc2UgYXR0cmlidXRlcyBzaG91bGQgYWxsIGJlIGZsb2F0cyBidXQg
c2luY2Ugd2UgaW1wbGVtZW50Ci0gICAgICAgIC8vIFRyYW5zZm9ybWF0aW9uTWF0cml4IHdpdGgg
ZG91YmxlcyBzZXR0aW5nIHRoZXNlIGFzIGRvdWJsZXMgbWFrZXMgbW9yZSBzZW5zZS4KKyAgICAg
ICAgLy8gQWZmaW5lVHJhbnNmb3JtIHdpdGggZG91YmxlcyBzZXR0aW5nIHRoZXNlIGFzIGRvdWJs
ZXMgbWFrZXMgbW9yZSBzZW5zZS4KICAgICAgICAgYXR0cmlidXRlIGRvdWJsZSBhOwogICAgICAg
ICBhdHRyaWJ1dGUgZG91YmxlIGI7CiAgICAgICAgIGF0dHJpYnV0ZSBkb3VibGUgYzsKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9z
dmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBA
CiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgogCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTM5
LDcgKzQwLDYgQEAKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtYWJsZS5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgotI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMjM1LDcgKzIzNSw3IEBA
IHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmJ1aWxkUGF0dGVybihjb24KICAgICAgICAgfQogICAg
IH0KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdCb3hDVE0gPSB2aWV3Qm94VG9WaWV3
VHJhbnNmb3JtKHZpZXdCb3goKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpLCBwYXR0ZXJuQm91bmRh
cmllcy53aWR0aCgpLCBwYXR0ZXJuQm91bmRhcmllcy5oZWlnaHQoKSk7IAorICAgIEFmZmluZVRy
YW5zZm9ybSB2aWV3Qm94Q1RNID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh2aWV3Qm94KCksIHBy
ZXNlcnZlQXNwZWN0UmF0aW8oKSwgcGF0dGVybkJvdW5kYXJpZXMud2lkdGgoKSwgcGF0dGVybkJv
dW5kYXJpZXMuaGVpZ2h0KCkpOyAKICAgICBGbG9hdFJlY3QgcGF0dGVybkJvdW5kYXJpZXNJbmNs
dWRpbmdPdmVyZmxvdyA9IHBhdHRlcm5Cb3VuZGFyaWVzOwogCiAgICAgLy8gQXBwbHkgb2JqZWN0
Qm91bmRpbmdCb3hNb2RlIGZpeHVwIGZvciBwYXR0ZXJuQ29udGVudFVuaXRzLCBpZiB2aWV3Qm94
IGlzIG5vdCBzZXQuCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAko
cmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdQ
YXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAKQEAgLTIzNSwx
MiArMjM1LDEyIEBAIHZvaWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6dHJhbnNmb3JtUmUKICAg
ICB9CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86Omdl
dENUTShkb3VibGUgbG9naWNYLCBkb3VibGUgbG9naWNZLAorQWZmaW5lVHJhbnNmb3JtIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW86OmdldENUTShkb3VibGUgbG9naWNYLCBkb3VibGUgbG9naWNZLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9n
aWNXaWR0aCwgZG91YmxlIGxvZ2ljSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgLypwaHlzWCovLCBkb3VibGUgLypwaHlzWSovLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgcGh5
c1dpZHRoLCBkb3VibGUgcGh5c0hlaWdodCkgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0ZW1wOworICAgIEFmZmluZVRyYW5zZm9ybSB0ZW1wOwogCiAgICAgaWYgKGFsaWduKCkg
PT0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fVU5LTk9XTikKICAgICAgICAgcmV0dXJuIHRlbXA7
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCShyZXZpc2lvbiA1NDQ5MykK
KysrIFdlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgU3RyaW5n
OwotICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworICAgIGNsYXNzIEFmZmluZVRyYW5z
Zm9ybTsKIAogICAgIGNsYXNzIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8gewogICAgIHB1YmxpYzoK
QEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgdHJh
bnNmb3JtUmVjdChGbG9hdFJlY3QmIGRlc3RSZWN0LCBGbG9hdFJlY3QmIHNyY1JlY3QpOwogICAg
ICAgICAKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0Q1RNKGRvdWJsZSBsb2dpY1gs
IGRvdWJsZSBsb2dpY1ksCisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oZG91YmxlIGxv
Z2ljWCwgZG91YmxlIGxvZ2ljWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgbG9naWNXaWR0aCwgZG91YmxlIGxvZ2ljSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBwaHlzWCwgZG91YmxlIHBoeXNZLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBwaHlzV2lkdGgsIGRvdWJsZSBwaHlzSGVpZ2h0KSBjb25zdDsK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWYg
RU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ4LDcgKzQ5LDYgQEAKICNp
bmNsdWRlICJTVkdab29tRXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0xMTksNyArMTE5LDcgQEAgRmxvYXRSZWN0IFNWR1NWR0VsZW1lbnQ6OnZp
ZXdwb3J0KCkgY29ucwogICAgIH0KICAgICBmbG9hdCB3ID0gd2lkdGgoKS52YWx1ZSh0aGlzKTsK
ICAgICBmbG9hdCBoID0gaGVpZ2h0KCkudmFsdWUodGhpcyk7Ci0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odywgaCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHcsIGgpOwogICAgIGRv
dWJsZSB3RG91YmxlID0gdzsKICAgICBkb3VibGUgaERvdWJsZSA9IGg7CiAgICAgdmlld0JveC5t
YXAoX3gsIF95LCBfeCwgX3kpOwpAQCAtNDE0LDkgKzQxNCw5IEBAIEZsb2F0UG9pbnQgU1ZHU1ZH
RWxlbWVudDo6Y3JlYXRlU1ZHUG9pbnQKICAgICByZXR1cm4gRmxvYXRQb2ludCgpOwogfQogCi1U
cmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKQorQWZm
aW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeCgpCiB7Ci0gICAgcmV0
dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgp
OwogfQogCiBGbG9hdFJlY3QgU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHUmVjdCgpCkBAIC00Mjks
MjYgKzQyOSwyNiBAQCBTVkdUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHVHJhCiAg
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgpOwogfQogCi1TVkdUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVu
dDo6Y3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4KQorU1ZHVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9y
bUZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCiB7CiAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybShtYXRyaXgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdTVkdF
bGVtZW50OjpnZXRDVE0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6Omdl
dENUTSgpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0OworICAgIEFmZmlu
ZVRyYW5zZm9ybSBtYXQ7CiAgICAgaWYgKCFpc091dGVybW9zdFNWRygpKQogICAgICAgICBtYXQu
dHJhbnNsYXRlKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKTsKIAogICAgIGlmIChh
dHRyaWJ1dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW0oU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgewot
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3Qm94ID0gdmlld0JveFRvVmlld1RyYW5z
Zm9ybSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWlnaHQoKS52YWx1ZSh0aGlzKSk7CisgICAgICAg
IEFmZmluZVRyYW5zZm9ybSB2aWV3Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgp
LnZhbHVlKHRoaXMpLCBoZWlnaHQoKS52YWx1ZSh0aGlzKSk7CiAgICAgICAgIG1hdCA9IHZpZXdC
b3ggKiBtYXQ7CiAgICAgfQogCiAgICAgcmV0dXJuIG1hdDsKIH0KIAotVHJhbnNmb3JtYXRpb25N
YXRyaXggU1ZHU1ZHRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29uc3QKK0FmZmluZVRyYW5zZm9y
bSBTVkdTVkdFbGVtZW50OjpnZXRTY3JlZW5DVE0oKSBjb25zdAogewogICAgIGRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIEZsb2F0UG9pbnQg
cm9vdExvY2F0aW9uOwpAQCAtNDY0LDExICs0NjQsMTEgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
U1ZHU1ZHRWxlbWVudDo6Z2V0UwogICAgICAgICAgICAgcm9vdExvY2F0aW9uLm1vdmUoeCgpLnZh
bHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpOwogICAgIH0KICAgICAKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtYXQgPSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0o
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0ID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6
Z2V0U2NyZWVuQ1RNKCk7CiAgICAgbWF0LnRyYW5zbGF0ZShyb290TG9jYXRpb24ueCgpLCByb290
TG9jYXRpb24ueSgpKTsKIAogICAgIGlmIChhdHRyaWJ1dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW0o
U1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2
aWV3Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWln
aHQoKS52YWx1ZSh0aGlzKSk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3Qm94ID0gdmll
d0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWlnaHQoKS52YWx1ZSh0
aGlzKSk7CiAgICAgICAgIG1hdCA9IHZpZXdCb3ggKiBtYXQ7CiAgICAgfQogCkBAIC01MzgsNyAr
NTM4LDcgQEAgYm9vbCBTVkdTVkdFbGVtZW50Ojppc091dGVybW9zdFNWRygpIGNvbgogICAgIHJl
dHVybiAhcGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25N
YXRyaXggU1ZHU1ZHRWxlbWVudDo6dmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lk
dGgsIGZsb2F0IHZpZXdIZWlnaHQpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVu
dDo6dmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWln
aHQpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IHZpZXdCb3hSZWN0OwogICAgIGlmICh1c2VDdXJy
ZW50VmlldygpKSB7CkBAIC01NDcsNyArNTQ3LDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZH
U1ZHRWxlbWVudDo6dmlldwogICAgIH0gZWxzZQogICAgICAgICB2aWV3Qm94UmVjdCA9IHZpZXdC
b3goKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IFNWR0ZpdFRvVmlld0JveDo6
dmlld0JveFRvVmlld1RyYW5zZm9ybSh2aWV3Qm94UmVjdCwgcHJlc2VydmVBc3BlY3RSYXRpbygp
LCB2aWV3V2lkdGgsIHZpZXdIZWlnaHQpOworICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBTVkdG
aXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmlld0JveFJlY3QsIHByZXNlcnZl
QXNwZWN0UmF0aW8oKSwgdmlld1dpZHRoLCB2aWV3SGVpZ2h0KTsKICAgICBpZiAodXNlQ3VycmVu
dFZpZXcoKSAmJiBjdXJyZW50VmlldygpKQogICAgICAgICByZXR1cm4gY3VycmVudFZpZXcoKS0+
dHJhbnNmb3JtKCktPmNvbmNhdGVuYXRlKCkubWF0cml4KCkgKiBjdG07CiAKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTYgKzEwNywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyBTVkdMZW5ndGggY3JlYXRlU1ZHTGVuZ3RoKCk7CiAgICAgICAgIHN0
YXRpYyBTVkdBbmdsZSBjcmVhdGVTVkdBbmdsZSgpOwogICAgICAgICBzdGF0aWMgRmxvYXRQb2lu
dCBjcmVhdGVTVkdQb2ludCgpOwotICAgICAgICBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Y3JlYXRlU1ZHTWF0cml4KCk7CisgICAgICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gY3JlYXRl
U1ZHTWF0cml4KCk7CiAgICAgICAgIHN0YXRpYyBGbG9hdFJlY3QgY3JlYXRlU1ZHUmVjdCgpOwog
ICAgICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtIGNyZWF0ZVNWR1RyYW5zZm9ybSgpOwotICAgICAg
ICBzdGF0aWMgU1ZHVHJhbnNmb3JtIGNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSBjcmVh
dGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
IAogICAgICAgICAvLyAndmlydHVhbCBTVkdMb2NhdGFibGUnIGZ1bmN0aW9ucwotICAgICAgICB2
aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldENUTSgpIGNvbnN0OwotICAgICAgICB2aXJ0
dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFNjcmVlbkNUTSgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBi
b29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRF
bGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQogICAgICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwpAQCAt
MTI3LDcgKzEyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2
aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpIGNvbnN0OworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gdmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWln
aHQpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgaW5oZXJpdFZpZXdBdHRyaWJ1dGVzKFNWR1ZpZXdF
bGVtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw5IEBACiAjaWYgRU5BQkxFKFNW
RykKICNpbmNsdWRlICJTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAjaW5jbHVkZSAiU1ZH
RWxlbWVudC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAi
U1ZHU1ZHRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NSwxMiArNTUsMTIg
QEAgRmxvYXRSZWN0IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldAogICAgIHJldHVybiBT
VkdMb2NhdGFibGU6OmdldEJCb3godGhpcyk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0g
U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0Q1RNKCkgY29uc3QKIHsKICAgICByZXR1cm4g
U1ZHTG9jYXRhYmxlOjpnZXRDVE0odGhpcyk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CitBZmZpbmVUcmFu
c2Zvcm0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXRTY3JlZW5DVE0odGhpcyk7CiB9CkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiA1NDQ5MykKKysr
IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsOCArNDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgU1ZH
RWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKIAogICAgICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBnZXRCQm94KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3Jt
YXRpb25NYXRyaXggZ2V0Q1RNKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRp
b25NYXRyaXggZ2V0U2NyZWVuQ1RNKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGdldENUTSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBn
ZXRTY3JlZW5DVE0oKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDEzIEBACiAjaWYgRU5BQkxFKFNW
RykKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgogCisjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIk1hcHBl
ZEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKICNpbmNsdWRlICJTVkdEb2N1
bWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFu
c2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00NCwyNSArNDQsMjUgQEAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6On5TVkdTdHlsZQogewogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0Q1RNKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0Q1RNKCkgY29uc3QKIHsKICAgICByZXR1
cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0Q1RNKHRoaXMpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1h
dHJpeCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29uc3QK
K0FmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0U2NyZWVu
Q1RNKCkgY29uc3QKIHsKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0U2NyZWVuQ1RN
KHRoaXMpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0g
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBj
b25zdAogewogICAgIHJldHVybiBtX3N1cHBsZW1lbnRhbFRyYW5zZm9ybSA/IHRyYW5zZm9ybSgp
LT5jb25jYXRlbmF0ZSgpLm1hdHJpeCgpICogKm1fc3VwcGxlbWVudGFsVHJhbnNmb3JtIDogdHJh
bnNmb3JtKCktPmNvbmNhdGVuYXRlKCkubWF0cml4KCk7CiB9CiAgICAgCi1UcmFuc2Zvcm1hdGlv
bk1hdHJpeCogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN1cHBsZW1lbnRhbFRyYW5z
Zm9ybSgpCitBZmZpbmVUcmFuc2Zvcm0qIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojpz
dXBwbGVtZW50YWxUcmFuc2Zvcm0oKQogewogICAgIGlmICghbV9zdXBwbGVtZW50YWxUcmFuc2Zv
cm0pCi0gICAgICAgIG1fc3VwcGxlbWVudGFsVHJhbnNmb3JtLnNldChuZXcgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSk7CisgICAgICAgIG1fc3VwcGxlbWVudGFsVHJhbnNmb3JtLnNldChuZXcgQWZm
aW5lVHJhbnNmb3JtKCkpOwogICAgIHJldHVybiBtX3N1cHBsZW1lbnRhbFRyYW5zZm9ybS5nZXQo
KTsKIH0KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC5oCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDQyICsyOCw0MiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKK2NsYXNzIEFm
ZmluZVRyYW5zZm9ybTsKIAotICAgIGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
IDogcHVibGljIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVHJhbnNmb3JtYWJsZSB7Ci0gICAgcHVi
bGljOgotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICAgICAgdmlydHVhbCB+U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQoKTsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZFRy
YW5zZm9ybWFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgdmlydHVhbCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRDVE0oKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBnZXRTY3JlZW5DVE0oKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBT
VkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1
YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKLSAgICAgICAg
Ci0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggYW5pbWF0ZWRMb2NhbFRyYW5z
Zm9ybSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4KiBzdXBw
bGVtZW50YWxUcmFuc2Zvcm0oKTsKLQotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94
KCkgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJik7Ci0KLSAgICAgICAgLy8gImJhc2UgY2xhc3MiIG1ldGhvZHMg
Zm9yIGFsbCB0aGUgZWxlbWVudHMgd2hpY2ggcmVuZGVyIGFzIHBhdGhzCi0gICAgICAgIHZpcnR1
YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3QgeyByZXR1cm4gUGF0aCgpOyB9Ci0gICAgICAgIHZp
cnR1YWwgUGF0aCB0b0NsaXBQYXRoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7Ci0KLSAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIERFQ0xBUkVfQU5JTUFURURfUFJPUEVSVFkoU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQsIFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCBTVkdUcmFuc2Zvcm1M
aXN0KiwgVHJhbnNmb3JtLCB0cmFuc2Zvcm0pCi0KLSAgICBwcml2YXRlOgotICAgICAgICAvLyBV
c2VkIGJ5IDxhbmltYXRlTW90aW9uPgotICAgICAgICBPd25QdHI8VHJhbnNmb3JtYXRpb25NYXRy
aXg+IG1fc3VwcGxlbWVudGFsVHJhbnNmb3JtOwotICAgIH07CitjbGFzcyBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVHJhbnNmb3JtYWJs
ZSB7CitwdWJsaWM6CisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRUcmFuc2Zvcm1h
YmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gZ2V0Q1RNKCkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVu
Q1RNKCkgY29uc3Q7CisgICAgdmlydHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVt
ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxl
bWVudCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSogc3Vw
cGxlbWVudGFsVHJhbnNmb3JtKCk7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOworICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJik7CisKKyAgICAvLyAiYmFzZSBjbGFzcyIgbWV0aG9kcyBmb3IgYWxsIHRoZSBlbGVtZW50
cyB3aGljaCByZW5kZXIgYXMgcGF0aHMKKyAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIFBhdGgoKTsgfQorICAgIHZpcnR1YWwgUGF0aCB0b0NsaXBQYXRoKCkgY29u
c3Q7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5h
KiwgUmVuZGVyU3R5bGUqKTsKKworcHJvdGVjdGVkOgorICAgIERFQ0xBUkVfQU5JTUFURURfUFJP
UEVSVFkoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsIFNWR05hbWVzOjp0cmFuc2Zvcm1B
dHRyLCBTVkdUcmFuc2Zvcm1MaXN0KiwgVHJhbnNmb3JtLCB0cmFuc2Zvcm0pCisKK3ByaXZhdGU6
CisgICAgLy8gVXNlZCBieSA8YW5pbWF0ZU1vdGlvbj4KKyAgICBPd25QdHI8QWZmaW5lVHJhbnNm
b3JtPiBtX3N1cHBsZW1lbnRhbFRyYW5zZm9ybTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1
NDQ5MykKKysrIFdlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdHJ1Y3QgU1ZHSW5saW5lVGV4dEJveFF1ZXJ5V2Fs
a2VyIHsKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBjaHVua1BvcnRpb25DYWxsYmFjayhTVkdJ
bmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZzZXQsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwKKyAgICB2b2lkIGNodW5rUG9ydGlvbkNhbGxiYWNrKFNWR0lubGluZVRleHRC
b3gqIHRleHRCb3gsIGludCBzdGFydE9mZnNldCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0
b3ImIHN0YXJ0LCBjb25zdCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBlbmQpCiAgICAgewog
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+c3R5
bGUoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2Vi
Q29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3
IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVudC5oIgogCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiTWFwcGVkQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgpAQCAtMzAs
NyArMzEsNiBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHVFNw
YW5FbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzIsMjUg
KzcyLDI1IEBAIEZsb2F0UmVjdCBTVkdUZXh0RWxlbWVudDo6Z2V0QkJveCgpIGNvbnMKICAgICBy
ZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0QkJveCh0aGlzKTsKIH0KIAotVHJhbnNmb3JtYXRp
b25NYXRyaXggU1ZHVGV4dEVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CitBZmZpbmVUcmFu
c2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybWFibGU6OmdldFNjcmVlbkNUTSh0aGlzKTsKIH0KIAotVHJhbnNmb3JtYXRp
b25NYXRyaXggU1ZHVGV4dEVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0g
U1ZHVGV4dEVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNWR1RyYW5zZm9y
bWFibGU6OmdldENUTSh0aGlzKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHVGV4dEVs
ZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNW
R1RleHRFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9zdXBwbGVtZW50YWxUcmFuc2Zvcm0gPyB0cmFuc2Zvcm0oKS0+Y29uY2F0ZW5hdGUoKS5t
YXRyaXgoKSAqICptX3N1cHBsZW1lbnRhbFRyYW5zZm9ybSA6IHRyYW5zZm9ybSgpLT5jb25jYXRl
bmF0ZSgpLm1hdHJpeCgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCogU1ZHVGV4dEVsZW1l
bnQ6OnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpCitBZmZpbmVUcmFuc2Zvcm0qIFNWR1RleHRFbGVt
ZW50OjpzdXBwbGVtZW50YWxUcmFuc2Zvcm0oKQogewogICAgIGlmICghbV9zdXBwbGVtZW50YWxU
cmFuc2Zvcm0pCi0gICAgICAgIG1fc3VwcGxlbWVudGFsVHJhbnNmb3JtLnNldChuZXcgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSk7CisgICAgICAgIG1fc3VwcGxlbWVudGFsVHJhbnNmb3JtLnNldChu
ZXcgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgIHJldHVybiBtX3N1cHBsZW1lbnRhbFRyYW5zZm9y
bS5nZXQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCShyZXZpc2lvbiA1NDQ5MykKKysr
IFdlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICsz
OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgU1ZHRWxlbWVudCog
ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBnZXRCQm94KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRy
aXggZ2V0Q1RNKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Z2V0U2NyZWVuQ1RNKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRy
aXggYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KiBzdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGdldFNjcmVlbkNUTSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtKiBzdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKIAogICAgICAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHls
ZSopOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2Rl
KikgY29uc3Q7CkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
REVDTEFSRV9BTklNQVRFRF9QUk9QRVJUWShTVkdUZXh0RWxlbWVudCwgU1ZHTmFtZXM6OnRyYW5z
Zm9ybUF0dHIsIFNWR1RyYW5zZm9ybUxpc3QqLCBUcmFuc2Zvcm0sIHRyYW5zZm9ybSkKICAgICAg
ICAKICAgICAgICAvLyBVc2VkIGJ5IDxhbmltYXRlTW90aW9uPgotICAgICAgIE93blB0cjxUcmFu
c2Zvcm1hdGlvbk1hdHJpeD4gbV9zdXBwbGVtZW50YWxUcmFuc2Zvcm07CisgICAgICAgT3duUHRy
PEFmZmluZVRyYW5zZm9ybT4gbV9zdXBwbGVtZW50YWxUcmFuc2Zvcm07CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUg
IlNWR1RleHRQYXRoRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIKQEAgLTI5LDcgKzMwLDYgQEAKICNpbmNsdWRlICJT
VkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
U1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCShyZXZpc2lvbiA1
NDQ5MykKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDExICs0MSwxMSBAQCBTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybShTVkdUcmFuc2Zvcm1U
CiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fYW5nbGUoMCkKICAgICAsIG1fY2VudGVyKEZs
b2F0UG9pbnQoKSkKLSAgICAsIG1fbWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpCisgICAg
LCBtX21hdHJpeChBZmZpbmVUcmFuc2Zvcm0oKSkKIHsKIH0KIAotU1ZHVHJhbnNmb3JtOjpTVkdU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK1NWR1RyYW5zZm9y
bTo6U1ZHVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQogICAgIDogbV90
eXBlKFNWR19UUkFOU0ZPUk1fTUFUUklYKQogICAgICwgbV9hbmdsZSgwKQogICAgICwgbV9tYXRy
aXgobWF0cml4KQpAQCAtNjYsNyArNjYsNyBAQCBTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybVR5
cGUgU1ZHVHJhbnNmCiAgICAgcmV0dXJuIG1fdHlwZTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRy
aXggU1ZHVHJhbnNmb3JtOjptYXRyaXgoKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1RyYW5z
Zm9ybTo6bWF0cml4KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tYXRyaXg7CiB9CkBAIC04MSw3
ICs4MSw3IEBAIEZsb2F0UG9pbnQgU1ZHVHJhbnNmb3JtOjpyb3RhdGlvbkNlbnRlcigKICAgICBy
ZXR1cm4gbV9jZW50ZXI7CiB9CiAKLXZvaWQgU1ZHVHJhbnNmb3JtOjpzZXRNYXRyaXgoVHJhbnNm
b3JtYXRpb25NYXRyaXggbWF0cml4KSAvL2NvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgpCit2b2lkIFNWR1RyYW5zZm9ybTo6c2V0TWF0cml4KEFmZmluZVRyYW5zZm9ybSBtYXRyaXgp
CiB7CiAgICAgbV90eXBlID0gU1ZHX1RSQU5TRk9STV9NQVRSSVg7CiAgICAgbV9hbmdsZSA9IDA7
CkBAIC0xNDksNiArMTQ5LDUgQEAgdm9pZCBTVkdUcmFuc2Zvcm06OnNldFNrZXdZKGZsb2F0IGFu
Z2xlKQogICAgIG1fbWF0cml4LnNrZXdZKGFuZ2xlKTsKIH0KIAotLy8gdmltOnRzPTQ6bm9ldAog
I2VuZGlmIC8vIEVOQUJMRShTVkcpCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5oCShyZXZpc2lvbiA1NDQ5
MykKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3
ICsyMiw3IEBACiAjZGVmaW5lIFNWR1RyYW5zZm9ybV9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKQEAg
LTQ0LDE3ICs0NCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgCiAgICAgICAgIFNWR1RyYW5z
Zm9ybSgpOwogICAgICAgICBTVkdUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtVHlwZSk7Ci0gICAgICAg
IGV4cGxpY2l0IFNWR1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAg
ICAgICBleHBsaWNpdCBTVkdUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAg
ICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybSgpOwogICAgICAgICAgICAgICAgCiAgICAgICAgIFNW
R1RyYW5zZm9ybVR5cGUgdHlwZSgpIGNvbnN0OwogCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeCgpIGNvbnN0OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KCkgY29u
c3Q7CiAgICAgCiAgICAgICAgIGZsb2F0IGFuZ2xlKCkgY29uc3Q7CiAgICAgICAgIEZsb2F0UG9p
bnQgcm90YXRpb25DZW50ZXIoKSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldE1hdHJpeChUcmFu
c2Zvcm1hdGlvbk1hdHJpeCk7CisgICAgICAgIHZvaWQgc2V0TWF0cml4KEFmZmluZVRyYW5zZm9y
bSk7CiAKICAgICAgICAgdm9pZCBzZXRUcmFuc2xhdGUoZmxvYXQgdHgsIGZsb2F0IHR5KTsKICAg
ICAgICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpOwpAQCAtNzIsNyArNzIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOwog
ICAgICAgICBmbG9hdCBtX2FuZ2xlOwogICAgICAgICBGbG9hdFBvaW50IG1fY2VudGVyOwotICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX21hdHJpeDsKKyAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fbWF0cml4OwogICAgIH07CiAKICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNWR1RyYW5zZm9ybSYgYSwgY29uc3QgU1ZHVHJhbnNmb3JtJiBiKQpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybURpc3RhbmNlLmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3N2Zy9T
VkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAg
U1ZHVHJhbnNmb3JtRGlzdGFuY2U6OlNWR1RyYW5zZm9ybURpc3RhbgogewogfQogCi1TVkdUcmFu
c2Zvcm1EaXN0YW5jZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2UoU1ZHVHJhbnNmb3JtOjpTVkdUcmFu
c2Zvcm1UeXBlIHR5cGUsIGZsb2F0IGFuZ2xlLCBmbG9hdCBjeCwgZmxvYXQgY3ksIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCitTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6U1ZH
VHJhbnNmb3JtRGlzdGFuY2UoU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGZs
b2F0IGFuZ2xlLCBmbG9hdCBjeCwgZmxvYXQgY3ksIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQogICAgIDogbV90eXBlKHR5cGUpCiAgICAgLCBtX2FuZ2xlKGFuZ2xlKQogICAgICwg
bV9jeChjeCkKQEAgLTk3LDIwICs5NywyMCBAQCBTVkdUcmFuc2Zvcm1EaXN0YW5jZSBTVkdUcmFu
c2Zvcm1EaXN0YW5jCiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9X
TjoKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKCk7CiAgICAgY2FzZSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOgotICAgICAgICByZXR1cm4gU1ZHVHJhbnNm
b3JtRGlzdGFuY2UobV90eXBlLCBtX2FuZ2xlICogc2NhbGVGYWN0b3IsIG1fY3ggKiBzY2FsZUZh
Y3RvciwgbV9jeSAqIHNjYWxlRmFjdG9yLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKyAgICAg
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fdHlwZSwgbV9hbmdsZSAqIHNjYWxlRmFj
dG9yLCBtX2N4ICogc2NhbGVGYWN0b3IsIG1fY3kgKiBzY2FsZUZhY3RvciwgQWZmaW5lVHJhbnNm
b3JtKCkpOwogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOgogICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKLSAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fdHlwZSwgbV9hbmdsZSAqIHNjYWxlRmFjdG9yLCBtX2N4
ICogc2NhbGVGYWN0b3IsIG1fY3kgKiBzY2FsZUZhY3RvciwgVHJhbnNmb3JtYXRpb25NYXRyaXgo
bV90cmFuc2Zvcm0pLnNjYWxlKHNjYWxlRmFjdG9yKSk7CisgICAgICAgIHJldHVybiBTVkdUcmFu
c2Zvcm1EaXN0YW5jZShtX3R5cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgbV9jeCAqIHNjYWxl
RmFjdG9yLCBtX2N5ICogc2NhbGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybShtX3RyYW5zZm9ybSku
c2NhbGUoc2NhbGVGYWN0b3IpKTsKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9UUkFOU0xBVEU6CiAgICAgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXdUcmFu
c2Zvcm0obV90cmFuc2Zvcm0pOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3Jt
KG1fdHJhbnNmb3JtKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldEUobV90cmFuc2Zvcm0uZSgp
ICogc2NhbGVGYWN0b3IpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0RihtX3RyYW5zZm9ybS5m
KCkgKiBzY2FsZUZhY3Rvcik7CiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0YW5jZSht
X3R5cGUsIDAsIDAsIDAsIG5ld1RyYW5zZm9ybSk7CiAgICAgfQogICAgIGNhc2UgU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOgogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJB
TlNGT1JNX1NLRVdZOgotICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV90eXBl
LCBtX2FuZ2xlICogc2NhbGVGYWN0b3IsIG1fY3ggKiBzY2FsZUZhY3RvciwgbV9jeSAqIHNjYWxl
RmFjdG9yLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5z
Zm9ybURpc3RhbmNlKG1fdHlwZSwgbV9hbmdsZSAqIHNjYWxlRmFjdG9yLCBtX2N4ICogc2NhbGVG
YWN0b3IsIG1fY3kgKiBzY2FsZUZhY3RvciwgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgIH0KICAg
ICAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI1MSw3ICsyNTEsNyBAQCBTVkdUcmFu
c2Zvcm0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFRvCiAKIGJvb2wgU1ZHVHJhbnNmb3JtRGlz
dGFuY2U6OmlzWmVybygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtX3RyYW5zZm9ybSA9PSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpICYmIG1fYW5nbGUgPT0gMCk7CisgICAgcmV0dXJuIChtX3RyYW5z
Zm9ybSA9PSBBZmZpbmVUcmFuc2Zvcm0oKSAmJiBtX2FuZ2xlID09IDApOwogfQogCiBmbG9hdCBT
VkdUcmFuc2Zvcm1EaXN0YW5jZTo6ZGlzdGFuY2UoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcv
U1ZHVHJhbnNmb3JtRGlzdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUcmFu
c2Zvcm1EaXN0YW5jZS5oCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5z
Zm9ybURpc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMxICsyNywzMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Ci0g
ICAgICAgIAotICAgIGNsYXNzIFNWR1RyYW5zZm9ybURpc3RhbmNlIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIFNWR1RyYW5zZm9ybURpc3RhbmNlKCk7Ci0gICAgICAgIFNWR1RyYW5zZm9ybURpc3Rh
bmNlKGNvbnN0IFNWR1RyYW5zZm9ybSYgZnJvbVRyYW5zZm9ybSwgY29uc3QgU1ZHVHJhbnNmb3Jt
JiB0b1RyYW5zZm9ybSk7Ci0gICAgICAgIAotICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZSBz
Y2FsZWREaXN0YW5jZShmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgICAgIFNWR1RyYW5z
Zm9ybSBhZGRUb1NWR1RyYW5zZm9ybShjb25zdCBTVkdUcmFuc2Zvcm0mKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBhZGRTVkdUcmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJiwgYm9vbCBhYnNvbHV0
ZVZhbHVlID0gZmFsc2UpOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSBh
ZGRTVkdUcmFuc2Zvcm1zKGNvbnN0IFNWR1RyYW5zZm9ybSYsIGNvbnN0IFNWR1RyYW5zZm9ybSYp
OwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc1plcm8oKSBjb25zdDsKK2NsYXNzIEFmZmluZVRy
YW5zZm9ybTsKKyAgICAKK2NsYXNzIFNWR1RyYW5zZm9ybURpc3RhbmNlIHsKK3B1YmxpYzoKKyAg
ICBTVkdUcmFuc2Zvcm1EaXN0YW5jZSgpOworICAgIFNWR1RyYW5zZm9ybURpc3RhbmNlKGNvbnN0
IFNWR1RyYW5zZm9ybSYgZnJvbVRyYW5zZm9ybSwgY29uc3QgU1ZHVHJhbnNmb3JtJiB0b1RyYW5z
Zm9ybSk7CisgICAgCisgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2Ugc2NhbGVkRGlzdGFuY2UoZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFNWR1RyYW5zZm9ybSBhZGRUb1NWR1RyYW5zZm9y
bShjb25zdCBTVkdUcmFuc2Zvcm0mKSBjb25zdDsKKyAgICB2b2lkIGFkZFNWR1RyYW5zZm9ybShj
b25zdCBTVkdUcmFuc2Zvcm0mLCBib29sIGFic29sdXRlVmFsdWUgPSBmYWxzZSk7CisgICAgCisg
ICAgc3RhdGljIFNWR1RyYW5zZm9ybSBhZGRTVkdUcmFuc2Zvcm1zKGNvbnN0IFNWR1RyYW5zZm9y
bSYsIGNvbnN0IFNWR1RyYW5zZm9ybSYpOworICAgIAorICAgIGJvb2wgaXNaZXJvKCkgY29uc3Q7
CisgICAgCisgICAgZmxvYXQgZGlzdGFuY2UoKSBjb25zdDsKK3ByaXZhdGU6CisgICAgU1ZHVHJh
bnNmb3JtRGlzdGFuY2UoU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlLCBmbG9hdCBhbmds
ZSwgZmxvYXQgY3gsIGZsb2F0IGN5LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICAgICAg
Ci0gICAgICAgIGZsb2F0IGRpc3RhbmNlKCkgY29uc3Q7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
U1ZHVHJhbnNmb3JtRGlzdGFuY2UoU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlLCBmbG9h
dCBhbmdsZSwgZmxvYXQgY3gsIGZsb2F0IGN5LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OwotICAgICAgICAgICAgCi0gICAgICAgIFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSBt
X3R5cGU7Ci0gICAgICAgIGZsb2F0IG1fYW5nbGU7Ci0gICAgICAgIGZsb2F0IG1fY3g7Ci0gICAg
ICAgIGZsb2F0IG1fY3k7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3Jt
OyAvLyBmb3Igc3RvcmluZyBzY2FsZSwgdHJhbnNsYXRpb24gb3IgbWF0cml4IHRyYW5zZm9ybXMK
LSAgICB9OworICAgIFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSBtX3R5cGU7CisgICAg
ZmxvYXQgbV9hbmdsZTsKKyAgICBmbG9hdCBtX2N4OworICAgIGZsb2F0IG1fY3k7CisgICAgQWZm
aW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOyAvLyBmb3Igc3RvcmluZyBzY2FsZSwgdHJhbnNsYXRp
b24gb3IgbWF0cml4IHRyYW5zZm9ybXMKK307CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29y
ZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSwx
MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBT
VkdUcmFuc2Zvcm1MaXN0OjpTVkdUcmFuc2Zvcm1MaXN0KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUpCkBAIC0zNyw3ICszOCw3IEBAIFNWR1RyYW5zZm9ybUxpc3Q6On5TVkdUcmFu
c2Zvcm1MaXN0KCkKIHsKIH0KIAotU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybUxpc3Q6OmNyZWF0
ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCkgY29uc3QKK1NWR1RyYW5zZm9ybSBTVkdUcmFuc2Zvcm1MaXN0OjpjcmVhdGVTVkdUcmFuc2Zv
cm1Gcm9tTWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KSBjb25zdAogewogICAg
IHJldHVybiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KG1hdHJp
eCk7CiB9CkBAIC01NCw3ICs1NSw3IEBAIFNWR1RyYW5zZm9ybSBTVkdUcmFuc2Zvcm1MaXN0Ojpj
b25jYXRlbmEKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgp
OwogICAgICAgICAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgQWZmaW5l
VHJhbnNmb3JtIG1hdHJpeDsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQogICAgICAgICBtYXRyaXggPSBnZXRJ
dGVtKGksIGVjKS5tYXRyaXgoKSAqIG1hdHJpeDsKQEAgLTY3LDcgKzY4LDcgQEAgU3RyaW5nIFNW
R1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcoKQogICAgIC8vIFRPRE86IFdlIG1heSB3YW50
IHRvIGJ1aWxkIGEgcmVhbCB0cmFuc2Zvcm0gc3RyaW5nLCBpbnN0ZWFkIG9mIGNvbmNhdHRpbmcg
dG8gYSBtYXRyaXgoLi4uKS4KICAgICBTVkdUcmFuc2Zvcm0gdHJhbnNmb3JtID0gY29uY2F0ZW5h
dGUoKTsKICAgICBpZiAodHJhbnNmb3JtLnR5cGUoKSA9PSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fTUFUUklYKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRy
YW5zZm9ybS5tYXRyaXgoKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IHRyYW5z
Zm9ybS5tYXRyaXgoKTsKICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJtYXRyaXgoJWYg
JWYgJWYgJWYgJWYgJWYpIiwgbWF0cml4LmEoKSwgbWF0cml4LmIoKSwgbWF0cml4LmMoKSwgbWF0
cml4LmQoKSwgbWF0cml4LmUoKSwgbWF0cml4LmYoKSk7CiAgICAgfQogCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtTGlzdC5oCShyZXZpc2lvbiA1NDQ5MykKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9y
bUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IGNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
U1ZHVHJhbnNmb3JtTGlzdChhdHRyaWJ1dGVOYW1lKSk7IH0KICAgICAgICAgdmlydHVhbCB+U1ZH
VHJhbnNmb3JtTGlzdCgpOwogCi0gICAgICAgIFNWR1RyYW5zZm9ybSBjcmVhdGVTVkdUcmFuc2Zv
cm1Gcm9tTWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3Q7CisgICAgICAg
IFNWR1RyYW5zZm9ybSBjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpIGNvbnN0OwogICAgICAgICBTVkdUcmFuc2Zvcm0gY29uc29saWRhdGUoKTsKIAog
ICAgICAgICAvLyBJbnRlcm5hbCB1c2Ugb25seQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVHJhbnNm
b3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRp
ZXMuaCIKQEAgLTQzLDE1ICs0MywxNSBAQCBTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3Jt
YWJsZSgpCiB7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1RyYW5zZm9ybWFibGU6Omdl
dENUTShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNW
R1RyYW5zZm9ybWFibGU6OmdldENUTShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KSBjb25zdAog
ewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IFNWR0xvY2F0YWJsZTo6Z2V0Q1RNKGVs
ZW1lbnQpOworICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBTVkdMb2NhdGFibGU6OmdldENUTShl
bGVtZW50KTsKICAgICByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpICogY3RtOwogfQog
Ci1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRTY3JlZW5DVE0oY29u
c3QgU1ZHRWxlbWVudCogZWxlbWVudCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdUcmFuc2Zv
cm1hYmxlOjpnZXRTY3JlZW5DVE0oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBTVkdMb2NhdGFibGU6OmdldFNjcmVlbkNU
TShlbGVtZW50KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gU1ZHTG9jYXRhYmxlOjpnZXRT
Y3JlZW5DVE0oZWxlbWVudCk7CiAgICAgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSAq
IGN0bTsKIH0KIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIGJvb2wgU1ZHVHJhbnNmb3JtYWJsZTo6cGFy
c2VUcmFuc2Zvcm1WYWwKICAgICAgICAgICAgICAgICAgIHQuc2V0Um90YXRlKHZhbHVlc1swXSwg
dmFsdWVzWzFdLCB2YWx1ZXNbMl0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
U1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKLSAgICAgICAgICAgIHQuc2V0TWF0
cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4KHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0s
IHZhbHVlc1szXSwgdmFsdWVzWzRdLCB2YWx1ZXNbNV0pKTsKKyAgICAgICAgICAgIHQuc2V0TWF0
cml4KEFmZmluZVRyYW5zZm9ybSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1
ZXNbM10sIHZhbHVlc1s0XSwgdmFsdWVzWzVdKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9
CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29y
ZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzMyArMjgsMzMg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9u
TWF0cml4OwotICAgIGNsYXNzIEF0b21pY1N0cmluZzsKLSAgICBjbGFzcyBTVkdUcmFuc2Zvcm07
Ci0gICAgY2xhc3MgUXVhbGlmaWVkTmFtZTsKLQotICAgIGNsYXNzIFNWR1RyYW5zZm9ybWFibGUg
OiB2aXJ0dWFsIHB1YmxpYyBTVkdMb2NhdGFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgU1ZH
VHJhbnNmb3JtYWJsZSgpOwotICAgICAgICB2aXJ0dWFsIH5TVkdUcmFuc2Zvcm1hYmxlKCk7Ci0K
LSAgICAgICAgZW51bSBUcmFuc2Zvcm1QYXJzaW5nTW9kZSB7Ci0gICAgICAgICAgICBDbGVhckxp
c3QsCi0gICAgICAgICAgICBEb05vdENsZWFyTGlzdAotICAgICAgICB9OwotCi0gICAgICAgIHN0
YXRpYyBib29sIHBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKFNWR1RyYW5zZm9ybUxpc3QqLCBjb25z
dCBBdG9taWNTdHJpbmcmIHRyYW5zZm9ybSk7Ci0gICAgICAgIHN0YXRpYyBib29sIHBhcnNlVHJh
bnNmb3JtQXR0cmlidXRlKFNWR1RyYW5zZm9ybUxpc3QqLCBjb25zdCBVQ2hhciomIHB0ciwgY29u
c3QgVUNoYXIqIGVuZCwgVHJhbnNmb3JtUGFyc2luZ01vZGUgbW9kZSA9IENsZWFyTGlzdCk7Ci0g
ICAgICAgIHN0YXRpYyBib29sIHBhcnNlVHJhbnNmb3JtVmFsdWUodW5zaWduZWQgdHlwZSwgY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFNWR1RyYW5zZm9ybSYpOwotICAgICAg
ICAKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0Q1RNKGNvbnN0IFNWR0VsZW1lbnQq
KSBjb25zdDsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0U2NyZWVuQ1RNKGNvbnN0
IFNWR0VsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgVHJhbnNmb3Jt
YXRpb25NYXRyaXggYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKLQotICAgICAg
ICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOworY2xhc3MgQXRvbWljU3RyaW5nOworY2xhc3MgU1ZHVHJhbnNmb3JtOwor
Y2xhc3MgUXVhbGlmaWVkTmFtZTsKKworY2xhc3MgU1ZHVHJhbnNmb3JtYWJsZSA6IHZpcnR1YWwg
cHVibGljIFNWR0xvY2F0YWJsZSB7CitwdWJsaWM6CisgICAgU1ZHVHJhbnNmb3JtYWJsZSgpOwor
ICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybWFibGUoKTsKKworICAgIGVudW0gVHJhbnNmb3JtUGFy
c2luZ01vZGUgeworICAgICAgICBDbGVhckxpc3QsCisgICAgICAgIERvTm90Q2xlYXJMaXN0CiAg
ICAgfTsKIAorICAgIHN0YXRpYyBib29sIHBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKFNWR1RyYW5z
Zm9ybUxpc3QqLCBjb25zdCBBdG9taWNTdHJpbmcmIHRyYW5zZm9ybSk7CisgICAgc3RhdGljIGJv
b2wgcGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUoU1ZHVHJhbnNmb3JtTGlzdCosIGNvbnN0IFVDaGFy
KiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBUcmFuc2Zvcm1QYXJzaW5nTW9kZSBtb2RlID0gQ2xl
YXJMaXN0KTsKKyAgICBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVZhbHVlKHVuc2lnbmVkIHR5
cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm0mKTsK
KyAgICAKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGNvbnN0IFNWR0VsZW1lbnQqKSBjb25z
dDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKGNvbnN0IFNWR0VsZW1lbnQqKSBj
b25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJh
bnNmb3JtKCkgY29uc3QgPSAwOworCisgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdy
YWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNl
cnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24gNTQ0OTMpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDEyICsx
MDYsMTIgQEAgdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRCb3VuZGluZwogICAgIG1f
Ym91bmRpbmdCb3hNb2RlID0gbW9kZTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudDo6Z3JhZGllbnRUcmFuc2Zvcm0oKSBjb25zdAorQWZmaW5lVHJhbnNm
b3JtIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmdyYWRpZW50VHJhbnNmb3JtKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9ncmFkaWVudFRyYW5zZm9ybTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZl
ckdyYWRpZW50OjpzZXRHcmFkaWVudFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKQordm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFRy
YW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKICAgICBtX2dyYWRp
ZW50VHJhbnNmb3JtID0gdHJhbnNmb3JtOwogfQpAQCAtMTI3LDkgKzEyNyw5IEBAIHN0YXRpYyBp
bmxpbmUgY29uc3QgUmVuZGVyT2JqZWN0KiBmaW5kVGUKICAgICByZXR1cm4gc3RhcnQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXggYWJzb2x1dGVUcmFuc2Zvcm1Gb3JS
ZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3N0YXRpYyBpbmxpbmUgQWZmaW5l
VHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiBvYmplY3QpCiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWJzb2x1dGVUcmFuc2Zvcm07
CisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwogCiAgICAgY29uc3QgUmVu
ZGVyT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gb2JqZWN0OwogICAgIHdoaWxlIChjdXJyZW50T2Jq
ZWN0KSB7CkBAIC0xNDYsNyArMTQ2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNyZWF0ZU1hc2tB
bmRTd2FwQ29udAogewogICAgIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dFJvb3RCbG9jayA9IGZp
bmRUZXh0Um9vdE9iamVjdChvYmplY3QpOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm1Gb3JSZW5kZXJlcih0ZXh0Um9vdEJsb2NrKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm1Gb3JSZW5kZXJl
cih0ZXh0Um9vdEJsb2NrKTsKICAgICBGbG9hdFJlY3QgbWFza0Fic29sdXRlQm91bmRpbmdCb3gg
PSB0cmFuc2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKIAogICAgIEludFJlY3QgbWFza0ltYWdlUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QobWFza0Fic29sdXRlQm91bmRpbmdCb3gpOwpAQCAtMTcxLDE0ICsxNzEsMTQgQEAgc3RhdGlj
IGlubGluZSBib29sIGNyZWF0ZU1hc2tBbmRTd2FwQ29udAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNsaXBUb1RleHRNYXNrKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwKK3N0YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIGNsaXBU
b1RleHRNYXNrKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+JiBpbWFnZUJ1ZmZlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAgICAgY29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCogZ3JhZGllbnRTZXJ2ZXIpCiB7CiAgICAgY29uc3QgUmVu
ZGVyT2JqZWN0KiB0ZXh0Um9vdEJsb2NrID0gZmluZFRleHRSb290T2JqZWN0KG9iamVjdCk7CiAg
ICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIodGV4dFJvb3RCbG9jay0+cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSwgaW1hZ2VCdWZmZXIuZ2V0KCkpOwogCi0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4OworICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7CiAgICAgaWYg
KGdyYWRpZW50U2VydmVyLT5ib3VuZGluZ0JveE1vZGUoKSkgewogICAgICAgICBGbG9hdFJlY3Qg
bWFza0JvdW5kaW5nQm94ID0gdGV4dFJvb3RCbG9jay0+b2JqZWN0Qm91bmRpbmdCb3goKTsKICAg
ICAgICAgbWF0cml4LnRyYW5zbGF0ZShtYXNrQm91bmRpbmdCb3gueCgpLCBtYXNrQm91bmRpbmdC
b3gueSgpKTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6
OnNldHVwKEdyYXBoCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwg
b2JqZWN0LT5zdHlsZSgpLCBvYmplY3QpOwogICAgIH0KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogICAgIC8vIENHIHBsYXRm
b3JtcyB3aWxsIGhhbmRsZSB0aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3JtIGZvciB0ZXh0IGlu
CiAgICAgLy8gdGVhcmRvd24sIHNvIHdlIGRvbid0IGFwcGx5IGl0IGhlcmUuICBGb3Igbm9uLUNH
IHBsYXRmb3Jtcywgd2UKICAgICAvLyB3YW50IHRoZSB0ZXh0IGJvdW5kaW5nIGJveCBhcHBsaWVk
IHRvIHRoZSBncmFkaWVudCBzcGFjZSB0cmFuc2Zvcm0gbm93LApAQCAtMjU4LDcgKzI1OCw3IEBA
IHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVhcmRvd24oR3IKICAgICAgICAgY29udGV4
dCA9IG1fc2F2ZWRDb250ZXh0OwogICAgICAgICBtX3NhdmVkQ29udGV4dCA9IDA7CiAKLSAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gY2xpcFRvVGV4dE1hc2soY29udGV4dCwg
bV9pbWFnZUJ1ZmZlciwgb2JqZWN0LCB0aGlzKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1h
dHJpeCA9IGNsaXBUb1RleHRNYXNrKGNvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVjdCwgdGhp
cyk7CiAgICAgICAgIG1fZ3JhZGllbnQtPnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0obWF0cml4
KTsKICAgICAgICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50KG1fZ3JhZGllbnQpOwogICAgICAg
ICAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50
LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpZiBFTkFC
TEUoU1ZHKQogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkdyYWRpZW50
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC01OCw4ICs1OCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdDsKICAg
ICAgICAgdm9pZCBzZXRCb3VuZGluZ0JveE1vZGUoYm9vbCBtb2RlID0gdHJ1ZSk7CiAKLSAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZ3JhZGllbnRUcmFuc2Zvcm0oKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBzZXRHcmFkaWVudFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm0oKSBjb25zdDsKKyAg
ICAgICAgdm9pZCBzZXRHcmFkaWVudFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsK
IAogICAgICAgICB2b2lkIHNldEdyYWRpZW50U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50
U3RvcD4mIHN0b3BzKSB7IG1fc3RvcHMgPSBzdG9wczsgfQogICAgICAgICBjb25zdCBWZWN0b3I8
U1ZHR3JhZGllbnRTdG9wPiYgZ3JhZGllbnRTdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7
IH0KQEAgLTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBWZWN0b3I8
U1ZHR3JhZGllbnRTdG9wPiBtX3N0b3BzOwogICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IG1fZ3Jh
ZGllbnQ7CiAgICAgICAgIGJvb2wgbV9ib3VuZGluZ0JveE1vZGU7Ci0gICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fZ3JhZGllbnRUcmFuc2Zvcm07CisgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBtX2dyYWRpZW50VHJhbnNmb3JtOwogICAgICAgICBjb25zdCBTVkdHcmFkaWVudEVsZW1lbnQq
IG1fb3duZXJFbGVtZW50OwogCiAjaWYgUExBVEZPUk0oQ0cpCkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlclBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHAJKHJldmlzaW9uIDU0NDkzKQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCkBAIC0zNiw3ICszNyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCiAjaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJU
cmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIApAQCAtNzMsMTIgKzczLDEyIEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJQ
YXR0ZXJuOjpzZXRUaWxlKFBhc3MKICAgICBtX3RpbGUgPSB0aWxlOwogfQogCi1UcmFuc2Zvcm1h
dGlvbk1hdHJpeCBTVkdQYWludFNlcnZlclBhdHRlcm46OnBhdHRlcm5UcmFuc2Zvcm0oKSBjb25z
dAorQWZmaW5lVHJhbnNmb3JtIFNWR1BhaW50U2VydmVyUGF0dGVybjo6cGF0dGVyblRyYW5zZm9y
bSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGF0dGVyblRyYW5zZm9ybTsKIH0KIAotdm9pZCBT
VkdQYWludFNlcnZlclBhdHRlcm46OnNldFBhdHRlcm5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXRQ
YXR0ZXJuVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAg
IG1fcGF0dGVyblRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKIH0KQEAgLTE1Myw3ICsxNTMsNyBAQCBi
b29sIFNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXAoR3JhcGhpCiAgICAgICAgIGFwcGx5U3Ry
b2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgb2JqZWN0LT5zdHlsZSgpLCBvYmplY3QpOwogICAg
IH0KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gbWF0cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUocGF0dGVybkJvdW5kYXJpZXMoKS54KCks
IHBhdHRlcm5Cb3VuZGFyaWVzKCkueSgpKTsKICAgICBtYXRyaXgubXVsdGlwbHkocGF0dGVyblRy
YW5zZm9ybSgpKTsKICAgICBtX3BhdHRlcm4tPnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShtYXRy
aXgpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
LmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2
ZXJQYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShTVkcpCiAKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRl
cm4uaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgpAQCAtNTksOCArNTksOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEltYWdlQnVmZmVyKiB0aWxlKCkgY29uc3Q7CiAgICAg
ICAgIHZvaWQgc2V0VGlsZShQYXNzT3duUHRyPEltYWdlQnVmZmVyPik7CiAKLSAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggcGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0OwotICAgICAgICB2b2lk
IHNldFBhdHRlcm5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdDsKKyAgICAgICAgdm9p
ZCBzZXRQYXR0ZXJuVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCiAgICAgICAg
IHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikg
Y29uc3Q7CiAKQEAgLTcyLDcgKzcyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAK
ICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX3RpbGU7CiAgICAgICAgIGNvbnN0IFNWR1Bh
dHRlcm5FbGVtZW50KiBtX293bmVyRWxlbWVudDsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9wYXR0ZXJuVHJhbnNmb3JtOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9wYXR0ZXJu
VHJhbnNmb3JtOwogICAgICAgICBGbG9hdFJlY3QgbV9wYXR0ZXJuQm91bmRhcmllczsKIAogICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxQYXR0ZXJuPiBtX3BhdHRlcm47CkluZGV4OiBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdSZXNvdXJjZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksOSArMjksOSBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2lmIFBMQVRGT1JNKENHKQogI2luY2x1
ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgpAQCAtMTAxLDcg
KzEwMSw3IEBAIHZvaWQgU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXAoR3JhcGgKICAgICAg
ICAgUGF0aCBjbGlwUGF0aCA9IGNsaXBEYXRhLnBhdGg7CiAKICAgICAgICAgaWYgKGNsaXBEYXRh
LmJib3hVbml0cykgewotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3Jt
OworICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKICAgICAgICAgICAgIHRy
YW5zZm9ybS50cmFuc2xhdGUoYm91bmRpbmdCb3gueCgpLCBib3VuZGluZ0JveC55KCkpOwogICAg
ICAgICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZGluZ0JveC53aWR0aCgpLCBi
b3VuZGluZ0JveC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBjbGlwUGF0aC50cmFuc2Zvcm0odHJh
bnNmb3JtKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlTWFya2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZU1hcmtlci5j
cHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VN
YXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFNW
RykKICNpbmNsdWRlICJTVkdSZXNvdXJjZU1hcmtlci5oIgogCi0jaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5o
IgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKQEAgLTQ4LDE4ICs0OCwxOCBAQCBTVkdSZXNvdXJj
ZU1hcmtlcjo6flNWR1Jlc291cmNlTWFya2VyKCkKIHsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRy
aXggU1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtlclRyYW5zZm9ybWF0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIG9yaWdpbiwgZmxvYXQgYW5nbGUsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAorQWZmaW5l
VHJhbnNmb3JtIFNWR1Jlc291cmNlTWFya2VyOjptYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBG
bG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QK
IHsKICAgICBBU1NFUlQobV9yZW5kZXJlcik7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKICAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKG9yaWdpbi54KCksIG9yaWdpbi55KCkpOwogICAgIHRyYW5zZm9ybS5yb3RhdGUo
bV9hbmdsZSA9PSAtMSA/IGFuZ2xlIDogbV9hbmdsZSk7CiAgICAgdHJhbnNmb3JtID0gbV9yZW5k
ZXJlci0+bWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9uKHRyYW5zZm9ybSwgbV9yZWZlcmVuY2VQ
b2ludCwgbV91c2VTdHJva2VXaWR0aCA/IHN0cm9rZVdpZHRoIDogLTEpOwogICAgIHJldHVybiB0
cmFuc2Zvcm07CiB9CiAKLXZvaWQgU1ZHUmVzb3VyY2VNYXJrZXI6OmRyYXcoUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSkKK3ZvaWQgU1ZHUmVzb3VyY2VNYXJrZXI6OmRyYXcoUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAg
aWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdSZXNvdXJjZU1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR1Jlc291cmNlTWFya2VyLmgJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHUmVzb3VyY2VNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXI7Ci0gICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CisgICAgY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwogCiAgICAgY2xhc3MgU1ZHUmVzb3VyY2VNYXJrZXIgOiBwdWJsaWMgU1ZH
UmVzb3VyY2UgewogICAgIHB1YmxpYzoKQEAgLTU1LDggKzU1LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIHNldFVzZVN0cm9rZVdpZHRoKGJvb2wgdXNlU3Ryb2tlV2lkdGgg
PSB0cnVlKSB7IG1fdXNlU3Ryb2tlV2lkdGggPSB1c2VTdHJva2VXaWR0aDsgfQogICAgICAgICBi
b29sIHVzZVN0cm9rZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV91c2VTdHJva2VXaWR0aDsgfQog
Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hcmtlclRyYW5zZm9ybWF0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYW5nbGUsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25z
dDsKLSAgICAgICAgdm9pZCBkcmF3KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlclRyYW5z
Zm9ybWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYW5nbGUsIGZsb2F0IHN0
cm9rZVdpZHRoKSBjb25zdDsKKyAgICAgICAgdm9pZCBkcmF3KFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAKICAgICAgICAgdmlydHVhbCBTVkdSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gTWFya2VyUmVzb3VyY2VUeXBl
OyB9CiAgICAgICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJikgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDExIEBA
CiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiU1ZHRkVJbWFn
ZS5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpby5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHJldmlzaW9uIDU0NDkz
KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMywxMCArMjMsMTAgQEAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKICNpbmNsdWRlICJTVkdGRVRpbGUuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
I2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNzUsNyArNzUsNyBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAg
dGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIEludFBvaW50KCkpOwogICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0
ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+aW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CiAK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1h
dHJpeDsKICAgICBtYXRyaXgudHJhbnNsYXRlKG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLngoKSAt
IHNjYWxlZFN1YlJlZ2lvbigpLngoKSwgbV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkueSgpIC0gc2Nh
bGVkU3ViUmVnaW9uKCkueSgpKTsKICAgICBwYXR0ZXJuLmdldCgpLT5zZXRQYXR0ZXJuU3BhY2VU
cmFuc2Zvcm0obWF0cml4KTsKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1NDQ5MykKKysr
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBA
QAorMjAxMC0wMi0wOCAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBiYWNrIGFuIEFmZmlu
ZVRyYW5zZm9ybSBjbGFzcyBmb3IgdXNlIGJ5IFNWRworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM3NTAKKworICAgICAgICBVc2UgQWZmaW5lVHJhbnNm
b3JtIGluc3RlYWQgb2YgVHJhbnNmb3JtYXRpb25NYXRyaXggaGVyZS4KKworICAgICAgICAqIHRl
c3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisK
IDIwMTAtMDItMDcgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFu
c3BhcmVuY3lXaW5UZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vdGVzdHMv
VHJhbnNwYXJlbmN5V2luVGVzdC5jcHAJKHJldmlzaW9uIDU0NDkzKQorKysgV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
NCArMjksMTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHJhbnNw
YXJlbmN5V2luLmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDx3aW5k
b3dzLmg+CiAKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVHJhbnNwYXJlbmN5V2luLmgiCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIEZsb2F0UmVjdCBSRUNUVG9GbG9hdFJlY3QoY29uc3QgUkVDVCog
cmVjdCkKQEAgLTQxNiwxMCArNDE2LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFJvdGF0ZU9w
YXF1ZUNvbXBvcwogICAgIC8vIGFudGlhbGlhc2luZyBvciBvdGhlciByb3VuZGluZyBwcm9ibGVt
cyBzaW5jZSB3ZSdyZSB0ZXN0aW5nIGV4YWN0IHBpeGVsCiAgICAgLy8gdmFsdWVzLgogICAgIHNy
Yy0+Y29udGV4dCgpLT5zYXZlKCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3c5MCgwLCAx
LCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIDAsIDAsIDAsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgMCwgMCwgMSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN3OTAoMCwgMSwg
LTEsIDAsIDAsIDApOwogICAgIHNyYy0+Y29udGV4dCgpLT5jb25jYXRDVE0oY3c5MCk7CiAKICAg
ICAvLyBNYWtlIGEgdHJhbnNwYXJlbmN5IGxheWVyIGNvbnNpc3Rpbmcgb2YgYSBob3Jpem9udGFs
IGxpbmUgb2YgNTAlIGJsYWNrLgpAQCAtNDk3LDE2ICs0OTQsMTYgQEAgVEVTVChUcmFuc3BhcmVu
Y3lXaW4sIFRyYW5zbGF0ZVNjYWxlT3BhcQogICAgIHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CiAK
ICAgICAvLyBUcmFuc2xhdGUgbGVmdCBieSBvbmUgcGl4ZWwuCi0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbGVmdDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbGVmdDsKICAgICBsZWZ0LnRyYW5zbGF0
ZSgtMSwgMCk7CiAKICAgICAvLyBTY2FsZSBieSAyeC4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBzY2FsZTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gc2NhbGU7CiAgICAgc2NhbGUuc2NhbGUoMi4w
KTsKICAgICBzcmMtPmNvbnRleHQoKS0+Y29uY2F0Q1RNKHNjYWxlKTsKIAogICAgIC8vIFRoZW4g
dHJhbnNsYXRlIHVwIGJ5IG9uZSBwaXhlbCAod2hpY2ggd2lsbCBhY3R1YWxseSBiZSAyIGR1ZSB0
byBzY2FsaW5nKS4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB1cDsKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gdXA7CiAgICAgdXAudHJhbnNsYXRlKDAsIC0xKTsKICAgICBzcmMtPmNvbnRleHQoKS0+
Y29uY2F0Q1RNKHVwKTsKIApAQCAtNTM4LDcgKzUzNSw3IEBAIFRFU1QoVHJhbnNwYXJlbmN5V2lu
LCBTY2FsZSkKIAogICAgIC8vIFNjYWxlIGJ5IDJ4LgogICAgIHNyYy0+Y29udGV4dCgpLT5zYXZl
KCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGU7CisgICAgQWZmaW5lVHJhbnNmb3Jt
IHNjYWxlOwogICAgIHNjYWxlLnNjYWxlKDIuMCk7CiAgICAgc3JjLT5jb250ZXh0KCktPmNvbmNh
dENUTShzY2FsZSk7CiAKQEAgLTU5OSw3ICs1OTYsNyBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwg
U2NhbGVUcmFuc3BhcmVuY3kpCiAKICAgICAvLyBTY2FsZSBieSAyeC4KICAgICBzcmMtPmNvbnRl
eHQoKS0+c2F2ZSgpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlOworICAgIEFmZmlu
ZVRyYW5zZm9ybSBzY2FsZTsKICAgICBzY2FsZS5zY2FsZSgyLjApOwogICAgIHNyYy0+Y29udGV4
dCgpLT5jb25jYXRDVE0oc2NhbGUpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NDQ5MykKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEw
LTAyLTA4ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGJhY2sgYW4gQWZmaW5lVHJhbnNm
b3JtIGNsYXNzIGZvciB1c2UgYnkgU1ZHCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMzc1MAorCisgICAgICAgIFNvbWUgbmVnYXRpdmUgemVybyBwcm9i
bGVtcyBmaXhlZCwgYnV0IG5ldyBvbmUgd2VyZSBhZGRlZCBvbiBvdGhlciBwbGFjZXMuIEEgc2Vw
ZXJhdGUKKyAgICAgICAgcGF0Y2ggc2hvdWxkIGZpeCBpdCBhbGwgYXQgb25jZS4KKyAgICAgICAg
dXNlLW9uLWRpc2FsbG93ZWQtZm9yZWlnbi1vYmplY3QtMyBhbmQgNCBoYWQgd3JvbmcgcmVzdWx0
cy4gVGhlIG9sZCBTVkcgY29kZQorICAgICAgICB3aXRoIFRyYW5zZm9ybWF0aW9uTWF0cml4IHVz
ZWQgdHJhbnNsYXRlUmlnaHQsIHRoYXQgd2FzIHdyb25nIGF0IHRoaXMgcGxhY2UgYW5kIGlzCisg
ICAgICAgIGZpeGVkIG5vdy4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0x
LjEvYW5pbWF0ZS1lbGVtLTgwLXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wMS10LWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDItdC1leHBlY3RlZC50
eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTAz
LWItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEv
Zm9udHMtZWxlbS0wNC1iLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3Zn
L1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDctYi1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL3N2Zy9jdXN0b20vdXNlLW9uLWRpc2FsbG93ZWQtZm9yZWlnbi1vYmplY3QtMy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdXNlLW9uLWRp
c2FsbG93ZWQtZm9yZWlnbi1vYmplY3QtNC1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3ZnL2Rv
bS9TVkdNYXRyaXgtaW50ZXJmYWNlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdmcvZG9tL1NW
R01hdHJpeC1pbnRlcmZhY2UueGh0bWw6CisKIDIwMTAtMDItMDggIE5pa29sYXMgWmltbWVybWFu
biAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLiBGaXggbGFz
dCBwcm9ibGVtYXRpYyBTVkcgdGVzdGNhc2UsIHVwZGF0ZSBjb29yZHMtdHJhbnMtMDEtYi5zdmcg
d2luIHJlc3VsdHMsIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgYmFzZWxpbmUgcmVnZW5lcmF0aW9u
IGZvciBhbGwgcGxhdGZvcm1zLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9X
M0MtU1ZHLTEuMS9hbmltYXRlLWVsZW0tODAtdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9hbmltYXRlLWVsZW0tODAt
dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU0NDkzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL3N2Zy9XM0MtU1ZHLTEuMS9hbmltYXRlLWVsZW0tODAtdC1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA0ODB4MzYwCiAg
ICAgICAgICAgICAgIFJlbmRlclBhdGgge2xpbmV9IGF0ICgxNSwyMTkpIHNpemUgOTB4MiBbc3Ry
b2tlPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNDMEMwQzBdfV0gW2RhdGE9Ik0tNDUuMDAsMC4wMCBM
NDUuMDAsMC4wMCJdCiAgICAgICAgICAgICAgIFJlbmRlclBhdGgge2xpbmV9IGF0ICg1OSwxNzUp
IHNpemUgMng5MCBbc3Ryb2tlPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNDMEMwQzBdfV0gW2RhdGE9
Ik0wLjAwLC00NS4wMCBMMC4wMCw0NS4wMCJdCiAgICAgICAgIFJlbmRlclBhdGgge2xpbmV9IGF0
ICgwLDApIHNpemUgMHgwIFtzdHJva2U9e1t0eXBlPVNPTElEXSBbY29sb3I9I0MwQzBDMF0gW3N0
cm9rZSB3aWR0aD0xNS4wMF0gW2xpbmUgY2FwPVJPVU5EXX1dIFtmaWxsPXtbdHlwZT1TT0xJRF0g
W2NvbG9yPSMwMDAwMDBdfV0gW2RhdGE9IiJdCi0gICAgICAgIFJlbmRlclBhdGgge2xpbmV9IGF0
ICgwLDApIHNpemUgMHgwIFt0cmFuc2Zvcm09e209KCgwLjAwLDEuMDApKC0xLjAwLDAuMDApKSB0
PSg4MC4wMCwtMC4wMCl9XSBbc3Ryb2tlPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNDMEMwQzBdIFtz
dHJva2Ugd2lkdGg9MTUuMDBdIFtsaW5lIGNhcD1ST1VORF19XSBbZmlsbD17W3R5cGU9U09MSURd
IFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSIiXQorICAgICAgICBSZW5kZXJQYXRoIHtsaW5lfSBh
dCAoMCwwKSBzaXplIDB4MCBbdHJhbnNmb3JtPXttPSgoMC4wMCwxLjAwKSgtMS4wMCwwLjAwKSkg
dD0oODAuMDAsMC4wMCl9XSBbc3Ryb2tlPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNDMEMwQzBdIFtz
dHJva2Ugd2lkdGg9MTUuMDBdIFtsaW5lIGNhcD1ST1VORF19XSBbZmlsbD17W3R5cGU9U09MSURd
IFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSIiXQogICAgICAgICBSZW5kZXJQYXRoIHtsaW5lfSBh
dCAoMCwwKSBzaXplIDB4MCBbdHJhbnNmb3JtPXttPSgoLTEuMDAsMC4wMCkoLTAuMDAsLTEuMDAp
KSB0PSg4MC4wMCw4MC4wMCl9XSBbc3Ryb2tlPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNDMEMwQzBd
IFtzdHJva2Ugd2lkdGg9MTUuMDBdIFtsaW5lIGNhcD1ST1VORF19XSBbZmlsbD17W3R5cGU9U09M
SURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSIiXQogICAgICAgICBSZW5kZXJQYXRoIHtsaW5l
fSBhdCAoMCwwKSBzaXplIDB4MCBbdHJhbnNmb3JtPXttPSgoLTAuMDAsLTEuMDApKDEuMDAsLTAu
MDApKSB0PSgwLjAwLDgwLjAwKX1dIFtzdHJva2U9e1t0eXBlPVNPTElEXSBbY29sb3I9I0MwQzBD
MF0gW3N0cm9rZSB3aWR0aD0xNS4wMF0gW2xpbmUgY2FwPVJPVU5EXX1dIFtmaWxsPXtbdHlwZT1T
T0xJRF0gW2NvbG9yPSMwMDAwMDBdfV0gW2RhdGE9IiJdCiAgICAgICAgIFJlbmRlclBhdGgge2xp
bmV9IGF0ICg1NSwyMTUpIHNpemUgNTB4MTAgW3N0cm9rZT17W3R5cGU9U09MSURdIFtjb2xvcj0j
Qzg1MDUwXSBbc3Ryb2tlIHdpZHRoPTEwLjAwXSBbbGluZSBjYXA9Uk9VTkRdfV0gW2ZpbGw9e1t0
eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTTQwLjAwLDQwLjAwIEw4MC4wMCw0
MC4wMCJdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2Zv
bnRzLWVsZW0tMDEtdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTAxLXQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA1NDQ5MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0x
LjEvZm9udHMtZWxlbS0wMS10LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTEsNyAr
MTEsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDQ4MHgzNjAKICAgICAgICAgUmVuZGVyU1ZHVGV4
dCB7dGV4dH0gYXQgKDMwLDEzMCkgc2l6ZSAxMDV4MjIgY29udGFpbnMgMSBjaHVuayhzKQogICAg
ICAgICAgIFJlbmRlclNWR0lubGluZVRleHQgeyN0ZXh0fSBhdCAoMCwtMTcpIHNpemUgMTA1eDIy
CiAgICAgICAgICAgICBjaHVuayAxIHRleHQgcnVuIDEgYXQgKDMwLjAwLDEzMC4wMCkgc3RhcnRP
ZmZzZXQgMCBlbmRPZmZzZXQgMTMgd2lkdGggMTA1LjAwOiAiUGxhY2VkIEdseXBocyIKLSAgICAg
ICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMTY0LDgxKSBzaXplIDIxMngxNjIgW3RyYW5z
Zm9ybT17bT0oKDEuMDAsMC4wMCkoMC4wMCwtMS4wMCkpIHQ9KDE2NS4wMCwxNDAuMDApfV0KKyAg
ICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMTY0LDgxKSBzaXplIDIxMngxNjIgW3Ry
YW5zZm9ybT17bT0oKDEuMDAsMC4wMCkoLTAuMDAsLTEuMDApKSB0PSgxNjUuMDAsMTQwLjAwKX1d
CiAgICAgICAgICAgUmVuZGVyUGF0aCB7bGluZX0gYXQgKDE2NSwxMzkpIHNpemUgMjEweDIgW3N0
cm9rZT17W3R5cGU9U09MSURdIFtjb2xvcj0jODg4ODg4XX1dIFtmaWxsPXtbdHlwZT1TT0xJRF0g
W2NvbG9yPSMwMDAwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDAgTDIxMC4wMCwwLjAwIl0KICAgICAg
ICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjQsODEpIHNpemUgMjEyeDE2MiBbdHJh
bnNmb3JtPXttPSgoMC4wMywwLjAwKSgwLjAwLDAuMDMpKSB0PSgwLjAwLDAuMDApfV0KICAgICAg
ICAgICAgIFJlbmRlclBhdGgge2xpbmV9IGF0ICgxNjQsODEpIHNpemUgMngxNjIgW3N0cm9rZT17
W3R5cGU9U09MSURdIFtjb2xvcj0jODg4ODg4XSBbc3Ryb2tlIHdpZHRoPTUwLjAwXX1dIFtmaWxs
PXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDAwMDBdfV0gW2RhdGE9Ik0wLjAwLC0zNTAwLjAwIEww
LjAwLDIwMDAuMDAiXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZH
LTEuMS9mb250cy1lbGVtLTAyLXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wMi10LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNTQ0OTMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1cz
Qy1TVkctMS4xL2ZvbnRzLWVsZW0tMDItdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTExLDcgKzExLDcgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA0ODB4MzYwCiAgICAgICBSZW5kZXJT
VkdUZXh0IHt0ZXh0fSBhdCAoNywxMzApIHNpemUgMTMweDIyIGNvbnRhaW5zIDEgY2h1bmsocykK
ICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCB7I3RleHR9IGF0ICgwLC0xNykgc2l6ZSAxMzB4
MjIKICAgICAgICAgICBjaHVuayAxIHRleHQgcnVuIDEgYXQgKDcuMDAsMTMwLjAwKSBzdGFydE9m
ZnNldCAwIGVuZE9mZnNldCAxNSB3aWR0aCAxMzAuMDA6ICJTVkcgb3ZlciBHbHlwaHMiCi0gICAg
ICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjgsODUpIHNpemUgMjA1eDcyIFt0cmFuc2Zv
cm09e209KCgxLjAwLDAuMDApKDAuMDAsLTEuMDApKSB0PSgxNjUuMDAsMTQwLjAwKX1dCisgICAg
ICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjgsODUpIHNpemUgMjA1eDcyIFt0cmFuc2Zv
cm09e209KCgxLjAwLDAuMDApKC0wLjAwLC0xLjAwKSkgdD0oMTY1LjAwLDE0MC4wMCl9XQogICAg
ICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjgsODUpIHNpemUgMjA1eDcyIFt0cmFu
c2Zvcm09e209KCgwLjAzLDAuMDApKDAuMDAsMC4wMykpIHQ9KDAuMDAsMC4wMCl9XQogICAgICAg
ICAgIFJlbmRlclBhdGgge3BhdGh9IGF0ICgxNjgsOTYpIHNpemUgMzd4NDUgW2ZpbGw9e1t0eXBl
PVNPTElEXSBbY29sb3I9I0ZGRkZGRl19XSBbZGF0YT0iTTEyNTAuMDAsLTMwLjAwIEMxMTg4LjY3
LC0zMC4wMCwxMTM1LjMzLDQ4LjY3LDEwOTAuMDAsMjA2LjAwIEMxMDcyLjY3LDI2Ni4wMCwxMDUx
LjAwLDM3MS4wMCwxMDI1LjAwLDUyMS4wMCBDOTU3LjAwLDUxMS42Nyw4NjguMDAsNDk1LjAwLDc1
OC4wMCw0NzEuMDAgTDQ5Mi4wMCw0MTYuMDAgQzQ1OC42NywzMjguNjcsNDAxLjY3LDIwMS4wMCwz
MjEuMDAsMzMuMDAgQzI5OS42NywtNC4zMywyNzAuNjcsLTIzLjAwLDIzNC4wMCwtMjMuMDAgQzIw
Ny4zMywtMjMuMDAsMTgzLjY3LC0xMy4zMywxNjMuMDAsNi4wMCBDMTQyLjMzLDI1LjMzLDEzMS42
Nyw0OS4zMywxMzEuMDAsNzguMDAgQzEzMS4wMCwxMTAuMDAsMTgxLjMzLDIzMS42NywyODIuMDAs
NDQzLjAwIEMyNzAuNjcsNDYwLjMzLDI2NS4wMCw0ODAuMzMsMjY1LjAwLDUwMy4wMCBDMjY1LjAw
LDU1Ny4wMCwyOTcuNjcsNTkxLjY3LDM2My4wMCw2MDcuMDAgQzQzOS4wMCw3NDkuNjcsNTM1LjAw
LDkxMy42Nyw2NTEuMDAsMTA5OS4wMCBDODA5LjAwLDEzNTEuNjcsOTA3LjMzLDE0NzguMDAsOTQ2
LjAwLDE0NzguMDAgQzk5OC42NywxNDc4LjAwLDEwMzQuNjcsMTQ0MS4zMywxMDU0LjAwLDEzNjgu
MDAgTDExMTcuMDAsMTAzMi4wMCBMMTI2Ni4wMCwzMzcuMDAgTDEzMjMuMDAsMTc5LjAwIEMxMzQy
LjMzLDEyNS4wMCwxMzUyLjAwLDg5LjAwLDEzNTIuMDAsNzEuMDAgQzEzNTIuMDAsNDIuMzMsMTM0
MS42NywxOC4zMywxMzIxLjAwLC0xLjAwIEMxMzAwLjMzLC0yMC4zMywxMjc2LjY3LC0zMC4wMCwx
MjUwLjAwLC0zMC4wMCBaIE04OTcuMDAsMTExMy4wMCBMNjExLjAwLDY1Mi4wMCBDNjkxLjY3LDY3
Mi42Nyw4MTQuMDAsNjk3LjY3LDk3OC4wMCw3MjcuMDAgTDg5Ny4wMCwxMTEzLjAwIFoiXQogICAg
ICAgICAgIFJlbmRlclBhdGgge3BhdGh9IGF0ICgyMDgsMTA5KSBzaXplIDMxeDQ4IFt0cmFuc2Zv
cm09e209KCgxLjAwLDAuMDApKDAuMDAsMS4wMCkpIHQ9KDE0OTguMDAsMC4wMCl9XSBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jRkZGRkZGXX1dIFtkYXRhPSJNMTAxMS4wMCw4OTIuMDAgTDY2
NS4wMCwxNDQuMDAgQzU3OS42NywtMzguMDAsNTE0LjMzLC0xOTAuMzMsNDY5LjAwLC0zMTMuMDAg
TDQwMy4wMCwtNTA3LjAwIEMzODUuNjcsLTU1NS4wMCwzNTUuNjcsLTU3OS4wMCwzMTMuMDAsLTU3
OS4wMCBDMjg1LjAwLC01NzkuMDAsMjYxLjAwLC01NzAuMDAsMjQxLjAwLC01NTIuMDAgQzIyMS4w
MCwtNTM0LjAwLDIxMC42NywtNTExLjAwLDIxMC4wMCwtNDgzLjAwIEMyMTAuMDAsLTQxNi4zMywy
ODIuMDAsLTIyMy4zMyw0MjYuMDAsOTYuMDAgTDY4LjAwLDc4NS4wMCBMMjMuMDAsODU4LjAwIEM1
LjAwLDg4OC42NywtNC4wMCw5MTQuMzMsLTQuMDAsOTM1LjAwIEMtNC4wMCw5NjIuMzMsNi4zMyw5
ODYuMzMsMjcuMDAsMTAwNy4wMCBDNDcuNjcsMTAyNy42Nyw3MS4zMywxMDM4LjAwLDk4LjAwLDEw
MzguMDAgQzEyOC42NywxMDM4LjAwLDE1Mi4zMywxMDI2LjMzLDE2OS4wMCwxMDAzLjAwIEMyODIu
MzMsODQ1LjY3LDQwNC4wMCw2MjEuNjcsNTM0LjAwLDMzMS4wMCBMNjgyLjAwLDY3Ni4wMCBDNzM1
LjMzLDc5NS4zMyw3ODYuNjcsODk4LjAwLDgzNi4wMCw5ODQuMDAgQzg1Ny4zMywxMDIxLjMzLDg4
NS4zMywxMDQwLjAwLDkyMC4wMCwxMDQwLjAwIEM5NDcuMzMsMTA0MC4wMCw5NzEuMzMsMTAzMC4z
Myw5OTIuMDAsMTAxMS4wMCBDMTAxMi42Nyw5OTEuNjcsMTAyMy4zMyw5NjguNjcsMTAyNC4wMCw5
NDIuMDAgQzEwMjQuMDAsOTI3LjMzLDEwMTkuNjcsOTEwLjY3LDEwMTEuMDAsODkyLjAwIFoiXQpA
QCAtMjksNyArMjksNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDQ4MHgzNjAKICAgICAgICAgUmVu
ZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSAyMTB4ODMgY29udGFpbnMgMSBjaHVuayhz
KQogICAgICAgICAgIFJlbmRlclNWR0lubGluZVRleHQgeyN0ZXh0fSBhdCAoMCwtNjYpIHNpemUg
MjEweDgzCiAgICAgICAgICAgICBjaHVuayAxIHRleHQgcnVuIDEgYXQgKDAuMDAsMC4wMCkgc3Rh
cnRPZmZzZXQgMCBlbmRPZmZzZXQgNSB3aWR0aCAyMDkuNzE6ICJBeVx4e0Q2fUBceHtFN30iCi0g
ICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjgsMTU1KSBzaXplIDIwNXg3MiBbdHJh
bnNmb3JtPXttPSgoMS4wMCwwLjAwKSgwLjAwLC0xLjAwKSkgdD0oMTY1LjAwLDIxMC4wMCl9XQor
ICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMTY4LDE1NSkgc2l6ZSAyMDV4NzIgW3Ry
YW5zZm9ybT17bT0oKDEuMDAsMC4wMCkoLTAuMDAsLTEuMDApKSB0PSgxNjUuMDAsMjEwLjAwKX1d
CiAgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDE2OCwxNTUpIHNpemUgMjA1eDcy
IFt0cmFuc2Zvcm09e209KCgwLjAzLDAuMDApKDAuMDAsMC4wMykpIHQ9KDAuMDAsMC4wMCl9XQog
ICAgICAgICAgIFJlbmRlclBhdGgge3BhdGh9IGF0ICgxNjgsMTY2KSBzaXplIDM3eDQ1IFtmaWxs
PXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDAwMDBdfV0gW2RhdGE9Ik0xMjUwLjAwLC0zMC4wMCBD
MTE4OC42NywtMzAuMDAsMTEzNS4zMyw0OC42NywxMDkwLjAwLDIwNi4wMCBDMTA3Mi42NywyNjYu
MDAsMTA1MS4wMCwzNzEuMDAsMTAyNS4wMCw1MjEuMDAgQzk1Ny4wMCw1MTEuNjcsODY4LjAwLDQ5
NS4wMCw3NTguMDAsNDcxLjAwIEw0OTIuMDAsNDE2LjAwIEM0NTguNjcsMzI4LjY3LDQwMS42Nywy
MDEuMDAsMzIxLjAwLDMzLjAwIEMyOTkuNjcsLTQuMzMsMjcwLjY3LC0yMy4wMCwyMzQuMDAsLTIz
LjAwIEMyMDcuMzMsLTIzLjAwLDE4My42NywtMTMuMzMsMTYzLjAwLDYuMDAgQzE0Mi4zMywyNS4z
MywxMzEuNjcsNDkuMzMsMTMxLjAwLDc4LjAwIEMxMzEuMDAsMTEwLjAwLDE4MS4zMywyMzEuNjcs
MjgyLjAwLDQ0My4wMCBDMjcwLjY3LDQ2MC4zMywyNjUuMDAsNDgwLjMzLDI2NS4wMCw1MDMuMDAg
QzI2NS4wMCw1NTcuMDAsMjk3LjY3LDU5MS42NywzNjMuMDAsNjA3LjAwIEM0MzkuMDAsNzQ5LjY3
LDUzNS4wMCw5MTMuNjcsNjUxLjAwLDEwOTkuMDAgQzgwOS4wMCwxMzUxLjY3LDkwNy4zMywxNDc4
LjAwLDk0Ni4wMCwxNDc4LjAwIEM5OTguNjcsMTQ3OC4wMCwxMDM0LjY3LDE0NDEuMzMsMTA1NC4w
MCwxMzY4LjAwIEwxMTE3LjAwLDEwMzIuMDAgTDEyNjYuMDAsMzM3LjAwIEwxMzIzLjAwLDE3OS4w
MCBDMTM0Mi4zMywxMjUuMDAsMTM1Mi4wMCw4OS4wMCwxMzUyLjAwLDcxLjAwIEMxMzUyLjAwLDQy
LjMzLDEzNDEuNjcsMTguMzMsMTMyMS4wMCwtMS4wMCBDMTMwMC4zMywtMjAuMzMsMTI3Ni42Nywt
MzAuMDAsMTI1MC4wMCwtMzAuMDAgWiBNODk3LjAwLDExMTMuMDAgTDYxMS4wMCw2NTIuMDAgQzY5
MS42Nyw2NzIuNjcsODE0LjAwLDY5Ny42Nyw5NzguMDAsNzI3LjAwIEw4OTcuMDAsMTExMy4wMCBa
Il0KICAgICAgICAgICBSZW5kZXJQYXRoIHtwYXRofSBhdCAoMjA4LDE3OSkgc2l6ZSAzMXg0OCBb
dHJhbnNmb3JtPXttPSgoMS4wMCwwLjAwKSgwLjAwLDEuMDApKSB0PSgxNDk4LjAwLDAuMDApfV0g
W2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTTEwMTEuMDAsODky
LjAwIEw2NjUuMDAsMTQ0LjAwIEM1NzkuNjcsLTM4LjAwLDUxNC4zMywtMTkwLjMzLDQ2OS4wMCwt
MzEzLjAwIEw0MDMuMDAsLTUwNy4wMCBDMzg1LjY3LC01NTUuMDAsMzU1LjY3LC01NzkuMDAsMzEz
LjAwLC01NzkuMDAgQzI4NS4wMCwtNTc5LjAwLDI2MS4wMCwtNTcwLjAwLDI0MS4wMCwtNTUyLjAw
IEMyMjEuMDAsLTUzNC4wMCwyMTAuNjcsLTUxMS4wMCwyMTAuMDAsLTQ4My4wMCBDMjEwLjAwLC00
MTYuMzMsMjgyLjAwLC0yMjMuMzMsNDI2LjAwLDk2LjAwIEw2OC4wMCw3ODUuMDAgTDIzLjAwLDg1
OC4wMCBDNS4wMCw4ODguNjcsLTQuMDAsOTE0LjMzLC00LjAwLDkzNS4wMCBDLTQuMDAsOTYyLjMz
LDYuMzMsOTg2LjMzLDI3LjAwLDEwMDcuMDAgQzQ3LjY3LDEwMjcuNjcsNzEuMzMsMTAzOC4wMCw5
OC4wMCwxMDM4LjAwIEMxMjguNjcsMTAzOC4wMCwxNTIuMzMsMTAyNi4zMywxNjkuMDAsMTAwMy4w
MCBDMjgyLjMzLDg0NS42Nyw0MDQuMDAsNjIxLjY3LDUzNC4wMCwzMzEuMDAgTDY4Mi4wMCw2NzYu
MDAgQzczNS4zMyw3OTUuMzMsNzg2LjY3LDg5OC4wMCw4MzYuMDAsOTg0LjAwIEM4NTcuMzMsMTAy
MS4zMyw4ODUuMzMsMTA0MC4wMCw5MjAuMDAsMTA0MC4wMCBDOTQ3LjMzLDEwNDAuMDAsOTcxLjMz
LDEwMzAuMzMsOTkyLjAwLDEwMTEuMDAgQzEwMTIuNjcsOTkxLjY3LDEwMjMuMzMsOTY4LjY3LDEw
MjQuMDAsOTQyLjAwIEMxMDI0LjAwLDkyNy4zMywxMDE5LjY3LDkxMC42NywxMDExLjAwLDg5Mi4w
MCBaIl0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9u
dHMtZWxlbS0wMy1iLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDMtYi1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDU0NDkzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEu
MS9mb250cy1lbGVtLTAzLWItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMSw3ICsx
MSw3IEBAIGxheWVyIGF0ICgwLDApIHNpemUgNDgweDM2MAogICAgICAgICBSZW5kZXJTVkdUZXh0
IHt0ZXh0fSBhdCAoMzEsMTMwKSBzaXplIDEwNXgyMiBjb250YWlucyAxIGNodW5rKHMpCiAgICAg
ICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCB7I3RleHR9IGF0ICgwLC0xNykgc2l6ZSAxMDV4MjIK
ICAgICAgICAgICAgIGNodW5rIDEgdGV4dCBydW4gMSBhdCAoMzEuMDAsMTMwLjAwKSBzdGFydE9m
ZnNldCAwIGVuZE9mZnNldCAxMyB3aWR0aCAxMDUuMDA6ICJQbGFjZWQgR2x5cGhzIgotICAgICAg
ICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjQsODEpIHNpemUgMjEyeDE2MiBbdHJhbnNm
b3JtPXttPSgoMS4wMCwwLjAwKSgwLjAwLC0xLjAwKSkgdD0oMTY1LjAwLDE0MC4wMCl9XQorICAg
ICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjQsODEpIHNpemUgMjEyeDE2MiBbdHJh
bnNmb3JtPXttPSgoMS4wMCwwLjAwKSgtMC4wMCwtMS4wMCkpIHQ9KDE2NS4wMCwxNDAuMDApfV0K
ICAgICAgICAgICBSZW5kZXJQYXRoIHtsaW5lfSBhdCAoMTY1LDEzOSkgc2l6ZSAyMTB4MiBbc3Ry
b2tlPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSM4ODg4ODhdfV0gW2ZpbGw9e1t0eXBlPVNPTElEXSBb
Y29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMCBMMjEwLjAwLDAuMDAiXQogICAgICAg
ICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDE2NCw4MSkgc2l6ZSAyMTJ4MTYyIFt0cmFu
c2Zvcm09e209KCgwLjAzLDAuMDApKDAuMDAsMC4wMykpIHQ9KDAuMDAsMC4wMCl9XQogICAgICAg
ICAgICAgUmVuZGVyUGF0aCB7bGluZX0gYXQgKDE2NCw4MSkgc2l6ZSAyeDE2MiBbc3Ryb2tlPXtb
dHlwZT1TT0xJRF0gW2NvbG9yPSM4ODg4ODhdIFtzdHJva2Ugd2lkdGg9NTAuMDBdfV0gW2ZpbGw9
e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTTAuMDAsLTM1MDAuMDAgTDAu
MDAsMjAwMC4wMCJdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkct
MS4xL2ZvbnRzLWVsZW0tMDQtYi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTA0LWItZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA1NDQ5MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvVzND
LVNWRy0xLjEvZm9udHMtZWxlbS0wNC1iLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTEsNyArMTEsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDQ4MHgzNjAKICAgICAgICAgUmVuZGVy
U1ZHVGV4dCB7dGV4dH0gYXQgKDMxLDEzMCkgc2l6ZSAxMDV4MjIgY29udGFpbnMgMSBjaHVuayhz
KQogICAgICAgICAgIFJlbmRlclNWR0lubGluZVRleHQgeyN0ZXh0fSBhdCAoMCwtMTcpIHNpemUg
MTA1eDIyCiAgICAgICAgICAgICBjaHVuayAxIHRleHQgcnVuIDEgYXQgKDMxLjAwLDEzMC4wMCkg
c3RhcnRPZmZzZXQgMCBlbmRPZmZzZXQgMTMgd2lkdGggMTA1LjAwOiAiUGxhY2VkIEdseXBocyIK
LSAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMTY0LDgxKSBzaXplIDIxMngxNjIg
W3RyYW5zZm9ybT17bT0oKDEuMDAsMC4wMCkoMC4wMCwtMS4wMCkpIHQ9KDE2NS4wMCwxNDAuMDAp
fV0KKyAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMTY0LDgxKSBzaXplIDIxMngx
NjIgW3RyYW5zZm9ybT17bT0oKDEuMDAsMC4wMCkoLTAuMDAsLTEuMDApKSB0PSgxNjUuMDAsMTQw
LjAwKX1dCiAgICAgICAgICAgUmVuZGVyUGF0aCB7bGluZX0gYXQgKDE2NSwxMzkpIHNpemUgMjEw
eDIgW3N0cm9rZT17W3R5cGU9U09MSURdIFtjb2xvcj0jODg4ODg4XX1dIFtmaWxsPXtbdHlwZT1T
T0xJRF0gW2NvbG9yPSMwMDAwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDAgTDIxMC4wMCwwLjAwIl0K
ICAgICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgxNjQsODEpIHNpemUgMjEyeDE2
MiBbdHJhbnNmb3JtPXttPSgoMC4wMywwLjAwKSgwLjAwLDAuMDMpKSB0PSgwLjAwLDAuMDApfV0K
ICAgICAgICAgICAgIFJlbmRlclBhdGgge2xpbmV9IGF0ICgxNjQsODEpIHNpemUgMngxNjIgW3N0
cm9rZT17W3R5cGU9U09MSURdIFtjb2xvcj0jODg4ODg4XSBbc3Ryb2tlIHdpZHRoPTUwLjAwXX1d
IFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDAwMDBdfV0gW2RhdGE9Ik0wLjAwLC0zNTAw
LjAwIEwwLjAwLDIwMDAuMDAiXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9X
M0MtU1ZHLTEuMS9mb250cy1lbGVtLTA3LWItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wNy1iLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNTQ0OTMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
c3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDctYi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEyLDcgKzEyLDcgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA0ODB4MzYwCiAgICAgICAg
IFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgzMCwxMzApIHNpemUgMTA1eDIyIGNvbnRhaW5zIDEg
Y2h1bmsocykKICAgICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0IHsjdGV4dH0gYXQgKDAsLTE3
KSBzaXplIDEwNXgyMgogICAgICAgICAgICAgY2h1bmsgMSB0ZXh0IHJ1biAxIGF0ICgzMC4wMCwx
MzAuMDApIHN0YXJ0T2Zmc2V0IDAgZW5kT2Zmc2V0IDEzIHdpZHRoIDEwNS4wMDogIlBsYWNlZCBH
bHlwaHMiCi0gICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDE2NCw4MSkgc2l6ZSAy
MTJ4MTYyIFt0cmFuc2Zvcm09e209KCgxLjAwLDAuMDApKDAuMDAsLTEuMDApKSB0PSgxNjUuMDAs
MTQwLjAwKX1dCisgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDE2NCw4MSkgc2l6
ZSAyMTJ4MTYyIFt0cmFuc2Zvcm09e209KCgxLjAwLDAuMDApKC0wLjAwLC0xLjAwKSkgdD0oMTY1
LjAwLDE0MC4wMCl9XQogICAgICAgICAgIFJlbmRlclBhdGgge2xpbmV9IGF0ICgxNjUsMTM5KSBz
aXplIDIxMHgyIFtzdHJva2U9e1t0eXBlPVNPTElEXSBbY29sb3I9Izg4ODg4OF19XSBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwIEwyMTAuMDAs
MC4wMCJdCiAgICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMTY0LDgxKSBzaXpl
IDIxMngxNjIgW3RyYW5zZm9ybT17bT0oKDAuMDMsMC4wMCkoMC4wMCwwLjAzKSkgdD0oMC4wMCww
LjAwKX1dCiAgICAgICAgICAgICBSZW5kZXJQYXRoIHtsaW5lfSBhdCAoMTY0LDgxKSBzaXplIDJ4
MTYyIFtzdHJva2U9e1t0eXBlPVNPTElEXSBbY29sb3I9Izg4ODg4OF0gW3N0cm9rZSB3aWR0aD01
MC4wMF19XSBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSJNMC4w
MCwtMzUwMC4wMCBMMC4wMCwyMDAwLjAwIl0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9zdmcvY3VzdG9tL3VzZS1vbi1kaXNhbGxvd2VkLWZvcmVpZ24tb2JqZWN0LTMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvY3VzdG9tL3Vz
ZS1vbi1kaXNhbGxvd2VkLWZvcmVpZ24tb2JqZWN0LTMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1
NDQ5MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvY3VzdG9tL3VzZS1vbi1kaXNh
bGxvd2VkLWZvcmVpZ24tb2JqZWN0LTMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MCw0ICsxMCw0IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICAgICAgUmVuZGVyU1ZH
Q29udGFpbmVyIHtnfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlclNWR0NvbnRhaW5lciB7
dXNlfSBhdCAoMCwwKSBzaXplIDB4MCBbdHJhbnNmb3JtPXttPSgoMC43MSwwLjcxKSgtMC43MSww
LjcxKSkgdD0oMjUwLjAwLC01MC4wMCl9XQogICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBh
dCAoMCwwKSBzaXplIDB4MCBbdHJhbnNmb3JtPXttPSgoMS4wMCwwLjAwKSgwLjAwLDEuMDApKSB0
PSgxMC4wMCwxMC4wMCl9XQotICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICg0NjIs
MTE5KSBzaXplIDF4MSBbdHJhbnNmb3JtPXttPSgoMC43MSwwLjcxKSgtMC43MSwwLjcxKSkgdD0o
MjYwLjAwLC00MC4wMCl9XQorICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICg0NTEs
MTE1KSBzaXplIDJ4MiBbdHJhbnNmb3JtPXttPSgoMC43MSwwLjcxKSgtMC43MSwwLjcxKSkgdD0o
MjUwLjAwLC0zNS44Nil9XQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0
b20vdXNlLW9uLWRpc2FsbG93ZWQtZm9yZWlnbi1vYmplY3QtNC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdXNlLW9uLWRpc2Fs
bG93ZWQtZm9yZWlnbi1vYmplY3QtNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU0NDkzKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdXNlLW9uLWRpc2FsbG93ZWQtZm9y
ZWlnbi1vYmplY3QtNC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYgKzE0LDYg
QEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAgICAgICAgUmVuZGVyU1ZHQ29udGFp
bmVyIHtnfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlclNWR0NvbnRhaW5lciB7dXNlfSBh
dCAoMCwwKSBzaXplIDB4MCBbdHJhbnNmb3JtPXttPSgoMC43MSwwLjcxKSgtMC43MSwwLjcxKSkg
dD0oMjUwLjAwLC01MC4wMCl9XQogICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMCww
KSBzaXplIDB4MCBbdHJhbnNmb3JtPXttPSgoMS4wMCwwLjAwKSgwLjAwLDEuMDApKSB0PSgxMC4w
MCwxMC4wMCl9XQotICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICg0NjIsMTE5KSBz
aXplIDF4MSBbdHJhbnNmb3JtPXttPSgoMC43MSwwLjcxKSgtMC43MSwwLjcxKSkgdD0oMjYwLjAw
LC00MC4wMCl9XQotICAgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDQ2MiwxMTkp
IHNpemUgMXgxCi0gICAgICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICg0NjIsMTE5
KSBzaXplIDF4MQorICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICg0NTEsMTE1KSBz
aXplIDJ4MiBbdHJhbnNmb3JtPXttPSgoMC43MSwwLjcxKSgtMC43MSwwLjcxKSkgdD0oMjUwLjAw
LC0zNS44Nil9XQorICAgICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDQ1MSwxMTUp
IHNpemUgMngyCisgICAgICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICg0NTEsMTE1
KSBzaXplIDJ4MgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2RvbS9TVkdNYXRyaXgtaW50ZXJmYWNl
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvZG9tL1NWR01hdHJp
eC1pbnRlcmZhY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1NDQ5MykKKysrIExheW91dFRlc3Rz
L3N2Zy9kb20vU1ZHTWF0cml4LWludGVyZmFjZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDcgKzgwLDcgQEAgUEFTUyBwYXJzZUZsb2F0KG0uZikgaXMgMAogCiBUZXN0IGZsaXBY
KCkKIFBBU1MgbTQuYSBpcyAtNQotUEFTUyBtNC5iIGlzIDAKK1BBU1MgTWF0aC5hYnMobTQuYikg
aXMgMAogUEFTUyBtNC5jIGlzIDAKIFBBU1MgbTQuZCBpcyA1CiBQQVNTIG00LmUgaXMgMTAwCkBA
IC05Nyw3ICs5Nyw3IEBAIFBBU1MgcGFyc2VGbG9hdChtMy5mKSBpcyA1MAogVGVzdCBmbGlwWSgp
CiBQQVNTIG00LmEgaXMgNQogUEFTUyBtNC5iIGlzIDAKLVBBU1MgbTQuYyBpcyAwCitQQVNTIE1h
dGguYWJzKG00LmMpIGlzIDAKIFBBU1MgbTQuZCBpcyAtNQogUEFTUyBtNC5lIGlzIDEwMAogUEFT
UyBtNC5mIGlzIDUwCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvZG9tL1NWR01hdHJpeC1pbnRlcmZh
Y2UueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2RvbS9TVkdNYXRyaXgtaW50
ZXJmYWNlLnhodG1sCShyZXZpc2lvbiA1NDQ5MykKKysrIExheW91dFRlc3RzL3N2Zy9kb20vU1ZH
TWF0cml4LWludGVyZmFjZS54aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBA
IGRlYnVnKCIiKTsKIGRlYnVnKCJUZXN0IGZsaXBYKCkiKTsKIG00ID0gbTMuZmxpcFgoKTsKIHNo
b3VsZEJlKCdtNC5hJywgJy01Jyk7Ci1zaG91bGRCZSgnbTQuYicsICcwJyk7CitzaG91bGRCZSgn
TWF0aC5hYnMobTQuYiknLCAnMCcpOwogc2hvdWxkQmUoJ200LmMnLCAnMCcpOwogc2hvdWxkQmUo
J200LmQnLCAnNScpOwogc2hvdWxkQmUoJ200LmUnLCAnMTAwJyk7CkBAIC0xMzUsNyArMTM1LDcg
QEAgZGVidWcoIlRlc3QgZmxpcFkoKSIpOwogbTQgPSBtMy5mbGlwWSgpOwogc2hvdWxkQmUoJ200
LmEnLCAnNScpOwogc2hvdWxkQmUoJ200LmInLCAnMCcpOwotc2hvdWxkQmUoJ200LmMnLCAnMCcp
Oworc2hvdWxkQmUoJ01hdGguYWJzKG00LmMpJywgJzAnKTsKIHNob3VsZEJlKCdtNC5kJywgJy01
Jyk7CiBzaG91bGRCZSgnbTQuZScsICcxMDAnKTsKIHNob3VsZEJlKCdtNC5mJywgJzUwJyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>