<?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>67172</bug_id>
          
          <creation_ts>2011-08-29 17:30:27 -0700</creation_ts>
          <short_desc>Rename GraphicsContext3DInternal to GraphicsContext3DPrivate and add a dummy version of this class for Mac</short_desc>
          <delta_ts>2023-06-06 00:04:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</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>
          
          <blocked>66903</blocked>
    
    <blocked>67179</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>458589</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-29 17:30:27 -0700</bug_when>
    <thetext>Rename GraphicsContext3DInternal to GraphicsContext3DPrivate and add a dummy version of this class for Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458652</commentid>
    <comment_count>1</comment_count>
      <attachid>105563</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-29 19:31:51 -0700</bug_when>
    <thetext>Created attachment 105563
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458653</commentid>
    <comment_count>2</comment_count>
      <attachid>105563</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-29 19:34:28 -0700</bug_when>
    <thetext>Comment on attachment 105563
Patch

Why are you renaming this to private?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458654</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-29 19:35:48 -0700</bug_when>
    <thetext>Attachment 105563 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:61:  The parameter name &quot;hostWindow&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:66:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:116:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:117:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:118:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:195:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:210:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:212:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:214:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:216:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:218:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:220:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:222:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:224:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:225:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:226:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:227:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:274:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 18 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458657</commentid>
    <comment_count>4</comment_count>
      <attachid>105563</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-29 19:40:24 -0700</bug_when>
    <thetext>Comment on attachment 105563
Patch

Attachment 105563 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9567272</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458933</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-30 09:03:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 105563 [details])
&gt; Why are you renaming this to private?

