<?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>31173</bug_id>
          
          <creation_ts>2009-11-05 10:37:33 -0800</creation_ts>
          <short_desc>Implement WebGLUniformLocation and change API to use it</short_desc>
          <delta_ts>2009-12-08 18:50:56 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Peterson Trethewey">petersont</assigned_to>
          <cc>brettw</cc>
    
    <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>160874</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-11-05 10:37:33 -0800</bug_when>
    <thetext>The WebGL spec now uses the WebGLUniformLocation object to pass the uniform location to the uniform*() and getUniform calls. It&apos;s also returned from the getUniformLocation call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160952</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-11-05 14:20:33 -0800</bug_when>
    <thetext>WebGLUniformLocation also needs to be implemented</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169559</commentid>
    <comment_count>2</comment_count>
      <attachid>44452</attachid>
    <who name="Peterson Trethewey">petersont</who>
    <bug_when>2009-12-07 17:40:38 -0800</bug_when>
    <thetext>Created attachment 44452
A patch adding the class WebGLUniformLocation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169564</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-07 17:45:12 -0800</bug_when>
    <thetext>Attachment 44452 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 5120 characters of output:
 use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:274:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:275:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:354:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:420:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:582:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:583:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:584:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:584:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:585:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:586:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:587:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:588:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:589:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:590:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:591:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:592:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:620:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:621:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:622:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:622:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:624:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:626:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:626:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:627:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:628:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:628:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:703:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLRenderingContext.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/html/canvas/WebGLUniformLocation.h:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/html/canvas/WebGLUniformLocation.h:37:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLUniformLocation.h:39:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLUniformLocation.h:43:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLUniformLocation.h:45:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLUniformLocation.h:52:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLUniformLocation.cpp:30:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:240:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:242:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:288:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:290:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:294:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:467:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:484:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 48</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169665</commentid>
    <comment_count>4</comment_count>
      <attachid>44452</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-12-08 07:20:30 -0800</bug_when>
    <thetext>Comment on attachment 44452
A patch adding the class WebGLUniformLocation

&gt; Index: WebCore/html/canvas/WebGLRenderingContext.cpp
&gt; ===================================================================
&gt; --- WebCore/html/canvas/WebGLRenderingContext.cpp	(revision 51799)
&gt; +++ WebCore/html/canvas/WebGLRenderingContext.cpp	(working copy)
&gt; -long WebGLRenderingContext::getUniformLocation(WebGLProgram* program, const String&amp; name, ExceptionCode&amp; ec)
&gt; +PassRefPtr&lt;WebGLUniformLocation&gt; WebGLRenderingContext::getUniformLocation(WebGLProgram* program, const String&amp; name, ExceptionCode&amp; ec)
&gt;  {
&gt;      if (!program || program-&gt;context() != this) {
&gt;          ec = TYPE_MISMATCH_ERR;
&gt;          return 0;
&gt;      }
&gt; -    return m_context-&gt;getUniformLocation(program, name);
&gt; +    RefPtr&lt;WebGLUniformLocation&gt; location = WebGLUniformLocation::create(program, m_context-&gt;getUniformLocation(program, name));
&gt; +    return location;
&gt;  }

Why not just:

    return WebGLUniformLocation::create(program, m_context-&gt;getUniformLocation(program, name));

?

&gt; Index: WebCore/html/canvas/WebGLRenderingContext.h
&gt; ===================================================================
&gt; --- WebCore/html/canvas/WebGLRenderingContext.h	(revision 51799)
&gt; +++ WebCore/html/canvas/WebGLRenderingContext.h	(working copy)
&gt; @@ -32,6 +32,7 @@
&gt;  #include &quot;WebGLGetInfo.h&quot;
&gt;  #include &quot;WebGLIntArray.h&quot;
&gt;  #include &quot;WebGLUnsignedByteArray.h&quot;
&gt; +#include &quot;WebGLUniformLocation.h&quot;

You should be able to use

    class WebGLUniformLocation;

and avoid the inclusion of the .h here

&gt;  #include &quot;GraphicsContext3D.h&quot;
&gt;  #include &quot;PlatformString.h&quot;
&gt;  
&gt; @@ -157,9 +158,9 @@ class WebKitCSSMatrix;
&gt;  
&gt;          WebGLGetInfo getTexParameter(unsigned long target, unsigned long pname, ExceptionCode&amp;);
&gt;  
&gt; -        WebGLGetInfo getUniform(WebGLProgram* program, long location, ExceptionCode&amp; ec);
&gt; +        WebGLGetInfo getUniform(WebGLProgram* program, const WebGLUniformLocation* location, ExceptionCode&amp; ec);

You can leave off &quot;ec&quot; and &quot;location&quot;. The type name is sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169733</commentid>
    <comment_count>5</comment_count>
      <attachid>44452</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-08 11:18:02 -0800</bug_when>
    <thetext>Comment on attachment 44452
A patch adding the class WebGLUniformLocation

The tabs will make this patch impossible to land as-is.  I suggest running check-webkit-style locally and re-posting.

XCode has a setting for using spaces instead of tabs in the preferences under &quot;Text Editing&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169736</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-12-08 11:23:02 -0800</bug_when>
    <thetext>And Textmate will convert all tabs to spaces with one operation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169793</commentid>
    <comment_count>7</comment_count>
      <attachid>44487</attachid>
    <who name="Peterson Trethewey">petersont</who>
    <bug_when>2009-12-08 14:20:30 -0800</bug_when>
    <thetext>Created attachment 44487
The WebGLUniformLocation change from before plus some style fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169816</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-08 15:25:27 -0800</bug_when>
    <thetext>FWIW, these changes look good to me. Would be great if we could get these landed soon because other changes being worked on collide with them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169820</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-12-08 15:32:38 -0800</bug_when>
    <thetext>Why hasn&apos;t the style bot run on this patch yet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169825</commentid>
    <comment_count>10</comment_count>
      <attachid>44487</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-08 15:50:47 -0800</bug_when>
    <thetext>Comment on attachment 44487
The WebGLUniformLocation change from before plus some style fixes.

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 51872)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,69 @@
&gt; +2009-12-08  Peterson Trethewey  &lt;petersont@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Implement WebGLUniformLocation and change API to use it.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=31173
&gt; +
&gt; +        No new tests: tests which call getUniformLocation already exist.  That function returns a
&gt; +        WebGLUniformLocation now instead of an integer, but the way the API gets used hasn&apos;t
&gt; +        changed.

There should be new tests, at least the following:
  Using an integer instead of a UniformLocation
  Using a UniformLocation from another context
  Using a UniformLocation with a field of a struct
  Using a UniformLocation with a field of a matrix
  Using a UniformLocation after changing the active shader on a context
  Using a UniformLocation with a separately compiled copy of the same shader

etc, etc

You want your test cases to cover as many scenarios as possible, not necessarily just the correct uses :D

&gt; Index: WebCore/html/canvas/WebGLUniformLocation.h
&gt; ===================================================================
&gt; --- WebCore/html/canvas/WebGLUniformLocation.h	(revision 0)
&gt; +++ WebCore/html/canvas/WebGLUniformLocation.h	(revision 0)
&gt; @@ -0,0 +1,58 @@
&gt; +
&gt; +class WebGLUniformLocation : public RefCounted&lt;WebGLUniformLocation&gt; {
&gt; +    public:
Incorrect indenting
&gt; +    virtual ~WebGLUniformLocation() { }
&gt; +        
&gt; +        static PassRefPtr&lt;WebGLUniformLocation&gt; create(WebGLProgram* program, long location);
Incorrect indenting

&gt; +    
&gt; +    WebGLProgram* program() const { return m_program.get(); }
&gt; +    
&gt; +    long location() const { return m_location; }
&gt; +    
&lt;start incorrect indent&gt;
&gt; +    protected:
&gt; +        WebGLUniformLocation(WebGLProgram* program, long location);
&gt; +    
&gt; +    private:
&gt; +        RefPtr&lt;WebGLProgram&gt; m_program;
&lt;/end incorrect indent&gt; :D
&gt; +    long m_location;
&gt; +};
&gt; +    

Okay, with the exception of the minor style problems the code appears to be fine,
my only real problem is the absence of test cases which is why I am r-&apos;ing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169845</commentid>
    <comment_count>11</comment_count>
      <attachid>44499</attachid>
    <who name="Peterson Trethewey">petersont</who>
    <bug_when>2009-12-08 17:30:06 -0800</bug_when>
    <thetext>Created attachment 44499
Fixed some indenting and added tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169850</commentid>
    <comment_count>12</comment_count>
      <attachid>44499</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-08 17:47:18 -0800</bug_when>
    <thetext>Comment on attachment 44499
Fixed some indenting and added tests.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169853</commentid>
    <comment_count>13</comment_count>
      <attachid>44499</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-08 17:50:02 -0800</bug_when>
    <thetext>Comment on attachment 44499
Fixed some indenting and added tests.

Rejecting patch 44499 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Oliver Hunt&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
ormLocation.cpp
patching file WebCore/html/canvas/WebGLUniformLocation.h
patching file WebCore/html/canvas/WebGLUniformLocation.idl
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/fast/canvas/webgl/uniform-location-expected.txt
patching file LayoutTests/fast/canvas/webgl/uniform-location.html
patching file LayoutTests/fast/canvas/webgl/resources/structUniformShader.vert
patching file LayoutTests/fast/canvas/webgl/script-tests/uniform-location.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169858</commentid>
    <comment_count>14</comment_count>
      <attachid>44505</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-08 18:23:02 -0800</bug_when>
    <thetext>Created attachment 44505
Fixed conflicts in WebCore.xcodeproj/project.pbjproj.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169859</commentid>
    <comment_count>15</comment_count>
      <attachid>44506</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-08 18:27:13 -0800</bug_when>
    <thetext>Created attachment 44506
Removed svn:eol-style properties accidentally introduced for new files in last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169860</commentid>
    <comment_count>16</comment_count>
      <attachid>44506</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-08 18:27:56 -0800</bug_when>
    <thetext>Comment on attachment 44506
Removed svn:eol-style properties accidentally introduced for new files in last patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169861</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-08 18:28:21 -0800</bug_when>
    <thetext>Attachment 44506 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:501:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:510:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:523:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:532:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:554:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:560:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:573:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:579:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:605:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:609:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:622:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:626:  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: 12</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169862</commentid>
    <comment_count>18</comment_count>
      <attachid>44506</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-08 18:29:44 -0800</bug_when>
    <thetext>Comment on attachment 44506
Removed svn:eol-style properties accidentally introduced for new files in last patch.

sigh, apparently the style bot disagrees -- can yet another updated version be made? sorry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169863</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-08 18:32:41 -0800</bug_when>
    <thetext>What happened with the patch 44505 which was submitted to the commit queue? Sorry I didn&apos;t notice the svn:eol-style properties on that.

The bot is complaining about preexisting case statements with incorrect indentation. Do you want me to fix the indentation, which will add more changes to the patch, or should we fix them in another cleanup bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169864</commentid>
    <comment_count>20</comment_count>
      <attachid>44506</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-08 18:34:44 -0800</bug_when>
    <thetext>Comment on attachment 44506
Removed svn:eol-style properties accidentally introduced for new files in last patch.

The style bot is apparently complaining about pre-existing formatting issues, we can fix later.

r=me (based on prior review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169865</commentid>
    <comment_count>21</comment_count>
      <attachid>44505</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-08 18:38:15 -0800</bug_when>
    <thetext>Comment on attachment 44505
Fixed conflicts in WebCore.xcodeproj/project.pbjproj.

Clearing flags on attachment: 44505

Committed r51884: &lt;http://trac.webkit.org/changeset/51884&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169866</commentid>
    <comment_count>22</comment_count>
      <attachid>44506</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-08 18:38:45 -0800</bug_when>
    <thetext>Comment on attachment 44506
Removed svn:eol-style properties accidentally introduced for new files in last patch.

Rejecting patch 44506 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Oliver Hunt&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
ormLocation.cpp
patching file WebCore/html/canvas/WebGLUniformLocation.h
patching file WebCore/html/canvas/WebGLUniformLocation.idl
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/fast/canvas/webgl/uniform-location-expected.txt
patching file LayoutTests/fast/canvas/webgl/uniform-location.html
patching file LayoutTests/fast/canvas/webgl/resources/structUniformShader.vert
patching file LayoutTests/fast/canvas/webgl/script-tests/uniform-location.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169869</commentid>
    <comment_count>23</comment_count>
      <attachid>44506</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-08 18:50:26 -0800</bug_when>
    <thetext>Comment on attachment 44506
Removed svn:eol-style properties accidentally introduced for new files in last patch.

Attachment 44505 was committed and it turns out the svn:eol-style properties it contained weren&apos;t applied to the new files. Marking this patch obsolete.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44452</attachid>
            <date>2009-12-07 17:40:38 -0800</date>
            <delta_ts>2009-12-08 14:20:30 -0800</delta_ts>
            <desc>A patch adding the class WebGLUniformLocation</desc>
            <filename>uniformlocationpatch.txt</filename>
            <type>text/plain</type>
            <size>68041</size>
            <attacher name="Peterson Trethewey">petersont</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDUxNzk5KQorKysgV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBAIERPTV9DTEFTU0VT
ID0gXAogICAgIFdlYkdMU2hhZGVyIFwKICAgICBXZWJHTFNob3J0QXJyYXkgXAogICAgIFdlYkdM
VGV4dHVyZSBcCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24gXAogICAgIFdlYkdMVW5zaWduZWRC
eXRlQXJyYXkgXAogICAgIFdlYkdMVW5zaWduZWRJbnRBcnJheSBcCiAgICAgV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXkgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDUxNzk5KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDcgQEAKICAgICAgICAgICAgICdodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsJywKICAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9XZWJHTFNoYWRlci5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hv
cnRBcnJheS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0
aW9uLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5p
ZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Lmlk
bCcsCkBAIC0xMzI0LDYgKzEzMjUsOCBAQAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZh
c1N0eWxlLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAnLAog
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oJywKKyAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAnLAorICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9X
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdM
VW5zaWduZWRJbnRBcnJheS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDUxNzk5KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTEgQEAK
IAkJMEI5MDU2RjgwRjI2ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI5MDU2RjYw
RjI2ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwICovOyB9OwogCQkw
QjkwNTZGOTBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI5MDU2RjcwRjI2ODVG
MzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9ICgpOyB9OyB9OwogCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVy
TGluZUJveExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBCRTAzMEExMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBDM0YxRjVBMTBD
ODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzNGMUY1NzEwQzg4NzEyMDBENzJDRTEg
LyogV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovOyB9OworCQkwQzNGMUY1QjEwQzg4NzEyMDBE
NzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDM0YxRjU4MTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVu
aWZvcm1Mb2NhdGlvbi5oICovOyB9OworCQkwQzNGMUY1QzEwQzg4NzEyMDBENzJDRTEgLyogV2Vi
R0xVbmlmb3JtTG9jYXRpb24uaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwQzNGMUY1OTEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9j
YXRpb24uaWRsICovOyB9OworCQkwQzQ1MzQyNzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVu
aWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlv
bi5jcHAgKi87IH07CisJCTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9y
bUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICov
OyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1NEUw
RjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgfTsKIAkJMEYxNURB
OEEwRjNBQUVFNzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1REE4OTBGM0FBRUU3
MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLzsgfTsKIAkJMEY1MDBB
QUYwRjU0REIxQjAwRUVGOTI4IC8qIFRyYW5zZm9ybVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUwMEFBRTBGNTREQjFCMDBFRUY5MjggLyog
VHJhbnNmb3JtU3RhdGUuaCAqLzsgfTsKQEAgLTUzNTAsNiArNTM1NSwxMSBAQAogCQkwQjkwNTZG
NjBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEI5MDU2RjcwRjI2ODVGMzAwOTVGRjZBIC8q
IFdvcmtlclRocmVhZGFibGVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwQkUwMzBBMTBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGluZUJveExpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEMzRjFGNTcxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5p
Zm9ybUxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkdMVW5pZm9ybUxvY2F0aW9uLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBDM0YxRjU4MTBDODg3MTIwMEQ3
MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBwYXRoID0gY2FudmFzL1dlYkdMVW5pZm9y
bUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBDM0YxRjU5MTBDODg3
MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMVW5pZm9y
bUxvY2F0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEM0NTM0MjUxMENE
QkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dl
YkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
V2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
MUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0aW9uSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDsgcGF0aCA9IGFuaW1hdGlvbi9BbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwMEFBRTBG
NTREQjFCMDBFRUY5MjggLyogVHJhbnNmb3JtU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHJhbnNmb3JtU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwNzM3LDYgKzEwNzQ3LDkgQEAKIAkJCQk0OUM3QjlDNTEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xUZXh0dXJlLmNwcCAqLywKIAkJCQk0OUM3QjlDNjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xUZXh0dXJlLmggKi8sCiAJCQkJNDlDN0I5QzcxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4
dHVyZS5pZGwgKi8sCisJCQkJMEMzRjFGNTcxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9y
bUxvY2F0aW9uLmNwcCAqLywKKwkJCQkwQzNGMUY1ODEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xV
bmlmb3JtTG9jYXRpb24uaCAqLywKKwkJCQkwQzNGMUY1OTEwQzg4NzEyMDBENzJDRTEgLyogV2Vi
R0xVbmlmb3JtTG9jYXRpb24uaWRsICovLAogCQkJCTQ5RUVDREQ2MTA1MDNDMjMwMDA5OUZBQiAv
KiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCAqLywKIAkJCQk0OUVFQ0RENzEwNTAzQzIzMDAw
OTlGQUIgLyogV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oICovLAogCQkJCTQ5RUVDREQ4MTA1MDND
MjMwMDA5OUZBQiAvKiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbCAqLywKQEAgLTEyODk2LDYg
KzEyOTA5LDggQEAKIAkJCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNXZWJHTFNob3J0
QXJyYXkuaCAqLywKIAkJCQk0OUM3Qjk5MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFRleHR1
cmUuY3BwICovLAogCQkJCTQ5QzdCOTkyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVy
ZS5oICovLAorCQkJCTBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uLmNwcCAqLywKKwkJCQkwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVu
aWZvcm1Mb2NhdGlvbi5oICovLAogCQkJCTQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1dl
YkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwICovLAogCQkJCTQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZB
QiAvKiBKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCAqLywKIAkJCQk0OUVFQ0VGQzEwNTA3MEM0
MDAwOTlGQUIgLyogSlNXZWJHTFVuc2lnbmVkSW50QXJyYXkuY3BwICovLApAQCAtMTgyMjUsNiAr
MTgyNDAsOCBAQAogCQkJCTdBMEU3NzFGMTBDMDBEQjEwMEEwMjc2RSAvKiBKU0luc3BlY3RvckZy
b250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjRFQUY0QUYxMEM3NDJCMTAwOTEwMEQz
IC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTlEMUUzMzEwQzk3
RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEMzRjFGNUIxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwQzQ1MzQyODEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1M
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODMyNiw2ICsxODM0Myw3IEBACiAJCQkJMUFC
MUFFN0EwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICov
LAogCQkJCTFBQjFBRTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBuZyBpbiBS
ZXNvdXJjZXMgKi8sCiAJCQkJNTE3NEUyMEMxMEExRjQ5QTAwRjk1RTZGIC8qIFBvcFN0YXRlRXZl
bnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkwQzNGMUY1QzEwQzg4NzEyMDBENzJDRTEgLyog
V2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMzc5LDYgKzIw
Mzk3LDggQEAKIAkJCQk3QTBFNzcxRTEwQzAwREIxMDBBMDI3NkUgLyogSlNJbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjRFQUY0QUUxMEM3NDJCMTAwOTEwMEQz
IC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5OUQxRTMyMTBD
OTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBDM0YxRjVBMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwQzQ1MzQyNzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVu
aWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lv
biA1MTc5OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiSlNX
ZWJHTFJlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTV2ViR0xTaGFkZXIuaCIKICNpbmNsdWRl
ICJKU1dlYkdMVGV4dHVyZS5oIgorI2luY2x1ZGUgIkpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIK
ICNpbmNsdWRlICJKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJKU1dlYktp
dENTU01hdHJpeC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0xODcsMzcgKzE4
OCw2IEBAIGVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7CiAgICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtV
bmlmb3JtCiB9OwogCi1zdGF0aWMgSlNWYWx1ZSBnZXRQcm9ncmFtUGFyYW1ldGVySGVscGVyKEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBvYmosIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncywgV2hpY2hQcm9ncmFtQ2FsbCBwcm9ncmFtQ2FsbCkKLXsKLSAgICBpZiAoYXJncy5z
aXplKCkgIT0gMikKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3Ip
OwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4ob2JqLT5pbXBs
KCkpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IHRvV2ViR0xQcm9ncmFtKGFyZ3MuYXQo
MCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgV2ViR0xHZXRJbmZvIGluZm87Ci0gICAgc3dpdGNoIChwcm9ncmFtQ2FsbCkgewotICAg
IGNhc2Uga1Byb2dyYW1QYXJhbWV0ZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LT5nZXRQcm9n
cmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2Uga1VuaWZvcm06Ci0gICAgICAgIC8vIHBuYW1lIC0+IGxvY2F0aW9uCi0gICAgICAgIGluZm8g
PSBjb250ZXh0LT5nZXRVbmlmb3JtKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pT
KGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCiBKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywg
ZXhlYywgYXJncywga0J1ZmZlcik7CkBAIC0yNjcsNyArMjM3LDIxIEBAIEpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmEKIAogSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGdldFByb2dyYW1QYXJhbWV0ZXJIZWxwZXIodGhpcywgZXhl
YywgYXJncywga1Byb2dyYW1QYXJhbWV0ZXIpOworCWlmIChhcmdzLnNpemUoKSAhPSAyKQorICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CisJCisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKTsKKyAgICBXZWJHTFByb2dy
YW0qIHByb2dyYW0gPSB0b1dlYkdMUHJvZ3JhbShhcmdzLmF0KDApKTsKKyAgICB1bnNpZ25lZCBw
bmFtZSA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0SW5mbyBp
bmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIGluZm8pOwogfQogCiBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQpAQCAtMzAxLDcgKzI4NSwyMSBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRUZXhQCiAKIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZv
cm0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVybiBn
ZXRQcm9ncmFtUGFyYW1ldGVySGVscGVyKHRoaXMsIGV4ZWMsIGFyZ3MsIGtVbmlmb3JtKTsKKwlp
ZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOworCQorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+
KGltcGwoKSk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJn
cy5hdCgwKSk7CisJV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvYyA9IHRvV2ViR0xVbmlmb3JtTG9j
YXRpb24oYXJncy5hdCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQt
PmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAK
IEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkBAIC00NjMsMTMgKzQ2MSwzNSBAQCBlbnVt
IERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7CiAgICAgZl91bmlmb3JtTWF0cml4MmZ2LCBmX3Vu
aWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1hdHJpeDRmdgogfTsKIAorYm9vbCBmdW5jdGlvbkZv
clVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCit7CisgICAgc3dpdGNoIChmKQorICAgIHsK
KyAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogYnJl
YWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIEpTQzo6SlNWYWx1ZSBk
YXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yKTsKKyAgICAKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24gPSBOVUxMOworICAgIGxvbmcgaW5kZXggPSAtMTsKKyAgICAKKyAgICBpZiAoZnVuY3Rp
b25Gb3JVbmlmb3JtKGYpKQorICAgICAgICBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRp
b24oYXJncy5hdCgwKSk7CisgICAgZWxzZQorICAgICAgICBpbmRleCA9IGFyZ3MuYXQoMCkudG9J
bnQzMihleGVjKTsKIAotICAgIGxvbmcgbG9jYXRpb24gPSBhcmdzLmF0KDApLnRvSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKICAg
ICBSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiB3ZWJHTEFycmF5ID0gdG9XZWJHTEZsb2F0QXJyYXko
YXJncy5hdCgxKSk7CkBAIC00ODIsMTAgKzUwMiwxMCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRh
dGFGdW5jdGlvbmYoRGF0YUZ1CiAgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OiBjb250ZXh0
LT51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpKTsgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIGZfdW5pZm9ybTN2OiBjb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLCB3ZWJH
TEFycmF5LmdldCgpKTsgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OiBjb250
ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpKTsgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjFmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3Zl
cnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYobG9jYXRpb24sIHdlYkdMQXJy
YXkuZ2V0KCkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjogY29u
dGV4dC0+dmVydGV4QXR0cmliM2Z2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpKTsgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJp
YjRmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBmX3ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHdlYkdM
QXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjog
Y29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0dHJp
YjNmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBm
X3ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHdlYkdMQXJy
YXkuZ2V0KCkpOyBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9CkBAIC01MDIsMTAgKzUyMiwxMCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFG
dW5jdGlvbmYoRGF0YUZ1CiAgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRleHQtPnVuaWZv
cm0yZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7CiAgICAgICAgIGNhc2UgZl91bmlm
b3JtM3Y6IGNvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7
CiAgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24s
IGFycmF5LCBzaXplKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjogY29u
dGV4dC0+dmVydGV4QXR0cmliMWZ2KGxvY2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOwotICAg
ICAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihsb2Nh
dGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2
OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2
KGxvY2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0
cmliMXY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXksIHNpemUpOyBicmVh
azsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIy
ZnYoaW5kZXgsIGFycmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRy
aWIzdjogY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSwgc2l6ZSk7IGJyZWFr
OworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjRm
dihpbmRleCwgYXJyYXksIHNpemUpOyBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CkBAIC01MTUsOCArNTM1LDkgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVu
Y3Rpb25pKERhdGFGdQogICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKLSAgICBsb25nIGxvY2F0aW9uID0gYXJn
cy5hdCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAg
CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2Nh
dGlvbihhcmdzLmF0KDApKTsKKyAgCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAgUmVmUHRyPFdlYkdMSW50
QXJyYXk+IHdlYkdMQXJyYXkgPSB0b1dlYkdMSW50QXJyYXkoYXJncy5hdCgxKSk7CkBAIC01NTYs
NyArNTc3LDggQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAg
IGlmIChhcmdzLnNpemUoKSAhPSAzKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvcik7CiAKLSAgICBsb25nIGxvY2F0aW9uID0gYXJncy5hdCgwKS50b0ludDMyKGV4
ZWMpOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3Jt
TG9jYXRpb24oYXJncy5hdCgwKSk7CisKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAg
IAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDUxNzk5KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBj
b3B5KQpAQCAtMTgxNiw2ICsxODE2LDcgQEAgc3ViIElzUmVmUHRyVHlwZQogICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJXZWJHTFNoYWRlciI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldl
YkdMU2hvcnRBcnJheSI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMVGV4dHVyZSI7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMVW5pZm9ybUxvY2F0aW9uIjsKICAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSI7CiAgICAgcmV0dXJu
IDEgaWYgJHR5cGUgZXEgIldlYkdMVW5zaWduZWRJbnRBcnJheSI7CiAgICAgcmV0dXJuIDEgaWYg
JHR5cGUgZXEgIldlYkdMVW5zaWduZWRTaG9ydEFycmF5IjsKQEAgLTE5MTgsNiArMTkxOSw3IEBA
IG15ICV0eXBlQ2FuRmFpbENvbnZlcnNpb24gPSAoCiAgICAgIldlYkdMU2hhZGVyIiA9PiAwLAog
ICAgICJXZWJHTFNob3J0QXJyYXkiID0+IDAsCiAgICAgIldlYkdMVGV4dHVyZSIgPT4gMCwKKyAg
ICAiV2ViR0xVbmlmb3JtTG9jYXRpb24iID0+IDAsCiAgICAgIkNvbXBhcmVIb3ciID0+IDAsCiAg
ICAgIkRhdGFHcmlkQ29sdW1uIiA9PiAwLAogICAgICJET01TdHJpbmciID0+IDAsCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAJKHJldmlz
aW9uIDUxNzk5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImJpbmRpbmdz
L1Y4V2ViR0xTaGFkZXIuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xTaG9ydEFycmF5
LmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVGV4dHVyZS5jcHAiCisjaW5jbHVkZSAi
YmluZGluZ3MvVjhXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3Mv
VjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdM
VW5zaWduZWRJbnRBcnJheS5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTFVuc2lnbmVk
U2hvcnRBcnJheS5jcHAiCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAJKHJldmlzaW9uIDUx
Nzk5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA3LDYgKzQwNyw3IEBACiAjaW5jbHVkZSAiVjhXZWJHTFNoYWRlci5oIgogI2luY2x1ZGUg
IlY4V2ViR0xTaG9ydEFycmF5LmgiCiAjaW5jbHVkZSAiVjhXZWJHTFRleHR1cmUuaCIKKyNpbmNs
dWRlICJWOFdlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVjhXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAiVjhXZWJHTFVuc2lnbmVkSW50QXJyYXkuaCIKICNpbmNs
dWRlICJWOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LmgiCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4SW5kZXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXgu
aAkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkod29y
a2luZyBjb3B5KQpAQCAtNDYwLDYgKzQ2MCw3IEBAIHR5cGVkZWYgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGwKICAgICBWKFdFQkdMU0hBREVSLCBXZWJHTFNoYWRlcikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKFdFQkdMU0hPUlRBUlJBWSwg
V2ViR0xTaG9ydEFycmF5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBW
KFdFQkdMVEVYVFVSRSwgV2ViR0xUZXh0dXJlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBWKFdFQkdMVU5JRk9STUxPQ0FUSU9OLCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbikgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKFdFQkdMVU5TSUdORURCWVRFQVJS
QVksIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkpICAgICAgICAgICAgICAgICAgIFwKICAgICBWKFdF
QkdMVU5TSUdORURJTlRBUlJBWSwgV2ViR0xVbnNpZ25lZEludEFycmF5KSAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICBWKFdFQkdMVU5TSUdORURTSE9SVEFSUkFZLCBXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDUxNzk5KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiVjhXZWJH
TFByb2dyYW0uaCIKICNpbmNsdWRlICJWOFdlYkdMU2hhZGVyLmgiCiAjaW5jbHVkZSAiVjhXZWJH
TFNob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJWOFdlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCiAjaW5j
bHVkZSAiVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAiVjhXZWJHTFVuc2ln
bmVkSW50QXJyYXkuaCIKICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LmgiCkBA
IC0yNjIsNDcgKzI2MywyMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE9iamVj
dFBhCiAgICAgcmV0dXJuIHRvVjgoaW5mbyk7CiB9CiAKLWVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7
Ci0gICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCi19OwotCi1zdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGdldFByb2dyYW1QYXJhbWV0ZXIoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cywgV2hpY2hQcm9ncmFtQ2FsbCBwcm9ncmFtQ2FsbCkKK3N0YXRpYyBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUs
IGJvb2wmIG9rKQogewotICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDIpIHsKLSAgICAgICAgVjhQ
cm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFu
ZGxlZEJ5SW50ZXJjZXB0b3IoKTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQotICAgICAgICBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pihhcmdz
LkhvbGRlcigpKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBWOFdlYkdMUHJvZ3JhbTo6
SGFzSW5zdGFuY2UoYXJnc1swXSkgPyB2OERPTVdyYXBwZXJUbzxXZWJHTFByb2dyYW0+KFY4Q2xh
c3NJbmRleDo6V0VCR0xQUk9HUkFNLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3Nb
MF0pKSA6IDA7Ci0gICAgYm9vbCBvazsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IHRvSW50MzIoYXJn
c1sxXSwgb2spOwotICAgIGlmICghb2spIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKLSAgICB9Ci0gICAgV2ViR0xHZXRJbmZvIGluZm87Ci0gICAgc3dpdGNoIChwcm9ncmFtQ2Fs
bCkgewotICAgIGNhc2Uga1Byb2dyYW1QYXJhbWV0ZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0
LT5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2Uga1VuaWZvcm06Ci0gICAgICAgIC8vIHBuYW1lIC0+IGxvY2F0aW9uCi0gICAg
ICAgIGluZm8gPSBjb250ZXh0LT5nZXRVbmlmb3JtKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZWMpIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKGVjKTsKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRvVjgoaW5mbyk7CisJb2sgPSBmYWxzZTsKKwlXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24gPSBOVUxMOworICAgIGlmIChWOFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpIYXNJ
bnN0YW5jZSh2YWx1ZSkpIHsKKwkJbG9jYXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4oCisJCQlWOENsYXNzSW5kZXg6OldFQkdM
VU5JRk9STUxPQ0FUSU9OLCB2YWx1ZS0+VG9PYmplY3QoKSk7CisJCW9rID0gdHJ1ZTsKKwl9CisJ
cmV0dXJuIGxvY2F0aW9uOwogfQogCitlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgeworICAgIGtQcm9n
cmFtUGFyYW1ldGVyLCBrVW5pZm9ybQorfTsKIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEdldEJ1ZmZlclBhcmFtZXRlcikKIHsKQEAgLTM3NSw3ICszNTAsMjggQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dAogQ0FMTEJBQ0tfRlVOQ19E
RUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dEdldFByb2dyYW1QYXJhbWV0ZXIpCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uV2ViR0xSZW5kZXJpbmdDb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIoKSIp
OwotICAgIHJldHVybiBnZXRQcm9ncmFtUGFyYW1ldGVyKGFyZ3MsIGtQcm9ncmFtUGFyYW1ldGVy
KTsKKworCWlmIChhcmdzLkxlbmd0aCgpICE9IDIpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdDb250ZXh0PihhcmdzLkhvbGRlcigpKTsK
KyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBWOFdlYkdMUHJvZ3JhbTo6SGFzSW5zdGFuY2Uo
YXJnc1swXSkgPyB2OERPTVdyYXBwZXJUbzxXZWJHTFByb2dyYW0+KFY4Q2xhc3NJbmRleDo6V0VC
R0xQUk9HUkFNLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDA7Cisg
ICAgYm9vbCBvazsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IHRvSW50MzIoYXJnc1sxXSwgb2spOwor
ICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9F
UlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9Cisg
ICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LT5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dy
YW0sIHBuYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4
Y2VwdGlvbihlYyk7CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgfQorICAg
IHJldHVybiB0b1Y4KGluZm8pOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woV2ViR0xSZW5kZXJp
bmdDb250ZXh0R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKQpAQCAtNDIwLDcgKzQxNiwzMCBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woV2ViR0xSZW5kZXJpbmdDb250ZXh0CiBDQUxMQkFDS19GVU5DX0RF
Q0woV2ViR0xSZW5kZXJpbmdDb250ZXh0R2V0VW5pZm9ybSkKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5XZWJHTFJlbmRlcmluZ0NvbnRleHQuZ2V0VW5pZm9ybSgpIik7Ci0gICAgcmV0dXJuIGdldFBy
b2dyYW1QYXJhbWV0ZXIoYXJncywga1VuaWZvcm0pOworCisJaWYgKGFyZ3MuTGVuZ3RoKCkgIT0g
MikgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAg
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9Cisg
ICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJHTFJlbmRl
cmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9
IFY4V2ViR0xQcm9ncmFtOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IHY4RE9NV3JhcHBlclRvPFdl
YkdMUHJvZ3JhbT4oVjhDbGFzc0luZGV4OjpXRUJHTFBST0dSQU0sIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoYXJnc1swXSkpIDogMDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGFy
Z3NbMV0sIG9rKTsKKworICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0
b3IoKTsKKyAgICB9CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LT5nZXRVbmlmb3Jt
KHByb2dyYW0sIGxvY2F0aW9uLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cisg
ICAgfQorICAgIHJldHVybiB0b1Y4KGluZm8pOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woV2Vi
R0xSZW5kZXJpbmdDb250ZXh0R2V0VmVydGV4QXR0cmliKQpAQCAtNTYwLDM1ICs1NzksNTcgQEAg
ZW51bSBGdW5jdGlvblRvQ2FsbCB7CiAgICAga1ZlcnRleEF0dHJpYjF2LCBrVmVydGV4QXR0cmli
MnYsIGtWZXJ0ZXhBdHRyaWIzdiwga1ZlcnRleEF0dHJpYjR2CiB9OwogCitib29sIElzRnVuY3Rp
b25Ub0NhbGxGb3JBdHRyaWJ1dGUoRnVuY3Rpb25Ub0NhbGwgZnVuY3Rpb25Ub0NhbGwpIHsKKwlz
d2l0Y2ggKGZ1bmN0aW9uVG9DYWxsKSB7CisJCWNhc2Uga1ZlcnRleEF0dHJpYjF2OgorCQljYXNl
IGtWZXJ0ZXhBdHRyaWIydjoKKwkJY2FzZSBrVmVydGV4QXR0cmliM3Y6CisJCWNhc2Uga1ZlcnRl
eEF0dHJpYjR2OgorCQkJcmV0dXJuIHRydWU7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisJ
cmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZlcnRleEF0
dHJpYkFuZFVuaWZvcm1IZWxwZXJmKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0
aW9uVG9DYWxsIGZ1bmN0aW9uVG9DYWxsKSB7CiAgICAgLy8gRm9ybXM6Ci0gICAgLy8gKiBnbFVu
aWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3Jt
MWZ2KEdMaW50IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVu
aWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3Jt
MmZ2KEdMaW50IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVu
aWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3Jt
M2Z2KEdMaW50IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVu
aWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3Jt
NGZ2KEdMaW50IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZl
cnRleEF0dHJpYjFmdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZl
cnRleEF0dHJpYjFmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwotICAg
IC8vICogZ2xWZXJ0ZXhBdHRyaWIyZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAg
IC8vICogZ2xWZXJ0ZXhBdHRyaWIyZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliM2Z2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliM2Z2KEdMaW50IGxvY2F0aW9uLCBXZWJHTEZs
b2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZlcnRleEF0dHJpYjRmdihHTGludCBsb2NhdGlv
biwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZlcnRleEF0dHJpYjRmdihHTGludCBsb2NhdGlv
biwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMWZ2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTFm
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwor
ICAgIC8vICogZ2xVbmlmb3JtMmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBBcnJh
eSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2Nh
dGlvbiwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtM2Z2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9y
bTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5IGRhdGEp
OworICAgIC8vICogZ2xVbmlmb3JtNGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTRmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIx
ZnYoR0xpbnQgaW5kZXgsIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYo
R0xpbnQgaW5kZXgsIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0
cmliMmZ2KEdMaW50IGluZGV4LCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmli
MmZ2KEdMaW50IGluZGV4LCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRl
eEF0dHJpYjNmdihHTGludCBpbmRleCwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRleEF0
dHJpYjNmdihHTGludCBpbmRleCwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xW
ZXJ0ZXhBdHRyaWI0ZnYoR0xpbnQgaW5kZXgsIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0
ZXhBdHRyaWI0ZnYoR0xpbnQgaW5kZXgsIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKIAogICAgIGlm
IChhcmdzLkxlbmd0aCgpICE9IDMpIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
ICAgICB9CiAKKwlib29sIG9rID0gZmFsc2U7CisJaW50IGluZGV4ID0gLTE7CisJV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uID0gTlVMTDsKKworCWlmIChJc0Z1bmN0aW9uVG9DYWxsRm9y
QXR0cmlidXRlKGZ1bmN0aW9uVG9DYWxsKSkgeworICAgICAgICBpbmRleCA9IHRvSW50MzIoYXJn
c1swXSwgb2spOworCX0gZWxzZSB7CisJCWxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlv
bihhcmdzWzBdLCBvayk7CisJfQorCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
ID0KICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdM
UmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgYm9vbCBvazsKLSAgICBpbnQg
bG9jYXRpb24gPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKwogICAgIGlmICghb2spIHsKICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4g
bm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKQEAgLTYwMiwxMCArNjQzLDEwIEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmVydGV4QXR0cmkKICAgICAgICAgICAgIGNhc2Uga1VuaWZv
cm0ydjogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKICAgICAg
ICAgICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJy
YXkpOyBicmVhazsKICAgICAgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9y
bTRmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0
dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmli
MmZ2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBrVmVydGV4QXR0
cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsK
LSAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0
ZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRy
aWIxdjogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7IGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihp
bmRleCwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBj
b250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBh
cnJheSk7IGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC02
MjksMTAgKzY3MCwxMCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZlcnRleEF0dHJp
CiAgICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwg
ZGF0YSwgbGVuKTsgYnJlYWs7CiAgICAgICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5p
Zm9ybTNmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CiAgICAgICAgIGNhc2Uga1VuaWZv
cm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9j
YXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOwotICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjog
Y29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKLSAg
ICAgICAgY2FzZSBrVmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2Nh
dGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBj
b250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAg
ICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZGV4
LCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6IGNvbnRl
eHQtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNh
c2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGRhdGEs
IGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVy
dGV4QXR0cmliNGZ2KGluZGV4LCBkYXRhLCBsZW4pOyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
QVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOwogICAgIH0KICAgICBmYXN0RnJlZShkYXRhKTsK
QEAgLTY0MiwxNCArNjgzLDE0IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmVydGV4
QXR0cmkKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5pZm9ybUhlbHBlcmkoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRnVuY3Rpb25Ub0NhbGwgZnVuY3Rpb25Ub0NhbGwpIHsKICAgICAvLyBGb3JtczoK
LSAgICAvLyAqIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAg
Ly8gKiBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7Ci0g
ICAgLy8gKiBnbFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8v
ICogZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOwotICAg
IC8vICogZ2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAq
IGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSBkYXRhKTsKLSAgICAv
LyAqIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBn
bFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CisgICAgLy8g
KiBnbFVuaWZvcm0xaXYoR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEFycmF5IGRhdGEpOwor
ICAgIC8vICogZ2xVbmlmb3JtMWl2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBXZWJHTElu
dEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMml2KEdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJpdihHTFVuaWZvcm1Mb2Nh
dGlvbiBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNp
dihHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVu
aWZvcm0zaXYoR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7
CisgICAgLy8gKiBnbFVuaWZvcm00aXYoR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEFycmF5
IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtNGl2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9u
LCBXZWJHTEludEFycmF5IGRhdGEpOwogCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgewog
ICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CkBAIC02NTgsOCAr
Njk5LDkgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bmlmb3JtSGVscAogCiAgICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KICAgICAgICAgVjhET01XcmFwcGVyOjpj
b252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xk
ZXIoKSk7Ci0gICAgYm9vbCBvazsKLSAgICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3NbMF0s
IG9rKTsKKyAgICBib29sIG9rID0gZmFsc2U7CisJV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzWzBdLCBvayk7CisKICAgICBpZiAoIW9r
KSB7CiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKICAgICAg
ICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkBAIC03NjksOCArODExLDEwIEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5pZm9ybU1hdHIKIAogICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCA9CiAgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERP
TVdyYXBwZXJUb05hdGl2ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOwot
ICAgIGJvb2wgb2s7Ci0gICAgaW50IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisK
KyAgICBib29sIG9rID0gZmFsc2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
ID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzWzBdLCBvayk7CisgICAgCiAgICAgaWYgKCFv
aykgewogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CiAgICAg
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTE3OTkpCisr
KyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKICNpbmNs
dWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgorI2lu
Y2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIK
ICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKQEAgLTExNDcsMTMgKzExNDgsMTUgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0VAogICAgIH0KIH0KIAotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIEV4
Y2VwdGlvbkNvZGUmIGVjKQorV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcHJvZ3Jh
bSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgIGlmICghcHJvZ3JhbSB8fCB1
bmlmb3JtTG9jYXRpb24tPnByb2dyYW0oKSAhPSBwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQo
KSAhPSB0aGlzKSB7CiAgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX1ZBTFVFIGVy
cm9yCiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CiAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKICAgICB9CisgICAgbG9uZyBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlvbi0+
bG9jYXRpb24oKTsKKyAgICAKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwog
ICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQgdXNpbmcgV2ViR0xVbmlmb3Jt
TG9jYXRpb24gYW5kIGNhY2hpbmcgdHlwZXMgaW4gaXQKICAgICBpbnQgYWN0aXZlVW5pZm9ybXMg
PSAwOwpAQCAtMTI3NSwxMyArMTI3OCwxNCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRVCiAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogfQogCi1sb25nIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8V2Vi
R0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRo
aXMpIHsKICAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQotICAgIHJldHVybiBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
LCBuYW1lKTsKKyAgICBSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IGxvY2F0aW9uID0gV2Vi
R0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShwcm9ncmFtLCBtX2NvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLCBuYW1lKSk7CisgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCiBXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIodW5zaWduZWQg
bG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0x
NjQ2LDE0ICsxNjUwLDI0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFn
ZTIKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCkKIHsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2Nh
dGlvbiwgeCk7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BF
UkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
ZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBXZWJHTEZsb2F0QXJyYXkqIHYpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNl
IEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAg
ICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CkBAIC0xNjYyLDggKzE2NzYsMTMgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYobAogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgZmxvYXQqIHYsIGludCBzaXplKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlz
ZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgog
ICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwpAQCAtMTY3MiwxNCArMTY5MSwyNCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihsCiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0xaShsb25nIGxvY2F0aW9uLCBpbnQgeCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCkKIHsK
LSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbiwgeCk7CisgICAgaWYgKCFsb2NhdGlv
biB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAg
Ly8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRpb24tPmxvY2F0
aW9uKCksIHgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIFdlYkdM
SW50QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpCiB7Cisg
ICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dy
YW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9y
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8g
dGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47
CkBAIC0xNjg4LDggKzE3MTcsMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0xaXYobAogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwg
aW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCiB7CisgICAg
aWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhy
b3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CkBA
IC0xNjk4LDIzNyArMTczMiwzNTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0xaXYobAogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwg
ZmxvYXQgeSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJmKGxvY2F0aW9uLCB4LCB5KTsKKyAgICBpZiAoIWxvY2F0aW9uIHx8
IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBG
SVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xG
bG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpCiB7
CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVy
cm9yCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQg
dG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiAyCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpIC8gMik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJh
aXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGlu
CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
MmZ2KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHkpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgs
IGludCB5KQogewotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKKyAg
ICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShs
b2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYobG9u
ZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xJ
bnRBcnJheSogdikKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkg
IT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJ
RF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBG
SVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYp
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24s
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQogeworICAgIGlmICghbG9jYXRpb24g
fHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8v
IEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5
IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1fY29udGV4
dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDIpOworICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDIpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQogewotICAgIG1fY29u
dGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKKyAgICBpZiAoIWxvY2F0aW9uIHx8
IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBG
SVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgeCwgeSwgeik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgV2Vi
R0xGbG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYp
CiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVu
dFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9O
IGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5l
ZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiAzCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpIC8gMyk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6
IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2Vk
IGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCi0gICAgbV9jb250ZXh0LT51bmlm
b3JtM2Z2KGxvY2F0aW9uLCB2LCBzaXplIC8gMyk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMyk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0zaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6KQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIGludCB4LCBpbnQgeSwgaW50IHopCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9j
YXRpb24sIHgsIHksIHopOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0o
KSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZB
TElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1f
Y29udGV4dC0+dW5pZm9ybTNpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQogeworICAgIGlmICghbG9jYXRpb24g
fHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8v
IEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5
IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1fY29udGV4
dC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOworICAg
IG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24s
IGludCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUp
CiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVu
dFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9O
IGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5l
ZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiAzCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB2LCBzaXplIC8g
Myk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBz
aXplIC8gMyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYo
bG9jYXRpb24sIHgsIHksIHosIHcpOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnBy
b2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBH
TF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihsb25nIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJy
YXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSogdikKIHsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJv
dyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQK
LSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3Ro
KCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihs
b25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZs
b2F0KiB2LCBpbnQgc2l6ZSkKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xf
SU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAg
ICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBp
ZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBu
ZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9j
YXRpb24sIHYsIHNpemUgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHYsIHNpemUgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGxvbmcg
bG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KQogewotICAgIG1fY29udGV4dC0+dW5pZm9ybTRp
KGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5w
cm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2Ug
R0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwg
dyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJh
eSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdikKIHsKKyAgICBpZiAo
IWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewor
ICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBp
ZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkg
LyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
PmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihsb25n
IGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAh
PSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElE
X09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIEZJ
WE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwg
diwgc2l6ZSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGxvbmcg
bG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYpCiB7Cisg
ICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dy
YW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9y
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8g
dGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiA0Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2Us
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5n
dGgoKSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUpCiB7CisgICAgaWYgKCFs
b2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAg
ICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYg
bm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUg
LyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4
M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkq
IHYpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3Vy
cmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFU
SU9OIGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA5Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA5KTsKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
LCB2LT5sZW5ndGgoKSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGxvbmcg
bG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUpCiB7Cisg
ICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dy
YW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9y
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8g
dGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiA5Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2Us
IHYsIHNpemUgLyA5KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJy
YXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZs
b2F0QXJyYXkqIHYpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFM
SURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2
KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAxNgotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihs
b2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMTYpOworICAgIG1f
Y29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3Nl
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0
cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50
IHNpemUpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BF
UkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6
IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiAxNgotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlv
biwgdHJhbnNwb3NlLCB2LCBzaXplIC8gMTYpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gMTYpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNTE3OTkpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCiAjaW5jbHVkZSAi
V2ViR0xJbnRBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKKyNp
bmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIApAQCAtMTU3LDkgKzE1OCw5IEBA
IGNsYXNzIFdlYktpdENTU01hdHJpeDsKIAogICAgICAgICBXZWJHTEdldEluZm8gZ2V0VGV4UGFy
YW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7CiAKLSAgICAgICAgV2ViR0xHZXRJbmZvIGdldFVuaWZvcm0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIFdl
YkdMR2V0SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAKLSAgICAgICAg
bG9uZyBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRp
b24+IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAogICAgICAgICBXZWJHTEdldEluZm8gZ2V0VmVydGV4QXR0
cmliKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKIApAQCAtMjI0LDM2ICsyMjUsMzYgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwg
SFRNTFZpZGVvRWxlbWVudCogdmlkZW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAg
ICB2b2lkIHVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4KTsKLSAgICAgICAgdm9pZCB1
bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSogdik7Ci0gICAgICAgIHZv
aWQgdW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOwotICAgICAg
ICB2b2lkIHVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgeCk7Ci0gICAgICAgIHZvaWQgdW5p
Zm9ybTFpdihsb25nIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KTsKLSAgICAgICAgdm9pZCB1
bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpOwotICAgICAgICB2b2lk
IHVuaWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9p
ZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSogdik7Ci0gICAgICAg
IHZvaWQgdW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOwotICAg
ICAgICB2b2lkIHVuaWZvcm0yaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHkpOwotICAgICAg
ICB2b2lkIHVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7Ci0gICAg
ICAgIHZvaWQgdW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBXZWJHTEZsb2F0
QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQq
IHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50
IHgsIGludCB5LCBpbnQgeik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9u
LCBXZWJHTEludEFycmF5KiB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtM2l2KGxvbmcgbG9jYXRp
b24sIGludCogdiwgaW50IHNpemUpOwotICAgICAgICB2b2lkIHVuaWZvcm00Zihsb25nIGxvY2F0
aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKLSAgICAgICAgdm9pZCB1
bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSogdik7Ci0gICAgICAgIHZv
aWQgdW5pZm9ybTRmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOwotICAgICAg
ICB2b2lkIHVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQg
dyk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBXZWJHTEludEFycmF5
KiB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50
IHNpemUpOwotICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9v
bCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUpOwotICAgICAgICB2b2lkIHVuaWZv
cm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwg
aW50IHNpemUpOwotICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUpOwotICAgICAgICB2b2lkIHVu
aWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1
ZSwgaW50IHNpemUpOwotICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUpOwotICAgICAgICB2b2lk
IHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2
YWx1ZSwgaW50IHNpemUpOworICAgICAgICB2b2lkIHVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgpOworICAgICAgICB2b2lkIHVuaWZvcm0xZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYp
OworICAgICAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOworICAgICAgICB2b2lkIHVuaWZvcm0xaShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCB4KTsKKyAgICAgICAgdm9pZCB1
bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xJbnRB
cnJheSogdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpOworICAgICAgICB2b2lkIHVuaWZvcm0y
Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHkp
OworICAgICAgICB2b2lkIHVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOworICAgICAgICB2b2lkIHVuaWZvcm0yZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOwor
ICAgICAgICB2b2lkIHVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIGludCB4LCBpbnQgeSk7CisgICAgICAgIHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpOworICAgICAgICB2b2lk
IHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xG
bG9hdEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKKyAgICAgICAgdm9pZCB1
bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50
IHksIGludCB6KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7CisgICAgICAgIHZvaWQgdW5pZm9y
bTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNp
emUpOworICAgICAgICB2b2lkIHVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgICAgICB2
b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJH
TEZsb2F0QXJyYXkqIHYpOworICAgICAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOworICAgICAgICB2b2lk
IHVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCB4LCBp
bnQgeSwgaW50IHosIGludCB3KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7CisgICAgICAgIHZv
aWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCog
diwgaW50IHNpemUpOworICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgV2ViR0xGbG9hdEFycmF5
KiB2YWx1ZSk7CisgICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBz
aXplKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUp
OworICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSk7Cisg
ICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpOwogCiAgICAgICAg
IHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAg
IHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwJKHJl
dmlzaW9uIDUxNzk5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01NjcsMTAgKzU2NywxMCBAQCBtb2R1bGUgaHRtbCB7
CiAgICAgICAgIC8vIGFueSBnZXRUZXhQYXJhbWV0ZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQs
IGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBb
Q3VzdG9tXSB2b2lkIGdldFRleFBhcmFtZXRlcigpOwogCi0gICAgICAgIC8vIGFueSBnZXRVbmlm
b3JtKGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiBsb25nIGxvY2F0aW9uKSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgLy8gYW55IGdldFVuaWZvcm0oaW4gV2ViR0xQcm9ncmFtIHBy
b2dyYW0sIGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uKSByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBnZXRVbmlmb3JtKCk7Ci0gICAgICAgIAotICAg
ICAgICBsb25nIGdldFVuaWZvcm1Mb2NhdGlvbihpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSwgaW4g
RE9NU3RyaW5nIG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOworCisgICAgICAgIFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSwg
aW4gRE9NU3RyaW5nIG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogCiAgICAgICAgIC8vIGFu
eSBnZXRWZXJ0ZXhBdHRyaWIoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gdW5zaWduZWQgbG9u
ZyBwbmFtZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgZ2V0
VmVydGV4QXR0cmliKCk7CkBAIC02MzgsMjYgKzYzOCwyNiBAQCBtb2R1bGUgaHRtbCB7CiAgICAg
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFtPcHRpb25hbF0gR0xib29sZWFuIGZsaXBZLCBb
T3B0aW9uYWxdIGluIHByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHRl
eFN1YkltYWdlMkQoKTsKIAotICAgICAgICB2b2lkIHVuaWZvcm0xZihpbiBsb25nIGxvY2F0aW9u
LCBpbiBmbG9hdCB4KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMWZ2KGluIGxvbmcg
bG9jYXRpb24sIGluIFdlYkdMRmxvYXRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMWko
aW4gbG9uZyBsb2NhdGlvbiwgaW4gbG9uZyB4KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlm
b3JtMWl2KGluIGxvbmcgbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkgdik7Ci0gICAgICAgIHZv
aWQgdW5pZm9ybTJmKGluIGxvbmcgbG9jYXRpb24sIGluIGZsb2F0IHgsIGluIGZsb2F0IHkpOwot
ICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0yZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2Vi
R0xGbG9hdEFycmF5IHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0yaShpbiBsb25nIGxvY2F0aW9u
LCBpbiBsb25nIHgsIGluIGxvbmcgeSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTJp
dihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwotICAgICAgICB2b2lkIHVu
aWZvcm0zZihpbiBsb25nIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9h
dCB6KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtM2Z2KGluIGxvbmcgbG9jYXRpb24s
IGluIFdlYkdMRmxvYXRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtM2koaW4gbG9uZyBs
b2NhdGlvbiwgaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgeik7Ci0gICAgICAgIFtDdXN0
b21dIHZvaWQgdW5pZm9ybTNpdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYp
OwotICAgICAgICB2b2lkIHVuaWZvcm00ZihpbiBsb25nIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBp
biBmbG9hdCB5LCBpbiBmbG9hdCB6LCBpbiBmbG9hdCB3KTsKLSAgICAgICAgW0N1c3RvbV0gdm9p
ZCB1bmlmb3JtNGZ2KGluIGxvbmcgbG9jYXRpb24sIGluIFdlYkdMRmxvYXRBcnJheSB2KTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtNGkoaW4gbG9uZyBsb2NhdGlvbiwgaW4gbG9uZyB4LCBpbiBsb25n
IHksIGluIGxvbmcgeiwgaW4gbG9uZyB3KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3Jt
NGl2KGluIGxvbmcgbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkgdik7Ci0KLSAgICAgICAgW0N1
c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGluIGxvbmcgbG9jYXRpb24sIGluIGJvb2xlYW4g
dHJhbnNwb3NlLCBpbiBXZWJHTEZsb2F0QXJyYXkgYXJyYXkpOwotICAgICAgICBbQ3VzdG9tXSB2
b2lkIHVuaWZvcm1NYXRyaXgzZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gYm9vbGVhbiB0cmFuc3Bv
c2UsIGluIFdlYkdMRmxvYXRBcnJheSBhcnJheSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5p
Zm9ybU1hdHJpeDRmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4g
V2ViR0xGbG9hdEFycmF5IGFycmF5KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWYoaW4gV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIGZsb2F0IHgpOworICAgICAgICBbQ3VzdG9tXSB2
b2lkIHVuaWZvcm0xZnYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdM
RmxvYXRBcnJheSB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWkoaW4gV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIGluIGxvbmcgeCk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9y
bTFpdihpbiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIGluIGZsb2F0IHgsIGluIGZsb2F0IHkpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZv
cm0yZnYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMRmxvYXRBcnJh
eSB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmkoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9j
YXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlm
b3JtMml2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5
IHYpOworICAgICAgICB2b2lkIHVuaWZvcm0zZihpbiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2Nh
dGlvbiwgaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeik7CisgICAgICAgIFtDdXN0
b21dIHZvaWQgdW5pZm9ybTNmdihpbiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgaW4g
V2ViR0xGbG9hdEFycmF5IHYpOworICAgICAgICB2b2lkIHVuaWZvcm0zaShpbiBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgeik7Cisg
ICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTNpdihpbiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGYoaW4g
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGlu
IGZsb2F0IHosIGluIGZsb2F0IHcpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm00ZnYo
aW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMRmxvYXRBcnJheSB2KTsK
KyAgICAgICAgdm9pZCB1bmlmb3JtNGkoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHosIGluIGxvbmcgdyk7CisgICAgICAgIFtD
dXN0b21dIHZvaWQgdW5pZm9ybTRpdihpbiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwg
aW4gV2ViR0xJbnRBcnJheSB2KTsKKworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm1NYXRy
aXgyZnYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIGJvb2xlYW4gdHJhbnNw
b3NlLCBpbiBXZWJHTEZsb2F0QXJyYXkgYXJyYXkpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVu
aWZvcm1NYXRyaXgzZnYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIGJvb2xl
YW4gdHJhbnNwb3NlLCBpbiBXZWJHTEZsb2F0QXJyYXkgYXJyYXkpOworICAgICAgICBbQ3VzdG9t
XSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IGluIGJvb2xlYW4gdHJhbnNwb3NlLCBpbiBXZWJHTEZsb2F0QXJyYXkgYXJyYXkpOwogCiAgICAg
ICAgIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtKSByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgdm9pZCAgICAgICAgIHZhbGlkYXRlUHJvZ3JhbShp
biBXZWJHTFByb2dyYW0gcHJvZ3JhbSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgi
CisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKK1Bhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uOjpjcmVhdGUoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbG9j
YXRpb24pKTsKK30KKworV2ViR0xVbmlmb3JtTG9jYXRpb246OldlYkdMVW5pZm9ybUxvY2F0aW9u
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikKKyAgICA6IG1fcHJvZ3JhbShw
cm9ncmFtKQorICAgICwgbV9sb2NhdGlvbihsb2NhdGlvbikKK3sKK30KKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKDNEX0NBTlZBUykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmV4ZWN1
dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2Nh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9j
YXRpb24uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3Jt
TG9jYXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgV2ViR0xVbmlmb3JtTG9jYXRpb25faAorI2RlZmluZSBXZWJHTFVuaWZvcm1Mb2NhdGlvbl9o
CisKKyNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIK
KworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisJY2xhc3MgV2ViR0xVbmlmb3JtTG9jYXRpb24g
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4geworICAgIHB1YmxpYzoK
KwkJdmlydHVhbCB+V2ViR0xVbmlmb3JtTG9jYXRpb24oKSB7IH0KKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBjcmVhdGUoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKTsKKworCQlXZWJHTFByb2dyYW0qIHByb2dyYW0o
KSBjb25zdCB7IHJldHVybiBtX3Byb2dyYW0uZ2V0KCk7IH0KKworCQlsb25nIGxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24p
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4gbV9wcm9ncmFt
OworCQlsb25nIG1fbG9jYXRpb247CisgICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFdlYkdMVW5pZm9ybUxvY2F0aW9uX2gKClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFtDb25kaXRpb25h
bD0zRF9DQU5WQVNdIFdlYkdMVW5pZm9ybUxvY2F0aW9uIHsKKyAgICB9OworfQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCg==
</data>
<flag name="review"
          id="26311"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44487</attachid>
            <date>2009-12-08 14:20:30 -0800</date>
            <delta_ts>2009-12-08 17:30:06 -0800</delta_ts>
            <desc>The WebGLUniformLocation change from before plus some style fixes.</desc>
            <filename>uniformlocationpatch.txt</filename>
            <type>text/plain</type>
            <size>71387</size>
            <attacher name="Peterson Trethewey">petersont</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTg3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjkgQEAKKzIwMDktMTItMDggIFBldGVyc29uIFRyZXRoZXdleSAgPHBldGVyc29u
dEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBhbmQgY2hhbmdlIEFQSSB0byB1
c2UgaXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MTE3MworCisgICAgICAgIE5vIG5ldyB0ZXN0czogdGVzdHMgd2hpY2ggY2FsbCBnZXRVbmlmb3Jt
TG9jYXRpb24gYWxyZWFkeSBleGlzdC4gIFRoYXQgZnVuY3Rpb24gcmV0dXJucyBhCisgICAgICAg
IFdlYkdMVW5pZm9ybUxvY2F0aW9uIG5vdyBpbnN0ZWFkIG9mIGFuIGludGVnZXIsIGJ1dCB0aGUg
d2F5IHRoZSBBUEkgZ2V0cyB1c2VkIGhhc24ndAorICAgICAgICBjaGFuZ2VkLgorCisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OmZ1bmN0aW9uRm9yVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhRnVu
Y3Rpb25mKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbmkpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YUZ1bmN0aW9uTWF0cml4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0Fs
bEluT25lLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvV2Vi
R0xVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNv
cmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3JlOjppc0Z1bmN0aW9uVG9D
YWxsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRleEF0dHJpYkFuZFVuaWZv
cm1IZWxwZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OnVuaWZvcm1IZWxwZXJpKToKKyAgICAgICAg
KFdlYkNvcmU6OnVuaWZvcm1NYXRyaXhIZWxwZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTNmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
dik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGYpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdik6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFVuaWZvcm1Mb2NhdGlvbjo6V2ViR0xVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xVbmlmb3JtTG9jYXRpb246On5XZWJHTFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6cHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6bG9jYXRpb24pOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbDogQWRkZWQuCisKIDIwMDktMTItMDggIEFkYW0gTGFu
Z2xleSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xh
emtvdi4KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDUxNzk5KQorKysgV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBAIERPTV9D
TEFTU0VTID0gXAogICAgIFdlYkdMU2hhZGVyIFwKICAgICBXZWJHTFNob3J0QXJyYXkgXAogICAg
IFdlYkdMVGV4dHVyZSBcCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24gXAogICAgIFdlYkdMVW5z
aWduZWRCeXRlQXJyYXkgXAogICAgIFdlYkdMVW5zaWduZWRJbnRBcnJheSBcCiAgICAgV2ViR0xV
bnNpZ25lZFNob3J0QXJyYXkgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDUxNzk5KQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDcgQEAKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsJywKICAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9XZWJHTFNoYWRlci5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dl
YkdMU2hvcnRBcnJheS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5pZm9y
bUxvY2F0aW9uLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRB
cnJheS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFy
cmF5LmlkbCcsCkBAIC0xMzI0LDYgKzEzMjUsOCBAQAogICAgICAgICAgICAgJ2h0bWwvY2FudmFz
L0NhbnZhc1N0eWxlLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5j
cHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAnLAorICAgICAgICAgICAg
J2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwJywKICAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDUxNzk5KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYs
MTEgQEAKIAkJMEI5MDU2RjgwRjI2ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2Fk
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI5
MDU2RjYwRjI2ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwICovOyB9
OwogCQkwQjkwNTZGOTBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI5MDU2Rjcw
RjI2ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyog
UmVuZGVyTGluZUJveExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBCRTAzMEExMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlzdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBDM0Yx
RjVBMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzNGMUY1NzEwQzg4NzEyMDBE
NzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovOyB9OworCQkwQzNGMUY1QjEwQzg4
NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDM0YxRjU4MTBDODg3MTIwMEQ3MkNFMSAvKiBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovOyB9OworCQkwQzNGMUY1QzEwQzg4NzEyMDBENzJDRTEg
LyogV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwQzNGMUY1OTEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xVbmlm
b3JtTG9jYXRpb24uaWRsICovOyB9OworCQkwQzQ1MzQyNzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1M
b2NhdGlvbi5jcHAgKi87IH07CisJCTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdM
VW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlv
bi5oICovOyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9u
SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
MUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgfTsKIAkJ
MEYxNURBOEEwRjNBQUVFNzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1REE4OTBG
M0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLzsgfTsKIAkJ
MEY1MDBBQUYwRjU0REIxQjAwRUVGOTI4IC8qIFRyYW5zZm9ybVN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUwMEFBRTBGNTREQjFCMDBFRUY5
MjggLyogVHJhbnNmb3JtU3RhdGUuaCAqLzsgfTsKQEAgLTUzNTAsNiArNTM1NSwxMSBAQAogCQkw
QjkwNTZGNjBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEI5MDU2RjcwRjI2ODVGMzAwOTVG
RjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwQkUwMzBBMTBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGluZUJveExpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEMzRjFGNTcxMEM4ODcxMjAwRDcyQ0UxIC8qIFdl
YkdMVW5pZm9ybUxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuaWZvcm1M
b2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBDM0YxRjU4MTBDODg3
MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBwYXRoID0gY2FudmFzL1dlYkdM
VW5pZm9ybUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBDM0YxRjU5
MTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsOyBwYXRoID0gY2FudmFzL1dlYkdM
VW5pZm9ybUxvY2F0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEM0NTM0
MjUxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAv
KiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0aW9uSW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyogQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDsgcGF0aCA9IGFuaW1hdGlvbi9BbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUw
MEFBRTBGNTREQjFCMDBFRUY5MjggLyogVHJhbnNmb3JtU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNmb3JtU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEwNzM3LDYgKzEwNzQ3LDkgQEAKIAkJCQk0OUM3QjlDNTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xUZXh0dXJlLmNwcCAqLywKIAkJCQk0OUM3QjlDNjEwNDJEMzJGMDAwOUQ0NDcg
LyogV2ViR0xUZXh0dXJlLmggKi8sCiAJCQkJNDlDN0I5QzcxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMVGV4dHVyZS5pZGwgKi8sCisJCQkJMEMzRjFGNTcxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdM
VW5pZm9ybUxvY2F0aW9uLmNwcCAqLywKKwkJCQkwQzNGMUY1ODEwQzg4NzEyMDBENzJDRTEgLyog
V2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLywKKwkJCQkwQzNGMUY1OTEwQzg4NzEyMDBENzJDRTEg
LyogV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsICovLAogCQkJCTQ5RUVDREQ2MTA1MDNDMjMwMDA5
OUZBQiAvKiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCAqLywKIAkJCQk0OUVFQ0RENzEwNTAz
QzIzMDAwOTlGQUIgLyogV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oICovLAogCQkJCTQ5RUVDREQ4
MTA1MDNDMjMwMDA5OUZBQiAvKiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbCAqLywKQEAgLTEy
ODk2LDYgKzEyOTA5LDggQEAKIAkJCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNXZWJH
TFNob3J0QXJyYXkuaCAqLywKIAkJCQk0OUM3Qjk5MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TFRleHR1cmUuY3BwICovLAogCQkJCTQ5QzdCOTkyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
VGV4dHVyZS5oICovLAorCQkJCTBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmNwcCAqLywKKwkJCQkwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovLAogCQkJCTQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwICovLAogCQkJCTQ5RUVDRUZCMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCAqLywKIAkJCQk0OUVFQ0VGQzEw
NTA3MEM0MDAwOTlGQUIgLyogSlNXZWJHTFVuc2lnbmVkSW50QXJyYXkuY3BwICovLApAQCAtMTgy
MjUsNiArMTgyNDAsOCBAQAogCQkJCTdBMEU3NzFGMTBDMDBEQjEwMEEwMjc2RSAvKiBKU0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjRFQUY0QUYxMEM3NDJCMTAw
OTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTlEMUUz
MzEwQzk3RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEMzRjFGNUIxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwQzQ1MzQyODEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVu
aWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODMyNiw2ICsxODM0Myw3IEBACiAJ
CQkJMUFCMUFFN0EwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgaW4gUmVzb3Vy
Y2VzICovLAogCQkJCTFBQjFBRTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBu
ZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJNTE3NEUyMEMxMEExRjQ5QTAwRjk1RTZGIC8qIFBvcFN0
YXRlRXZlbnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkwQzNGMUY1QzEwQzg4NzEyMDBENzJD
RTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMzc5
LDYgKzIwMzk3LDggQEAKIAkJCQk3QTBFNzcxRTEwQzAwREIxMDBBMDI3NkUgLyogSlNJbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjRFQUY0QUUxMEM3NDJCMTAw
OTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5OUQx
RTMyMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBDM0YxRjVBMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwQzQ1MzQyNzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShy
ZXZpc2lvbiA1MTc5OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVk
ZSAiSlNXZWJHTFJlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTV2ViR0xTaGFkZXIuaCIKICNp
bmNsdWRlICJKU1dlYkdMVGV4dHVyZS5oIgorI2luY2x1ZGUgIkpTV2ViR0xVbmlmb3JtTG9jYXRp
b24uaCIKICNpbmNsdWRlICJKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJK
U1dlYktpdENTU01hdHJpeC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0xODcs
MzcgKzE4OCw2IEBAIGVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7CiAgICAga1Byb2dyYW1QYXJhbWV0
ZXIsIGtVbmlmb3JtCiB9OwogCi1zdGF0aWMgSlNWYWx1ZSBnZXRQcm9ncmFtUGFyYW1ldGVySGVs
cGVyKEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBvYmosIEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncywgV2hpY2hQcm9ncmFtQ2FsbCBwcm9ncmFtQ2FsbCkKLXsKLSAgICBpZiAo
YXJncy5zaXplKCkgIT0gMikKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4
RXJyb3IpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4ob2Jq
LT5pbXBsKCkpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IHRvV2ViR0xQcm9ncmFtKGFy
Z3MuYXQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm87Ci0gICAgc3dpdGNoIChwcm9ncmFtQ2FsbCkg
ewotICAgIGNhc2Uga1Byb2dyYW1QYXJhbWV0ZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LT5n
ZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Uga1VuaWZvcm06Ci0gICAgICAgIC8vIHBuYW1lIC0+IGxvY2F0aW9uCi0gICAgICAg
IGluZm8gPSBjb250ZXh0LT5nZXRVbmlmb3JtKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVy
biB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCiBKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIo
dGhpcywgZXhlYywgYXJncywga0J1ZmZlcik7CkBAIC0yNjcsNyArMjM3LDIxIEBAIEpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmEKIAogSlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGdldFByb2dyYW1QYXJhbWV0ZXJIZWxwZXIodGhp
cywgZXhlYywgYXJncywga1Byb2dyYW1QYXJhbWV0ZXIpOworICAgIGlmIChhcmdzLnNpemUoKSAh
PSAyKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CisKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpOworICAgIFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSA9IHRvV2ViR0xQcm9ncmFtKGFyZ3MuYXQoMCkpOworICAgIHVu
c2lnbmVkIHBuYW1lID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xH
ZXRJbmZvIGluZm8gPSBjb250ZXh0LT5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1l
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCkBAIC0zMDEsNyArMjg1LDIxIEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFRleFAKIAogSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
cmV0dXJuIGdldFByb2dyYW1QYXJhbWV0ZXJIZWxwZXIodGhpcywgZXhlYywgYXJncywga1VuaWZv
cm0pOworICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvcik7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihpbXBsKCkpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IHRvV2ViR0xQ
cm9ncmFtKGFyZ3MuYXQoMCkpOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2MgPSB0b1dl
YkdMVW5pZm9ybUxvY2F0aW9uKGFyZ3MuYXQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGlu
Zm8gPSBjb250ZXh0LT5nZXRVbmlmb3JtKHByb2dyYW0sIGxvYywgZWMpOworICAgIGlmIChlYykg
eworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IGluZm8pOwogfQogCiBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhB
dHRyaWIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpAQCAtNDYzLDEzICs0
NjEsMzQgQEAgZW51bSBEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgewogICAgIGZfdW5pZm9ybU1h
dHJpeDJmdiwgZl91bmlmb3JtTWF0cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0ZnYKIH07CiAKK2Jv
b2wgZnVuY3Rpb25Gb3JVbmlmb3JtKERhdGFGdW5jdGlvblRvQ2FsbCBmKQoreworICAgIHN3aXRj
aCAoZikgeworICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAg
ICBjYXNlIGZfdW5pZm9ybTN2OgorICAgIGNhc2UgZl91bmlmb3JtNHY6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0
YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xp
c3QmIGFyZ3MsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAgICBpZiAoYXJn
cy5zaXplKCkgIT0gMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IpOworICAgIAorICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7CisgICAg
bG9uZyBpbmRleCA9IC0xOworICAgIAorICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpCisg
ICAgICAgIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzLmF0KDApKTsKKyAg
ICBlbHNlCisgICAgICAgIGluZGV4ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOwogCi0gICAg
bG9uZyBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpICAgIAorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAogICAgIFJlZlB0cjxXZWJHTEZsb2F0
QXJyYXk+IHdlYkdMQXJyYXkgPSB0b1dlYkdMRmxvYXRBcnJheShhcmdzLmF0KDEpKTsKQEAgLTQ4
MiwxMCArNTAxLDEwIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnUK
ICAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKICAgICAgICAgICAgIGNhc2UgZl91bmlmb3Jt
M3Y6IGNvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVh
azsKICAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZl92ZXJ0
ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5
LmdldCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6IGNvbnRl
eHQtPnZlcnRleEF0dHJpYjJmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIz
ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Zl92ZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGxvY2F0aW9uLCB3ZWJH
TEFycmF5LmdldCgpKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6
IGNvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRy
aWIyZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Zl92ZXJ0ZXhBdHRyaWIzdjogY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFy
cmF5LmdldCgpKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6IGNv
bnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KQEAgLTUwMiwx
MCArNTIxLDEwIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnUKICAg
ICAgICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgYXJy
YXksIHNpemUpOyBicmVhazsKICAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5p
Zm9ybTNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKICAgICAgICAgY2FzZSBmX3Vu
aWZvcm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVh
azsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIx
ZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhB
dHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBhcnJheSwgc2l6ZSk7
IGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0
dHJpYjNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3Zl
cnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGFycmF5LCBz
aXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVy
dGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSwgc2l6ZSk7IGJyZWFrOworICAgICAgICBjYXNlIGZf
dmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXksIHNp
emUpOyBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0
ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl92
ZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSwgc2l6
ZSk7IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KQEAgLTUxNSw4
ICs1MzQsOSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1CiAgICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yKTsKIAotICAgIGxvbmcgbG9jYXRpb24gPSBhcmdzLmF0KDApLnRvSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGFyZ3MuYXQoMCkpOwor
ICAKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICAKICAgICBSZWZQdHI8V2ViR0xJbnRBcnJheT4gd2ViR0xBcnJheSA9
IHRvV2ViR0xJbnRBcnJheShhcmdzLmF0KDEpKTsKQEAgLTU1Niw3ICs1NzYsOCBAQCBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChECiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9
IDMpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKIAotICAg
IGxvbmcgbG9jYXRpb24gPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzLmF0KDAp
KTsKKwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xODE2LDYgKzE4
MTYsNyBAQCBzdWIgSXNSZWZQdHJUeXBlCiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdM
U2hhZGVyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xTaG9ydEFycmF5IjsKICAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xUZXh0dXJlIjsKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiV2ViR0xVbmlmb3JtTG9jYXRpb24iOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVx
ICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2Vi
R0xVbnNpZ25lZEludEFycmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXkiOwpAQCAtMTkxOCw2ICsxOTE5LDcgQEAgbXkgJXR5cGVDYW5GYWlsQ29u
dmVyc2lvbiA9ICgKICAgICAiV2ViR0xTaGFkZXIiID0+IDAsCiAgICAgIldlYkdMU2hvcnRBcnJh
eSIgPT4gMCwKICAgICAiV2ViR0xUZXh0dXJlIiA9PiAwLAorICAgICJXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiIgPT4gMCwKICAgICAiQ29tcGFyZUhvdyIgPT4gMCwKICAgICAiRGF0YUdyaWRDb2x1bW4i
ID0+IDAsCiAgICAgIkRPTVN0cmluZyIgPT4gMCwKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
RGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9EZXJpdmVkU291cmNlc0FsbEluT25lLmNwcAkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTFNoYWRlci5jcHAi
CiAjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTFNob3J0QXJyYXkuY3BwIgogI2luY2x1ZGUgImJp
bmRpbmdzL1Y4V2ViR0xUZXh0dXJlLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVW5p
Zm9ybUxvY2F0aW9uLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVW5zaWduZWRCeXRl
QXJyYXkuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5LmNw
cCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcCIKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SW5kZXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3LDcgQEAK
ICNpbmNsdWRlICJWOFdlYkdMU2hhZGVyLmgiCiAjaW5jbHVkZSAiVjhXZWJHTFNob3J0QXJyYXku
aCIKICNpbmNsdWRlICJWOFdlYkdMVGV4dHVyZS5oIgorI2luY2x1ZGUgIlY4V2ViR0xVbmlmb3Jt
TG9jYXRpb24uaCIKICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKICNpbmNs
dWRlICJWOFdlYkdMVW5zaWduZWRJbnRBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXkuaCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCShyZXZpc2lvbiA1MTc5OSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjAs
NiArNDYwLDcgQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogICAg
IFYoV0VCR0xTSEFERVIsIFdlYkdMU2hhZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIFYoV0VCR0xTSE9SVEFSUkFZLCBXZWJHTFNob3J0QXJyYXkpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYoV0VCR0xURVhUVVJFLCBXZWJH
TFRleHR1cmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYo
V0VCR0xVTklGT1JNTE9DQVRJT04sIFdlYkdMVW5pZm9ybUxvY2F0aW9uKSAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIFYoV0VCR0xVTlNJR05FREJZVEVBUlJBWSwgV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheSkgICAgICAgICAgICAgICAgICAgXAogICAgIFYoV0VCR0xVTlNJR05FRElOVEFSUkFZ
LCBXZWJHTFVuc2lnbmVkSW50QXJyYXkpICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYoV0VC
R0xVTlNJR05FRFNIT1JUQVJSQVksIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJWOFdlYkdMUHJvZ3JhbS5oIgogI2luY2x1
ZGUgIlY4V2ViR0xTaGFkZXIuaCIKICNpbmNsdWRlICJWOFdlYkdMU2hvcnRBcnJheS5oIgorI2lu
Y2x1ZGUgIlY4V2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKICNpbmNsdWRlICJWOFdlYkdMVW5zaWdu
ZWRCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRJbnRBcnJheS5oIgogI2lu
Y2x1ZGUgIlY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCIKQEAgLTI2Miw0NyArMjYzLDIxIEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0T2JqZWN0UGEKICAgICByZXR1cm4gdG9W
OChpbmZvKTsKIH0KIAotZW51bSBXaGljaFByb2dyYW1DYWxsIHsKLSAgICBrUHJvZ3JhbVBhcmFt
ZXRlciwga1VuaWZvcm0KLX07Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0UHJv
Z3JhbVBhcmFtZXRlcihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBXaGljaFByb2dyYW1DYWxs
IHByb2dyYW1DYWxsKQorc3RhdGljIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB0b1dlYkdMVW5pZm9y
bUxvY2F0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCiB7Ci0gICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMikgewotICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRp
b24oU1lOVEFYX0VSUik7Ci0gICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigp
OworICAgIG9rID0gZmFsc2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0g
MDsKKyAgICBpZiAoVjhXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6SGFzSW5zdGFuY2UodmFsdWUpKSB7
CisgICAgICAgIGxvY2F0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
V2ViR0xVbmlmb3JtTG9jYXRpb24+KAorICAgICAgICAgICAgVjhDbGFzc0luZGV4OjpXRUJHTFVO
SUZPUk1MT0NBVElPTiwgdmFsdWUtPlRvT2JqZWN0KCkpOworICAgICAgICBvayA9IHRydWU7CiAg
ICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0ID0KLSAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8g
djhET01XcmFwcGVyVG88V2ViR0xQcm9ncmFtPihWOENsYXNzSW5kZXg6OldFQkdMUFJPR1JBTSwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOwotICAgIGJvb2wgb2s7
Ci0gICAgdW5zaWduZWQgcG5hbWUgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKLSAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAgICAg
ICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Ci0gICAgfQotICAgIFdlYkdMR2V0
SW5mbyBpbmZvOwotICAgIHN3aXRjaCAocHJvZ3JhbUNhbGwpIHsKLSAgICBjYXNlIGtQcm9ncmFt
UGFyYW1ldGVyOgotICAgICAgICBpbmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihw
cm9ncmFtLCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtVbmlmb3JtOgot
ICAgICAgICAvLyBwbmFtZSAtPiBsb2NhdGlvbgotICAgICAgICBpbmZvID0gY29udGV4dC0+Z2V0
VW5pZm9ybShwcm9ncmFtLCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
aWYgKGVjKSB7Ci0gICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0gICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b1Y4KGluZm8pOwor
ICAgIHJldHVybiBsb2NhdGlvbjsKIH0KIAorZW51bSBXaGljaFByb2dyYW1DYWxsIHsKKyAgICBr
UHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KK307CiAKIENBTExCQUNLX0ZVTkNfREVDTChXZWJH
TFJlbmRlcmluZ0NvbnRleHRHZXRCdWZmZXJQYXJhbWV0ZXIpCiB7CkBAIC0zNzUsNyArMzUwLDI4
IEBAIENBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHQKIENBTExCQUNLX0ZV
TkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRHZXRQcm9ncmFtUGFyYW1ldGVyKQogewogICAg
IElOQ19TVEFUUygiRE9NLldlYkdMUmVuZGVyaW5nQ29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVy
KCkiKTsKLSAgICByZXR1cm4gZ2V0UHJvZ3JhbVBhcmFtZXRlcihhcmdzLCBrUHJvZ3JhbVBhcmFt
ZXRlcik7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAyKSB7CisgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpj
b252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xk
ZXIoKSk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gVjhXZWJHTFByb2dyYW06Okhhc0lu
c3RhbmNlKGFyZ3NbMF0pID8gdjhET01XcmFwcGVyVG88V2ViR0xQcm9ncmFtPihWOENsYXNzSW5k
ZXg6OldFQkdMUFJPR1JBTSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkg
OiAwOworICAgIGJvb2wgb2s7CisgICAgdW5zaWduZWQgcG5hbWUgPSB0b0ludDMyKGFyZ3NbMV0s
IG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihT
WU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Cisg
ICAgfQorICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRl
cihwcm9ncmFtLCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBWOFByb3h5Ojpz
ZXRET01FeGNlcHRpb24oZWMpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAg
IH0KKyAgICByZXR1cm4gdG9WOChpbmZvKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcikKQEAgLTQyMCw3ICs0MTYs
MzAgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dAogQ0FMTEJBQ0tf
RlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dEdldFVuaWZvcm0pCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uV2ViR0xSZW5kZXJpbmdDb250ZXh0LmdldFVuaWZvcm0oKSIpOwotICAgIHJldHVy
biBnZXRQcm9ncmFtUGFyYW1ldGVyKGFyZ3MsIGtVbmlmb3JtKTsKKworICAgIGlmIChhcmdzLkxl
bmd0aCgpICE9IDIpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9F
UlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8
V2ViR0xSZW5kZXJpbmdDb250ZXh0PihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFByb2dyYW0q
IHByb2dyYW0gPSBWOFdlYkdMUHJvZ3JhbTo6SGFzSW5zdGFuY2UoYXJnc1swXSkgPyB2OERPTVdy
YXBwZXJUbzxXZWJHTFByb2dyYW0+KFY4Q2xhc3NJbmRleDo6V0VCR0xQUk9HUkFNLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDA7CisKKyAgICBib29sIG9rID0gZmFs
c2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1M
b2NhdGlvbihhcmdzWzFdLCBvayk7CisKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+
Z2V0VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9WOChpbmZvKTsKIH0KIAogQ0FMTEJBQ0tfRlVO
Q19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dEdldFZlcnRleEF0dHJpYikKQEAgLTU2MCwzNSAr
NTc5LDU3IEBAIGVudW0gRnVuY3Rpb25Ub0NhbGwgewogICAgIGtWZXJ0ZXhBdHRyaWIxdiwga1Zl
cnRleEF0dHJpYjJ2LCBrVmVydGV4QXR0cmliM3YsIGtWZXJ0ZXhBdHRyaWI0dgogfTsKIAorYm9v
bCBpc0Z1bmN0aW9uVG9DYWxsRm9yQXR0cmlidXRlKEZ1bmN0aW9uVG9DYWxsIGZ1bmN0aW9uVG9D
YWxsKQoreworICAgIHN3aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKKyAgICBjYXNlIGtWZXJ0ZXhB
dHRyaWIxdjoKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjoKKyAgICBjYXNlIGtWZXJ0ZXhBdHRy
aWIzdjoKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVs
cGVyZihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblRvQ2FsbCBmdW5jdGlv
blRvQ2FsbCkgewogICAgIC8vIEZvcm1zOgotICAgIC8vICogZ2xVbmlmb3JtMWZ2KEdMaW50IGxv
Y2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlv
biwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtMmZ2KEdMaW50IGxv
Y2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlv
biwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtM2Z2KEdMaW50IGxv
Y2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlv
biwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtNGZ2KEdMaW50IGxv
Y2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlv
biwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xp
bnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xp
bnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0
cmliMmZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0
cmliMmZ2KEdMaW50IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBn
bFZlcnRleEF0dHJpYjNmdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBn
bFZlcnRleEF0dHJpYjNmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwot
ICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwot
ICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJh
eSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTFmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2Nh
dGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9y
bTJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8g
KiBnbFVuaWZvcm0yZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMRmxvYXRB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zZnYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5p
Zm9ybTRmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAg
Ly8gKiBnbFVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMRmxv
YXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGluZGV4LCBB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGluZGV4LCBXZWJH
TEZsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJmdihHTGludCBpbmRl
eCwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJmdihHTGludCBpbmRleCwg
V2ViR0xGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIzZnYoR0xpbnQg
aW5kZXgsIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIzZnYoR0xpbnQgaW5k
ZXgsIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdM
aW50IGluZGV4LCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50
IGluZGV4LCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgoKSAh
PSAzKSB7CiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKICAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgfQogCisgICAgYm9v
bCBvayA9IGZhbHNlOworICAgIGludCBpbmRleCA9IC0xOworICAgIFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiA9IDA7CisKKyAgICBpZiAoaXNGdW5jdGlvblRvQ2FsbEZvckF0dHJpYnV0
ZShmdW5jdGlvblRvQ2FsbCkpCisgICAgICAgIGluZGV4ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7
CisgICAgZWxzZQorICAgICAgICBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJn
c1swXSwgb2spOworCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KICAgICAg
ICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5n
Q29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgYm9vbCBvazsKLSAgICBpbnQgbG9jYXRpb24g
PSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKwogICAgIGlmICghb2spIHsKICAgICAgICAgVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90SGFuZGxl
ZEJ5SW50ZXJjZXB0b3IoKTsKQEAgLTYwMiwxMCArNjQzLDEwIEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdmVydGV4QXR0cmkKICAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29u
dGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKICAgICAgICAgICAgIGNh
c2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVh
azsKICAgICAgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2Nh
dGlvbiwgYXJyYXkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjF2OiBj
b250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0
aW9uLCBhcnJheSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliM3Y6IGNv
bnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKLSAgICAgICAg
ICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRp
b24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29u
dGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBrVmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJy
YXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52
ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtW
ZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7IGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC02MjksMTAgKzY3
MCwxMCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZlcnRleEF0dHJpCiAgICAgICAg
IGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgZGF0YSwgbGVu
KTsgYnJlYWs7CiAgICAgICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihs
b2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CiAgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29u
dGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7Ci0gICAgICAgIGNh
c2Uga1ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGRh
dGEsIGxlbik7IGJyZWFrOwotICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+
dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBrVmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgZGF0
YSwgbGVuKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52
ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNl
IGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZGV4LCBkYXRhLCBs
ZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRl
eEF0dHJpYjJmdihpbmRleCwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1ZlcnRl
eEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGRhdGEsIGxlbik7IGJy
ZWFrOworICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmli
NGZ2KGluZGV4LCBkYXRhLCBsZW4pOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05P
VF9SRUFDSEVEKCk7IGJyZWFrOwogICAgIH0KICAgICBmYXN0RnJlZShkYXRhKTsKQEAgLTY0Miwx
NCArNjgzLDE0IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmVydGV4QXR0cmkKIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5pZm9ybUhlbHBlcmkoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RnVuY3Rpb25Ub0NhbGwgZnVuY3Rpb25Ub0NhbGwpIHsKICAgICAvLyBGb3JtczoKLSAgICAvLyAq
IGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVu
aWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBn
bFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlm
b3JtMml2KEdMaW50IGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xV
bmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9y
bTNpdihHTGludCBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5p
Zm9ybTRpdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm00
aXYoR0xpbnQgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZv
cm0xaXYoR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICog
Z2xVbmlmb3JtMWl2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRh
dGEpOworICAgIC8vICogZ2xVbmlmb3JtMml2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJpdihHTFVuaWZvcm1Mb2NhdGlvbiBsb2Nh
dGlvbiwgV2ViR0xJbnRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNpdihHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zaXYo
R0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CisgICAgLy8g
KiBnbFVuaWZvcm00aXYoR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEFycmF5IGRhdGEpOwor
ICAgIC8vICogZ2xVbmlmb3JtNGl2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBXZWJHTElu
dEFycmF5IGRhdGEpOwogCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgewogICAgICAgICBW
OFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CkBAIC02NTgsOCArNjk5LDkgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bmlmb3JtSGVscAogCiAgICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9N
V3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0g
ICAgYm9vbCBvazsKLSAgICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAg
ICBib29sIG9rID0gZmFsc2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0g
dG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzWzBdLCBvayk7CisKICAgICBpZiAoIW9rKSB7CiAg
ICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkBAIC03NjksOCArODExLDEwIEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5pZm9ybU1hdHIKIAogICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCA9CiAgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOwotICAgIGJv
b2wgb2s7Ci0gICAgaW50IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisKKyAgICBi
b29sIG9rID0gZmFsc2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9X
ZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzWzBdLCBvayk7CisgICAgCiAgICAgaWYgKCFvaykgewog
ICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CiAgICAgICAgIHJl
dHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgogI2luY2x1
ZGUgIldlYkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAi
V2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpA
QCAtMTE0NywxMyArMTE0OCwxNSBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRUCiAgICAgfQogfQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZv
cm1Mb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHBy
b2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7CisgICAgaWYgKCFwcm9ncmFtIHx8IHVuaWZvcm1M
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IHByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRo
aXMpIHsKICAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfVkFMVUUgZXJyb3IKICAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwogICAgIH0KKyAgICBsb25nIGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlv
bigpOworICAgIAogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgLy8g
RklYTUU6IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCB1c2luZyBXZWJHTFVuaWZvcm1Mb2NhdGlv
biBhbmQgY2FjaGluZyB0eXBlcyBpbiBpdAogICAgIGludCBhY3RpdmVVbmlmb3JtcyA9IDA7CkBA
IC0xMjc1LDEzICsxMjc4LDE0IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFUKICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiB9CiAKLWxvbmcgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxXZWJHTFVuaWZv
cm1Mb2NhdGlvbj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIGlmICghcHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewog
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUp
OworICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CisgICAgcmV0dXJuIFdlYkdM
VW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwgbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbSwgbmFtZSkpOwogfQogCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNjQ2LDI4OSArMTY1MCw0MzkgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtMWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4
KQogewotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsKKyAgICBpZiAoIWxv
Y2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAg
ICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBXZWJH
TEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSogdikK
IHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50
UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04g
ZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVl
ZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtMWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiBy
YWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0xZnYobG9jYXRpb24sIHYsIHNpemUpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aShsb25nIGxvY2F0aW9uLCBpbnQgeCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCkKIHsKLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbiwgeCk7CisgICAgaWYgKCFsb2NhdGlvbiB8
fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8g
RklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRpb24tPmxvY2F0aW9u
KCksIHgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50
QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpCiB7CisgICAg
aWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhy
b3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihs
b25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQq
IHYsIGludCBzaXplKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0o
KSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZB
TElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8v
IEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICgh
dikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYo
bG9jYXRpb24sIHYsIHNpemUpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdiwgc2l6ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihsb25nIGxvY2F0
aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0
IHkpCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24sIHgsIHkpOworICAgIGlm
ICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7
CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihsb25nIGxv
Y2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxv
YXRBcnJheSogdikKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkg
IT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJ
RF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBG
SVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYp
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24s
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKKyAgICBpZiAoIWxvY2F0
aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAg
ICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBh
cnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAyKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSkKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMmkobG9jYXRp
b24sIHgsIHkpOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09Q
RVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4
dC0+dW5pZm9ybTJpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiBy
YWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1fY29udGV4dC0+dW5pZm9y
bTJpdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOworICAgIG1fY29udGV4
dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgo
KSAvIDIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCogdiwg
aW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCiB7CisgICAg
aWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhy
b3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAy
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7CisgICAg
bV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMik7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHop
CiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtM2YobG9jYXRpb24sIHgsIHksIHopOworICAgIGlm
ICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7
CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihsb25n
IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdM
RmxvYXRBcnJheSogdikKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFt
KCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5W
QUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAv
LyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAo
IXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRp
b24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0z
ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKKyAgICBpZiAoIWxv
Y2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAg
ICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBu
byBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBt
X2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIHYsIHNpemUgLyAzKTsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHopCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeikKIHsKLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0zaShsb2NhdGlvbiwgeCwgeSwgeik7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6
IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgs
IHksIHopOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50
QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpCiB7CisgICAg
aWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhy
b3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAz
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpIC8gMyk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYo
bG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50
KiB2LCBpbnQgc2l6ZSkKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFt
KCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5W
QUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAv
LyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAo
IXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRp
b24sIHYsIHNpemUgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGxvbmcgbG9j
YXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykKIHsKLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7CisgICAgaWYgKCFsb2NhdGlvbiB8
fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8g
RklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHgsIHksIHosIHcpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24s
IFdlYkdMRmxvYXRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5
KiB2KQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJB
VElPTiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3
ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEg
bXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQogeworICAgIGlmICghbG9jYXRpb24gfHwg
bG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJ
WE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBh
c3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+
dW5pZm9ybTRmdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9y
bTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpCiB7Ci0gICAgbV9jb250
ZXh0LT51bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOworICAgIGlmICghbG9jYXRpb24g
fHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8v
IEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB4LCB5LCB6LCB3KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9u
LCBXZWJHTEludEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2
KQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJl
bnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElP
TiBlcnJvcgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBu
ZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgdi0+ZGF0YSgp
LCB2LT5sZW5ndGgoKSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGludCogdiwgaW50IHNpemUpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJh
aXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGlu
CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
NGl2KGxvY2F0aW9uLCB2LCBzaXplIC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1N
YXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSog
dikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRB
cnJheSogdikKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0g
bV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9P
UEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOworICAgIG1fY29udGV4
dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYo
bG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSkK
IHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50
UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04g
ZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVl
ZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDQKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5z
cG9zZSwgdiwgc2l6ZSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gNCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxv
YXRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdl
YkdMRmxvYXRBcnJheSogdikKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xf
SU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAg
ICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBp
ZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBu
ZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgz
ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDkpOworICAg
IG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNw
b3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gOSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1N
YXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6
ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBp
bnQgc2l6ZSkKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0g
bV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9P
UEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDkKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDkpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gOSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2Us
IFdlYkdMRmxvYXRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFu
c3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdikKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0
aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTog
cmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQg
aW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2Ci0gICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkg
LyAxNik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAxNik7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0
KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2Us
IGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5w
cm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2Ug
R0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
ICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAg
ICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0
cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CisgICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYsIHNp
emUgLyAxNik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lv
biA1MTc5OSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgV2ViR0xQcm9ncmFtOwogY2xh
c3MgV2ViR0xSZW5kZXJidWZmZXI7CiBjbGFzcyBXZWJHTFNoYWRlcjsKIGNsYXNzIFdlYkdMVGV4
dHVyZTsKK2NsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOwogY2xhc3MgSFRNTEltYWdlRWxlbWVu
dDsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBjbGFzcyBJbWFnZURhdGE7CkBAIC0xNTcsOSAr
MTU4LDkgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgICAgIFdlYkdMR2V0SW5mbyBn
ZXRUZXhQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShXZWJH
TFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAg
ICAgICAgV2ViR0xHZXRJbmZvIGdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgbG9uZyBnZXRVbmlm
b3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IGdldFVuaWZv
cm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CiAKICAgICAgICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGlu
ZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTIyNCwzNiAr
MjI1LDM2IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgdm9pZCB1bmlmb3JtMWYobG9u
ZyBsb2NhdGlvbiwgZmxvYXQgeCk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFmdihsb25nIGxvY2F0
aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0xZnYobG9uZyBs
b2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMWkobG9u
ZyBsb2NhdGlvbiwgaW50IHgpOwotICAgICAgICB2b2lkIHVuaWZvcm0xaXYobG9uZyBsb2NhdGlv
biwgV2ViR0xJbnRBcnJheSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFpdihsb25nIGxvY2F0
aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmYobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTJmdihsb25nIGxv
Y2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0yZnYobG9u
ZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmko
bG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMml2KGxv
bmcgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0yaXYo
bG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNm
KGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOwotICAgICAgICB2b2lk
IHVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KTsKLSAgICAgICAg
dm9pZCB1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7Ci0gICAg
ICAgIHZvaWQgdW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHopOwot
ICAgICAgICB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7
Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXpl
KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgeiwgZmxvYXQgdyk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRmdihsb25nIGxvY2F0
aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm00ZnYobG9uZyBs
b2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGkobG9u
ZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpOwotICAgICAgICB2b2lkIHVu
aWZvcm00aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7Ci0gICAgICAgIHZvaWQg
dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9p
ZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZs
b2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKLSAgICAgICAg
dm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJH
TEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcg
bG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKLSAgICAg
ICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBX
ZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKKyAg
ICAgICAgdm9pZCB1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBmbG9hdCB4KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlm
b3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGlu
dCBzaXplKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBpbnQgeCk7CisgICAgICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpOworICAgICAgICB2
b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQq
IHYsIGludCBzaXplKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCB1bmlm
b3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKKyAgICAgICAgdm9pZCB1bmlmb3Jt
MmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHkpOwor
ICAgICAgICB2b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBXZWJHTEludEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7CisgICAgICAg
IHZvaWQgdW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSogdik7CisgICAg
ICAgIHZvaWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGZsb2F0KiB2LCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeik7CisgICAgICAg
IHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdl
YkdMSW50QXJyYXkqIHYpOworICAgICAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKKyAgICAgICAgdm9pZCB1
bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KTsKKyAg
ICAgICAgdm9pZCB1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgZmxvYXQqIHYsIGludCBzaXplKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdyk7
CisgICAgICAgIHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIFdlYkdMSW50QXJyYXkqIHYpOworICAgICAgICB2b2lkIHVuaWZvcm00aXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKKyAgICAg
ICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUpOworICAgICAgICB2
b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJv
b2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKKyAgICAgICAgdm9pZCB1bmlm
b3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0
cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpOworICAgICAgICB2b2lkIHVuaWZvcm1N
YXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgV2ViR0xGbG9hdEFycmF5KiB2YWx1ZSk7CisgICAgICAgIHZvaWQgdW5pZm9ybU1hdHJp
eDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3Nl
LCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKIAogICAgICAgICB2b2lkIHVzZVByb2dyYW0oV2Vi
R0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIHZhbGlkYXRlUHJvZ3Jh
bShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCShyZXZpc2lvbiA1MTc5OSkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5
KQpAQCAtNTY3LDEwICs1NjcsMTAgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICAvLyBhbnkgZ2V0
VGV4UGFyYW1ldGVyKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBu
YW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBnZXRUZXhQ
YXJhbWV0ZXIoKTsKIAotICAgICAgICAvLyBhbnkgZ2V0VW5pZm9ybShpbiBXZWJHTFByb2dyYW0g
cHJvZ3JhbSwgaW4gbG9uZyBsb2NhdGlvbikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAg
IC8vIGFueSBnZXRVbmlmb3JtKGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIFtDdXN0
b21dIHZvaWQgZ2V0VW5pZm9ybSgpOwotICAgICAgICAKLSAgICAgICAgbG9uZyBnZXRVbmlmb3Jt
TG9jYXRpb24oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIERPTVN0cmluZyBuYW1lKSByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBnZXRVbmlm
b3JtTG9jYXRpb24oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIERPTVN0cmluZyBuYW1lKSBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICAvLyBhbnkgZ2V0VmVydGV4QXR0cmliKGlu
IHVuc2lnbmVkIGxvbmcgaW5kZXgsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01F
eGNlcHRpb24pOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIGdldFZlcnRleEF0dHJpYigpOwpAQCAt
NjM4LDI2ICs2MzgsMjYgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICBbT3B0aW9uYWxdIEdMYm9vbGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0
aXBseUFscGhhKTsKICAgICAgICAgW0N1c3RvbV0gdm9pZCB0ZXhTdWJJbWFnZTJEKCk7CiAKLSAg
ICAgICAgdm9pZCB1bmlmb3JtMWYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCk7Ci0gICAg
ICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTFmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEZs
b2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFpKGluIGxvbmcgbG9jYXRpb24sIGlu
IGxvbmcgeCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTFpdihpbiBsb25nIGxvY2F0
aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0yZihpbiBsb25n
IGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5KTsKLSAgICAgICAgW0N1c3RvbV0gdm9p
ZCB1bmlmb3JtMmZ2KGluIGxvbmcgbG9jYXRpb24sIGluIFdlYkdMRmxvYXRBcnJheSB2KTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtMmkoaW4gbG9uZyBsb2NhdGlvbiwgaW4gbG9uZyB4LCBpbiBsb25n
IHkpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0yaXYoaW4gbG9uZyBsb2NhdGlvbiwg
aW4gV2ViR0xJbnRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtM2YoaW4gbG9uZyBsb2Nh
dGlvbiwgaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeik7Ci0gICAgICAgIFtDdXN0
b21dIHZvaWQgdW5pZm9ybTNmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkg
dik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNpKGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCwg
aW4gbG9uZyB5LCBpbiBsb25nIHopOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zaXYo
aW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlm
b3JtNGYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQg
eiwgaW4gZmxvYXQgdyk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTRmdihpbiBsb25n
IGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRp
KGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHosIGluIGxv
bmcgdyk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTRpdihpbiBsb25nIGxvY2F0aW9u
LCBpbiBXZWJHTEludEFycmF5IHYpOwotCi0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1h
dHJpeDJmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2ViR0xG
bG9hdEFycmF5IGFycmF5KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2
KGluIGxvbmcgbG9jYXRpb24sIGluIGJvb2xlYW4gdHJhbnNwb3NlLCBpbiBXZWJHTEZsb2F0QXJy
YXkgYXJyYXkpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoaW4gbG9u
ZyBsb2NhdGlvbiwgaW4gYm9vbGVhbiB0cmFuc3Bvc2UsIGluIFdlYkdMRmxvYXRBcnJheSBhcnJh
eSk7CisgICAgICAgIHZvaWQgdW5pZm9ybTFmKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBpbiBmbG9hdCB4KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMWZ2KGluIFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7CisgICAg
ICAgIHZvaWQgdW5pZm9ybTFpKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBs
b25nIHgpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0xaXYoaW4gV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkgdik7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTJmKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBm
bG9hdCB5KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMmZ2KGluIFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7CisgICAgICAgIHZvaWQg
dW5pZm9ybTJpKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBsb25nIHgsIGlu
IGxvbmcgeSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTJpdihpbiBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2KTsKKyAgICAgICAgdm9pZCB1
bmlmb3JtM2YoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIGZsb2F0IHgsIGlu
IGZsb2F0IHksIGluIGZsb2F0IHopOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zZnYo
aW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMRmxvYXRBcnJheSB2KTsK
KyAgICAgICAgdm9pZCB1bmlmb3JtM2koaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHopOworICAgICAgICBbQ3VzdG9tXSB2b2lk
IHVuaWZvcm0zaXYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMSW50
QXJyYXkgdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRmKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB6LCBpbiBmbG9hdCB3
KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtNGZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0
aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7CisgICAgICAgIHZvaWQgdW5pZm9y
bTRpKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBsb25nIHgsIGluIGxvbmcg
eSwgaW4gbG9uZyB6LCBpbiBsb25nIHcpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm00
aXYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkgdik7
CisKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGluIFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFy
cmF5IGFycmF5KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGluIFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2Vi
R0xGbG9hdEFycmF5IGFycmF5KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4
NGZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9z
ZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KTsKIAogICAgICAgICB2b2lkICAgICAgICAgdXNl
UHJvZ3JhbShpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAg
ICAgICAgIHZvaWQgICAgICAgICB2YWxpZGF0ZVByb2dyYW0oaW4gV2ViR0xQcm9ncmFtIHByb2dy
YW0pIHJhaXNlcyhET01FeGNlcHRpb24pOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFVuaWZvcm1Mb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykK
KworI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKK1Bhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uOjpjcmVhdGUoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbG9j
YXRpb24pKTsKK30KKworV2ViR0xVbmlmb3JtTG9jYXRpb246OldlYkdMVW5pZm9ybUxvY2F0aW9u
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikKKyAgICA6IG1fcHJvZ3JhbShw
cm9ncmFtKQorICAgICwgbV9sb2NhdGlvbihsb2NhdGlvbikKK3sKK30KKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlm
b3JtTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VW5pZm9ybUxvY2F0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgV2ViR0xVbmlmb3JtTG9jYXRpb25faAorI2RlZmluZSBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbl9oCisKKyNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dy
YW0uaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiB7CisgICAgcHVi
bGljOgorICAgIHZpcnR1YWwgfldlYkdMVW5pZm9ybUxvY2F0aW9uKCkgeyB9CisgICAgICAgIAor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gY3JlYXRlKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbik7CisgICAgCisgICAgV2ViR0xQcm9n
cmFtKiBwcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV9wcm9ncmFtLmdldCgpOyB9CisgICAgCisg
ICAgbG9uZyBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKyAgICAKKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgbG9uZyBsb2NhdGlvbik7CisgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVm
UHRyPFdlYkdMUHJvZ3JhbT4gbV9wcm9ncmFtOworICAgIGxvbmcgbV9sb2NhdGlvbjsKK307Cisg
ICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbl9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9u
LmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9j
YXRpb24uaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCittb2R1bGUg
aHRtbCB7CisgICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD0zRF9DQU5WQVNdIFdlYkdMVW5pZm9y
bUxvY2F0aW9uIHsKKyAgICB9OworfQo=
</data>
<flag name="review"
          id="26357"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44499</attachid>
            <date>2009-12-08 17:30:06 -0800</date>
            <delta_ts>2009-12-08 18:23:02 -0800</delta_ts>
            <desc>Fixed some indenting and added tests.</desc>
            <filename>uniformlocationpatch.txt</filename>
            <type>text/plain</type>
            <size>84238</size>
            <attacher name="Peterson Trethewey">petersont</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTg4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDktMTItMDggIFBldGVyc29uIFRyZXRoZXdleSAgPHBldGVyc29u
dEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBhbmQgY2hhbmdlIEFQSSB0byB1
c2UgaXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MTE3MworCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24u
aHRtbAorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1l
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmZ1bmN0aW9uRm9yVW5pZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhRnVuY3Rpb25mKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbmkp
OgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uTWF0cml4KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9E
ZXJpdmVkU291cmNlc0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvV2ViR0xVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6KToK
KyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0Z1bmN0aW9uVG9DYWxsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRl
eEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OnVuaWZvcm1IZWxw
ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OnVuaWZvcm1NYXRyaXhIZWxwZXIpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRp
dik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDRmdik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6V2ViR0xVbmlmb3JtTG9jYXRpb24pOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRpb246On5XZWJHTFVuaWZvcm1Mb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6cHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6bG9jYXRpb24pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbDogQWRkZWQuCisKIDIwMDkt
MTItMDggIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gNTE3
OTkpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDYgKzg4LDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgV2ViR0xTaGFkZXIgXAogICAgIFdlYkdM
U2hvcnRBcnJheSBcCiAgICAgV2ViR0xUZXh0dXJlIFwKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlv
biBcCiAgICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBcCiAgICAgV2ViR0xVbnNpZ25lZEludEFy
cmF5IFwKICAgICBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBcCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTE3
OTkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYs
NyBAQAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwn
LAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCcsCiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmlkbCcsCisgICAgICAgICAgICAnaHRtbC9j
YW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMv
V2ViR0xVbnNpZ25lZEludEFycmF5LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZFNob3J0QXJyYXkuaWRsJywKQEAgLTEzMjQsNiArMTMyNSw4IEBACiAgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvV2ViR0xUZXh0dXJlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xUZXh0
dXJlLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaCcsCiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAnLAogICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCcsCiAgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcCcsCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTE3OTkpCisr
KyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTU2LDYgKzE1NiwxMSBAQAogCQkwQjkwNTZGODBGMjY4NUYzMDA5NUZGNkEgLyogV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwQjkwNTZGNjBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJs
ZUxvYWRlci5jcHAgKi87IH07CiAJCTBCOTA1NkY5MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJU
aHJlYWRhYmxlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQjkwNTZGNzBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTBCRTAzMEEyMEYz
MTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJFMDMwQTEwRjMxMTJGQjAwM0MxQTQ2IC8qIFJl
bmRlckxpbmVCb3hMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBD
M0YxRjU3MTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi87IH07
CisJCTBDM0YxRjVCMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEMzRjFGNTgxMEM4
ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi87IH07CisJCTBDM0YxRjVD
MTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDM0YxRjU5MTBDODg3MTIwMEQ3
MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi87IH07CisJCTBDNDUzNDI3MTBDREJC
RkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAv
KiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCAqLzsgfTsKKwkJMEM0NTM0MjgxMENEQkJGQTAw
ODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dl
YkdMVW5pZm9ybUxvY2F0aW9uLmggKi87IH07CiAJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAv
KiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9u
SW5mby5oICovOyB9OwogCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZS5oICovOyB9OwogCQkwRjUwMEFBRjBGNTREQjFCMDBFRUY5MjggLyogVHJhbnNmb3JtU3Rh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTAw
QUFFMEY1NERCMUIwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5oICovOyB9OwpAQCAtNTM1MCw2
ICs1MzU1LDExIEBACiAJCTBCOTA1NkY2MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtl
clRocmVhZGFibGVMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQjkw
NTZGNzBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCRTAzMEExMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5k
ZXJMaW5lQm94TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJM
aW5lQm94TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwQzNGMUY1NzEwQzg4
NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwOyBwYXRoID0gY2Fu
dmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEMzRjFGNTgxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMVW5pZm9ybUxvY2F0aW9uLmg7IHBh
dGggPSBjYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEMzRjFGNTkxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9u
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGw7IHBh
dGggPSBjYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2Nh
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEM0NTM0MjYx
MENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2Vs
ZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTZWxl
Y3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVEQTg5MEYzQUFF
RTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOyBwYXRoID0g
YW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNTAwQUFFMEY1NERCMUIwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2Zvcm1TdGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA3MzcsNiArMTA3NDcsOSBAQAogCQkJCTQ5QzdC
OUM1MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuY3BwICovLAogCQkJCTQ5QzdCOUM2
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuaCAqLywKIAkJCQk0OUM3QjlDNzEwNDJE
MzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmlkbCAqLywKKwkJCQkwQzNGMUY1NzEwQzg4NzEy
MDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovLAorCQkJCTBDM0YxRjU4MTBD
ODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovLAorCQkJCTBDM0YxRjU5
MTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi8sCiAJCQkJNDlF
RUNERDYxMDUwM0MyMzAwMDk5RkFCIC8qIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwICovLAog
CQkJCTQ5RUVDREQ3MTA1MDNDMjMwMDA5OUZBQiAvKiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Lmgg
Ki8sCiAJCQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFdlYkdMVW5zaWduZWRCeXRlQXJy
YXkuaWRsICovLApAQCAtMTI4OTYsNiArMTI5MDksOCBAQAogCQkJCTQ5RUVDRUY5MTA1MDcwQzQw
MDA5OUZBQiAvKiBKU1dlYkdMU2hvcnRBcnJheS5oICovLAogCQkJCTQ5QzdCOTkxMTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5jcHAgKi8sCiAJCQkJNDlDN0I5OTIxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTV2ViR0xUZXh0dXJlLmggKi8sCisJCQkJMEM0NTM0MjUxMENEQkJGQTAwODY5
MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovLAorCQkJCTBDNDUzNDI2MTBDREJC
RkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8sCiAJCQkJNDlFRUNFRkEx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgKi8sCiAJCQkJ
NDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oICov
LAogCQkJCTQ5RUVDRUZDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1dlYkdMVW5zaWduZWRJbnRBcnJh
eS5jcHAgKi8sCkBAIC0xODIyNSw2ICsxODI0MCw4IEBACiAJCQkJN0EwRTc3MUYxMEMwMERCMTAw
QTAyNzZFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQlG
NEVBRjRBRjEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU5OUQxRTMzMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwQzNGMUY1QjEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xV
bmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBDNDUzNDI4MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MzI2
LDYgKzE4MzQzLDcgQEAKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vy
c29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8q
IHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQk1MTc0RTIwQzEwQTFGNDlB
MDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTBDM0Yx
RjVDMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgaW4gUmVzb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMjAzNzksNiArMjAzOTcsOCBAQAogCQkJCTdBMEU3NzFFMTBDMDBEQjEwMEEw
Mjc2RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
NEVBRjRBRTEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTk5RDFFMzIxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdl
YkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBDNDUzNDI3MTBDREJC
RkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDUxNzk5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNX
ZWJHTFNoYWRlci5oIgogI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eS5oIgogI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKQEAgLTE4NywzNyArMTg4LDYgQEAgZW51bSBXaGljaFByb2dyYW1DYWxsIHsKICAg
ICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KIH07CiAKLXN0YXRpYyBKU1ZhbHVlIGdldFBy
b2dyYW1QYXJhbWV0ZXJIZWxwZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBXaGljaFByb2dyYW1DYWxsIHByb2dyYW1D
YWxsKQotewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQqPihvYmotPmltcGwoKSk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0g
dG9XZWJHTFByb2dyYW0oYXJncy5hdCgwKSk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBhcmdzLmF0
KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0
Y2ggKHByb2dyYW1DYWxsKSB7Ci0gICAgY2FzZSBrUHJvZ3JhbVBhcmFtZXRlcjoKLSAgICAgICAg
aW5mbyA9IGNvbnRleHQtPmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVW5pZm9ybToKLSAgICAgICAgLy8gcG5hbWUgLT4g
bG9jYXRpb24KLSAgICAgICAgaW5mbyA9IGNvbnRleHQtPmdldFVuaWZvcm0ocHJvZ3JhbSwgcG5h
bWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChlYykgewotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7
Ci19Ci0KIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGdl
dE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBhcmdzLCBrQnVmZmVyKTsKQEAgLTI2Nyw3ICsy
MzcsMjEgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYQogCiBKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4gZ2V0UHJvZ3JhbVBh
cmFtZXRlckhlbHBlcih0aGlzLCBleGVjLCBhcmdzLCBrUHJvZ3JhbVBhcmFtZXRlcik7CisgICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+
KGltcGwoKSk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJn
cy5hdCgwKSk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFByb2dyYW1QYXJhbWV0
ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKIH0KIAogSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTMwMSw3ICsyODUsMjEgQEAgSlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UAogCiBKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKLSAgICByZXR1cm4gZ2V0UHJvZ3JhbVBhcmFtZXRlckhlbHBlcih0aGlzLCBl
eGVjLCBhcmdzLCBrVW5pZm9ybSk7CisgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKKworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSk7CisgICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJncy5hdCgwKSk7CisgICAgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvYyA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJncy5hdCgxKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCkBAIC00NjMsMzAgKzQ2MSw1NCBAQCBlbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7
CiAgICAgZl91bmlmb3JtTWF0cml4MmZ2LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1h
dHJpeDRmdgogfTsKIAorYm9vbCBmdW5jdGlvbkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxs
IGYpCit7CisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICBjYXNl
IGZfdW5pZm9ybTJ2OgorICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgY2FzZSBmX3VuaWZvcm00
djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBKU0M6OkpTVmFsdWUg
ZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQogewogICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvcik7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uID0gMDsKKyAgICBsb25nIGluZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0aW9u
Rm9yVW5pZm9ybShmKSkKKyAgICAgICAgbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9u
KGFyZ3MuYXQoMCkpOworICAgIGVsc2UKKyAgICAgICAgaW5kZXggPSBhcmdzLmF0KDApLnRvSW50
MzIoZXhlYyk7CiAKLSAgICBsb25nIGxvY2F0aW9uID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAg
UmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gd2ViR0xBcnJheSA9IHRvV2ViR0xGbG9hdEFycmF5KGFy
Z3MuYXQoMSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpZiAod2ViR0xBcnJheSkgewogICAgICAgICBzd2l0Y2goZikgewotICAgICAgICAgICAg
Y2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgd2ViR0xBcnJh
eS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+
dW5pZm9ybTJmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xB
cnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4
dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZl92ZXJ0
ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5
LmdldCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6IGNvbnRl
eHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0
ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Zl91bmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0
KCksIGVjKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OiBjb250ZXh0LT51
bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgd2Vi
R0xBcnJheS5nZXQoKSwgZWMpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6
IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6IGNvbnRleHQtPnZlcnRleEF0
dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBmX3ZlcnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdlYkdM
QXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjog
Y29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJp
YjRmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGlmIChlYyAhPSAwKQorICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIApAQCAtNDk4LDE1ICs1MjAs
MTcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgc3dpdGNoKGYpIHsKLSAg
ICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJy
YXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5p
Zm9ybTJmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3Vu
aWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVh
azsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlv
biwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OiBj
b250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxv
Y2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmli
M3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVh
azsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0
ZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3Jt
MXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LCBzaXplLCBlYyk7IGJyZWFr
OworICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OiBjb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9u
LCBhcnJheSwgc2l6ZSwgZWMpOyBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29u
dGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5
LCBzaXplLCBlYyk7IGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6IGNvbnRl
eHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXksIHNpemUpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFy
cmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjogY29udGV4
dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSwgc2l6ZSk7IGJyZWFrOworICAgICAgICBj
YXNlIGZfdmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJy
YXksIHNpemUpOyBicmVhazsKICAgICB9CisgICAgaWYgKGVjICE9IDApCisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAg
LTUxNSwyMiArNTM5LDI2IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRh
RnUKICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgU3ludGF4RXJyb3IpOwogCi0gICAgbG9uZyBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9J
bnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgIFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJncy5h
dCgwKSk7CisgIAorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAogICAgIFJlZlB0cjxXZWJHTEludEFycmF5PiB3ZWJH
TEFycmF5ID0gdG9XZWJHTEludEFycmF5KGFyZ3MuYXQoMSkpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAod2ViR0xBcnJheSkgewogICAgICAg
ICBzd2l0Y2goZikgewotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5p
Zm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgd2ViR0xBcnJh
eS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+
dW5pZm9ybTNpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgd2ViR0xB
cnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4
dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24s
IHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9y
bTN2OiBjb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRp
dihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOyBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmIChlYyAhPSAwKQorICAgICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogICAgIApAQCAtNTQyLDEyICs1NzAsMTQgQEAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBkYXRhRnVuY3Rpb25pKERhdGFGdQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCiAgICAgc3dpdGNoKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjog
Y29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAg
ICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXks
IHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9y
bTNpdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZv
cm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsK
KyAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwg
YXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRl
eHQtPnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LCBzaXplLCBlYyk7IGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTN2OiBjb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheSwg
c2l6ZSwgZWMpOyBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5p
Zm9ybTRpdihsb2NhdGlvbiwgYXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6IGJyZWFrOwogICAgIH0KKyAgICBpZiAoZWMgIT0gMCkKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNTU2LDcg
KzU4Niw4IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KEQKICAgICBp
ZiAoYXJncy5zaXplKCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOwogCi0gICAgbG9uZyBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxv
Y2F0aW9uKGFyZ3MuYXQoMCkpOworCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIApAQCAtNTY4LDEyICs1OTks
MTUgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAod2ViR0xBcnJheSkg
ewogICAgICAgICBzd2l0Y2goZikgewotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgy
ZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xB
cnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6
IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJh
eS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6IGNv
bnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5n
ZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6IGNvbnRl
eHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQo
KSwgZWMpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OiBjb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0
KCksIGVjKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjogY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5Lmdl
dCgpLCBlYyk7IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmIChlYyAhPSAwKQorICAgICAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogICAgIApAQCAtNTg1LDEwICs2MTksMTIgQEAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwogCiAgICAgc3dpdGNoKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1N
YXRyaXgyZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
YXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6IGNv
bnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUp
OyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6IGNvbnRleHQtPnVuaWZv
cm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4M2Z2OiBjb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIGFycmF5LCBzaXplLCBlYyk7IGJyZWFrOworICAgICAgICBjYXNlIGZfdW5p
Zm9ybU1hdHJpeDRmdjogY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNw
b3NlLCBhcnJheSwgc2l6ZSwgZWMpOyBicmVhazsKICAgICB9CisgICAgaWYgKGVjICE9IDApCisg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xODE2LDYgKzE4MTYsNyBAQCBzdWIgSXNS
ZWZQdHJUeXBlCiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMU2hhZGVyIjsKICAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xTaG9ydEFycmF5IjsKICAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiV2ViR0xUZXh0dXJlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xV
bmlmb3JtTG9jYXRpb24iOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xVbnNpZ25lZEludEFy
cmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xVbnNpZ25lZFNob3J0QXJyYXki
OwpAQCAtMTkxOCw2ICsxOTE5LDcgQEAgbXkgJXR5cGVDYW5GYWlsQ29udmVyc2lvbiA9ICgKICAg
ICAiV2ViR0xTaGFkZXIiID0+IDAsCiAgICAgIldlYkdMU2hvcnRBcnJheSIgPT4gMCwKICAgICAi
V2ViR0xUZXh0dXJlIiA9PiAwLAorICAgICJXZWJHTFVuaWZvcm1Mb2NhdGlvbiIgPT4gMCwKICAg
ICAiQ29tcGFyZUhvdyIgPT4gMCwKICAgICAiRGF0YUdyaWRDb2x1bW4iID0+IDAsCiAgICAgIkRP
TVN0cmluZyIgPT4gMCwKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNB
bGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291
cmNlc0FsbEluT25lLmNwcAkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3
IEBACiAjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTFNoYWRlci5jcHAiCiAjaW5jbHVkZSAiYmlu
ZGluZ3MvVjhXZWJHTFNob3J0QXJyYXkuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xU
ZXh0dXJlLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwIgogI2lu
Y2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5LmNwcCIKICNpbmNsdWRlICJi
aW5kaW5ncy9WOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcCIKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEluZGV4LmNwcAkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5k
ZXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3LDcgQEAKICNpbmNsdWRlICJWOFdl
YkdMU2hhZGVyLmgiCiAjaW5jbHVkZSAiVjhXZWJHTFNob3J0QXJyYXkuaCIKICNpbmNsdWRlICJW
OFdlYkdMVGV4dHVyZS5oIgorI2luY2x1ZGUgIlY4V2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKICNp
bmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJWOFdlYkdMVW5z
aWduZWRJbnRBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCIK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCShyZXZpc2lvbiA1MTc5OSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjAsNiArNDYwLDcgQEAgdHlw
ZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogICAgIFYoV0VCR0xTSEFERVIs
IFdlYkdMU2hhZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIFYoV0VCR0xTSE9SVEFSUkFZLCBXZWJHTFNob3J0QXJyYXkpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIFYoV0VCR0xURVhUVVJFLCBXZWJHTFRleHR1cmUpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xVTklGT1JNTE9D
QVRJT04sIFdlYkdMVW5pZm9ybUxvY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IFYoV0VCR0xVTlNJR05FREJZVEVBUlJBWSwgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSkgICAgICAg
ICAgICAgICAgICAgXAogICAgIFYoV0VCR0xVTlNJR05FRElOVEFSUkFZLCBXZWJHTFVuc2lnbmVk
SW50QXJyYXkpICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYoV0VCR0xVTlNJR05FRFNIT1JU
QVJSQVksIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4
LDcgQEAKICNpbmNsdWRlICJWOFdlYkdMUHJvZ3JhbS5oIgogI2luY2x1ZGUgIlY4V2ViR0xTaGFk
ZXIuaCIKICNpbmNsdWRlICJWOFdlYkdMU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xV
bmlmb3JtTG9jYXRpb24uaCIKICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIK
ICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRJbnRBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xV
bnNpZ25lZFNob3J0QXJyYXkuaCIKQEAgLTI2Miw0NyArMjYzLDIxIEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZ2V0T2JqZWN0UGEKICAgICByZXR1cm4gdG9WOChpbmZvKTsKIH0KIAot
ZW51bSBXaGljaFByb2dyYW1DYWxsIHsKLSAgICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0K
LX07Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0UHJvZ3JhbVBhcmFtZXRlcihj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBXaGljaFByb2dyYW1DYWxsIHByb2dyYW1DYWxsKQor
c3RhdGljIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCiB7Ci0gICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgIT0gMikgewotICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7
Ci0gICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIG9rID0gZmFs
c2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gMDsKKyAgICBpZiAoVjhX
ZWJHTFVuaWZvcm1Mb2NhdGlvbjo6SGFzSW5zdGFuY2UodmFsdWUpKSB7CisgICAgICAgIGxvY2F0
aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xVbmlmb3JtTG9j
YXRpb24+KAorICAgICAgICAgICAgVjhDbGFzc0luZGV4OjpXRUJHTFVOSUZPUk1MT0NBVElPTiwg
dmFsdWUtPlRvT2JqZWN0KCkpOworICAgICAgICBvayA9IHRydWU7CiAgICAgfQotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0K
LSAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVu
ZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFt
ID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gdjhET01XcmFwcGVyVG88
V2ViR0xQcm9ncmFtPihWOENsYXNzSW5kZXg6OldFQkdMUFJPR1JBTSwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOwotICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQg
cG5hbWUgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7Ci0gICAgfQotICAgIFdlYkdMR2V0SW5mbyBpbmZvOwotICAg
IHN3aXRjaCAocHJvZ3JhbUNhbGwpIHsKLSAgICBjYXNlIGtQcm9ncmFtUGFyYW1ldGVyOgotICAg
ICAgICBpbmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwg
ZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtVbmlmb3JtOgotICAgICAgICAvLyBwbmFt
ZSAtPiBsb2NhdGlvbgotICAgICAgICBpbmZvID0gY29udGV4dC0+Z2V0VW5pZm9ybShwcm9ncmFt
LCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0gICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b1Y4KGluZm8pOworICAgIHJldHVybiBsb2Nh
dGlvbjsKIH0KIAorZW51bSBXaGljaFByb2dyYW1DYWxsIHsKKyAgICBrUHJvZ3JhbVBhcmFtZXRl
ciwga1VuaWZvcm0KK307CiAKIENBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRHZXRCdWZmZXJQYXJhbWV0ZXIpCiB7CkBAIC0zNzUsNyArMzUwLDI4IEBAIENBTExCQUNLX0ZV
TkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHQKIENBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJl
bmRlcmluZ0NvbnRleHRHZXRQcm9ncmFtUGFyYW1ldGVyKQogewogICAgIElOQ19TVEFUUygiRE9N
LldlYkdMUmVuZGVyaW5nQ29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKCkiKTsKLSAgICByZXR1
cm4gZ2V0UHJvZ3JhbVBhcmFtZXRlcihhcmdzLCBrUHJvZ3JhbVBhcmFtZXRlcik7CisKKyAgICBp
ZiAoYXJncy5MZW5ndGgoKSAhPSAyKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7CisgICAgV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNlKGFyZ3NbMF0p
ID8gdjhET01XcmFwcGVyVG88V2ViR0xQcm9ncmFtPihWOENsYXNzSW5kZXg6OldFQkdMUFJPR1JB
TSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOworICAgIGJvb2wg
b2s7CisgICAgdW5zaWduZWQgcG5hbWUgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKKyAgICBpZiAo
IW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIFdlYkdM
R2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFt
ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4g
dG9WOChpbmZvKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcikKQEAgLTQyMCw3ICs0MTYsMzAgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEdldFVuaWZvcm0pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmdldFVuaWZvcm0oKSIpOwotICAgIHJldHVybiBnZXRQcm9ncmFtUGFy
YW1ldGVyKGFyZ3MsIGtVbmlmb3JtKTsKKworICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDIpIHsK
KyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQorICAgICAg
ICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdD
b250ZXh0PihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBWOFdl
YkdMUHJvZ3JhbTo6SGFzSW5zdGFuY2UoYXJnc1swXSkgPyB2OERPTVdyYXBwZXJUbzxXZWJHTFBy
b2dyYW0+KFY4Q2xhc3NJbmRleDo6V0VCR0xQUk9HUkFNLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KGFyZ3NbMF0pKSA6IDA7CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzWzFd
LCBvayk7CisKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CisgICAgfQorICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0VW5pZm9ybShwcm9n
cmFtLCBsb2NhdGlvbiwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oZWMpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0K
KyAgICByZXR1cm4gdG9WOChpbmZvKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEdldFZlcnRleEF0dHJpYikKQEAgLTU2MCwzNSArNTc5LDU3IEBAIGVudW0g
RnVuY3Rpb25Ub0NhbGwgewogICAgIGtWZXJ0ZXhBdHRyaWIxdiwga1ZlcnRleEF0dHJpYjJ2LCBr
VmVydGV4QXR0cmliM3YsIGtWZXJ0ZXhBdHRyaWI0dgogfTsKIAorYm9vbCBpc0Z1bmN0aW9uVG9D
YWxsRm9yQXR0cmlidXRlKEZ1bmN0aW9uVG9DYWxsIGZ1bmN0aW9uVG9DYWxsKQoreworICAgIHN3
aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjoKKyAgICBj
YXNlIGtWZXJ0ZXhBdHRyaWIydjoKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIzdjoKKyAgICBjYXNl
IGtWZXJ0ZXhBdHRyaWI0djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblRvQ2FsbCBmdW5jdGlvblRvQ2FsbCkgewogICAg
IC8vIEZvcm1zOgotICAgIC8vICogZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9jYXRpb24sIEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9jYXRpb24sIFdl
YkdMRmxvYXRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliMmZ2KEdMaW50IGxv
Y2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliMmZ2KEdMaW50IGxv
Y2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZlcnRleEF0dHJpYjNm
dihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZlcnRleEF0dHJpYjNm
dihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0
ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0
ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAv
LyAqIGdsVW5pZm9ybTFmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0
YSk7CisgICAgLy8gKiBnbFVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJmdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0yZnYo
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVW5pZm9ybTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkg
ZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTRmdihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00
ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsK
KyAgICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGluZGV4LCBBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGluZGV4LCBXZWJHTEZsb2F0QXJyYXkgZGF0
YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJmdihHTGludCBpbmRleCwgQXJyYXkgZGF0YSk7
CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJmdihHTGludCBpbmRleCwgV2ViR0xGbG9hdEFycmF5
IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIzZnYoR0xpbnQgaW5kZXgsIEFycmF5IGRh
dGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIzZnYoR0xpbnQgaW5kZXgsIFdlYkdMRmxvYXRB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGluZGV4LCBBcnJh
eSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGluZGV4LCBXZWJHTEZs
b2F0QXJyYXkgZGF0YSk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAzKSB7CiAgICAgICAg
IFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIG5v
dEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgfQogCisgICAgYm9vbCBvayA9IGZhbHNlOwor
ICAgIGludCBpbmRleCA9IC0xOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9
IDA7CisKKyAgICBpZiAoaXNGdW5jdGlvblRvQ2FsbEZvckF0dHJpYnV0ZShmdW5jdGlvblRvQ2Fs
bCkpCisgICAgICAgIGluZGV4ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisgICAgZWxzZQorICAg
ICAgICBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJnc1swXSwgb2spOworCiAg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KICAgICAgICAgVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5I
b2xkZXIoKSk7Ci0gICAgYm9vbCBvazsKLSAgICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3Nb
MF0sIG9rKTsKKwogICAgIGlmICghb2spIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKQEAgLTYwMiwxMCArNjQzLDEwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmVy
dGV4QXR0cmkKICAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJm
dihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKICAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0zdjog
Y29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKICAgICAgICAgICAg
IGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkpOyBi
cmVhazsKLSAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhB
dHRyaWIxZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtWZXJ0
ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBhcnJheSk7IGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0
dHJpYjNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Uga1ZlcnRl
eEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGFycmF5KTsgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVmVydGV4QXR0
cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYo
aW5kZXgsIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djog
Y29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7IGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC02MjksMTAgKzY3MCwxMCBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZlcnRleEF0dHJpCiAgICAgICAgIGNhc2Uga1VuaWZvcm0y
djogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CiAgICAg
ICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgZGF0YSwg
bGVuKTsgYnJlYWs7CiAgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRm
dihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Uga1ZlcnRleEF0dHJp
YjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFr
OwotICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2
KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKLSAgICAgICAgY2FzZSBrVmVydGV4QXR0cmli
M3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7
Ci0gICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYo
bG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIx
djogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZGV4LCBkYXRhLCBsZW4pOyBicmVhazsKKyAg
ICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRl
eCwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250
ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBj
YXNlIGtWZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBkYXRh
LCBsZW4pOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJy
ZWFrOwogICAgIH0KICAgICBmYXN0RnJlZShkYXRhKTsKQEAgLTY0MiwxNCArNjgzLDE0IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmVydGV4QXR0cmkKIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdW5pZm9ybUhlbHBlcmkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Ub0NhbGwg
ZnVuY3Rpb25Ub0NhbGwpIHsKICAgICAvLyBGb3JtczoKLSAgICAvLyAqIGdsVW5pZm9ybTFpdihH
TGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0xaXYoR0xpbnQg
bG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0yaXYoR0xp
bnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtM2l2KEdMaW50
IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTNpdihHTGludCBsb2Nh
dGlvbiwgV2ViR0xJbnRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTRpdihHTGludCBs
b2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm00aXYoR0xpbnQgbG9jYXRp
b24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0xaXYoR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMWl2KEdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOworICAgIC8vICog
Z2xVbmlmb3JtMml2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVW5pZm9ybTJpdihHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgV2ViR0xJbnRB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNpdihHTFVuaWZvcm1Mb2NhdGlvbiBsb2Nh
dGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zaXYoR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00aXYo
R0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlm
b3JtNGl2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOwog
CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgewogICAgICAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oU1lOVEFYX0VSUik7CkBAIC02NTgsOCArNjk5LDkgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB1bmlmb3JtSGVscAogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0ID0KICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZl
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgYm9vbCBvazsKLSAg
ICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBib29sIG9rID0gZmFs
c2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1M
b2NhdGlvbihhcmdzWzBdLCBvayk7CisKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CkBAIC03NjksOCArODExLDEwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdW5pZm9ybU1hdHIKIAogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCA9CiAgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOwotICAgIGJvb2wgb2s7Ci0gICAgaW50
IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisKKyAgICBib29sIG9rID0gZmFsc2U7
CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2Nh
dGlvbihhcmdzWzBdLCBvayk7CisgICAgCiAgICAgaWYgKCFvaykgewogICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CiAgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTE3OTkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMVGV4dHVy
ZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9j
YXRpb24uaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJ
bWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMTE0NywxMyArMTE0
OCwxNSBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUCiAgICAgfQog
fQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZvcm1Mb2NhdGlvbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQo
KSAhPSB0aGlzKSB7CisgICAgaWYgKCFwcm9ncmFtIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3Jh
bSgpICE9IHByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAg
Ly8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfVkFMVUUgZXJyb3IKICAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KKyAg
ICBsb25nIGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOworICAgIAogICAg
IFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgLy8gRklYTUU6IG1ha2UgdGhp
cyBtb3JlIGVmZmljaWVudCB1c2luZyBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBhbmQgY2FjaGluZyB0
eXBlcyBpbiBpdAogICAgIGludCBhY3RpdmVVbmlmb3JtcyA9IDA7CkBAIC0xMjc1LDEzICsxMjc4
LDE0IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFUKICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiB9CiAKLWxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRV
bmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICgh
cHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBlYyA9IFRZ
UEVfTUlTTUFUQ0hfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOworICAgIFdlYkdMU3Rh
dGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CisgICAgcmV0dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9u
OjpjcmVhdGUocHJvZ3JhbSwgbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
bmFtZSkpOwogfQogCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCkBAIC0xNjQ2LDI4OSArMTY1MCw0NjkgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbiwgeCk7CisgICAgaWYg
KCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAg
ICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
eworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBl
cnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBh
c3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOworICAg
IG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnBy
b2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBH
TF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJS
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRv
IHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHYsIHNpemUp
OworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6
ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgeCkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBpbnQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0
LT51bmlmb3JtMWkobG9jYXRpb24sIHgpOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlz
ZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTFpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihs
b25nIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJH
TEludEFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8
IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBG
SVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0
aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgor
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0xaXYobG9jYXRpb24sIHYsIHNpemUpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZs
b2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJmKGxvY2F0aW9uLCB4LCB5KTsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5w
cm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2Ug
R0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0y
Zihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYo
bG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBX
ZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGlmICghbG9jYXRp
b24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAg
IC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9
IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8v
IEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICgh
dikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlv
biwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTJm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJ
T04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJh
eSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAyKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSkKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4dC0+
dW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9u
LT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFp
c2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENI
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
V2ViR0xJbnRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlv
biB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAg
Ly8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0g
VFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2
KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9u
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVy
cm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFz
c2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LT51
bmlmb3JtMml2KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7CisgICAgbV9jb250ZXh0LT51bmlmb3Jt
Mml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMik7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwg
eik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAh
PSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElE
X09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlm
IG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAg
IG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAv
IDMpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGxvbmcg
bG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQq
IHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8
IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBG
SVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIHYs
IHNpemUgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRpb24s
IGludCB4LCBpbnQgeSwgaW50IHopCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBp
bnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9j
YXRpb24sIHgsIHksIHopOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0o
KSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZB
TElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNpKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihsb25n
IGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTElu
dEFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhN
RTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01J
U01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTog
d2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24sIHYtPmRh
dGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4K
ICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0z
aXYobG9jYXRpb24sIHYsIHNpemUgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRm
KGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRpb24sIHgsIHks
IHosIHcpOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJB
VElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4LCB5LCB6LCB3KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihsb25nIGxvY2F0
aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxvYXRB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6
IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNN
QVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2LT5kYXRh
KCksIHYtPmxlbmd0aCgpIC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgor
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9y
bTRmdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwg
eiwgdyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRB
cnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9
IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURf
T1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYg
bm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAg
bV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8g
NCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYobG9uZyBs
b2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBp
bnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6
IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNN
QVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCB2LCBzaXpl
IC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LCBzaXplIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BF
UkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8g
YXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wg
dHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgor
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplIC8gNCk7CisgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYs
IHNpemUgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9u
LCBib29sIHRyYW5zcG9zZSwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBib29sIHRyYW5zcG9zZSwgV2ViR0xGbG9hdEFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVS
QVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBh
cnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSAvIDkpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gOSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0
cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAg
aWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisg
ICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGlu
CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdiwg
c2l6ZSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJB
VElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFy
cmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSAvIDE2KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDE2KTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29s
IHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAg
ICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IK
KyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQg
aW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2Ci0gICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CisgICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2Us
IHYsIHNpemUgLyAxNik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShy
ZXZpc2lvbiA1MTc5OSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgV2ViR0xQcm9ncmFt
OwogY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7CiBjbGFzcyBXZWJHTFNoYWRlcjsKIGNsYXNzIFdl
YkdMVGV4dHVyZTsKK2NsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOwogY2xhc3MgSFRNTEltYWdl
RWxlbWVudDsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBjbGFzcyBJbWFnZURhdGE7CkBAIC0x
NTcsOSArMTU4LDkgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgICAgIFdlYkdMR2V0
SW5mbyBnZXRUZXhQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9y
bShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVj
KTsKKyAgICAgICAgV2ViR0xHZXRJbmZvIGdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgbG9uZyBn
ZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IGdl
dFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJik7CiAKICAgICAgICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJpYih1bnNpZ25lZCBs
b25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTIy
NCwzNiArMjI1LDM2IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgdm9pZCB1bmlmb3Jt
MWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFmdihsb25n
IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0xZnYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
MWkobG9uZyBsb2NhdGlvbiwgaW50IHgpOwotICAgICAgICB2b2lkIHVuaWZvcm0xaXYobG9uZyBs
b2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFpdihsb25n
IGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmYobG9u
ZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTJmdihs
b25nIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0y
ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlm
b3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
Mml2KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZv
cm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdW5p
Zm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOwotICAgICAg
ICB2b2lkIHVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7
Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50
IHopOwotICAgICAgICB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJh
eSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGlu
dCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRmdihsb25n
IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm00ZnYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
NGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpOwotICAgICAgICB2
b2lkIHVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7Ci0gICAgICAg
IHZvaWQgdW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAg
ICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBX
ZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3Nl
LCBXZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2
KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsK
LSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBXZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4
NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXpl
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hdCB4LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBpbnQgeCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0x
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQg
dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxv
YXRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0yZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAg
ICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
V2ViR0xJbnRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0y
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXpl
LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgRXhjZXB0
aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5
LCBpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAg
ICAgdm9pZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3LCBFeGNlcHRpb25Db2RlJik7CisgICAg
ICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IFdlYkdMRmxvYXRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZv
cm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50
IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdywg
RXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7
CisgICAgICAgIHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1
bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9v
bCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2
YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0
cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
IAogICAgICAgICB2b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25D
b2RlJik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsCShyZXZpc2lvbiA1MTc5OSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDEwICs1NjcsMTAgQEAgbW9k
dWxlIGh0bWwgewogICAgICAgICAvLyBhbnkgZ2V0VGV4UGFyYW1ldGVyKGluIHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
ICAgICAgICAgW0N1c3RvbV0gdm9pZCBnZXRUZXhQYXJhbWV0ZXIoKTsKIAotICAgICAgICAvLyBh
bnkgZ2V0VW5pZm9ybShpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSwgaW4gbG9uZyBsb2NhdGlvbikg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIC8vIGFueSBnZXRVbmlmb3JtKGluIFdlYkdM
UHJvZ3JhbSBwcm9ncmFtLCBpbiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbikgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgZ2V0VW5pZm9ybSgpOwotICAg
ICAgICAKLSAgICAgICAgbG9uZyBnZXRVbmlmb3JtTG9jYXRpb24oaW4gV2ViR0xQcm9ncmFtIHBy
b2dyYW0sIGluIERPTVN0cmluZyBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAg
ICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBnZXRVbmlmb3JtTG9jYXRpb24oaW4gV2ViR0xQcm9ncmFt
IHByb2dyYW0sIGluIERPTVN0cmluZyBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAg
ICAgICAvLyBhbnkgZ2V0VmVydGV4QXR0cmliKGluIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGluIHVu
c2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbQ3VzdG9t
XSB2b2lkIGdldFZlcnRleEF0dHJpYigpOwpAQCAtNjM4LDI2ICs2MzgsMjYgQEAgbW9kdWxlIGh0
bWwgewogICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIEdMYm9vbGVh
biBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgW0N1c3Rv
bV0gdm9pZCB0ZXhTdWJJbWFnZTJEKCk7CiAKLSAgICAgICAgdm9pZCB1bmlmb3JtMWYoaW4gbG9u
ZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTFm
dihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQg
dW5pZm9ybTFpKGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCk7Ci0gICAgICAgIFtDdXN0b21d
IHZvaWQgdW5pZm9ybTFpdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwot
ICAgICAgICB2b2lkIHVuaWZvcm0yZihpbiBsb25nIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBm
bG9hdCB5KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMmZ2KGluIGxvbmcgbG9jYXRp
b24sIGluIFdlYkdMRmxvYXRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmkoaW4gbG9u
ZyBsb2NhdGlvbiwgaW4gbG9uZyB4LCBpbiBsb25nIHkpOwotICAgICAgICBbQ3VzdG9tXSB2b2lk
IHVuaWZvcm0yaXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2KTsKLSAgICAg
ICAgdm9pZCB1bmlmb3JtM2YoaW4gbG9uZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCwgaW4gZmxvYXQg
eSwgaW4gZmxvYXQgeik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTNmdihpbiBsb25n
IGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNp
KGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHopOwotICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zaXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xJ
bnRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGYoaW4gbG9uZyBsb2NhdGlvbiwgaW4g
ZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeiwgaW4gZmxvYXQgdyk7Ci0gICAgICAgIFtD
dXN0b21dIHZvaWQgdW5pZm9ybTRmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJy
YXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRpKGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcg
eCwgaW4gbG9uZyB5LCBpbiBsb25nIHosIGluIGxvbmcgdyk7Ci0gICAgICAgIFtDdXN0b21dIHZv
aWQgdW5pZm9ybTRpdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwotCi0g
ICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihpbiBsb25nIGxvY2F0aW9uLCBp
biBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGluIGxvbmcgbG9jYXRpb24sIGluIGJvb2xl
YW4gdHJhbnNwb3NlLCBpbiBXZWJHTEZsb2F0QXJyYXkgYXJyYXkpOwotICAgICAgICBbQ3VzdG9t
XSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gYm9vbGVhbiB0cmFu
c3Bvc2UsIGluIFdlYkdMRmxvYXRBcnJheSBhcnJheSk7CisgICAgICAgIHZvaWQgdW5pZm9ybTFm
KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBmbG9hdCB4KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMWZ2KGluIFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdikgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFpKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBpbiBsb25nIHgpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHVuaWZvcm0xaXYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGlu
IFdlYkdMSW50QXJyYXkgdikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTJmKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBm
bG9hdCB5KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlm
b3JtMmZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJy
YXkgdikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTJpKGluIFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBsb25nIHgsIGluIGxvbmcgeSkgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTJpdihpbiBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2YoaW4gV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopIHJhaXNlcyhE
T01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zZnYoaW4gV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMRmxvYXRBcnJheSB2KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2koaW4gV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHopIHJhaXNlcyhET01F
eGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zaXYoaW4gV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkgdikgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRmKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB6LCBpbiBmbG9hdCB3KSBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtNGZ2KGlu
IFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdikgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRpKGluIFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB6LCBpbiBs
b25nIHcpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZv
cm00aXYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkg
dikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3Jt
TWF0cml4MmZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFuIHRy
YW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGluIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5
IGFycmF5KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlm
b3JtTWF0cml4NGZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFu
IHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKIAogICAgICAgICB2b2lkICAgICAgICAgdXNlUHJvZ3JhbShpbiBXZWJHTFByb2dyYW0gcHJv
Z3JhbSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgICAgICAgICB2YWxpZGF0
ZVByb2dyYW0oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOwpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxv
Y2F0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1Bhc3NSZWZQdHI8V2ViR0xV
bmlmb3JtTG9jYXRpb24+IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
R0xVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbG9jYXRpb24pKTsKK30KKworV2ViR0xVbmlmb3Jt
TG9jYXRpb246OldlYkdMVW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9u
ZyBsb2NhdGlvbikKKyAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQorICAgICwgbV9sb2NhdGlvbihs
b2NhdGlvbikKK3sKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViR0xVbmlmb3JtTG9jYXRp
b25faAorI2RlZmluZSBXZWJHTFVuaWZvcm1Mb2NhdGlvbl9oCisKKyNpbmNsdWRlICJDYW52YXNP
YmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXZWJHTFVuaWZvcm1Mb2NhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFdl
YkdMVW5pZm9ybUxvY2F0aW9uPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViR0xVbmlmb3Jt
TG9jYXRpb24oKSB7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0
aW9uPiBjcmVhdGUoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKTsKKworICAg
IFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3JhbS5nZXQoKTsg
fQorCisgICAgbG9uZyBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKwor
cHJvdGVjdGVkOgorICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgbG9uZyBsb2NhdGlvbik7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4g
bV9wcm9ncmFtOworICAgIGxvbmcgbV9sb2NhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFdlYkdMVW5pZm9ybUxvY2F0aW9uX2gKSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2Ug
W0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gV2ViR0xVbmlmb3JtTG9jYXRpb24geworICAgIH07Cit9
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA1MTg4MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTEyLTA4ICBQZXRlcnNvbiBUcmV0aGV3
ZXkgIDxwZXRlcnNvbnRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgV2ViR0xVbmlmb3JtTG9jYXRpb24gYW5kIGNo
YW5nZSBBUEkgdG8gdXNlIGl0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzExNzMKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNl
cy9zdHJ1Y3RVbmlmb3JtU2hhZGVyLnZlcnQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL3NjcmlwdC10ZXN0cy91bmlmb3JtLWxvY2F0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi5odG1sOiBBZGRl
ZC4KKwogMjAwOS0xMi0wOCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNv
bT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIFNraXAgYW5vdGhlciBmYWlsaW5nIG1lZGlhIHRl
c3QsIHRoYXQgSSBhbHJlYWR5IG1lbnRpb25lZCBpbiB0aGUgYnVnIHJlcG9ydC4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9j
YXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjEgQEAKK1Rlc3RzIGNhbGxpbmcgV2ViR0wgQVBJcyB3aXRoIG9iamVjdHMgZnJvbSBv
dGhlciBjb250ZXh0cworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgY29udGV4
dEEudXNlUHJvZ3JhbShwcm9ncmFtQTIpIGlzIHVuZGVmaW5lZC4KK1BBU1MgY29udGV4dEEudW5p
Zm9ybU1hdHJpeDRmdihsb2NhdGlvbkEsIGZhbHNlLCBtYXQpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIGNvbnRleHRBLnVz
ZVByb2dyYW0ocHJvZ3JhbUExKSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRleHRBLnVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb25BLCBmYWxzZSwgbWF0KSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRl
eHRBLnVuaWZvcm1NYXRyaXg0ZnYoMCwgZmFsc2UsIG1hdCkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1MgY29udGV4dEEudXNl
UHJvZ3JhbShwcm9ncmFtUykgaXMgdW5kZWZpbmVkLgorUEFTUyBjb250ZXh0QS51bmlmb3JtMWko
bG9jYXRpb25TeCwgMykgaXMgdW5kZWZpbmVkLgorUEFTUyBjb250ZXh0QS51bmlmb3JtMWYobG9j
YXRpb25BcnJheTAsIDQuMCkgaXMgdW5kZWZpbmVkLgorUEFTUyBjb250ZXh0QS5nZXRVbmlmb3Jt
KHByb2dyYW1TLCBsb2NhdGlvblN4KSBpcyAzCitQQVNTIGNvbnRleHRBLmdldFVuaWZvcm0ocHJv
Z3JhbVMsIGxvY2F0aW9uQXJyYXkwKSBpcyA0LjAKK1BBU1MgY29udGV4dEEudXNlUHJvZ3JhbShw
cm9ncmFtVikgaXMgdW5kZWZpbmVkLgorUEFTUyBjb250ZXh0QS51bmlmb3JtNGZ2KGxvY2F0aW9u
VmVjNCwgdmVjKSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRleHRBLmdldFVuaWZvcm0ocHJvZ3Jh
bVYsIGxvY2F0aW9uVmVjNCkgaXMgdmVjCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
dW5pZm9ybS1sb2NhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24uaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNSBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3VuaWZvcm0tbG9jYXRpb24uanMiPjwvc2NyaXB0
PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9yZXNvdXJjZXMvc3RydWN0VW5pZm9ybVNoYWRlci52ZXJ0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9zdHJ1Y3RVbmlmb3JtU2hhZGVy
LnZlcnQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNv
dXJjZXMvc3RydWN0VW5pZm9ybVNoYWRlci52ZXJ0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIz
IEBACithdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKK2F0dHJpYnV0ZSB2ZWMzIGFfbm9ybWFsOwor
Cit1bmlmb3JtIG1hdDQgdV9tb2RlbFZpZXdQcm9qTWF0cml4OworCitzdHJ1Y3QgTXlTdHJ1Y3QK
K3sKKyAgaW50IHg7CisgIGludCB5OworfTsKKwordW5pZm9ybSBNeVN0cnVjdCB1X3N0cnVjdDsK
K3VuaWZvcm0gZmxvYXQgdV9hcnJheVs0XTsKKwordmFyeWluZyB2ZWMzIHZfbm9ybWFsOworCit2
b2lkIG1haW4oKQoreyAKKyAgICB2X25vcm1hbCA9IGFfbm9ybWFsOworICAgIGdsX1Bvc2l0aW9u
ID0gdV9tb2RlbFZpZXdQcm9qTWF0cml4ICogYV92ZXJ0ZXggKworICAgICAgICB2ZWM0KHVfc3Ry
dWN0LngsIHVfc3RydWN0LnksIDAsIDEpICsKKyAgICAgICAgdmVjNCh1X2FycmF5WzBdLCB1X2Fy
cmF5WzFdLCB1X2FycmF5WzJdLCB1X2FycmF5WzNdKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy91bmlmb3JtLWxvY2F0aW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy91bmlmb3Jt
LWxvY2F0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvc2NyaXB0LXRlc3RzL3VuaWZvcm0tbG9jYXRpb24uanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzYgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyBjYWxsaW5nIFdlYkdMIEFQSXMgd2l0aCBvYmpl
Y3RzIGZyb20gb3RoZXIgY29udGV4dHMiKTsKKwordmFyIGNvbnRleHRBID0gY3JlYXRlM0RDb250
ZXh0KCk7Cit2YXIgY29udGV4dEIgPSBjcmVhdGUzRENvbnRleHQoKTsKK3ZhciBwcm9ncmFtQTEg
PSBsb2FkU3RhbmRhcmRQcm9ncmFtKGNvbnRleHRBKTsKK3ZhciBwcm9ncmFtQTIgPSBsb2FkU3Rh
bmRhcmRQcm9ncmFtKGNvbnRleHRBKTsKK3ZhciBwcm9ncmFtQiA9IGxvYWRTdGFuZGFyZFByb2dy
YW0oY29udGV4dEIpOwordmFyIHByb2dyYW1TID0gbG9hZFByb2dyYW0oY29udGV4dEEsICJyZXNv
dXJjZXMvc3RydWN0VW5pZm9ybVNoYWRlci52ZXJ0IiwgInJlc291cmNlcy9mcmFnbWVudFNoYWRl
ci5mcmFnIik7Cit2YXIgcHJvZ3JhbVYgPSBsb2FkUHJvZ3JhbShjb250ZXh0QSwgInJlc291cmNl
cy9mbG9hdFVuaWZvcm1TaGFkZXIudmVydCIsICJyZXNvdXJjZXMvbm9vcFVuaWZvcm1TaGFkZXIu
ZnJhZyIpOwordmFyIGxvY2F0aW9uQSA9IGNvbnRleHRBLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtQTEsICd1X21vZGVsVmlld1Byb2pNYXRyaXgnKTsKK3ZhciBsb2NhdGlvbkIgPSBjb250ZXh0
Qi5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUIsICd1X21vZGVsVmlld1Byb2pNYXRyaXgnKTsK
K3ZhciBsb2NhdGlvblN4ID0gY29udGV4dEEuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1TLCAi
dV9zdHJ1Y3QueCIpOwordmFyIGxvY2F0aW9uQXJyYXkwID0gY29udGV4dEEuZ2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW1TLCAidV9hcnJheVswXSIpOwordmFyIGxvY2F0aW9uVmVjNCA9IGNvbnRl
eHRBLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtViwgImZ2YWw0Iik7CisKK3ZhciB2ZWMgPSBb
MSwgMiwgMywgNF07Cit2YXIgbWF0ID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAx
MSwgMTIsIDEzLCAxNCwgMTUsIDE2XTsKKworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHRBLnVz
ZVByb2dyYW0ocHJvZ3JhbUEyKSIpOworc2hvdWxkVGhyb3coImNvbnRleHRBLnVuaWZvcm1NYXRy
aXg0ZnYobG9jYXRpb25BLCBmYWxzZSwgbWF0KSIpOworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRl
eHRBLnVzZVByb2dyYW0ocHJvZ3JhbUExKSIpOworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHRB
LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb25BLCBmYWxzZSwgbWF0KSIpOworc2hvdWxkVGhyb3co
ImNvbnRleHRBLnVuaWZvcm1NYXRyaXg0ZnYoMCwgZmFsc2UsIG1hdCkiKTsKKworc2hvdWxkQmVV
bmRlZmluZWQoImNvbnRleHRBLnVzZVByb2dyYW0ocHJvZ3JhbVMpIik7CitzaG91bGRCZVVuZGVm
aW5lZCgiY29udGV4dEEudW5pZm9ybTFpKGxvY2F0aW9uU3gsIDMpIik7CitzaG91bGRCZVVuZGVm
aW5lZCgiY29udGV4dEEudW5pZm9ybTFmKGxvY2F0aW9uQXJyYXkwLCA0LjApIik7CisKK3Nob3Vs
ZEJlKCJjb250ZXh0QS5nZXRVbmlmb3JtKHByb2dyYW1TLCBsb2NhdGlvblN4KSIsICIzIik7Citz
aG91bGRCZSgiY29udGV4dEEuZ2V0VW5pZm9ybShwcm9ncmFtUywgbG9jYXRpb25BcnJheTApIiwg
IjQuMCIpOworCitzaG91bGRCZVVuZGVmaW5lZCgiY29udGV4dEEudXNlUHJvZ3JhbShwcm9ncmFt
VikiKTsKK3Nob3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0QS51bmlmb3JtNGZ2KGxvY2F0aW9uVmVj
NCwgdmVjKSIpOworc2hvdWxkQmUoImNvbnRleHRBLmdldFVuaWZvcm0ocHJvZ3JhbVYsIGxvY2F0
aW9uVmVjNCkiLCAidmVjIik7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="26369"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="26371"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44505</attachid>
            <date>2009-12-08 18:23:02 -0800</date>
            <delta_ts>2009-12-08 18:38:14 -0800</delta_ts>
            <desc>Fixed conflicts in WebCore.xcodeproj/project.pbjproj.</desc>
            <filename>uniformlocationpatch.txt</filename>
            <type>text/plain</type>
            <size>85183</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTg4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDktMTItMDggIFBldGVyc29uIFRyZXRoZXdleSAgPHBldGVyc29u
dEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBhbmQgY2hhbmdlIEFQSSB0byB1
c2UgaXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MTE3MworCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24u
aHRtbAorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1l
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmZ1bmN0aW9uRm9yVW5pZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhRnVuY3Rpb25mKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbmkp
OgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uTWF0cml4KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9E
ZXJpdmVkU291cmNlc0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvV2ViR0xVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6KToK
KyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0Z1bmN0aW9uVG9DYWxsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRl
eEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OnVuaWZvcm1IZWxw
ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OnVuaWZvcm1NYXRyaXhIZWxwZXIpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRp
dik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDRmdik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6V2ViR0xVbmlmb3JtTG9jYXRpb24pOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRpb246On5XZWJHTFVuaWZvcm1Mb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6cHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6bG9jYXRpb24pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbDogQWRkZWQuCisKIDIwMDkt
MTItMDggIEFkYW0gTGFuZ2xleSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gNTE4ODMpCisr
KyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4
LDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgV2ViR0xTaGFkZXIgXAogICAgIFdlYkdMU2hvcnRB
cnJheSBcCiAgICAgV2ViR0xUZXh0dXJlIFwKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBcCiAg
ICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBcCiAgICAgV2ViR0xVbnNpZ25lZEludEFycmF5IFwK
ICAgICBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTE4ODMpCisr
KyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQAog
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwnLAogICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCcsCiAgICAgICAgICAgICAnaHRt
bC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMv
V2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkQnl0ZUFycmF5LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xV
bnNpZ25lZEludEFycmF5LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXkuaWRsJywKQEAgLTEzMjQsNiArMTMyNSw4IEBACiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2Vi
R0xUZXh0dXJlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgn
LAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCcsCisg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaCcsCiAgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcCcsCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTU2LDYgKzE1NiwxMSBAQAogCQkwQjkwNTZGODBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQjkwNTZGNjBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRl
ci5jcHAgKi87IH07CiAJCTBCOTA1NkY5MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwQjkwNTZGNzBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTBCRTAzMEEyMEYzMTEyRkIw
MDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEJFMDMwQTEwRjMxMTJGQjAwM0MxQTQ2IC8qIFJlbmRlckxp
bmVCb3hMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDM0YxRjU3
MTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi87IH07CisJCTBD
M0YxRjVCMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEMzRjFGNTgxMEM4ODcxMjAw
RDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi87IH07CisJCTBDM0YxRjVDMTBDODg3
MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDM0YxRjU5MTBDODg3MTIwMEQ3MkNFMSAv
KiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi87IH07CisJCTBDNDUzNDI3MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dl
YkdMVW5pZm9ybUxvY2F0aW9uLmNwcCAqLzsgfTsKKwkJMEM0NTM0MjgxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmggKi87IH07CiAJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5k
ZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5o
ICovOyB9OwogCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5o
ICovOyB9OwogCQkwRjUwMEFBRjBGNTREQjFCMDBFRUY5MjggLyogVHJhbnNmb3JtU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTAwQUFFMEY1
NERCMUIwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5oICovOyB9OwpAQCAtNTM1MSw2ICs1MzU2
LDExIEBACiAJCTBCOTA1NkY2MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlclRocmVh
ZGFibGVMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQjkwNTZGNzBG
MjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBCRTAzMEExMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5l
Qm94TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMaW5lQm94
TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwQzNGMUY1NzEwQzg4NzEyMDBE
NzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwOyBwYXRoID0gY2FudmFzL1dl
YkdMVW5pZm9ybUxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEMz
RjFGNTgxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMVW5pZm9ybUxvY2F0aW9uLmg7IHBhdGggPSBj
YW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEMzRjFGNTkxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGw7IHBhdGggPSBj
YW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEM0NTM0MjYxMENEQkJG
QTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9u
SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTZWxlY3Rpb25J
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVEQTg5MEYzQUFFRTcwMDAw
Q0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOyBwYXRoID0gYW5pbWF0
aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTAwQUFFMEY1NERCMUIwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2Zvcm1TdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTA3MzksNiArMTA3NDksOSBAQAogCQkJCTQ5QzdCOUM1MTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuY3BwICovLAogCQkJCTQ5QzdCOUM2MTA0MkQz
MkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuaCAqLywKIAkJCQk0OUM3QjlDNzEwNDJEMzJGMDAw
OUQ0NDcgLyogV2ViR0xUZXh0dXJlLmlkbCAqLywKKwkJCQkwQzNGMUY1NzEwQzg4NzEyMDBENzJD
RTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovLAorCQkJCTBDM0YxRjU4MTBDODg3MTIw
MEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovLAorCQkJCTBDM0YxRjU5MTBDODg3
MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi8sCiAJCQkJNDlFRUNERDYx
MDUwM0MyMzAwMDk5RkFCIC8qIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwICovLAogCQkJCTQ5
RUVDREQ3MTA1MDNDMjMwMDA5OUZBQiAvKiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmggKi8sCiAJ
CQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRs
ICovLApAQCAtMTI4OTksNiArMTI5MTIsOCBAQAogCQkJCTQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZB
QiAvKiBKU1dlYkdMU2hvcnRBcnJheS5oICovLAogCQkJCTQ5QzdCOTkxMTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU1dlYkdMVGV4dHVyZS5jcHAgKi8sCiAJCQkJNDlDN0I5OTIxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTV2ViR0xUZXh0dXJlLmggKi8sCisJCQkJMEM0NTM0MjUxMENEQkJGQTAwODY5MTU3IC8q
IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovLAorCQkJCTBDNDUzNDI2MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8sCiAJCQkJNDlFRUNFRkExMDUwNzBD
NDAwMDk5RkFCIC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgKi8sCiAJCQkJNDlFRUNF
RkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oICovLAogCQkJ
CTQ5RUVDRUZDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAg
Ki8sCkBAIC0xODIyOSw2ICsxODI0NCw4IEBACiAJCQkJRjRFQUY0QUYxMEM3NDJCMTAwOTEwMEQz
IC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTlEMUUzMzEwQzk3
RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0FERTcyMjYxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51U2VsZWN0aW9uSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCisgCQkJCTBDM0YxRjVCMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVu
aWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisgCQkJCTBDNDUzNDI4MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MzMw
LDYgKzE4MzQ3LDcgQEAKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vy
c29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8q
IHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQk1MTc0RTIwQzEwQTFGNDlB
MDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTBDM0Yx
RjVDMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgaW4gUmVzb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMjAzODMsNiArMjA0MDEsOCBAQAogCQkJCTdBMEU3NzFFMTBDMDBEQjEwMEEw
Mjc2RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
NEVBRjRBRTEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTk5RDFFMzIxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdl
YkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBDNDUzNDI3MTBDREJC
RkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDUxODgzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNX
ZWJHTFNoYWRlci5oIgogI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eS5oIgogI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKQEAgLTE4NywzNyArMTg4LDYgQEAgZW51bSBXaGljaFByb2dyYW1DYWxsIHsKICAg
ICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KIH07CiAKLXN0YXRpYyBKU1ZhbHVlIGdldFBy
b2dyYW1QYXJhbWV0ZXJIZWxwZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBXaGljaFByb2dyYW1DYWxsIHByb2dyYW1D
YWxsKQotewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQqPihvYmotPmltcGwoKSk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0g
dG9XZWJHTFByb2dyYW0oYXJncy5hdCgwKSk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBhcmdzLmF0
KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0
Y2ggKHByb2dyYW1DYWxsKSB7Ci0gICAgY2FzZSBrUHJvZ3JhbVBhcmFtZXRlcjoKLSAgICAgICAg
aW5mbyA9IGNvbnRleHQtPmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVW5pZm9ybToKLSAgICAgICAgLy8gcG5hbWUgLT4g
bG9jYXRpb24KLSAgICAgICAgaW5mbyA9IGNvbnRleHQtPmdldFVuaWZvcm0ocHJvZ3JhbSwgcG5h
bWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChlYykgewotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7
Ci19Ci0KIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGdl
dE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBhcmdzLCBrQnVmZmVyKTsKQEAgLTI2Nyw3ICsy
MzcsMjEgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYQogCiBKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4gZ2V0UHJvZ3JhbVBh
cmFtZXRlckhlbHBlcih0aGlzLCBleGVjLCBhcmdzLCBrUHJvZ3JhbVBhcmFtZXRlcik7CisgICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+
KGltcGwoKSk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJn
cy5hdCgwKSk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFByb2dyYW1QYXJhbWV0
ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKIH0KIAogSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTMwMSw3ICsyODUsMjEgQEAgSlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UAogCiBKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKLSAgICByZXR1cm4gZ2V0UHJvZ3JhbVBhcmFtZXRlckhlbHBlcih0aGlzLCBl
eGVjLCBhcmdzLCBrVW5pZm9ybSk7CisgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKKworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSk7CisgICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJncy5hdCgwKSk7CisgICAgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvYyA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJncy5hdCgxKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCkBAIC00NjMsMzAgKzQ2MSw1NCBAQCBlbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7
CiAgICAgZl91bmlmb3JtTWF0cml4MmZ2LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1h
dHJpeDRmdgogfTsKIAorYm9vbCBmdW5jdGlvbkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxs
IGYpCit7CisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICBjYXNl
IGZfdW5pZm9ybTJ2OgorICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgY2FzZSBmX3VuaWZvcm00
djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBKU0M6OkpTVmFsdWUg
ZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQogewogICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvcik7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uID0gMDsKKyAgICBsb25nIGluZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0aW9u
Rm9yVW5pZm9ybShmKSkKKyAgICAgICAgbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9u
KGFyZ3MuYXQoMCkpOworICAgIGVsc2UKKyAgICAgICAgaW5kZXggPSBhcmdzLmF0KDApLnRvSW50
MzIoZXhlYyk7CiAKLSAgICBsb25nIGxvY2F0aW9uID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAg
UmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gd2ViR0xBcnJheSA9IHRvV2ViR0xGbG9hdEFycmF5KGFy
Z3MuYXQoMSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpZiAod2ViR0xBcnJheSkgewogICAgICAgICBzd2l0Y2goZikgewotICAgICAgICAgICAg
Y2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgd2ViR0xBcnJh
eS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+
dW5pZm9ybTJmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xB
cnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4
dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZl92ZXJ0
ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5
LmdldCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6IGNvbnRl
eHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0
ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Zl91bmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0
KCksIGVjKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OiBjb250ZXh0LT51
bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgd2Vi
R0xBcnJheS5nZXQoKSwgZWMpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6
IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6IGNvbnRleHQtPnZlcnRleEF0
dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBmX3ZlcnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdlYkdM
QXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjog
Y29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJp
YjRmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGlmIChlYyAhPSAwKQorICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIApAQCAtNDk4LDE1ICs1MjAs
MTcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgc3dpdGNoKGYpIHsKLSAg
ICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJy
YXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5p
Zm9ybTJmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3Vu
aWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVh
azsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlv
biwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OiBj
b250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxv
Y2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmli
M3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVh
azsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0
ZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3Jt
MXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LCBzaXplLCBlYyk7IGJyZWFr
OworICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OiBjb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9u
LCBhcnJheSwgc2l6ZSwgZWMpOyBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29u
dGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5
LCBzaXplLCBlYyk7IGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6IGNvbnRl
eHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXksIHNpemUpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFy
cmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjogY29udGV4
dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSwgc2l6ZSk7IGJyZWFrOworICAgICAgICBj
YXNlIGZfdmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJy
YXksIHNpemUpOyBicmVhazsKICAgICB9CisgICAgaWYgKGVjICE9IDApCisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAg
LTUxNSwyMiArNTM5LDI2IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRh
RnUKICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgU3ludGF4RXJyb3IpOwogCi0gICAgbG9uZyBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9J
bnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgIFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJncy5h
dCgwKSk7CisgIAorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAogICAgIFJlZlB0cjxXZWJHTEludEFycmF5PiB3ZWJH
TEFycmF5ID0gdG9XZWJHTEludEFycmF5KGFyZ3MuYXQoMSkpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAod2ViR0xBcnJheSkgewogICAgICAg
ICBzd2l0Y2goZikgewotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5p
Zm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgd2ViR0xBcnJh
eS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+
dW5pZm9ybTNpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgd2ViR0xB
cnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4
dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24s
IHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9y
bTN2OiBjb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRp
dihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOyBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmIChlYyAhPSAwKQorICAgICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogICAgIApAQCAtNTQyLDEyICs1NzAsMTQgQEAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBkYXRhRnVuY3Rpb25pKERhdGFGdQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCiAgICAgc3dpdGNoKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjog
Y29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAg
ICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXks
IHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9y
bTNpdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZv
cm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsK
KyAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwg
YXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRl
eHQtPnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LCBzaXplLCBlYyk7IGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTN2OiBjb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheSwg
c2l6ZSwgZWMpOyBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5p
Zm9ybTRpdihsb2NhdGlvbiwgYXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6IGJyZWFrOwogICAgIH0KKyAgICBpZiAoZWMgIT0gMCkKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNTU2LDcg
KzU4Niw4IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KEQKICAgICBp
ZiAoYXJncy5zaXplKCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOwogCi0gICAgbG9uZyBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxv
Y2F0aW9uKGFyZ3MuYXQoMCkpOworCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIApAQCAtNTY4LDEyICs1OTks
MTUgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAod2ViR0xBcnJheSkg
ewogICAgICAgICBzd2l0Y2goZikgewotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgy
ZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xB
cnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6
IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJh
eS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6IGNv
bnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5n
ZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6IGNvbnRl
eHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQo
KSwgZWMpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OiBjb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0
KCksIGVjKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjogY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5Lmdl
dCgpLCBlYyk7IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmIChlYyAhPSAwKQorICAgICAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogICAgIApAQCAtNTg1LDEwICs2MTksMTIgQEAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwogCiAgICAgc3dpdGNoKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1N
YXRyaXgyZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
YXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6IGNv
bnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUp
OyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6IGNvbnRleHQtPnVuaWZv
cm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4M2Z2OiBjb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIGFycmF5LCBzaXplLCBlYyk7IGJyZWFrOworICAgICAgICBjYXNlIGZfdW5p
Zm9ybU1hdHJpeDRmdjogY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNw
b3NlLCBhcnJheSwgc2l6ZSwgZWMpOyBicmVhazsKICAgICB9CisgICAgaWYgKGVjICE9IDApCisg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xODE2LDYgKzE4MTYsNyBAQCBzdWIgSXNS
ZWZQdHJUeXBlCiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMU2hhZGVyIjsKICAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xTaG9ydEFycmF5IjsKICAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiV2ViR0xUZXh0dXJlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xV
bmlmb3JtTG9jYXRpb24iOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xVbnNpZ25lZEludEFy
cmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xVbnNpZ25lZFNob3J0QXJyYXki
OwpAQCAtMTkxOCw2ICsxOTE5LDcgQEAgbXkgJXR5cGVDYW5GYWlsQ29udmVyc2lvbiA9ICgKICAg
ICAiV2ViR0xTaGFkZXIiID0+IDAsCiAgICAgIldlYkdMU2hvcnRBcnJheSIgPT4gMCwKICAgICAi
V2ViR0xUZXh0dXJlIiA9PiAwLAorICAgICJXZWJHTFVuaWZvcm1Mb2NhdGlvbiIgPT4gMCwKICAg
ICAiQ29tcGFyZUhvdyIgPT4gMCwKICAgICAiRGF0YUdyaWRDb2x1bW4iID0+IDAsCiAgICAgIkRP
TVN0cmluZyIgPT4gMCwKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNB
bGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291
cmNlc0FsbEluT25lLmNwcAkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3
IEBACiAjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTFNoYWRlci5jcHAiCiAjaW5jbHVkZSAiYmlu
ZGluZ3MvVjhXZWJHTFNob3J0QXJyYXkuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xU
ZXh0dXJlLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwIgogI2lu
Y2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5LmNwcCIKICNpbmNsdWRlICJi
aW5kaW5ncy9WOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcCIKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEluZGV4LmNwcAkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5k
ZXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3LDcgQEAKICNpbmNsdWRlICJWOFdl
YkdMU2hhZGVyLmgiCiAjaW5jbHVkZSAiVjhXZWJHTFNob3J0QXJyYXkuaCIKICNpbmNsdWRlICJW
OFdlYkdMVGV4dHVyZS5oIgorI2luY2x1ZGUgIlY4V2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKICNp
bmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJWOFdlYkdMVW5z
aWduZWRJbnRBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCIK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCShyZXZpc2lvbiA1MTg4MykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjAsNiArNDYwLDcgQEAgdHlw
ZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogICAgIFYoV0VCR0xTSEFERVIs
IFdlYkdMU2hhZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIFYoV0VCR0xTSE9SVEFSUkFZLCBXZWJHTFNob3J0QXJyYXkpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIFYoV0VCR0xURVhUVVJFLCBXZWJHTFRleHR1cmUpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xVTklGT1JNTE9D
QVRJT04sIFdlYkdMVW5pZm9ybUxvY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IFYoV0VCR0xVTlNJR05FREJZVEVBUlJBWSwgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSkgICAgICAg
ICAgICAgICAgICAgXAogICAgIFYoV0VCR0xVTlNJR05FRElOVEFSUkFZLCBXZWJHTFVuc2lnbmVk
SW50QXJyYXkpICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYoV0VCR0xVTlNJR05FRFNIT1JU
QVJSQVksIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4
LDcgQEAKICNpbmNsdWRlICJWOFdlYkdMUHJvZ3JhbS5oIgogI2luY2x1ZGUgIlY4V2ViR0xTaGFk
ZXIuaCIKICNpbmNsdWRlICJWOFdlYkdMU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xV
bmlmb3JtTG9jYXRpb24uaCIKICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIK
ICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRJbnRBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xV
bnNpZ25lZFNob3J0QXJyYXkuaCIKQEAgLTI2Miw0NyArMjYzLDIxIEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZ2V0T2JqZWN0UGEKICAgICByZXR1cm4gdG9WOChpbmZvKTsKIH0KIAot
ZW51bSBXaGljaFByb2dyYW1DYWxsIHsKLSAgICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0K
LX07Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0UHJvZ3JhbVBhcmFtZXRlcihj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBXaGljaFByb2dyYW1DYWxsIHByb2dyYW1DYWxsKQor
c3RhdGljIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCiB7Ci0gICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgIT0gMikgewotICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7
Ci0gICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIG9rID0gZmFs
c2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gMDsKKyAgICBpZiAoVjhX
ZWJHTFVuaWZvcm1Mb2NhdGlvbjo6SGFzSW5zdGFuY2UodmFsdWUpKSB7CisgICAgICAgIGxvY2F0
aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xVbmlmb3JtTG9j
YXRpb24+KAorICAgICAgICAgICAgVjhDbGFzc0luZGV4OjpXRUJHTFVOSUZPUk1MT0NBVElPTiwg
dmFsdWUtPlRvT2JqZWN0KCkpOworICAgICAgICBvayA9IHRydWU7CiAgICAgfQotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0K
LSAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVu
ZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFt
ID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gdjhET01XcmFwcGVyVG88
V2ViR0xQcm9ncmFtPihWOENsYXNzSW5kZXg6OldFQkdMUFJPR1JBTSwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOwotICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQg
cG5hbWUgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7Ci0gICAgfQotICAgIFdlYkdMR2V0SW5mbyBpbmZvOwotICAg
IHN3aXRjaCAocHJvZ3JhbUNhbGwpIHsKLSAgICBjYXNlIGtQcm9ncmFtUGFyYW1ldGVyOgotICAg
ICAgICBpbmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwg
ZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtVbmlmb3JtOgotICAgICAgICAvLyBwbmFt
ZSAtPiBsb2NhdGlvbgotICAgICAgICBpbmZvID0gY29udGV4dC0+Z2V0VW5pZm9ybShwcm9ncmFt
LCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0gICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b1Y4KGluZm8pOworICAgIHJldHVybiBsb2Nh
dGlvbjsKIH0KIAorZW51bSBXaGljaFByb2dyYW1DYWxsIHsKKyAgICBrUHJvZ3JhbVBhcmFtZXRl
ciwga1VuaWZvcm0KK307CiAKIENBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRHZXRCdWZmZXJQYXJhbWV0ZXIpCiB7CkBAIC0zNzUsNyArMzUwLDI4IEBAIENBTExCQUNLX0ZV
TkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHQKIENBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJl
bmRlcmluZ0NvbnRleHRHZXRQcm9ncmFtUGFyYW1ldGVyKQogewogICAgIElOQ19TVEFUUygiRE9N
LldlYkdMUmVuZGVyaW5nQ29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKCkiKTsKLSAgICByZXR1
cm4gZ2V0UHJvZ3JhbVBhcmFtZXRlcihhcmdzLCBrUHJvZ3JhbVBhcmFtZXRlcik7CisKKyAgICBp
ZiAoYXJncy5MZW5ndGgoKSAhPSAyKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7CisgICAgV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNlKGFyZ3NbMF0p
ID8gdjhET01XcmFwcGVyVG88V2ViR0xQcm9ncmFtPihWOENsYXNzSW5kZXg6OldFQkdMUFJPR1JB
TSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOworICAgIGJvb2wg
b2s7CisgICAgdW5zaWduZWQgcG5hbWUgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKKyAgICBpZiAo
IW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIFdlYkdM
R2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFt
ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4g
dG9WOChpbmZvKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcikKQEAgLTQyMCw3ICs0MTYsMzAgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEdldFVuaWZvcm0pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmdldFVuaWZvcm0oKSIpOwotICAgIHJldHVybiBnZXRQcm9ncmFtUGFy
YW1ldGVyKGFyZ3MsIGtVbmlmb3JtKTsKKworICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDIpIHsK
KyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQorICAgICAg
ICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdD
b250ZXh0PihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBWOFdl
YkdMUHJvZ3JhbTo6SGFzSW5zdGFuY2UoYXJnc1swXSkgPyB2OERPTVdyYXBwZXJUbzxXZWJHTFBy
b2dyYW0+KFY4Q2xhc3NJbmRleDo6V0VCR0xQUk9HUkFNLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KGFyZ3NbMF0pKSA6IDA7CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzWzFd
LCBvayk7CisKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CisgICAgfQorICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0VW5pZm9ybShwcm9n
cmFtLCBsb2NhdGlvbiwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oZWMpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0K
KyAgICByZXR1cm4gdG9WOChpbmZvKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEdldFZlcnRleEF0dHJpYikKQEAgLTU2MCwzNSArNTc5LDU3IEBAIGVudW0g
RnVuY3Rpb25Ub0NhbGwgewogICAgIGtWZXJ0ZXhBdHRyaWIxdiwga1ZlcnRleEF0dHJpYjJ2LCBr
VmVydGV4QXR0cmliM3YsIGtWZXJ0ZXhBdHRyaWI0dgogfTsKIAorYm9vbCBpc0Z1bmN0aW9uVG9D
YWxsRm9yQXR0cmlidXRlKEZ1bmN0aW9uVG9DYWxsIGZ1bmN0aW9uVG9DYWxsKQoreworICAgIHN3
aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjoKKyAgICBj
YXNlIGtWZXJ0ZXhBdHRyaWIydjoKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIzdjoKKyAgICBjYXNl
IGtWZXJ0ZXhBdHRyaWI0djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblRvQ2FsbCBmdW5jdGlvblRvQ2FsbCkgewogICAg
IC8vIEZvcm1zOgotICAgIC8vICogZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9jYXRpb24sIEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9jYXRpb24sIFdl
YkdMRmxvYXRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliMmZ2KEdMaW50IGxv
Y2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliMmZ2KEdMaW50IGxv
Y2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZlcnRleEF0dHJpYjNm
dihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZlcnRleEF0dHJpYjNm
dihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0
ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0
ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAv
LyAqIGdsVW5pZm9ybTFmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0
YSk7CisgICAgLy8gKiBnbFVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJmdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0yZnYo
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVW5pZm9ybTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkg
ZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTRmdihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00
ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsK
KyAgICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGluZGV4LCBBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGluZGV4LCBXZWJHTEZsb2F0QXJyYXkgZGF0
YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJmdihHTGludCBpbmRleCwgQXJyYXkgZGF0YSk7
CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJmdihHTGludCBpbmRleCwgV2ViR0xGbG9hdEFycmF5
IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIzZnYoR0xpbnQgaW5kZXgsIEFycmF5IGRh
dGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIzZnYoR0xpbnQgaW5kZXgsIFdlYkdMRmxvYXRB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGluZGV4LCBBcnJh
eSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGluZGV4LCBXZWJHTEZs
b2F0QXJyYXkgZGF0YSk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAzKSB7CiAgICAgICAg
IFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIG5v
dEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgfQogCisgICAgYm9vbCBvayA9IGZhbHNlOwor
ICAgIGludCBpbmRleCA9IC0xOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9
IDA7CisKKyAgICBpZiAoaXNGdW5jdGlvblRvQ2FsbEZvckF0dHJpYnV0ZShmdW5jdGlvblRvQ2Fs
bCkpCisgICAgICAgIGluZGV4ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisgICAgZWxzZQorICAg
ICAgICBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJnc1swXSwgb2spOworCiAg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KICAgICAgICAgVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5I
b2xkZXIoKSk7Ci0gICAgYm9vbCBvazsKLSAgICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3Nb
MF0sIG9rKTsKKwogICAgIGlmICghb2spIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKQEAgLTYwMiwxMCArNjQzLDEwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmVy
dGV4QXR0cmkKICAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJm
dihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKICAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0zdjog
Y29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKICAgICAgICAgICAg
IGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkpOyBi
cmVhazsKLSAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhB
dHRyaWIxZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtWZXJ0
ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBhcnJheSk7IGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0
dHJpYjNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Uga1ZlcnRl
eEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGFycmF5KTsgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVmVydGV4QXR0
cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYo
aW5kZXgsIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djog
Y29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7IGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC02MjksMTAgKzY3MCwxMCBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZlcnRleEF0dHJpCiAgICAgICAgIGNhc2Uga1VuaWZvcm0y
djogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CiAgICAg
ICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgZGF0YSwg
bGVuKTsgYnJlYWs7CiAgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRm
dihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Uga1ZlcnRleEF0dHJp
YjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFr
OwotICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2
KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKLSAgICAgICAgY2FzZSBrVmVydGV4QXR0cmli
M3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7
Ci0gICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYo
bG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIx
djogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZGV4LCBkYXRhLCBsZW4pOyBicmVhazsKKyAg
ICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRl
eCwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250
ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBj
YXNlIGtWZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBkYXRh
LCBsZW4pOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJy
ZWFrOwogICAgIH0KICAgICBmYXN0RnJlZShkYXRhKTsKQEAgLTY0MiwxNCArNjgzLDE0IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmVydGV4QXR0cmkKIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdW5pZm9ybUhlbHBlcmkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Ub0NhbGwg
ZnVuY3Rpb25Ub0NhbGwpIHsKICAgICAvLyBGb3JtczoKLSAgICAvLyAqIGdsVW5pZm9ybTFpdihH
TGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0xaXYoR0xpbnQg
bG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0yaXYoR0xp
bnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtM2l2KEdMaW50
IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTNpdihHTGludCBsb2Nh
dGlvbiwgV2ViR0xJbnRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTRpdihHTGludCBs
b2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm00aXYoR0xpbnQgbG9jYXRp
b24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0xaXYoR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMWl2KEdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOworICAgIC8vICog
Z2xVbmlmb3JtMml2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVW5pZm9ybTJpdihHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgV2ViR0xJbnRB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNpdihHTFVuaWZvcm1Mb2NhdGlvbiBsb2Nh
dGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zaXYoR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00aXYo
R0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlm
b3JtNGl2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOwog
CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgewogICAgICAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oU1lOVEFYX0VSUik7CkBAIC02NTgsOCArNjk5LDkgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB1bmlmb3JtSGVscAogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0ID0KICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZl
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgYm9vbCBvazsKLSAg
ICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBib29sIG9rID0gZmFs
c2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1M
b2NhdGlvbihhcmdzWzBdLCBvayk7CisKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CkBAIC03NjksOCArODExLDEwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdW5pZm9ybU1hdHIKIAogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCA9CiAgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOwotICAgIGJvb2wgb2s7Ci0gICAgaW50
IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisKKyAgICBib29sIG9rID0gZmFsc2U7
CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2Nh
dGlvbihhcmdzWzBdLCBvayk7CisgICAgCiAgICAgaWYgKCFvaykgewogICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CiAgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMVGV4dHVy
ZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9j
YXRpb24uaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJ
bWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMTE0NywxMyArMTE0
OCwxNSBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUCiAgICAgfQog
fQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZvcm1Mb2NhdGlvbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQo
KSAhPSB0aGlzKSB7CisgICAgaWYgKCFwcm9ncmFtIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3Jh
bSgpICE9IHByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAg
Ly8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfVkFMVUUgZXJyb3IKICAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KKyAg
ICBsb25nIGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOworICAgIAogICAg
IFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgLy8gRklYTUU6IG1ha2UgdGhp
cyBtb3JlIGVmZmljaWVudCB1c2luZyBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBhbmQgY2FjaGluZyB0
eXBlcyBpbiBpdAogICAgIGludCBhY3RpdmVVbmlmb3JtcyA9IDA7CkBAIC0xMjc1LDEzICsxMjc4
LDE0IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFUKICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiB9CiAKLWxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRV
bmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICgh
cHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBlYyA9IFRZ
UEVfTUlTTUFUQ0hfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOworICAgIFdlYkdMU3Rh
dGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CisgICAgcmV0dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9u
OjpjcmVhdGUocHJvZ3JhbSwgbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
bmFtZSkpOwogfQogCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCkBAIC0xNjQ2LDI4OSArMTY1MCw0NjkgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbiwgeCk7CisgICAgaWYg
KCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAg
ICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
eworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBl
cnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBh
c3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOworICAg
IG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnBy
b2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBH
TF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJS
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRv
IHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHYsIHNpemUp
OworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6
ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgeCkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBpbnQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0
LT51bmlmb3JtMWkobG9jYXRpb24sIHgpOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlz
ZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTFpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihs
b25nIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJH
TEludEFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8
IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBG
SVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0
aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgor
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0xaXYobG9jYXRpb24sIHYsIHNpemUpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZs
b2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJmKGxvY2F0aW9uLCB4LCB5KTsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5w
cm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2Ug
R0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0y
Zihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYo
bG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBX
ZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGlmICghbG9jYXRp
b24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAg
IC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9
IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8v
IEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICgh
dikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlv
biwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTJm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJ
T04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJh
eSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAyKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSkKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4dC0+
dW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9u
LT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFp
c2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENI
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
V2ViR0xJbnRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlv
biB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAg
Ly8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0g
VFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2
KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9u
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVy
cm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFz
c2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LT51
bmlmb3JtMml2KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7CisgICAgbV9jb250ZXh0LT51bmlmb3Jt
Mml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMik7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwg
eik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAh
PSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElE
X09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlm
IG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAg
IG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAv
IDMpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGxvbmcg
bG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQq
IHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8
IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBG
SVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIHYs
IHNpemUgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRpb24s
IGludCB4LCBpbnQgeSwgaW50IHopCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBp
bnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9j
YXRpb24sIHgsIHksIHopOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0o
KSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZB
TElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNpKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihsb25n
IGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTElu
dEFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhN
RTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01J
U01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTog
d2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24sIHYtPmRh
dGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4K
ICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0z
aXYobG9jYXRpb24sIHYsIHNpemUgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRm
KGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRpb24sIHgsIHks
IHosIHcpOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJB
VElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4LCB5LCB6LCB3KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihsb25nIGxvY2F0
aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxvYXRB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6
IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNN
QVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2LT5kYXRh
KCksIHYtPmxlbmd0aCgpIC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgor
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9y
bTRmdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwg
eiwgdyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRB
cnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9
IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURf
T1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYg
bm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAg
bV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8g
NCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYobG9uZyBs
b2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBp
bnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6
IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNN
QVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCB2LCBzaXpl
IC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LCBzaXplIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BF
UkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8g
YXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wg
dHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgor
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplIC8gNCk7CisgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYs
IHNpemUgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9u
LCBib29sIHRyYW5zcG9zZSwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBib29sIHRyYW5zcG9zZSwgV2ViR0xGbG9hdEFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVS
QVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBh
cnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSAvIDkpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gOSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0
cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAg
aWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisg
ICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGlu
CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdiwg
c2l6ZSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJB
VElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFy
cmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSAvIDE2KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDE2KTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29s
IHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAg
ICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IK
KyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQg
aW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2Ci0gICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CisgICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2Us
IHYsIHNpemUgLyAxNik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShy
ZXZpc2lvbiA1MTg4MykKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgV2ViR0xQcm9ncmFt
OwogY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7CiBjbGFzcyBXZWJHTFNoYWRlcjsKIGNsYXNzIFdl
YkdMVGV4dHVyZTsKK2NsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOwogY2xhc3MgSFRNTEltYWdl
RWxlbWVudDsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBjbGFzcyBJbWFnZURhdGE7CkBAIC0x
NTcsOSArMTU4LDkgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgICAgIFdlYkdMR2V0
SW5mbyBnZXRUZXhQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9y
bShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVj
KTsKKyAgICAgICAgV2ViR0xHZXRJbmZvIGdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgbG9uZyBn
ZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IGdl
dFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJik7CiAKICAgICAgICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJpYih1bnNpZ25lZCBs
b25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTIy
NCwzNiArMjI1LDM2IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgdm9pZCB1bmlmb3Jt
MWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFmdihsb25n
IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0xZnYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
MWkobG9uZyBsb2NhdGlvbiwgaW50IHgpOwotICAgICAgICB2b2lkIHVuaWZvcm0xaXYobG9uZyBs
b2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFpdihsb25n
IGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmYobG9u
ZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTJmdihs
b25nIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0y
ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlm
b3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
Mml2KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZv
cm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdW5p
Zm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOwotICAgICAg
ICB2b2lkIHVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7
Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50
IHopOwotICAgICAgICB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJh
eSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGlu
dCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRmdihsb25n
IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm00ZnYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
NGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpOwotICAgICAgICB2
b2lkIHVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7Ci0gICAgICAg
IHZvaWQgdW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAg
ICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBX
ZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3Nl
LCBXZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2
KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsK
LSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBXZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4
NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXpl
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hdCB4LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBpbnQgeCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0x
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQg
dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxv
YXRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0yZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAg
ICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
V2ViR0xJbnRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0y
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXpl
LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgRXhjZXB0
aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5
LCBpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAg
ICAgdm9pZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3LCBFeGNlcHRpb25Db2RlJik7CisgICAg
ICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IFdlYkdMRmxvYXRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZv
cm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50
IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdywg
RXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7
CisgICAgICAgIHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1
bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9v
bCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2
YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0
cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
IAogICAgICAgICB2b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25D
b2RlJik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsCShyZXZpc2lvbiA1MTg4MykKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDEwICs1NjcsMTAgQEAgbW9k
dWxlIGh0bWwgewogICAgICAgICAvLyBhbnkgZ2V0VGV4UGFyYW1ldGVyKGluIHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
ICAgICAgICAgW0N1c3RvbV0gdm9pZCBnZXRUZXhQYXJhbWV0ZXIoKTsKIAotICAgICAgICAvLyBh
bnkgZ2V0VW5pZm9ybShpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSwgaW4gbG9uZyBsb2NhdGlvbikg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIC8vIGFueSBnZXRVbmlmb3JtKGluIFdlYkdM
UHJvZ3JhbSBwcm9ncmFtLCBpbiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbikgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgZ2V0VW5pZm9ybSgpOwotICAg
ICAgICAKLSAgICAgICAgbG9uZyBnZXRVbmlmb3JtTG9jYXRpb24oaW4gV2ViR0xQcm9ncmFtIHBy
b2dyYW0sIGluIERPTVN0cmluZyBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAg
ICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBnZXRVbmlmb3JtTG9jYXRpb24oaW4gV2ViR0xQcm9ncmFt
IHByb2dyYW0sIGluIERPTVN0cmluZyBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAg
ICAgICAvLyBhbnkgZ2V0VmVydGV4QXR0cmliKGluIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGluIHVu
c2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbQ3VzdG9t
XSB2b2lkIGdldFZlcnRleEF0dHJpYigpOwpAQCAtNjM4LDI2ICs2MzgsMjYgQEAgbW9kdWxlIGh0
bWwgewogICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIEdMYm9vbGVh
biBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgW0N1c3Rv
bV0gdm9pZCB0ZXhTdWJJbWFnZTJEKCk7CiAKLSAgICAgICAgdm9pZCB1bmlmb3JtMWYoaW4gbG9u
ZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTFm
dihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQg
dW5pZm9ybTFpKGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCk7Ci0gICAgICAgIFtDdXN0b21d
IHZvaWQgdW5pZm9ybTFpdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwot
ICAgICAgICB2b2lkIHVuaWZvcm0yZihpbiBsb25nIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBm
bG9hdCB5KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMmZ2KGluIGxvbmcgbG9jYXRp
b24sIGluIFdlYkdMRmxvYXRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmkoaW4gbG9u
ZyBsb2NhdGlvbiwgaW4gbG9uZyB4LCBpbiBsb25nIHkpOwotICAgICAgICBbQ3VzdG9tXSB2b2lk
IHVuaWZvcm0yaXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2KTsKLSAgICAg
ICAgdm9pZCB1bmlmb3JtM2YoaW4gbG9uZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCwgaW4gZmxvYXQg
eSwgaW4gZmxvYXQgeik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTNmdihpbiBsb25n
IGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNp
KGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHopOwotICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zaXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xJ
bnRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGYoaW4gbG9uZyBsb2NhdGlvbiwgaW4g
ZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeiwgaW4gZmxvYXQgdyk7Ci0gICAgICAgIFtD
dXN0b21dIHZvaWQgdW5pZm9ybTRmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJy
YXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRpKGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcg
eCwgaW4gbG9uZyB5LCBpbiBsb25nIHosIGluIGxvbmcgdyk7Ci0gICAgICAgIFtDdXN0b21dIHZv
aWQgdW5pZm9ybTRpdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwotCi0g
ICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihpbiBsb25nIGxvY2F0aW9uLCBp
biBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGluIGxvbmcgbG9jYXRpb24sIGluIGJvb2xl
YW4gdHJhbnNwb3NlLCBpbiBXZWJHTEZsb2F0QXJyYXkgYXJyYXkpOwotICAgICAgICBbQ3VzdG9t
XSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gYm9vbGVhbiB0cmFu
c3Bvc2UsIGluIFdlYkdMRmxvYXRBcnJheSBhcnJheSk7CisgICAgICAgIHZvaWQgdW5pZm9ybTFm
KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBmbG9hdCB4KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMWZ2KGluIFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdikgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFpKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBpbiBsb25nIHgpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHVuaWZvcm0xaXYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGlu
IFdlYkdMSW50QXJyYXkgdikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTJmKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBm
bG9hdCB5KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlm
b3JtMmZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJy
YXkgdikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTJpKGluIFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBsb25nIHgsIGluIGxvbmcgeSkgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTJpdihpbiBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2YoaW4gV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopIHJhaXNlcyhE
T01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zZnYoaW4gV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMRmxvYXRBcnJheSB2KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2koaW4gV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHopIHJhaXNlcyhET01F
eGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zaXYoaW4gV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkgdikgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRmKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB6LCBpbiBmbG9hdCB3KSBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtNGZ2KGlu
IFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdikgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRpKGluIFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB6LCBpbiBs
b25nIHcpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZv
cm00aXYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkg
dikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3Jt
TWF0cml4MmZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFuIHRy
YW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGluIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5
IGFycmF5KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlm
b3JtTWF0cml4NGZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFu
IHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKIAogICAgICAgICB2b2lkICAgICAgICAgdXNlUHJvZ3JhbShpbiBXZWJHTFByb2dyYW0gcHJv
Z3JhbSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgICAgICAgICB2YWxpZGF0
ZVByb2dyYW0oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOwpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxv
Y2F0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1Bhc3NSZWZQdHI8V2ViR0xV
bmlmb3JtTG9jYXRpb24+IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
R0xVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbG9jYXRpb24pKTsKK30KKworV2ViR0xVbmlmb3Jt
TG9jYXRpb246OldlYkdMVW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9u
ZyBsb2NhdGlvbikKKyAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQorICAgICwgbV9sb2NhdGlvbihs
b2NhdGlvbikKK3sKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKClByb3Bl
cnR5IGNoYW5nZXMgb246IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24u
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJHTFVuaWZvcm1Mb2NhdGlvbl9oCisj
ZGVmaW5lIFdlYkdMVW5pZm9ybUxvY2F0aW9uX2gKKworI2luY2x1ZGUgIkNhbnZhc09iamVjdC5o
IgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViR0xVbmlm
b3JtTG9jYXRpb24+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJHTFVuaWZvcm1Mb2NhdGlv
bigpIHsgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IGNy
ZWF0ZShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pOworCisgICAgV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV9wcm9ncmFtLmdldCgpOyB9CisKKyAg
ICBsb25nIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorCitwcm90ZWN0
ZWQ6CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25n
IGxvY2F0aW9uKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX3Byb2dy
YW07CisgICAgbG9uZyBtX2xvY2F0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gV2ViR0xVbmlmb3JtTG9jYXRpb25faAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFt
ZTogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFVuaWZvcm1Mb2NhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworbW9kdWxlIGh0bWwgeworICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9M0Rf
Q0FOVkFTXSBXZWJHTFVuaWZvcm1Mb2NhdGlvbiB7CisgICAgfTsKK30KClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTE4
ODMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NSBAQAorMjAwOS0xMi0wOCAgUGV0ZXJzb24gVHJldGhld2V5ICA8cGV0ZXJzb250QGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IFdlYkdMVW5pZm9ybUxvY2F0aW9uIGFuZCBjaGFuZ2UgQVBJIHRvIHVzZSBpdC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMTczCisKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvc3RydWN0VW5pZm9ybVNoYWRlci52
ZXJ0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvdW5p
Zm9ybS1sb2NhdGlvbi5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5p
Zm9ybS1sb2NhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL3VuaWZvcm0tbG9jYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMDktMTItMDggIEFkYW0g
TGFuZ2xleSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlv
bi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvdW5pZm9ybS1sb2NhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorVGVzdHMgY2FsbGluZyBXZWJHTCBBUElzIHdpdGgg
b2JqZWN0cyBmcm9tIG90aGVyIGNvbnRleHRzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworUEFTUyBjb250ZXh0QS51c2VQcm9ncmFtKHByb2dyYW1BMikgaXMgdW5kZWZpbmVkLgorUEFT
UyBjb250ZXh0QS51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uQSwgZmFsc2UsIG1hdCkgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BB
U1MgY29udGV4dEEudXNlUHJvZ3JhbShwcm9ncmFtQTEpIGlzIHVuZGVmaW5lZC4KK1BBU1MgY29u
dGV4dEEudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbkEsIGZhbHNlLCBtYXQpIGlzIHVuZGVmaW5l
ZC4KK1BBU1MgY29udGV4dEEudW5pZm9ybU1hdHJpeDRmdigwLCBmYWxzZSwgbWF0KSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFT
UyBjb250ZXh0QS51c2VQcm9ncmFtKHByb2dyYW1TKSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRl
eHRBLnVuaWZvcm0xaShsb2NhdGlvblN4LCAzKSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRleHRB
LnVuaWZvcm0xZihsb2NhdGlvbkFycmF5MCwgNC4wKSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRl
eHRBLmdldFVuaWZvcm0ocHJvZ3JhbVMsIGxvY2F0aW9uU3gpIGlzIDMKK1BBU1MgY29udGV4dEEu
Z2V0VW5pZm9ybShwcm9ncmFtUywgbG9jYXRpb25BcnJheTApIGlzIDQuMAorUEFTUyBjb250ZXh0
QS51c2VQcm9ncmFtKHByb2dyYW1WKSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRleHRBLnVuaWZv
cm00ZnYobG9jYXRpb25WZWM0LCB2ZWMpIGlzIHVuZGVmaW5lZC4KK1BBU1MgY29udGV4dEEuZ2V0
VW5pZm9ybShwcm9ncmFtViwgbG9jYXRpb25WZWM0KSBpcyB2ZWMKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWV4cGVjdGVkLnR4
dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0
aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy91bmlmb3Jt
LWxvY2F0aW9uLmpzIj48L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlv
bi5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3N0cnVjdFVuaWZvcm1TaGFkZXIu
dmVydAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJj
ZXMvc3RydWN0VW5pZm9ybVNoYWRlci52ZXJ0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3N0cnVjdFVuaWZvcm1TaGFkZXIudmVydAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CithdHRy
aWJ1dGUgdmVjMyBhX25vcm1hbDsKKwordW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3UHJvak1hdHJp
eDsKKworc3RydWN0IE15U3RydWN0Cit7CisgIGludCB4OworICBpbnQgeTsKK307CisKK3VuaWZv
cm0gTXlTdHJ1Y3QgdV9zdHJ1Y3Q7Cit1bmlmb3JtIGZsb2F0IHVfYXJyYXlbNF07CisKK3Zhcnlp
bmcgdmVjMyB2X25vcm1hbDsKKwordm9pZCBtYWluKCkKK3sgCisgICAgdl9ub3JtYWwgPSBhX25v
cm1hbDsKKyAgICBnbF9Qb3NpdGlvbiA9IHVfbW9kZWxWaWV3UHJvak1hdHJpeCAqIGFfdmVydGV4
ICsKKyAgICAgICAgdmVjNCh1X3N0cnVjdC54LCB1X3N0cnVjdC55LCAwLCAxKSArCisgICAgICAg
IHZlYzQodV9hcnJheVswXSwgdV9hcnJheVsxXSwgdV9hcnJheVsyXSwgdV9hcnJheVszXSk7Cit9
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvdW5pZm9y
bS1sb2NhdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9zY3JpcHQtdGVzdHMvdW5pZm9ybS1sb2NhdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy91bmlmb3JtLWxvY2F0aW9uLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACitkZXNjcmlwdGlvbigiVGVzdHMgY2FsbGlu
ZyBXZWJHTCBBUElzIHdpdGggb2JqZWN0cyBmcm9tIG90aGVyIGNvbnRleHRzIik7CisKK3ZhciBj
b250ZXh0QSA9IGNyZWF0ZTNEQ29udGV4dCgpOwordmFyIGNvbnRleHRCID0gY3JlYXRlM0RDb250
ZXh0KCk7Cit2YXIgcHJvZ3JhbUExID0gbG9hZFN0YW5kYXJkUHJvZ3JhbShjb250ZXh0QSk7Cit2
YXIgcHJvZ3JhbUEyID0gbG9hZFN0YW5kYXJkUHJvZ3JhbShjb250ZXh0QSk7Cit2YXIgcHJvZ3Jh
bUIgPSBsb2FkU3RhbmRhcmRQcm9ncmFtKGNvbnRleHRCKTsKK3ZhciBwcm9ncmFtUyA9IGxvYWRQ
cm9ncmFtKGNvbnRleHRBLCAicmVzb3VyY2VzL3N0cnVjdFVuaWZvcm1TaGFkZXIudmVydCIsICJy
ZXNvdXJjZXMvZnJhZ21lbnRTaGFkZXIuZnJhZyIpOwordmFyIHByb2dyYW1WID0gbG9hZFByb2dy
YW0oY29udGV4dEEsICJyZXNvdXJjZXMvZmxvYXRVbmlmb3JtU2hhZGVyLnZlcnQiLCAicmVzb3Vy
Y2VzL25vb3BVbmlmb3JtU2hhZGVyLmZyYWciKTsKK3ZhciBsb2NhdGlvbkEgPSBjb250ZXh0QS5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUExLCAndV9tb2RlbFZpZXdQcm9qTWF0cml4Jyk7Cit2
YXIgbG9jYXRpb25CID0gY29udGV4dEIuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1CLCAndV9t
b2RlbFZpZXdQcm9qTWF0cml4Jyk7Cit2YXIgbG9jYXRpb25TeCA9IGNvbnRleHRBLmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtUywgInVfc3RydWN0LngiKTsKK3ZhciBsb2NhdGlvbkFycmF5MCA9
IGNvbnRleHRBLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtUywgInVfYXJyYXlbMF0iKTsKK3Zh
ciBsb2NhdGlvblZlYzQgPSBjb250ZXh0QS5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbVYsICJm
dmFsNCIpOworCit2YXIgdmVjID0gWzEsIDIsIDMsIDRdOwordmFyIG1hdCA9IFsxLCAyLCAzLCA0
LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNl07CisKK3Nob3VsZEJl
VW5kZWZpbmVkKCJjb250ZXh0QS51c2VQcm9ncmFtKHByb2dyYW1BMikiKTsKK3Nob3VsZFRocm93
KCJjb250ZXh0QS51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uQSwgZmFsc2UsIG1hdCkiKTsKK3No
b3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0QS51c2VQcm9ncmFtKHByb2dyYW1BMSkiKTsKK3Nob3Vs
ZEJlVW5kZWZpbmVkKCJjb250ZXh0QS51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uQSwgZmFsc2Us
IG1hdCkiKTsKK3Nob3VsZFRocm93KCJjb250ZXh0QS51bmlmb3JtTWF0cml4NGZ2KDAsIGZhbHNl
LCBtYXQpIik7CisKK3Nob3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0QS51c2VQcm9ncmFtKHByb2dy
YW1TKSIpOworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHRBLnVuaWZvcm0xaShsb2NhdGlvblN4
LCAzKSIpOworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHRBLnVuaWZvcm0xZihsb2NhdGlvbkFy
cmF5MCwgNC4wKSIpOworCitzaG91bGRCZSgiY29udGV4dEEuZ2V0VW5pZm9ybShwcm9ncmFtUywg
bG9jYXRpb25TeCkiLCAiMyIpOworc2hvdWxkQmUoImNvbnRleHRBLmdldFVuaWZvcm0ocHJvZ3Jh
bVMsIGxvY2F0aW9uQXJyYXkwKSIsICI0LjAiKTsKKworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRl
eHRBLnVzZVByb2dyYW0ocHJvZ3JhbVYpIik7CitzaG91bGRCZVVuZGVmaW5lZCgiY29udGV4dEEu
dW5pZm9ybTRmdihsb2NhdGlvblZlYzQsIHZlYykiKTsKK3Nob3VsZEJlKCJjb250ZXh0QS5nZXRV
bmlmb3JtKHByb2dyYW1WLCBsb2NhdGlvblZlYzQpIiwgInZlYyIpOworCitzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL3VuaWZvcm0tbG9jYXRpb24uanMKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44506</attachid>
            <date>2009-12-08 18:27:13 -0800</date>
            <delta_ts>2009-12-08 18:50:26 -0800</delta_ts>
            <desc>Removed svn:eol-style properties accidentally introduced for new files in last patch.</desc>
            <filename>uniformlocationpatch.txt</filename>
            <type>text/plain</type>
            <size>84161</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTg4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDktMTItMDggIFBldGVyc29uIFRyZXRoZXdleSAgPHBldGVyc29u
dEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBhbmQgY2hhbmdlIEFQSSB0byB1
c2UgaXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MTE3MworCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24u
aHRtbAorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1l
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmZ1bmN0aW9uRm9yVW5pZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhRnVuY3Rpb25mKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbmkp
OgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uTWF0cml4KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9E
ZXJpdmVkU291cmNlc0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvV2ViR0xVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6KToK
KyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0Z1bmN0aW9uVG9DYWxsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRl
eEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OnVuaWZvcm1IZWxw
ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OnVuaWZvcm1NYXRyaXhIZWxwZXIpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRp
dik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDRmdik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6V2ViR0xVbmlmb3JtTG9jYXRpb24pOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRpb246On5XZWJHTFVuaWZvcm1Mb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6cHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6bG9jYXRpb24pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbDogQWRkZWQuCisKIDIwMDkt
MTItMDggIEFkYW0gTGFuZ2xleSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gNTE4ODMpCisr
KyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4
LDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgV2ViR0xTaGFkZXIgXAogICAgIFdlYkdMU2hvcnRB
cnJheSBcCiAgICAgV2ViR0xUZXh0dXJlIFwKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBcCiAg
ICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBcCiAgICAgV2ViR0xVbnNpZ25lZEludEFycmF5IFwK
ICAgICBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTE4ODMpCisr
KyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQAog
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwnLAogICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCcsCiAgICAgICAgICAgICAnaHRt
bC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMv
V2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkQnl0ZUFycmF5LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xV
bnNpZ25lZEludEFycmF5LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXkuaWRsJywKQEAgLTEzMjQsNiArMTMyNSw4IEBACiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2Vi
R0xUZXh0dXJlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgn
LAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCcsCisg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaCcsCiAgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcCcsCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTU2LDYgKzE1NiwxMSBAQAogCQkwQjkwNTZGODBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQjkwNTZGNjBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRl
ci5jcHAgKi87IH07CiAJCTBCOTA1NkY5MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwQjkwNTZGNzBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTBCRTAzMEEyMEYzMTEyRkIw
MDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEJFMDMwQTEwRjMxMTJGQjAwM0MxQTQ2IC8qIFJlbmRlckxp
bmVCb3hMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDM0YxRjU3
MTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi87IH07CisJCTBD
M0YxRjVCMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEMzRjFGNTgxMEM4ODcxMjAw
RDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi87IH07CisJCTBDM0YxRjVDMTBDODg3
MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDM0YxRjU5MTBDODg3MTIwMEQ3MkNFMSAv
KiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi87IH07CisJCTBDNDUzNDI3MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dl
YkdMVW5pZm9ybUxvY2F0aW9uLmNwcCAqLzsgfTsKKwkJMEM0NTM0MjgxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmggKi87IH07CiAJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5k
ZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5o
ICovOyB9OwogCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5o
ICovOyB9OwogCQkwRjUwMEFBRjBGNTREQjFCMDBFRUY5MjggLyogVHJhbnNmb3JtU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTAwQUFFMEY1
NERCMUIwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5oICovOyB9OwpAQCAtNTM1MSw2ICs1MzU2
LDExIEBACiAJCTBCOTA1NkY2MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlclRocmVh
ZGFibGVMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQjkwNTZGNzBG
MjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBCRTAzMEExMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5l
Qm94TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMaW5lQm94
TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwQzNGMUY1NzEwQzg4NzEyMDBE
NzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwOyBwYXRoID0gY2FudmFzL1dl
YkdMVW5pZm9ybUxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEMz
RjFGNTgxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMVW5pZm9ybUxvY2F0aW9uLmg7IHBhdGggPSBj
YW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEMzRjFGNTkxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGw7IHBhdGggPSBj
YW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEM0NTM0MjYxMENEQkJG
QTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9u
SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTZWxlY3Rpb25J
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVEQTg5MEYzQUFFRTcwMDAw
Q0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOyBwYXRoID0gYW5pbWF0
aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTAwQUFFMEY1NERCMUIwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2Zvcm1TdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTA3MzksNiArMTA3NDksOSBAQAogCQkJCTQ5QzdCOUM1MTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuY3BwICovLAogCQkJCTQ5QzdCOUM2MTA0MkQz
MkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuaCAqLywKIAkJCQk0OUM3QjlDNzEwNDJEMzJGMDAw
OUQ0NDcgLyogV2ViR0xUZXh0dXJlLmlkbCAqLywKKwkJCQkwQzNGMUY1NzEwQzg4NzEyMDBENzJD
RTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovLAorCQkJCTBDM0YxRjU4MTBDODg3MTIw
MEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovLAorCQkJCTBDM0YxRjU5MTBDODg3
MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi8sCiAJCQkJNDlFRUNERDYx
MDUwM0MyMzAwMDk5RkFCIC8qIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwICovLAogCQkJCTQ5
RUVDREQ3MTA1MDNDMjMwMDA5OUZBQiAvKiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmggKi8sCiAJ
CQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRs
ICovLApAQCAtMTI4OTksNiArMTI5MTIsOCBAQAogCQkJCTQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZB
QiAvKiBKU1dlYkdMU2hvcnRBcnJheS5oICovLAogCQkJCTQ5QzdCOTkxMTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU1dlYkdMVGV4dHVyZS5jcHAgKi8sCiAJCQkJNDlDN0I5OTIxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTV2ViR0xUZXh0dXJlLmggKi8sCisJCQkJMEM0NTM0MjUxMENEQkJGQTAwODY5MTU3IC8q
IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovLAorCQkJCTBDNDUzNDI2MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8sCiAJCQkJNDlFRUNFRkExMDUwNzBD
NDAwMDk5RkFCIC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgKi8sCiAJCQkJNDlFRUNF
RkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oICovLAogCQkJ
CTQ5RUVDRUZDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAg
Ki8sCkBAIC0xODIyOSw2ICsxODI0NCw4IEBACiAJCQkJRjRFQUY0QUYxMEM3NDJCMTAwOTEwMEQz
IC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTlEMUUzMzEwQzk3
RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0FERTcyMjYxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51U2VsZWN0aW9uSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCisgCQkJCTBDM0YxRjVCMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVu
aWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisgCQkJCTBDNDUzNDI4MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MzMw
LDYgKzE4MzQ3LDcgQEAKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vy
c29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8q
IHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQk1MTc0RTIwQzEwQTFGNDlB
MDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTBDM0Yx
RjVDMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgaW4gUmVzb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMjAzODMsNiArMjA0MDEsOCBAQAogCQkJCTdBMEU3NzFFMTBDMDBEQjEwMEEw
Mjc2RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
NEVBRjRBRTEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTk5RDFFMzIxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdl
YkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBDNDUzNDI3MTBDREJC
RkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDUxODgzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNX
ZWJHTFNoYWRlci5oIgogI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eS5oIgogI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKQEAgLTE4NywzNyArMTg4LDYgQEAgZW51bSBXaGljaFByb2dyYW1DYWxsIHsKICAg
ICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KIH07CiAKLXN0YXRpYyBKU1ZhbHVlIGdldFBy
b2dyYW1QYXJhbWV0ZXJIZWxwZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBXaGljaFByb2dyYW1DYWxsIHByb2dyYW1D
YWxsKQotewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQqPihvYmotPmltcGwoKSk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0g
dG9XZWJHTFByb2dyYW0oYXJncy5hdCgwKSk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBhcmdzLmF0
KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0
Y2ggKHByb2dyYW1DYWxsKSB7Ci0gICAgY2FzZSBrUHJvZ3JhbVBhcmFtZXRlcjoKLSAgICAgICAg
aW5mbyA9IGNvbnRleHQtPmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVW5pZm9ybToKLSAgICAgICAgLy8gcG5hbWUgLT4g
bG9jYXRpb24KLSAgICAgICAgaW5mbyA9IGNvbnRleHQtPmdldFVuaWZvcm0ocHJvZ3JhbSwgcG5h
bWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChlYykgewotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7
Ci19Ci0KIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGdl
dE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBhcmdzLCBrQnVmZmVyKTsKQEAgLTI2Nyw3ICsy
MzcsMjEgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYQogCiBKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4gZ2V0UHJvZ3JhbVBh
cmFtZXRlckhlbHBlcih0aGlzLCBleGVjLCBhcmdzLCBrUHJvZ3JhbVBhcmFtZXRlcik7CisgICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+
KGltcGwoKSk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJn
cy5hdCgwKSk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFByb2dyYW1QYXJhbWV0
ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKIH0KIAogSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTMwMSw3ICsyODUsMjEgQEAgSlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UAogCiBKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKLSAgICByZXR1cm4gZ2V0UHJvZ3JhbVBhcmFtZXRlckhlbHBlcih0aGlzLCBl
eGVjLCBhcmdzLCBrVW5pZm9ybSk7CisgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKKworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSk7CisgICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJncy5hdCgwKSk7CisgICAgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvYyA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJncy5hdCgxKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCkBAIC00NjMsMzAgKzQ2MSw1NCBAQCBlbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7
CiAgICAgZl91bmlmb3JtTWF0cml4MmZ2LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1h
dHJpeDRmdgogfTsKIAorYm9vbCBmdW5jdGlvbkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxs
IGYpCit7CisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICBjYXNl
IGZfdW5pZm9ybTJ2OgorICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgY2FzZSBmX3VuaWZvcm00
djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBKU0M6OkpTVmFsdWUg
ZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQogewogICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvcik7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uID0gMDsKKyAgICBsb25nIGluZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0aW9u
Rm9yVW5pZm9ybShmKSkKKyAgICAgICAgbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9u
KGFyZ3MuYXQoMCkpOworICAgIGVsc2UKKyAgICAgICAgaW5kZXggPSBhcmdzLmF0KDApLnRvSW50
MzIoZXhlYyk7CiAKLSAgICBsb25nIGxvY2F0aW9uID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAg
UmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gd2ViR0xBcnJheSA9IHRvV2ViR0xGbG9hdEFycmF5KGFy
Z3MuYXQoMSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpZiAod2ViR0xBcnJheSkgewogICAgICAgICBzd2l0Y2goZikgewotICAgICAgICAgICAg
Y2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgd2ViR0xBcnJh
eS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+
dW5pZm9ybTJmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xB
cnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4
dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZl92ZXJ0
ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5
LmdldCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6IGNvbnRl
eHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0
ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Zl91bmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0
KCksIGVjKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OiBjb250ZXh0LT51
bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgd2Vi
R0xBcnJheS5nZXQoKSwgZWMpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6
IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6IGNvbnRleHQtPnZlcnRleEF0
dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBmX3ZlcnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdlYkdM
QXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjog
Y29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJp
YjRmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGlmIChlYyAhPSAwKQorICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIApAQCAtNDk4LDE1ICs1MjAs
MTcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgc3dpdGNoKGYpIHsKLSAg
ICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJy
YXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5p
Zm9ybTJmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3Vu
aWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVh
azsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlv
biwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OiBj
b250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxv
Y2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmli
M3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVh
azsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0
ZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3Jt
MXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LCBzaXplLCBlYyk7IGJyZWFr
OworICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OiBjb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9u
LCBhcnJheSwgc2l6ZSwgZWMpOyBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29u
dGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5
LCBzaXplLCBlYyk7IGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6IGNvbnRl
eHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXksIHNpemUpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFy
cmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjogY29udGV4
dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSwgc2l6ZSk7IGJyZWFrOworICAgICAgICBj
YXNlIGZfdmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJy
YXksIHNpemUpOyBicmVhazsKICAgICB9CisgICAgaWYgKGVjICE9IDApCisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAg
LTUxNSwyMiArNTM5LDI2IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRh
RnUKICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgU3ludGF4RXJyb3IpOwogCi0gICAgbG9uZyBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9J
bnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgIFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJncy5h
dCgwKSk7CisgIAorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAogICAgIFJlZlB0cjxXZWJHTEludEFycmF5PiB3ZWJH
TEFycmF5ID0gdG9XZWJHTEludEFycmF5KGFyZ3MuYXQoMSkpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAod2ViR0xBcnJheSkgewogICAgICAg
ICBzd2l0Y2goZikgewotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5p
Zm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgd2ViR0xBcnJh
eS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+
dW5pZm9ybTNpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgd2ViR0xB
cnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4
dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24s
IHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9y
bTN2OiBjb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRp
dihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOyBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmIChlYyAhPSAwKQorICAgICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogICAgIApAQCAtNTQyLDEyICs1NzAsMTQgQEAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBkYXRhRnVuY3Rpb25pKERhdGFGdQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCiAgICAgc3dpdGNoKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjog
Y29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAg
ICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXks
IHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9y
bTNpdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZv
cm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsK
KyAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwg
YXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRl
eHQtPnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LCBzaXplLCBlYyk7IGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTN2OiBjb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheSwg
c2l6ZSwgZWMpOyBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5p
Zm9ybTRpdihsb2NhdGlvbiwgYXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6IGJyZWFrOwogICAgIH0KKyAgICBpZiAoZWMgIT0gMCkKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNTU2LDcg
KzU4Niw4IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KEQKICAgICBp
ZiAoYXJncy5zaXplKCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOwogCi0gICAgbG9uZyBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxv
Y2F0aW9uKGFyZ3MuYXQoMCkpOworCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIApAQCAtNTY4LDEyICs1OTks
MTUgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAod2ViR0xBcnJheSkg
ewogICAgICAgICBzd2l0Y2goZikgewotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgy
ZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xB
cnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6
IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJh
eS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6IGNv
bnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5n
ZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6IGNvbnRl
eHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQo
KSwgZWMpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OiBjb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0
KCksIGVjKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjogY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5Lmdl
dCgpLCBlYyk7IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmIChlYyAhPSAwKQorICAgICAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogICAgIApAQCAtNTg1LDEwICs2MTksMTIgQEAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwogCiAgICAgc3dpdGNoKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1N
YXRyaXgyZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
YXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6IGNv
bnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUp
OyBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6IGNvbnRleHQtPnVuaWZv
cm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUsIGVjKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4M2Z2OiBjb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIGFycmF5LCBzaXplLCBlYyk7IGJyZWFrOworICAgICAgICBjYXNlIGZfdW5p
Zm9ybU1hdHJpeDRmdjogY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNw
b3NlLCBhcnJheSwgc2l6ZSwgZWMpOyBicmVhazsKICAgICB9CisgICAgaWYgKGVjICE9IDApCisg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xODE2LDYgKzE4MTYsNyBAQCBzdWIgSXNS
ZWZQdHJUeXBlCiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMU2hhZGVyIjsKICAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xTaG9ydEFycmF5IjsKICAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiV2ViR0xUZXh0dXJlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xV
bmlmb3JtTG9jYXRpb24iOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xVbnNpZ25lZEludEFy
cmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xVbnNpZ25lZFNob3J0QXJyYXki
OwpAQCAtMTkxOCw2ICsxOTE5LDcgQEAgbXkgJXR5cGVDYW5GYWlsQ29udmVyc2lvbiA9ICgKICAg
ICAiV2ViR0xTaGFkZXIiID0+IDAsCiAgICAgIldlYkdMU2hvcnRBcnJheSIgPT4gMCwKICAgICAi
V2ViR0xUZXh0dXJlIiA9PiAwLAorICAgICJXZWJHTFVuaWZvcm1Mb2NhdGlvbiIgPT4gMCwKICAg
ICAiQ29tcGFyZUhvdyIgPT4gMCwKICAgICAiRGF0YUdyaWRDb2x1bW4iID0+IDAsCiAgICAgIkRP
TVN0cmluZyIgPT4gMCwKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNB
bGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291
cmNlc0FsbEluT25lLmNwcAkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3
IEBACiAjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTFNoYWRlci5jcHAiCiAjaW5jbHVkZSAiYmlu
ZGluZ3MvVjhXZWJHTFNob3J0QXJyYXkuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xU
ZXh0dXJlLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwIgogI2lu
Y2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5LmNwcCIKICNpbmNsdWRlICJi
aW5kaW5ncy9WOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcCIKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEluZGV4LmNwcAkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5k
ZXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3LDcgQEAKICNpbmNsdWRlICJWOFdl
YkdMU2hhZGVyLmgiCiAjaW5jbHVkZSAiVjhXZWJHTFNob3J0QXJyYXkuaCIKICNpbmNsdWRlICJW
OFdlYkdMVGV4dHVyZS5oIgorI2luY2x1ZGUgIlY4V2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKICNp
bmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJWOFdlYkdMVW5z
aWduZWRJbnRBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCIK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCShyZXZpc2lvbiA1MTg4MykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjAsNiArNDYwLDcgQEAgdHlw
ZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogICAgIFYoV0VCR0xTSEFERVIs
IFdlYkdMU2hhZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIFYoV0VCR0xTSE9SVEFSUkFZLCBXZWJHTFNob3J0QXJyYXkpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIFYoV0VCR0xURVhUVVJFLCBXZWJHTFRleHR1cmUpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xVTklGT1JNTE9D
QVRJT04sIFdlYkdMVW5pZm9ybUxvY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IFYoV0VCR0xVTlNJR05FREJZVEVBUlJBWSwgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSkgICAgICAg
ICAgICAgICAgICAgXAogICAgIFYoV0VCR0xVTlNJR05FRElOVEFSUkFZLCBXZWJHTFVuc2lnbmVk
SW50QXJyYXkpICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYoV0VCR0xVTlNJR05FRFNIT1JU
QVJSQVksIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4
LDcgQEAKICNpbmNsdWRlICJWOFdlYkdMUHJvZ3JhbS5oIgogI2luY2x1ZGUgIlY4V2ViR0xTaGFk
ZXIuaCIKICNpbmNsdWRlICJWOFdlYkdMU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xV
bmlmb3JtTG9jYXRpb24uaCIKICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIK
ICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRJbnRBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xV
bnNpZ25lZFNob3J0QXJyYXkuaCIKQEAgLTI2Miw0NyArMjYzLDIxIEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZ2V0T2JqZWN0UGEKICAgICByZXR1cm4gdG9WOChpbmZvKTsKIH0KIAot
ZW51bSBXaGljaFByb2dyYW1DYWxsIHsKLSAgICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0K
LX07Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0UHJvZ3JhbVBhcmFtZXRlcihj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBXaGljaFByb2dyYW1DYWxsIHByb2dyYW1DYWxsKQor
c3RhdGljIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCiB7Ci0gICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgIT0gMikgewotICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7
Ci0gICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIG9rID0gZmFs
c2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gMDsKKyAgICBpZiAoVjhX
ZWJHTFVuaWZvcm1Mb2NhdGlvbjo6SGFzSW5zdGFuY2UodmFsdWUpKSB7CisgICAgICAgIGxvY2F0
aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xVbmlmb3JtTG9j
YXRpb24+KAorICAgICAgICAgICAgVjhDbGFzc0luZGV4OjpXRUJHTFVOSUZPUk1MT0NBVElPTiwg
dmFsdWUtPlRvT2JqZWN0KCkpOworICAgICAgICBvayA9IHRydWU7CiAgICAgfQotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0K
LSAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVu
ZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFt
ID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gdjhET01XcmFwcGVyVG88
V2ViR0xQcm9ncmFtPihWOENsYXNzSW5kZXg6OldFQkdMUFJPR1JBTSwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOwotICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQg
cG5hbWUgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7Ci0gICAgfQotICAgIFdlYkdMR2V0SW5mbyBpbmZvOwotICAg
IHN3aXRjaCAocHJvZ3JhbUNhbGwpIHsKLSAgICBjYXNlIGtQcm9ncmFtUGFyYW1ldGVyOgotICAg
ICAgICBpbmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwg
ZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtVbmlmb3JtOgotICAgICAgICAvLyBwbmFt
ZSAtPiBsb2NhdGlvbgotICAgICAgICBpbmZvID0gY29udGV4dC0+Z2V0VW5pZm9ybShwcm9ncmFt
LCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0gICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b1Y4KGluZm8pOworICAgIHJldHVybiBsb2Nh
dGlvbjsKIH0KIAorZW51bSBXaGljaFByb2dyYW1DYWxsIHsKKyAgICBrUHJvZ3JhbVBhcmFtZXRl
ciwga1VuaWZvcm0KK307CiAKIENBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRHZXRCdWZmZXJQYXJhbWV0ZXIpCiB7CkBAIC0zNzUsNyArMzUwLDI4IEBAIENBTExCQUNLX0ZV
TkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHQKIENBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJl
bmRlcmluZ0NvbnRleHRHZXRQcm9ncmFtUGFyYW1ldGVyKQogewogICAgIElOQ19TVEFUUygiRE9N
LldlYkdMUmVuZGVyaW5nQ29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKCkiKTsKLSAgICByZXR1
cm4gZ2V0UHJvZ3JhbVBhcmFtZXRlcihhcmdzLCBrUHJvZ3JhbVBhcmFtZXRlcik7CisKKyAgICBp
ZiAoYXJncy5MZW5ndGgoKSAhPSAyKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7CisgICAgV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNlKGFyZ3NbMF0p
ID8gdjhET01XcmFwcGVyVG88V2ViR0xQcm9ncmFtPihWOENsYXNzSW5kZXg6OldFQkdMUFJPR1JB
TSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOworICAgIGJvb2wg
b2s7CisgICAgdW5zaWduZWQgcG5hbWUgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKKyAgICBpZiAo
IW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIFdlYkdM
R2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFt
ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4g
dG9WOChpbmZvKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcikKQEAgLTQyMCw3ICs0MTYsMzAgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEdldFVuaWZvcm0pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmdldFVuaWZvcm0oKSIpOwotICAgIHJldHVybiBnZXRQcm9ncmFtUGFy
YW1ldGVyKGFyZ3MsIGtVbmlmb3JtKTsKKworICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDIpIHsK
KyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQorICAgICAg
ICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdD
b250ZXh0PihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBWOFdl
YkdMUHJvZ3JhbTo6SGFzSW5zdGFuY2UoYXJnc1swXSkgPyB2OERPTVdyYXBwZXJUbzxXZWJHTFBy
b2dyYW0+KFY4Q2xhc3NJbmRleDo6V0VCR0xQUk9HUkFNLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KGFyZ3NbMF0pKSA6IDA7CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzWzFd
LCBvayk7CisKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CisgICAgfQorICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0VW5pZm9ybShwcm9n
cmFtLCBsb2NhdGlvbiwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oZWMpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0K
KyAgICByZXR1cm4gdG9WOChpbmZvKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEdldFZlcnRleEF0dHJpYikKQEAgLTU2MCwzNSArNTc5LDU3IEBAIGVudW0g
RnVuY3Rpb25Ub0NhbGwgewogICAgIGtWZXJ0ZXhBdHRyaWIxdiwga1ZlcnRleEF0dHJpYjJ2LCBr
VmVydGV4QXR0cmliM3YsIGtWZXJ0ZXhBdHRyaWI0dgogfTsKIAorYm9vbCBpc0Z1bmN0aW9uVG9D
YWxsRm9yQXR0cmlidXRlKEZ1bmN0aW9uVG9DYWxsIGZ1bmN0aW9uVG9DYWxsKQoreworICAgIHN3
aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjoKKyAgICBj
YXNlIGtWZXJ0ZXhBdHRyaWIydjoKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIzdjoKKyAgICBjYXNl
IGtWZXJ0ZXhBdHRyaWI0djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblRvQ2FsbCBmdW5jdGlvblRvQ2FsbCkgewogICAg
IC8vIEZvcm1zOgotICAgIC8vICogZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9jYXRpb24sIEFy
cmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9jYXRpb24sIFdl
YkdMRmxvYXRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliMmZ2KEdMaW50IGxv
Y2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliMmZ2KEdMaW50IGxv
Y2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZlcnRleEF0dHJpYjNm
dihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFZlcnRleEF0dHJpYjNm
dihHTGludCBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0
ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xWZXJ0
ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAv
LyAqIGdsVW5pZm9ybTFmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0
YSk7CisgICAgLy8gKiBnbFVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJmdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0yZnYo
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVW5pZm9ybTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkg
ZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTRmdihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00
ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsK
KyAgICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGluZGV4LCBBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGluZGV4LCBXZWJHTEZsb2F0QXJyYXkgZGF0
YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJmdihHTGludCBpbmRleCwgQXJyYXkgZGF0YSk7
CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJmdihHTGludCBpbmRleCwgV2ViR0xGbG9hdEFycmF5
IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIzZnYoR0xpbnQgaW5kZXgsIEFycmF5IGRh
dGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIzZnYoR0xpbnQgaW5kZXgsIFdlYkdMRmxvYXRB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGluZGV4LCBBcnJh
eSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGluZGV4LCBXZWJHTEZs
b2F0QXJyYXkgZGF0YSk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAzKSB7CiAgICAgICAg
IFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIG5v
dEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgfQogCisgICAgYm9vbCBvayA9IGZhbHNlOwor
ICAgIGludCBpbmRleCA9IC0xOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9
IDA7CisKKyAgICBpZiAoaXNGdW5jdGlvblRvQ2FsbEZvckF0dHJpYnV0ZShmdW5jdGlvblRvQ2Fs
bCkpCisgICAgICAgIGluZGV4ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisgICAgZWxzZQorICAg
ICAgICBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJnc1swXSwgb2spOworCiAg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KICAgICAgICAgVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5I
b2xkZXIoKSk7Ci0gICAgYm9vbCBvazsKLSAgICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3Nb
MF0sIG9rKTsKKwogICAgIGlmICghb2spIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKQEAgLTYwMiwxMCArNjQzLDEwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmVy
dGV4QXR0cmkKICAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJm
dihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKICAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0zdjog
Y29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKICAgICAgICAgICAg
IGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkpOyBi
cmVhazsKLSAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhB
dHRyaWIxZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtWZXJ0
ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBhcnJheSk7IGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0
dHJpYjNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Uga1ZlcnRl
eEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGFycmF5KTsgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVmVydGV4QXR0
cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYo
aW5kZXgsIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djog
Y29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7IGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC02MjksMTAgKzY3MCwxMCBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZlcnRleEF0dHJpCiAgICAgICAgIGNhc2Uga1VuaWZvcm0y
djogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CiAgICAg
ICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgZGF0YSwg
bGVuKTsgYnJlYWs7CiAgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRm
dihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Uga1ZlcnRleEF0dHJp
YjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFr
OwotICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2
KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKLSAgICAgICAgY2FzZSBrVmVydGV4QXR0cmli
M3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7
Ci0gICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYo
bG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIx
djogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZGV4LCBkYXRhLCBsZW4pOyBicmVhazsKKyAg
ICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRl
eCwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250
ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBj
YXNlIGtWZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBkYXRh
LCBsZW4pOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJy
ZWFrOwogICAgIH0KICAgICBmYXN0RnJlZShkYXRhKTsKQEAgLTY0MiwxNCArNjgzLDE0IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmVydGV4QXR0cmkKIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdW5pZm9ybUhlbHBlcmkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Ub0NhbGwg
ZnVuY3Rpb25Ub0NhbGwpIHsKICAgICAvLyBGb3JtczoKLSAgICAvLyAqIGdsVW5pZm9ybTFpdihH
TGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0xaXYoR0xpbnQg
bG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0yaXYoR0xp
bnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtM2l2KEdMaW50
IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTNpdihHTGludCBsb2Nh
dGlvbiwgV2ViR0xJbnRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTRpdihHTGludCBs
b2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm00aXYoR0xpbnQgbG9jYXRp
b24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0xaXYoR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMWl2KEdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOworICAgIC8vICog
Z2xVbmlmb3JtMml2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVW5pZm9ybTJpdihHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgV2ViR0xJbnRB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNpdihHTFVuaWZvcm1Mb2NhdGlvbiBsb2Nh
dGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zaXYoR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00aXYo
R0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlm
b3JtNGl2KEdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOwog
CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgewogICAgICAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oU1lOVEFYX0VSUik7CkBAIC02NTgsOCArNjk5LDkgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB1bmlmb3JtSGVscAogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0ID0KICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZl
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgYm9vbCBvazsKLSAg
ICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBib29sIG9rID0gZmFs
c2U7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1M
b2NhdGlvbihhcmdzWzBdLCBvayk7CisKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CkBAIC03NjksOCArODExLDEwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdW5pZm9ybU1hdHIKIAogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCA9CiAgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOwotICAgIGJvb2wgb2s7Ci0gICAgaW50
IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisKKyAgICBib29sIG9rID0gZmFsc2U7
CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2Nh
dGlvbihhcmdzWzBdLCBvayk7CisgICAgCiAgICAgaWYgKCFvaykgewogICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CiAgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTE4ODMpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMVGV4dHVy
ZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9j
YXRpb24uaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJ
bWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMTE0NywxMyArMTE0
OCwxNSBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUCiAgICAgfQog
fQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZvcm1Mb2NhdGlvbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQo
KSAhPSB0aGlzKSB7CisgICAgaWYgKCFwcm9ncmFtIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3Jh
bSgpICE9IHByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAg
Ly8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfVkFMVUUgZXJyb3IKICAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KKyAg
ICBsb25nIGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOworICAgIAogICAg
IFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgLy8gRklYTUU6IG1ha2UgdGhp
cyBtb3JlIGVmZmljaWVudCB1c2luZyBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBhbmQgY2FjaGluZyB0
eXBlcyBpbiBpdAogICAgIGludCBhY3RpdmVVbmlmb3JtcyA9IDA7CkBAIC0xMjc1LDEzICsxMjc4
LDE0IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFUKICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiB9CiAKLWxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRV
bmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICgh
cHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBlYyA9IFRZ
UEVfTUlTTUFUQ0hfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOworICAgIFdlYkdMU3Rh
dGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CisgICAgcmV0dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9u
OjpjcmVhdGUocHJvZ3JhbSwgbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
bmFtZSkpOwogfQogCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCkBAIC0xNjQ2LDI4OSArMTY1MCw0NjkgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbiwgeCk7CisgICAgaWYg
KCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAg
ICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
eworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBl
cnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBh
c3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOworICAg
IG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnBy
b2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBH
TF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJS
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRv
IHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHYsIHNpemUp
OworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6
ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgeCkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBpbnQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0
LT51bmlmb3JtMWkobG9jYXRpb24sIHgpOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlz
ZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTFpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihs
b25nIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJH
TEludEFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8
IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBG
SVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0
aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgor
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0xaXYobG9jYXRpb24sIHYsIHNpemUpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZs
b2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJmKGxvY2F0aW9uLCB4LCB5KTsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5w
cm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2Ug
R0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0y
Zihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYo
bG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBX
ZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGlmICghbG9jYXRp
b24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAg
IC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9
IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8v
IEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICgh
dikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlv
biwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTJm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJ
T04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJh
eSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAyKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSkKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4dC0+
dW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9u
LT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFp
c2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENI
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
V2ViR0xJbnRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlv
biB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAg
Ly8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0g
VFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2
KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9u
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVy
cm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFz
c2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LT51
bmlmb3JtMml2KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7CisgICAgbV9jb250ZXh0LT51bmlmb3Jt
Mml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMik7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwg
eik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFy
cmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAh
PSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElE
X09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlm
IG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAg
IG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAv
IDMpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGxvbmcg
bG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQq
IHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8
IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBG
SVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIHYs
IHNpemUgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRpb24s
IGludCB4LCBpbnQgeSwgaW50IHopCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBp
bnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9j
YXRpb24sIHgsIHksIHopOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0o
KSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZB
TElEX09QRVJBVElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNpKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihsb25n
IGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTElu
dEFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhN
RTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01J
U01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTog
d2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24sIHYtPmRh
dGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4K
ICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0z
aXYobG9jYXRpb24sIHYsIHNpemUgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRm
KGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRpb24sIHgsIHks
IHosIHcpOworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJB
VElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4LCB5LCB6LCB3KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihsb25nIGxvY2F0
aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxvYXRB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6
IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNN
QVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2LT5kYXRh
KCksIHYtPmxlbmd0aCgpIC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgor
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9y
bTRmdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBp
ZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IKKyAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwg
eiwgdyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRB
cnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9
IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURf
T1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYg
bm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAg
bV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8g
NCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYobG9uZyBs
b2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBp
bnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6
IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNN
QVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCB2LCBzaXpl
IC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LCBzaXplIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CisgICAgaWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BF
UkFUSU9OIGVycm9yCisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8g
YXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wg
dHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJBVElPTiBlcnJvcgor
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplIC8gNCk7CisgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYs
IHNpemUgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9u
LCBib29sIHRyYW5zcG9zZSwgV2ViR0xGbG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBib29sIHRyYW5zcG9zZSwgV2ViR0xGbG9hdEFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKKyAgICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVS
QVRJT04gZXJyb3IKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBh
cnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSAvIDkpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gOSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0
cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAg
aWYgKCFsb2NhdGlvbiB8fCBsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OIGVycm9yCisg
ICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGlu
CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdiwg
c2l6ZSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworICAgIGlmICghbG9jYXRpb24gfHwgbG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBHTF9JTlZBTElEX09QRVJB
VElPTiBlcnJvcgorICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFy
cmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSAvIDE2KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDE2KTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29s
IHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAg
ICBpZiAoIWxvY2F0aW9uIHx8IGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgR0xfSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IK
KyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQg
aW4KICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2Ci0gICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CisgICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2Us
IHYsIHNpemUgLyAxNik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShy
ZXZpc2lvbiA1MTg4MykKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgV2ViR0xQcm9ncmFt
OwogY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7CiBjbGFzcyBXZWJHTFNoYWRlcjsKIGNsYXNzIFdl
YkdMVGV4dHVyZTsKK2NsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOwogY2xhc3MgSFRNTEltYWdl
RWxlbWVudDsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBjbGFzcyBJbWFnZURhdGE7CkBAIC0x
NTcsOSArMTU4LDkgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgICAgIFdlYkdMR2V0
SW5mbyBnZXRUZXhQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9y
bShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVj
KTsKKyAgICAgICAgV2ViR0xHZXRJbmZvIGdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgbG9uZyBn
ZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IGdl
dFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJik7CiAKICAgICAgICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJpYih1bnNpZ25lZCBs
b25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTIy
NCwzNiArMjI1LDM2IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgdm9pZCB1bmlmb3Jt
MWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFmdihsb25n
IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0xZnYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
MWkobG9uZyBsb2NhdGlvbiwgaW50IHgpOwotICAgICAgICB2b2lkIHVuaWZvcm0xaXYobG9uZyBs
b2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFpdihsb25n
IGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmYobG9u
ZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTJmdihs
b25nIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0y
ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlm
b3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
Mml2KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZv
cm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdW5p
Zm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOwotICAgICAg
ICB2b2lkIHVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7
Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50
IHopOwotICAgICAgICB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJh
eSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGlu
dCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRmdihsb25n
IGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwotICAgICAgICB2b2lkIHVuaWZvcm00ZnYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3Jt
NGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpOwotICAgICAgICB2
b2lkIHVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdik7Ci0gICAgICAg
IHZvaWQgdW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAg
ICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBX
ZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKLSAg
ICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3Nl
LCBXZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2
KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsK
LSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBXZWJHTEZsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4
NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXpl
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hdCB4LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBpbnQgeCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0x
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQg
dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIFdlYkdMRmxv
YXRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0yZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAg
ICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
V2ViR0xJbnRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0y
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXpl
LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgRXhjZXB0
aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5
LCBpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAg
ICAgdm9pZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3LCBFeGNlcHRpb25Db2RlJik7CisgICAg
ICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IFdlYkdMRmxvYXRBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZv
cm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50
IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdywg
RXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7
CisgICAgICAgIHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1
bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9v
bCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2
YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0
cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
IAogICAgICAgICB2b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25D
b2RlJik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsCShyZXZpc2lvbiA1MTg4MykKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDEwICs1NjcsMTAgQEAgbW9k
dWxlIGh0bWwgewogICAgICAgICAvLyBhbnkgZ2V0VGV4UGFyYW1ldGVyKGluIHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
ICAgICAgICAgW0N1c3RvbV0gdm9pZCBnZXRUZXhQYXJhbWV0ZXIoKTsKIAotICAgICAgICAvLyBh
bnkgZ2V0VW5pZm9ybShpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSwgaW4gbG9uZyBsb2NhdGlvbikg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIC8vIGFueSBnZXRVbmlmb3JtKGluIFdlYkdM
UHJvZ3JhbSBwcm9ncmFtLCBpbiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbikgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgZ2V0VW5pZm9ybSgpOwotICAg
ICAgICAKLSAgICAgICAgbG9uZyBnZXRVbmlmb3JtTG9jYXRpb24oaW4gV2ViR0xQcm9ncmFtIHBy
b2dyYW0sIGluIERPTVN0cmluZyBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAg
ICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBnZXRVbmlmb3JtTG9jYXRpb24oaW4gV2ViR0xQcm9ncmFt
IHByb2dyYW0sIGluIERPTVN0cmluZyBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAg
ICAgICAvLyBhbnkgZ2V0VmVydGV4QXR0cmliKGluIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGluIHVu
c2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbQ3VzdG9t
XSB2b2lkIGdldFZlcnRleEF0dHJpYigpOwpAQCAtNjM4LDI2ICs2MzgsMjYgQEAgbW9kdWxlIGh0
bWwgewogICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIEdMYm9vbGVh
biBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgW0N1c3Rv
bV0gdm9pZCB0ZXhTdWJJbWFnZTJEKCk7CiAKLSAgICAgICAgdm9pZCB1bmlmb3JtMWYoaW4gbG9u
ZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTFm
dihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQg
dW5pZm9ybTFpKGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCk7Ci0gICAgICAgIFtDdXN0b21d
IHZvaWQgdW5pZm9ybTFpdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwot
ICAgICAgICB2b2lkIHVuaWZvcm0yZihpbiBsb25nIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBm
bG9hdCB5KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMmZ2KGluIGxvbmcgbG9jYXRp
b24sIGluIFdlYkdMRmxvYXRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmkoaW4gbG9u
ZyBsb2NhdGlvbiwgaW4gbG9uZyB4LCBpbiBsb25nIHkpOwotICAgICAgICBbQ3VzdG9tXSB2b2lk
IHVuaWZvcm0yaXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2KTsKLSAgICAg
ICAgdm9pZCB1bmlmb3JtM2YoaW4gbG9uZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCwgaW4gZmxvYXQg
eSwgaW4gZmxvYXQgeik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTNmdihpbiBsb25n
IGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNp
KGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHopOwotICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zaXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xJ
bnRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGYoaW4gbG9uZyBsb2NhdGlvbiwgaW4g
ZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeiwgaW4gZmxvYXQgdyk7Ci0gICAgICAgIFtD
dXN0b21dIHZvaWQgdW5pZm9ybTRmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJy
YXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRpKGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcg
eCwgaW4gbG9uZyB5LCBpbiBsb25nIHosIGluIGxvbmcgdyk7Ci0gICAgICAgIFtDdXN0b21dIHZv
aWQgdW5pZm9ybTRpdihpbiBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwotCi0g
ICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihpbiBsb25nIGxvY2F0aW9uLCBp
biBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGluIGxvbmcgbG9jYXRpb24sIGluIGJvb2xl
YW4gdHJhbnNwb3NlLCBpbiBXZWJHTEZsb2F0QXJyYXkgYXJyYXkpOwotICAgICAgICBbQ3VzdG9t
XSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gYm9vbGVhbiB0cmFu
c3Bvc2UsIGluIFdlYkdMRmxvYXRBcnJheSBhcnJheSk7CisgICAgICAgIHZvaWQgdW5pZm9ybTFm
KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBmbG9hdCB4KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMWZ2KGluIFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdikgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTFpKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBpbiBsb25nIHgpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHVuaWZvcm0xaXYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGlu
IFdlYkdMSW50QXJyYXkgdikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTJmKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBm
bG9hdCB5KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlm
b3JtMmZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJy
YXkgdikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTJpKGluIFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBsb25nIHgsIGluIGxvbmcgeSkgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTJpdihpbiBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgaW4gV2ViR0xJbnRBcnJheSB2KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2YoaW4gV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopIHJhaXNlcyhE
T01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zZnYoaW4gV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMRmxvYXRBcnJheSB2KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2koaW4gV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHopIHJhaXNlcyhET01F
eGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zaXYoaW4gV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkgdikgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRmKGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB6LCBpbiBmbG9hdCB3KSBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtNGZ2KGlu
IFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdikgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdW5pZm9ybTRpKGluIFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB6LCBpbiBs
b25nIHcpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZv
cm00aXYoaW4gV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIGluIFdlYkdMSW50QXJyYXkg
dikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3Jt
TWF0cml4MmZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFuIHRy
YW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGluIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5
IGFycmF5KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlm
b3JtTWF0cml4NGZ2KGluIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBpbiBib29sZWFu
IHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFycmF5KSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKIAogICAgICAgICB2b2lkICAgICAgICAgdXNlUHJvZ3JhbShpbiBXZWJHTFByb2dyYW0gcHJv
Z3JhbSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgICAgICAgICB2YWxpZGF0
ZVByb2dyYW0oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOwpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxv
Y2F0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1Bhc3NSZWZQdHI8V2ViR0xV
bmlmb3JtTG9jYXRpb24+IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
R0xVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbG9jYXRpb24pKTsKK30KKworV2ViR0xVbmlmb3Jt
TG9jYXRpb246OldlYkdMVW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9u
ZyBsb2NhdGlvbikKKyAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQorICAgICwgbV9sb2NhdGlvbihs
b2NhdGlvbikKK3sKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViR0xVbmlmb3JtTG9jYXRp
b25faAorI2RlZmluZSBXZWJHTFVuaWZvcm1Mb2NhdGlvbl9oCisKKyNpbmNsdWRlICJDYW52YXNP
YmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXZWJHTFVuaWZvcm1Mb2NhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFdl
YkdMVW5pZm9ybUxvY2F0aW9uPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViR0xVbmlmb3Jt
TG9jYXRpb24oKSB7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0
aW9uPiBjcmVhdGUoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKTsKKworICAg
IFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3JhbS5nZXQoKTsg
fQorCisgICAgbG9uZyBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKwor
cHJvdGVjdGVkOgorICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgbG9uZyBsb2NhdGlvbik7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4g
bV9wcm9ncmFtOworICAgIGxvbmcgbV9sb2NhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFdlYkdMVW5pZm9ybUxvY2F0aW9uX2gKSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2Ug
W0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gV2ViR0xVbmlmb3JtTG9jYXRpb24geworICAgIH07Cit9
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA1MTg4MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTEyLTA4ICBQZXRlcnNvbiBUcmV0aGV3
ZXkgIDxwZXRlcnNvbnRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgV2ViR0xVbmlmb3JtTG9jYXRpb24gYW5kIGNo
YW5nZSBBUEkgdG8gdXNlIGl0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzExNzMKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNl
cy9zdHJ1Y3RVbmlmb3JtU2hhZGVyLnZlcnQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL3NjcmlwdC10ZXN0cy91bmlmb3JtLWxvY2F0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi5odG1sOiBBZGRl
ZC4KKwogMjAwOS0xMi0wOCAgQWRhbSBMYW5nbGV5ICA8YWdsQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9j
YXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACitUZXN0cyBj
YWxsaW5nIFdlYkdMIEFQSXMgd2l0aCBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIGNvbnRleHRBLnVzZVByb2dyYW0ocHJvZ3Jh
bUEyKSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRleHRBLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b25BLCBmYWxzZSwgbWF0KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJS
OiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBjb250ZXh0QS51c2VQcm9ncmFtKHByb2dyYW1BMSkg
aXMgdW5kZWZpbmVkLgorUEFTUyBjb250ZXh0QS51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uQSwg
ZmFsc2UsIG1hdCkgaXMgdW5kZWZpbmVkLgorUEFTUyBjb250ZXh0QS51bmlmb3JtTWF0cml4NGZ2
KDAsIGZhbHNlLCBtYXQpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6
IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIGNvbnRleHRBLnVzZVByb2dyYW0ocHJvZ3JhbVMpIGlz
IHVuZGVmaW5lZC4KK1BBU1MgY29udGV4dEEudW5pZm9ybTFpKGxvY2F0aW9uU3gsIDMpIGlzIHVu
ZGVmaW5lZC4KK1BBU1MgY29udGV4dEEudW5pZm9ybTFmKGxvY2F0aW9uQXJyYXkwLCA0LjApIGlz
IHVuZGVmaW5lZC4KK1BBU1MgY29udGV4dEEuZ2V0VW5pZm9ybShwcm9ncmFtUywgbG9jYXRpb25T
eCkgaXMgMworUEFTUyBjb250ZXh0QS5nZXRVbmlmb3JtKHByb2dyYW1TLCBsb2NhdGlvbkFycmF5
MCkgaXMgNC4wCitQQVNTIGNvbnRleHRBLnVzZVByb2dyYW0ocHJvZ3JhbVYpIGlzIHVuZGVmaW5l
ZC4KK1BBU1MgY29udGV4dEEudW5pZm9ybTRmdihsb2NhdGlvblZlYzQsIHZlYykgaXMgdW5kZWZp
bmVkLgorUEFTUyBjb250ZXh0QS5nZXRVbmlmb3JtKHByb2dyYW1WLCBsb2NhdGlvblZlYzQpIGlz
IHZlYworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24uaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxv
Y2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC91bmlmb3JtLWxvY2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmds
LXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlv
biI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy91bmlmb3JtLWxvY2F0aW9uLmpzIj48L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3N0cnVj
dFVuaWZvcm1TaGFkZXIudmVydAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZXNvdXJjZXMvc3RydWN0VW5pZm9ybVNoYWRlci52ZXJ0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3N0cnVjdFVuaWZvcm1T
aGFkZXIudmVydAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorYXR0cmlidXRlIHZlYzQg
YV92ZXJ0ZXg7CithdHRyaWJ1dGUgdmVjMyBhX25vcm1hbDsKKwordW5pZm9ybSBtYXQ0IHVfbW9k
ZWxWaWV3UHJvak1hdHJpeDsKKworc3RydWN0IE15U3RydWN0Cit7CisgIGludCB4OworICBpbnQg
eTsKK307CisKK3VuaWZvcm0gTXlTdHJ1Y3QgdV9zdHJ1Y3Q7Cit1bmlmb3JtIGZsb2F0IHVfYXJy
YXlbNF07CisKK3ZhcnlpbmcgdmVjMyB2X25vcm1hbDsKKwordm9pZCBtYWluKCkKK3sgCisgICAg
dl9ub3JtYWwgPSBhX25vcm1hbDsKKyAgICBnbF9Qb3NpdGlvbiA9IHVfbW9kZWxWaWV3UHJvak1h
dHJpeCAqIGFfdmVydGV4ICsKKyAgICAgICAgdmVjNCh1X3N0cnVjdC54LCB1X3N0cnVjdC55LCAw
LCAxKSArCisgICAgICAgIHZlYzQodV9hcnJheVswXSwgdV9hcnJheVsxXSwgdV9hcnJheVsyXSwg
dV9hcnJheVszXSk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3Jp
cHQtdGVzdHMvdW5pZm9ybS1sb2NhdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvdW5pZm9ybS1sb2NhdGlvbi5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy91bmlm
b3JtLWxvY2F0aW9uLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACitkZXNjcmlwdGlv
bigiVGVzdHMgY2FsbGluZyBXZWJHTCBBUElzIHdpdGggb2JqZWN0cyBmcm9tIG90aGVyIGNvbnRl
eHRzIik7CisKK3ZhciBjb250ZXh0QSA9IGNyZWF0ZTNEQ29udGV4dCgpOwordmFyIGNvbnRleHRC
ID0gY3JlYXRlM0RDb250ZXh0KCk7Cit2YXIgcHJvZ3JhbUExID0gbG9hZFN0YW5kYXJkUHJvZ3Jh
bShjb250ZXh0QSk7Cit2YXIgcHJvZ3JhbUEyID0gbG9hZFN0YW5kYXJkUHJvZ3JhbShjb250ZXh0
QSk7Cit2YXIgcHJvZ3JhbUIgPSBsb2FkU3RhbmRhcmRQcm9ncmFtKGNvbnRleHRCKTsKK3ZhciBw
cm9ncmFtUyA9IGxvYWRQcm9ncmFtKGNvbnRleHRBLCAicmVzb3VyY2VzL3N0cnVjdFVuaWZvcm1T
aGFkZXIudmVydCIsICJyZXNvdXJjZXMvZnJhZ21lbnRTaGFkZXIuZnJhZyIpOwordmFyIHByb2dy
YW1WID0gbG9hZFByb2dyYW0oY29udGV4dEEsICJyZXNvdXJjZXMvZmxvYXRVbmlmb3JtU2hhZGVy
LnZlcnQiLCAicmVzb3VyY2VzL25vb3BVbmlmb3JtU2hhZGVyLmZyYWciKTsKK3ZhciBsb2NhdGlv
bkEgPSBjb250ZXh0QS5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUExLCAndV9tb2RlbFZpZXdQ
cm9qTWF0cml4Jyk7Cit2YXIgbG9jYXRpb25CID0gY29udGV4dEIuZ2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW1CLCAndV9tb2RlbFZpZXdQcm9qTWF0cml4Jyk7Cit2YXIgbG9jYXRpb25TeCA9IGNv
bnRleHRBLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtUywgInVfc3RydWN0LngiKTsKK3ZhciBs
b2NhdGlvbkFycmF5MCA9IGNvbnRleHRBLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtUywgInVf
YXJyYXlbMF0iKTsKK3ZhciBsb2NhdGlvblZlYzQgPSBjb250ZXh0QS5nZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbVYsICJmdmFsNCIpOworCit2YXIgdmVjID0gWzEsIDIsIDMsIDRdOwordmFyIG1h
dCA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAx
Nl07CisKK3Nob3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0QS51c2VQcm9ncmFtKHByb2dyYW1BMiki
KTsKK3Nob3VsZFRocm93KCJjb250ZXh0QS51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uQSwgZmFs
c2UsIG1hdCkiKTsKK3Nob3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0QS51c2VQcm9ncmFtKHByb2dy
YW1BMSkiKTsKK3Nob3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0QS51bmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uQSwgZmFsc2UsIG1hdCkiKTsKK3Nob3VsZFRocm93KCJjb250ZXh0QS51bmlmb3JtTWF0
cml4NGZ2KDAsIGZhbHNlLCBtYXQpIik7CisKK3Nob3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0QS51
c2VQcm9ncmFtKHByb2dyYW1TKSIpOworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHRBLnVuaWZv
cm0xaShsb2NhdGlvblN4LCAzKSIpOworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHRBLnVuaWZv
cm0xZihsb2NhdGlvbkFycmF5MCwgNC4wKSIpOworCitzaG91bGRCZSgiY29udGV4dEEuZ2V0VW5p
Zm9ybShwcm9ncmFtUywgbG9jYXRpb25TeCkiLCAiMyIpOworc2hvdWxkQmUoImNvbnRleHRBLmdl
dFVuaWZvcm0ocHJvZ3JhbVMsIGxvY2F0aW9uQXJyYXkwKSIsICI0LjAiKTsKKworc2hvdWxkQmVV
bmRlZmluZWQoImNvbnRleHRBLnVzZVByb2dyYW0ocHJvZ3JhbVYpIik7CitzaG91bGRCZVVuZGVm
aW5lZCgiY29udGV4dEEudW5pZm9ybTRmdihsb2NhdGlvblZlYzQsIHZlYykiKTsKK3Nob3VsZEJl
KCJjb250ZXh0QS5nZXRVbmlmb3JtKHByb2dyYW1WLCBsb2NhdGlvblZlYzQpIiwgInZlYyIpOwor
CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="26377"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="26379"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>