It is part of a bigger restructuring of GraphicsContext3D (https://bugs.webkit.org/show_bug.cgi?id=66903), which is being done to make it easier to extend the class to other platforms. GC3D is getting really messy with ifdefs, and a EGL support is being added (https://bugs.webkit.org/show_bug.cgi?id=59064). So this will make it a lot easier to do all this work. 

This change is being done to match other patterns in the code, e.g., AnimationController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458935</commentid>
    <comment_count>6</comment_count>
      <attachid>105638</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-30 09:04:34 -0700</bug_when>
    <thetext>Created attachment 105638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458971</commentid>
    <comment_count>7</comment_count>
      <attachid>105638</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-30 09:48:31 -0700</bug_when>
    <thetext>Comment on attachment 105638
Patch

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

Looks good. r=me

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:68
&gt; +    GraphicsContext3D* m_graphicsContext3D;

Explicitly comment that this is weak?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458975</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-30 09:51:05 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 105563 [details] [details])
&gt; &gt; Why are you renaming this to private?
&gt; 
&gt; It is part of a bigger restructuring of GraphicsContext3D (https://bugs.webkit.org/show_bug.cgi?id=66903), which is being done to make it easier to extend the class to other platforms.

But how is “private” more accurate than “internal”? I think the existing name is fine. But maybe there is a good reason to rename it that I am not aware of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458978</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-30 09:54:35 -0700</bug_when>
    <thetext>Committed r94083: &lt;http://trac.webkit.org/changeset/94083&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459556</commentid>
    <comment_count>10</comment_count>
      <attachid>105768</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2011-08-31 04:56:33 -0700</bug_when>
    <thetext>Created attachment 105768
Build Fix for GTK

On my system, r94083 broke building WebGL enabled GTK. The patch solves this problem. I generated it from my git commit, not sure if this format is acceptable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459557</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 04:57:58 -0700</bug_when>
    <thetext>Attachment 105768 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/gtk/GraphicsContext3DPrivate.cpp:21:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/graphics/gtk/GraphicsContext3DPrivate.cpp:22:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459597</commentid>
    <comment_count>12</comment_count>
      <attachid>105773</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2011-08-31 06:38:13 -0700</bug_when>
    <thetext>Created attachment 105773
Build Fix for GTK + Style fix

On my system, r94083 broke building WebGL enabled GTK. The patch solves the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459751</commentid>
    <comment_count>13</comment_count>
      <attachid>105773</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-31 11:15:53 -0700</bug_when>
    <thetext>Comment on attachment 105773
Build Fix for GTK + Style fix

This patch isn&apos;t ideal. Generally, you get a delete, a new file (like you have here) and then a diff on that new file showing all the renamed functions. The way you&apos;ve done it, you can&apos;t see the actual changes to the new file. But I&apos;ll trust that this is what you&apos;ve done. So r=me. 

I&apos;m confused about why the ews bots didn&apos;t catch this mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459982</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-31 15:31:46 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 105563 [details] [details] [details])
&gt; &gt; &gt; Why are you renaming this to private?
&gt; &gt; 
&gt; &gt; It is part of a bigger restructuring of GraphicsContext3D (https://bugs.webkit.org/show_bug.cgi?id=66903), which is being done to make it easier to extend the class to other platforms.
&gt; 
&gt; But how is “private” more accurate than “internal”? I think the existing name is fine. But maybe there is a good reason to rename it that I am not aware of.

This is something we talked about on #webkit with the Google guys. We agreed that it followed the same conventions as other parts of the code. I needed to make Mac use the private class so I did it at the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460644</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-09-01 11:41:52 -0700</bug_when>
    <thetext>Reopening for GTK breakage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460685</commentid>
    <comment_count>16</comment_count>
      <attachid>105773</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-01 12:26:09 -0700</bug_when>
    <thetext>Comment on attachment 105773
Build Fix for GTK + Style fix

Clearing flags on attachment: 105773

Committed r94328: &lt;http://trac.webkit.org/changeset/94328&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105563</attachid>
            <date>2011-08-29 19:31:51 -0700</date>
            <delta_ts>2011-08-30 09:04:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67172-20110829193149.patch</filename>
            <type>text/plain</type>
            <size>142867</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MDMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc5IEBACisyMDExLTA4LTI5ICBDaHJpcyBN
YXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbCB0byBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgYW5kIGFkZCBhIGR1bW15
IHZlcnNpb24gb2YgdGhpcyBjbGFzcyBmb3IgTWFjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRWaWV3cG9ydEdMV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpib3VuZGluZ1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRNdWx0aXNh
bXBsZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6YmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRl
cHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGlz
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxlbWVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGl4
ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25P
ZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21w
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292
ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2aWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UHJvZ3JhbWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6
CisKIDIwMTEtMDgtMjkgIEpvaG4gQmF1bWFuICA8amJhdW1hbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgU3BlZWQgdXAgdGV4SW1hZ2UgZnJvbSBCR1JBCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHJldmlzaW9uIDkzOTc5KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNDgxNyw4ICs0ODE3LDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRHJhd2lu
Z0J1ZmZlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9H
cmFwaGljc0NvbnRleHQzREd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCShyZXZpc2lvbiA5Mzk3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMCArMTA4LDcg
QEAgc3RydWN0IEFjdGl2ZUluZm8gewogICAgIEdDM0RpbnQgc2l6ZTsKIH07CiAKLS8vIEZJWE1F
OiBpZGVhbGx5IHRoaXMgd291bGQgYmUgdXNlZCBvbiBhbGwgcGxhdGZvcm1zLgotI2lmIFBMQVRG
T1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOwotI2VuZGlmCitjbGFzcyBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEIDogcHVi
bGljIFJlZkNvdW50ZWQ8R3JhcGhpY3NDb250ZXh0M0Q+IHsKIHB1YmxpYzoKQEAgLTk1NCwxMSAr
OTUxLDggQEAgcHVibGljOgogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vy
cm9yczsKICNlbmRpZgogCi0gICAgLy8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2Vk
IG9uIGFsbCBwbGF0Zm9ybXMuCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSAgICBmcmllbmQgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbD4gbV9pbnRlcm5hbDsKLSNlbmRpZgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gbV9wcml2
YXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNp
b25zM0RDaHJvbWl1bS5oCShyZXZpc2lvbiA5Mzk3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwog
Y2xhc3MgSW1hZ2VCdWZmZXI7CiAKIGNsYXNzIEV4dGVuc2lvbnMzRENocm9taXVtIDogcHVibGlj
IEV4dGVuc2lvbnMzRCB7CkBAIC04NiwxMSArODYsMTEgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICAvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgc3RyaWN0bHkgb3duZWQgYnkgdGhlIEdy
YXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9uIGFuZCBkbyBub3QKICAgICAvLyBuZWVkIHRv
IGJlIGluc3RhbnRpYXRlZCBieSBhbnkgb3RoZXIgY29kZS4KLSAgICBmcmllbmQgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKLSAgICBleHBsaWNpdCBFeHRlbnNpb25zM0RDaHJvbWl1
bShHcmFwaGljc0NvbnRleHQzREludGVybmFsKik7CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTsKKyAgICBleHBsaWNpdCBFeHRlbnNpb25zM0RDaHJvbWl1bShHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUqKTsKIAotICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWwKLSAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBt
X2ludGVybmFsOworICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZQorICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogbV9wcml2YXRlOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCShy
ZXZpc2lvbiA5Mzk3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9H
cmFwaGljc0NvbnRleHQzREd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
ICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRl
ICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVy
bmFsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKICNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCiAjaW5jbHVkZSA8d3RmL05v
dEZvdW5kLmg+CkBAIC00MywxMiArNDMsMTIgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gR3JhcGhpY3NDbwogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbD4gaW50ZXJuYWwgPSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGUo
KTsKLSAgICBpZiAoIWludGVybmFsKQorICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU+IHByaXYgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZSgpOworICAgIGlmICgh
cHJpdikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9z
dFdpbmRvdywgZmFsc2UpKTsKLSAgICBjb250ZXh0LT5tX2ludGVybmFsID0gaW50ZXJuYWwucmVs
ZWFzZSgpOworICAgIGNvbnRleHQtPm1fcHJpdmF0ZSA9IHByaXYucmVsZWFzZSgpOwogICAgIHJl
dHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIApAQCAtNjQsNyArNjQsNyBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKLSAg
ICBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQodGhp
cyk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjphZGRBY3RpdmVHcmFwaGljc0NvbnRl
eHQodGhpcyk7CiAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIApAQCAtMTE4LDggKzExOCw4
IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKIAogR3JhcGhpY3ND
b250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOwotICAgIGlmICghbV9p
bnRlcm5hbC0+bV9jb250ZXh0KQorICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVtb3Zl
QWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOworICAgIGlmICghbV9wcml2YXRlLT5tX2NvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMTM4
LDE0ICsxMzgsMTQgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgaWYg
KCFtX2ludGVybmFsKQorICAgIGlmICghbV9wcml2YXRlKQogICAgICAgICByZXR1cm47Ci0gICAg
bV9pbnRlcm5hbC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0Nv
bnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPm1fY29udGV4dDsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2NvbnRleHQ7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCShyZXZpc2lvbiA5Mzk3OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlCi0gKiAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2lm
bmRlZiBHcmFwaGljc0NvbnRleHQzREludGVybmFsX2gKLSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbF9oCi0KLXR5cGVkZWYgc3RydWN0IF9fR0xYY29udGV4dFJlYyAqR0xYQ29udGV4
dDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBHTFhQYnVmZmVyOwotdHlwZWRlZiB1bnNpZ25lZCBs
b25nIEdMWFBpeG1hcDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBHTHVieXRlOwotdHlwZWRlZiB1
bnNpZ25lZCBsb25nIFBpeG1hcDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB7Ci0gICAg
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+
IGNyZWF0ZSgpOwotICAgIH5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7Ci0gICAgdm9pZCBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBj
cmVhdGVQYnVmZmVyQ29udGV4dCgpOwotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKiBjcmVhdGVQaXhtYXBDb250ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bChHTFhDb250ZXh0LCBHTFhQYnVmZmVyKTsKLSAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFs
KEdMWENvbnRleHQsIFBpeG1hcCwgR0xYUGl4bWFwKTsKLQotICAgIHN0YXRpYyB2b2lkIGFkZEFj
dGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopOwotICAgIHN0YXRpYyB2b2lk
IHJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopOwotICAgIHN0
YXRpYyB2b2lkIGNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCgpOwotCi0gICAgR0xYQ29udGV4
dCBtX2NvbnRleHQ7Ci0gICAgR0xYUGJ1ZmZlciBtX3BidWZmZXI7Ci0gICAgUGl4bWFwIG1fcGl4
bWFwOwotICAgIEdMWFBpeG1hcCBtX2dseFBpeG1hcDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEdy
YXBoaWNzQ29udGV4dDNESXRlcm5hbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oCShyZXZpc2lvbiA5Mzk3OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDo5Mzk3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUK
KyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAorI2RlZmluZSBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsX2gKKwordHlwZWRlZiBzdHJ1Y3QgX19HTFhjb250ZXh0UmVjICpHTFhDb250ZXh0OwordHlw
ZWRlZiB1bnNpZ25lZCBsb25nIEdMWFBidWZmZXI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgR0xY
UGl4bWFwOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEdMdWJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgUGl4bWFwOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKKyAgICBwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbD4gY3JlYXRl
KCk7CisgICAgfkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKKyAgICB2b2lkIG1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CisgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIGNyZWF0ZVBi
dWZmZXJDb250ZXh0KCk7CisgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIGNy
ZWF0ZVBpeG1hcENvbnRleHQoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdMWENv
bnRleHQsIEdMWFBidWZmZXIpOworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR0xYQ29u
dGV4dCwgUGl4bWFwLCBHTFhQaXhtYXApOworCisgICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlR3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3Zl
QWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZv
aWQgY2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7CisKKyAgICBHTFhDb250ZXh0IG1fY29u
dGV4dDsKKyAgICBHTFhQYnVmZmVyIG1fcGJ1ZmZlcjsKKyAgICBQaXhtYXAgbV9waXhtYXA7Cisg
ICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOworfTsKKworfQorCisjZW5kaWYgLy8gR3JhcGhpY3ND
b250ZXh0M0RJdGVybmFsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHJl
dmlzaW9uIDkzOTc5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw4ICsxNyw4IEBA
CiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQogICovCiAKLSNpZm5kZWYgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbF9oCi0jZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAor
I2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaAorI2RlZmluZSBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGVfaAogCiB0eXBlZGVmIHN0cnVjdCBfX0dMWGNvbnRleHRSZWMgKkdMWENvbnRl
eHQ7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgR0xYUGJ1ZmZlcjsKQEAgLTMwLDE4ICszMCwxOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCi1jbGFz
cyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZSB7CiAgICAgcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw+IGNyZWF0ZSgpOwotICAgIH5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7
CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBjcmVhdGUo
KTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAgICAgdm9pZCBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKIAogICAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBjcmVhdGVQYnVm
ZmVyQ29udGV4dCgpOwotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBjcmVh
dGVQaXhtYXBDb250ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHTFhDb250
ZXh0LCBHTFhQYnVmZmVyKTsKLSAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdMWENvbnRl
eHQsIFBpeG1hcCwgR0xYUGl4bWFwKTsKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKiBjcmVhdGVQYnVmZmVyQ29udGV4dCgpOworICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUqIGNyZWF0ZVBpeG1hcENvbnRleHQoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUoR0xYQ29udGV4dCwgR0xYUGJ1ZmZlcik7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKEdMWENvbnRleHQsIFBpeG1hcCwgR0xYUGl4bWFwKTsKIAogICAgIHN0YXRpYyB2b2lkIGFk
ZEFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHN0YXRpYyB2
b2lkIHJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopOwpAQCAt
NTUsNCArNTUsNCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKIAogfQogCi0j
ZW5kaWYgLy8gR3JhcGhpY3NDb250ZXh0M0RJdGVybmFsX2gKKyNlbmRpZiAvLyBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24g
OTM5NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDIxIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgY3VycmVudGx5IGVtcHR5
IG9uIE1hYywgYnV0IHdpbGwgZ2V0IHBvcHVsYXRlZCBhcyAKKy8vIHRoZSByZXN0cnVjdHVyaW5n
IGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjkwMyBpcyBkb25l
CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgeworcHVibGljOgorICAgIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QpCisg
ICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQzRChncmFwaGljc0NvbnRleHQzRCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKSB7IH0KKworcHJpdmF0
ZToKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9ncmFwaGljc0NvbnRleHQzRDsKK307CisKIHN0
YXRpYyB2b2lkIHNldFBpeGVsRm9ybWF0KFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4m
IGF0dHJpYnMsIGludCBjb2xvckJpdHMsIGludCBkZXB0aEJpdHMsIGJvb2wgYWNjZWxlcmF0ZWQs
IGJvb2wgc3VwZXJzYW1wbGUsIGJvb2wgY2xvc2VzdCkKIHsKICAgICBhdHRyaWJzLmNsZWFyKCk7
CkBAIC0xMDQsNiArMTE5LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRo
U3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAg
LCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzKSkp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQz
RFF0LmNwcAkocmV2aXNpb24gOTM5NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCB0eXBlZGVmIGNoYXIgR0xjaGFyOwogI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4
IDB4ODhGMAogI2VuZGlmCiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgICAgIDogcHVibGljIFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyCkBAIC03MCw4ICs3MCw4IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwKICNlbmRpZgogewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93Kik7Ci0gICAgfkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250
ZXh0M0QqLCBIb3N0V2luZG93Kik7CisgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwog
CiAgICAgUUdMV2lkZ2V0KiBnZXRWaWV3cG9ydEdMV2lkZ2V0KCk7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCkBAIC05OCw3ICs5OCw3IEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQKICNlbmRpZgogfQogCi1H
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93KQorR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQogICAgICwgbV9nbFdpZGdldCgw
KQpAQCAtMTE3LDEzICsxMTcsMTMgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhp
Y3NDb250ZQogICAgIG1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKK0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCiB7CiAgICAgZGVsZXRl
IG1fZ2xXaWRnZXQ7CiAgICAgbV9nbFdpZGdldCA9IDA7CiB9CiAKLVFHTFdpZGdldCogR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0Vmlld3BvcnRHTFdpZGdldCgpCitRR0xXaWRnZXQqIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0Vmlld3BvcnRHTFdpZGdldCgpCiB7CiAgICAgUVdl
YlBhZ2VDbGllbnQqIHdlYlBhZ2VDbGllbnQgPSBtX2hvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNs
aWVudCgpOwogICAgIGlmICghd2ViUGFnZUNsaWVudCkKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0
aWMgaW5saW5lIHF1aW50MzIgc3dhcEJnclRvUmdiKHF1aW50CiB9CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBj
b25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0
bWFwVGV4dHVyZSogbWFzaykgY29uc3QKIHsKICAgICBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZl
ckFuZFJlc3RvcmVDb250ZXh0KCk7CiAKQEAgLTE5NywxMiArMTk3LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRUb1QKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAKLVFSZWN0RiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpib3Vu
ZGluZ1JlY3QoKSBjb25zdAorUVJlY3RGIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Ym91bmRp
bmdSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gUVJlY3RGKFFQb2ludEYoMCwgMCksIFFTaXpl
RihtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50KFFQYWludGVyKiBw
YWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbiwgUVdpZGdldCog
d2lkZ2V0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50KFFQYWludGVyKiBw
YWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbiwgUVdpZGdldCog
d2lkZ2V0KQogewogICAgIFFfVU5VU0VEKHdpZGdldCk7CiAKQEAgLTI1NCw3ICsyNTQsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50KFFQCiAgICAgcGFpbnRlci0+ZHJh
d0ltYWdlKC8qIHggKi8gMCwgLyogeSAqLyAwLCBvZmZzY3JlZW5JbWFnZSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXIoKSBj
b25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRNdWx0aXNhbXBsZUZyYW1l
YnVmZmVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1fY29udGV4dC0+bV9hdHRycy5hbnRpYWxpYXMp
CiAgICAgICAgIHJldHVybjsKQEAgLTI2NCw3ICsyNjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmJsaXRNdWx0CiAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fYm91bmRGQk8pOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVz
dG9yZUNvbnRleHQoKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRN
dWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVzdG9yZUNvbnRleHQoKSBjb25zdAogewogICAgIGlm
ICghbV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlhcykKICAgICAgICAgcmV0dXJuOwpAQCAtMjg3
LDcgKzI4Nyw3IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ28KICAg
ICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiAgICAgICAg
IHJldHVybiAwOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0
UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgZmFsc2UpKTsKLSAg
ICByZXR1cm4gY29udGV4dC0+bV9pbnRlcm5hbCA/IGNvbnRleHQucmVsZWFzZSgpIDogMDsKKyAg
ICByZXR1cm4gY29udGV4dC0+bV9wcml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQog
CiBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wpCkBAIC0zMDYs
NyArMzA2LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAg
ICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCi0gICAgLCBtX2ludGVy
bmFsKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKHRoaXMsIGhvc3RXaW5k
b3cpKSkKKyAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKHRoaXMsIGhvc3RXaW5kb3cpKSkKIHsKICNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQog
ICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwpAQCAtMzE0LDkgKzMxNCw5IEBAIEdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMo
KTsKICNlbmRpZgogCi0gICAgaWYgKCFtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5pc1ZhbGlkKCkp
IHsKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+aXNWYWxpZCgpKSB7CiAgICAgICAg
IExPR19FUlJPUigiR3JhcGhpY3NDb250ZXh0M0Q6IFFHTFdpZGdldCBpbml0aWFsaXphdGlvbiBm
YWlsZWQuIik7Ci0gICAgICAgIG1faW50ZXJuYWwgPSBudWxscHRyOworICAgICAgICBtX3ByaXZh
dGUgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMjcsNyArMzI3LDcg
QEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgICAgICBpbml0
aWFsaXplZCA9IHRydWU7CiAgICAgfQogICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBtX2lu
dGVybmFsID0gbnVsbHB0cjsKKyAgICAgICAgbV9wcml2YXRlID0gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMzg0LDggKzM4NCw4IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpH
cmFwaGljc0NvbnRleHQzRChHcmEKIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAg
ICBpZiAoIW1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPmlzVmFsaWQoKSkKKyAgICBtX3ByaXZhdGUt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ2xXaWRn
ZXQtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7CiAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKQEAgLTQw
MCw3ICs0MDAsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIAog
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCgpCiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQ7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9nbFdpZGdldDsKIH0KIAogUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKQEAgLTQxMSwyMiArNDEx
LDIyIEBAIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXQKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwuZ2V0KCk7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKIH0KICNlbmRpZgogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250
ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1
ZmZlcigpOwogICAgIFFQYWludGVyKiBwYWludGVyID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgbV9pbnRlcm5hbC0+cGFpbnQocGFpbnRlciwgMCwgMCk7
CisgICAgbV9wcml2YXRlLT5wYWludChwYWludGVyLCAwLCAwKTsKIH0KIAogI2lmIGRlZmluZWQo
UVRfT1BFTkdMX0VTXzIpCkBAIC00MzksMTMgKzQzOSwxMyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gR3JhcGhpY3NDb250ZXh0M0Q6CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIGlmICgod2lkdGggPT0gbV9jdXJyZW50V2lk
dGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkgfHwgKCFtX2ludGVybmFsKSkKKyAgICBp
ZiAoKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQp
IHx8ICghbV9wcml2YXRlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jdXJyZW50V2lkdGgg
PSB3aWR0aDsKICAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKIAogICAgIC8vIENyZWF0ZSBjb2xvciBidWZmZXIKICAgICBnbEJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOwpAQCAtNTAy
LDcgKzUwMiw3IEBAIEludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnIKIAog
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0
dXJlKTsKIH0KIApAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0
dGFjaFNoYWRlcihQbGEKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRl
cik7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3By
aXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xBdHRhY2hTaGFkZXIocHJv
Z3JhbSwgc2hhZGVyKTsKIH0KIApAQCAtNTIxLDExMSArNTIxLDExMSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9n
cmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
KQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9w
cml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsQmluZEJ1ZmZlcih0YXJn
ZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQogewotICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOwogICAgIG1fYm91bmRGQk8gPSBidWZmZXIgPyBidWZmZXIgOiBt
X2ZibzsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG1fYm91bmRGQk8pOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CiAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CiAgICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBH
QzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CiAgICAgZ2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsQmxlbmRFcXVhdGlvbihtb2Rl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxw
aGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2Zh
Y3RvciwgR0MzRGVudW0gZGZhY3RvcikKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
ICAgICBnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKIH0gICAgICAgCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVu
dW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCiB7Ci0gICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51
bSB1c2FnZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbEJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplLCAvKiBkYXRhICovIDAsIHVzYWdlKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXpl
LCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xCdWZmZXJTdWJEYXRh
KHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKIH0KIAogR0MzRGVudW0gR3JhcGhpY3NDb250
ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXModGFyZ2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNE
Y2xhbXBmIHIsIEdDM0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCiB7Ci0g
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykK
IHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJp
dmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbENsZWFyKG1hc2spOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCiB7
Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNf
MikKICAgICBnbENsZWFyRGVwdGhmKGRlcHRoKTsKICNlbHNlCkBAIC02MzUsNTYgKzYzNSw1NiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xDbGVhclN0ZW5jaWwocyk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBH
QzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CiAgICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQogewotICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOwogICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7Ci0gICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKIHsKLSAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKICAgICBnbEN1bGxGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbERlcHRoRnVuYyhmdW5jKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xEZXB0aE1hc2soZmxhZyk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VT
XzIpCiAgICAgZ2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7CiAjZWxzZQpAQCAtNjk2LDc5ICs2
OTYsNzkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYQogewogICAg
IEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKIHsKLSAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERpc2FibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCiB7Ci0gICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3Vu
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBt
b2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsRHJhd0VsZW1lbnRzKG1vZGUs
IGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZShHQzNE
ZW51bSBjYXApCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xFbmFibGUo
Y2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAg
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZpbmlzaCgpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xG
aW5pc2goKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsRmx1c2goKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsRnJh
bWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJn
ZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCiB7Ci0gICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKIHsKLSAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbEZyb250RmFjZShtb2RlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKIH0K
IApAQCAtNzc5LDcgKzc3OSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0
dHJpYigKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOwogCiAgICAgR0xpbnQgbWF4TGVuZ3RoID0gMDsKICAgICBnbEdldFByb2dyYW1p
dihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RI
LCAmbWF4TGVuZ3RoKTsKQEAgLTgxMSw3ICs4MTEsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRBY3RpdmVVbmlmb3JtCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAogICAgIEdMaW50IG1heExlbmd0aCA9IDA7CiAgICAg
Z2xHZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFtKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhMZW5ndGgpOwpAQCAtODQxLDcg
Kzg0MSw3IEBAIGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24KICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpOwogfQogCkBAIC04NTksMTkgKzg1OSwxOSBAQCBHQzNEZW51bSBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIAot
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRl
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBnbEdldEVycm9yKCk7CiB9
CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCiB7
Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgcmV0dXJuIFN0cmluZygoY29uc3Qg
Y2hhciopIGdsR2V0U3RyaW5nKG5hbWUpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xIaW50KHRhcmdldCwgbW9kZSk7CiB9CiAKQEAgLTg4MCwxMyAr
ODgwLDEzIEBAIEdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcigKICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogICAgIAotICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBnbElzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIEdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQogewot
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRl
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBnbElzRW5hYmxlZChjYXAp
OwogfQogCkBAIC04OTUsNyArODk1LDcgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzRnJhbWVidQogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKICAgICAKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xJc0Zy
YW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIApAQCAtOTA0LDcgKzkwNCw3IEBAIEdDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0KICAgICBpZiAoIXByb2dyYW0pCiAgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKICAgICAKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
ICAgICByZXR1cm4gZ2xJc1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTkxMyw3ICs5MTMsNyBA
QCBHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJiCiAgICAgaWYgKCFyZW5k
ZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKICAgICAKLSAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
OwogfQogCkBAIC05MjIsNyArOTIyLDcgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzU2hhZGVyKAogICAgIGlmICghc2hhZGVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAg
ICAgCi0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3By
aXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsSXNTaGFkZXIo
c2hhZGVyKTsKIH0KIApAQCAtOTMxLDM4ICs5MzEsMzggQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0M0Q6OmlzVGV4dHVyZQogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwogICAgIAotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBn
bElzVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdp
ZHRoKEdDM0RmbG9hdCB3aWR0aCkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAg
ICBnbExpbmVXaWR0aChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgpKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQogewog
ICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBn
bExpbmtQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhl
bFN0b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pCiB7Ci0gICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xQaXhlbFN0b3JlaShwYXJhbU5hbWUsIHBhcmFtKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFj
dG9yLCBHQzNEZmxvYXQgdW5pdHMpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAg
ICAgZ2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCog
ZGF0YSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICAKICAgICBpZiAodHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSB8fCBmb3JtYXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEpCiAgICAgICAgIHJldHVybjsKQEAgLTk3MiwxMyArOTcyLDEzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGkKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKLSAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICNpZiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKICAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgpAQCAt
MTAwMSwxMyArMTAwMSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJT
dG9yCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYg
dmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKICAgICBnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAg
ICAgZ2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCkBAIC0xMDE1LDcgKzEwMTUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoUGxhCiB7CiAgICAgQVNT
RVJUKHNoYWRlcik7CiAKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAogICAgIFN0cmlu
ZyBwcmVmaXhlZFNvdXJjZTsKIApAQCAtMTAzMywxNjkgKzEwMzMsMTY5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQbGEKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCiB7
Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xTdGVuY2lsRnVuYyhmdW5jLCBy
ZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBt
YXNrKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsU3RlbmNpbEZ1bmNT
ZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogICAgIGdsU3RlbmNpbE1hc2sobWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykK
IHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJp
dmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUoZmFjZSwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCiB7Ci0gICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNz
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUo
ZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZs
b2F0IHZhbHVlKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVGV4UGFy
YW1ldGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1l
LCBHQzNEaW50IHZhbHVlKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5pZm9ybTFmKGxvY2F0aW9u
LCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCiB7Ci0gICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKICAgICBnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQq
IGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
ICAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CiAgICAgZ2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCog
YXJyYXksIEdDM0RzaXplaSBzaXplKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwog
ICAgIGdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBH
QzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQogewotICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2
Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCiB7Ci0gICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CiAgICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50IHYwKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5p
Zm9ybTFpKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5pZm9ybTFpdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmko
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKIHsKLSAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEaW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CiAgICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOwogICAgIGdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBh
cnJheSwgR0MzRHNpemVpIHNpemUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAg
ICAgZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNE
aW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogICAgIGdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOwogICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCiB7
Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQogewotICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwg
dHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1N
YXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKICAgICBnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFVz
ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTEyMDMsMTA5ICsxMjAzLDEwOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogICAgIAotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVmFsaWRhdGVQcm9n
cmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIx
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogICAgIGdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQq
IGFycmF5KQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKIHsK
LSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0
ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFZlcnRleEF0dHJpYjJmKGluZGV4
LCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CiAgICAgZ2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0KiBhcnJheSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAg
ICBnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNE
ZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQogewotICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOwogICAgIGdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYz
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OwogICAgIGdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0
cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CiAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKLSAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKICAgICBnbEdldEJvb2xlYW52KHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFt
ZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogICAgIGdsR2V0RmxvYXR2KHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0Mz
RGludCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBhcmFt
TmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQogewotICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOwogICAgIGdsR2V0SW50ZWdlcnYocGFyYW1OYW1lLCB2YWx1ZSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcGFyYW1OYW1lLCB2
YWx1ZSk7CiB9CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OwogCiAgICAgR0xpbnQgbGVuZ3RoID0gMDsKICAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtLCBH
cmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKQEAgLTEzMjYsMjAg
KzEzMjYsMjAgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mbwogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0
YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgcGFyYW1OYW1lLCB2YWx1ZSk7
CiB9CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAogICAg
IEdMaW50IGxlbmd0aCA9IDA7CiAgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwpAQCAtMTM1OSw3ICsxMzU5LDcgQEAg
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTAogCiBTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsK
LSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0
ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAogICAgIEdMaW50IGxlbmd0aCA9IDA7CiAg
ICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfU09VUkNF
X0xFTkdUSCwgJmxlbmd0aCk7CkBAIC0xMzc5LDI1ICsxMzc5LDI1IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmMKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rm
bG9hdCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRU
ZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CiAgICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0
aW9uLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVl
KQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9w
cml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsR2V0VW5pZm9ybWl2KHBy
b2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKQEAgLTE0MDUsMjUgKzE0MDUsMjUgQEAgR0Mz
RGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvYwogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICAKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwYXJhbU5hbWUsIHZh
bHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwg
cGFyYW1OYW1lLCB2YWx1ZSk7CiB9CiAKIEdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUp
CiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3By
aXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgCiAgICAgR0x2b2lkKiBwb2lu
dGVyID0gMDsKICAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwYXJhbU5hbWUs
ICZwb2ludGVyKTsKQEAgLTE0MzIsMjAgKzE0MzIsMjAgQEAgR0MzRHNpemVpcHRyIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRWZXJ0ZQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmYsIEdD
M0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogfQogCiBQbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIEdMdWludCBoYW5kbGUgPSAwOwogICAgIGdsR2Vu
QnVmZmVycygvKiBjb3VudCAqLyAxLCAmaGFuZGxlKTsKICAgICByZXR1cm4gaGFuZGxlOwpAQCAt
MTQ1Myw3ICsxNDUzLDcgQEAgUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZl
cigpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgR0x1aW50IGhhbmRsZSA9
IDA7CiAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJmhhbmRsZSk7CiAgICAg
cmV0dXJuIGhhbmRsZTsKQEAgLTE0NjEsMTMgKzE0NjEsMTMgQEAgUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVQcm9ncmFtKCkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAg
ICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7CiB9CiAKIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CiAgICAgR0x1aW50IGhhbmRsZSA9IDA7CiAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KC8qIGNvdW50ICovIDEsICZoYW5kbGUpOwogICAgIHJldHVybiBoYW5kbGU7CkBAIC0xNDc1LDEz
ICsxNDc1LDEzIEBAIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWEKIAog
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVt
IHR5cGUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsQ3Jl
YXRlU2hhZGVyKHR5cGUpOwogfQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBH
THVpbnQgaGFuZGxlID0gMDsKICAgICBnbEdlblRleHR1cmVzKDEsICZoYW5kbGUpOwogICAgIHJl
dHVybiBoYW5kbGU7CkBAIC0xNDg5LDM3ICsxNDg5LDM3IEBAIFBsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWEKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOwogICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZl
cikKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
cHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmZnJhbWVidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRl
cmJ1ZmZlcikKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVy
ZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
cHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVRleHR1cmVz
KDEsICZ0ZXh0dXJlKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDk0MDMzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw5OSBAQAorMjAxMS0wOC0yOSAgQ2hyaXMgTWFycmluICA8Y21hcnJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwg
dG8gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIGFuZCBhZGQgYSBkdW1teSB2ZXJzaW9uIG9mIHRo
aXMgY2xhc3MgZm9yIE1hYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjcxNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogc3JjL0V4dGVuc2lvbnMzRENocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpFeHRlbnNpb25z
M0RDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6c3Vw
cG9ydHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUVu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6
YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVt
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNEQ2hyb21pdW06Om1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6dW5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0p
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06Om1hcFRleFN1YkltYWdl
MkRDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6dW5t
YXBUZXhTdWJJbWFnZTJEQ0hST01JVU0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNE
Q2hyb21pdW06OnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpyYXRlTGltaXRPZmZzY3JlZW5Db250
ZXh0Q0hST01JVU0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OnBh
aW50RnJhbWVidWZmZXJUb0NhbnZhcyk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNE
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRl
eHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwbGF0Zm9ybVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpnckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJrTGF5ZXJDb21wb3NpdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bGF5ZXJDb21wb3Np
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRG
cmFtZWJ1ZmZlclRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0NvbnRleHRMb3N0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNHTEVTMkNv
bXBsaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJp
bmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRQcm9ncmFtSW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFNo
YWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpzaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1hdHJpeDJmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtTWF0
cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0
RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmlzUmVzb3VyY2VTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6aW5pdGlhbGl6ZUV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpzdXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0V4dGVuc2lvbkVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdyQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0Q29udGV4
dExvc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNH
TEVTMkNvbXBsaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKToKKyAgICAgICAgKiBz
cmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oLgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRl
eHQzRCk6CisKIDIwMTEtMDgtMjkgIEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+
CiAKICAgICAgICAgW0Nocm9taXVtXSBBZGQgYWJpbGl0eSB0byBkbyBzdGF0aWMgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIGRlc2VyaWFsaXphdGlvbgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAkocmV2aXNpb24gOTM5NzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw3ICszNjMsNyBAQAogICAgICAgICAgICAgICAgICdz
cmMvR2VvbG9jYXRpb25DbGllbnRQcm94eS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvR2Vv
bG9jYXRpb25DbGllbnRQcm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL0dyYXBoaWNzQ29u
dGV4dDNEQ2hyb21pdW0uY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL0dyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udEluZm8uY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0V4dGVuc2lvbnMzRENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDkzOTc5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJF
eHRlbnNpb25zM0RDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9u
czNEQ2hyb21pdW06OkV4dGVuc2lvbnMzRENocm9taXVtKEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwqIGludGVybmFsKQotICAgIDogbV9pbnRlcm5hbChpbnRlcm5hbCkKK0V4dGVuc2lvbnMzRENo
cm9taXVtOjpFeHRlbnNpb25zM0RDaHJvbWl1bShHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIHBy
aXYpCisgICAgOiBtX3ByaXZhdGUocHJpdikKIHsKIH0KIApAQCAtNDUsNyArNDUsNyBAQCBFeHRl
bnNpb25zM0RDaHJvbWl1bTo6fkV4dGVuc2lvbnMzRENocm9tCiAKIGJvb2wgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gbV9p
bnRlcm5hbC0+c3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
c3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06
OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtNTMsNDggKzUzLDQ4IEBAIHZv
aWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUVuYWJsZWQKICNpZm5kZWYgTkRFQlVHCiAg
ICAgYm9vbCByZXN1bHQgPQogI2VuZGlmCi0gICAgICAgIG1faW50ZXJuYWwtPmVuc3VyZUV4dGVu
c2lvbkVuYWJsZWQobmFtZSk7CisgICAgICAgIG1fcHJpdmF0ZS0+ZW5zdXJlRXh0ZW5zaW9uRW5h
YmxlZChuYW1lKTsKICAgICBBU1NFUlQocmVzdWx0KTsKIH0KIAogYm9vbCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gbV9p
bnRlcm5hbC0+aXNFeHRlbnNpb25FbmFibGVkKG5hbWUpOworICAgIHJldHVybiBtX3ByaXZhdGUt
PmlzRXh0ZW5zaW9uRW5hYmxlZChuYW1lKTsKIH0KIAogaW50IEV4dGVuc2lvbnMzRENocm9taXVt
OjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihtX2ludGVybmFsLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KG1fcHJpdmF0ZS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6YmxpdEZyYW1lYnVmZmVyKGxvbmcg
c3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxv
bmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5z
aWduZWQgbG9uZyBmaWx0ZXIpCiB7Ci0gICAgbV9pbnRlcm5hbC0+YmxpdEZyYW1lYnVmZmVyQ0hS
T01JVU0oc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRz
dFkxLCBtYXNrLCBmaWx0ZXIpOworICAgIG1fcHJpdmF0ZS0+YmxpdEZyYW1lYnVmZmVyQ0hST01J
VU0oc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkx
LCBtYXNrLCBmaWx0ZXIpOwogfQogCiB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0gICAgbV9pbnRlcm5hbC0+cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlQ0hST01JVU0odGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9wcml2YXRlLT5yZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGVDSFJPTUlVTSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCogRXh0ZW5zaW9uczNEQ2hyb21pdW06Om1hcEJ1ZmZlclN1
YkRhdGFDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBvZmZzZXQsIGludCBzaXplLCB1bnNp
Z25lZCBhY2Nlc3MpCiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm1hcEJ1ZmZlclN1YkRhdGFD
SFJPTUlVTSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgYWNjZXNzKTsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0odGFyZ2V0LCBvZmZzZXQsIHNpemUsIGFjY2Vz
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwQnVmZmVyU3ViRGF0YUNI
Uk9NSVVNKGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbV9pbnRlcm5hbC0+dW5tYXBCdWZmZXJT
dWJEYXRhQ0hST01JVU0oZGF0YSk7CisgICAgbV9wcml2YXRlLT51bm1hcEJ1ZmZlclN1YkRhdGFD
SFJPTUlVTShkYXRhKTsKIH0KIAogdm9pZCogRXh0ZW5zaW9uczNEQ2hyb21pdW06Om1hcFRleFN1
YkltYWdlMkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQs
IGludCB5b2Zmc2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5z
aWduZWQgdHlwZSwgdW5zaWduZWQgYWNjZXNzKQogewotICAgIHJldHVybiBtX2ludGVybmFsLT5t
YXBUZXhTdWJJbWFnZTJEQ0hST01JVU0odGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhY2Nlc3MpOworICAgIHJldHVybiBtX3ByaXZh
dGUtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFjY2Vzcyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQq
IGRhdGEpCiB7Ci0gICAgbV9pbnRlcm5hbC0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oZGF0
YSk7CisgICAgbV9wcml2YXRlLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShkYXRhKTsKIH0K
IAogUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJy
YXlPRVMoKQpAQCAtMTE3LDE3ICsxMTcsMTcgQEAgdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6
YmluZFZlcnRleEFycgogCiB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpzZXRTd2FwQnVmZmVy
c0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPFN3YXBCdWZmZXJzQ29tcGxldGVD
YWxsYmFja0NIUk9NSVVNPiBjYWxsYmFjaykKIHsKLSAgICBtX2ludGVybmFsLT5zZXRTd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShjYWxsYmFjayk7CisgICAgbV9wcml2YXRlLT5z
ZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShjYWxsYmFjayk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlV
TSgpCiB7Ci0gICAgbV9pbnRlcm5hbC0+cmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVN
KCk7CisgICAgbV9wcml2YXRlLT5yYXRlTGltaXRPZmZzY3JlZW5Db250ZXh0Q0hST01JVU0oKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFz
KGludCBmcmFtZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5
QWxwaGEsIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBtX2ludGVybmFsLT5wYWlu
dEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXIsIHdpZHRoLCBoZWlnaHQsIHByZW11bHRp
cGx5QWxwaGEsIGltYWdlQnVmZmVyKTsKKyAgICBtX3ByaXZhdGUtPnBhaW50RnJhbWVidWZmZXJU
b0NhbnZhcyhmcmFtZWJ1ZmZlciwgd2lkdGgsIGhlaWdodCwgcHJlbXVsdGlwbHlBbHBoYSwgaW1h
Z2VCdWZmZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcAkocmV2aXNpb24gOTM5NzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzRENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKICNp
bmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtNjcsMjMgKzY3LDIzIEBACiAKIC8vIFRo
ZXJlIGFyZSB0d28gbGV2ZWxzIG9mIGRlbGVnYXRpb24gaW4gdGhpcyBmaWxlOgogLy8KLS8vICAg
MS4gR3JhcGhpY3NDb250ZXh0M0QgZGVsZWdhdGVzIHRvIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuIFRoaXMgaXMgZG9uZQorLy8gICAxLiBHcmFwaGljc0NvbnRleHQzRCBkZWxlZ2F0ZXMgdG8g
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLiBUaGlzIGlzIGRvbmUKIC8vICAgICAgc28gdGhhdCB3
ZSBoYXZlIHNvbWUgcGxhY2UgdG8gc3RvcmUgZGF0YSBtZW1iZXJzIGNvbW1vbiBhbW9uZwotLy8g
ICAgICBpbXBsZW1lbnRhdGlvbnM7IEdyYXBoaWNzQ29udGV4dDNEIG9ubHkgcHJvdmlkZXMgdXMg
dGhlIG1faW50ZXJuYWwKLS8vICAgICAgcG9pbnRlci4gV2UgYWx3YXlzIGRlbGVnYXRlIHRvIHRo
ZSBHcmFwaGljc0NvbnRleHQzREludGVybmFsLiBXaGlsZSB3ZQorLy8gICAgICBpbXBsZW1lbnRh
dGlvbnM7IEdyYXBoaWNzQ29udGV4dDNEIG9ubHkgcHJvdmlkZXMgdXMgdGhlIG1fcHJpdmF0ZQor
Ly8gICAgICBwb2ludGVyLiBXZSBhbHdheXMgZGVsZWdhdGUgdG8gdGhlIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS4gV2hpbGUgd2UKIC8vICAgICAgY291bGQgc2lkZXN0ZXAgaXQgYW5kIGdvIGRp
cmVjdGx5IHRvIHRoZSBXZWJHcmFwaGljc0NvbnRleHQzRCBpbiBzb21lCiAvLyAgICAgIGNhc2Vz
LCBpdCBpcyBiZXR0ZXIgZm9yIGNvbnNpc3RlbmN5IHRvIGFsd2F5cyBkZWxlZ2F0ZSB0aHJvdWdo
IGl0LgogLy8KLS8vICAgMi4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBkZWxlZ2F0ZXMgdG8g
YW4gaW1wbGVtZW50YXRpb24gb2YKKy8vICAgMi4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIGRl
bGVnYXRlcyB0byBhbiBpbXBsZW1lbnRhdGlvbiBvZgogLy8gICAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRC4gVGhpcyBpcyBkb25lIHNvIHdlIGhhdmUgYSBwbGFjZSB0byBpbmplY3QgYW4KIC8vICAg
ICAgaW1wbGVtZW50YXRpb24gd2hpY2ggcmVtb3RlcyB0aGUgT3BlbkdMIGNhbGxzIGFjcm9zcyBw
cm9jZXNzZXMuCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBH
cmFwaGljc0NvbnRleHQzREludGVybmFsCisvLyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUKIAot
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCitH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCiAgICAg
OiBtX3dlYlZpZXdJbXBsKDApCiAgICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9u
cyhmYWxzZSkKICAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNlKQpAQCAtOTgsNyArOTgsNyBA
QCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRlCiB7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKK0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCiB7CiAjaWYg
VVNFKFNLSUEpCiAgICAgaWYgKG1fZ3JDb250ZXh0KSB7CkBAIC0xMDgsNyArMTA4LDcgQEAgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udAogI2VuZGlmCiB9CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFs
aXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogewogICAgIFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgd2ViQXR0cmlidXRlczsKICAgICB3ZWJB
dHRyaWJ1dGVzLmFscGhhID0gYXR0cnMuYWxwaGE7CkBAIC0xMzYsMTkgKzEzNiwxOSBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLVdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKK1dlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNv
bnRleHQtPm1faW50ZXJuYWwtPm1faW1wbC5nZXQoKTsKKyAgICByZXR1cm4gY29udGV4dC0+bV9w
cml2YXRlLT5tX2ltcGwuZ2V0KCk7CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0
CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5nZXQo
KTsKIH0KIAotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0
Zm9ybVRleHR1cmUoKSBjb25zdAorUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fd2ViVmlld0lt
cGwpOwogICAgIG1faW1wbC0+c2V0UGFyZW50Q29udGV4dChtX3dlYlZpZXdJbXBsLT5ncmFwaGlj
c0NvbnRleHQzRCgpKTsKQEAgLTE1Niw3ICsxNTYsNyBAQCBQbGF0Zm9ybTNET2JqZWN0IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuCiB9CiAKICNpZiBVU0UoU0tJQSkKLUdyQ29udGV4dCogR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z3JDb250ZXh0KCkKK0dyQ29udGV4dCogR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpnckNvbnRleHQoKQogewogICAgIC8vIExpbWl0IHRoZSBudW1iZXIgb2Yg
dGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgogICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4VGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7CkBAIC0xNzMsMTkgKzE3Mywx
OSBAQCBHckNvbnRleHQqIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdyCiB9CiAjZW5kaWYK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwcmVwYXJlVGV4dHVyZSgpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cHJlcGFyZVRleHR1cmUoKQogewogICAgIG1faW1w
bC0+cHJlcGFyZVRleHR1cmUoKTsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLVdlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZv
cm1MYXllcigpIGNvbnN0CitXZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29tcG9zaXRpbmdM
YXllci5nZXQoKTsKIH0KICNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFy
a0NvbnRleHRDaGFuZ2VkKCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgcGxhdGZvcm1MYXllcigpLT5zZXRUZXh0dXJlVXBkYXRlZCgpOwpAQCAtMTkzLDE3ICsxOTMs
MTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYXJrQ29udAogICAgIG1fbGF5
ZXJDb21wb3NpdGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
bWFya0xheWVyQ29tcG9zaXRlZCgpCiB7CiAgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmxheWVyQ29tcG9zaXRlZCgpIGNv
bnN0Citib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bGF5ZXJDb21wb3NpdGVkKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFtZWJ1ZmZl
ciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludEZy
YW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQogewogICAg
IHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IDA7CiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICog
d2lkdGggKiBoZWlnaHQ7CkBAIC0yNzAsMTMgKzI3MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OnBhaW50RnJhCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7
CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZl
cigpOwogICAgIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcygwLCBtX2ltcGwtPndpZHRoKCksIG1f
aW1wbC0+aGVpZ2h0KCksICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlw
bGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3Np
dGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChwbGF0Zm9ybUxheWVyKCkp
CkBAIC0yODUsNyArMjg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWlu
dENvbQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkK
K1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKIHsKICAgICBpZiAobV9pbXBsLT5nZXRDb250ZXh0
QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0z
MDIsMTQgKzMwMiwxNCBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RJ
CiAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0Citib29sIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CiB7CiAg
ICAgLy8gSWYgdGhlIGdwdSBjb21wb3NpdG9yIGlzIG9uIHRoZW4gc2tpcCB0aGUgcmVhZGJhY2sg
YW5kIHNvZnR3YXJlIHJlbmRlcmluZyBwYXRoLgogICAgIEFTU0VSVChtX3dlYlZpZXdJbXBsKTsK
ICAgICByZXR1cm4gIW1fd2ViVmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBtX2ltcGwtPndpZHRo
KCkgJiYgaGVpZ2h0ID09IG1faW1wbC0+aGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMx
NywxMzYgKzMxNywxMzYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBl
KAogICAgIG1faW1wbC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAotSW50U2l6ZSBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0
CitJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUoKSBjb25zdAogewogICAgIHJldHVybiBJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9p
bXBsLT5oZWlnaHQoKSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXND
b250ZXh0TG9zdCgpCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNDb250ZXh0TG9z
dCgpCiB7CiAgICAgcmV0dXJuIG1faW1wbC0+aXNDb250ZXh0TG9zdCgpOwogfQogCi0vLyBNYWNy
b3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRleHQzREludGVybmFs
IHRvCisvLyBNYWNyb3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUgdG8KIC8vIFdlYkdyYXBoaWNzQ29udGV4dDNELgogCiAjZGVmaW5lIERFTEVH
QVRFX1RPX0lNUEwobmFtZSkgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1l
KCkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUoKSBcCiB7IFwKICAgICBt
X2ltcGwtPm5hbWUoKTsgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfUihuYW1lLCBy
dCkgICAgICAgICAgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUoKSBcCity
dCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUoKSBcCiB7IFwKICAgICByZXR1cm4gbV9p
bXBsLT5uYW1lKCk7IFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzEobmFtZSwgdDEp
IFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSkgXAordm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEpIFwKIHsgXAogICAgIG1faW1wbC0+
bmFtZShhMSk7IFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzFSKG5hbWUsIHQxLCBy
dCkgICAgXAotcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSkgXAorcnQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExKSBcCiB7IFwKICAgICByZXR1cm4g
bV9pbXBsLT5uYW1lKGExKTsgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMihuYW1l
LCB0MSwgdDIpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwg
dDIgYTIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBh
MikgXAogeyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMik7IFwKIH0KIAogI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCi1ydCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpuYW1lKHQxIGExLCB0MiBhMikgXAogeyBcCiAgICAgcmV0dXJuIG1faW1wbC0+bmFtZShh
MSwgYTIpOyBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8zKG5hbWUsIHQxLCB0Miwg
dDMpICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMpICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGEx
LCB0MiBhMiwgdDMgYTMpICAgIFwKIHsgXAogICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzKTsg
ICAgICAgICAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8zUihuYW1l
LCB0MSwgdDIsIHQzLCBydCkgICBcCi1ydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1l
KHQxIGExLCB0MiBhMiwgdDMgYTMpICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCiB7IFwKICAgICByZXR1cm4gbV9pbXBsLT5u
YW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBERUxFR0FU
RV9UT19JTVBMXzQobmFtZSwgdDEsIHQyLCB0MywgdDQpICAgIFwKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0
KSAgXAogeyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAg
IFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzRSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0
LCBydCkgICAgICAgXAotcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwg
dDIgYTIsIHQzIGEzLCB0NCBhNCkgICAgICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgICAgICAgIFwKIHsgXAogICAgIHJl
dHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAogfQogCiAjZGVm
aW5lIERFTEVHQVRFX1RPX0lNUExfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAot
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMs
IHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpu
YW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKIHsgXAogICAg
IG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKIH0KIAogI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzVSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgcnQpICAgICAgXAotcnQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUpICAgICAgICBcCitydCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAogeyBcCiAgICAgcmV0dXJu
IG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKIH0KIAogI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzYobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgIFwKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwg
dDUgYTUsIHQ2IGE2KSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBh
MSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCiB7IFwKICAgICBtX2ltcGwt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwKIH0KIAogI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAotcnQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUsIHQ2IGE2KSBcCitydCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAogeyBcCiAgICAgcmV0dXJu
IG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICAgICAgXAogfQogCiAjZGVm
aW5lIERFTEVHQVRFX1RPX0lNUExfNyhuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0Nykg
XAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMg
YTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0
NyBhNykgXAogeyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3
KTsgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF83UihuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUsIHQ2LCB0NywgcnQpIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5h
bWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKK3J0
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUsIHQ2IGE2LCB0NyBhNykgXAogeyBcCiAgICAgcmV0dXJuIG1faW1wbC0+bmFtZShh
MSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RP
X0lNUExfOChuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAgIFwKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0
NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYs
IHQ3IGE3LCB0OCBhOCkgXAogeyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBh
NSwgYTYsIGE3LCBhOCk7ICAgICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfOVIo
bmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgcnQpIFwKLXJ0IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1
IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3
IGE3LCB0OCBhOCwgdDkgYTkpIFwKIHsgXAogICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEy
LCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRF
X1RPX0lNUExfMTAobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgdDEw
KSBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSwgdDEwIGExMCkg
XAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBh
MywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSwgdDEwIGExMCkgXAog
eyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTks
IGExMCk7IFwKIH0KIAogREVMRUdBVEVfVE9fSU1QTF9SKG1ha2VDb250ZXh0Q3VycmVudCwgYm9v
bCkKIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLT5pc0dMRVMyQ29tcGxpYW50KCk7CiB9CkBAIC00
NTQsNyArNDU0LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0dMRVMyQwog
REVMRUdBVEVfVE9fSU1QTF8xKGFjdGl2ZVRleHR1cmUsIEdDM0RlbnVtKQogREVMRUdBVEVfVE9f
SU1QTF8yKGF0dGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCkK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kQXR0cmliTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1l
KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgbV9pbXBsLT5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUu
dXRmOCgpLmRhdGEoKSk7CiB9CkBAIC00NjksMTcgKzQ2OSwxNyBAQCBERUxFR0FURV9UT19JTVBM
XzIoYmxlbmRFcXVhdGlvblNlcGFyYXRlCiBERUxFR0FURV9UT19JTVBMXzIoYmxlbmRGdW5jLCBH
QzNEZW51bSwgR0MzRGVudW0pCiBERUxFR0FURV9UT19JTVBMXzQoYmxlbmRGdW5jU2VwYXJhdGUs
IEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtKQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlw
dHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1
c2FnZSkKIHsKICAgICBtX2ltcGwtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YnVmZmVyRGF0YShHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1
c2FnZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpidWZmZXJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVz
YWdlKQogewogICAgIG1faW1wbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25z
dCB2b2lkKiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJ1ZmZlclN1YkRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgbV9pbXBsLT5idWZmZXJTdWJEYXRhKHRhcmdldCwg
b2Zmc2V0LCBzaXplLCBkYXRhKTsKIH0KQEAgLTUxMyw3ICs1MTMsNyBAQCBERUxFR0FURV9UT19J
TVBMXzUoZnJhbWVidWZmZXJUZXh0dXJlMkQsCiBERUxFR0FURV9UT19JTVBMXzEoZnJvbnRGYWNl
LCBHQzNEZW51bSkKIERFTEVHQVRFX1RPX0lNUExfMShnZW5lcmF0ZU1pcG1hcCwgR0MzRGVudW0p
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAg
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QWN0aXZlSW5mbyB3ZWJJbmZvOwogICAgIGlm
ICghbV9pbXBsLT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIHdlYkluZm8pKQpAQCAt
NTI0LDcgKzUyNCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QWN0aXYK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpn
ZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0
aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQogewogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2
ZUluZm8gd2ViSW5mbzsKICAgICBpZiAoIW1faW1wbC0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFt
LCBpbmRleCwgd2ViSW5mbykpCkBAIC01MzcsNyArNTM3LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpnZXRBY3RpdgogCiBERUxFR0FURV9UT19JTVBMXzQoZ2V0QXR0YWNoZWRT
aGFkZXJzLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEc2l6ZWksIEdDM0RzaXplaSosIFBsYXRmb3Jt
M0RPYmplY3QqKQogCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEF0dHJp
YkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQor
R0MzRGludCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIHJldHVybiBt
X2ltcGwtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9
CkBAIC01NDYsNyArNTQ2LDcgQEAgREVMRUdBVEVfVE9fSU1QTF8yKGdldEJvb2xlYW52LCBHQzNE
ZW51bQogCiBERUxFR0FURV9UT19JTVBMXzMoZ2V0QnVmZmVyUGFyYW1ldGVyaXYsIEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRGludCopCiAKLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK0dyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKQogewogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgd2ViQXR0cmlidXRlcyA9IG1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwpAQCAtNTY4LDcgKzU2
OCw3IEBAIERFTEVHQVRFX1RPX0lNUExfMihnZXRJbnRlZ2VydiwgR0MzRGVudW0KIAogREVMRUdB
VEVfVE9fSU1QTF8zKGdldFByb2dyYW1pdiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIEdD
M0RpbnQqKQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvZ3JhbUlu
Zm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQogewog
ICAgIHJldHVybiBtX2ltcGwtPmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOwogfQpAQCAtNTc3
LDE3ICs1NzcsMTcgQEAgREVMRUdBVEVfVE9fSU1QTF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFtZQog
CiBERUxFR0FURV9UT19JTVBMXzMoZ2V0U2hhZGVyaXYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rl
bnVtLCBHQzNEaW50KikKIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNo
YWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCitTdHJpbmcgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQog
ewogICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFNoYWRl
clNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKICAgICByZXR1cm4gbV9pbXBsLT5n
ZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCiB7CiAgICAgcmV0dXJuIG1faW1wbC0+
Z2V0U3RyaW5nKG5hbWUpOwogfQpAQCAtNTk4LDcgKzU5OCw3IEBAIERFTEVHQVRFX1RPX0lNUExf
MyhnZXRUZXhQYXJhbWV0ZXJpdiwgR0MKIERFTEVHQVRFX1RPX0lNUExfMyhnZXRVbmlmb3JtZnYs
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RmbG9hdCopCiBERUxFR0FURV9UT19JTVBM
XzMoZ2V0VW5pZm9ybWl2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEaW50KikKIAot
R0MzRGludCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQzNEaW50IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIHJldHVybiBtX2ltcGwtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQpAQCAtNjI2LDcg
KzYyNiw3IEBAIERFTEVHQVRFX1RPX0lNUExfNChyZW5kZXJidWZmZXJTdG9yYWdlLCAKIERFTEVH
QVRFX1RPX0lNUExfMihzYW1wbGVDb3ZlcmFnZSwgR0MzRGNsYW1wZiwgR0MzRGJvb2xlYW4pCiBE
RUxFR0FURV9UT19JTVBMXzQoc2Npc3NvciwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBH
QzNEc2l6ZWkpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c2hhZGVyU291cmNl
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIG1faW1wbC0+c2hhZGVyU291cmNlKHNo
YWRlciwgc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogfQpAQCAtNjM4LDcgKzYzOCw3IEBAIERFTEVH
QVRFX1RPX0lNUExfMihzdGVuY2lsTWFza1NlcGFyYXRlLCAKIERFTEVHQVRFX1RPX0lNUExfMyhz
dGVuY2lsT3AsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCiBERUxFR0FURV9UT19JTVBM
XzQoc3RlbmNpbE9wU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0Rl
bnVtKQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleEltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscykKIHsKICAgICBtX2ltcGwtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjQ3LDc4ICs2NDcsNzggQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp0ZXhJbWFnZQogREVMRUdBVEVfVE9fSU1QTF8zKHRleFBhcmFt
ZXRlcmYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGZsb2F0KQogREVMRUdBVEVfVE9fSU1QTF8z
KHRleFBhcmFtZXRlcmksIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCkKIAotdm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBj
b25zdCB2b2lkKiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewogICAgIG1f
aW1wbC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiB9CiAKIERFTEVHQVRFX1RPX0lNUExf
Mih1bmlmb3JtMWYsIEdDM0RpbnQsIEdDM0RmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0Mz
RHNpemVpIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTFmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1f
aW1wbC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lN
UExfMih1bmlmb3JtMWksIEdDM0RpbnQsIEdDM0RpbnQpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNE
c2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWl2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1faW1w
bC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lNUExf
Myh1bmlmb3JtMmYsIEdDM0RpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUp
CiB7CiAgICAgbV9pbXBsLT51bmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAogREVM
RUdBVEVfVE9fSU1QTF8zKHVuaWZvcm0yaSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCkKIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVp
IHNpemUpCiB7CiAgICAgbV9pbXBsLT51bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0K
IAogREVMRUdBVEVfVE9fSU1QTF80KHVuaWZvcm0zZiwgR0MzRGludCwgR0MzRGZsb2F0LCBHQzNE
ZmxvYXQsIEdDM0RmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlm
b3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1faW1wbC0+dW5pZm9ybTNm
dihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lNUExfNCh1bmlmb3JtM2ks
IEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2l2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1f
aW1wbC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lN
UExfNSh1bmlmb3JtNGYsIEdDM0RpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQs
IEdDM0RmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtNGZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1faW1wbC0+dW5pZm9ybTRmdihsb2Nh
dGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lNUExfNSh1bmlmb3JtNGksIEdDM0Rp
bnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2
LCBHQzNEc2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3Jt
NGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAg
IG1faW1wbC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplKQor
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6
ZWkgc2l6ZSkKIHsKICAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUs
IHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpCiB7CiAgICAgbV9p
bXBsLT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtTWF0cml4NGZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwg
R0MzRHNpemVpIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1h
dHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9h
dCogdmFsdWUsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1faW1wbC0+dW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7CiB9CkBAIC03NTQsMTQgKzc1NCwx
NCBAQCBERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlVGV4dHVyZSwgUGxhdGZvCiAKIERFTEVHQVRF
X1RPX0lNUExfMShzeW50aGVzaXplR0xFcnJvciwgR0MzRGVudW0pCiAKLUV4dGVuc2lvbnMzRCog
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0RXh0ZW5zaW9ucygpCitFeHRlbnNpb25zM0Qq
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFt
X2V4dGVuc2lvbnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNp
b25zM0RDaHJvbWl1bSh0aGlzKSk7CiAgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKIH0K
IAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc1Jlc291cmNlU2FmZSgpCitib29s
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNSZXNvdXJjZVNhZmUoKQogewogICAgIGlmICht
X3Jlc291cmNlU2FmZXR5ID09IFJlc291cmNlU2FmZXR5VW5rbm93bikKICAgICAgICAgbV9yZXNv
dXJjZVNhZmV0eSA9IGdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9DSFJPTUlVTV9yZXNv
dXJjZV9zYWZlIikgPyBSZXNvdXJjZVNhZmUgOiBSZXNvdXJjZVVuc2FmZTsKQEAgLTc4OCw3ICs3
ODgsNyBAQCBTdHJpbmcgbWFwRXh0ZW5zaW9uTmFtZShjb25zdCBTdHJpbmcmIG5hCiAKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Omlu
aXRpYWxpemVFeHRlbnNpb25zKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0
aWFsaXplRXh0ZW5zaW9ucygpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgQVNTRVJUKHN1Y2Nlc3MpOwpAQCAtODA0LDE0ICs4MDQsMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaQogfQogCiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKICAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOwogICAgIFN0cmluZyBt
YXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKICAgICByZXR1cm4gbV9lbmFibGVk
RXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKSB8fCBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9u
cy5jb250YWlucyhtYXBwZWROYW1lKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjplbnN1cmVFeHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjplbnN1cmVFeHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOwogCkBAIC04MzAsNyArODMw
LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjplbnN1cmVFeAogICAgIHJldHVy
biBtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5hbWUpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJpbmcm
IG5hbWUpCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNFeHRlbnNpb25FbmFibGVk
KGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOwogICAg
IFN0cmluZyBtYXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKQEAgLTg1MywxMTQg
Kzg1MywxMTQgQEAgREVMRUdBVEVfVE9fSU1QTF9SKGdldEdyYXBoaWNzUmVzZXRTdGF0dQogLy8K
IAogLy8gTWFjcm9zIHRvIGFzc2lzdCBpbiBkZWxlZ2F0aW5nIGZyb20gR3JhcGhpY3NDb250ZXh0
M0QgdG8KLS8vIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuCisvLyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuCiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUwobmFtZSkgXAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSgpIFwKIHsgXAotICAgIG1faW50ZXJuYWwtPm5hbWUoKTsg
XAorICAgIG1fcHJpdmF0ZS0+bmFtZSgpOyBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5U
RVJOQUxfUihuYW1lLCBydCkgICAgICAgICAgIFwKIHJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1l
KCkgXAogeyBcCi0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoKTsgXAorICAgIHJldHVybiBt
X3ByaXZhdGUtPm5hbWUoKTsgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEo
bmFtZSwgdDEpIFwKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpIFwKIHsgXAot
ICAgIG1faW50ZXJuYWwtPm5hbWUoYTEpOyBcCisgICAgbV9wcml2YXRlLT5uYW1lKGExKTsgXAog
fQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKG5hbWUsIHQxLCBydCkgICAgXAog
cnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpIFwKIHsgXAotICAgIHJldHVybiBtX2lu
dGVybmFsLT5uYW1lKGExKTsgXAorICAgIHJldHVybiBtX3ByaXZhdGUtPm5hbWUoYTEpOyBcCiB9
CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMihuYW1lLCB0MSwgdDIpIFwKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSBcCiB7IFwKLSAgICBtX2ludGVy
bmFsLT5uYW1lKGExLCBhMik7IFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyKTsgXAogfQog
CiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCiBy
dCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKIHsgXAotICAgIHJldHVy
biBtX2ludGVybmFsLT5uYW1lKGExLCBhMik7IFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1l
KGExLCBhMik7IFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8zKG5hbWUsIHQx
LCB0MiwgdDMpICAgXAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzKSAgICBcCiB7IFwKLSAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMpOyAgICAg
ICAgICAgICAgICAgIFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMyk7ICAgICAgICAg
ICAgICAgICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzNSKG5hbWUsIHQx
LCB0MiwgdDMsIHJ0KSAgIFwKIHJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMpICAgIFwKIHsgXAotICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwg
YTMpOyAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBh
MiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTlRF
Uk5BTF80KG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICBcCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAogeyBcCi0gICAgbV9pbnRlcm5h
bC0+bmFtZShhMSwgYTIsIGEzLCBhNCk7ICAgICAgICAgICAgICBcCisgICAgbV9wcml2YXRlLT5u
YW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBERUxFR0FU
RV9UT19JTlRFUk5BTF80UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgcnQpICAgIFwKIHJ0IEdyYXBo
aWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAogeyBcCi0g
ICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAor
ICAgIHJldHVybiBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAog
fQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzUobmFtZSwgdDEsIHQyLCB0MywgdDQs
IHQ1KSAgICAgIFwKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAogeyBcCi0gICAgbV9pbnRlcm5hbC0+bmFtZShh
MSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywg
YTQsIGE1KTsgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNihuYW1lLCB0
MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgXAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCiB7IFwKLSAgICBtX2lu
dGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgIFwKKyAgICBtX3ByaXZhdGUt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRF
X1RPX0lOVEVSTkFMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAogcnQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1
LCB0NiBhNikgXAogeyBcCi0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywg
YTQsIGE1LCBhNik7ICAgICAgIFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBhMiwg
YTMsIGE0LCBhNSwgYTYpOyAgICAgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJO
QUxfNyhuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NykgXAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0
NyBhNykgXAogeyBcCi0gICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2
LCBhNyk7ICAgXAorICAgIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBh
Nyk7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzdSKG5hbWUsIHQxLCB0
MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCBydCkgXAogcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKIHsgXAot
ICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KTsg
ICBcCisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBh
Nyk7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzgobmFtZSwgdDEsIHQy
LCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICBcCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0
OCBhOCkgXAogeyBcCi0gICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2
LCBhNywgYTgpOyAgICAgIFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1
LCBhNiwgYTcsIGE4KTsgICAgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxf
OShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5KSBcCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYg
YTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKIHsgXAotICAgIG1faW50ZXJuYWwtPm5hbWUoYTEs
IGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAgXAorICAgIG1fcHJpdmF0ZS0+bmFt
ZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCiB9CiAKICNkZWZpbmUg
REVMRUdBVEVfVE9fSU5URVJOQUxfOVIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcs
IHQ4LCB0OSwgcnQpIFwKIHJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKIHsgXAot
ICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBh
OCwgYTkpOyAgIFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBh
NSwgYTYsIGE3LCBhOCwgYTkpOyAgIFwKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgYm9v
bCkKQEAgLTk2OSw2MCArOTY5LDYwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmEKIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0g
ICAgV2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1faW50ZXJuYWwtPnBsYXRmb3Jt
TGF5ZXIoKTsKKyAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9wcml2YXRl
LT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgaWYgKGNhbnZhc0xheWVyKQogICAgICAgICBjYW52YXNM
YXllci0+c2V0Q29udGV4dCgwKTsKLSAgICBtX2ludGVybmFsLT5zZXRDb250ZXh0TG9zdENhbGxi
YWNrKG51bGxwdHIpOwotICAgIG1faW50ZXJuYWwtPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxs
YmFja0NIUk9NSVVNKG51bGxwdHIpOworICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxs
YmFjayhudWxscHRyKTsKKyAgICBtX3ByaXZhdGUtPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxs
YmFja0NIUk9NSVVNKG51bGxwdHIpOwogfQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
U3R5bGUgcmVuZGVyU3R5bGUpCiB7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw+IGludGVybmFsID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKSk7
CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gcHJpdiA9IGFkb3B0UHRyKG5l
dyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKSk7CiAgICAgaWYgKCFpbnRlcm5hbC0+aW5pdGlh
bGl6ZShhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRy
cywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
KTsKLSAgICByZXN1bHQtPm1faW50ZXJuYWwgPSBpbnRlcm5hbC5yZWxlYXNlKCk7CisgICAgcmVz
dWx0LT5tX3ByaXZhdGUgPSBwcml2LnJlbGVhc2UoKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW50ZXJu
YWwtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5w
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCk7CiB9CiAKIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPnBsYXRmb3JtVGV4dHVyZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnBsYXRmb3Jt
VGV4dHVyZSgpOwogfQogCiAjaWYgVVNFKFNLSUEpCiBHckNvbnRleHQqIEdyYXBoaWNzQ29udGV4
dDNEOjpnckNvbnRleHQoKQogewotICAgIHJldHVybiBtX2ludGVybmFsLT5nckNvbnRleHQoKTsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5nckNvbnRleHQoKTsKIH0KICNlbmRpZgogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiB7Ci0gICAgcmV0dXJuIG1faW50ZXJu
YWwtPnByZXBhcmVUZXh0dXJlKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cHJlcGFyZVRleHR1
cmUoKTsKIH0KIAogSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVybmFsRnJhbWVi
dWZmZXJTaXplKCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZl
KCkKIHsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNSZXNvdXJjZVNhZmUoKTsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5pc1Jlc291cmNlU2FmZSgpOwogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3Jt
TGF5ZXIoKSBjb25zdAogewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBt
X2ludGVybmFsLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgV2ViR0xMYXllckNocm9taXVtKiBjYW52
YXNMYXllciA9IG1fcHJpdmF0ZS0+cGxhdGZvcm1MYXllcigpOwogICAgIGNhbnZhc0xheWVyLT5z
ZXRDb250ZXh0KHRoaXMpOwogICAgIHJldHVybiBjYW52YXNMYXllcjsKIH0KQEAgLTExNzcsNyAr
MTE3Nyw3IEBAIERFTEVHQVRFX1RPX0lOVEVSTkFMKG1hcmtDb250ZXh0Q2hhbmdlZCkKIAogYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9pbnRlcm5hbC0+bGF5ZXJDb21wb3NpdGVkKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKQpAQCAtMTE4Niw3
ICsxMTg2LDcgQEAgREVMRUdBVEVfVE9fSU5URVJOQUxfMVIocGFpbnRDb21wb3NpdGVkUgogCiBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9pbnRlcm5hbC0+cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsKIH0KIAogREVMRUdBVEVf
VE9fSU5URVJOQUxfUihjcmVhdGVCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCkBAIC0xMjI5LDcg
KzEyMjksNyBAQCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkCiAgICAg
cmV0dXJuIGFkb3B0UHRyKGNiLmdldCgpID8gbmV3IEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFj
a0FkYXB0ZXIoY2IpIDogMCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250
ZXh0TG9zdENhbGxiYWNrPiBjYikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRD
b250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRM
b3N0Q2FsbGJhY2s+IGNiKQogewogICAgIG1fY29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIgPSBH
cmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOjpjcmVhdGUoY2IpOwogICAgIG1faW1w
bC0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhtX2NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyLmdl
dCgpKTsKQEAgLTEyMzcsNyArMTIzNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6c2V0Q29udGUKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzR0xFUzJDb21wbGlhbnQoKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc0dMRVMyQ29tcGxpYW50KCk7CiB9CiAKIGNsYXNzIFN3YXBC
dWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRDo6V2ViR3JhcGhpY3NTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlV
TSB7CkBAIC0xMjYxLDcgKzEyNjEsNyBAQCBQYXNzT3duUHRyPFN3YXBCdWZmZXJzQ29tcGxldGVD
YWxsYmFja0FkCiAgICAgcmV0dXJuIGFkb3B0UHRyKGNiLmdldCgpID8gbmV3IFN3YXBCdWZmZXJz
Q29tcGxldGVDYWxsYmFja0FkYXB0ZXIoY2IpIDogMCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0oUGFz
c093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNr
Q0hST01JVU0+IGNiKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldFN3YXBCdWZm
ZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKFBhc3NPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21p
dW06OlN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNPiBjYikKIHsKICAgICBtX3N3
YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIgPSBTd2FwQnVmZmVyc0NvbXBsZXRlQ2Fs
bGJhY2tBZGFwdGVyOjpjcmVhdGUoY2IpOwogICAgIG1faW1wbC0+c2V0U3dhcEJ1ZmZlcnNDb21w
bGV0ZUNhbGxiYWNrQ0hST01JVU0obV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVy
LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9H
cmFwaGljc0NvbnRleHQzREludGVybmFsLmgJKHJldmlzaW9uIDkzOTc5KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsX2gKLSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbF9oCi0KLSNpbmNsdWRl
ICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAiU2tCaXRt
YXAuaCIKLSNlbmRpZgotCi0jaWYgVVNFKFNLSUEpCi1jbGFzcyBHckNvbnRleHQ7Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNz
IFdlYlZpZXdJbXBsOwotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW07Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotY2xhc3MgV2ViR0xMYXllckNocm9taXVtOwotI2VuZGlmCi1jbGFzcyBHcmFw
aGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOwotY2xhc3MgU3dhcEJ1ZmZlcnNDb21wbGV0
ZUNhbGxiYWNrQWRhcHRlcjsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB7Ci1w
dWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOwotICAgIH5HcmFwaGljc0Nv
bnRleHQzREludGVybmFsKCk7Ci0KLSAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByb3Zp
ZGUgYWNjZXNzIHRvIHRoZSBsb3dlci1sZXZlbCBXZWJHcmFwaGljc0NvbnRleHQzRCwKLSAgICAv
LyB3aGljaCBpcyBuZWVkZWQgZm9yIHN1Ym9yZGluYXRlIGNvbnRleHRzIGxpa2UgV2ViR0wncyB0
byBzaGFyZSByZXNvdXJjZXMKLSAgICAvLyB3aXRoIHRoZSBjb21wb3NpdG9yJ3MgY29udGV4dC4K
LSAgICBzdGF0aWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZXh0cmFjdFdlYkdyYXBo
aWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKLQotICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OwotICAg
IFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7Ci0jaWYgVVNFKFNLSUEp
Ci0gICAgR3JDb250ZXh0KiBnckNvbnRleHQoKTsKLSNlbmRpZgotCi0gICAgYm9vbCBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLQotICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
OwotICAgIEludFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdDsKLSAgICBi
b29sIGlzUmVzb3VyY2VTYWZlKCk7Ci0KLSAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwot
ICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBtYXJrTGF5ZXJDb21w
b3NpdGVkKCk7Ci0KLSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqKTsKLSAgICB2b2lkIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhp
bnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBJbWFnZUJ1ZmZlciopOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwotICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZl
cigpIGNvbnN0OwotICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqKTsKLQotICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBXZWJHTExheWVyQ2hyb21pdW0qIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdDsKLSNlbmRpZgotICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgp
IGNvbnN0OwotCi0gICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKLSAgICBib29sIGlz
Q29udGV4dExvc3QoKTsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEVudHJ5IHBvaW50
cyBmb3IgV2ViR0wuCi0gICAgLy8KLSAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4
dHVyZSk7Ci0gICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcik7Ci0gICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAg
dm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAg
dm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsK
LSAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCk7Ci0gICAgdm9pZCBibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdy
ZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpOwotICAgIHZvaWQgYmxlbmRF
cXVhdGlvbihHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShH
QzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOwotICAgIHZvaWQgYmxlbmRGdW5j
KEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwotICAgIHZvaWQgYmxlbmRGdW5j
U2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0Fs
cGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7Ci0KLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpOwotICAgIHZvaWQgYnVm
ZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBk
YXRhLCBHQzNEZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBk
YXRhKTsKLQotICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFy
Z2V0KTsKLSAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGNsZWFy
Q29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwg
R0MzRGNsYW1wZiBhbHBoYSk7Ci0gICAgdm9pZCBjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgp
OwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQgcyk7Ci0gICAgdm9pZCBjb2xvck1hc2so
R0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0Mz
RGJvb2xlYW4gYWxwaGEpOwotICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0
KTsKLQotICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZvaWQg
Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBt
b2RlKTsKLSAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKTsKLSAgICB2b2lkIGRlcHRo
TWFzayhHQzNEYm9vbGVhbiBmbGFnKTsKLSAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6
TmVhciwgR0MzRGNsYW1wZiB6RmFyKTsKLSAgICB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2Fw
KTsKLSAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCk7Ci0g
ICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCk7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCk7Ci0KLSAgICB2b2lkIGVu
YWJsZShHQzNEZW51bSBjYXApOwotICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0Mz
RHVpbnQgaW5kZXgpOwotICAgIHZvaWQgZmluaXNoKCk7Ci0gICAgdm9pZCBmbHVzaCgpOwotICAg
IHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qp
OwotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rp
bnQgbGV2ZWwpOwotICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQg
Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKLQotICAgIGJvb2wgZ2V0QWN0aXZlQXR0
cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
KTsKLSAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOwotICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJz
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkq
IGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKTsKLSAgICBHQzNEaW50IGdldEF0dHJp
YkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9p
ZCBnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKTsKLSAgICB2
b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRD
b250ZXh0QXR0cmlidXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Ci0gICAgdm9pZCBn
ZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQg
Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdl
dFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSk7Ci0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmpl
Y3QpOwotICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQgZ2V0U2hhZGVyaXYo
UGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBT
dHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIFN0cmluZyBn
ZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgU3RyaW5nIGdldFN0cmluZyhH
QzNEZW51bSBuYW1lKTsKLSAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0VGV4UGFy
YW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUp
OwotICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSk7
Ci0gICAgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRWZXJ0ZXhB
dHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsK
LSAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBH
QzNEZW51bSBwbmFtZSk7Ci0KLSAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBtb2RlKTsKLSAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAg
ICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKLSAgICBHQzNEYm9vbGVhbiBp
c0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzUHJvZ3Jh
bShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0
Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0
KTsKLSAgICBHQzNEYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9p
ZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QpOwotICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFy
YW0pOwotICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQg
dW5pdHMpOwotCi0gICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgdm9pZCogZGF0YSk7Ci0KLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUs
IEdDM0Rib29sZWFuIGludmVydCk7Ci0gICAgdm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgc2hhZGVy
U291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgc3RyaW5nKTsKLSAgICB2b2lk
IHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsK
LSAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVu
YywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE1hc2soR0Mz
RHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0Rl
bnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7Ci0gICAgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShH
QzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBh
c3MpOwotCi0gICAgLy8gdGV4SW1hZ2UyRCByZXR1cm4gZmFsc2Ugb24gYW55IGVycm9yIHJhdGhl
ciB0aGFuIHVzaW5nIGFuIEV4Y2VwdGlvbkNvZGUuCi0gICAgYm9vbCB0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKLSAgICB2b2lkIHRleFBh
cmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFt
KTsKLSAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwotCi0gICAgdm9pZCB1bmlmb3JtMWYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdW5pZm9ybTFmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHVuaWZvcm0xaShH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpOwotICAgIHZvaWQgdW5pZm9ybTFpdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB1bmlmb3Jt
MmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIGZsb2F0IHkpOwotICAgIHZvaWQgdW5p
Zm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKTsK
LSAgICB2b2lkIHVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQg
eSk7Ci0gICAgdm9pZCB1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdD
M0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKLSAgICB2b2lkIHVuaWZvcm0zZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9p
ZCB1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rp
bnQgeik7Ci0gICAgdm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYs
IEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7Ci0gICAg
dm9pZCB1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVp
IHNpemUpOwotICAgIHZvaWQgdW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdyk7Ci0gICAgdm9pZCB1bmlmb3JtNGl2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHVu
aWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBH
QzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4
M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2
YWx1ZSwgR0MzRHNpemVpIHNpemUpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0Rz
aXplaSBzaXplKTsKLQotICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLSAg
ICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIHZvaWQgdmVy
dGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsKLSAgICB2b2lkIHZlcnRl
eEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZvaWQg
dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7
Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFs
dWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmli
NGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHos
IEdDM0RmbG9hdCB3KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWlu
dCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxp
emVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNE
aW50cHRyIG9mZnNldCk7Ci0KLSAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotCi0gICAgUGxhdGZvcm0zRE9i
amVjdCBjcmVhdGVCdWZmZXIoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUZyYW1lYnVm
ZmVyKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgUGxhdGZv
cm0zRE9iamVjdCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNy
ZWF0ZVNoYWRlcihHQzNEZW51bSk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVUZXh0dXJl
KCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lk
IGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0
Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KTsK
LSAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCk7Ci0KLSAgICB2b2lkIHN5
bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKTsKLQotICAgIHZvaWQgc2V0Q29udGV4dExv
c3RDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxi
YWNrPik7Ci0KLSAgICAvLyBFeHRlbnNpb25zM0Qgc3VwcG9ydC4KLSAgICBFeHRlbnNpb25zM0Qq
IGdldEV4dGVuc2lvbnMoKTsKLSAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyYgbmFtZSk7Ci0gICAgYm9vbCBlbnN1cmVFeHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmluZyYg
bmFtZSk7Ci0gICAgYm9vbCBpc0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKTsK
LQotICAgIC8vIEVYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAotICAgIGJvb2wgc3VwcG9ydHNC
R1JBKCk7Ci0KLSAgICAvLyBHTF9DSFJPTUlVTV9tYXBfc3ViCi0gICAgYm9vbCBzdXBwb3J0c01h
cFN1YkNIUk9NSVVNKCk7Ci0gICAgdm9pZCogbWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIG9mZnNldCwgR0MzRHNpemVpIHNpemUsIEdDM0RlbnVt
IGFjY2Vzcyk7Ci0gICAgdm9pZCB1bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShjb25zdCB2b2lk
Kik7Ci0gICAgdm9pZCogbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBHQzNEZW51bSBhY2Nlc3MpOwotICAgIHZvaWQgdW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
Y29uc3Qgdm9pZCopOwotCi0gICAgLy8gR0xfQ0hST01JVU1fZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUKLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlckNIUk9NSVVNKEdDM0RpbnQgc3JjWDAsIEdDM0Rp
bnQgc3JjWTAsIEdDM0RpbnQgc3JjWDEsIEdDM0RpbnQgc3JjWTEsIEdDM0RpbnQgZHN0WDAsIEdD
M0RpbnQgZHN0WTAsIEdDM0RpbnQgZHN0WDEsIEdDM0RpbnQgZHN0WTEsIEdDM0RiaXRmaWVsZCBt
YXNrLCBHQzNEZW51bSBmaWx0ZXIpOwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgc2FtcGxlcywgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0K
LSAgICAvLyBHTF9DSFJPTUlVTV9zd2FwYnVmZmVyc19jb21wbGV0ZV9jYWxsYmFjawotICAgIHZv
aWQgc2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxFeHRl
bnNpb25zM0RDaHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0+KTsK
LQotICAgIC8vIEdMX0NIUk9NSVVNX3JhdGVfbGltaXRfb2Zmc2NyZWVuX2NvbnRleHQKLSAgICB2
b2lkIHJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlVTSgpOwotCi0gICAgLy8gR0xfQVJC
X3JvYnVzdG5lc3MKLSAgICBHQzNEZW51bSBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7Ci0K
LXByaXZhdGU6Ci0gICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1faW1w
bDsKLSAgICBPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21pdW0+IG1fZXh0ZW5zaW9uczsKLSAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcj4gbV9jb250ZXh0TG9zdENh
bGxiYWNrQWRhcHRlcjsKLSAgICBPd25QdHI8U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRh
cHRlcj4gbV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwotICAgIFdlYktpdDo6
V2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7Ci0gICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxh
YmxlRXh0ZW5zaW9uczsKLSAgICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVkRXh0ZW5zaW9uczsK
LSAgICBIYXNoU2V0PFN0cmluZz4gbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnM7Ci0gICAgYm9vbCBt
X2xheWVyQ29tcG9zaXRlZDsKLQotICAgIGVudW0gUmVzb3VyY2VTYWZldHkgewotICAgICAgICBS
ZXNvdXJjZVNhZmV0eVVua25vd24sCi0gICAgICAgIFJlc291cmNlU2FmZSwKLSAgICAgICAgUmVz
b3VyY2VVbnNhZmUKLSAgICB9OwotICAgIFJlc291cmNlU2FmZXR5IG1fcmVzb3VyY2VTYWZldHk7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgUmVmUHRyPFdlYkdMTGF5
ZXJDaHJvbWl1bT4gbV9jb21wb3NpdGluZ0xheWVyOwotI2VuZGlmCi0jaWYgVVNFKFNLSUEpCi0g
ICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIENhbnZhcydzIGJhY2tpbmcgc3Rv
cmUgZG9uJ3QKLSAgICAvLyBtYXRjaCB0aG9zZSB0aGF0IHdlIHdlcmUgZ2l2ZW4gaW4gdGhlIG1v
c3QgcmVjZW50IGNhbGwgdG8KLSAgICAvLyByZXNoYXBlKCksIHRoZW4gd2UgbmVlZCBhbiBpbnRl
cm1lZGlhdGUgYml0bWFwIHRvIHJlYWQgYmFjayB0aGUKLSAgICAvLyBmcmFtZSBidWZmZXIgaW50
by4gVGhpcyBzZWVtcyB0byBoYXBwZW4gd2hlbiBDU1Mgc3R5bGVzIGFyZQotICAgIC8vIHVzZWQg
dG8gcmVzaXplIHRoZSBDYW52YXMuCi0gICAgU2tCaXRtYXAgbV9yZXNpemluZ0JpdG1hcDsKLQot
ICAgIEdyQ29udGV4dCogbV9nckNvbnRleHQ7Ci0jZW5kaWYKLQotI2lmIFVTRShDRykKLSAgICBP
d25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBtX3JlbmRlck91dHB1dDsKLSAgICBzaXplX3QgbV9y
ZW5kZXJPdXRwdXRTaXplOwotI2VuZGlmCi0KLSAgICB2b2lkIGluaXRpYWxpemVFeHRlbnNpb25z
KCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHcmFwaGljc0Nv
bnRleHQzRF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkocmV2aXNpb24gOTM5NzkpCShmcm9tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDo5Mzk3OSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsX2gKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbF9oCisK
KyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJy
YXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaWYgVVNFKFNLSUEpCisjaW5jbHVk
ZSAiU2tCaXRtYXAuaCIKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQz
RDsKK2NsYXNzIFdlYlZpZXdJbXBsOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW07CisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorY2xhc3MgV2ViR0xMYXllckNocm9taXVtOworI2VuZGlmCitj
bGFzcyBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOworY2xhc3MgU3dhcEJ1ZmZl
cnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOworICAgIH5H
cmFwaGljc0NvbnRleHQzREludGVybmFsKCk7CisKKyAgICBib29sIGluaXRpYWxpemUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJv
b2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBsb3dlci1sZXZlbCBXZWJHcmFwaGljc0NvbnRleHQz
RCwKKyAgICAvLyB3aGljaCBpcyBuZWVkZWQgZm9yIHN1Ym9yZGluYXRlIGNvbnRleHRzIGxpa2Ug
V2ViR0wncyB0byBzaGFyZSByZXNvdXJjZXMKKyAgICAvLyB3aXRoIHRoZSBjb21wb3NpdG9yJ3Mg
Y29udGV4dC4KKyAgICBzdGF0aWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZXh0cmFj
dFdlYkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKKworICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0OworICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7CisjaWYg
VVNFKFNLSUEpCisgICAgR3JDb250ZXh0KiBnckNvbnRleHQoKTsKKyNlbmRpZgorCisgICAgYm9v
bCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpOworICAgIEludFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25z
dDsKKyAgICBib29sIGlzUmVzb3VyY2VTYWZlKCk7CisKKyAgICB2b2lkIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOworICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7CisgICAgdm9pZCBtYXJr
TGF5ZXJDb21wb3NpdGVkKCk7CisKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKKyAgICB2b2lkIHBhaW50RnJhbWVidWZmZXJU
b0NhbnZhcyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZlciopOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIGJvb2wgcGFpbnRzSW50b0Nh
bnZhc0J1ZmZlcigpIGNvbnN0OworICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKKworICAgIHZvaWQgcHJlcGFyZVRleHR1cmUo
KTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBXZWJHTExheWVyQ2hy
b21pdW0qIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyNlbmRpZgorICAgIGJvb2wgaXNHTEVTMkNv
bXBsaWFudCgpIGNvbnN0OworCisgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAg
ICBib29sIGlzQ29udGV4dExvc3QoKTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEVu
dHJ5IHBvaW50cyBmb3IgV2ViR0wuCisgICAgLy8KKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSk7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcik7CisgICAgdm9pZCBiaW5kQXR0cmliTG9j
YXRpb24oUGxhdGZvcm0zRE9iamVjdCwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCk7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0KTsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCBibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNE
Y2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpOworICAgIHZv
aWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25T
ZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOworICAgIHZvaWQg
YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOworICAgIHZvaWQg
YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0Rl
bnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CisKKyAgICB2b2lkIGJ1ZmZlckRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpOworICAg
IHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25z
dCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSk7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25z
dCB2b2lkKiBkYXRhKTsKKworICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0Mz
RGVudW0gdGFyZ2V0KTsKKyAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKKyAgICB2
b2lkIGNsZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFt
cGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSk7CisgICAgdm9pZCBjbGVhckRlcHRoKEdDM0RjbGFt
cGYgZGVwdGgpOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQgcyk7CisgICAgdm9pZCBj
b2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4g
Ymx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpOworICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9y
bTNET2JqZWN0KTsKKworICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwor
ICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBjdWxsRmFjZShH
QzNEZW51bSBtb2RlKTsKKyAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKTsKKyAgICB2
b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKTsKKyAgICB2b2lkIGRlcHRoUmFuZ2UoR0Mz
RGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKTsKKyAgICB2b2lkIGRldGFjaFNoYWRlcihQ
bGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGRpc2FibGUoR0Mz
RGVudW0gY2FwKTsKKyAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBp
bmRleCk7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3Qs
IEdDM0RzaXplaSBjb3VudCk7CisgICAgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwg
R0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCk7CisKKyAg
ICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOworICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0MzRHVpbnQgaW5kZXgpOworICAgIHZvaWQgZmluaXNoKCk7CisgICAgdm9pZCBmbHVz
aCgpOworICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QpOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QsIEdDM0RpbnQgbGV2ZWwpOworICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwor
ICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKKworICAgIGJvb2wgZ2V0
QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mKTsKKyAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIHZvaWQgZ2V0QXR0YWNo
ZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBH
QzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKTsKKyAgICBHQzNEaW50
IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7
CisgICAgdm9pZCBnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVl
KTsKKyAgICB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Cisg
ICAgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOworICAg
IHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwor
ICAgIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKKyAg
ICB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50KiB2YWx1ZSk7CisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRm
b3JtM0RPYmplY3QpOworICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOworICAgIHZvaWQgZ2V0
U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KTsKKworICAg
IFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgU3RyaW5nIGdl
dFN0cmluZyhHQzNEZW51bSBuYW1lKTsKKyAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOworICAgIHZvaWQg
Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRVbmlm
b3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
KiB2YWx1ZSk7CisgICAgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBn
ZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKTsKKyAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50
IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7CisKKyAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBtb2RlKTsKKyAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0KTsKKyAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKKyAgICBHQzNE
Ym9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOworICAgIEdDM0Rib29sZWFu
IGlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICBHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1
ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9y
bTNET2JqZWN0KTsKKyAgICBHQzNEYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCk7
CisgICAgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQgcGFyYW0pOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBH
QzNEZmxvYXQgdW5pdHMpOworCisgICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSk7CisKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFt
cGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7CisgICAgdm9pZCBzY2lzc29yKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworICAgIHZv
aWQgc2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgc3RyaW5nKTsK
KyAgICB2b2lkIHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWlu
dCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0Mz
RGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOworICAgIHZvaWQgc3RlbmNp
bE1hc2soR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0R1aW50IG1hc2spOworICAgIHZvaWQgc3RlbmNpbE9wKEdDM0RlbnVtIGZh
aWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7CisgICAgdm9pZCBzdGVuY2lsT3BT
ZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0Mz
RGVudW0genBhc3MpOworCisgICAgLy8gdGV4SW1hZ2UyRCByZXR1cm4gZmFsc2Ugb24gYW55IGVy
cm9yIHJhdGhlciB0aGFuIHVzaW5nIGFuIEV4Y2VwdGlvbkNvZGUuCisgICAgYm9vbCB0ZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKyAgICB2
b2lkIHRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZs
b2F0IHBhcmFtKTsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworCisgICAgdm9pZCB1bmlmb3JtMWYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgpOworICAgIHZvaWQgdW5pZm9ybTFmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHVu
aWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpOworICAgIHZvaWQgdW5pZm9ybTFp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSk7CisgICAgdm9p
ZCB1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIGZsb2F0IHkpOworICAg
IHZvaWQgdW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSk7CisgICAgdm9pZCB1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0zZihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAgICB2b2lkIHVu
aWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSk7
CisgICAgdm9pZCB1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RpbnQgeik7CisgICAgdm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm00ZihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQg
dyk7CisgICAgdm9pZCB1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdyk7CisgICAgdm9pZCB1bmlm
b3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKTsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSk7CisgICAgdm9pZCB1bmlm
b3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0Mz
RGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRm
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFs
dWUsIEdDM0RzaXplaSBzaXplKTsKKworICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2Jq
ZWN0KTsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKKworICAg
IHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOworICAgIHZvaWQgdmVy
dGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0Mz
RGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRl
cihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVh
biBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc3Ry
aWRlLCBHQzNEaW50cHRyIG9mZnNldCk7CisKKyAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworCisgICAgUGxh
dGZvcm0zRE9iamVjdCBjcmVhdGVCdWZmZXIoKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0
ZUZyYW1lYnVmZmVyKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVQcm9ncmFtKCk7Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IGNyZWF0ZVNoYWRlcihHQzNEZW51bSk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVh
dGVUZXh0dXJlKCk7CisKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsK
KyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQg
ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1
ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0KTsKKyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCk7CisKKyAg
ICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKTsKKworICAgIHZvaWQgc2V0
Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0
TG9zdENhbGxiYWNrPik7CisKKyAgICAvLyBFeHRlbnNpb25zM0Qgc3VwcG9ydC4KKyAgICBFeHRl
bnNpb25zM0QqIGdldEV4dGVuc2lvbnMoKTsKKyAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSk7CisgICAgYm9vbCBlbnN1cmVFeHRlbnNpb25FbmFibGVkKGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgYm9vbCBpc0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5n
JiBuYW1lKTsKKworICAgIC8vIEVYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIGJvb2wg
c3VwcG9ydHNCR1JBKCk7CisKKyAgICAvLyBHTF9DSFJPTUlVTV9tYXBfc3ViCisgICAgYm9vbCBz
dXBwb3J0c01hcFN1YkNIUk9NSVVNKCk7CisgICAgdm9pZCogbWFwQnVmZmVyU3ViRGF0YUNIUk9N
SVVNKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIG9mZnNldCwgR0MzRHNpemVpIHNpemUs
IEdDM0RlbnVtIGFjY2Vzcyk7CisgICAgdm9pZCB1bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShj
b25zdCB2b2lkKik7CisgICAgdm9pZCogbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBHQzNEZW51bSBhY2Nlc3MpOworICAgIHZvaWQgdW5tYXBUZXhTdWJJbWFnZTJE
Q0hST01JVU0oY29uc3Qgdm9pZCopOworCisgICAgLy8gR0xfQ0hST01JVU1fZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUKKyAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlckNIUk9NSVVNKEdDM0RpbnQgc3Jj
WDAsIEdDM0RpbnQgc3JjWTAsIEdDM0RpbnQgc3JjWDEsIEdDM0RpbnQgc3JjWTEsIEdDM0RpbnQg
ZHN0WDAsIEdDM0RpbnQgZHN0WTAsIEdDM0RpbnQgZHN0WDEsIEdDM0RpbnQgZHN0WTEsIEdDM0Ri
aXRmaWVsZCBtYXNrLCBHQzNEZW51bSBmaWx0ZXIpOworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgc2FtcGxl
cywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCk7CisKKyAgICAvLyBHTF9DSFJPTUlVTV9zd2FwYnVmZmVyc19jb21wbGV0ZV9jYWxsYmFj
aworICAgIHZvaWQgc2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0oUGFzc093
blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hS
T01JVU0+KTsKKworICAgIC8vIEdMX0NIUk9NSVVNX3JhdGVfbGltaXRfb2Zmc2NyZWVuX2NvbnRl
eHQKKyAgICB2b2lkIHJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlVTSgpOworCisgICAg
Ly8gR0xfQVJCX3JvYnVzdG5lc3MKKyAgICBHQzNEZW51bSBnZXRHcmFwaGljc1Jlc2V0U3RhdHVz
QVJCKCk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0Q+IG1faW1wbDsKKyAgICBPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21pdW0+IG1fZXh0ZW5zaW9u
czsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcj4gbV9jb250
ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjsKKyAgICBPd25QdHI8U3dhcEJ1ZmZlcnNDb21wbGV0ZUNh
bGxiYWNrQWRhcHRlcj4gbV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOworICAg
IFdlYktpdDo6V2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CisgICAgYm9vbCBtX2luaXRpYWxp
emVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVkRXh0
ZW5zaW9uczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnM7Cisg
ICAgYm9vbCBtX2xheWVyQ29tcG9zaXRlZDsKKworICAgIGVudW0gUmVzb3VyY2VTYWZldHkgewor
ICAgICAgICBSZXNvdXJjZVNhZmV0eVVua25vd24sCisgICAgICAgIFJlc291cmNlU2FmZSwKKyAg
ICAgICAgUmVzb3VyY2VVbnNhZmUKKyAgICB9OworICAgIFJlc291cmNlU2FmZXR5IG1fcmVzb3Vy
Y2VTYWZldHk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgUmVmUHRy
PFdlYkdMTGF5ZXJDaHJvbWl1bT4gbV9jb21wb3NpdGluZ0xheWVyOworI2VuZGlmCisjaWYgVVNF
KFNLSUEpCisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIENhbnZhcydzIGJh
Y2tpbmcgc3RvcmUgZG9uJ3QKKyAgICAvLyBtYXRjaCB0aG9zZSB0aGF0IHdlIHdlcmUgZ2l2ZW4g
aW4gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8KKyAgICAvLyByZXNoYXBlKCksIHRoZW4gd2UgbmVl
ZCBhbiBpbnRlcm1lZGlhdGUgYml0bWFwIHRvIHJlYWQgYmFjayB0aGUKKyAgICAvLyBmcmFtZSBi
dWZmZXIgaW50by4gVGhpcyBzZWVtcyB0byBoYXBwZW4gd2hlbiBDU1Mgc3R5bGVzIGFyZQorICAg
IC8vIHVzZWQgdG8gcmVzaXplIHRoZSBDYW52YXMuCisgICAgU2tCaXRtYXAgbV9yZXNpemluZ0Jp
dG1hcDsKKworICAgIEdyQ29udGV4dCogbV9nckNvbnRleHQ7CisjZW5kaWYKKworI2lmIFVTRShD
RykKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBtX3JlbmRlck91dHB1dDsKKyAgICBz
aXplX3QgbV9yZW5kZXJPdXRwdXRTaXplOworI2VuZGlmCisKKyAgICB2b2lkIGluaXRpYWxpemVF
eHRlbnNpb25zKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBH
cmFwaGljc0NvbnRleHQzRF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkocmV2aXNpb24gOTM5NzkpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAotI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsX2gKKyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKKyNkZWZpbmUgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlX2gKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVt
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKQEAgLTUzLDEwICs1MywxMCBAQCBj
bGFzcyBXZWJHTExheWVyQ2hyb21pdW07CiBjbGFzcyBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJh
Y2tBZGFwdGVyOwogY2xhc3MgU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKIAot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUgewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKLSAg
ICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZSgpOworICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsKIAogICAgIGJvb2wgaW5p
dGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAKQEAgLTMzMSw0
ICszMzEsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAv
LyBHcmFwaGljc0NvbnRleHQzRF9oCisjZW5kaWYgLy8gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJl
dmlzaW9uIDkzOTc5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBACiAjaW5jbHVkZSAiR2VvbG9jYXRp
b25DbGllbnRQcm94eS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCkBAIC0yNjkxLDE3ICsyNjkxLDE3IEBAIFdlYkdyYXBoaWNzQ29udGV4
dDNEKiBXZWJWaWV3SW1wbDo6Z3JhcGgKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgaWYgKG1fcGFnZS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQoKSAmJiBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdCkgewotICAgICAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNv
bnRleHQgPSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpleHRyYWN0V2ViR3JhcGhpY3NDb250
ZXh0M0QobV9sYXllclRyZWVIb3N0LT5jb250ZXh0KCkpOworICAgICAgICAgICAgV2ViR3JhcGhp
Y3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJh
Y3RXZWJHcmFwaGljc0NvbnRleHQzRChtX2xheWVyVHJlZUhvc3QtPmNvbnRleHQoKSk7CiAgICAg
ICAgICAgICBpZiAod2ViQ29udGV4dCAmJiAhd2ViQ29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiB3ZWJDb250ZXh0OwogICAgICAgICB9CiAgICAgICAgIGlm
IChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QpIHsKLSAgICAgICAgICAgIFdl
YkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGlj
c0NvbnRleHQzRC5nZXQoKSk7CisgICAgICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2Vi
Q29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29u
dGV4dDNEKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5nZXQoKSk7CiAgICAg
ICAgICAgICBpZiAod2ViQ29udGV4dCAmJiAhd2ViQ29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiB3ZWJDb250ZXh0OwogICAgICAgICB9CiAgICAgICAgIG1f
dGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Ci0gICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpleHRyYWN0V2ViR3JhcGhpY3NDb250
ZXh0M0QobV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29u
dGV4dDNEKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5nZXQoKSk7CiAgICAg
fQogI2VuZGlmCiAgICAgcmV0dXJuIDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105638</attachid>
            <date>2011-08-30 09:04:34 -0700</date>
            <delta_ts>2011-08-30 09:48:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67172-20110830090433.patch</filename>
            <type>text/plain</type>
            <size>148056</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MDMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc5IEBACisyMDExLTA4LTI5ICBDaHJpcyBN
YXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbCB0byBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgYW5kIGFkZCBhIGR1bW15
IHZlcnNpb24gb2YgdGhpcyBjbGFzcyBmb3IgTWFjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRWaWV3cG9ydEdMV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpib3VuZGluZ1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRNdWx0aXNh
bXBsZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6YmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRl
cHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGlz
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkcmF3
QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxlbWVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGl4
ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25P
ZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21w
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292
ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2aWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UHJvZ3JhbWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6
CisKIDIwMTEtMDgtMjkgIEpvaG4gQmF1bWFuICA8amJhdW1hbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgU3BlZWQgdXAgdGV4SW1hZ2UgZnJvbSBCR1JBCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHJldmlzaW9uIDkzOTc5KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNDgxNyw4ICs0ODE3LDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRHJhd2lu
Z0J1ZmZlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9H
cmFwaGljc0NvbnRleHQzREd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCShyZXZpc2lvbiA5Mzk3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMCArMTA4LDcg
QEAgc3RydWN0IEFjdGl2ZUluZm8gewogICAgIEdDM0RpbnQgc2l6ZTsKIH07CiAKLS8vIEZJWE1F
OiBpZGVhbGx5IHRoaXMgd291bGQgYmUgdXNlZCBvbiBhbGwgcGxhdGZvcm1zLgotI2lmIFBMQVRG
T1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOwotI2VuZGlmCitjbGFzcyBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEIDogcHVi
bGljIFJlZkNvdW50ZWQ8R3JhcGhpY3NDb250ZXh0M0Q+IHsKIHB1YmxpYzoKQEAgLTk1NCwxMSAr
OTUxLDggQEAgcHVibGljOgogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vy
cm9yczsKICNlbmRpZgogCi0gICAgLy8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2Vk
IG9uIGFsbCBwbGF0Zm9ybXMuCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSAgICBmcmllbmQgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbD4gbV9pbnRlcm5hbDsKLSNlbmRpZgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gbV9wcml2
YXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNp
b25zM0RDaHJvbWl1bS5oCShyZXZpc2lvbiA5Mzk3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwog
Y2xhc3MgSW1hZ2VCdWZmZXI7CiAKIGNsYXNzIEV4dGVuc2lvbnMzRENocm9taXVtIDogcHVibGlj
IEV4dGVuc2lvbnMzRCB7CkBAIC04NiwxMSArODYsMTEgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICAvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgc3RyaWN0bHkgb3duZWQgYnkgdGhlIEdy
YXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9uIGFuZCBkbyBub3QKICAgICAvLyBuZWVkIHRv
IGJlIGluc3RhbnRpYXRlZCBieSBhbnkgb3RoZXIgY29kZS4KLSAgICBmcmllbmQgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKLSAgICBleHBsaWNpdCBFeHRlbnNpb25zM0RDaHJvbWl1
bShHcmFwaGljc0NvbnRleHQzREludGVybmFsKik7CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTsKKyAgICBleHBsaWNpdCBFeHRlbnNpb25zM0RDaHJvbWl1bShHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUqKTsKIAotICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWwKLSAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBt
X2ludGVybmFsOworICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZQorICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogbV9wcml2YXRlOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCShy
ZXZpc2lvbiA5Mzk3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9H
cmFwaGljc0NvbnRleHQzREd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
ICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRl
ICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVy
bmFsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKICNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCiAjaW5jbHVkZSA8d3RmL05v
dEZvdW5kLmg+CkBAIC00MywxMiArNDMsMTIgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gR3JhcGhpY3NDbwogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbD4gaW50ZXJuYWwgPSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGUo
KTsKLSAgICBpZiAoIWludGVybmFsKQorICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU+IHByaXYgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZSgpOworICAgIGlmICgh
cHJpdikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9z
dFdpbmRvdywgZmFsc2UpKTsKLSAgICBjb250ZXh0LT5tX2ludGVybmFsID0gaW50ZXJuYWwucmVs
ZWFzZSgpOworICAgIGNvbnRleHQtPm1fcHJpdmF0ZSA9IHByaXYucmVsZWFzZSgpOwogICAgIHJl
dHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIApAQCAtNjQsNyArNjQsNyBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKLSAg
ICBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQodGhp
cyk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjphZGRBY3RpdmVHcmFwaGljc0NvbnRl
eHQodGhpcyk7CiAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIApAQCAtMTE4LDggKzExOCw4
IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKIAogR3JhcGhpY3ND
b250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOwotICAgIGlmICghbV9p
bnRlcm5hbC0+bV9jb250ZXh0KQorICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVtb3Zl
QWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOworICAgIGlmICghbV9wcml2YXRlLT5tX2NvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMTM4
LDE0ICsxMzgsMTQgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgaWYg
KCFtX2ludGVybmFsKQorICAgIGlmICghbV9wcml2YXRlKQogICAgICAgICByZXR1cm47Ci0gICAg
bV9pbnRlcm5hbC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0Nv
bnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPm1fY29udGV4dDsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2NvbnRleHQ7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCShyZXZpc2lvbiA5Mzk3OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlCi0gKiAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2lm
bmRlZiBHcmFwaGljc0NvbnRleHQzREludGVybmFsX2gKLSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbF9oCi0KLXR5cGVkZWYgc3RydWN0IF9fR0xYY29udGV4dFJlYyAqR0xYQ29udGV4
dDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBHTFhQYnVmZmVyOwotdHlwZWRlZiB1bnNpZ25lZCBs
b25nIEdMWFBpeG1hcDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBHTHVieXRlOwotdHlwZWRlZiB1
bnNpZ25lZCBsb25nIFBpeG1hcDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB7Ci0gICAg
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+
IGNyZWF0ZSgpOwotICAgIH5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7Ci0gICAgdm9pZCBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBj
cmVhdGVQYnVmZmVyQ29udGV4dCgpOwotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKiBjcmVhdGVQaXhtYXBDb250ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bChHTFhDb250ZXh0LCBHTFhQYnVmZmVyKTsKLSAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFs
KEdMWENvbnRleHQsIFBpeG1hcCwgR0xYUGl4bWFwKTsKLQotICAgIHN0YXRpYyB2b2lkIGFkZEFj
dGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopOwotICAgIHN0YXRpYyB2b2lk
IHJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopOwotICAgIHN0
YXRpYyB2b2lkIGNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCgpOwotCi0gICAgR0xYQ29udGV4
dCBtX2NvbnRleHQ7Ci0gICAgR0xYUGJ1ZmZlciBtX3BidWZmZXI7Ci0gICAgUGl4bWFwIG1fcGl4
bWFwOwotICAgIEdMWFBpeG1hcCBtX2dseFBpeG1hcDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEdy
YXBoaWNzQ29udGV4dDNESXRlcm5hbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oCShyZXZpc2lvbiA5Mzk3OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDo5Mzk3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUK
KyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAorI2RlZmluZSBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsX2gKKwordHlwZWRlZiBzdHJ1Y3QgX19HTFhjb250ZXh0UmVjICpHTFhDb250ZXh0OwordHlw
ZWRlZiB1bnNpZ25lZCBsb25nIEdMWFBidWZmZXI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgR0xY
UGl4bWFwOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEdMdWJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgUGl4bWFwOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKKyAgICBwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbD4gY3JlYXRl
KCk7CisgICAgfkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKKyAgICB2b2lkIG1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CisgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIGNyZWF0ZVBi
dWZmZXJDb250ZXh0KCk7CisgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIGNy
ZWF0ZVBpeG1hcENvbnRleHQoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdMWENv
bnRleHQsIEdMWFBidWZmZXIpOworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR0xYQ29u
dGV4dCwgUGl4bWFwLCBHTFhQaXhtYXApOworCisgICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlR3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3Zl
QWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZv
aWQgY2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7CisKKyAgICBHTFhDb250ZXh0IG1fY29u
dGV4dDsKKyAgICBHTFhQYnVmZmVyIG1fcGJ1ZmZlcjsKKyAgICBQaXhtYXAgbV9waXhtYXA7Cisg
ICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOworfTsKKworfQorCisjZW5kaWYgLy8gR3JhcGhpY3ND
b250ZXh0M0RJdGVybmFsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHJl
dmlzaW9uIDkzOTc5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw4ICsxNyw4IEBA
CiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQogICovCiAKLSNpZm5kZWYgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbF9oCi0jZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAor
I2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaAorI2RlZmluZSBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGVfaAogCiB0eXBlZGVmIHN0cnVjdCBfX0dMWGNvbnRleHRSZWMgKkdMWENvbnRl
eHQ7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgR0xYUGJ1ZmZlcjsKQEAgLTMwLDE4ICszMCwxOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCi1jbGFz
cyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZSB7CiAgICAgcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw+IGNyZWF0ZSgpOwotICAgIH5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7
CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBjcmVhdGUo
KTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAgICAgdm9pZCBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKIAogICAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBjcmVhdGVQYnVm
ZmVyQ29udGV4dCgpOwotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBjcmVh
dGVQaXhtYXBDb250ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHTFhDb250
ZXh0LCBHTFhQYnVmZmVyKTsKLSAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdMWENvbnRl
eHQsIFBpeG1hcCwgR0xYUGl4bWFwKTsKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKiBjcmVhdGVQYnVmZmVyQ29udGV4dCgpOworICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUqIGNyZWF0ZVBpeG1hcENvbnRleHQoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUoR0xYQ29udGV4dCwgR0xYUGJ1ZmZlcik7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKEdMWENvbnRleHQsIFBpeG1hcCwgR0xYUGl4bWFwKTsKIAogICAgIHN0YXRpYyB2b2lkIGFk
ZEFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHN0YXRpYyB2
b2lkIHJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopOwpAQCAt
NTUsNCArNTUsNCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKIAogfQogCi0j
ZW5kaWYgLy8gR3JhcGhpY3NDb250ZXh0M0RJdGVybmFsX2gKKyNlbmRpZiAvLyBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24g
OTM5NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDIxIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgY3VycmVudGx5IGVtcHR5
IG9uIE1hYywgYnV0IHdpbGwgZ2V0IHBvcHVsYXRlZCBhcyAKKy8vIHRoZSByZXN0cnVjdHVyaW5n
IGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjkwMyBpcyBkb25l
CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgeworcHVibGljOgorICAgIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QpCisg
ICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQzRChncmFwaGljc0NvbnRleHQzRCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKSB7IH0KKworcHJpdmF0
ZToKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9ncmFwaGljc0NvbnRleHQzRDsKK307CisKIHN0
YXRpYyB2b2lkIHNldFBpeGVsRm9ybWF0KFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4m
IGF0dHJpYnMsIGludCBjb2xvckJpdHMsIGludCBkZXB0aEJpdHMsIGJvb2wgYWNjZWxlcmF0ZWQs
IGJvb2wgc3VwZXJzYW1wbGUsIGJvb2wgY2xvc2VzdCkKIHsKICAgICBhdHRyaWJzLmNsZWFyKCk7
CkBAIC0xMDQsNiArMTE5LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRo
U3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAg
LCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzKSkp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQz
RFF0LmNwcAkocmV2aXNpb24gOTM5NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCB0eXBlZGVmIGNoYXIgR0xjaGFyOwogI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4
IDB4ODhGMAogI2VuZGlmCiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgICAgIDogcHVibGljIFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyCkBAIC03MCw4ICs3MCw4IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwKICNlbmRpZgogewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93Kik7Ci0gICAgfkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250
ZXh0M0QqLCBIb3N0V2luZG93Kik7CisgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwog
CiAgICAgUUdMV2lkZ2V0KiBnZXRWaWV3cG9ydEdMV2lkZ2V0KCk7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCkBAIC05OCw3ICs5OCw3IEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQKICNlbmRpZgogfQogCi1H
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93KQorR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQogICAgICwgbV9nbFdpZGdldCgw
KQpAQCAtMTE3LDEzICsxMTcsMTMgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhp
Y3NDb250ZQogICAgIG1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKK0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCiB7CiAgICAgZGVsZXRl
IG1fZ2xXaWRnZXQ7CiAgICAgbV9nbFdpZGdldCA9IDA7CiB9CiAKLVFHTFdpZGdldCogR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0Vmlld3BvcnRHTFdpZGdldCgpCitRR0xXaWRnZXQqIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0Vmlld3BvcnRHTFdpZGdldCgpCiB7CiAgICAgUVdl
YlBhZ2VDbGllbnQqIHdlYlBhZ2VDbGllbnQgPSBtX2hvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNs
aWVudCgpOwogICAgIGlmICghd2ViUGFnZUNsaWVudCkKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0
aWMgaW5saW5lIHF1aW50MzIgc3dhcEJnclRvUmdiKHF1aW50CiB9CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBj
b25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0
bWFwVGV4dHVyZSogbWFzaykgY29uc3QKIHsKICAgICBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZl
ckFuZFJlc3RvcmVDb250ZXh0KCk7CiAKQEAgLTE5NywxMiArMTk3LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRUb1QKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAKLVFSZWN0RiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpib3Vu
ZGluZ1JlY3QoKSBjb25zdAorUVJlY3RGIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Ym91bmRp
bmdSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gUVJlY3RGKFFQb2ludEYoMCwgMCksIFFTaXpl
RihtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50KFFQYWludGVyKiBw
YWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbiwgUVdpZGdldCog
d2lkZ2V0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50KFFQYWludGVyKiBw
YWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbiwgUVdpZGdldCog
d2lkZ2V0KQogewogICAgIFFfVU5VU0VEKHdpZGdldCk7CiAKQEAgLTI1NCw3ICsyNTQsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50KFFQCiAgICAgcGFpbnRlci0+ZHJh
d0ltYWdlKC8qIHggKi8gMCwgLyogeSAqLyAwLCBvZmZzY3JlZW5JbWFnZSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXIoKSBj
b25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRNdWx0aXNhbXBsZUZyYW1l
YnVmZmVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1fY29udGV4dC0+bV9hdHRycy5hbnRpYWxpYXMp
CiAgICAgICAgIHJldHVybjsKQEAgLTI2NCw3ICsyNjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmJsaXRNdWx0CiAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fYm91bmRGQk8pOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVz
dG9yZUNvbnRleHQoKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRN
dWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVzdG9yZUNvbnRleHQoKSBjb25zdAogewogICAgIGlm
ICghbV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlhcykKICAgICAgICAgcmV0dXJuOwpAQCAtMjg3
LDcgKzI4Nyw3IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ28KICAg
ICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiAgICAgICAg
IHJldHVybiAwOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0
UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgZmFsc2UpKTsKLSAg
ICByZXR1cm4gY29udGV4dC0+bV9pbnRlcm5hbCA/IGNvbnRleHQucmVsZWFzZSgpIDogMDsKKyAg
ICByZXR1cm4gY29udGV4dC0+bV9wcml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQog
CiBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wpCkBAIC0zMDYs
NyArMzA2LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAg
ICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCi0gICAgLCBtX2ludGVy
bmFsKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKHRoaXMsIGhvc3RXaW5k
b3cpKSkKKyAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKHRoaXMsIGhvc3RXaW5kb3cpKSkKIHsKICNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQog
ICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwpAQCAtMzE0LDkgKzMxNCw5IEBAIEdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMo
KTsKICNlbmRpZgogCi0gICAgaWYgKCFtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5pc1ZhbGlkKCkp
IHsKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+aXNWYWxpZCgpKSB7CiAgICAgICAg
IExPR19FUlJPUigiR3JhcGhpY3NDb250ZXh0M0Q6IFFHTFdpZGdldCBpbml0aWFsaXphdGlvbiBm
YWlsZWQuIik7Ci0gICAgICAgIG1faW50ZXJuYWwgPSBudWxscHRyOworICAgICAgICBtX3ByaXZh
dGUgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMjcsNyArMzI3LDcg
QEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgICAgICBpbml0
aWFsaXplZCA9IHRydWU7CiAgICAgfQogICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBtX2lu
dGVybmFsID0gbnVsbHB0cjsKKyAgICAgICAgbV9wcml2YXRlID0gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMzg0LDggKzM4NCw4IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpH
cmFwaGljc0NvbnRleHQzRChHcmEKIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAg
ICBpZiAoIW1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPmlzVmFsaWQoKSkKKyAgICBtX3ByaXZhdGUt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ2xXaWRn
ZXQtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7CiAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKQEAgLTQw
MCw3ICs0MDAsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIAog
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCgpCiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQ7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9nbFdpZGdldDsKIH0KIAogUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKQEAgLTQxMSwyMiArNDEx
LDIyIEBAIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXQKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwuZ2V0KCk7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKIH0KICNlbmRpZgogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250
ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1
ZmZlcigpOwogICAgIFFQYWludGVyKiBwYWludGVyID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgbV9pbnRlcm5hbC0+cGFpbnQocGFpbnRlciwgMCwgMCk7
CisgICAgbV9wcml2YXRlLT5wYWludChwYWludGVyLCAwLCAwKTsKIH0KIAogI2lmIGRlZmluZWQo
UVRfT1BFTkdMX0VTXzIpCkBAIC00MzksMTMgKzQzOSwxMyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gR3JhcGhpY3NDb250ZXh0M0Q6CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIGlmICgod2lkdGggPT0gbV9jdXJyZW50V2lk
dGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkgfHwgKCFtX2ludGVybmFsKSkKKyAgICBp
ZiAoKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQp
IHx8ICghbV9wcml2YXRlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jdXJyZW50V2lkdGgg
PSB3aWR0aDsKICAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKIAogICAgIC8vIENyZWF0ZSBjb2xvciBidWZmZXIKICAgICBnbEJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOwpAQCAtNTAy
LDcgKzUwMiw3IEBAIEludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnIKIAog
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0
dXJlKTsKIH0KIApAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0
dGFjaFNoYWRlcihQbGEKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRl
cik7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3By
aXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xBdHRhY2hTaGFkZXIocHJv
Z3JhbSwgc2hhZGVyKTsKIH0KIApAQCAtNTIxLDExMSArNTIxLDExMSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9n
cmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
KQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9w
cml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsQmluZEJ1ZmZlcih0YXJn
ZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQogewotICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOwogICAgIG1fYm91bmRGQk8gPSBidWZmZXIgPyBidWZmZXIgOiBt
X2ZibzsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG1fYm91bmRGQk8pOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CiAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CiAgICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBH
QzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CiAgICAgZ2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsQmxlbmRFcXVhdGlvbihtb2Rl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxw
aGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2Zh
Y3RvciwgR0MzRGVudW0gZGZhY3RvcikKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
ICAgICBnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKIH0gICAgICAgCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVu
dW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCiB7Ci0gICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51
bSB1c2FnZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbEJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplLCAvKiBkYXRhICovIDAsIHVzYWdlKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXpl
LCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xCdWZmZXJTdWJEYXRh
KHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKIH0KIAogR0MzRGVudW0gR3JhcGhpY3NDb250
ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXModGFyZ2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNE
Y2xhbXBmIHIsIEdDM0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCiB7Ci0g
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykK
IHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJp
dmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbENsZWFyKG1hc2spOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCiB7
Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNf
MikKICAgICBnbENsZWFyRGVwdGhmKGRlcHRoKTsKICNlbHNlCkBAIC02MzUsNTYgKzYzNSw1NiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xDbGVhclN0ZW5jaWwocyk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBH
QzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CiAgICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQogewotICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOwogICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7Ci0gICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKIHsKLSAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKICAgICBnbEN1bGxGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbERlcHRoRnVuYyhmdW5jKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xEZXB0aE1hc2soZmxhZyk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VT
XzIpCiAgICAgZ2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7CiAjZWxzZQpAQCAtNjk2LDc5ICs2
OTYsNzkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYQogewogICAg
IEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKIHsKLSAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERpc2FibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCiB7Ci0gICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3Vu
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBt
b2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsRHJhd0VsZW1lbnRzKG1vZGUs
IGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZShHQzNE
ZW51bSBjYXApCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xFbmFibGUo
Y2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAg
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZpbmlzaCgpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xG
aW5pc2goKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsRmx1c2goKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsRnJh
bWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJn
ZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCiB7Ci0gICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKIHsKLSAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbEZyb250RmFjZShtb2RlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKIH0K
IApAQCAtNzc5LDcgKzc3OSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0
dHJpYigKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOwogCiAgICAgR0xpbnQgbWF4TGVuZ3RoID0gMDsKICAgICBnbEdldFByb2dyYW1p
dihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RI
LCAmbWF4TGVuZ3RoKTsKQEAgLTgxMSw3ICs4MTEsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRBY3RpdmVVbmlmb3JtCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAogICAgIEdMaW50IG1heExlbmd0aCA9IDA7CiAgICAg
Z2xHZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFtKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhMZW5ndGgpOwpAQCAtODQxLDcg
Kzg0MSw3IEBAIGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24KICAgICBp
ZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpOwogfQogCkBAIC04NTksMTkgKzg1OSwxOSBAQCBHQzNEZW51bSBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIAot
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRl
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBnbEdldEVycm9yKCk7CiB9
CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCiB7
Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgcmV0dXJuIFN0cmluZygoY29uc3Qg
Y2hhciopIGdsR2V0U3RyaW5nKG5hbWUpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xIaW50KHRhcmdldCwgbW9kZSk7CiB9CiAKQEAgLTg4MCwxMyAr
ODgwLDEzIEBAIEdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcigKICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogICAgIAotICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBnbElzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIEdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQogewot
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRl
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBnbElzRW5hYmxlZChjYXAp
OwogfQogCkBAIC04OTUsNyArODk1LDcgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzRnJhbWVidQogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKICAgICAKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xJc0Zy
YW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIApAQCAtOTA0LDcgKzkwNCw3IEBAIEdDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0KICAgICBpZiAoIXByb2dyYW0pCiAgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKICAgICAKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
ICAgICByZXR1cm4gZ2xJc1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTkxMyw3ICs5MTMsNyBA
QCBHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJiCiAgICAgaWYgKCFyZW5k
ZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKICAgICAKLSAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
OwogfQogCkBAIC05MjIsNyArOTIyLDcgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzU2hhZGVyKAogICAgIGlmICghc2hhZGVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAg
ICAgCi0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3By
aXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsSXNTaGFkZXIo
c2hhZGVyKTsKIH0KIApAQCAtOTMxLDM4ICs5MzEsMzggQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0M0Q6OmlzVGV4dHVyZQogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwogICAgIAotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIHJldHVybiBn
bElzVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdp
ZHRoKEdDM0RmbG9hdCB3aWR0aCkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAg
ICBnbExpbmVXaWR0aChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgpKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQogewog
ICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBn
bExpbmtQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhl
bFN0b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pCiB7Ci0gICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xQaXhlbFN0b3JlaShwYXJhbU5hbWUsIHBhcmFtKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFj
dG9yLCBHQzNEZmxvYXQgdW5pdHMpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAg
ICAgZ2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCog
ZGF0YSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICAKICAgICBpZiAodHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSB8fCBmb3JtYXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEpCiAgICAgICAgIHJldHVybjsKQEAgLTk3MiwxMyArOTcyLDEzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGkKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKLSAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICNpZiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKICAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgpAQCAt
MTAwMSwxMyArMTAwMSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJT
dG9yCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYg
dmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKICAgICBnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAg
ICAgZ2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCkBAIC0xMDE1LDcgKzEwMTUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoUGxhCiB7CiAgICAgQVNT
RVJUKHNoYWRlcik7CiAKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAogICAgIFN0cmlu
ZyBwcmVmaXhlZFNvdXJjZTsKIApAQCAtMTAzMywxNjkgKzEwMzMsMTY5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQbGEKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCiB7
Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xTdGVuY2lsRnVuYyhmdW5jLCBy
ZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBt
YXNrKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsU3RlbmNpbEZ1bmNT
ZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogICAgIGdsU3RlbmNpbE1hc2sobWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykK
IHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJp
dmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUoZmFjZSwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCiB7Ci0gICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNz
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUo
ZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZs
b2F0IHZhbHVlKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVGV4UGFy
YW1ldGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1l
LCBHQzNEaW50IHZhbHVlKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5pZm9ybTFmKGxvY2F0aW9u
LCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCiB7Ci0gICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKICAgICBnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQq
IGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
ICAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CiAgICAgZ2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCog
YXJyYXksIEdDM0RzaXplaSBzaXplKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwog
ICAgIGdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBH
QzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQogewotICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2
Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCiB7Ci0gICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CiAgICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50IHYwKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5p
Zm9ybTFpKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQog
ewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2
YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5pZm9ybTFpdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmko
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKIHsKLSAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEaW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CiAgICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOwogICAgIGdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBh
cnJheSwgR0MzRHNpemVpIHNpemUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAg
ICAgZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNE
aW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogICAgIGdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOwogICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCiB7
Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQogewotICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwg
dHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1N
YXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKICAgICBnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFVz
ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTEyMDMsMTA5ICsxMjAzLDEwOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogICAgIAotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVmFsaWRhdGVQcm9n
cmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIx
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogICAgIGdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQq
IGFycmF5KQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKIHsK
LSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0
ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFZlcnRleEF0dHJpYjJmKGluZGV4
LCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CiAgICAgZ2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0KiBhcnJheSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAg
ICBnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNE
ZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQogewotICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOwogICAgIGdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYz
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OwogICAgIGdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0
cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CiAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKLSAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKICAgICBnbEdldEJvb2xlYW52KHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFt
ZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogICAgIGdsR2V0RmxvYXR2KHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0Mz
RGludCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBhcmFt
TmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQogewotICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOwogICAgIGdsR2V0SW50ZWdlcnYocGFyYW1OYW1lLCB2YWx1ZSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcGFyYW1OYW1lLCB2
YWx1ZSk7CiB9CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OwogCiAgICAgR0xpbnQgbGVuZ3RoID0gMDsKICAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtLCBH
cmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKQEAgLTEzMjYsMjAg
KzEzMjYsMjAgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mbwogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0
YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgcGFyYW1OYW1lLCB2YWx1ZSk7
CiB9CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAogICAg
IEdMaW50IGxlbmd0aCA9IDA7CiAgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwpAQCAtMTM1OSw3ICsxMzU5LDcgQEAg
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTAogCiBTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsK
LSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0
ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAogICAgIEdMaW50IGxlbmd0aCA9IDA7CiAg
ICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfU09VUkNF
X0xFTkdUSCwgJmxlbmd0aCk7CkBAIC0xMzc5LDI1ICsxMzc5LDI1IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmMKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rm
bG9hdCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRU
ZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CiAgICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0
aW9uLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVl
KQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9w
cml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsR2V0VW5pZm9ybWl2KHBy
b2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKQEAgLTE0MDUsMjUgKzE0MDUsMjUgQEAgR0Mz
RGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvYwogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICAKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwYXJhbU5hbWUsIHZh
bHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwg
cGFyYW1OYW1lLCB2YWx1ZSk7CiB9CiAKIEdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUp
CiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3By
aXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgCiAgICAgR0x2b2lkKiBwb2lu
dGVyID0gMDsKICAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwYXJhbU5hbWUs
ICZwb2ludGVyKTsKQEAgLTE0MzIsMjAgKzE0MzIsMjAgQEAgR0MzRHNpemVpcHRyIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRWZXJ0ZQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmYsIEdD
M0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogfQogCiBQbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQogewotICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIEdMdWludCBoYW5kbGUgPSAwOwogICAgIGdsR2Vu
QnVmZmVycygvKiBjb3VudCAqLyAxLCAmaGFuZGxlKTsKICAgICByZXR1cm4gaGFuZGxlOwpAQCAt
MTQ1Myw3ICsxNDUzLDcgQEAgUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZl
cigpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgR0x1aW50IGhhbmRsZSA9
IDA7CiAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJmhhbmRsZSk7CiAgICAg
cmV0dXJuIGhhbmRsZTsKQEAgLTE0NjEsMTMgKzE0NjEsMTMgQEAgUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVQcm9ncmFtKCkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAg
ICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7CiB9CiAKIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CiAgICAgR0x1aW50IGhhbmRsZSA9IDA7CiAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KC8qIGNvdW50ICovIDEsICZoYW5kbGUpOwogICAgIHJldHVybiBoYW5kbGU7CkBAIC0xNDc1LDEz
ICsxNDc1LDEzIEBAIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWEKIAog
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVt
IHR5cGUpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsQ3Jl
YXRlU2hhZGVyKHR5cGUpOwogfQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBH
THVpbnQgaGFuZGxlID0gMDsKICAgICBnbEdlblRleHR1cmVzKDEsICZoYW5kbGUpOwogICAgIHJl
dHVybiBoYW5kbGU7CkBAIC0xNDg5LDM3ICsxNDg5LDM3IEBAIFBsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWEKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQogewotICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOwogICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZl
cikKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
cHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmZnJhbWVidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRl
cmJ1ZmZlcikKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVy
ZSkKIHsKLSAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
cHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVRleHR1cmVz
KDEsICZ0ZXh0dXJlKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDk0MDMzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw5OSBAQAorMjAxMS0wOC0yOSAgQ2hyaXMgTWFycmluICA8Y21hcnJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwg
dG8gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIGFuZCBhZGQgYSBkdW1teSB2ZXJzaW9uIG9mIHRo
aXMgY2xhc3MgZm9yIE1hYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjcxNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogc3JjL0V4dGVuc2lvbnMzRENocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpFeHRlbnNpb25z
M0RDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6c3Vw
cG9ydHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUVu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6
YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVt
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNEQ2hyb21pdW06Om1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6dW5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0p
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06Om1hcFRleFN1YkltYWdl
MkRDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6dW5t
YXBUZXhTdWJJbWFnZTJEQ0hST01JVU0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNE
Q2hyb21pdW06OnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpyYXRlTGltaXRPZmZzY3JlZW5Db250
ZXh0Q0hST01JVU0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OnBh
aW50RnJhbWVidWZmZXJUb0NhbnZhcyk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNE
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRl
eHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwbGF0Zm9ybVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpnckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJrTGF5ZXJDb21wb3NpdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bGF5ZXJDb21wb3Np
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRG
cmFtZWJ1ZmZlclRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0NvbnRleHRMb3N0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNHTEVTMkNv
bXBsaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJp
bmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRQcm9ncmFtSW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFNo
YWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpzaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1hdHJpeDJmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm1NYXRyaXgzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtTWF0
cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0
RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmlzUmVzb3VyY2VTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6aW5pdGlhbGl6ZUV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpzdXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0V4dGVuc2lvbkVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdyQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0Q29udGV4
dExvc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNH
TEVTMkNvbXBsaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKToKKyAgICAgICAgKiBz
cmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oLgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRl
eHQzRCk6CisKIDIwMTEtMDgtMjkgIEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+
CiAKICAgICAgICAgW0Nocm9taXVtXSBBZGQgYWJpbGl0eSB0byBkbyBzdGF0aWMgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIGRlc2VyaWFsaXphdGlvbgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAkocmV2aXNpb24gOTM5NzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw3ICszNjMsNyBAQAogICAgICAgICAgICAgICAgICdz
cmMvR2VvbG9jYXRpb25DbGllbnRQcm94eS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvR2Vv
bG9jYXRpb25DbGllbnRQcm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL0dyYXBoaWNzQ29u
dGV4dDNEQ2hyb21pdW0uY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL0dyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udEluZm8uY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0V4dGVuc2lvbnMzRENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDkzOTc5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJF
eHRlbnNpb25zM0RDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXh0ZW5zaW9u
czNEQ2hyb21pdW06OkV4dGVuc2lvbnMzRENocm9taXVtKEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwqIGludGVybmFsKQotICAgIDogbV9pbnRlcm5hbChpbnRlcm5hbCkKK0V4dGVuc2lvbnMzRENo
cm9taXVtOjpFeHRlbnNpb25zM0RDaHJvbWl1bShHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIHBy
aXYpCisgICAgOiBtX3ByaXZhdGUocHJpdikKIHsKIH0KIApAQCAtNDUsNyArNDUsNyBAQCBFeHRl
bnNpb25zM0RDaHJvbWl1bTo6fkV4dGVuc2lvbnMzRENocm9tCiAKIGJvb2wgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gbV9p
bnRlcm5hbC0+c3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
c3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06
OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtNTMsNDggKzUzLDQ4IEBAIHZv
aWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUVuYWJsZWQKICNpZm5kZWYgTkRFQlVHCiAg
ICAgYm9vbCByZXN1bHQgPQogI2VuZGlmCi0gICAgICAgIG1faW50ZXJuYWwtPmVuc3VyZUV4dGVu
c2lvbkVuYWJsZWQobmFtZSk7CisgICAgICAgIG1fcHJpdmF0ZS0+ZW5zdXJlRXh0ZW5zaW9uRW5h
YmxlZChuYW1lKTsKICAgICBBU1NFUlQocmVzdWx0KTsKIH0KIAogYm9vbCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gbV9p
bnRlcm5hbC0+aXNFeHRlbnNpb25FbmFibGVkKG5hbWUpOworICAgIHJldHVybiBtX3ByaXZhdGUt
PmlzRXh0ZW5zaW9uRW5hYmxlZChuYW1lKTsKIH0KIAogaW50IEV4dGVuc2lvbnMzRENocm9taXVt
OjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihtX2ludGVybmFsLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KG1fcHJpdmF0ZS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6YmxpdEZyYW1lYnVmZmVyKGxvbmcg
c3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxv
bmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5z
aWduZWQgbG9uZyBmaWx0ZXIpCiB7Ci0gICAgbV9pbnRlcm5hbC0+YmxpdEZyYW1lYnVmZmVyQ0hS
T01JVU0oc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRz
dFkxLCBtYXNrLCBmaWx0ZXIpOworICAgIG1fcHJpdmF0ZS0+YmxpdEZyYW1lYnVmZmVyQ0hST01J
VU0oc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkx
LCBtYXNrLCBmaWx0ZXIpOwogfQogCiB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0gICAgbV9pbnRlcm5hbC0+cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlQ0hST01JVU0odGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9wcml2YXRlLT5yZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGVDSFJPTUlVTSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCogRXh0ZW5zaW9uczNEQ2hyb21pdW06Om1hcEJ1ZmZlclN1
YkRhdGFDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBvZmZzZXQsIGludCBzaXplLCB1bnNp
Z25lZCBhY2Nlc3MpCiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm1hcEJ1ZmZlclN1YkRhdGFD
SFJPTUlVTSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgYWNjZXNzKTsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0odGFyZ2V0LCBvZmZzZXQsIHNpemUsIGFjY2Vz
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwQnVmZmVyU3ViRGF0YUNI
Uk9NSVVNKGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbV9pbnRlcm5hbC0+dW5tYXBCdWZmZXJT
dWJEYXRhQ0hST01JVU0oZGF0YSk7CisgICAgbV9wcml2YXRlLT51bm1hcEJ1ZmZlclN1YkRhdGFD
SFJPTUlVTShkYXRhKTsKIH0KIAogdm9pZCogRXh0ZW5zaW9uczNEQ2hyb21pdW06Om1hcFRleFN1
YkltYWdlMkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQs
IGludCB5b2Zmc2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5z
aWduZWQgdHlwZSwgdW5zaWduZWQgYWNjZXNzKQogewotICAgIHJldHVybiBtX2ludGVybmFsLT5t
YXBUZXhTdWJJbWFnZTJEQ0hST01JVU0odGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhY2Nlc3MpOworICAgIHJldHVybiBtX3ByaXZh
dGUtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFjY2Vzcyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQq
IGRhdGEpCiB7Ci0gICAgbV9pbnRlcm5hbC0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oZGF0
YSk7CisgICAgbV9wcml2YXRlLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShkYXRhKTsKIH0K
IAogUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJy
YXlPRVMoKQpAQCAtMTE3LDE3ICsxMTcsMTcgQEAgdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6
YmluZFZlcnRleEFycgogCiB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpzZXRTd2FwQnVmZmVy
c0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPFN3YXBCdWZmZXJzQ29tcGxldGVD
YWxsYmFja0NIUk9NSVVNPiBjYWxsYmFjaykKIHsKLSAgICBtX2ludGVybmFsLT5zZXRTd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShjYWxsYmFjayk7CisgICAgbV9wcml2YXRlLT5z
ZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShjYWxsYmFjayk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlV
TSgpCiB7Ci0gICAgbV9pbnRlcm5hbC0+cmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVN
KCk7CisgICAgbV9wcml2YXRlLT5yYXRlTGltaXRPZmZzY3JlZW5Db250ZXh0Q0hST01JVU0oKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFz
KGludCBmcmFtZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5
QWxwaGEsIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBtX2ludGVybmFsLT5wYWlu
dEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXIsIHdpZHRoLCBoZWlnaHQsIHByZW11bHRp
cGx5QWxwaGEsIGltYWdlQnVmZmVyKTsKKyAgICBtX3ByaXZhdGUtPnBhaW50RnJhbWVidWZmZXJU
b0NhbnZhcyhmcmFtZWJ1ZmZlciwgd2lkdGgsIGhlaWdodCwgcHJlbXVsdGlwbHlBbHBoYSwgaW1h
Z2VCdWZmZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcAkocmV2aXNpb24gOTM5NzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzRENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKICNp
bmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtNjcsMjMgKzY3LDIzIEBACiAKIC8vIFRo
ZXJlIGFyZSB0d28gbGV2ZWxzIG9mIGRlbGVnYXRpb24gaW4gdGhpcyBmaWxlOgogLy8KLS8vICAg
MS4gR3JhcGhpY3NDb250ZXh0M0QgZGVsZWdhdGVzIHRvIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuIFRoaXMgaXMgZG9uZQorLy8gICAxLiBHcmFwaGljc0NvbnRleHQzRCBkZWxlZ2F0ZXMgdG8g
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLiBUaGlzIGlzIGRvbmUKIC8vICAgICAgc28gdGhhdCB3
ZSBoYXZlIHNvbWUgcGxhY2UgdG8gc3RvcmUgZGF0YSBtZW1iZXJzIGNvbW1vbiBhbW9uZwotLy8g
ICAgICBpbXBsZW1lbnRhdGlvbnM7IEdyYXBoaWNzQ29udGV4dDNEIG9ubHkgcHJvdmlkZXMgdXMg
dGhlIG1faW50ZXJuYWwKLS8vICAgICAgcG9pbnRlci4gV2UgYWx3YXlzIGRlbGVnYXRlIHRvIHRo
ZSBHcmFwaGljc0NvbnRleHQzREludGVybmFsLiBXaGlsZSB3ZQorLy8gICAgICBpbXBsZW1lbnRh
dGlvbnM7IEdyYXBoaWNzQ29udGV4dDNEIG9ubHkgcHJvdmlkZXMgdXMgdGhlIG1fcHJpdmF0ZQor
Ly8gICAgICBwb2ludGVyLiBXZSBhbHdheXMgZGVsZWdhdGUgdG8gdGhlIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS4gV2hpbGUgd2UKIC8vICAgICAgY291bGQgc2lkZXN0ZXAgaXQgYW5kIGdvIGRp
cmVjdGx5IHRvIHRoZSBXZWJHcmFwaGljc0NvbnRleHQzRCBpbiBzb21lCiAvLyAgICAgIGNhc2Vz
LCBpdCBpcyBiZXR0ZXIgZm9yIGNvbnNpc3RlbmN5IHRvIGFsd2F5cyBkZWxlZ2F0ZSB0aHJvdWdo
IGl0LgogLy8KLS8vICAgMi4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBkZWxlZ2F0ZXMgdG8g
YW4gaW1wbGVtZW50YXRpb24gb2YKKy8vICAgMi4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIGRl
bGVnYXRlcyB0byBhbiBpbXBsZW1lbnRhdGlvbiBvZgogLy8gICAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRC4gVGhpcyBpcyBkb25lIHNvIHdlIGhhdmUgYSBwbGFjZSB0byBpbmplY3QgYW4KIC8vICAg
ICAgaW1wbGVtZW50YXRpb24gd2hpY2ggcmVtb3RlcyB0aGUgT3BlbkdMIGNhbGxzIGFjcm9zcyBw
cm9jZXNzZXMuCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBH
cmFwaGljc0NvbnRleHQzREludGVybmFsCisvLyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUKIAot
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCitH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCiAgICAg
OiBtX3dlYlZpZXdJbXBsKDApCiAgICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9u
cyhmYWxzZSkKICAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNlKQpAQCAtOTgsNyArOTgsNyBA
QCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRlCiB7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKK0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCiB7CiAjaWYg
VVNFKFNLSUEpCiAgICAgaWYgKG1fZ3JDb250ZXh0KSB7CkBAIC0xMDgsNyArMTA4LDcgQEAgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udAogI2VuZGlmCiB9CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFs
aXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogewogICAgIFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgd2ViQXR0cmlidXRlczsKICAgICB3ZWJB
dHRyaWJ1dGVzLmFscGhhID0gYXR0cnMuYWxwaGE7CkBAIC0xMzYsMTkgKzEzNiwxOSBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLVdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKK1dlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNv
bnRleHQtPm1faW50ZXJuYWwtPm1faW1wbC5nZXQoKTsKKyAgICByZXR1cm4gY29udGV4dC0+bV9w
cml2YXRlLT5tX2ltcGwuZ2V0KCk7CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0
CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5nZXQo
KTsKIH0KIAotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0
Zm9ybVRleHR1cmUoKSBjb25zdAorUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fd2ViVmlld0lt
cGwpOwogICAgIG1faW1wbC0+c2V0UGFyZW50Q29udGV4dChtX3dlYlZpZXdJbXBsLT5ncmFwaGlj
c0NvbnRleHQzRCgpKTsKQEAgLTE1Niw3ICsxNTYsNyBAQCBQbGF0Zm9ybTNET2JqZWN0IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuCiB9CiAKICNpZiBVU0UoU0tJQSkKLUdyQ29udGV4dCogR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z3JDb250ZXh0KCkKK0dyQ29udGV4dCogR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpnckNvbnRleHQoKQogewogICAgIC8vIExpbWl0IHRoZSBudW1iZXIgb2Yg
dGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgogICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4VGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7CkBAIC0xNzMsMTkgKzE3Mywx
OSBAQCBHckNvbnRleHQqIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdyCiB9CiAjZW5kaWYK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwcmVwYXJlVGV4dHVyZSgpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cHJlcGFyZVRleHR1cmUoKQogewogICAgIG1faW1w
bC0+cHJlcGFyZVRleHR1cmUoKTsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLVdlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZv
cm1MYXllcigpIGNvbnN0CitXZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29tcG9zaXRpbmdM
YXllci5nZXQoKTsKIH0KICNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFy
a0NvbnRleHRDaGFuZ2VkKCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgcGxhdGZvcm1MYXllcigpLT5zZXRUZXh0dXJlVXBkYXRlZCgpOwpAQCAtMTkzLDE3ICsxOTMs
MTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYXJrQ29udAogICAgIG1fbGF5
ZXJDb21wb3NpdGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
bWFya0xheWVyQ29tcG9zaXRlZCgpCiB7CiAgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmxheWVyQ29tcG9zaXRlZCgpIGNv
bnN0Citib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bGF5ZXJDb21wb3NpdGVkKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFtZWJ1ZmZl
ciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludEZy
YW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQogewogICAg
IHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IDA7CiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICog
d2lkdGggKiBoZWlnaHQ7CkBAIC0yNzAsMTMgKzI3MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OnBhaW50RnJhCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7
CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZl
cigpOwogICAgIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcygwLCBtX2ltcGwtPndpZHRoKCksIG1f
aW1wbC0+aGVpZ2h0KCksICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlw
bGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3Np
dGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChwbGF0Zm9ybUxheWVyKCkp
CkBAIC0yODUsNyArMjg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWlu
dENvbQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkK
K1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKIHsKICAgICBpZiAobV9pbXBsLT5nZXRDb250ZXh0
QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0z
MDIsMTQgKzMwMiwxNCBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RJ
CiAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0Citib29sIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CiB7CiAg
ICAgLy8gSWYgdGhlIGdwdSBjb21wb3NpdG9yIGlzIG9uIHRoZW4gc2tpcCB0aGUgcmVhZGJhY2sg
YW5kIHNvZnR3YXJlIHJlbmRlcmluZyBwYXRoLgogICAgIEFTU0VSVChtX3dlYlZpZXdJbXBsKTsK
ICAgICByZXR1cm4gIW1fd2ViVmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICh3aWR0aCA9PSBtX2ltcGwtPndpZHRo
KCkgJiYgaGVpZ2h0ID09IG1faW1wbC0+aGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMx
NywxMzYgKzMxNywxMzYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBl
KAogICAgIG1faW1wbC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAotSW50U2l6ZSBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0
CitJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUoKSBjb25zdAogewogICAgIHJldHVybiBJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9p
bXBsLT5oZWlnaHQoKSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXND
b250ZXh0TG9zdCgpCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNDb250ZXh0TG9z
dCgpCiB7CiAgICAgcmV0dXJuIG1faW1wbC0+aXNDb250ZXh0TG9zdCgpOwogfQogCi0vLyBNYWNy
b3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRleHQzREludGVybmFs
IHRvCisvLyBNYWNyb3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUgdG8KIC8vIFdlYkdyYXBoaWNzQ29udGV4dDNELgogCiAjZGVmaW5lIERFTEVH
QVRFX1RPX0lNUEwobmFtZSkgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1l
KCkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUoKSBcCiB7IFwKICAgICBt
X2ltcGwtPm5hbWUoKTsgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfUihuYW1lLCBy
dCkgICAgICAgICAgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUoKSBcCity
dCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUoKSBcCiB7IFwKICAgICByZXR1cm4gbV9p
bXBsLT5uYW1lKCk7IFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzEobmFtZSwgdDEp
IFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSkgXAordm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEpIFwKIHsgXAogICAgIG1faW1wbC0+
bmFtZShhMSk7IFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzFSKG5hbWUsIHQxLCBy
dCkgICAgXAotcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSkgXAorcnQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExKSBcCiB7IFwKICAgICByZXR1cm4g
bV9pbXBsLT5uYW1lKGExKTsgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMihuYW1l
LCB0MSwgdDIpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwg
dDIgYTIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBh
MikgXAogeyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMik7IFwKIH0KIAogI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCi1ydCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpuYW1lKHQxIGExLCB0MiBhMikgXAogeyBcCiAgICAgcmV0dXJuIG1faW1wbC0+bmFtZShh
MSwgYTIpOyBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8zKG5hbWUsIHQxLCB0Miwg
dDMpICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMpICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGEx
LCB0MiBhMiwgdDMgYTMpICAgIFwKIHsgXAogICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzKTsg
ICAgICAgICAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8zUihuYW1l
LCB0MSwgdDIsIHQzLCBydCkgICBcCi1ydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1l
KHQxIGExLCB0MiBhMiwgdDMgYTMpICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCiB7IFwKICAgICByZXR1cm4gbV9pbXBsLT5u
YW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBERUxFR0FU
RV9UT19JTVBMXzQobmFtZSwgdDEsIHQyLCB0MywgdDQpICAgIFwKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0
KSAgXAogeyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAg
IFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzRSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0
LCBydCkgICAgICAgXAotcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwg
dDIgYTIsIHQzIGEzLCB0NCBhNCkgICAgICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgICAgICAgIFwKIHsgXAogICAgIHJl
dHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAogfQogCiAjZGVm
aW5lIERFTEVHQVRFX1RPX0lNUExfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAot
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMs
IHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpu
YW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKIHsgXAogICAg
IG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKIH0KIAogI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzVSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgcnQpICAgICAgXAotcnQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUpICAgICAgICBcCitydCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAogeyBcCiAgICAgcmV0dXJu
IG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKIH0KIAogI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzYobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgIFwKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwg
dDUgYTUsIHQ2IGE2KSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBh
MSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCiB7IFwKICAgICBtX2ltcGwt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwKIH0KIAogI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAotcnQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUsIHQ2IGE2KSBcCitydCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAogeyBcCiAgICAgcmV0dXJu
IG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICAgICAgXAogfQogCiAjZGVm
aW5lIERFTEVHQVRFX1RPX0lNUExfNyhuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0Nykg
XAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMg
YTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0
NyBhNykgXAogeyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3
KTsgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF83UihuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUsIHQ2LCB0NywgcnQpIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5h
bWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKK3J0
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUsIHQ2IGE2LCB0NyBhNykgXAogeyBcCiAgICAgcmV0dXJuIG1faW1wbC0+bmFtZShh
MSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RP
X0lNUExfOChuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAgIFwKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0
NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYs
IHQ3IGE3LCB0OCBhOCkgXAogeyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBh
NSwgYTYsIGE3LCBhOCk7ICAgICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfOVIo
bmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgcnQpIFwKLXJ0IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1
IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3
IGE3LCB0OCBhOCwgdDkgYTkpIFwKIHsgXAogICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEy
LCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRF
X1RPX0lNUExfMTAobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgdDEw
KSBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSwgdDEwIGExMCkg
XAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBh
MywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSwgdDEwIGExMCkgXAog
eyBcCiAgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTks
IGExMCk7IFwKIH0KIAogREVMRUdBVEVfVE9fSU1QTF9SKG1ha2VDb250ZXh0Q3VycmVudCwgYm9v
bCkKIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLT5pc0dMRVMyQ29tcGxpYW50KCk7CiB9CkBAIC00
NTQsNyArNDU0LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0dMRVMyQwog
REVMRUdBVEVfVE9fSU1QTF8xKGFjdGl2ZVRleHR1cmUsIEdDM0RlbnVtKQogREVMRUdBVEVfVE9f
SU1QTF8yKGF0dGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCkK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kQXR0cmliTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1l
KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgbV9pbXBsLT5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUu
dXRmOCgpLmRhdGEoKSk7CiB9CkBAIC00NjksMTcgKzQ2OSwxNyBAQCBERUxFR0FURV9UT19JTVBM
XzIoYmxlbmRFcXVhdGlvblNlcGFyYXRlCiBERUxFR0FURV9UT19JTVBMXzIoYmxlbmRGdW5jLCBH
QzNEZW51bSwgR0MzRGVudW0pCiBERUxFR0FURV9UT19JTVBMXzQoYmxlbmRGdW5jU2VwYXJhdGUs
IEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtKQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlw
dHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1
c2FnZSkKIHsKICAgICBtX2ltcGwtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YnVmZmVyRGF0YShHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1
c2FnZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpidWZmZXJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVz
YWdlKQogewogICAgIG1faW1wbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25z
dCB2b2lkKiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJ1ZmZlclN1YkRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgbV9pbXBsLT5idWZmZXJTdWJEYXRhKHRhcmdldCwg
b2Zmc2V0LCBzaXplLCBkYXRhKTsKIH0KQEAgLTUxMyw3ICs1MTMsNyBAQCBERUxFR0FURV9UT19J
TVBMXzUoZnJhbWVidWZmZXJUZXh0dXJlMkQsCiBERUxFR0FURV9UT19JTVBMXzEoZnJvbnRGYWNl
LCBHQzNEZW51bSkKIERFTEVHQVRFX1RPX0lNUExfMShnZW5lcmF0ZU1pcG1hcCwgR0MzRGVudW0p
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAg
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QWN0aXZlSW5mbyB3ZWJJbmZvOwogICAgIGlm
ICghbV9pbXBsLT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIHdlYkluZm8pKQpAQCAt
NTI0LDcgKzUyNCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QWN0aXYK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpn
ZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0
aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQogewogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2
ZUluZm8gd2ViSW5mbzsKICAgICBpZiAoIW1faW1wbC0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFt
LCBpbmRleCwgd2ViSW5mbykpCkBAIC01MzcsNyArNTM3LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpnZXRBY3RpdgogCiBERUxFR0FURV9UT19JTVBMXzQoZ2V0QXR0YWNoZWRT
aGFkZXJzLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEc2l6ZWksIEdDM0RzaXplaSosIFBsYXRmb3Jt
M0RPYmplY3QqKQogCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEF0dHJp
YkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQor
R0MzRGludCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIHJldHVybiBt
X2ltcGwtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9
CkBAIC01NDYsNyArNTQ2LDcgQEAgREVMRUdBVEVfVE9fSU1QTF8yKGdldEJvb2xlYW52LCBHQzNE
ZW51bQogCiBERUxFR0FURV9UT19JTVBMXzMoZ2V0QnVmZmVyUGFyYW1ldGVyaXYsIEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRGludCopCiAKLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK0dyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKQogewogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgd2ViQXR0cmlidXRlcyA9IG1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwpAQCAtNTY4LDcgKzU2
OCw3IEBAIERFTEVHQVRFX1RPX0lNUExfMihnZXRJbnRlZ2VydiwgR0MzRGVudW0KIAogREVMRUdB
VEVfVE9fSU1QTF8zKGdldFByb2dyYW1pdiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIEdD
M0RpbnQqKQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvZ3JhbUlu
Zm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQogewog
ICAgIHJldHVybiBtX2ltcGwtPmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOwogfQpAQCAtNTc3
LDE3ICs1NzcsMTcgQEAgREVMRUdBVEVfVE9fSU1QTF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFtZQog
CiBERUxFR0FURV9UT19JTVBMXzMoZ2V0U2hhZGVyaXYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rl
bnVtLCBHQzNEaW50KikKIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNo
YWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCitTdHJpbmcgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQog
ewogICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFNoYWRl
clNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKICAgICByZXR1cm4gbV9pbXBsLT5n
ZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCiB7CiAgICAgcmV0dXJuIG1faW1wbC0+
Z2V0U3RyaW5nKG5hbWUpOwogfQpAQCAtNTk4LDcgKzU5OCw3IEBAIERFTEVHQVRFX1RPX0lNUExf
MyhnZXRUZXhQYXJhbWV0ZXJpdiwgR0MKIERFTEVHQVRFX1RPX0lNUExfMyhnZXRVbmlmb3JtZnYs
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RmbG9hdCopCiBERUxFR0FURV9UT19JTVBM
XzMoZ2V0VW5pZm9ybWl2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEaW50KikKIAot
R0MzRGludCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQzNEaW50IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIHJldHVybiBtX2ltcGwtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQpAQCAtNjI2LDcg
KzYyNiw3IEBAIERFTEVHQVRFX1RPX0lNUExfNChyZW5kZXJidWZmZXJTdG9yYWdlLCAKIERFTEVH
QVRFX1RPX0lNUExfMihzYW1wbGVDb3ZlcmFnZSwgR0MzRGNsYW1wZiwgR0MzRGJvb2xlYW4pCiBE
RUxFR0FURV9UT19JTVBMXzQoc2Npc3NvciwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBH
QzNEc2l6ZWkpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c2hhZGVyU291cmNl
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIG1faW1wbC0+c2hhZGVyU291cmNlKHNo
YWRlciwgc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogfQpAQCAtNjM4LDcgKzYzOCw3IEBAIERFTEVH
QVRFX1RPX0lNUExfMihzdGVuY2lsTWFza1NlcGFyYXRlLCAKIERFTEVHQVRFX1RPX0lNUExfMyhz
dGVuY2lsT3AsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCiBERUxFR0FURV9UT19JTVBM
XzQoc3RlbmNpbE9wU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0Rl
bnVtKQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleEltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscykKIHsKICAgICBtX2ltcGwtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjQ3LDc4ICs2NDcsNzggQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp0ZXhJbWFnZQogREVMRUdBVEVfVE9fSU1QTF8zKHRleFBhcmFt
ZXRlcmYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGZsb2F0KQogREVMRUdBVEVfVE9fSU1QTF8z
KHRleFBhcmFtZXRlcmksIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCkKIAotdm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBj
b25zdCB2b2lkKiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewogICAgIG1f
aW1wbC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiB9CiAKIERFTEVHQVRFX1RPX0lNUExf
Mih1bmlmb3JtMWYsIEdDM0RpbnQsIEdDM0RmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0Mz
RHNpemVpIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTFmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1f
aW1wbC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lN
UExfMih1bmlmb3JtMWksIEdDM0RpbnQsIEdDM0RpbnQpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNE
c2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWl2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1faW1w
bC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lNUExf
Myh1bmlmb3JtMmYsIEdDM0RpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUp
CiB7CiAgICAgbV9pbXBsLT51bmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAogREVM
RUdBVEVfVE9fSU1QTF8zKHVuaWZvcm0yaSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCkKIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVp
IHNpemUpCiB7CiAgICAgbV9pbXBsLT51bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0K
IAogREVMRUdBVEVfVE9fSU1QTF80KHVuaWZvcm0zZiwgR0MzRGludCwgR0MzRGZsb2F0LCBHQzNE
ZmxvYXQsIEdDM0RmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlm
b3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1faW1wbC0+dW5pZm9ybTNm
dihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lNUExfNCh1bmlmb3JtM2ks
IEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2l2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1f
aW1wbC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lN
UExfNSh1bmlmb3JtNGYsIEdDM0RpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQs
IEdDM0RmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtNGZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1faW1wbC0+dW5pZm9ybTRmdihsb2Nh
dGlvbiwgc2l6ZSwgdik7CiB9CiAKIERFTEVHQVRFX1RPX0lNUExfNSh1bmlmb3JtNGksIEdDM0Rp
bnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2
LCBHQzNEc2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3Jt
NGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAg
IG1faW1wbC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplKQor
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6
ZWkgc2l6ZSkKIHsKICAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUs
IHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpCiB7CiAgICAgbV9p
bXBsLT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtTWF0cml4NGZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwg
R0MzRHNpemVpIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1h
dHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9h
dCogdmFsdWUsIEdDM0RzaXplaSBzaXplKQogewogICAgIG1faW1wbC0+dW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7CiB9CkBAIC03NTQsMTQgKzc1NCwx
NCBAQCBERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlVGV4dHVyZSwgUGxhdGZvCiAKIERFTEVHQVRF
X1RPX0lNUExfMShzeW50aGVzaXplR0xFcnJvciwgR0MzRGVudW0pCiAKLUV4dGVuc2lvbnMzRCog
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0RXh0ZW5zaW9ucygpCitFeHRlbnNpb25zM0Qq
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAgICAgaWYgKCFt
X2V4dGVuc2lvbnMpCiAgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNp
b25zM0RDaHJvbWl1bSh0aGlzKSk7CiAgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKIH0K
IAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc1Jlc291cmNlU2FmZSgpCitib29s
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNSZXNvdXJjZVNhZmUoKQogewogICAgIGlmICht
X3Jlc291cmNlU2FmZXR5ID09IFJlc291cmNlU2FmZXR5VW5rbm93bikKICAgICAgICAgbV9yZXNv
dXJjZVNhZmV0eSA9IGdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9DSFJPTUlVTV9yZXNv
dXJjZV9zYWZlIikgPyBSZXNvdXJjZVNhZmUgOiBSZXNvdXJjZVVuc2FmZTsKQEAgLTc4OCw3ICs3
ODgsNyBAQCBTdHJpbmcgbWFwRXh0ZW5zaW9uTmFtZShjb25zdCBTdHJpbmcmIG5hCiAKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Omlu
aXRpYWxpemVFeHRlbnNpb25zKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0
aWFsaXplRXh0ZW5zaW9ucygpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgQVNTRVJUKHN1Y2Nlc3MpOwpAQCAtODA0LDE0ICs4MDQsMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaQogfQogCiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKICAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOwogICAgIFN0cmluZyBt
YXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKICAgICByZXR1cm4gbV9lbmFibGVk
RXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKSB8fCBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9u
cy5jb250YWlucyhtYXBwZWROYW1lKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjplbnN1cmVFeHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjplbnN1cmVFeHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOwogCkBAIC04MzAsNyArODMw
LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjplbnN1cmVFeAogICAgIHJldHVy
biBtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5hbWUpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJpbmcm
IG5hbWUpCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNFeHRlbnNpb25FbmFibGVk
KGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOwogICAg
IFN0cmluZyBtYXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKQEAgLTg1MywxMTQg
Kzg1MywxMTQgQEAgREVMRUdBVEVfVE9fSU1QTF9SKGdldEdyYXBoaWNzUmVzZXRTdGF0dQogLy8K
IAogLy8gTWFjcm9zIHRvIGFzc2lzdCBpbiBkZWxlZ2F0aW5nIGZyb20gR3JhcGhpY3NDb250ZXh0
M0QgdG8KLS8vIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuCisvLyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuCiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUwobmFtZSkgXAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSgpIFwKIHsgXAotICAgIG1faW50ZXJuYWwtPm5hbWUoKTsg
XAorICAgIG1fcHJpdmF0ZS0+bmFtZSgpOyBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5U
RVJOQUxfUihuYW1lLCBydCkgICAgICAgICAgIFwKIHJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1l
KCkgXAogeyBcCi0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoKTsgXAorICAgIHJldHVybiBt
X3ByaXZhdGUtPm5hbWUoKTsgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEo
bmFtZSwgdDEpIFwKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpIFwKIHsgXAot
ICAgIG1faW50ZXJuYWwtPm5hbWUoYTEpOyBcCisgICAgbV9wcml2YXRlLT5uYW1lKGExKTsgXAog
fQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKG5hbWUsIHQxLCBydCkgICAgXAog
cnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpIFwKIHsgXAotICAgIHJldHVybiBtX2lu
dGVybmFsLT5uYW1lKGExKTsgXAorICAgIHJldHVybiBtX3ByaXZhdGUtPm5hbWUoYTEpOyBcCiB9
CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMihuYW1lLCB0MSwgdDIpIFwKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSBcCiB7IFwKLSAgICBtX2ludGVy
bmFsLT5uYW1lKGExLCBhMik7IFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyKTsgXAogfQog
CiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCiBy
dCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKIHsgXAotICAgIHJldHVy
biBtX2ludGVybmFsLT5uYW1lKGExLCBhMik7IFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1l
KGExLCBhMik7IFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8zKG5hbWUsIHQx
LCB0MiwgdDMpICAgXAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzKSAgICBcCiB7IFwKLSAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMpOyAgICAg
ICAgICAgICAgICAgIFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMyk7ICAgICAgICAg
ICAgICAgICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzNSKG5hbWUsIHQx
LCB0MiwgdDMsIHJ0KSAgIFwKIHJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMpICAgIFwKIHsgXAotICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwg
YTMpOyAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBh
MiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBERUxFR0FURV9UT19JTlRF
Uk5BTF80KG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICBcCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAogeyBcCi0gICAgbV9pbnRlcm5h
bC0+bmFtZShhMSwgYTIsIGEzLCBhNCk7ICAgICAgICAgICAgICBcCisgICAgbV9wcml2YXRlLT5u
YW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBERUxFR0FU
RV9UT19JTlRFUk5BTF80UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgcnQpICAgIFwKIHJ0IEdyYXBo
aWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAogeyBcCi0g
ICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAor
ICAgIHJldHVybiBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAog
fQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzUobmFtZSwgdDEsIHQyLCB0MywgdDQs
IHQ1KSAgICAgIFwKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAogeyBcCi0gICAgbV9pbnRlcm5hbC0+bmFtZShh
MSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywg
YTQsIGE1KTsgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNihuYW1lLCB0
MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgXAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCiB7IFwKLSAgICBtX2lu
dGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgIFwKKyAgICBtX3ByaXZhdGUt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRF
X1RPX0lOVEVSTkFMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAogcnQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1
LCB0NiBhNikgXAogeyBcCi0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywg
YTQsIGE1LCBhNik7ICAgICAgIFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBhMiwg
YTMsIGE0LCBhNSwgYTYpOyAgICAgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJO
QUxfNyhuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NykgXAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0
NyBhNykgXAogeyBcCi0gICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2
LCBhNyk7ICAgXAorICAgIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBh
Nyk7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzdSKG5hbWUsIHQxLCB0
MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCBydCkgXAogcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKIHsgXAot
ICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KTsg
ICBcCisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBh
Nyk7ICAgXAogfQogCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzgobmFtZSwgdDEsIHQy
LCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICBcCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0
OCBhOCkgXAogeyBcCi0gICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2
LCBhNywgYTgpOyAgICAgIFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1
LCBhNiwgYTcsIGE4KTsgICAgICBcCiB9CiAKICNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxf
OShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5KSBcCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYg
YTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKIHsgXAotICAgIG1faW50ZXJuYWwtPm5hbWUoYTEs
IGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAgXAorICAgIG1fcHJpdmF0ZS0+bmFt
ZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCiB9CiAKICNkZWZpbmUg
REVMRUdBVEVfVE9fSU5URVJOQUxfOVIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcs
IHQ4LCB0OSwgcnQpIFwKIHJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKIHsgXAot
ICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBh
OCwgYTkpOyAgIFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBh
NSwgYTYsIGE3LCBhOCwgYTkpOyAgIFwKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgYm9v
bCkKQEAgLTk2OSw2MCArOTY5LDYwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmEKIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0g
ICAgV2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1faW50ZXJuYWwtPnBsYXRmb3Jt
TGF5ZXIoKTsKKyAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9wcml2YXRl
LT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgaWYgKGNhbnZhc0xheWVyKQogICAgICAgICBjYW52YXNM
YXllci0+c2V0Q29udGV4dCgwKTsKLSAgICBtX2ludGVybmFsLT5zZXRDb250ZXh0TG9zdENhbGxi
YWNrKG51bGxwdHIpOwotICAgIG1faW50ZXJuYWwtPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxs
YmFja0NIUk9NSVVNKG51bGxwdHIpOworICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxs
YmFjayhudWxscHRyKTsKKyAgICBtX3ByaXZhdGUtPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxs
YmFja0NIUk9NSVVNKG51bGxwdHIpOwogfQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
U3R5bGUgcmVuZGVyU3R5bGUpCiB7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw+IGludGVybmFsID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKSk7
Ci0gICAgaWYgKCFpbnRlcm5hbC0+aW5pdGlhbGl6ZShhdHRycywgaG9zdFdpbmRvdywgcmVuZGVy
U3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKSB7CisgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZT4gcHJpdiA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUoKSk7CisgICAgaWYgKCFwcml2LT5pbml0aWFsaXplKGF0dHJzLCBob3N0V2luZG93
LCByZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIH0KKwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gcmVzdWx0ID0g
YWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJT
dHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpOwotICAgIHJlc3VsdC0+bV9pbnRl
cm5hbCA9IGludGVybmFsLnJlbGVhc2UoKTsKKyAgICByZXN1bHQtPm1fcHJpdmF0ZSA9IHByaXYu
cmVsZWFzZSgpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+cGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QoKTsKIH0KIAogUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1U
ZXh0dXJlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+cGxhdGZvcm1UZXh0dXJl
KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhdGZvcm1UZXh0dXJlKCk7CiB9CiAKICNpZiBV
U0UoU0tJQSkKIEdyQ29udGV4dCogR3JhcGhpY3NDb250ZXh0M0Q6OmdyQ29udGV4dCgpCiB7Ci0g
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmdyQ29udGV4dCgpOworICAgIHJldHVybiBtX3ByaXZhdGUt
PmdyQ29udGV4dCgpOwogfQogI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBh
cmVUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+cHJlcGFyZVRleHR1cmUoKTsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5wcmVwYXJlVGV4dHVyZSgpOwogfQogCiBJbnRTaXplIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKIH0KIAogYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQogewotICAgIHJldHVybiBtX2lu
dGVybmFsLT5pc1Jlc291cmNlU2FmZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzUmVzb3Vy
Y2VTYWZlKCk7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9y
bUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAg
V2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5
ZXIoKTsKKyAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9wcml2YXRlLT5w
bGF0Zm9ybUxheWVyKCk7CiAgICAgY2FudmFzTGF5ZXItPnNldENvbnRleHQodGhpcyk7CiAgICAg
cmV0dXJuIGNhbnZhc0xheWVyOwogfQpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAgREVMRUdBVEVfVE9f
SU5URVJOQUwobWFya0NvbnRleHRDaGFuZ2VkKQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjps
YXllckNvbXBvc2l0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ludGVybmFsLT5sYXllckNv
bXBvc2l0ZWQoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5sYXllckNvbXBvc2l0ZWQoKTsKIH0K
IAogREVMRUdBVEVfVE9fSU5URVJOQUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCopCkBAIC0xMTg2LDcgKzExODYsNyBAQCBERUxFR0FURV9U
T19JTlRFUk5BTF8xUihwYWludENvbXBvc2l0ZWRSCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2ludGVybmFs
LT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRz
SW50b0NhbnZhc0J1ZmZlcigpOwogfQogCiBERUxFR0FURV9UT19JTlRFUk5BTF9SKGNyZWF0ZUJ1
ZmZlciwgUGxhdGZvcm0zRE9iamVjdCkKQEAgLTEyMjksNyArMTIyOSw3IEBAIFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWQKICAgICByZXR1cm4gYWRvcHRQdHIoY2IuZ2V0
KCkgPyBuZXcgR3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcihjYikgOiAwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzZXRDb250ZXh0TG9zdENhbGxiYWNr
KFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IGNiKQor
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2IpCiB7CiAg
ICAgbV9jb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlciA9IEdyYXBoaWNzQ29udGV4dExvc3RDYWxs
YmFja0FkYXB0ZXI6OmNyZWF0ZShjYik7CiAgICAgbV9pbXBsLT5zZXRDb250ZXh0TG9zdENhbGxi
YWNrKG1fY29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIuZ2V0KCkpOwpAQCAtMTIzNyw3ICsxMjM3
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzZXRDb250ZQogCiBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9pbnRlcm5hbC0+aXNHTEVTMkNvbXBsaWFudCgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlz
R0xFUzJDb21wbGlhbnQoKTsKIH0KIAogY2xhc3MgU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNr
QWRhcHRlciA6IHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGlj
c1N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNIHsKQEAgLTEyNjEsNyArMTI2MSw3
IEBAIFBhc3NPd25QdHI8U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWQKICAgICByZXR1cm4g
YWRvcHRQdHIoY2IuZ2V0KCkgPyBuZXcgU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRl
cihjYikgOiAwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzZXRTd2Fw
QnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENo
cm9taXVtOjpTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4gY2IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hS
T01JVU0oUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0
ZUNhbGxiYWNrQ0hST01JVU0+IGNiKQogewogICAgIG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxi
YWNrQWRhcHRlciA9IFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI6OmNyZWF0ZShj
Yik7CiAgICAgbV9pbXBsLT5zZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTSht
X3N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIuZ2V0KCkpOwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuaAkocmV2aXNpb24gOTM5NzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzREludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzM0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAotI2RlZmluZSBHcmFw
aGljc0NvbnRleHQzREludGVybmFsX2gKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVt
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KLSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJTa0JpdG1hcC5oIgotI2VuZGlmCi0KLSNpZiBV
U0UoU0tJQSkKLWNsYXNzIEdyQ29udGV4dDsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LWNsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgV2ViVmlld0ltcGw7Ci19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFeHRlbnNpb25z
M0RDaHJvbWl1bTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1jbGFzcyBXZWJH
TExheWVyQ2hyb21pdW07Ci0jZW5kaWYKLWNsYXNzIEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFj
a0FkYXB0ZXI7Ci1jbGFzcyBTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwotCi1j
bGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsKCk7Ci0gICAgfkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKLQot
ICAgIGJvb2wgaW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7
Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGxvd2Vy
LWxldmVsIFdlYkdyYXBoaWNzQ29udGV4dDNELAotICAgIC8vIHdoaWNoIGlzIG5lZWRlZCBmb3Ig
c3Vib3JkaW5hdGUgY29udGV4dHMgbGlrZSBXZWJHTCdzIHRvIHNoYXJlIHJlc291cmNlcwotICAg
IC8vIHdpdGggdGhlIGNvbXBvc2l0b3IncyBjb250ZXh0LgotICAgIHN0YXRpYyBXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNEKiBleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpOwotCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0
Zm9ybVRleHR1cmUoKSBjb25zdDsKLSNpZiBVU0UoU0tJQSkKLSAgICBHckNvbnRleHQqIGdyQ29u
dGV4dCgpOwotI2VuZGlmCi0KLSAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAg
dm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgSW50U2l6ZSBnZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNSZXNvdXJjZVNhZmUoKTsK
LQotICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0gICAgYm9vbCBsYXllckNvbXBvc2l0
ZWQoKSBjb25zdDsKLSAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKLQotICAgIHZvaWQg
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwot
ICAgIHZvaWQgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFtZWJ1ZmZlciwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEltYWdlQnVmZmVyKik7Ci0g
ICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KCk7Ci0gICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7Ci0gICAgYm9vbCBw
YWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwot
Ci0gICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0Owot
I2VuZGlmCi0gICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJl
bGVhc2VTaGFkZXJDb21waWxlcigpOwotICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwotCi0gICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4KLSAgICAvLwot
ICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKTsKLSAgICB2b2lkIGF0dGFj
aFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgYmluZFRl
eHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGJsZW5k
Q29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwg
R0MzRGNsYW1wZiBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUp
OwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0Rl
bnVtIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0Mz
RGVudW0gZGZhY3Rvcik7Ci0gICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNS
R0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhh
KTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBz
aXplLCBHQzNEZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKTsK
LSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNl
dCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOwotCi0gICAgR0MzRGVudW0g
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpOwotICAgIHZvaWQgY2xlYXIo
R0MzRGJpdGZpZWxkIG1hc2spOwotICAgIHZvaWQgY2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwg
R0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKTsKLSAg
ICB2b2lkIGNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCk7Ci0gICAgdm9pZCBjbGVhclN0ZW5j
aWwoR0MzRGludCBzKTsKLSAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Ri
b29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7Ci0gICAg
dm9pZCBjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOwotCi0gICAgdm9pZCBjb3B5VGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlcik7Ci0gICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KTsKLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgZGVwdGhG
dW5jKEdDM0RlbnVtIGZ1bmMpOwotICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcp
OwotICAgIHZvaWQgZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIp
OwotICAgIHZvaWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmpl
Y3QpOwotICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOwotICAgIHZvaWQgZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KTsKLSAgICB2b2lkIGRyYXdBcnJheXMoR0Mz
RGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KTsKLSAgICB2b2lkIGRy
YXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCk7Ci0g
ICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCk7Ci0gICAgdm9p
ZCBmaW5pc2goKTsKLSAgICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZl
clRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVt
IHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCBsZXZlbCk7Ci0gICAgdm9pZCBm
cm9udEZhY2UoR0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51
bSB0YXJnZXQpOwotCi0gICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOwotICAgIGJvb2wgZ2V0QWN0aXZl
VW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJ
bmZvJik7Ci0gICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmpl
Y3QqIHNoYWRlcnMpOwotICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGdldEJvb2xlYW52KEdDM0RlbnVt
IHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpOwotICAgIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0g
ICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKLSAgICB2b2lkIGdldEZsb2F0dihHQzNEZW51bSBwbmFt
ZSwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRJbnRlZ2VydihHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQgZ2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBnZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9n
KFBsYXRmb3JtM0RPYmplY3QpOwotCi0gICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShQbGF0Zm9y
bTNET2JqZWN0KTsKLSAgICBTdHJpbmcgZ2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpOwotICAgIHZv
aWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRVbmlmb3Jt
ZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQq
IHZhbHVlKTsKLSAgICB2b2lkIGdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBHQzNEaW50IGdldFVuaWZv
cm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZv
aWQgZ2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQqIHZhbHVlKTsKLSAgICB2b2lkIGdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIEdDM0RzaXplaXB0ciBnZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKTsKLQotICAg
IHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOwotICAgIEdDM0Rib29s
ZWFuIGlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzRW5hYmxl
ZChHQzNEZW51bSBjYXApOwotICAgIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwot
ICAgIEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdD
M0Rib29sZWFuIGlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlz
VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQp
OwotICAgIHZvaWQgbGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBwaXhl
bFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCBwb2x5Z29u
T2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7Ci0KLSAgICB2b2lkIHJl
YWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKTsKLQot
ICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZv
aWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsK
LSAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVj
dCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpOwotICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0g
ZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbEZ1bmNT
ZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKTsKLSAgICB2b2lk
IHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzayk7Ci0gICAg
dm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpw
YXNzKTsKLSAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVt
IGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7Ci0KLSAgICAvLyB0ZXhJbWFn
ZTJEIHJldHVybiBmYWxzZSBvbiBhbnkgZXJyb3IgcmF0aGVyIHRoYW4gdXNpbmcgYW4gRXhjZXB0
aW9uQ29kZS4KLSAgICBib29sIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBj
b25zdCB2b2lkKiBwaXhlbHMpOwotICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOwotICAgIHZvaWQgdGV4UGFyYW1l
dGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKLSAg
ICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cyk7Ci0KLSAgICB2b2lkIHVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCk7
Ci0gICAgdm9pZCB1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0Mz
RHNpemVpIHNpemUpOwotICAgIHZvaWQgdW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgeCk7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYs
IEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpOwotICAgIHZvaWQgdW5pZm9ybTJpKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5KTsKLSAgICB2b2lkIHVuaWZvcm0y
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUpOwotICAgIHZv
aWQgdW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwg
R0MzRGZsb2F0IHopOwotICAgIHZvaWQgdW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHVuaWZvcm0zaShHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KTsKLSAgICB2b2lkIHVuaWZv
cm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUpOwotICAg
IHZvaWQgdW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQg
eSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB1bmlm
b3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
R0MzRGludCB3KTsKLSAgICB2b2lkIHVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0Rz
aXplaSBzaXplKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSk7
Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpOwotCi0gICAgdm9p
ZCB1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFt
KFBsYXRmb3JtM0RPYmplY3QpOwotCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KTsKLSAgICB2b2lkIHZlcnRleEF0dHJp
YjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4
QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHopOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOwotICAgIHZv
aWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0g
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUs
IEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAg
IHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCk7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUJ1ZmZlcigpOwot
ICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IGNyZWF0ZVByb2dyYW0oKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVJlbmRl
cmJ1ZmZlcigpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlU2hhZGVyKEdDM0RlbnVtKTsK
LSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHZvaWQgZGVsZXRl
QnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoUGxh
dGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3Qp
OwotICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZv
aWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVu
dW0gZXJyb3IpOwotCi0gICAgdm9pZCBzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+KTsKLQotICAgIC8vIEV4dGVu
c2lvbnMzRCBzdXBwb3J0LgotICAgIEV4dGVuc2lvbnMzRCogZ2V0RXh0ZW5zaW9ucygpOwotICAg
IGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBib29sIGVu
c3VyZUV4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBib29sIGlzRXh0
ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgLy8gRVhUX3RleHR1cmVf
Zm9ybWF0X0JHUkE4ODg4Ci0gICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsKLQotICAgIC8vIEdMX0NI
Uk9NSVVNX21hcF9zdWIKLSAgICBib29sIHN1cHBvcnRzTWFwU3ViQ0hST01JVU0oKTsKLSAgICB2
b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlw
dHIgb2Zmc2V0LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGVudW0gYWNjZXNzKTsKLSAgICB2b2lkIHVu
bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQqKTsKLSAgICB2b2lkKiBtYXBUZXhT
dWJJbWFnZTJEQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RlbnVtIGFjY2Vzcyk7Ci0g
ICAgdm9pZCB1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShjb25zdCB2b2lkKik7Ci0KLSAgICAv
LyBHTF9DSFJPTUlVTV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQotICAgIHZvaWQgYmxpdEZyYW1l
YnVmZmVyQ0hST01JVU0oR0MzRGludCBzcmNYMCwgR0MzRGludCBzcmNZMCwgR0MzRGludCBzcmNY
MSwgR0MzRGludCBzcmNZMSwgR0MzRGludCBkc3RYMCwgR0MzRGludCBkc3RZMCwgR0MzRGludCBk
c3RYMSwgR0MzRGludCBkc3RZMSwgR0MzRGJpdGZpZWxkIG1hc2ssIEdDM0RlbnVtIGZpbHRlcik7
Ci0gICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVDSFJPTUlVTShHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLQotICAgIC8vIEdMX0NIUk9NSVVNX3N3
YXBidWZmZXJzX2NvbXBsZXRlX2NhbGxiYWNrCi0gICAgdm9pZCBzZXRTd2FwQnVmZmVyc0NvbXBs
ZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2Fw
QnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4pOwotCi0gICAgLy8gR0xfQ0hST01JVU1f
cmF0ZV9saW1pdF9vZmZzY3JlZW5fY29udGV4dAotICAgIHZvaWQgcmF0ZUxpbWl0T2Zmc2NyZWVu
Q29udGV4dENIUk9NSVVNKCk7Ci0KLSAgICAvLyBHTF9BUkJfcm9idXN0bmVzcwotICAgIEdDM0Rl
bnVtIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKLQotcHJpdmF0ZToKLSAgICBPd25QdHI8
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gbV9pbXBsOwotICAgIE93blB0cjxFeHRlbnNp
b25zM0RDaHJvbWl1bT4gbV9leHRlbnNpb25zOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHRM
b3N0Q2FsbGJhY2tBZGFwdGVyPiBtX2NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOwotICAgIE93
blB0cjxTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyPiBtX3N3YXBCdWZmZXJzQ29t
cGxldGVDYWxsYmFja0FkYXB0ZXI7Ci0gICAgV2ViS2l0OjpXZWJWaWV3SW1wbCogbV93ZWJWaWV3
SW1wbDsKLSAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOwotICAgIEhh
c2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X3JlcXVlc3RhYmxlRXh0ZW5zaW9uczsKLSAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOwotCi0g
ICAgZW51bSBSZXNvdXJjZVNhZmV0eSB7Ci0gICAgICAgIFJlc291cmNlU2FmZXR5VW5rbm93biwK
LSAgICAgICAgUmVzb3VyY2VTYWZlLAotICAgICAgICBSZXNvdXJjZVVuc2FmZQotICAgIH07Ci0g
ICAgUmVzb3VyY2VTYWZldHkgbV9yZXNvdXJjZVNhZmV0eTsKLQotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBtX2NvbXBvc2l0
aW5nTGF5ZXI7Ci0jZW5kaWYKLSNpZiBVU0UoU0tJQSkKLSAgICAvLyBJZiB0aGUgd2lkdGggYW5k
IGhlaWdodCBvZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndAotICAgIC8vIG1hdGNo
IHRob3NlIHRoYXQgd2Ugd2VyZSBnaXZlbiBpbiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0bwotICAg
IC8vIHJlc2hhcGUoKSwgdGhlbiB3ZSBuZWVkIGFuIGludGVybWVkaWF0ZSBiaXRtYXAgdG8gcmVh
ZCBiYWNrIHRoZQotICAgIC8vIGZyYW1lIGJ1ZmZlciBpbnRvLiBUaGlzIHNlZW1zIHRvIGhhcHBl
biB3aGVuIENTUyBzdHlsZXMgYXJlCi0gICAgLy8gdXNlZCB0byByZXNpemUgdGhlIENhbnZhcy4K
LSAgICBTa0JpdG1hcCBtX3Jlc2l6aW5nQml0bWFwOwotCi0gICAgR3JDb250ZXh0KiBtX2dyQ29u
dGV4dDsKLSNlbmRpZgotCi0jaWYgVVNFKENHKQotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNo
YXI+IG1fcmVuZGVyT3V0cHV0OwotICAgIHNpemVfdCBtX3JlbmRlck91dHB1dFNpemU7Ci0jZW5k
aWYKLQotICAgIHZvaWQgaW5pdGlhbGl6ZUV4dGVuc2lvbnMoKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4dDNEX2gKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oCShyZXZpc2lvbiA5Mzk3OSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oOjkzOTc5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAorI2Rl
ZmluZSBHcmFwaGljc0NvbnRleHQzREludGVybmFsX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RENocm9taXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpZiBVU0UoU0tJQSkKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2VuZGlm
CisKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdyQ29udGV4dDsKKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViVmlld0ltcGw7
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBF
eHRlbnNpb25zM0RDaHJvbWl1bTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitj
bGFzcyBXZWJHTExheWVyQ2hyb21pdW07CisjZW5kaWYKK2NsYXNzIEdyYXBoaWNzQ29udGV4dExv
c3RDYWxsYmFja0FkYXB0ZXI7CitjbGFzcyBTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFw
dGVyOworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKK3B1YmxpYzoKKyAgICBH
cmFwaGljc0NvbnRleHQzREludGVybmFsKCk7CisgICAgfkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwoKTsKKworICAgIGJvb2wgaW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJvdmlkZSBhY2Nlc3MgdG8g
dGhlIGxvd2VyLWxldmVsIFdlYkdyYXBoaWNzQ29udGV4dDNELAorICAgIC8vIHdoaWNoIGlzIG5l
ZWRlZCBmb3Igc3Vib3JkaW5hdGUgY29udGV4dHMgbGlrZSBXZWJHTCdzIHRvIHNoYXJlIHJlc291
cmNlcworICAgIC8vIHdpdGggdGhlIGNvbXBvc2l0b3IncyBjb250ZXh0LgorICAgIHN0YXRpYyBX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOworCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdDsKKyNpZiBVU0UoU0tJQSkKKyAgICBHckNvbnRl
eHQqIGdyQ29udGV4dCgpOworI2VuZGlmCisKKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgSW50U2l6
ZSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaXNSZXNvdXJj
ZVNhZmUoKTsKKworICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgYm9vbCBsYXll
ckNvbXBvc2l0ZWQoKSBjb25zdDsKKyAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKwor
ICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCopOworICAgIHZvaWQgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFtZWJ1ZmZl
ciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEltYWdlQnVm
ZmVyKik7CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKCk7CisgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7Cisg
ICAgYm9vbCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCopOworCisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigp
IGNvbnN0OworI2VuZGlmCisgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CisKKyAg
ICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOworICAgIGJvb2wgaXNDb250ZXh0TG9zdCgp
OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4K
KyAgICAvLworICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKTsKKyAgICB2
b2lkIGF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKTsKKyAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIGJpbmRCdWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGJpbmRGcmFt
ZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgYmlu
ZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZv
aWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2
b2lkIGJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFt
cGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSk7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0Rl
bnVtIG1vZGUpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVS
R0IsIEdDM0RlbnVtIG1vZGVBbHBoYSk7CisgICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2Zh
Y3RvciwgR0MzRGVudW0gZGZhY3Rvcik7CisgICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNE
ZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVt
IGRzdEFscGhhKTsKKworICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSk7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVt
IHVzYWdlKTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOworCisgICAg
R0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpOworICAgIHZv
aWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spOworICAgIHZvaWQgY2xlYXJDb2xvcihHQzNEY2xh
bXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFs
cGhhKTsKKyAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCk7CisgICAgdm9pZCBj
bGVhclN0ZW5jaWwoR0MzRGludCBzKTsKKyAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiBy
ZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBo
YSk7CisgICAgdm9pZCBjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOworCisgICAgdm9p
ZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcik7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOworICAgIHZv
aWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpOworICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Rib29s
ZWFuIGZsYWcpOworICAgIHZvaWQgZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xh
bXBmIHpGYXIpOworICAgIHZvaWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBsYXRm
b3JtM0RPYmplY3QpOworICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOworICAgIHZvaWQg
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KTsKKyAgICB2b2lkIGRyYXdB
cnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KTsKKyAg
ICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKKworICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVt
IGNhcCk7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCk7
CisgICAgdm9pZCBmaW5pc2goKTsKKyAgICB2b2lkIGZsdXNoKCk7CisgICAgdm9pZCBmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCBm
cmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCBsZXZlbCk7Cisg
ICAgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSk7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1h
cChHQzNEZW51bSB0YXJnZXQpOworCisgICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wg
Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4
LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRm
b3JtM0RPYmplY3QqIHNoYWRlcnMpOworICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIGdldEJvb2xlYW52
KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpOworICAgIHZvaWQgZ2V0QnVmZmVy
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1
dGVzKCk7CisgICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKKyAgICB2b2lkIGdldEZsb2F0dihHQzNE
ZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRJbnRlZ2VydihH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOworICAgIHZvaWQgZ2V0UHJvZ3JhbWl2KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsK
KyAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9p
ZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOworICAgIFN0cmluZyBnZXRTaGFk
ZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpOworCisgICAgU3RyaW5nIGdldFNoYWRlclNvdXJj
ZShQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICBTdHJpbmcgZ2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUp
OworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7CisgICAgdm9pZCBn
ZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHZhbHVlKTsKKyAgICB2b2lkIGdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKTsKKyAgICBHQzNEaW50
IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQqIHZhbHVlKTsKKyAgICB2b2lkIGdldFZlcnRleEF0dHJpYml2KEdDM0R1
aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOworICAgIEdDM0RzaXpl
aXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1l
KTsKKworICAgIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOworICAg
IEdDM0Rib29sZWFuIGlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOworICAgIEdDM0Rib29sZWFu
IGlzRW5hYmxlZChHQzNEZW51bSBjYXApOworICAgIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIo
UGxhdGZvcm0zRE9iamVjdCk7CisgICAgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QpOworICAgIEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qp
OworICAgIEdDM0Rib29sZWFuIGlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOworICAgIEdDM0Ri
b29sZWFuIGlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGxpbmVXaWR0aChH
QzNEZmxvYXQpOworICAgIHZvaWQgbGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CisgICAg
dm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7CisgICAgdm9p
ZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7CisKKyAg
ICB2b2lkIHJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBk
YXRhKTsKKworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
OworICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4g
aW52ZXJ0KTsKKyAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBzaGFkZXJTb3VyY2UoUGxhdGZv
cm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpOworICAgIHZvaWQgc3RlbmNpbEZ1bmMo
R0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOworICAgIHZvaWQgc3Rl
bmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJl
ZiwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKTsK
KyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFz
ayk7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdD
M0RlbnVtIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7CisKKyAgICAv
LyB0ZXhJbWFnZTJEIHJldHVybiBmYWxzZSBvbiBhbnkgZXJyb3IgcmF0aGVyIHRoYW4gdXNpbmcg
YW4gRXhjZXB0aW9uQ29kZS4KKyAgICBib29sIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOworICAgIHZvaWQg
dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBh
cmFtKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZv
aWQqIHBpeGVscyk7CisKKyAgICB2b2lkIHVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQgeCk7CisgICAgdm9pZCB1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQgeCk7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0yZihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdm9pZCB1bmlmb3JtMmZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdW5p
Zm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5KTsKKyAgICB2b2lk
IHVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUp
OworICAgIHZvaWQgdW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHopOworICAgIHZvaWQgdW5pZm9ybTNmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0zaShH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KTsKKyAgICB2
b2lkIHVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNp
emUpOworICAgIHZvaWQgdW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBH
QzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKKyAgICB2b2lkIHVuaWZvcm00
ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSk7CisgICAg
dm9pZCB1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RpbnQgeiwgR0MzRGludCB3KTsKKyAgICB2b2lkIHVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJm
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFs
dWUsIEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6
ZWkgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpOwor
CisgICAgdm9pZCB1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgdmFsaWRh
dGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOworCisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOworICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIy
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KTsKKyAgICB2b2lkIHZl
cnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOworICAgIHZv
aWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQg
eSwgR0MzRGZsb2F0IHopOworICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcp
OworICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZh
bHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNE
aW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0
KTsKKworICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUJ1
ZmZlcigpOworICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBQ
bGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVByb2dyYW0oKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlU2hhZGVyKEdD
M0RlbnVtKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVRleHR1cmUoKTsKKworICAgIHZv
aWQgZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgZGVsZXRlRnJhbWVi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3Jt
M0RPYmplY3QpOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qp
OworICAgIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgZGVs
ZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KTsKKworICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJy
b3IoR0MzRGVudW0gZXJyb3IpOworCisgICAgdm9pZCBzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBh
c3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+KTsKKworICAg
IC8vIEV4dGVuc2lvbnMzRCBzdXBwb3J0LgorICAgIEV4dGVuc2lvbnMzRCogZ2V0RXh0ZW5zaW9u
cygpOworICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICBib29sIGVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBi
b29sIGlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgLy8gRVhU
X3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsKKworICAg
IC8vIEdMX0NIUk9NSVVNX21hcF9zdWIKKyAgICBib29sIHN1cHBvcnRzTWFwU3ViQ0hST01JVU0o
KTsKKyAgICB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBH
QzNEc2l6ZWlwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGVudW0gYWNjZXNzKTsKKyAg
ICB2b2lkIHVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQqKTsKKyAgICB2b2lk
KiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RlbnVtIGFj
Y2Vzcyk7CisgICAgdm9pZCB1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShjb25zdCB2b2lkKik7
CisKKyAgICAvLyBHTF9DSFJPTUlVTV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIHZvaWQg
YmxpdEZyYW1lYnVmZmVyQ0hST01JVU0oR0MzRGludCBzcmNYMCwgR0MzRGludCBzcmNZMCwgR0Mz
RGludCBzcmNYMSwgR0MzRGludCBzcmNZMSwgR0MzRGludCBkc3RYMCwgR0MzRGludCBkc3RZMCwg
R0MzRGludCBkc3RYMSwgR0MzRGludCBkc3RZMSwgR0MzRGJpdGZpZWxkIG1hc2ssIEdDM0RlbnVt
IGZpbHRlcik7CisgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVDSFJPTUlV
TShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKworICAgIC8vIEdMX0NI
Uk9NSVVNX3N3YXBidWZmZXJzX2NvbXBsZXRlX2NhbGxiYWNrCisgICAgdm9pZCBzZXRTd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9t
aXVtOjpTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4pOworCisgICAgLy8gR0xf
Q0hST01JVU1fcmF0ZV9saW1pdF9vZmZzY3JlZW5fY29udGV4dAorICAgIHZvaWQgcmF0ZUxpbWl0
T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKCk7CisKKyAgICAvLyBHTF9BUkJfcm9idXN0bmVzcwor
ICAgIEdDM0RlbnVtIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKKworcHJpdmF0ZToKKyAg
ICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gbV9pbXBsOworICAgIE93blB0
cjxFeHRlbnNpb25zM0RDaHJvbWl1bT4gbV9leHRlbnNpb25zOworICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyPiBtX2NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVy
OworICAgIE93blB0cjxTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyPiBtX3N3YXBC
dWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CisgICAgV2ViS2l0OjpXZWJWaWV3SW1wbCog
bV93ZWJWaWV3SW1wbDsKKyAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
OworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOworICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9uczsKKyAgICBib29sIG1fbGF5ZXJDb21wb3Np
dGVkOworCisgICAgZW51bSBSZXNvdXJjZVNhZmV0eSB7CisgICAgICAgIFJlc291cmNlU2FmZXR5
VW5rbm93biwKKyAgICAgICAgUmVzb3VyY2VTYWZlLAorICAgICAgICBSZXNvdXJjZVVuc2FmZQor
ICAgIH07CisgICAgUmVzb3VyY2VTYWZldHkgbV9yZXNvdXJjZVNhZmV0eTsKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBt
X2NvbXBvc2l0aW5nTGF5ZXI7CisjZW5kaWYKKyNpZiBVU0UoU0tJQSkKKyAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBvZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndAorICAg
IC8vIG1hdGNoIHRob3NlIHRoYXQgd2Ugd2VyZSBnaXZlbiBpbiB0aGUgbW9zdCByZWNlbnQgY2Fs
bCB0bworICAgIC8vIHJlc2hhcGUoKSwgdGhlbiB3ZSBuZWVkIGFuIGludGVybWVkaWF0ZSBiaXRt
YXAgdG8gcmVhZCBiYWNrIHRoZQorICAgIC8vIGZyYW1lIGJ1ZmZlciBpbnRvLiBUaGlzIHNlZW1z
IHRvIGhhcHBlbiB3aGVuIENTUyBzdHlsZXMgYXJlCisgICAgLy8gdXNlZCB0byByZXNpemUgdGhl
IENhbnZhcy4KKyAgICBTa0JpdG1hcCBtX3Jlc2l6aW5nQml0bWFwOworCisgICAgR3JDb250ZXh0
KiBtX2dyQ29udGV4dDsKKyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIE93bkFycmF5UHRyPHVu
c2lnbmVkIGNoYXI+IG1fcmVuZGVyT3V0cHV0OworICAgIHNpemVfdCBtX3JlbmRlck91dHB1dFNp
emU7CisjZW5kaWYKKworICAgIHZvaWQgaW5pdGlhbGl6ZUV4dGVuc2lvbnMoKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4dDNEX2gKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oCShyZXZpc2lvbiA5Mzk3OSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsy
Myw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbF9oCi0jZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAorI2lmbmRlZiBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGVfaAorI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVf
aAogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgpAQCAtNTMsMTcgKzUzLDE3IEBAIGNsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1
bTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI7CiBjbGFzcyBTd2Fw
QnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQz
REludGVybmFsIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB7CiBwdWJsaWM6Ci0g
ICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOwotICAgIH5HcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CisgICAgfkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSgpOwogCi0gICAgYm9vbCBpbml0aWFsaXplKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcm92aWRlIGFjY2VzcyB0byB0
aGUgbG93ZXItbGV2ZWwgV2ViR3JhcGhpY3NDb250ZXh0M0QsCiAgICAgLy8gd2hpY2ggaXMgbmVl
ZGVkIGZvciBzdWJvcmRpbmF0ZSBjb250ZXh0cyBsaWtlIFdlYkdMJ3MgdG8gc2hhcmUgcmVzb3Vy
Y2VzCiAgICAgLy8gd2l0aCB0aGUgY29tcG9zaXRvcidzIGNvbnRleHQuCi0gICAgc3RhdGljIFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7CisgICAgc3RhdGljIFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIGV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RCopOwogCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3Q7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBj
b25zdDsKQEAgLTExMyw5ICsxMTMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBibGVuZEZ1bmMoR0Mz
RGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3Rvcik7CiAgICAgdm9pZCBibGVuZEZ1bmNTZXBh
cmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEs
IEdDM0RlbnVtIGRzdEFscGhhKTsKIAotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEs
IEdDM0RlbnVtIHVzYWdlKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEp
OworICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciwgR0Mz
RGVudW0gdXNhZ2UpOworICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaXB0ciwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpOworICAgIHZvaWQgYnVm
ZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlw
dHIsIGNvbnN0IHZvaWQqIGRhdGEpOwogCiAgICAgR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhHQzNEZW51bSB0YXJnZXQpOwogICAgIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2sp
OwpAQCAtMTkyLDcgKzE5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFt
cGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7CiAgICAgdm9pZCBzY2lzc29yKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZv
aWQgc2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgc3RyaW5nKTsK
KyAgICB2b2lkIHNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWlu
dCBtYXNrKTsKICAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0Mz
RGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwogICAgIHZvaWQgc3RlbmNp
bE1hc2soR0MzRHVpbnQgbWFzayk7CkBAIC0yMDcsMjQgKzIwNywyNCBAQCBwdWJsaWM6CiAgICAg
dm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
OwogCiAgICAgdm9pZCB1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgpOwot
ICAgIHZvaWQgdW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkpOwogICAgIHZvaWQgdW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQgeCk7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0xaXYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpKTsKICAgICB2b2lkIHVuaWZvcm0yZihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQg
dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSk7CiAg
ICAgdm9pZCB1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkp
OwotICAgIHZvaWQgdW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNE
c2l6ZWkgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSk7CiAgICAgdm9pZCB1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAgdm9pZCB1bmlmb3Jt
M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpOworICAg
IHZvaWQgdW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSk7CiAgICAgdm9pZCB1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RpbnQgeik7Ci0gICAgdm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0zaXYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpKTsKICAgICB2b2lkIHVuaWZvcm00ZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBH
QzNEZmxvYXQgdyk7Ci0gICAgdm9pZCB1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdW5pZm9ybTRmdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSk7CiAgICAgdm9pZCB1bmlmb3JtNGkoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3
KTsKLSAgICB2b2lkIHVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0Mz
RHNpemVpIHNpemUpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXpl
KTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9p
ZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdW5pZm9ybTRp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkpOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSk7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwg
R0MzRHNpemVpKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkpOwogCiAg
ICAgdm9pZCB1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZvaWQgdmFsaWRhdGVQ
cm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwpAQCAtMjcxLDcgKzI3MSw3IEBAIHB1YmxpYzoKIAog
ICAgIC8vIEdMX0NIUk9NSVVNX21hcF9zdWIKICAgICBib29sIHN1cHBvcnRzTWFwU3ViQ0hST01J
VU0oKTsKLSAgICB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0
LCBHQzNEc2l6ZWlwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGVudW0gYWNjZXNzKTsK
KyAgICB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWlwdHIgb2Zmc2V0LCBHQzNEc2l6ZWksIEdDM0RlbnVtIGFjY2Vzcyk7CiAgICAgdm9pZCB1
bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShjb25zdCB2b2lkKik7CiAgICAgdm9pZCogbWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEZW51bSBhY2Nlc3MpOwog
ICAgIHZvaWQgdW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oY29uc3Qgdm9pZCopOwpAQCAtMzMx
LDQgKzMzMSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEdyYXBoaWNzQ29udGV4dDNEX2gKKyNlbmRpZiAvLyBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGVfaApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAko
cmV2aXNpb24gOTM5NzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAKICNpbmNsdWRlICJHZW9sb2Nh
dGlvbkNsaWVudFByb3h5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVy
bmFsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAi
SFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKQEAgLTI2OTEsMTcgKzI2OTEsMTcgQEAgV2ViR3JhcGhpY3NDb250
ZXh0M0QqIFdlYlZpZXdJbXBsOjpncmFwaAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICBpZiAobV9wYWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZCgpICYmIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewogICAgICAgICBpZiAo
bV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2Vi
Q29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmV4dHJhY3RXZWJHcmFwaGljc0Nv
bnRleHQzRChtX2xheWVyVHJlZUhvc3QtPmNvbnRleHQoKSk7CisgICAgICAgICAgICBXZWJHcmFw
aGljc0NvbnRleHQzRCogd2ViQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0
cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1fbGF5ZXJUcmVlSG9zdC0+Y29udGV4dCgpKTsKICAg
ICAgICAgICAgIGlmICh3ZWJDb250ZXh0ICYmICF3ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYkNvbnRleHQ7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRCkgewotICAgICAgICAgICAg
V2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBo
aWNzQ29udGV4dDNELmdldCgpKTsKKyAgICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3
ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3ND
b250ZXh0M0QobV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELmdldCgpKTsKICAg
ICAgICAgICAgIGlmICh3ZWJDb250ZXh0ICYmICF3ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYkNvbnRleHQ7CiAgICAgICAgIH0KICAgICAgICAg
bV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKLSAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmV4dHJhY3RXZWJHcmFwaGljc0Nv
bnRleHQzRChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCkpOworICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3ND
b250ZXh0M0QobV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELmdldCgpKTsKICAg
ICB9CiAjZW5kaWYKICAgICByZXR1cm4gMDsK
</data>
<flag name="review"
          id="101857"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105768</attachid>
            <date>2011-08-31 04:56:33 -0700</date>
            <delta_ts>2011-08-31 06:38:13 -0700</delta_ts>
            <desc>Build Fix for GTK</desc>
            <filename>gtk_3dGraphicsContextPrivate_buildfix.patch</filename>
            <type>text/plain</type>
            <size>18218</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">Y29tbWl0IDUwODU4NjU0ZTFjYjViMmE5ZGM3NWJhYTU3ODRhMjUxOWVhNzliYTcKQXV0aG9yOiBE
b21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm90dHNjaGVzQGludGVsLmNvbT4KRGF0ZTogICBX
ZWQgQXVnIDMxIDEzOjA5OjEwIDIwMTEgKzAzMDAKCiAgICBCdWlsZCBmaXggZm9yIEdUSyBhZnRl
ciByZW5hbWUuCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVlMjg0OGMuLmQwYmRhMDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNSBAQAorMjAxMS0wOC0zMSAgRG9taW5payBSw7Z0dHNjaGVzICA8ZG9taW5pay5y
b3R0c2NoZXNAbGludXguaW50ZWwuY29tPgorCisgICAgICAgIFJlbmFtZSBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsIHRvIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSBhbmQgYWRkIGEgZHVtbXkg
dmVyc2lvbiBvZiB0aGlzIGNsYXNzIGZvciBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTcyCisKKyAgICAgICAgQnVpbGQgZml4LCBjb21wbGV0
aW5nIHJlbmFtZSBmb3IgR1RLIGZpbGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcC4KKyAgICAgICAgKHNoYXJlZERp
c3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlR3JhcGhpY3NDb250ZXh0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmFkZEFjdGl2ZUdyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJl
bW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVBidWZmZXJDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlUGl4bWFwQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQpOgorCiAyMDExLTA4
LTMwICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBnc3RyZWFtZXIvIGZpbGVzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIE1lZGlhUGxheWVy
IG5lZWQgVklERU8gZ3VhcmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZmY5ODUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZQotICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNp
bmNsdWRlIDxHTC9nbHguaD4KLSNpbmNsdWRlIDxkbGZjbi5oPgotCi0vLyBXZSBkbyBub3Qgd2Fu
dCB0byBjYWxsIGdsWE1ha2VDb250ZXh0Q3VycmVudCB1c2luZyBkaWZmZXJlbnQgRGlzcGxheSBw
b2ludGVycywKLS8vIGJlY2F1c2UgaXQgbWlnaHQgbGVhZCB0byBjcmFzaGVzIGluIHNvbWUgZHJp
dmVycyAoZmdscngpLiBXZSB1c2UgYSBzaGFyZWQgZGlzcGxheQotLy8gcG9pbnRlciBoZXJlLgot
c3RhdGljIERpc3BsYXkqIGdTaGFyZWREaXNwbGF5ID0gMDsKLXN0YXRpYyBEaXNwbGF5KiBzaGFy
ZWREaXNwbGF5KCkKLXsKLSAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQotICAgICAgICBnU2hhcmVk
RGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICByZXR1cm4gZ1NoYXJlZERpc3BsYXk7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQmVjYXVzZSBvZiBkcml2ZXIgYnVncywgZXhp
dGluZyB0aGUgcHJvZ3JhbSB3aGVuIHRoZXJlIGFyZSBhY3RpdmUgcGJ1ZmZlcnMKLS8vIGNhbiBj
cmFzaCB0aGUgWCBzZXJ2ZXIgKHRoaXMgaGFzIGJlZW4gb2JzZXJ2ZWQgd2l0aCB0aGUgb2ZmaWNp
YWwgTnZpZGlhIGRyaXZlcnMpLgotLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBjbGVhbiBl
dmVyeXRoaW5nIHVwIG9uIGV4aXQuIFRoZXJlIGFyZSBzZXZlcmFsIHJlYXNvbnMKLS8vIHRoYXQg
R3JhcGhpY3NDb250ZXh0M0RzIHdpbGwgc3RpbGwgYmUgYWxpdmUgYXQgZXhpdCwgaW5jbHVkaW5n
IHVzZXIgZXJyb3IgKG1lbW9yeQotLy8gbGVha3MpIGFuZCB0aGUgcGFnZSBjYWNoZS4gSW4gYW55
IGNhc2UsIHdlIGRvbid0IHdhbnQgdGhlIFggc2VydmVyIHRvIGNyYXNoLgotc3RhdGljIGJvb2wg
Y2xlYW5pbmdVcEF0RXhpdCA9IGZhbHNlOwotc3RhdGljIFZlY3RvcjxHcmFwaGljc0NvbnRleHQz
RCo+JiBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFZlY3RvcjxHcmFwaGljc0NvbnRleHQzRCo+LCBjb250ZXh0cywgKCkpOwotICAgIHJldHVybiBj
b250ZXh0czsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjphZGRBY3RpdmVH
cmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgc3RhdGlj
IGJvb2wgYWRkZWRBdEV4aXRIYW5kbGVyID0gZmFsc2U7Ci0gICAgaWYgKCFhZGRlZEF0RXhpdEhh
bmRsZXIpIHsKLSAgICAgICAgYXRleGl0KCZHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjbGVh
bnVwQWN0aXZlQ29udGV4dHNBdEV4aXQpOwotICAgICAgICBhZGRlZEF0RXhpdEhhbmRsZXIgPSB0
cnVlOwotICAgIH0KLSAgICBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCkuYXBwZW5kKGNvbnRleHQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlbW92ZUFjdGl2ZUdyYXBo
aWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLXsKLSAgICBpZiAoY2xlYW5p
bmdVcEF0RXhpdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4
dDNEKj4mIGNvbnRleHRzID0gYWN0aXZlR3JhcGhpY3NDb250ZXh0cygpOwotICAgIHNpemVfdCBs
b2NhdGlvbiA9IGNvbnRleHRzLmZpbmQoY29udGV4dCk7Ci0gICAgaWYgKGxvY2F0aW9uICE9IFdU
Rjo6bm90Rm91bmQpCi0gICAgICAgIGNvbnRleHRzLnJlbW92ZShsb2NhdGlvbik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0
KCkKLXsKLSAgICBjbGVhbmluZ1VwQXRFeGl0ID0gdHJ1ZTsKLQotICAgIFZlY3RvcjxHcmFwaGlj
c0NvbnRleHQzRCo+JiBjb250ZXh0cyA9IGFjdGl2ZUdyYXBoaWNzQ29udGV4dHMoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRleHRzLnNpemUoKTsgaSsrKQotICAgICAgICBjb250
ZXh0c1tpXS0+fkdyYXBoaWNzQ29udGV4dDNEKCk7Ci0KLSAgICBpZiAoIWdTaGFyZWREaXNwbGF5
KQotICAgICAgICByZXR1cm47Ci0gICAgWENsb3NlRGlzcGxheShnU2hhcmVkRGlzcGxheSk7Ci0g
ICAgZ1NoYXJlZERpc3BsYXkgPSAwOwotfQotCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw+IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZSgpCi17Ci0gICAgaWYg
KCFzaGFyZWREaXNwbGF5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBpbml0aWFsaXpl
T3BlbkdMU2hpbXMoKTsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLSAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbCogaW50ZXJuYWwgPSBjcmVhdGVQYnVmZmVyQ29udGV4dCgpOwotICAgIGlm
ICghaW50ZXJuYWwpCi0gICAgICAgIGludGVybmFsID0gY3JlYXRlUGl4bWFwQ29udGV4dCgpOwot
ICAgIGlmICghaW50ZXJuYWwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gVGhl
IEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yIHJlcXVpcmVzIHRoYXQgdGhpcyBjb250ZXh0
IGlzIHRoZSBjdXJyZW50IE9wZW5HTCBjb250ZXh0LgotICAgIGludGVybmFsLT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gYWRvcHRQdHIoaW50ZXJuYWwpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQzREludGVybmFsKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQYnVm
ZmVyQ29udGV4dCgpCi17Ci0gICAgaW50IGZiQ29uZmlnQXR0cmlidXRlc1tdID0gewotICAgICAg
ICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1BCVUZGRVJfQklULAotICAgICAgICBHTFhfUkVOREVS
X1RZUEUsIEdMWF9SR0JBX0JJVCwKLSAgICAgICAgR0xYX1JFRF9TSVpFLCAxLAotICAgICAgICBH
TFhfR1JFRU5fU0laRSwgMSwKLSAgICAgICAgR0xYX0JMVUVfU0laRSwgMSwKLSAgICAgICAgR0xY
X0FMUEhBX1NJWkUsIDEsCi0gICAgICAgIEdMWF9ERVBUSF9TSVpFLCAxLAotICAgICAgICBHTFhf
U1RFTkNJTF9TSVpFLCAxLAotICAgICAgICBHTFhfU0FNUExFX0JVRkZFUlMsIDEsCi0gICAgICAg
IEdMWF9ET1VCTEVCVUZGRVIsIEdMX0ZBTFNFLAotICAgICAgICBHTFhfU0FNUExFUywgNCwKLSAg
ICAgICAgMAotICAgIH07Ci0gICAgaW50IHJldHVybmVkRWxlbWVudHM7Ci0gICAgR0xYRkJDb25m
aWcqIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhzaGFyZWREaXNwbGF5KCksIDAsIGZiQ29u
ZmlnQXR0cmlidXRlcywgJnJldHVybmVkRWxlbWVudHMpOwotICAgIGlmICghY29uZmlncykgewot
ICAgICAgICBmYkNvbmZpZ0F0dHJpYnV0ZXNbMjBdID0gMDsgLy8gQXR0ZW1wdCB3aXRob3V0IGFu
dGktYWxpYXNpbmcuCi0gICAgICAgIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhzaGFyZWRE
aXNwbGF5KCksIDAsIGZiQ29uZmlnQXR0cmlidXRlcywgJnJldHVybmVkRWxlbWVudHMpOwotICAg
IH0KLSAgICBpZiAoIXJldHVybmVkRWxlbWVudHMpIHsKLSAgICAgICAgWEZyZWUoY29uZmlncyk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIHdpbGwgYmUgcmVuZGVyaW5n
IHRvIGEgdGV4dHVyZSwgc28gb3VyIHBidWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZSBsYXJnZS4K
LSAgICBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJBdHRyaWJ1dGVzW10gPSB7IEdMWF9QQlVGRkVS
X1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSFQsIDEsIDAgfTsKLSAgICBHTFhQYnVmZmVyIHBi
dWZmZXIgPSBnbFhDcmVhdGVQYnVmZmVyKHNoYXJlZERpc3BsYXkoKSwgY29uZmlnc1swXSwgcGJ1
ZmZlckF0dHJpYnV0ZXMpOwotICAgIGlmICghcGJ1ZmZlcikgewotICAgICAgICBYRnJlZShjb25m
aWdzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgR0xYQ29udGV4dCBjb250ZXh0
ID0gZ2xYQ3JlYXRlTmV3Q29udGV4dChzaGFyZWREaXNwbGF5KCksIGNvbmZpZ3NbMF0sIEdMWF9S
R0JBX1RZUEUsIDAsIEdMX1RSVUUpOwotICAgIFhGcmVlKGNvbmZpZ3MpOwotICAgIGlmICghY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQz
REludGVybmFsKGNvbnRleHQsIHBidWZmZXIpOwotfQotCi1HcmFwaGljc0NvbnRleHQzREludGVy
bmFsKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQaXhtYXBDb250ZXh0KCkKLXsK
LSAgICBzdGF0aWMgaW50IHZpc3VhbEF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgR0xYX1JHQkEs
Ci0gICAgICAgIEdMWF9SRURfU0laRSwgMSwKLSAgICAgICAgR0xYX0dSRUVOX1NJWkUsIDEsCi0g
ICAgICAgIEdMWF9CTFVFX1NJWkUsIDEsCi0gICAgICAgIEdMWF9BTFBIQV9TSVpFLCAxLAotICAg
ICAgICBHTFhfRE9VQkxFQlVGRkVSLAotICAgICAgICAwCi0gICAgfTsKLQotICAgIFhWaXN1YWxJ
bmZvKiB2aXN1YWxJbmZvID0gZ2xYQ2hvb3NlVmlzdWFsKHNoYXJlZERpc3BsYXkoKSwgRGVmYXVs
dFNjcmVlbihzaGFyZWREaXNwbGF5KCkpLCB2aXN1YWxBdHRyaWJ1dGVzKTsKLSAgICBpZiAoIXZp
c3VhbEluZm8pCi0gICAgICAgIHJldHVybiAwOwotIAotICAgIEdMWENvbnRleHQgY29udGV4dCA9
IGdsWENyZWF0ZUNvbnRleHQoc2hhcmVkRGlzcGxheSgpLCB2aXN1YWxJbmZvLCAwLCBHTF9UUlVF
KTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFBpeG1hcCBwaXhtYXAgPSBYQ3JlYXRlUGl4bWFw
KHNoYXJlZERpc3BsYXkoKSwgRGVmYXVsdFJvb3RXaW5kb3coc2hhcmVkRGlzcGxheSgpKSwgMSwg
MSwgdmlzdWFsSW5mby0+ZGVwdGgpOwotICAgIGlmICghcGl4bWFwKSB7Ci0gICAgICAgIFhGcmVl
KHZpc3VhbEluZm8pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBHTFhQaXhtYXAg
Z2x4UGl4bWFwID0gZ2xYQ3JlYXRlR0xYUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgdmlzdWFsSW5m
bywgcGl4bWFwKTsKLSAgICBpZiAoIWdseFBpeG1hcCkgewotICAgICAgICBYRnJlZVBpeG1hcChz
aGFyZWREaXNwbGF5KCksIHBpeG1hcCk7Ci0gICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwoY29udGV4dCwgcGl4bWFwLCBnbHhQaXhtYXApOwotfQotCi1HcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdMWENvbnRleHQgY29udGV4
dCwgR0xYUGJ1ZmZlciBwYnVmZmVyKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBt
X3BidWZmZXIocGJ1ZmZlcikKLSAgICAsIG1fcGl4bWFwKDApCi0gICAgLCBtX2dseFBpeG1hcCgw
KQotewotfQotCi1HcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKEdMWENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwgR0xYUGl4bWFwIGdseFBp
eG1hcCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9wYnVmZmVyKDApCi0gICAg
LCBtX3BpeG1hcChwaXhtYXApCi0gICAgLCBtX2dseFBpeG1hcChnbHhQaXhtYXApCi17Ci19Ci0K
LUdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkK
LXsKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIC8vIFRoaXMgbWF5IGJlIG5lY2Vzc2Fy
eSB0byBwcmV2ZW50IGNyYXNoZXMgd2l0aCBOVmlkaWEncyBjbG9zZWQgc291cmNlIGRyaXZlcnMu
IE9yaWdpbmFsbHkKLSAgICAgICAgLy8gZnJvbSBNb3ppbGxhJ3MgM0QgY2FudmFzIGltcGxlbWVu
dGF0aW9uIGF0OiBodHRwOi8vYml0YnVja2V0Lm9yZy9pbG1hcmkvY2FudmFzM2QvCi0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCAwKTsKLQotICAgICAg
ICA6OmdsWE1ha2VDb250ZXh0Q3VycmVudChzaGFyZWREaXNwbGF5KCksIDAsIDAsIDApOwotICAg
ICAgICA6OmdsWERlc3Ryb3lDb250ZXh0KHNoYXJlZERpc3BsYXkoKSwgbV9jb250ZXh0KTsKLSAg
ICAgICAgbV9jb250ZXh0ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9wYnVmZmVyKSB7Ci0gICAg
ICAgIDo6Z2xYRGVzdHJveVBidWZmZXIoc2hhcmVkRGlzcGxheSgpLCBtX3BidWZmZXIpOwotICAg
ICAgICBtX3BidWZmZXIgPSAwOwotICAgIH0KLSAgICBpZiAobV9nbHhQaXhtYXApIHsKLSAgICAg
ICAgZ2xYRGVzdHJveUdMWFBpeG1hcChzaGFyZWREaXNwbGF5KCksIG1fZ2x4UGl4bWFwKTsKLSAg
ICAgICAgbV9nbHhQaXhtYXAgPSAwOwotICAgIH0KLSAgICBpZiAobV9waXhtYXApIHsKLSAgICAg
ICAgWEZyZWVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX3BpeG1hcCk7Ci0gICAgICAgIG1fcGl4
bWFwID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBpZiAoOjpnbFhHZXRDdXJyZW50Q29udGV4dCgpID09
IG1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9jb250ZXh0KQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKG1fcGJ1ZmZlcikgewotICAgICAgICA6OmdsWE1ha2VDdXJyZW50
KHNoYXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyLCBtX2NvbnRleHQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fZ2x4UGl4bWFwKTsKLSAgICA6OmdsWE1ha2VDdXJyZW50
KHNoYXJlZERpc3BsYXkoKSwgbV9nbHhQaXhtYXAsIG1fY29udGV4dCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRV9XRUJHTApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2Nm
NzcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorCisjaWYgRU5BQkxF
KFdFQkdMKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJPcGVu
R0xTaGltcy5oIgorI2luY2x1ZGUgPEdML2dseC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisKKy8v
IFdlIGRvIG5vdCB3YW50IHRvIGNhbGwgZ2xYTWFrZUNvbnRleHRDdXJyZW50IHVzaW5nIGRpZmZl
cmVudCBEaXNwbGF5IHBvaW50ZXJzLAorLy8gYmVjYXVzZSBpdCBtaWdodCBsZWFkIHRvIGNyYXNo
ZXMgaW4gc29tZSBkcml2ZXJzIChmZ2xyeCkuIFdlIHVzZSBhIHNoYXJlZCBkaXNwbGF5CisvLyBw
b2ludGVyIGhlcmUuCitzdGF0aWMgRGlzcGxheSogZ1NoYXJlZERpc3BsYXkgPSAwOworc3RhdGlj
IERpc3BsYXkqIHNoYXJlZERpc3BsYXkoKQoreworICAgIGlmICghZ1NoYXJlZERpc3BsYXkpCisg
ICAgICAgIGdTaGFyZWREaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOworICAgIHJldHVybiBnU2hh
cmVkRGlzcGxheTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBCZWNhdXNlIG9mIGRy
aXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUgYXJlIGFjdGl2ZSBwYnVm
ZmVycworLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMgYmVlbiBvYnNlcnZlZCB3
aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCisvLyBXZSBuZWVkIHRvIGVuc3VyZSB0
aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUgYXJlIHNldmVyYWwgcmVh
c29ucworLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2lsbCBzdGlsbCBiZSBhbGl2ZSBhdCBl
eGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5CisvLyBsZWFrcykgYW5kIHRoZSBwYWdl
IGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0aGUgWCBzZXJ2ZXIgdG8gY3Jhc2gu
CitzdGF0aWMgYm9vbCBjbGVhbmluZ1VwQXRFeGl0ID0gZmFsc2U7CitzdGF0aWMgVmVjdG9yPEdy
YXBoaWNzQ29udGV4dDNEKj4mIGFjdGl2ZUdyYXBoaWNzQ29udGV4dHMoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4sIGNvbnRleHRzLCAoKSk7
CisgICAgcmV0dXJuIGNvbnRleHRzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQor
eworICAgIHN0YXRpYyBib29sIGFkZGVkQXRFeGl0SGFuZGxlciA9IGZhbHNlOworICAgIGlmICgh
YWRkZWRBdEV4aXRIYW5kbGVyKSB7CisgICAgICAgIGF0ZXhpdCgmR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpjbGVhbnVwQWN0aXZlQ29udGV4dHNBdEV4aXQpOworICAgICAgICBhZGRlZEF0RXhp
dEhhbmRsZXIgPSB0cnVlOworICAgIH0KKyAgICBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCkuYXBw
ZW5kKGNvbnRleHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVtb3Zl
QWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAg
IGlmIChjbGVhbmluZ1VwQXRFeGl0KQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8R3Jh
cGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCk7Cisg
ICAgc2l6ZV90IGxvY2F0aW9uID0gY29udGV4dHMuZmluZChjb250ZXh0KTsKKyAgICBpZiAobG9j
YXRpb24gIT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgY29udGV4dHMucmVtb3ZlKGxvY2F0aW9u
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNsZWFudXBBY3RpdmVDb250
ZXh0c0F0RXhpdCgpCit7CisgICAgY2xlYW5pbmdVcEF0RXhpdCA9IHRydWU7CisKKyAgICBWZWN0
b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVHcmFwaGljc0NvbnRleHRz
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250ZXh0cy5zaXplKCk7IGkrKykKKyAg
ICAgICAgY29udGV4dHNbaV0tPn5HcmFwaGljc0NvbnRleHQzRCgpOworCisgICAgaWYgKCFnU2hh
cmVkRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworICAgIFhDbG9zZURpc3BsYXkoZ1NoYXJlZERp
c3BsYXkpOworICAgIGdTaGFyZWREaXNwbGF5ID0gMDsKK30KKworUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlKCkKK3sK
KyAgICBpZiAoIXNoYXJlZERpc3BsYXkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nl
c3MgPSB0cnVlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgc3VjY2VzcyA9IGlu
aXRpYWxpemVPcGVuR0xTaGltcygpOworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAg
fQorICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUqIGludGVybmFsID0gY3JlYXRlUGJ1ZmZlckNvbnRleHQoKTsK
KyAgICBpZiAoIWludGVybmFsKQorICAgICAgICBpbnRlcm5hbCA9IGNyZWF0ZVBpeG1hcENvbnRl
eHQoKTsKKyAgICBpZiAoIWludGVybmFsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIFRoZSBHcmFwaGljc0NvbnRleHQzRCBjb25zdHJ1Y3RvciByZXF1aXJlcyB0aGF0IHRoaXMg
Y29udGV4dCBpcyB0aGUgY3VycmVudCBPcGVuR0wgY29udGV4dC4KKyAgICBpbnRlcm5hbC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGludGVybmFsKTsKK30KKwor
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZVBidWZmZXJDb250ZXh0KCkKK3sKKyAgICBpbnQgZmJDb25maWdBdHRyaWJ1dGVzW10gPSB7Cisg
ICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgIEdMWF9S
RU5ERVJfVFlQRSwgR0xYX1JHQkFfQklULAorICAgICAgICBHTFhfUkVEX1NJWkUsIDEsCisgICAg
ICAgIEdMWF9HUkVFTl9TSVpFLCAxLAorICAgICAgICBHTFhfQkxVRV9TSVpFLCAxLAorICAgICAg
ICBHTFhfQUxQSEFfU0laRSwgMSwKKyAgICAgICAgR0xYX0RFUFRIX1NJWkUsIDEsCisgICAgICAg
IEdMWF9TVEVOQ0lMX1NJWkUsIDEsCisgICAgICAgIEdMWF9TQU1QTEVfQlVGRkVSUywgMSwKKyAg
ICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgR0xfRkFMU0UsCisgICAgICAgIEdMWF9TQU1QTEVTLCA0
LAorICAgICAgICAwCisgICAgfTsKKyAgICBpbnQgcmV0dXJuZWRFbGVtZW50czsKKyAgICBHTFhG
QkNvbmZpZyogY29uZmlncyA9IGdsWENob29zZUZCQ29uZmlnKHNoYXJlZERpc3BsYXkoKSwgMCwg
ZmJDb25maWdBdHRyaWJ1dGVzLCAmcmV0dXJuZWRFbGVtZW50cyk7CisgICAgaWYgKCFjb25maWdz
KSB7CisgICAgICAgIGZiQ29uZmlnQXR0cmlidXRlc1syMF0gPSAwOyAvLyBBdHRlbXB0IHdpdGhv
dXQgYW50aS1hbGlhc2luZy4KKyAgICAgICAgY29uZmlncyA9IGdsWENob29zZUZCQ29uZmlnKHNo
YXJlZERpc3BsYXkoKSwgMCwgZmJDb25maWdBdHRyaWJ1dGVzLCAmcmV0dXJuZWRFbGVtZW50cyk7
CisgICAgfQorICAgIGlmICghcmV0dXJuZWRFbGVtZW50cykgeworICAgICAgICBYRnJlZShjb25m
aWdzKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2Ugd2lsbCBiZSByZW5k
ZXJpbmcgdG8gYSB0ZXh0dXJlLCBzbyBvdXIgcGJ1ZmZlciBkb2VzIG5vdCBuZWVkIHRvIGJlIGxh
cmdlLgorICAgIHN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsgR0xYX1BC
VUZGRVJfV0lEVEgsIDEsIEdMWF9QQlVGRkVSX0hFSUdIVCwgMSwgMCB9OworICAgIEdMWFBidWZm
ZXIgcGJ1ZmZlciA9IGdsWENyZWF0ZVBidWZmZXIoc2hhcmVkRGlzcGxheSgpLCBjb25maWdzWzBd
LCBwYnVmZmVyQXR0cmlidXRlcyk7CisgICAgaWYgKCFwYnVmZmVyKSB7CisgICAgICAgIFhGcmVl
KGNvbmZpZ3MpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBHTFhDb250ZXh0IGNv
bnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KHNoYXJlZERpc3BsYXkoKSwgY29uZmlnc1swXSwg
R0xYX1JHQkFfVFlQRSwgMCwgR0xfVFJVRSk7CisgICAgWEZyZWUoY29uZmlncyk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZShjb250ZXh0LCBwYnVmZmVyKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVBpeG1hcENvbnRleHQoKQor
eworICAgIHN0YXRpYyBpbnQgdmlzdWFsQXR0cmlidXRlc1tdID0geworICAgICAgICBHTFhfUkdC
QSwKKyAgICAgICAgR0xYX1JFRF9TSVpFLCAxLAorICAgICAgICBHTFhfR1JFRU5fU0laRSwgMSwK
KyAgICAgICAgR0xYX0JMVUVfU0laRSwgMSwKKyAgICAgICAgR0xYX0FMUEhBX1NJWkUsIDEsCisg
ICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsCisgICAgICAgIDAKKyAgICB9OworCisgICAgWFZpc3Vh
bEluZm8qIHZpc3VhbEluZm8gPSBnbFhDaG9vc2VWaXN1YWwoc2hhcmVkRGlzcGxheSgpLCBEZWZh
dWx0U2NyZWVuKHNoYXJlZERpc3BsYXkoKSksIHZpc3VhbEF0dHJpYnV0ZXMpOworICAgIGlmICgh
dmlzdWFsSW5mbykKKyAgICAgICAgcmV0dXJuIDA7CisgCisgICAgR0xYQ29udGV4dCBjb250ZXh0
ID0gZ2xYQ3JlYXRlQ29udGV4dChzaGFyZWREaXNwbGF5KCksIHZpc3VhbEluZm8sIDAsIEdMX1RS
VUUpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBYRnJlZSh2aXN1YWxJbmZvKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUGl4bWFwIHBpeG1hcCA9IFhDcmVhdGVQaXht
YXAoc2hhcmVkRGlzcGxheSgpLCBEZWZhdWx0Um9vdFdpbmRvdyhzaGFyZWREaXNwbGF5KCkpLCAx
LCAxLCB2aXN1YWxJbmZvLT5kZXB0aCk7CisgICAgaWYgKCFwaXhtYXApIHsKKyAgICAgICAgWEZy
ZWUodmlzdWFsSW5mbyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEdMWFBpeG1h
cCBnbHhQaXhtYXAgPSBnbFhDcmVhdGVHTFhQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCB2aXN1YWxJ
bmZvLCBwaXhtYXApOworICAgIGlmICghZ2x4UGl4bWFwKSB7CisgICAgICAgIFhGcmVlUGl4bWFw
KHNoYXJlZERpc3BsYXkoKSwgcGl4bWFwKTsKKyAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlKGNvbnRleHQsIHBpeG1hcCwgZ2x4UGl4bWFwKTsKK30KKworR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR0xYQ29udGV4dCBjb250ZXh0
LCBHTFhQYnVmZmVyIHBidWZmZXIpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1f
cGJ1ZmZlcihwYnVmZmVyKQorICAgICwgbV9waXhtYXAoMCkKKyAgICAsIG1fZ2x4UGl4bWFwKDAp
Cit7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKEdMWENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwgR0xYUGl4bWFwIGdseFBpeG1h
cCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9wYnVmZmVyKDApCisgICAgLCBt
X3BpeG1hcChwaXhtYXApCisgICAgLCBtX2dseFBpeG1hcChnbHhQaXhtYXApCit7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCit7Cisg
ICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAvLyBUaGlzIG1heSBiZSBuZWNlc3NhcnkgdG8g
cHJldmVudCBjcmFzaGVzIHdpdGggTlZpZGlhJ3MgY2xvc2VkIHNvdXJjZSBkcml2ZXJzLiBPcmln
aW5hbGx5CisgICAgICAgIC8vIGZyb20gTW96aWxsYSdzIDNEIGNhbnZhcyBpbXBsZW1lbnRhdGlv
biBhdDogaHR0cDovL2JpdGJ1Y2tldC5vcmcvaWxtYXJpL2NhbnZhczNkLworICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgMCk7CisKKyAgICAgICAgOjpn
bFhNYWtlQ29udGV4dEN1cnJlbnQoc2hhcmVkRGlzcGxheSgpLCAwLCAwLCAwKTsKKyAgICAgICAg
OjpnbFhEZXN0cm95Q29udGV4dChzaGFyZWREaXNwbGF5KCksIG1fY29udGV4dCk7CisgICAgICAg
IG1fY29udGV4dCA9IDA7CisgICAgfQorCisgICAgaWYgKG1fcGJ1ZmZlcikgeworICAgICAgICA6
OmdsWERlc3Ryb3lQYnVmZmVyKHNoYXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyKTsKKyAgICAgICAg
bV9wYnVmZmVyID0gMDsKKyAgICB9CisgICAgaWYgKG1fZ2x4UGl4bWFwKSB7CisgICAgICAgIGds
WERlc3Ryb3lHTFhQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX2dseFBpeG1hcCk7CisgICAgICAg
IG1fZ2x4UGl4bWFwID0gMDsKKyAgICB9CisgICAgaWYgKG1fcGl4bWFwKSB7CisgICAgICAgIFhG
cmVlUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgbV9waXhtYXApOworICAgICAgICBtX3BpeG1hcCA9
IDA7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRl
eHRDdXJyZW50KCkKK3sKKyAgICBpZiAoOjpnbFhHZXRDdXJyZW50Q29udGV4dCgpID09IG1fY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1
cm47CisgICAgaWYgKG1fcGJ1ZmZlcikgeworICAgICAgICA6OmdsWE1ha2VDdXJyZW50KHNoYXJl
ZERpc3BsYXkoKSwgbV9wYnVmZmVyLCBtX2NvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUKG1fZ2x4UGl4bWFwKTsKKyAgICA6OmdsWE1ha2VDdXJyZW50KHNoYXJl
ZERpc3BsYXkoKSwgbV9nbHhQaXhtYXAsIG1fY29udGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRV9XRUJHTAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105773</attachid>
            <date>2011-08-31 06:38:13 -0700</date>
            <delta_ts>2011-09-01 12:26:09 -0700</delta_ts>
            <desc>Build Fix for GTK + Style fix</desc>
            <filename>gtk_3dGraphicsContextPrivate_buildfix_2.patch</filename>
            <type>text/plain</type>
            <size>18218</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">Y29tbWl0IGRlOTM3N2JiMzhmY2I2ZDMyZmM3OTI1MmExYmMyOGU3OGVjNGViNTMKQXV0aG9yOiBE
b21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm90dHNjaGVzQGludGVsLmNvbT4KRGF0ZTogICBX
ZWQgQXVnIDMxIDEzOjA5OjEwIDIwMTEgKzAzMDAKCiAgICBCdWlsZCBmaXggZm9yIEdUSyBhZnRl
ciByZW5hbWUuCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVlMjg0OGMuLmJlOGE3YmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNSBAQAorMjAxMS0wOC0zMSAgRG9taW5payBSw7Z0dHNjaGVzICA8ZG9taW5pay5y
b3R0c2NoZXNAbGludXguaW50ZWwuY29tPgorCisgICAgICAgIFJlbmFtZSBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsIHRvIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSBhbmQgYWRkIGEgZHVtbXkg
dmVyc2lvbiBvZiB0aGlzIGNsYXNzIGZvciBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTcyCisKKyAgICAgICAgQnVpbGQgZml4LCBjb21wbGV0
aW5nIHJlbmFtZSBmb3IgR1RLIGZpbGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcC4KKyAgICAgICAgKHNoYXJlZERp
c3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlR3JhcGhpY3NDb250ZXh0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmFkZEFjdGl2ZUdyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJl
bW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVBidWZmZXJDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlUGl4bWFwQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQpOgorCiAyMDExLTA4
LTMwICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBnc3RyZWFtZXIvIGZpbGVzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIE1lZGlhUGxheWVy
IG5lZWQgVklERU8gZ3VhcmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZmY5ODUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZQotICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNp
bmNsdWRlIDxHTC9nbHguaD4KLSNpbmNsdWRlIDxkbGZjbi5oPgotCi0vLyBXZSBkbyBub3Qgd2Fu
dCB0byBjYWxsIGdsWE1ha2VDb250ZXh0Q3VycmVudCB1c2luZyBkaWZmZXJlbnQgRGlzcGxheSBw
b2ludGVycywKLS8vIGJlY2F1c2UgaXQgbWlnaHQgbGVhZCB0byBjcmFzaGVzIGluIHNvbWUgZHJp
dmVycyAoZmdscngpLiBXZSB1c2UgYSBzaGFyZWQgZGlzcGxheQotLy8gcG9pbnRlciBoZXJlLgot
c3RhdGljIERpc3BsYXkqIGdTaGFyZWREaXNwbGF5ID0gMDsKLXN0YXRpYyBEaXNwbGF5KiBzaGFy
ZWREaXNwbGF5KCkKLXsKLSAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQotICAgICAgICBnU2hhcmVk
RGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICByZXR1cm4gZ1NoYXJlZERpc3BsYXk7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQmVjYXVzZSBvZiBkcml2ZXIgYnVncywgZXhp
dGluZyB0aGUgcHJvZ3JhbSB3aGVuIHRoZXJlIGFyZSBhY3RpdmUgcGJ1ZmZlcnMKLS8vIGNhbiBj
cmFzaCB0aGUgWCBzZXJ2ZXIgKHRoaXMgaGFzIGJlZW4gb2JzZXJ2ZWQgd2l0aCB0aGUgb2ZmaWNp
YWwgTnZpZGlhIGRyaXZlcnMpLgotLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBjbGVhbiBl
dmVyeXRoaW5nIHVwIG9uIGV4aXQuIFRoZXJlIGFyZSBzZXZlcmFsIHJlYXNvbnMKLS8vIHRoYXQg
R3JhcGhpY3NDb250ZXh0M0RzIHdpbGwgc3RpbGwgYmUgYWxpdmUgYXQgZXhpdCwgaW5jbHVkaW5n
IHVzZXIgZXJyb3IgKG1lbW9yeQotLy8gbGVha3MpIGFuZCB0aGUgcGFnZSBjYWNoZS4gSW4gYW55
IGNhc2UsIHdlIGRvbid0IHdhbnQgdGhlIFggc2VydmVyIHRvIGNyYXNoLgotc3RhdGljIGJvb2wg
Y2xlYW5pbmdVcEF0RXhpdCA9IGZhbHNlOwotc3RhdGljIFZlY3RvcjxHcmFwaGljc0NvbnRleHQz
RCo+JiBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFZlY3RvcjxHcmFwaGljc0NvbnRleHQzRCo+LCBjb250ZXh0cywgKCkpOwotICAgIHJldHVybiBj
b250ZXh0czsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjphZGRBY3RpdmVH
cmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgc3RhdGlj
IGJvb2wgYWRkZWRBdEV4aXRIYW5kbGVyID0gZmFsc2U7Ci0gICAgaWYgKCFhZGRlZEF0RXhpdEhh
bmRsZXIpIHsKLSAgICAgICAgYXRleGl0KCZHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjbGVh
bnVwQWN0aXZlQ29udGV4dHNBdEV4aXQpOwotICAgICAgICBhZGRlZEF0RXhpdEhhbmRsZXIgPSB0
cnVlOwotICAgIH0KLSAgICBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCkuYXBwZW5kKGNvbnRleHQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlbW92ZUFjdGl2ZUdyYXBo
aWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLXsKLSAgICBpZiAoY2xlYW5p
bmdVcEF0RXhpdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4
dDNEKj4mIGNvbnRleHRzID0gYWN0aXZlR3JhcGhpY3NDb250ZXh0cygpOwotICAgIHNpemVfdCBs
b2NhdGlvbiA9IGNvbnRleHRzLmZpbmQoY29udGV4dCk7Ci0gICAgaWYgKGxvY2F0aW9uICE9IFdU
Rjo6bm90Rm91bmQpCi0gICAgICAgIGNvbnRleHRzLnJlbW92ZShsb2NhdGlvbik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0
KCkKLXsKLSAgICBjbGVhbmluZ1VwQXRFeGl0ID0gdHJ1ZTsKLQotICAgIFZlY3RvcjxHcmFwaGlj
c0NvbnRleHQzRCo+JiBjb250ZXh0cyA9IGFjdGl2ZUdyYXBoaWNzQ29udGV4dHMoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRleHRzLnNpemUoKTsgaSsrKQotICAgICAgICBjb250
ZXh0c1tpXS0+fkdyYXBoaWNzQ29udGV4dDNEKCk7Ci0KLSAgICBpZiAoIWdTaGFyZWREaXNwbGF5
KQotICAgICAgICByZXR1cm47Ci0gICAgWENsb3NlRGlzcGxheShnU2hhcmVkRGlzcGxheSk7Ci0g
ICAgZ1NoYXJlZERpc3BsYXkgPSAwOwotfQotCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw+IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZSgpCi17Ci0gICAgaWYg
KCFzaGFyZWREaXNwbGF5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBpbml0aWFsaXpl
T3BlbkdMU2hpbXMoKTsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLSAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbCogaW50ZXJuYWwgPSBjcmVhdGVQYnVmZmVyQ29udGV4dCgpOwotICAgIGlm
ICghaW50ZXJuYWwpCi0gICAgICAgIGludGVybmFsID0gY3JlYXRlUGl4bWFwQ29udGV4dCgpOwot
ICAgIGlmICghaW50ZXJuYWwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gVGhl
IEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yIHJlcXVpcmVzIHRoYXQgdGhpcyBjb250ZXh0
IGlzIHRoZSBjdXJyZW50IE9wZW5HTCBjb250ZXh0LgotICAgIGludGVybmFsLT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gYWRvcHRQdHIoaW50ZXJuYWwpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQzREludGVybmFsKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQYnVm
ZmVyQ29udGV4dCgpCi17Ci0gICAgaW50IGZiQ29uZmlnQXR0cmlidXRlc1tdID0gewotICAgICAg
ICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1BCVUZGRVJfQklULAotICAgICAgICBHTFhfUkVOREVS
X1RZUEUsIEdMWF9SR0JBX0JJVCwKLSAgICAgICAgR0xYX1JFRF9TSVpFLCAxLAotICAgICAgICBH
TFhfR1JFRU5fU0laRSwgMSwKLSAgICAgICAgR0xYX0JMVUVfU0laRSwgMSwKLSAgICAgICAgR0xY
X0FMUEhBX1NJWkUsIDEsCi0gICAgICAgIEdMWF9ERVBUSF9TSVpFLCAxLAotICAgICAgICBHTFhf
U1RFTkNJTF9TSVpFLCAxLAotICAgICAgICBHTFhfU0FNUExFX0JVRkZFUlMsIDEsCi0gICAgICAg
IEdMWF9ET1VCTEVCVUZGRVIsIEdMX0ZBTFNFLAotICAgICAgICBHTFhfU0FNUExFUywgNCwKLSAg
ICAgICAgMAotICAgIH07Ci0gICAgaW50IHJldHVybmVkRWxlbWVudHM7Ci0gICAgR0xYRkJDb25m
aWcqIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhzaGFyZWREaXNwbGF5KCksIDAsIGZiQ29u
ZmlnQXR0cmlidXRlcywgJnJldHVybmVkRWxlbWVudHMpOwotICAgIGlmICghY29uZmlncykgewot
ICAgICAgICBmYkNvbmZpZ0F0dHJpYnV0ZXNbMjBdID0gMDsgLy8gQXR0ZW1wdCB3aXRob3V0IGFu
dGktYWxpYXNpbmcuCi0gICAgICAgIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhzaGFyZWRE
aXNwbGF5KCksIDAsIGZiQ29uZmlnQXR0cmlidXRlcywgJnJldHVybmVkRWxlbWVudHMpOwotICAg
IH0KLSAgICBpZiAoIXJldHVybmVkRWxlbWVudHMpIHsKLSAgICAgICAgWEZyZWUoY29uZmlncyk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIHdpbGwgYmUgcmVuZGVyaW5n
IHRvIGEgdGV4dHVyZSwgc28gb3VyIHBidWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZSBsYXJnZS4K
LSAgICBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJBdHRyaWJ1dGVzW10gPSB7IEdMWF9QQlVGRkVS
X1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSFQsIDEsIDAgfTsKLSAgICBHTFhQYnVmZmVyIHBi
dWZmZXIgPSBnbFhDcmVhdGVQYnVmZmVyKHNoYXJlZERpc3BsYXkoKSwgY29uZmlnc1swXSwgcGJ1
ZmZlckF0dHJpYnV0ZXMpOwotICAgIGlmICghcGJ1ZmZlcikgewotICAgICAgICBYRnJlZShjb25m
aWdzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgR0xYQ29udGV4dCBjb250ZXh0
ID0gZ2xYQ3JlYXRlTmV3Q29udGV4dChzaGFyZWREaXNwbGF5KCksIGNvbmZpZ3NbMF0sIEdMWF9S
R0JBX1RZUEUsIDAsIEdMX1RSVUUpOwotICAgIFhGcmVlKGNvbmZpZ3MpOwotICAgIGlmICghY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQz
REludGVybmFsKGNvbnRleHQsIHBidWZmZXIpOwotfQotCi1HcmFwaGljc0NvbnRleHQzREludGVy
bmFsKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQaXhtYXBDb250ZXh0KCkKLXsK
LSAgICBzdGF0aWMgaW50IHZpc3VhbEF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgR0xYX1JHQkEs
Ci0gICAgICAgIEdMWF9SRURfU0laRSwgMSwKLSAgICAgICAgR0xYX0dSRUVOX1NJWkUsIDEsCi0g
ICAgICAgIEdMWF9CTFVFX1NJWkUsIDEsCi0gICAgICAgIEdMWF9BTFBIQV9TSVpFLCAxLAotICAg
ICAgICBHTFhfRE9VQkxFQlVGRkVSLAotICAgICAgICAwCi0gICAgfTsKLQotICAgIFhWaXN1YWxJ
bmZvKiB2aXN1YWxJbmZvID0gZ2xYQ2hvb3NlVmlzdWFsKHNoYXJlZERpc3BsYXkoKSwgRGVmYXVs
dFNjcmVlbihzaGFyZWREaXNwbGF5KCkpLCB2aXN1YWxBdHRyaWJ1dGVzKTsKLSAgICBpZiAoIXZp
c3VhbEluZm8pCi0gICAgICAgIHJldHVybiAwOwotIAotICAgIEdMWENvbnRleHQgY29udGV4dCA9
IGdsWENyZWF0ZUNvbnRleHQoc2hhcmVkRGlzcGxheSgpLCB2aXN1YWxJbmZvLCAwLCBHTF9UUlVF
KTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFBpeG1hcCBwaXhtYXAgPSBYQ3JlYXRlUGl4bWFw
KHNoYXJlZERpc3BsYXkoKSwgRGVmYXVsdFJvb3RXaW5kb3coc2hhcmVkRGlzcGxheSgpKSwgMSwg
MSwgdmlzdWFsSW5mby0+ZGVwdGgpOwotICAgIGlmICghcGl4bWFwKSB7Ci0gICAgICAgIFhGcmVl
KHZpc3VhbEluZm8pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBHTFhQaXhtYXAg
Z2x4UGl4bWFwID0gZ2xYQ3JlYXRlR0xYUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgdmlzdWFsSW5m
bywgcGl4bWFwKTsKLSAgICBpZiAoIWdseFBpeG1hcCkgewotICAgICAgICBYRnJlZVBpeG1hcChz
aGFyZWREaXNwbGF5KCksIHBpeG1hcCk7Ci0gICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwoY29udGV4dCwgcGl4bWFwLCBnbHhQaXhtYXApOwotfQotCi1HcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdMWENvbnRleHQgY29udGV4
dCwgR0xYUGJ1ZmZlciBwYnVmZmVyKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBt
X3BidWZmZXIocGJ1ZmZlcikKLSAgICAsIG1fcGl4bWFwKDApCi0gICAgLCBtX2dseFBpeG1hcCgw
KQotewotfQotCi1HcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKEdMWENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwgR0xYUGl4bWFwIGdseFBp
eG1hcCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9wYnVmZmVyKDApCi0gICAg
LCBtX3BpeG1hcChwaXhtYXApCi0gICAgLCBtX2dseFBpeG1hcChnbHhQaXhtYXApCi17Ci19Ci0K
LUdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkK
LXsKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIC8vIFRoaXMgbWF5IGJlIG5lY2Vzc2Fy
eSB0byBwcmV2ZW50IGNyYXNoZXMgd2l0aCBOVmlkaWEncyBjbG9zZWQgc291cmNlIGRyaXZlcnMu
IE9yaWdpbmFsbHkKLSAgICAgICAgLy8gZnJvbSBNb3ppbGxhJ3MgM0QgY2FudmFzIGltcGxlbWVu
dGF0aW9uIGF0OiBodHRwOi8vYml0YnVja2V0Lm9yZy9pbG1hcmkvY2FudmFzM2QvCi0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCAwKTsKLQotICAgICAg
ICA6OmdsWE1ha2VDb250ZXh0Q3VycmVudChzaGFyZWREaXNwbGF5KCksIDAsIDAsIDApOwotICAg
ICAgICA6OmdsWERlc3Ryb3lDb250ZXh0KHNoYXJlZERpc3BsYXkoKSwgbV9jb250ZXh0KTsKLSAg
ICAgICAgbV9jb250ZXh0ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9wYnVmZmVyKSB7Ci0gICAg
ICAgIDo6Z2xYRGVzdHJveVBidWZmZXIoc2hhcmVkRGlzcGxheSgpLCBtX3BidWZmZXIpOwotICAg
ICAgICBtX3BidWZmZXIgPSAwOwotICAgIH0KLSAgICBpZiAobV9nbHhQaXhtYXApIHsKLSAgICAg
ICAgZ2xYRGVzdHJveUdMWFBpeG1hcChzaGFyZWREaXNwbGF5KCksIG1fZ2x4UGl4bWFwKTsKLSAg
ICAgICAgbV9nbHhQaXhtYXAgPSAwOwotICAgIH0KLSAgICBpZiAobV9waXhtYXApIHsKLSAgICAg
ICAgWEZyZWVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX3BpeG1hcCk7Ci0gICAgICAgIG1fcGl4
bWFwID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBpZiAoOjpnbFhHZXRDdXJyZW50Q29udGV4dCgpID09
IG1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9jb250ZXh0KQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKG1fcGJ1ZmZlcikgewotICAgICAgICA6OmdsWE1ha2VDdXJyZW50
KHNoYXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyLCBtX2NvbnRleHQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fZ2x4UGl4bWFwKTsKLSAgICA6OmdsWE1ha2VDdXJyZW50
KHNoYXJlZERpc3BsYXkoKSwgbV9nbHhQaXhtYXAsIG1fY29udGV4dCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRV9XRUJHTApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmU2
ZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNpbmNsdWRlIDxHTC9nbHgu
aD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKKy8v
IFdlIGRvIG5vdCB3YW50IHRvIGNhbGwgZ2xYTWFrZUNvbnRleHRDdXJyZW50IHVzaW5nIGRpZmZl
cmVudCBEaXNwbGF5IHBvaW50ZXJzLAorLy8gYmVjYXVzZSBpdCBtaWdodCBsZWFkIHRvIGNyYXNo
ZXMgaW4gc29tZSBkcml2ZXJzIChmZ2xyeCkuIFdlIHVzZSBhIHNoYXJlZCBkaXNwbGF5CisvLyBw
b2ludGVyIGhlcmUuCitzdGF0aWMgRGlzcGxheSogZ1NoYXJlZERpc3BsYXkgPSAwOworc3RhdGlj
IERpc3BsYXkqIHNoYXJlZERpc3BsYXkoKQoreworICAgIGlmICghZ1NoYXJlZERpc3BsYXkpCisg
ICAgICAgIGdTaGFyZWREaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOworICAgIHJldHVybiBnU2hh
cmVkRGlzcGxheTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBCZWNhdXNlIG9mIGRy
aXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUgYXJlIGFjdGl2ZSBwYnVm
ZmVycworLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMgYmVlbiBvYnNlcnZlZCB3
aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCisvLyBXZSBuZWVkIHRvIGVuc3VyZSB0
aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUgYXJlIHNldmVyYWwgcmVh
c29ucworLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2lsbCBzdGlsbCBiZSBhbGl2ZSBhdCBl
eGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5CisvLyBsZWFrcykgYW5kIHRoZSBwYWdl
IGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0aGUgWCBzZXJ2ZXIgdG8gY3Jhc2gu
CitzdGF0aWMgYm9vbCBjbGVhbmluZ1VwQXRFeGl0ID0gZmFsc2U7CitzdGF0aWMgVmVjdG9yPEdy
YXBoaWNzQ29udGV4dDNEKj4mIGFjdGl2ZUdyYXBoaWNzQ29udGV4dHMoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4sIGNvbnRleHRzLCAoKSk7
CisgICAgcmV0dXJuIGNvbnRleHRzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQor
eworICAgIHN0YXRpYyBib29sIGFkZGVkQXRFeGl0SGFuZGxlciA9IGZhbHNlOworICAgIGlmICgh
YWRkZWRBdEV4aXRIYW5kbGVyKSB7CisgICAgICAgIGF0ZXhpdCgmR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpjbGVhbnVwQWN0aXZlQ29udGV4dHNBdEV4aXQpOworICAgICAgICBhZGRlZEF0RXhp
dEhhbmRsZXIgPSB0cnVlOworICAgIH0KKyAgICBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCkuYXBw
ZW5kKGNvbnRleHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVtb3Zl
QWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAg
IGlmIChjbGVhbmluZ1VwQXRFeGl0KQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8R3Jh
cGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCk7Cisg
ICAgc2l6ZV90IGxvY2F0aW9uID0gY29udGV4dHMuZmluZChjb250ZXh0KTsKKyAgICBpZiAobG9j
YXRpb24gIT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgY29udGV4dHMucmVtb3ZlKGxvY2F0aW9u
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNsZWFudXBBY3RpdmVDb250
ZXh0c0F0RXhpdCgpCit7CisgICAgY2xlYW5pbmdVcEF0RXhpdCA9IHRydWU7CisKKyAgICBWZWN0
b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVHcmFwaGljc0NvbnRleHRz
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250ZXh0cy5zaXplKCk7IGkrKykKKyAg
ICAgICAgY29udGV4dHNbaV0tPn5HcmFwaGljc0NvbnRleHQzRCgpOworCisgICAgaWYgKCFnU2hh
cmVkRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworICAgIFhDbG9zZURpc3BsYXkoZ1NoYXJlZERp
c3BsYXkpOworICAgIGdTaGFyZWREaXNwbGF5ID0gMDsKK30KKworUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlKCkKK3sK
KyAgICBpZiAoIXNoYXJlZERpc3BsYXkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nl
c3MgPSB0cnVlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgc3VjY2VzcyA9IGlu
aXRpYWxpemVPcGVuR0xTaGltcygpOworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAg
fQorICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUqIGludGVybmFsID0gY3JlYXRlUGJ1ZmZlckNvbnRleHQoKTsK
KyAgICBpZiAoIWludGVybmFsKQorICAgICAgICBpbnRlcm5hbCA9IGNyZWF0ZVBpeG1hcENvbnRl
eHQoKTsKKyAgICBpZiAoIWludGVybmFsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIFRoZSBHcmFwaGljc0NvbnRleHQzRCBjb25zdHJ1Y3RvciByZXF1aXJlcyB0aGF0IHRoaXMg
Y29udGV4dCBpcyB0aGUgY3VycmVudCBPcGVuR0wgY29udGV4dC4KKyAgICBpbnRlcm5hbC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGludGVybmFsKTsKK30KKwor
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZVBidWZmZXJDb250ZXh0KCkKK3sKKyAgICBpbnQgZmJDb25maWdBdHRyaWJ1dGVzW10gPSB7Cisg
ICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgIEdMWF9S
RU5ERVJfVFlQRSwgR0xYX1JHQkFfQklULAorICAgICAgICBHTFhfUkVEX1NJWkUsIDEsCisgICAg
ICAgIEdMWF9HUkVFTl9TSVpFLCAxLAorICAgICAgICBHTFhfQkxVRV9TSVpFLCAxLAorICAgICAg
ICBHTFhfQUxQSEFfU0laRSwgMSwKKyAgICAgICAgR0xYX0RFUFRIX1NJWkUsIDEsCisgICAgICAg
IEdMWF9TVEVOQ0lMX1NJWkUsIDEsCisgICAgICAgIEdMWF9TQU1QTEVfQlVGRkVSUywgMSwKKyAg
ICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgR0xfRkFMU0UsCisgICAgICAgIEdMWF9TQU1QTEVTLCA0
LAorICAgICAgICAwCisgICAgfTsKKyAgICBpbnQgcmV0dXJuZWRFbGVtZW50czsKKyAgICBHTFhG
QkNvbmZpZyogY29uZmlncyA9IGdsWENob29zZUZCQ29uZmlnKHNoYXJlZERpc3BsYXkoKSwgMCwg
ZmJDb25maWdBdHRyaWJ1dGVzLCAmcmV0dXJuZWRFbGVtZW50cyk7CisgICAgaWYgKCFjb25maWdz
KSB7CisgICAgICAgIGZiQ29uZmlnQXR0cmlidXRlc1syMF0gPSAwOyAvLyBBdHRlbXB0IHdpdGhv
dXQgYW50aS1hbGlhc2luZy4KKyAgICAgICAgY29uZmlncyA9IGdsWENob29zZUZCQ29uZmlnKHNo
YXJlZERpc3BsYXkoKSwgMCwgZmJDb25maWdBdHRyaWJ1dGVzLCAmcmV0dXJuZWRFbGVtZW50cyk7
CisgICAgfQorICAgIGlmICghcmV0dXJuZWRFbGVtZW50cykgeworICAgICAgICBYRnJlZShjb25m
aWdzKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2Ugd2lsbCBiZSByZW5k
ZXJpbmcgdG8gYSB0ZXh0dXJlLCBzbyBvdXIgcGJ1ZmZlciBkb2VzIG5vdCBuZWVkIHRvIGJlIGxh
cmdlLgorICAgIHN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsgR0xYX1BC
VUZGRVJfV0lEVEgsIDEsIEdMWF9QQlVGRkVSX0hFSUdIVCwgMSwgMCB9OworICAgIEdMWFBidWZm
ZXIgcGJ1ZmZlciA9IGdsWENyZWF0ZVBidWZmZXIoc2hhcmVkRGlzcGxheSgpLCBjb25maWdzWzBd
LCBwYnVmZmVyQXR0cmlidXRlcyk7CisgICAgaWYgKCFwYnVmZmVyKSB7CisgICAgICAgIFhGcmVl
KGNvbmZpZ3MpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBHTFhDb250ZXh0IGNv
bnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KHNoYXJlZERpc3BsYXkoKSwgY29uZmlnc1swXSwg
R0xYX1JHQkFfVFlQRSwgMCwgR0xfVFJVRSk7CisgICAgWEZyZWUoY29uZmlncyk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZShjb250ZXh0LCBwYnVmZmVyKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVBpeG1hcENvbnRleHQoKQor
eworICAgIHN0YXRpYyBpbnQgdmlzdWFsQXR0cmlidXRlc1tdID0geworICAgICAgICBHTFhfUkdC
QSwKKyAgICAgICAgR0xYX1JFRF9TSVpFLCAxLAorICAgICAgICBHTFhfR1JFRU5fU0laRSwgMSwK
KyAgICAgICAgR0xYX0JMVUVfU0laRSwgMSwKKyAgICAgICAgR0xYX0FMUEhBX1NJWkUsIDEsCisg
ICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsCisgICAgICAgIDAKKyAgICB9OworCisgICAgWFZpc3Vh
bEluZm8qIHZpc3VhbEluZm8gPSBnbFhDaG9vc2VWaXN1YWwoc2hhcmVkRGlzcGxheSgpLCBEZWZh
dWx0U2NyZWVuKHNoYXJlZERpc3BsYXkoKSksIHZpc3VhbEF0dHJpYnV0ZXMpOworICAgIGlmICgh
dmlzdWFsSW5mbykKKyAgICAgICAgcmV0dXJuIDA7CisgCisgICAgR0xYQ29udGV4dCBjb250ZXh0
ID0gZ2xYQ3JlYXRlQ29udGV4dChzaGFyZWREaXNwbGF5KCksIHZpc3VhbEluZm8sIDAsIEdMX1RS
VUUpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBYRnJlZSh2aXN1YWxJbmZvKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUGl4bWFwIHBpeG1hcCA9IFhDcmVhdGVQaXht
YXAoc2hhcmVkRGlzcGxheSgpLCBEZWZhdWx0Um9vdFdpbmRvdyhzaGFyZWREaXNwbGF5KCkpLCAx
LCAxLCB2aXN1YWxJbmZvLT5kZXB0aCk7CisgICAgaWYgKCFwaXhtYXApIHsKKyAgICAgICAgWEZy
ZWUodmlzdWFsSW5mbyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEdMWFBpeG1h
cCBnbHhQaXhtYXAgPSBnbFhDcmVhdGVHTFhQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCB2aXN1YWxJ
bmZvLCBwaXhtYXApOworICAgIGlmICghZ2x4UGl4bWFwKSB7CisgICAgICAgIFhGcmVlUGl4bWFw
KHNoYXJlZERpc3BsYXkoKSwgcGl4bWFwKTsKKyAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlKGNvbnRleHQsIHBpeG1hcCwgZ2x4UGl4bWFwKTsKK30KKworR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR0xYQ29udGV4dCBjb250ZXh0
LCBHTFhQYnVmZmVyIHBidWZmZXIpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1f
cGJ1ZmZlcihwYnVmZmVyKQorICAgICwgbV9waXhtYXAoMCkKKyAgICAsIG1fZ2x4UGl4bWFwKDAp
Cit7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKEdMWENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwgR0xYUGl4bWFwIGdseFBpeG1h
cCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9wYnVmZmVyKDApCisgICAgLCBt
X3BpeG1hcChwaXhtYXApCisgICAgLCBtX2dseFBpeG1hcChnbHhQaXhtYXApCit7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCit7Cisg
ICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAvLyBUaGlzIG1heSBiZSBuZWNlc3NhcnkgdG8g
cHJldmVudCBjcmFzaGVzIHdpdGggTlZpZGlhJ3MgY2xvc2VkIHNvdXJjZSBkcml2ZXJzLiBPcmln
aW5hbGx5CisgICAgICAgIC8vIGZyb20gTW96aWxsYSdzIDNEIGNhbnZhcyBpbXBsZW1lbnRhdGlv
biBhdDogaHR0cDovL2JpdGJ1Y2tldC5vcmcvaWxtYXJpL2NhbnZhczNkLworICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgMCk7CisKKyAgICAgICAgOjpn
bFhNYWtlQ29udGV4dEN1cnJlbnQoc2hhcmVkRGlzcGxheSgpLCAwLCAwLCAwKTsKKyAgICAgICAg
OjpnbFhEZXN0cm95Q29udGV4dChzaGFyZWREaXNwbGF5KCksIG1fY29udGV4dCk7CisgICAgICAg
IG1fY29udGV4dCA9IDA7CisgICAgfQorCisgICAgaWYgKG1fcGJ1ZmZlcikgeworICAgICAgICA6
OmdsWERlc3Ryb3lQYnVmZmVyKHNoYXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyKTsKKyAgICAgICAg
bV9wYnVmZmVyID0gMDsKKyAgICB9CisgICAgaWYgKG1fZ2x4UGl4bWFwKSB7CisgICAgICAgIGds
WERlc3Ryb3lHTFhQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX2dseFBpeG1hcCk7CisgICAgICAg
IG1fZ2x4UGl4bWFwID0gMDsKKyAgICB9CisgICAgaWYgKG1fcGl4bWFwKSB7CisgICAgICAgIFhG
cmVlUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgbV9waXhtYXApOworICAgICAgICBtX3BpeG1hcCA9
IDA7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRl
eHRDdXJyZW50KCkKK3sKKyAgICBpZiAoOjpnbFhHZXRDdXJyZW50Q29udGV4dCgpID09IG1fY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1
cm47CisgICAgaWYgKG1fcGJ1ZmZlcikgeworICAgICAgICA6OmdsWE1ha2VDdXJyZW50KHNoYXJl
ZERpc3BsYXkoKSwgbV9wYnVmZmVyLCBtX2NvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUKG1fZ2x4UGl4bWFwKTsKKyAgICA6OmdsWE1ha2VDdXJyZW50KHNoYXJl
ZERpc3BsYXkoKSwgbV9nbHhQaXhtYXAsIG1fY29udGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRV9XRUJHTAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>